2.0
===

Ben Woodard via Libabigail (5):
      Fix declaratons of conditionally defined functions
      Fix declaratons of conditionally defined functions
      Bug 27512 - Remove broken zip-archive support
      Fix trivial typo when printing version string
      Fix trivial typo when printing version string

Dodji Seketeli (90):
      configure: add --enable-rpm415 option
      Add check-self-compare to release regression testing
      Bump version number to 2.0
      Add missing SPDX headers to source files not specifying any license
      Add has-spdx-header.sh script
      Add replace-spdx-license.sh script
      Add helper files to perform the re-licensing
      Re-license the project to Apache v2 With LLVM Exception
      Add the LICENSE.txt file
      Delete COPYING* files
      Add a license-change-2020.txt file
      Teach Automake that COPYING* files are gone from sources
      CONTRIBUTING: Update instructions about regression tests
      Use C++11 for the code base
      ir: Add better comments to types_have_similar_structure
      mainpage: Update web page for 1.8 release
      Bug 26992 - Try harder to resolve declaration-only classes
      Bug 27204 -  potential loss of some aliased ELF function symbols
      Ignore duplicated functions and those not associated with ELF symbols
      Bug 27236 - Pointer comparison wrongly fails because of typedef change
      Bug 27233 - fedabipkgdiff fails on package gnupg2 from Fedora 33
      Bug 27232 - fedabipkgdiff fails on gawk from Fedora 33
      dwarf-reader: Support fast DW_FORM_line_strp string comparison
      Bug 27255 - fedabipkgdiff fails on nfs-utils on Fedora 33
      Bug 26684 - Support DW_AT_data_bit_offset attribute
      Bump ABIXML format version to 2.0
      Bug 27165 - Better support multi-language binaries
      Bug 27331 - Data member offset change not considered local
      Bug 27267 - Better support for opaque enum types
      dwarf-reader: Use DW_FORM_line_strp only if it's present
      Use generic internal type name to canonicalize anonymous enums
      Don't consider type name when comparing typedefs
      tests: Update to catch.hpp v2.13.4 and fix #2178
      Better sorting of (anonymous) types in ABIXML files
      dwarf-reader: Keep stable order when de-duplicating class definitions
      tests/catch.hpp: Add SPDX header back
      Revert "Fix declaratons of conditionally defined functions"
      dwarf-reader: Support more DWARF-5 type DIEs
      Bug 27569 - abidiff misses a function parameter addition
      Bug 27598 - abidiff mishandles union member functions
      dwarf-reader: Canonicalize opaque enums and classes
      dwarf-reader: properly set artificial-ness in opaque types
      reader: Handle 'abi-corpus' element being possibly empty
      reader: Use xmlFirstElementChild and xmlNextElementSibling rather than xml::advance_to_next_sibling_element
      reader: Use xmlFirstElementChild/xmlNextElementSibling to iterate over children elements
      Fix thinko in configure.ac
      Miscellaneous indentation and comments cleanups
      Fix DWARF type DIE canonicalization
      Peel array types when peeling pointers from a type
      Add primitives callable from the command line of the debugger
      Detect failed self comparison in type canonicalization of abixml
      Detect abixml canonical type instability during abidw --debug-abidiff
      Introduce artificial locations
      abixml reader: Fix recursive type definition handling
      xml reader: Fix recursive qualified & reference type definition
      ir: Enable setting breakpoint on first type inequality
      Add environment::{get_type_id_from_pointer,get_canonical_type_from_type_id}
      location:expand() shouldn't crash when no location manager available
      ir: make 'debug(artefact)' support showing enums
      reader: Canonicalizing a type once is enough
      rhbz1951526 - SELF CHECK FAILED for 'gimp-2.10'
      Fix recursive array type definition
      abidw: Remove temporary .typeid files when using --debug-abidiff
      abg-reader: Fix typo
      doc: Fix typo
      Revert "Fix trivial typo when printing version string"
      Bug 27980 - Fix updating of type scope upon type canonicalization
      ir: Improve the debugging facilities
      ir: Tighten the test for anonymous data member
      ir: Tighten type comparison optimization for Linux kernel binaries
      Bug 27995 - Self comparison error from abixml file
      Bug 27236 - Fix the canonical type propagation optimization
      Bug 27236 - Allow updating classes from abixml
      Bug 27236 - Don't forget to emit some referenced types
      RHBZ 1925886 - Compare anonymous types without qualified names
      Bug 27985 - abidiff: bad array types in report
      RHBZ-1944096 - assertion failure during self comparison of systemd
      writer: escape enum linkage name in abixml
      ir: Avoid infinite loop during type canonicalization
      ir: Fix canonical type propagation cancelling
      xml-reader: Get back to original way of building qualified types
      writer: Avoid sigsev on types with no translation unit
      RHBZ1951496 - ir: Acknowledge that "void type" is not canonicalized
      RHBZ1944102 - self comparing ABI of protobuf-3.14.0-2.el9 failed
      abipkgdiff: Fix showing added/removed files
      Bug 28316 - Failure to represent typedef named anonymous enums
      abipkgdiff: Do not erase working dirs before we are done using them
      Bug 27970 - Duplicated member functions cause spurious self comparison changes
      dwarf-reader: Indent
      Bug 27086 - Consider all C++ virtual destructors when there are many

Giuliano Procida (17):
      abidiff: support --dump-diff-tree with --leaf-changes-only
      ir: Arrays are indirect types for type structure similarity purposes
      Add qualifier / typedef / array / pointer test
      Refresh ABI cross check test files
      abidiff: do not qualify member names in diff report
      abg-dwarf-reader: Fix typo in compare_dies_string_attribute_value
      DWARF reader: Interpret ARM32 ELF addresses correctly
      DWARF reader: Comment ARM32 ELF address interpretation
      dwarf-reader: Treat union members as public by default.
      abg-writer.cc: fix write_elf_symbol_reference loop
      dwarf-reader: Create new corpus unconditionally
      abg-reader: Ensure corpus always has a symtab reader
      abg-reader: Create a fresh corpus object per corpus
      ir: remove "is Linux string constant" property from elf_symbol
      abg-ir.h: add declaration of operator<< for elf_symbol::visibility
      PR28060 - Invalid offset for bitfields
      abg-writer: faster referenced type emission tests

Matthias Maennich (34):
      Replace individual license references with SPDX Identifiers
      Drop C++03 compatibility layer
      Remove <functional> usages from abg_compat
      Remove <memory> usages from abg_compat
      Remove <unordered_map> usages from abg_compat
      Remove <unordered_set> usages from abg_compat
      Drop unneccessary includes of abg-cxx-compat.h
      clang-format: define C++ standard to improve formatting
      Update catch2 testing framework: v1.12.2 -> v2.13.3
      abg-ir: Optimize calls to std::string::find() for a single char.
      abipkgdiff: Address operator precedence warning
      abg-cxx-compat: add simplified version of std::optional
      abg-ir: elf_symbol: add is_in_ksymtab field
      abg-ir: elf_symbol: add is_suppressed field
      dwarf-reader split: create abg-symtab-reader.{h,cc} and test case
      clang-format: Minor correction to not break parameters on the first line
      Refactor ELF symbol table reading by adding a new symtab reader
      Integrate new symtab reader into corpus and read_context
      corpus: make get_(undefined_)?_(var|fun)_symbols use the new symtab
      corpus: make get_unreferenced_(function|variable)_symbols use the new symtab
      abg-reader: avoid using the (var|function)_symbol_map
      dwarf-reader: read_context: use new symtab in *_symbols_is_exported
      Switch kernel stuff over to new symtab and drop unused code
      abg-elf-helpers: migrate ppc64 specific helpers
      symtab_reader: add support for ppc64 ELFv1 binaries
      abg-corpus: remove symbol maps and their setters
      dwarf reader: drop (now) unused code related to symbol table reading
      test-symtab: add tests for whitelisted functions
      symtab/dwarf-reader: allow hinting of main symbols for aliases
      dwarf-reader/writer: consider aliases when dealing with suppressions
      symtab: Add support for MODVERSIONS (CRC checksums)
      elf-helpers: refactor find_symbol_table_section
      symtab-reader: add support for binaries compiled with CFI
      Consistently use std::unique_ptr for private implementations (pimpl)

1.8
===
Dodji Seketeli (62):
      Bump version number to 1.8
      Update fedabipkgdiff tests according to commit b602f46c
      abipkgdiff: fix documentation of --impacted-interface
      dwarf-reader: Fix bloom filter access in GNU_HASH section
      Update tests/data/test-abidiff-exit/test-leaf-peeling-report.txt
      Update the mailing list registration form on the web page
      abipkgdiff: Fix race condition while using private types suppr specs
      Fix compilation with g++ 4.8.5 on el7
      Bug 25977 - runtestabidiffexit regression on EL7
      Bug 25986 - Wrong name of function type used in change report
      Add -g back to ABIGAIL_DEVEL
      {default,leaf}-reporter: group data members changes reports together
      dwarf-reader: support several anonymous data members in a given class
      Bug 25661 - Support data member replacement by anonymous data member
      Bug 25989 - type_topo_comp doesn't meet irreflexive requirements
      abigail.m4: Fix copyright notice
      Bug 26127 - abidw --annotate emits incomplete function types
      Bug 26135 - Wrong linkage name causes anonymous classes miscomparison
      Support declaration-only enums in DWARF reader.
      reader: Remove useless support for WIP types
      Pimpl-ify traversable_base and remove its unused traverse method
      dwarf-reader: re-indent a block of code
      Bug 26261 - Fix logic for canonicalizing DW_TAG_subroutine_type DIEs
      Use flat representation to canonicalize anonymous classes and unions
      writer: Avoid using dynamic hashing in type maps
      Fix thinko in get_vmlinux_path_from_kernel_dist
      Bug 26309 - Wrong leaf reporting of changes to typedef underlying type
      Make abidiff and abidw support several --headers-dir{1,2} options
      Bug 26568 - Union should support more than one anonymous member
      Consider the implicit 'this' parameter when comparing methods
      Fix redundancy detection in the diff graph
      Structurally compare the few non-canonicalized types in general
      configure: Support ABIGAIL_NO_OPTIMIZATION_DEBUG environment variable
      abg-tools-utils: Fix comment
      Bug 26770 - Spurious declaration-only-ness induces spurious type changes
      update-test-output.py: Update syntax
      Update test-libandroid.so.abi
      Bug PR26739 - Handle qualified typedef array types
      writer: Sort decls and fix topological sorting for types
      ir: Add equality op to array_type_def::subrange_type::bound_value
      Make sure to canonicalize all types but decl-only classes
      Bug 26769 - Fix missing types in abixml output
      abipkgdiff: Add a new --self-check option
      fedabipkgdiff: make --self-compare use abipkgdiff --self-check
      dwarf-reader: support artificially generated translation units
      tests/data/test-fedabipkgdiff: Update reference output
      abipkgdiff: Avoid uncertainty when sorting worker tasks
      reader: Read array subrange length into an uint64_t
      Bug 26780 - Fix array subrange bounds (de)serialization
      writer: Emit definitions of declarations when they are present
      ir: Introduce internal pretty representation for anonymous classes
      reader: Don't lose anonymous-ness of decl-only classes
      dwarf-reader: Avoid having several functions with the same symbol
      abidw: make --abidiff report any change against own ABIXML
      abipkgdiff: make --self-check to fail on any change against own ABIXML
      writer: fix off-by-one error in assertion
      reader: Fix off-by-one error in assert
      dwarf-reader: Bug 26908 - don't crash on empty DW_TAG_partial_unit
      configure: add --enable-rpm415 option
      Add check-self-compare to release regression testing
      Update the Changelog for 1.8
      Update NEWS file for 1.8

Giuliano Procida (112):
      Correct spelling of "alignment".
      Correct various inconsequential typos.
      Add space missing between "[C]" tag and description of changed item.
      Fix the reporting of leaf change statistics.
      abisym: Remove leading space in output.
      abg-comparison.cc: Remove stray function declaration.
      Fix spurious new lines after diff sections.
      Add more leaf change reporting.
      Fix interaction of --redundant and --leaf-changes-only options.
      abg-leaf-reporter.cc: Fix indentation of function parameter diffs.
      Eliminate some unnecessary blank lines in diff output.
      Output 2-space indentation consistently.
      Treat function type changes as local.
      Tag add/remove/change lines unconditionally with [A], [D], [C].
      dwarf-reader: Use all bits of Bloom filter words.
      Ensure change_kind enum values are used consistently.
      Eliminate redundancy in representation of local change kinds.
      abg-ir.cc: Fix peel_typedef_type(const type_base*).
      abg-ir.cc: Remove always-true check.
      abg-ir.cc: Improve types_have_similar_structure.
      abidiff: Remove some more unnecessary blank lines.
      abg-reader.cc: Fix code indentation and tabify.
      abg-ir.cc: Add types_have_similar_structure tests.
      abidiff: Clean up new lines between sections.
      abidiff: Remove blank line after base class diffs.
      abidiff: Fix enum impacted interfaces blank line.
      abidiff: Remove member function diff blank lines.
      abidiff: Fix variable declaration formatting.
      abidiff: Eliminate leaf mode double blank lines.
      abidiff: Remove new lines after parameter diffs.
      Fix size calculations for multidimensional arrays.
      abidiff: Remove blank line after typedef changes.
      test-diff-suppr.cc: Add missing tests.
      abidiffpkg: Remove stray test report file.
      abg-dwarf-reader.cc: Avoid division by zero.
      Rename test-abidiff-exit/test-leaf[0-3] files.
      test-abidiff-exit.cc: Drop redundant --redundant.
      abidiff: More compact references to prior diffs.
      abg-reporter-priv.cc: Fix anonymous member size change reports.
      abg-reporter-priv.cc: Improve readability of represent helper function.
      abidiff: Document and refresh tests.
      Fix variable suppression name_not_regex.
      test35-leaf.suppr: fix regex typo.
      test24-soname-suppr*txt: Fix suppression syntax.
      Add tests for declaration-only struct diffs.
      abidiff: Blank line after declaration-only diff.
      abidiff: Omit declaration-only type size 0 diffs.
      Move regex definitions to own files.
      Move libxml bits out of abg-sptr-utils.h.
      Simplify generation of symbol whitelist regex.
      Remove excess whitespace.
      Remove stray semicolons.
      Eliminate redundant conditional operators.
      Make set_drops_artifact_from_ir non-const.
      Hoist some common expressions evaluating offsets.
      Tidy #includes in a few files.
      Document ^_^ regex in generate_from_strings.
      Escape names used in symbol whitelisting regex.
      abg-suppression.cc: More uniform variable naming.
      Add POSIX regex wrapper functions.
      Use regex::compile wrapper instead of regcomp.
      Tidy checks for sufficient suppression properties.
      Use regex::match wrapper instead of regexec.
      Refactor read_parameter_spec_from_string logic.
      abg-reader.cc: Remove key_replacement_type_map.
      Let std::unordered_map::operator[] insert keys.
      doc: Fix sufficient suppression property lists.
      Tidy get_pretty_representation qualified_name.
      clang-format: set continuation indentation to 2
      Fix HARMLESS_SYMBOL_ALIAS_CHANGE_CATEGORY spelling
      Eliminate non-ASCII characters.
      abg-writer: Add support for stable hash type ids.
      Fix leaf-mode formatting of decl <-> defn diffs.
      Fix bug that suppressed DWARF read tests.
      get_canonical_type_for: restore environment better
      Improve code comments and whitespace.
      Refactor d.context() as ctxt in report(enum_diff).
      Tidy build_enum_type state variables.
      Rename declaration-definition change category.
      abg-ir.cc: Remove unused re_canonicalize function.
      Support incomplete enums in core and diff code.
      Add declaration-only enums to XML reader/writer.
      Add tests for declaration-only enums.
      Use pointers not strings in type graph comparison.
      abg-writer.cc: Clean up new line emission.
      reporter: Fix report whitespace typos.
      Fix corpus_diff::has_net_changes for --leaf-changes-only mode
      abg-ir.cc: Tidy some operator== definitions
      Fix --type-id-style hash for empty internal names.
      abg-comparison.cc: Tidy some corpus_diff code
      abg-ir.cc: Refactor operator== methods with helper function
      abg-comparison.h: Remove stray declaration
      Remove unused is_reference_or_pointer_diff.
      Simplify peel_typedef_pointer_or_reference_type
      Fix inheritance of scope_decl::insert_member_decl
      Enable Clang's -Werror-overloaded-virtual.
      abg-ir.cc: Fix incorrect pop of compared types.
      Remove ABI XML test data file blank lines
      abg-writer.cc: Fix indentation of XML output
      abg-ir.cc: Remove duplicated line of code
      Make decl_names_equal more accurate
      Fix decl_base comparison function
      Fix maybe_report_data_members_replaced_by_anon_dm
      Improve documentation of abidiff --type-id-style
      DWARF: look up DW_AT_declaration non-recursively
      DWARF: track chained DIE declaration-only status
      abg-corpus.cc: report architecture discrepancies
      Add missing newlines to end of test files.
      Fix two wrongs in test suppression regex
      Stabilise sort of canonical types
      Improve and stabilise sort of member functions
      Improve enum synthetic type names

Mark Wielaard (10):
      Add --header-file option to add individual public header files.
      Add --drop-private-types to abidw.
      Add --drop-undefined-syms to abidw.
      Add no-parameter-names to drop function parameter names.
      Add --no-elf-needed option to drop DT_NEEDED list from corpus.
      Rename read_elf_symbol_binding to read_elf_symbol_visibility.
      Add --no-write-default-sizes option.
      Don't iterate before the start of a RandomAccessOutputIterator.
      dwarf-reader: get subrange_type bounds signedness from underlying type
      Assume subrange bounds types are unsigned if no underlying type is given.

Matthias Maennich (38):
      dwarf-reader: gnu_hash_tab lookup: fix overflow in bloom hash calculation
      configure: add support for thread sanitizer (--enable-tsan)
      abg-workers: guard bring_workers_down to avoid dead lock
      abidiff: fix documentation of --impacted-interfaces
      configure: add support for memory sanitizer (--enable-msan)
      test-read-dwarf: ensure in_elf_path exists and add missing test files
      dwarf-reader: remove superfluous ABG_ASSERT
      make: add distcheck-fast target
      abg-dwarf-reader: simplify symbol map update
      tests: parallelize diff-suppr test
      abg-dwarf-reader split: create abg-elf-helpers.{h,cc} and test case
      abg-elf-helpers: move some elf helpers from abg-dwarf-reader
      abg-elf-helpers: move some versioning helpers from abg-dwarf-reader
      abg-elf-helpers: move some kernel helpers from abg-dwarf-reader
      abg-elf-helpers: consolidate the is_linux_kernel* helpers
      abg-dwarf-reader: migrate more ELF helpers to elf-helpers
      abg-elf-helpers: migrate more elf helpers (architecture specific helpers)
      abg-elf-helpers: migrate maybe_adjust_et_rel_sym_addr_to_abs_addr
      test-types-stability: parallelize test case alternatives
      tests: reorder test execution to optimize 'make check' runtime
      corpus/writer: sort emitted translation units by path name
      configure: set -Wno-error-overloaded-virtual for clang builds
      tests/.gitignore: ignore all files starting with runtest*
      dwarf-reader: read_context: drop some unused accessor methods
      cxx-compat: add test suite for cxx-compat
      configure: add ABIGAIL_DEBUG options
      configure: add more diagnostic options when ABIGAIL_DEVEL is set
      tests: Add symtab test suite
      tests: Add kernel symtab test suite
      dwarf-reader: Remove unused code
      dwarf-reader: read_context: drop unused symbol versioning code
      abg-reporter: fully qualify std::string and std::ostream
      abipkgdiff: remove unused includes of elfutils/libdw.h and elf.h
      dwarf-reader: get_die_source: always initialize return value
      cleanup: std::weak_ptr use: replace manual lock by std::weak_ptr::lock
      dwarf-reader: fix lookup for repeated translation unit paths
      dwarf-reader: Ignore zero length location expressions from DW_AT_location
      abipkgdiff: minor cleanups

1.7
==
Dodji Seketeli:
      Internal pretty repr of union cannot be flat representation
      Fix anonymous union constructed under the wrong context
      Propagate private type diff category through refs/qualified type diffs
      Add test for the fix for PR24410
      Fix "Add test for the fix for PR24410"
      Bug 24430 - Fold away const for array types
      Bug 24431 - ELF reader can't interpret ksymtab with Kernel 4.19+
      Bug 24431 - ELF reader fails to determine __ksymtab format
      Enable building with AddressSanitizer activated
      Fix a memory leak in real_path
      Delay canonicalization for array and qualified types
      abg-tools-utils.cc: Plug a leak in find_file_under_dir
      Add --enable-{asan,ubsan} configure options
      Canonicalize types non tied to any DWARF DIE
      Don't try to de-duplicate all anonymous struct DIEs
      Use canonical types hash maps for type IDs in abixml writer
      Handle several member anonymous types of the same kind
      Better handle several anonymous types of the same kind
      Fix logic of get_binary_load_address
      Handle Linux kernel binaries with no __ksymtab section
      Bug 24560 - Assertion failure on an abixml with an anonymous type
      Bug 24552 - abidiff fails comparing a corpus against a corpus group
      Take anonymous scopes into account when comparing decls
      [dwarf-reader] const-ify Dwarf_Die* use in many places
      [dwarf-reader] Re-use function types inside a given TU
      [dwarf-reader] Better use of linkage name for fn decl de-duplication
      [dwarf-reader] Optimize speed of compare_as_decl_dies
      [dwarf-reader] Fix indentation in compare_dies_string_attribute_value
      Fully account for anonymous-ness of scopes when comparing decl names
      Bug 24731 - Wrongly reporting union members order change
      Make abidiff --harmless show harmless changes in unions
      [dwarf-reader] Constify the first parameter of maybe_canonicalize_type
      [dwarf-reader] Make sure to canonicalize anonymous types
      Implement a poor-man's RTTI for performance
      [xml-writter] Avoid using RTTI when dynamically hashing types
      [xml-writter] Speedup function_type::get_cached_name
      [xml-writer] Remove a useless kludge
      Misc indent cleanup
      Implement fast comparison of Linux Kernel types when applicable
      [ir] Fix indentation and add comments
      Add timing to the verbose logs of abidw
      Bug 24787 - Filter out enum changes into compatible integer types
      Serialize canonical types to avoid testing if types have been emitted
      Detect the presence of R_AARCH64_{ABS64, PREL32} macros
      Bug 25007 - Don't use section-relative symbol values on ET_REL binaries
      Remove the elf_symbol::get_value property
      Guard testing v4.19+ AARCH64 kernel module loading for EL6 support
      Fix reading of relocation sections when endianness mismatches
      [has_type_change] Better detect type size changes
      Better propagation of suppressed-ness to function types
      Support the "name_not_regexp" property in the [suppress_type] section
      PR25042 - Support string form DW_FORM_strx{1,4} from DWARF 5
      Fix a typo in a comment of abg-dwar-reader.cc
      Fix thinkos in DW_FORM_strx detection in configure.ac
      PR25058 - Support decl DIEs referring to symbols using DW_AT_ranges
      PR25058 - Better support fn DIEs referring to symbols using DW_AT_ranges
      [abg-comparison.cc] Fix comments typo
      Support symbol_name_not_regexp in [suppress_{function, variable}]
      Bug 25095 - Apply symbol white lists to ELF symbols
      Bug 25128 - Leaf diff reporter shouldn't compare decl-only classes
      Bug 25128 - Handle decl-only classes that differ only in size
      Small style fix in abg-default-reporter.cc
      Bug 24690 - Support comparing non-reachable types of a binary
      Misc typo fixes
      Bug 25409 - Fix reading layout-offset-in-bits attribute of data-member
      suppression: Better handle soname/filename properties evaluation
      abixml-reader: Support SONAME related properties on file suppression
      tools-utils: Drop redefinition of fopen when BAD_FTS is defined
      gen-changelog.py: Update the script for python3

Giuliano Procida:
      Remove redundant mention of libtool in COMPILING documentation.
      Fix typo in COMPILING.
      Don't ignore options when diffing translation units (.bi files).
      Sort kernel module object files before processing them.
      Fix stray comma in leaf-changes-only mode.

Jessica Yu:
      Support pre and post v4.19 ksymtabs for Linux kernel modules

Mark Wielaard:
      Fix an undefined behaviour in has_var_type_cv_qual_change
      Don't try to read a build_id as string in find_alt_debug_info_link.

Matthias Maennich:
      dwarf-reader: fix undefined behaviour in get_binary_load_address
      Add .clang-format approximation
      abg-writer: Simplify 'annotate' propagation
      Add deprecation facilities
      abg-writer: Refactor write_translation_unit API
      abg-writer: Refactor write_corpus API
      abg-writer: Refactor write_corpus_group API
      write_context: allow mutating the ostream used
      abidw: Consolidate setting options
      Make write_architecture and write_corpus_path flags in the write_context
      abidw: add option to omit the compilation directory
      abidw: add option to only emit file names (--short-locs)
      abg-writer: drop deprecated API
      .gitignore: Add libabigail-?.* *.orig files
      .clang-format: Add more options for match existing coding style
      abg-reporter.h: add missing includes / using declarations
      Drop requirement to compile with GNU extensions
      Update tests/.gitignore to ignore runtesttoolsutils
      Add compatibility layer for C++11 mode
      abg-tools-utils: add missing header include guards
      Ensure a consistent C++ standard use
      abg-dwarf-reader: detect kernel modules without exports as such
      dwarf-reader: read_corpus_from_elf: unconditionally load elf properties
      kmidiff: fix help message
      dwarf-reader: refactor try_reading_first_ksymtab_entry_using{pre,}_v4_19_format
      dwarf-reader: add support for symbol namespaces in ksymtab entries
      abg-dwarf-reader: resolve relocation sections by index
      dwarf-reader: relax restriction about relocation sections in try_reading_first_ksymtab_entry
      Add (undocumented) support for version suffixes
      abidiff/kmidiff: do not default-suppress added symbols
      abg-reader: handle empty corpus nodes in xml representation
      corpus: is_empty: consider actual translation unit contents
      writer: completely skip over empty corpora
      KMI Whitelists: Add functionality to make whitelists additive
      KMI Whitelists: Drop old whitelist extraction methods
      clang-format: Better approximation for binary operators and assignments
      dwarf-reader: handle symtab.section_header.sh_entsize == 0
      dwarf-reader: handle binaries with missing symtab
      Fix / add include guards
      abg-fwd: drop duplicate forward declaration for corpus_sptr
      Testing: add Catch Unit test framework
      Fix some parameter name inconsistencies
      abg-comparison: prefer .empty() over implicit bool conversion of .size()
      abg-dwarf-reader: zero initialize local Dwarf_Addr values
      abg-workers: Rework the worker queue to improve concurrent behaviour
      abg-fwd.h: fix mismatched tags for ir_node_visitor
      abilint: fix return types bool -> int
      abg-reader: clarify boolean use of assignment
      diff-utils: point: fix postfix decrement/increment operator
      add missing virtual destructors
      viz-dot: remove unused members from dot
      suppressions: drop unused parameter from type_is_suppressed
      ir: drop unused data members from {environment,qualified_name}_setter
      distinct_diff: avoid expression with side effects within typeid
      dwarf-reader: fix recursion in expr_result::operator&
      Update .gitignore files to ignore typical dev side products
      dwarf-reader: Fix comments for try_reading_first_ksymtab_entry_using_{pre_,}v4_19_format
      dwarf-reader: templatize read_int_from_array_of_bytes
      Bug 24431 Read 32bit values when testing for the v4.19 symbol table format
      Bug 24431 Treat __ksymtab as int32_t for v4.19+ kernels


1.6
===
Dodji Seketeli:
      Bump version number to 1.6
      Update website for 1.5
      Support having several debuginfo search dirs for a binary
      Add a --fail-no-debug-info to abidiff
      Some light style change in abidiff.cc
      Add basic support for Fortran binaries
      Update copyright for 2019
      Bug 23044 - Assertions with side effects
      Separate public types of first binary from those of the second
      Add (very) basic support for Rust
      Support some new DWARF language encoding for C and C++
      Fix a thinko
      Overhaul detection the DW_LANG_* enumerators from dwarf.h
      Fix a typo in the recent Rust support and update regression tests
      Conditionalize the Rust support regression test
      Properly add the new rust tests to EXTRA_DIST
      Bug 20175 - Classify CV qual changes in variable type as harmless
      Better comments in the comparison engine
      Bug 24139 - Support suppressing some enumerator changes
      Small apidoc fix
      Bug 24157 - Wrong support of Ada ranges
      Bug 24188 - Assertion failed while analysing a Fortran binary
      Avoid over-suppressing fns & vars when analysing the Kernel
      Do not build DIE -> parent map just because we see an asm TU
      PR24257 - Handle DW_TAG_typedef with no underlying type
      Better detection of void* to something* change
      Add ir::{lookup_data_member, get_function_parameter}
      Better pointer name equality optimization in DIE de-duplication code
      Misc cleanups
      Bug 24378 - DW_TAG_subroutine_type as a DIE scope causes infinite loop
      Add missing assignment operators

Mark Wielaard:
      Conditionalize the use of DW_LANG_C_plus_plus_03 and DW_LANG_Rust

Xiao Jia via libabigail:
      Some documentation fixes

1.5
===
Dodji Seketeli:
      Bug 23533 - Accept '=' in ini property values
      PR23641 - Type definition DIE matched by a supprspec but not its decl
      PR23641 - confusion when a type definition DIE is matched by a supprspec and its decl DIEs aren't
      Bug 23708 - categorize void* to pointer change as harmless
      Bug rhbz1638554 - assertion failed in is_mostly_distinct_diff
      Bump version number to 1.5
      Allow use of python even when fedabipkgdiff is disabled
      Make test-ir-walker work on ELF binaries directly
      Fix apidoc of dwarf_reader::get_soname_of_elf_file
      Add option to avoid walking abigail::ir nodes twice
      Fix propagation of private type suppression category
      Categorize CV qualifier changes on fn return types as harmless
      Misc comment fix
      Add default suppression specification for the krb5 project
      Add default suppression specification for the libvirt project
      Better support array with unknown upper bound
      Define UINT64_MAX when it's not defined

1.4
===
Dodji Seketeli:
      Fix typo in tests/runtestdefaultsupprs.py
      Remove references, arrays and fn parms from leaf diff nodes
      Improve detection of local *type* changes
      Better detect when diff nodes only carry local type changes
      Better detect when pointer and qualified types carry local changes
      Use the flat representation for anonymous struct/unions
      Add test44-anon-struct-union-v{0,1}.o to source distribution
      Explicitely detect anonymous data member changes
      Identify a function using its symbol name and version
      Fix indentation of help string in abipkgdiff
      Fix redundancy detection through fn ptr and typedef paths
      Filter out changes like type to const type
      Initial basic support of union type in suppression specifications
      Ensure die_function_type_is_method_type returns a class type die
      Fix race between runtestdefaultsupprs{py3.sh,.py}
      Allow square brackets in ini property values
      Properly add test materials for test-diff-suppr/test38-char-class-in-ini*

1.3
===
Chenxiong Qi:
      Bug 22722 - Make fedabipkgdiff and its tests support both python 3 and 2

Dodji Seketeli:
      Report change locations in leaf reports
      Skip changes to function *types* in the leaf reporter
      Make abipkgdiff avoid comparing private DSOs from RPMs
      Detect the presence of 'rpm' as it's now needed by abipkgdiff
      Do not enable fedabipkgdiff tests if fedabipkgdiff itself is disabled
      Don't crash when invoking kmidiff with no debug info root dir
      Don't possibly forget type definition when reading a CorpusGroup
      Do not show decl-only-to-def changes in the leaf reporter
      Overhaul of the report diff stats summary
      Do not mark "distinct" diff nodes as being redundant
      Fix meaning of "harmless name change" to avoid overfiltering
      Better handle category propagation of pointer changes
      Improve function changes reporting in leaf and default mode
      Don't filter out typedef changes with redundant underlying type changes
      Only show leaf type changes in the leaf type changes section
      Fix leaf report of class data member changes
      Always show redundant changes in leaf mode
      Avoid reporting an enum change if it has already been reported
      When we say a change was reported earlier give its source location
      [abipkgdiff]: in leaf mode we always show redundant changes
      Update tests for the "better leaf mode redundancy management" patchset
      Use absolute builddir paths in automake test files
      Represent sizes and offsets in bytes and hexadecimal values
      Initial support of anonymous data members
      Show data member offsets in bytes too
      Sort the output of the leaf reporter
      Use the dynamically selected python for Koji configure tests
      Use the correct python interpreter in runtestdefaultsupprs.py
      Handle cases where no python2 interpreter is found
      Don't bail because "rpm" issued an error

Jonathan Wakely:
      Remove assertion with side-effects
      Remove unused local set<string> variables
      Rename misleading remove_trailing_white_spaces functions
      Use std::string::substr instead of appending single chars

1.2
===
Dodji Seketeli:
      Add newline at end of version string display
      Initial support for Ada ranges
      Bug 22913 - Correctly de-dup pointers to anonymous structs inside a TU
      Fix the output indentation of abidiff --help
      Fix indentation in the DWARF reader
      Update abipkgdiff documentation wrt suppression specifications
      Fix typo in abipkgdiff documentation

1.1
===
Dodji Seketeli:
      Bug 22076 - Disable fedabipkgdiff for old koji clients
      Bug 22436 - make abipkgdiff accept several debuginfo packages
      Bug 22488 - Make abipkgdiff handle different binaries with same basename
      Bug 22437 - Make fedabipkgdiff use all debug info RPMs of a sub-RPM
      Bug 22684 - Add --d{1,2} options to kmidiff
      Bug 22692 - Consider Java as a language that supports the ODR
      Fully report diagnostic about alternate debug info file not found
      Update & cleanup the tools manuals summary
      Improve comments wording in fedabipkgdiff
      Update copyright notice for all source files
      Fix version revision number printing in tools --help option
      abipkgdiff --verbose shouldn't trigger --fail-no-dbg
      Fix logic in common_prefix
      Fix symlinks paths handling in abipkgdiff
      Suppress duplicates when listing package content
      Make kmidiff show the wrong option when it complains about it
      Only consider local changes when filtering subtype changes
      Skip class types with changed names in leaf reports
      Correctly link with pthread

1.0
=====
Ben Woodard:
      Fix some clang compile problems
      Fix more clang build warnings

Chenxiong Qi:
      More document for local RPMs comparison
      Follow moved packages when download
      Read Koji config via Koji API
      Warn properly when cannot find peer RPM
      Fix wrong variable name
      Bug 20380 - Compare two local RPMs
      Bug 20087 - Clean cache before or after ABI comparison

Dodji Seketeli:
      Forgot to consider libtest33-v{0,1}.so in test-diff-suppr.cc
      A suppressed diff node implies suppressing all equivalent nodes too
      Make bash completion files non-executable
      Allow pretty printing function decls for internal purposes
      Setup per-corpus type maps indexed by type names
      Implement de-duplication for types and decls at DWARF loading time
      Support naming typedef and use them to speed up type canonicalization
      Fix pretty representation of array types
      Introduce on-the-fly type canonicalization
      Very light speed improvements
      Add tests/data/test-diff-suppr/test33-report-0.txt to tarball
      Rename tests/update-test-read-dwarf-output.py
      Fix aborting when reading .foo symbols from a ppc64 binary
      Fix template_decl::hash::operator()
      Don't early-canonicalize function types when reading abixml
      Naming typedefs of classes are not read properly from abixml
      make is_anonymous_type work for unions and classes
      Misc style cleanup
      Make abg-fwd.h use *_sptr typedefs
      Handle per translation unit and per corpus types maps
      [dwarf-reader] Handle per translation-unit type de-duplication
      Update tests/data/test-read-write/test27.xml
      Update tests/data/test-diff-pkg/libICE-1.0.6-1.el6.x86_64.rpm--libICE-1.0.9-2.el7.x86_64.rpm-report-0.txt
      Fix a typo in method name computation
      Cleanup ODR-based type canonicalization optimization gating logic
      Fix qualified name caching for some types
      [dwarf-reader] Don't early canonicalize function types
      [abixml writer] Fix comparison of pointer to types
      [abixml writer] Make sure all function types are emitted
      Update tests/data/test-diff-dwarf-abixml/test0-pr19026-libvtkIOSQL-6.1.so.1.abi
      Update tests/data/test-read-dwarf/*.abi files
      Avoid unnecessary updates to type lookup maps
      Speedup set_member_is_static
      Misc comments and apidoc fixes
      Misc style fixes
      [apidoc] Allow brief description at the top of class description pages
      Update copyright year on a bunch of files
      Adjust some reference outputs of the test-read-dwarf test harness
      Better de-duplicate classes, unions, enums in non-odr contexts
      Add debug routines to dump locations to a stream
      Support Linux Kernel binaries
      Support Linux Kernel ABI whitelist files
      Remove unused functions from abg-ir.cc
      Update copyright notice for abg-fwd.h, abg-ir.h and test-abidiff.cc
      Fix performance regression while analyzing libjvm.so
      Add missing deep comparison operators for {function, method}_decl_sptr
      Speed up pretty representing (function) types
      Handle several virtual member functions having the same vtable offset
      [dwarf reader] Fix pretty printing static methods from DWARF
      [dwarf reader] Do not over de-duplicate function *definitions*
      [dwarf reader] Allow updating and de-duplicating member functions
      [dwarf reader] properly separate function decls and types in lookup
      [dwarf reader] Don't abort when trying to canonicalize a non-type
      [comparison engine] Don't crash when the context is null
      Support virtual member functions with vtable offset not yet set
      Fix some include logic in abg-suppression.cc
      Fix suppression category propagation in diff node graph
      Add --harmless option to abipkgdiff
      Fix test-diff-pkg after commit 2dcc606
      Make abidw --headers-dir work with the --out-file option
      Fix help string for --header-dirs
      Adjust reference output of test-annotate
      Fix indentation in src/abg-writer.cc
      Misc style fixes
      Fix silent failure of tests/runtestfedabipkgdiff.py
      Add missing new line to an error message of runtestfedabipkgdiff.py
      Add missing tests input files to distribution files
      fedabipkgdiff refuses to compare packages with the same release number
      Fix typo in help string of abipkgdiff
      Several fixes and enhancements to abigail::workers
      Add a "make check-valgrind-helgrind-recursive" target
      Do not ignore valgrind checks returning an error
      Make abipkgdiff.cc use the abigail::workers interface
      Display the command that failed the runtestfedabipkgdiff.py test
      Move test-read-dwarf.cc to abigail::workers
      Make the helgrind suppressions less specific
      Silence Helgrind reports about exception stack unwinding
      More Helgrind suppressions
      Make Helgrind suppressions less specific to libgcc_s version
      Fix virtual members sorting to unbreak the build on EL6
      Consider file path when sorting virtual member functions
      Fix data race on worker::queue::priv::bring_workers_down
      Shut down a helgrind false positive in the "system" libc call
      Launch fedabipkgdiff tests first
      Fix some random deadlock while running fedabipkgidiff in tests
      Fix a race condition in queue::priv::do_bring_workers_down
      Fix buffer overrun in 'equals' function for arrays
      Fix array subranges (wrongly) having the same lower bound
      Ensure build_qualified_type can return non-qualified types
      Remove useless overloads of is_type
      Invalidate function and variable ID cache when invoking ::set_symbol
      Rename fn_parm_diff::get_type_diff into fn_parm_diff::type_diff
      Don't consider changes to basic types as being redundant
      Misc cleanups in abg-writer.cc
      Update the description of what abipkgdiff does
      Speedup comparison of decl-only classes
      Speed up access to the definition of a class declaration-only type
      Avoid building DIE -> parent DIE map when analyzing a C binary
      Do not forget to erase temporary directories in abipkgdiff
      Avoid comparing kernel.img file from the grub2 package
      Fix some typos in abidiff.cc
      Create a Corpus Group API extension
      Initial support to lookup types per location
      Support loading and comparing two kernel trees
      Avoid loading a translation unit twice from abixml
      Make abipkgdiff compare two kernel packages
      Make abidw support the --kmi-whitelist option
      Introduce the --kmi-whitelist option to abidiff
      Update the reference output of regression tests after kabidiff work
      Rename write_corpus_to_native_xml into write_corpus
      Avoid emitting duplicated decls in abixml
      Avoid emitting some empty translation units to abixml
      Fix indentation glitch before the </abi-corpus> tag in abixml
      Adjust test reference outputs after changes in abg-writer.cc
      Initial support of the serialization of the KMI of a Linux Kernel Tree
      Initial support of de-serializing the KMI of a Linux Kernel Tree
      Speedup access to unreferenced symbols when loading corpus_group
      Avoid de-duplicating different C types that have identical name
      Allow selective resolution of class declaration
      Speedup DIE representation computing esp function signature in C
      Do not report about voffset when it's not set in debug info
      Fix innacurate test condition when reading an enum type from abixml
      Cache function type name computation results
      Add --vmlinux{1,2} option to abidw and kmidiff
      Allow re-using the ELF/DWARF read_context when loading a corpus group
      Add documentation for the kmidiff tool
      Allow selective resolution of class declaration
      Do not report about voffset when it's not set in debug info
      Filter top cv qualifier changes on function parameter types
      Support ELF symbol visibility property
      Symbols with the same zero value are not aliases
      Fix doc glitch in abidiff.rst
      Misc style fixes
      Don't add empty translation unit to corpus
      Better handle decl-only classes being different from their definition
      Fix a typo when reporting size change wrt a decl-only class
      Fix typo in comments
      speed up class type lookup in a corpus
      Replace --lkaw with -w and --lkaw-pkg with --wp
      Add missing space in abipkgdiff error message
      Use shorter lines in abipkgdiff.cc
      Fix support of the --wp option of abipkgdiff
      Support up to two --wp options for abipkgdiff
      Avoid crashing when the elf file could not be read
      Fix some make distcheck failures
      Misc style fixes
      Finer detection of local changes of var_decl type
      Avoid adding the same data member twice in the DWARF reader
      Don't crash on classes that differ in their virtual member fn count
      22160 - Annotate state flag unitialized in abidw
      Add missing newlines to kmidiff's usage strings
      Renamed offset_offset_map type name into offset_offset_map_type
      Remove redundant (useless) typedef declaration
      Use an unordered map for canonical DIE offsets
      [abixml writer] Store pointers to emitted types rather than type-ids
      [abixml writer] Use an unordered set when appropriate
      Initialize naked canonical type
      Misc style fixes in abg-writer.cc
      Add missing comment to type declaration
      Update copyright year to tools/abidiff.cc
      Allow several kinds of reports to be emitted
      Initial implementation of a --leaf-changes-only option to abidiff
      Add a --leaf-changes-only option to abipkgdiff
      Add --full-impact option to kmidiff
      Add --impacted-changes option to kmidiff
      Cleanup a switch-case logic to avoid a GCC 7.2.1 warning
      Fix a indentation warning from GCC 7.2.1
      Handle exceptions when global_config is not yet set in fedabipkgdiff
      Add a --suppressions option to fedabipkgdiff
      Remove useless vertical space from src/abg-writer.cc
      Allow setting options to instances of xml_writer::write_context
      Wire the --no-show-locs option to abidw
      Support systems where fts.h can't be used with _FILE_OFFSET_BITS set
      Bug 20670 - abipkgdiff aborts if $XDG_CACHE_HOME does not exist
      Bug 20887 - Show relative change of offsets
      Bug 20927 - Segfault when $HOME is not set
      Bug 21058 - abipkgdiff wrongly drops non-public types
      Bug 20476 - Compare virtual member functions when comparing classes
      Bug 21228 - Handle cloning union member functions
      Bug 21296 - Reporting diff of const ref against non-const ref aborts
      Bug 21567 - Fedabipkgdiff matches build distro names too tightly
      Bug 21627 - Libabigail doesn't consider translation unit compile dir
      Bug 21629 - equivalent DIEs must be of the same DIE source
      Bug 21630 - A this pointer DIE can be const
      Bug 21631 - Forgot a "break" statement in stv_to_elf_symbol_visibility
      Bug 21153 - abipkgdiff reports undetermined interface subtype changes
      Bug 21644 - abipkgdiff does not emit diagnostics about comparison errors
      Bug 21730 - Make abipkgdiff compare Linux Kernel packages as expected
      Bug 22015 - Failing to return global scope of a DIE in certain cases
      Bug 22122 - Fail to represent 'const array'
      Bug 22190 - crash in read_context::get_or_compute_canonical_die
      Bug 22438 - Emit a clear message when debug info is not found

Mark Wielaard:
      Declare eval_last_constant_dwarf_sub_expr with [u]int64_t not [s]size_t.
      readdir_r() is deprecated, use readdir().
      Fix -Wmisleading-indentation warning in abg-leaf-reporter.cc.
      Bug 22075 - data_member_diff_comp forgets data members names

Ondrej Oprala:
      Fix a few remarks made by cppcheck
      abipkgdiff doesn't mention --no-default-suppression in help
      Check --enable-rpm dependencies more rigorously
      Properly report missing files for abipkgdiff
      Fix comparison used instead of an assignment
      Clean up scripts/*
      Fix cppcheck error: "Same iterator is used with different containers"
      cppcheck: mitigate performance warnings
      Bug 19272 - abipkgdiff doesn't report arch change
      Bug 18754 - Add the "--no-added-syms" option to abidiff
      Bug 20970 - Add a --annotate option to abidw

Sinny Kumari:
      Add --self-compare option in fedabipkgdiff
      Check if return_codes list is empty in fedabipkgdiff

Slava Barinov:
      Fix types in header to meet sources


1.0.rc6
=======
Chenxiong Qi:
      Update bash completion for fedabipkgdiff
      Add fedabipkgdiff bash completion to dist
      Add --abipkgdiff option in manual and bash completion
      Make fedabipkgdiff consistent with Libabigail's other tests

Dodji Seketeli:
      Bug 20332 - too many ...'s counted as parameters
      Bug 20194 - Fail to recognize void type represented by DW_TAG_base_type
      Bug 20199 - Consider integral type synonyms as being equal
      Bug 20420 - Wrong ODR-based type comparison optimization on qualified type
      Bug 20534 - abipkgdiff wrongly displays the name of added binary files
      Bug 20740 - Broken check for dwarf_getalt in configure.ac
      Add a new overload for is_type_decl
      Better recognize qualified void type
      Fix spurious type size change report for distinct_diff
      Prepare support for symbol visibility control
      Add ABG_ASSERT_NOT_REACHED macro
      Cleanup is_class and is_compatible_with_class_type
      Generalize DIE source concept in DWARF reader
      Support DW_TAG_type_unit
      Control symbols exported from libabigail.so
      Don't walk diff trees indefinitely when applying suppressions
      Fix misleading indentation issues
      Do not emit empty namespaces in abixml
      Add new helper functions
      Pimplify the abigail::ir::scope_decl type
      Drop suppressed ABI artifacts from the IR
      Add default suppression specification for webkitgtk
      Add default suppression specifications for C++ binaries
      Better handle fedabipkgdiff dependencies detection
      Update reference output of runtestreaddwarf
      Define a new interned_string_set_type typedef
      Prevent infinite loops while comparing two function_type
      Apply ODR-based type comparison optimization to function types
      Cleanup class_decl inifite comparison detection
      Cleanup functions to detect infinite comparison of class_decl
      Cleanup namespace importing in abg-interned-str.h
      Canonicalize function types when reading from DWARF
      Fix abigail::ir::get_type_scope()
      Cleanup some entry points in abg-fwd.h
      Cleanup void and variadic parameter type interfaces
      Consider a method_decl as always being a member decl
      Factorize out parsing of integral types
      Factorize out string representation of array_type_def::subrange_type
      Avoid stripping typedefs too much
      Apply harmless and harmful filters in one pass
      Rename config::property_vector into config::properties_type
      Support empty properties in INI files
      Support union types
      Better diagnostics when wget is missing
      Lexicographically sort union data members in change reports
      Support reading data member offset from DW_AT_bit_offset
      Fix indentation in abg-writer.cc
      Fix offset type mismatch
      Fix a compiler warning issued by GCC 6.2.1
      Avoid using size_t to get DWARF data

Matthias Klose:
      Fix typo in abipkgdiff

1.0.rc5
=======
Chenxiong Qi:
      Bug 19428 - New fedabipkgdiff utility
      Bug 20085 - Add --dso-only option to fedabipkgdiff
      Bug 20135 - Make fedabipkgdiff compare ABIs using devel packages
      Add integration tests for fedabipkgdiff
      Fix package NVR comparison in fedabipkgdiff
      Use consistent string format in fedabipkgdiff
      Fix pep8 error in fedabipkgdiff

Dodji Seketeli:
      Bug 19964 - Cannot load function aliases on ppc64
      Bug 20015 - support file_name_not_regexp and soname_not_regexp in suppr specs
      Bug 20180 - Support system-wide suppression specifications
      Bug 19967 - System-level suppressions for glibc
      Fix python interpreter path for el6      
      Add doc, info, man and html-doc targets to top-level Makefile
      Update documentation to require doxygen and python-sphinx for building
      Make API documentation of thread pools visible
      Show SONAME of removed/added libraries in abipkgdiff
      Fix indentation in concepts manual
      Fix typo in concept manual
      Doc not show classes' inherited members in apidoc
      Fix mention of tool's name in abidiff error message
      Add several shortcuts to options for abicompat
      Fix indentation for abidiff manual
      Split suppression engine off of abg-comparison.{cc,h}
      Implement a [suppress_file] suppression directive
      Remove config.h.in from the repository
      Do not run fedabipkgdiff tests if --enable-fedabipkgdiff is turned off
      Update the COMMIT-LOG-GUIDELINES file
      Update the CONTRIBUTING file
      Support running "make check-valgrind"
      Fix a read passed-the-end in abg-dwarf-reader.cc
      Plug leak of diff_context_sptr after calling compute_diff
      Plug leak of regex_t in suppression engine
      Remove circular ref from class_decl::priv::definition_of_declaration
      Plug leak of shared private data of class_diff type
      Plug leak of debug info handles
      Fix invocation of delete operator in test-read-dwarf.cc
      Speedup diff node child insertion
      Plug leak of diffs of member variables of class type
      Avoid unnecessary computation of type name in suppression evaluation
      Minimize number of string::length calculation
      Light optimizations by passing reference to smart pointers around
      Optimize out some shared_ptr use
      Add missing API doc strings
      Enhance API doc for diff_context::add_diff
      Fix bash completion configure status
      Fix white space in abg-comparison.cc
      Fix whitespaces in autotools files
      Document how to handle regression tests in CONTRIBUTING
      Fix the number of removed functions in change report
      Make abi{pkg}diff filter out changes about private types
      Add a 'check-valgrind' target to the top-most Makefile.am
      Add test data for tests/runtestfedabipkgdiff.py
      Fix some wording in the Libabigail overview manual page
      Update reference to tools in libabigail-concepts manual
      Fix suppr spec wording in abipkgdiff manual
      Better diagnostics when abipkgdiff has an extra argument
      Add --abipkgdiff option to fedabipkgdiff
      Don't require all version symbol sections to present
      Escape all characters when reading a string in ini files
      Improve python modules detection
      Cleanup function_decl::parameter::get_pretty_representation
      Misc white space and comment cleanups
      Use ODR-based optimization on C/C++ translation unit only
      Misc cleanup in abg-reader.cc

Sinny Kumari:
      Bug 19961 - Distinguish between PI executable and shared library
      Change parent directory for keeping extracted packages in abipkgdiff

1.0.rc4
=======
Dodji Seketeli:
      Bug 19844 - Cannot try to canonicalize a type that is being constructed
      Bug 19846 - variable decl associated with the wrong debug info section
      Bug 19867 - abipkgdiff skips symbolic links
      Bug 19885 - Cannot associate a function DIE to a symbol on powerpc64
      Ease use of soname_regexp/file_name_regexp in suppr specs
      More docs about ABIDIFF_ABI_INCOMPATIBLE_CHANGE
      Update copyright dates for the manuals
      Fix typos on the web page
      Fix typos in the manual of abidiff
      Fix typos in the suppression specifications manual
      Fix a typo in include/abg-tools-utils.h
      Fix typos in comments in src/abg-dwarf-reader.cc
      Fix comments in tests/test-diff-pkg.cc
      Fix logs in abipkgdiff and add some more

Roland McGrath:
      Fix typo in configure --enable-deb help text

1.0.rc3
=======
Dodji Seketeli:
      Upate build instructions on the website
      Bug 19138 - Failure to relate variables address from DWARF and ELF
      Include missing <algorithm> to abg-dwarf-reader.cc
      Make enum values take 64 bits on all platforms
      Use worker threads pattern to speed up some tests
      Sort the tests run in tests/ by running the slowest ones first
      Bug 19434 - invalid character in attribute value
      Bug 19141 - Libabigail doesn't support common ELF symbols
      Pass parm of elf_symbol::add_alias by reference
      Bug 19204 - libabigail aborts on DWARF referencing non-existing DIE
      Comparing aliases of the same symbol must be done by pointer
      Do not crash when looking up a type from global scope
      Fix abicompat's handling of library types not used by the application
      Fix synthesizing of pointer type
      Fix synthesizing of reference type
      Bug 19596 - Incorrect exit status for incompatible ABI change
      Use proper WIFEXITED and WEXITSTATUS macros to get exit code
      Bug 19604 - abidiff --suppressions doesn't complain about invalid file name
      Make abipkgdiff return correct exit code on usage error
      Make abipkgdiff check for the presence of suppression spec files
      Talk about mandatory properties in suppress_* directives
      Add a comment about libabigail needing elfutils 0.159 at least.
      Bug 19606 - Need better error message for invalid options
      Prefix abidiff error message with the 'abidiff' program name
      Emit more informational messages on unrecognized options
      Bug 19619 - failing to suppress added aliased function reports for C++
      Add function lookup by linkage name to libabigail::corpus
      Bug 19638 - DWARF reader fails to link clone function to its declaration
      Add --verbose option to abidiff
      Bug 19658 - Type canonicalization slow for the 2nd binary loaded
      Add missing inequality operators for ABI artifacts
      Fix crash when handling templates with empty patterns
      Implement string interning for Libabigail
      Some small speed optimizations
      Bug 19706 - Core dump from abidiff with suppression
      Update mentions to the build dependencies in the doc
      Make libabigail link with pthread
      Add --verbose to abidw
      Fixup virtual member functions with linkage and no underlying symbol
      Bug 19596 - Suppressed removed symbol changes still considered incompatible
      Bug 19778 - diff_has_ancestor_filtered_out() loops forever
      Bug 19780 - abipkgdiff doesn't support parallel execution
      Fix reference to test file in Makefile.am
      Walk function_type_diff tree in a deterministic way

Mark Wielaard:
      Fix GCC6 -Wmisleading-indentation warnings.
      Make make more silent.
      Remove defined but not used functions pointed out by GCC6.

Ondrej Oprala:
      Escape the value of the filepath attribute.

1.0.rc2
======
Dodji Seketeli:
      Fix regression on the support for alternate debug info files
      Lexicographically sort added/removed base classes in change report

1.0.rc1
=======
Dodji Seketeli:
      Bug 19336 - Better handle redundantly qualified reference types
      Bug 19126 - abidw segv on a dwz compressed version of r300_dri.so
      Bug 19355 - Libabigail slow on r300_dri.so
      Do not use designated initializers in abipkgdiff.cc
      Read enum values in the size_t and write them in ssize_t
      Do not abort when there is no binary to compare in a package
      Add missing new line to abidiff help message
      Constify is_qualified_type()
      Find more spots where to discriminate internal and non-internal names
      Do not forget to peel qualified type off when peeling types
      Fix comparison in qualified_type_diff::has_changes
      Avoid try/catch code paths when that is possible
      Fix internal name for pointers, typedefs and arrays
      Filter out harmless diagnostics glitches due to some ODR violation
      [PERF] Pass a bunch of perf-sensitive smart pointers by reference
      [PERF] Turn some pimpl pointers into naked pointers
      [PERF] Access naked pointers for canonical types and function types
      [PERF] Speedup comparing declaration-only class_decls
      Speed up class_decl::find_base_class
      Avoid adding the same base class twice
      Support two different variables having the same underlying symbol
      Add a NEWS file
      Fix abidw -v

Ondrej Oprala:
      Add bash-completion scripts for the libabigail tools
      Abidiff: Remove doubled line in help.
      Fix a function doc
      Support printing the file, line and column information in change reports
