2021-10-04 Dodji Seketeli Update NEWS file for 2.0 * NEWS: Update for 2.0 2021-09-23 Dodji Seketeli Bug 27086 - Consider all C++ virtual destructors when there are many * src/abg-dwarf-reader.c (build_or_get_fn_decl_if_not_suppressed): Do not try to re-use a virtual destructor of a class, based on its signature. Several different of these can have the same signature, inside a given class. * tests/data/test-types-stability/PR27086-libstdc++.so.6.0.26: Add new binary test input. * tests/data/Makefile.am: Add the new test input to source distribution. * tests/test-types-stability.cc (elf_paths): Add the test input above to this harness. 2021-09-23 Dodji Seketeli dwarf-reader: Indent * src/abg-dwarf-reader.cc (finish_member_function_reading): Fix indentation. 2021-09-22 Dodji Seketeli Bug 27970 - Duplicated member functions cause spurious self comparison changes * src/abg-dwarf-reader.cc (fixup_functions_with_no_symbols): When the function decl is finally associated to its (publicly defined) ELF symbol, mark it as being exported. (finish_member_function_reading): Don't risk marking a virtual function as being non-virtual when updating its properties. (build_or_get_fn_decl_if_not_suppressed): Update comment. If the member function is already present in the class, do not create a new one; rather, reuse the existing one. It's going to be later updated by finish_member_function_reading. * tests/data/test-annotate/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: Adjust. * tests/data/test-annotate/test20-pr19025-libvtkParallelCore-6.1.so.abi: Likewise. * tests/data/test-diff-filter/test31-pr18535-libstdc++-report-0.txt: Likewise. * tests/data/test-diff-filter/test31-pr18535-libstdc++-report-1.txt: Likewise. * tests/data/test-diff-filter/test41-report-0.txt: Likewise. * tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-0.txt: Likewise. * tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-1.txt: Likewise. * tests/data/test-read-dwarf/PR22015-libboost_iostreams.so.abi: Likewise. * tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: Likewise. * tests/data/test-read-dwarf/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: Likewise. * tests/data/test-read-dwarf/test20-pr19025-libvtkParallelCore-6.1.so.abi: Likewise. * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: Likewise. 2021-09-21 Dodji Seketeli abipkgdiff: Do not erase working dirs before we are done using them * tools/abipkgdiff.cc (compare_prepared_userspace_packages): Removing working directories "early" prevents e.g, dwarf_reader::get_soname_of_elf_file from accessing those files. So do not remove them until the very end. * tests/data/test-diff-pkg/libxcrypt-4.1.1-6.el8.x86_64--libxcrypt-4.1.1-6.el8.x86_64-output-1.txt: Adjust. 2021-09-14 Dodji Seketeli Bug 28316 - Failure to represent typedef named anonymous enums * include/abg-fwd.h (scope_anonymous_or_typedef_named) (is_anonymous_or_typedef_named): Declare new functions. * include/abg-ir.h (decl_base::set_has_anonymous_parent): Remove declaration. (decl_base::{get,set}_naming_typedef): Declare new member functions. * src/abg-ir.cc (update_qualified_name): Define static function. (decl_base::priv::naming_typedef_): Define new data member. (decl_base::priv::has_anonymous_parent_): Remove data member. (decl_base::priv::priv): Adjust constructor. (decl_base::get_has_anonymous_parent): Rather than storing a flag for this, dynamically look at if the scope is anonymous. (decl_base::set_has_anonymous_parent): Remove definition. (decl_base::{get,set}_naming_typedef): Define new member functions. (scope_anonymous_or_typedef_named) (is_anonymous_or_typedef_named): Define new functions. (get_decl_name_for_comparison): Define new sub-routine for the decl_base overload of equals. (equals): In the overload for decl_base, use the new get_decl_name_for_comparison. It helps to ensure that all anonymous decls of the same kind have the same name for the purpose of comparison. It also ensures that non anonymous decls that are part of anonymous scopes should be compared only by looking at their non-qualified names. In the overload for class_or_union, adjust. (scope_decl::add_member_decl): No more need to flag the fast that the parent scope is anonymous here. (get_debug_representation): Fix a thinko. (class_or_union::get_naming_typedef): Remove member function as it's now handled by decl_base::get_naming_typedef. * src/abg-dwarf-reader.cc (build_typedef_type): When a typedef is a naming typedef, then mark the named decl as being typedef-named. (maybe_canonicalize_type): Delay canonicalization of anonymous types because they can be typedef-named later. * src/abg-reader.cc (read_naming_typedef_id_string) (maybe_set_naming_typedef): Define new static function. (build_class_decl): Use it here, rather than reading the "naming-typedef-id" by hand. (build_enum_type_decl, build_union_decl): Read the "naming-typedef-id" property. * src/abg-writer.cc (write_naming_typedef): Make this accept decl_base_sptr, rather than just class_decl_sptr. (write_enum_type_decl): Write the naming-typedef-id property if needed. * tests/data/test-abidiff-exit/test-PR28316-report.txt: New test reference output. * tests/data/test-abidiff-exit/test-PR28316-v{0,1}.cc: Source code of new binary test input. * tests/data/test-abidiff-exit/test-PR28316-v{0,1}.o: New binary test input files. * tests/data/Makefile.am: Add the new test files to the source distribution. * tests/test-abidiff-exit.cc: Add the new test files above to this harness. * tests/data/test-annotate/libtest23.so.abi: Adjust. * tests/data/test-annotate/libtest24-drop-fns-2.so.abi: Likewise. * tests/data/test-annotate/libtest24-drop-fns.so.abi: Likewise. * tests/data/test-annotate/test13-pr18894.so.abi: Likewise. * tests/data/test-annotate/test14-pr18893.so.abi: Likewise. * tests/data/test-annotate/test15-pr18892.so.abi: Likewise. * tests/data/test-annotate/test21-pr19092.so.abi: Likewise. * tests/data/test-diff-dwarf/test15-enum-report.txt: Likewise. * tests/data/test-diff-filter/test19-enum-report-1.txt: Likewise. * tests/data/test-diff-filter/test30-pr18904-rvalueref-report0.txt: Likewise. * tests/data/test-diff-filter/test30-pr18904-rvalueref-report1.txt: Likewise. * tests/data/test-diff-filter/test30-pr18904-rvalueref-report2.txt: Likewise. * tests/data/test-diff-filter/test35-pr18754-no-added-syms-report-0.txt: Likewise. * tests/data/test-diff-pkg/PR24690/PR24690-report-0.txt: Likewise. * tests/data/test-diff-pkg/nss-3.23.0-1.0.fc23.x86_64-report-0.txt: Likewise. * tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-0.txt: Likewise. * tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-1.txt: Likewise. * tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-2.txt: Likewise. * tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-3.txt: Likewise. * tests/data/test-read-dwarf/PR22015-libboost_iostreams.so.abi: Likewise. * tests/data/test-read-dwarf/PR22122-libftdc.so.abi: Likewise. * tests/data/test-read-dwarf/PR25007-sdhci.ko.abi: Likewise. * tests/data/test-read-dwarf/PR25042-libgdbm-clang-dwarf5.so.6.0.0.abi: Likewise. * tests/data/test-read-dwarf/libtest23.so.abi: Likewise. * tests/data/test-read-dwarf/libtest24-drop-fns-2.so.abi: Likewise. * tests/data/test-read-dwarf/libtest24-drop-fns.so.abi: Likewise. * tests/data/test-read-dwarf/test-libaaudio.so.abi: Likewise. * tests/data/test-read-dwarf/test-libandroid.so.abi: Likewise. * tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: Likewise. * tests/data/test-read-dwarf/test11-pr18828.so.abi: Likewise. * tests/data/test-read-dwarf/test12-pr18844.so.abi: Likewise. * tests/data/test-read-dwarf/test13-pr18894.so.abi: Likewise. * tests/data/test-read-dwarf/test14-pr18893.so.abi: Likewise. * tests/data/test-read-dwarf/test15-pr18892.so.abi: Likewise. * tests/data/test-read-dwarf/test16-pr18904.so.abi: Likewise. * tests/data/test-read-dwarf/test21-pr19092.so.abi: Likewise. * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: Likewise. * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Likewise. 2021-09-17 Dodji Seketeli abipkgdiff: Fix showing added/removed files * tools/abipkgdiff.cc (compare_prepared_userspace_packages): Do not return early if there are no binaries to compare. Also add more verbose messages. * tests/data/test-diff-pkg/libxcrypt-4.1.1-6.el8.x86_64--libxcrypt-4.1.1-6.el8.x86_64-output-1.txt: New reference output file. * tests/data/test-diff-pkg/libxcrypt-4.1.1-6.el8.x86_64--libxcrypt-compat-4.4.18-3.el9.x86_64-report-1.txt: New reference output file. * tests/data/test-diff-pkg/libxcrypt-4.1.1-6.el8.x86_64.rpm: New binary input file. * tests/data/test-diff-pkg/libxcrypt-4.4.18-3.el9.x86_64.rpm: Likewise. * tests/data/test-diff-pkg/libxcrypt-compat-4.4.18-3.el9.x86_64.rpm: Likewise. * tests/data/test-diff-pkg/libxcrypt-compat-debuginfo-4.4.18-3.el9.x86_64.rpm: Likewise. * tests/data/test-diff-pkg/libxcrypt-debuginfo-4.1.1-6.el8.x86_64.rpm: Likewise. * tests/data/test-diff-pkg/libxcrypt-debuginfo-4.4.18-3.el9.x86_64.rpm: Likewise. * tests/data/Makefile.am: Add the new testing files to source distribution. * tests/test-diff-pkg.cc (in_out_specs): Add these binary packages to this testing harness. 2021-09-09 Dodji Seketeli RHBZ1944102 - self comparing ABI of protobuf-3.14.0-2.el9 failed * src/abg-reader.cc (read_size_and_alignment): Use atoll to read long long values, not atoi. 2021-09-08 Dodji Seketeli RHBZ1951496 - ir: Acknowledge that "void type" is not canonicalized * src/abg-ir.cc (is_allowed_non_canonicalized_type): Define new static function. (hash_as_canonical_type_or_constant): Use it. 2021-09-08 Dodji Seketeli writer: Avoid sigsev on types with no translation unit * src/abg-writer.cc (referenced_type_should_be_emitted): Don't crash on types with no associated translation unit. 2021-09-08 Dodji Seketeli xml-reader: Get back to original way of building qualified types * src/abg-reader.cc (build_qualified_type_decl): Create the underlying type first, then create the qualified type. This helps fix bug 2021-09-08 Dodji Seketeli ir: Fix canonical type propagation cancelling * src/abg-ir.cc (return_comparison_result): When the comparison of the current type sub-object fails, clear the potentially propagated canonical type and remove it from the set of types with non confirmed propagated canonical types. 2021-09-08 Dodji Seketeli ir: Avoid infinite loop during type canonicalization * src/abg-ir-priv.h (environment::priv::collect_types_that_depends_on): Don't try to collect a type that has already been collected. 2021-09-07 Dodji Seketeli writer: escape enum linkage name in abixml * src/abg-writer.cc (write_enum_type_decl): Escape linkage name. 2021-09-07 Dodji Seketeli RHBZ-1944096 - assertion failure during self comparison of systemd * src/abg-reader.cc (build_enum_type_decl): When strtoll detects an underflow or overflo, it sets errno to ERANGE. So take that into account. 2021-09-03 Dodji Seketeli Bug 27985 - abidiff: bad array types in report * src/abg-ir.cc (array_type_def::get_qualified_name): Use the cache for temporary qualified names when the type is not yet canonicalized. That way, the cache for (non-temporary) qualified names is used only for canonicalized types. * tests/data/test-abidiff/test-PR27985-report.txt: Reference output for the new test. * tests/data/test-abidiff/test-PR27985-v{0,1}.c: Source code for the new test binary inputs. * tests/data/test-abidiff/test-PR27985-v{0,1}.o: New test binary inputs. * tests/data/test-abidiff/test-PR27985-v{0,1}.o.abi: New test abixml input. * tests/data/Makefile.am: Add the new test materials above to source distribution. * tests/test-abidiff.cc (specs): Add the tests above to the harness. * tests/data/test-diff-pkg/nss-3.23.0-1.0.fc23.x86_64-report-0.txt: Adjust. * tests/data/test-abidiff-exit/qualifier-typedef-array-report-1.txt: Adjust. 2021-08-27 Giuliano Procida abg-writer: faster referenced type emission tests * src/abg-writer.cc (write_translation_unit): Reorder referenced type emission tests for efficiency. Consolidate related comments. Reviewed-by: Matthias Maennich 2021-08-10 Dodji Seketeli RHBZ 1925886 - Compare anonymous types without qualified names * include/abg-fwd.h (is_anonymous_type): Constify this function. * src/abg-ir.cc (equals): In the overload for decl_base, do not take scope of anonymous types into account. In the overload for array_type_def do not peel of typedefs. This is not directly related to anonymous types, but it make comparison more robust against naming typedefs used for anonymous types in array elements. (get_type_name): Do not take into account the scope of anonymous types when building internal representation of types. Note that the internal representation is what is used for canonicalization. This means that all anonymous types are compared against each others during type canonicalization. * src/abg-reader.cc (build_class_decl): Do not try to re-use anonymous types, just like we already do for DWARF. * tests/data/test-annotate/test17-pr19027.so.abi: Adjust. * tests/data/test-annotate/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: Likewise. * tests/data/test-annotate/test19-pr19023-libtcmalloc_and_profiler.so.abi: Likewise. * tests/data/test-diff-filter/test31-pr18535-libstdc++-report-0.txt: Likewise. * tests/data/test-diff-filter/test31-pr18535-libstdc++-report-1.txt: Likewise. * tests/data/test-read-dwarf/PR22122-libftdc.so.abi: Likewise. * tests/data/test-read-dwarf/test-libaaudio.so.abi: Likewise. * tests/data/test-read-dwarf/test-libandroid.so.abi: Likewise. * tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: Likewise. * tests/data/test-read-dwarf/test11-pr18828.so.abi: Likewise. * tests/data/test-read-dwarf/test12-pr18844.so.abi: Likewise. * tests/data/test-read-dwarf/test16-pr18904.so.abi: Likewise. * tests/data/test-read-dwarf/test17-pr19027.so.abi: Likewise. * tests/data/test-read-dwarf/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: Likewise. * tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi: Likewise. * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: Likewise. * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Likewise. 2021-07-29 Dodji Seketeli Bug 27236 - Don't forget to emit some referenced types * include/abg-writer.h (write_translation_unit): Add a new parameter that says if we are emitting the last TU. * src/abg-writer.cc (write_translation_unit::{type_is_emitted, decl_only_type_is_emitted}): Constify these methods. (write_context::has_non_emitted_referenced_types): Define new member function using the const methods above. (write_translation_unit): When emitting the last TU, emit all the referenced types. (write_corpus): Set signal when emitting the last translation unit. 2021-07-29 Dodji Seketeli Bug 27236 - Allow updating classes from abixml * src/abg-reader.cc (build_class_decl): Keep going when the class has already been built. The rest of the code knows how to add new stuff. * tests/data/test-abidiff/test-PR18791-report0.txt: Adjust. 2021-07-29 Dodji Seketeli Bug 27236 - Fix the canonical type propagation optimization * include/abg-ir.h (pointer_set): This typedef is now for an unordered_set rather than an unordered_set. (environment::priv_): Make this public so that code in free form function from abg-ir.cc can access it. * src/abg-ir-priv.h (struct type_base::priv): Move this private structure here, from abg-ir.cc. (type_base::priv::{depends_on_recursive_type_, canonical_type_propagated_}): Added these two new data members. (type_base::priv::priv): Initialize the two new data members. (type_base::priv::{depends_on_recursive_type, set_depends_on_recursive_type, set_does_not_depend_on_recursive_type, canonical_type_propagated, set_canonical_type_propagated, clear_propagated_canonical_type}): Define new member functions. (struct environment::priv): Move this struct here, from abg-ir.cc. (environment::priv::{types_with_non_confirmed_propagated_ct_, left_type_comp_operands_, right_type_comp_operands_}): New data members. (environment::priv::{mark_dependant_types, mark_dependant_types_compared_until, confirm_ct_propagation, collect_types_that_depends_on, cancel_ct_propagation, remove_from_types_with_non_confirmed_propagated_ct}): New member functions. * src/abg-ir.cc (struct environment::priv, struct) (type_base::priv, struct class_or_union::priv): Move these struct to include/abg-ir-priv.h. (push_composite_type_comparison_operands) (pop_composite_type_comparison_operands) (mark_dependant_types_compared_until) (maybe_cancel_propagated_canonical_type): Define new functions. (notify_equality_failed, mark_types_as_being_compared): Re-indent. (is_comparison_cycle_detected, return_comparison_result): Define new function templates. (RETURN_TRUE_IF_COMPARISON_CYCLE_DETECTED): Define new macro. (equals(const function_type& l, const function_type& r)): Redefine the RETURN macro using the new return_comparison_result function template. Use the new RETURN_TRUE_IF_COMPARISON_CYCLE_DETECTED and mark_types_as_being_compared functions. (equals(const class_or_union& l, const class_or_union&, change_kind*)): Likewise. (equals(const class_decl& l, const class_decl&, change_kind*)): Likewise. Because this uses another equal() function to compare the class_or_union part the type, ensure that no canonical type propagation occurs at that point. (types_are_being_compared): Remove as it's not used anymore. (maybe_propagate_canonical_type): Use the new environment::priv::propagate_ct() function here. (method_matches_at_least_one_in_vector): Ensure the right-hand-side operand of the equality stays on the right. This is important because the equals() functions expect that. * src/abg-reader.cc (build_type): Ensure all types are canonicalized. * tests/data/test-diff-dwarf/PR25058-liblttng-ctl-report-1.txt: Adjust. * tests/data/test-diff-pkg/nss-3.23.0-1.0.fc23.x86_64-report-0.txt: Likewise. * tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-2.txt: Likewise. * tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-0.txt: Likewise. * tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-1.txt: Likewise. * tests/data/test-read-dwarf/test-libaaudio.so.abi: Likewise. 2021-06-30 Dodji Seketeli Bug 27995 - Self comparison error from abixml file * doc/manuals/abidiff.rst: Add documentation for the --debug option. * src/abg-ir.cc (equals): In the overload for decl_base consider the internal version of qualified decl name. In the overload for pointer_type_def do not peel typedefs off from the compared pointed-to types. In the overload for typedef_decl compare the typedef as a decl as well. In the overload for var_decl, compare variables that have the same ELF symbols without taking into account their qualified name, rather than their name. Stop comparing data member without considering their names. In the overload for class_or_union, when a decl-only class that is ODR-relevant is compared against another type, assume that equality if names are equal. This is useful in environments where some TUs are ODR-relevant and others aren't. (*::get_pretty_representation): Update doxygen comments. (enum_type_decl::get_pretty_representation): Return an internal pretty representation that is stable across all anonymous enums. (var_decl::get_anon_dm_reliable_name): Use the non-internal pretty representation for anonymous data members. (function_type::priv::temp_internal_cached_name_): New data member. (function_type::get_cached_name): Cache the internal name after the function type is canonicalized. Make sure internal name and non-internal name are cached separately. (class_or_union::find_anonymous_data_member): Look for the anonymous data member by looking at its non-internal name. ({class, union}_decl::get_pretty_representation): Use something like "class __anonymous_{union,struct}__" for all anonymous classes, so that they can all be compared against each other during type canonicalization. (type_has_sub_type_changes): Use non-internal pretty representation. (hash_type_or_decl, function_decl_is_less_than:): Use internal pretty representation for comparison here. * src/abg-reader.cc (read_context::maybe_canonicalize_type): Don't early canonicalize array types. * src/abg-writer.cc (annotate): Use non-internal pretty representation. * tests/data/test-diff-filter/test-PR27995-report-0.txt: New reference report. * tests/data/test-diff-filter/test-PR27995.abi: New test input abixml file. * tests/data/Makefile.am: Add test-PR27995.abi, test-PR27995-report-0.txt to the source distribution. * tests/data/test-annotate/libtest23.so.abi: Adjust. * tests/data/test-diff-dwarf/test6-report.txt: Adjust. * tests/data/test-diff-filter/test31-pr18535-libstdc++-report-0.txt: Adjust. * tests/data/test-diff-filter/test31-pr18535-libstdc++-report-1.txt: Adjust. * tests/data/test-diff-filter/test41-report-0.txt: Adjust. * tests/data/test-diff-filter/test43-decl-only-def-change-leaf-report-0.txt: Adjust. * tests/data/test-diff-filter/test8-report.txt: Adjust. * 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: Adjust. * tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-0.txt: Adjust. * tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-2.txt: Adjust. * tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-3.txt: Adjust. * tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-0.txt: Adjust. * tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-1.txt: Adjust. * tests/data/test-diff-suppr/test39-opaque-type-report-0.txt: Adjust. * tests/data/test-read-dwarf/PR22015-libboost_iostreams.so.abi: Adjust. * tests/data/test-read-dwarf/PR22122-libftdc.so.abi: Adjust. * tests/data/test-read-dwarf/libtest23.so.abi: Adjust. * tests/data/test-read-dwarf/test-libandroid.so.abi: Adjust. * tests/data/test-read-dwarf/test11-pr18828.so.abi: Adjust. * tests/data/test-read-dwarf/test12-pr18844.so.abi: Adjust. * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Adjust. * tests/test-diff-filter.cc (in_out_specs): Add the test-PR27995.abi to the test harness. * tools/abidiff.cc (options::do_debug): New data member. (options::options): Initialize it. (parse_command_line): Parse --debug. (main): Activate self comparison debug if the user provided --debug. 2021-06-25 Dodji Seketeli ir: Tighten type comparison optimization for Linux kernel binaries * src/abg-ir.cc (types_defined_same_linux_kernel_corpus_public): Ensure that anonymous classes with naming typedefs have identical typedef names. 2021-06-25 Dodji Seketeli ir: Tighten the test for anonymous data member * src/abg-ir.cc: (is_anonymous_data_member): Consider decl_base::get_is_anonymous as well. 2021-06-24 Dodji Seketeli ir: Improve the debugging facilities * src/abg-ir.cc (maybe_compare_as_member_decls): Add a missing ABG_RETURN (get_debug_representation): Display the name of class and enums, not their pretty representation. 2021-07-10 Giuliano Procida PR28060 - Invalid offset for bitfields * src/abg-dwarf-reader.cc (read_and_convert_DW_at_bit_offset): Update documentation. (die_member_offset): Treat DW_AT_bit_offset as an optional adjustment to DW_AT_data_member_location. * tests/data/test-annotate/test13-pr18894.so.abi: Update. * tests/data/test-annotate/test15-pr18892.so.abi: Update. * tests/data/test-annotate/test17-pr19027.so.abi: Update. * tests/data/test-annotate/test19-pr19023-libtcmalloc_and_profiler.so.abi: Update. * tests/data/test-annotate/test21-pr19092.so.abi: Update. * tests/data/test-diff-dwarf-abixml/PR25409-librte_bus_dpaa.so.20.0.abi: Regenerate. * tests/data/test-diff-pkg/libcdio-0.94-1.fc26.x86_64--libcdio-0.94-2.fc26.x86_64-report.1.txt: Report now empty. * tests/data/test-read-dwarf/PR25007-sdhci.ko.abi: Update. * tests/data/test-read-dwarf/PR25042-libgdbm-clang-dwarf5.so.6.0.0.abi: Update. * tests/data/test-read-dwarf/test13-pr18894.so.abi: Update. * tests/data/test-read-dwarf/test15-pr18892.so.abi: Update. * tests/data/test-read-dwarf/test17-pr19027.so.abi: Update. * tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi: Update. * tests/data/test-read-dwarf/test21-pr19092.so.abi: Update. * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: Update. 2021-07-07 Giuliano Procida abg-ir.h: add declaration of operator<< for elf_symbol::visibility * include/abg-ir.h (operator<<(elf_symbol::visibility): Add declaration. 2021-07-06 Giuliano Procida ir: remove "is Linux string constant" property from elf_symbol * include/abg-ir.h (elf_symbol::elf_symbol): Drop is_linux_string_cst argument. (elf_symbol::create): Likewise. (elf_symbol::get_is_linux_string_cst): Drop method. * src/abg-dwarf-reader.cc (lookup_symbol_from_sysv_hash_tab): Remove code that gets the index of the __ksymtab_strings section. Drop corresponding elf_symbol::create argument. (lookup_symbol_from_gnu_hash_tab): Likewise. (lookup_symbol_from_symtab): Likewise. (create_default_fn_sym): Drop false is_linux_string_cst argument to elf_symbol::create. * src/abg-ir.cc (elf_symbol::priv::is_linux_string_cst_): Drop member variable. (elf_symbol::priv default ctor): Drop initialisation of is_linux_string_cst_. (elf_symbol::priv normal ctor): Drop is_linux_string_cst argument and corresponding is_linux_string_cst_ initialisation. (elf_symbol::elf_symbol ctor): Drop is_linux_string_cst argument and corresponding forwarding to priv ctor. (elf_symbol::create): Drop is_linux_string_cst argument and corresponding forwarding to ctor. (elf_symbol::get_is_linux_string_cst): Drop method. * src/abg-reader.cc (build_elf_symbol): Drop false is_linux_string_cst argument to elf_symbol::create. * src/abg-symtab-reader.cc (symtab::load): Likewise. 2021-07-05 Matthias Maennich Consistently use std::unique_ptr for private implementations (pimpl) * include/abg-comparison.h (diff_maps): use unique_ptr for priv_ (diff_context): Likewise. (diff_traversable_base): Likewise. (type_diff_base): Likewise. (decl_diff_base): Likewise. (distinct_diff): Likewise. (var_diff): Likewise. (pointer_diff): Likewise. (reference_diff): Likewise. (array_diff): Likewise. (qualified_type_diff): Likewise. (enum_diff): Likewise. (class_or_union_diff): Likewise. (class_diff): Likewise. (base_diff): Likewise. (scope_diff): Likewise. (fn_parm_diff): Likewise. (function_type_diff): Likewise. (function_decl_diff): Likewise. (typedef_diff): Likewise. (translation_unit_diff): Likewise. (diff_stats): Likewise. (diff_node_visitor): Likewise. * include/abg-corpus.h (corpus): Likewise. (exported_decls_builder): Likewise. (corpus_group): Likewise. * include/abg-ini.h (property): Likewise. (property_value): Likewise. (string_property_value): Likewise. (list_property_value): Likewise. (tuple_property_value): Likewise. (simple_property): Likewise. (list_property): Likewise. (tuple_property): Likewise. (config): Likewise. (section): Likewise. (function_call_expr): Likewise. * include/abg-interned-str.h (interned_string_pool): Likewise. * include/abg-ir.h (environment): Likewise. (location_manager): Likewise. (type_maps): Likewise. (translation_unit): Likewise. (elf_symbol::version): Likewise. (type_or_decl_base): Likewise. (scope_decl): Likewise. (qualified_type_def): Likewise. (pointer_type_def): Likewise. (array_type_def): Likewise. (subrange_type): Likewise. (enum_type_decl): Likewise. (enum_type_decl::enumerator): Likewise. (typedef_decl): Likewise. (dm_context_rel): Likewise. (var_decl): Likewise. (function_decl::parameter): Likewise. (function_type): Likewise. (method_type): Likewise. (template_decl): Likewise. (template_parameter): Likewise. (type_tparameter): Likewise. (non_type_tparameter): Likewise. (template_tparameter): Likewise. (type_composition): Likewise. (function_tdecl): Likewise. (class_tdecl): Likewise. (class_decl::base_spec): Likewise. (ir_node_visitor): Likewise. * include/abg-suppression.h (suppression_base): Likewise. (type_suppression::insertion_range): Likewise. (type_suppression::insertion_range::boundary): Likewise. (type_suppression::insertion_range::integer_boundary): Likewise. (type_suppression::insertion_range::fn_call_expr_boundary): Likewise. (function_suppression): Likewise. (function_suppression::parameter_spec): Likewise. (file_suppression): Likewise. * include/abg-tools-utils.h (temp_file): Likewise. (timer): Likewise. * include/abg-traverse.h (traversable_base): Likewise. * include/abg-workers.h (queue): Likewise. * src/abg-comparison.cc (diff_context): add default destructor. (diff_maps): Likewise. (corpus_diff): Likewise. (diff_node_visitor): Likewise. (class_or_union_diff::get_priv): adjust return type. (class_diff::get_priv): adjust return type. * src/abg-corpus.cc (corpus): add default destructor. * src/abg-ir.cc (location_manager): Likewise. (type_maps): Likewise. (elf_symbol::version): Likewise. (array_type_def::subrange_type): Likewise. (enum_type_decl::enumerator): Likewise. (function_decl::parameter): Likewise. (class_decl::base_spec): Likewise. (ir_node_visitor): Likewise. 2021-06-14 Matthias Maennich symtab-reader: add support for binaries compiled with CFI * src/abg-symtab-reader.cc (symtab::load_): use new add_alternative_address_lookups method. (add_alternative_address_lookups): New method. * src/abg-symtab-reader.h (add_alternative_address_lookups): new function declaration. * tests/data/test-read-dwarf/test-libaaudio.so: New test data. * tests/data/test-read-dwarf/test-libaaudio.so.abi: New test data. * tests/data/Makefile.am: Add the two new tests input to source distribution. * tests/test-read-dwarf.cc: New test case. Reported-by: Dan Albert Reviewed-by: Giuliano Procida 2021-06-14 Matthias Maennich elf-helpers: refactor find_symbol_table_section * src/abg-elf-helpers.cc(find_section): New overload. (find_symtab_section): New function. (find_dynsym_section): New function. (find_symbol_table_section): Use new find_*_section functions. * src/abg-elf-helpers.h(find_section): New overload declaration. (find_symtab_section): New function declaration. (find_dynsym_section): New function declaration. Reviewed-by: Giuliano Procida 2021-06-18 Dodji Seketeli Bug 27980 - Fix updating of type scope upon type canonicalization * src/abg-ir.cc (canonicalize): Update the scope_decl::get_canonical_types() of canonical type of the containing type of the newly canonicalized type. * src/abg-writer.cc (write_union_decl): Write the canonical types contained in the current union scope, just like we do for classes. * tests/data/test-read-dwarf/test16-pr18904.so.abi: Adjust. * tests/data/test-types-stability/pr27980-libc.so: New binary input file. * tests/data/Makefile.am: Add the test input file above to source distribution. * tests/test-types-stability.cc (elf_paths): Add the new test input file to this test harness. 2021-05-27 Giuliano Procida abg-reader: Create a fresh corpus object per corpus * src/abg-reader.cc (read_corpus_from_input): Always create a fresh corpus object for each abi-corpus XML element. 2021-05-27 Giuliano Procida abg-reader: Ensure corpus always has a symtab reader * src/abg-reader.cc (read_symbol_db_from_input): Fix documentation for this function. Allow "successful parsing" to include the case where no symbols were present in the input. (read_corpus_from_input): Unconditionally set a symtab reader on the corpus object. Unconditionally parse the abi-instr of a corpus. 2021-05-27 Giuliano Procida dwarf-reader: Create new corpus unconditionally * src/abg-dwarf-reader.cc (read_debug_info_into_corpus): Create new corpus object unconditionally. 2021-06-09 Ben Woodard via Libabigail Fix trivial typo when printing version string * tools/abicompat.cc (main): Add a newline after version string. 2021-06-10 Dodji Seketeli Revert "Fix trivial typo when printing version string" * tools/abicompat.cc: 2021-06-09 Ben Woodard via Libabigail Fix trivial typo when printing version string * tools/abicompat.cc: 2021-06-10 Dodji Seketeli doc: Fix typo * doc/manuals/libabigail-concepts.rst: Fix typo. 2021-06-09 Dodji Seketeli abg-reader: Fix typo * src/abg-reader.cc (read_context::maybe_check_abixml_canonical_type_stability): Fix typo. 2021-06-09 Dodji Seketeli abidw: Remove temporary .typeid files when using --debug-abidiff * tools/abidw.cc (load_corpus_and_write_abixml): Remove temporary typeid file after its use. 2021-06-08 Dodji Seketeli Fix recursive array type definition * include/abg-ir.h (array_type_def::update_size): Declare new private member function. (array_type_def::array_type_def): Declare ... * src/abg-ir.cc (array_type_def::array_type_def): ... a new constructor that takes no element type. (array_type_def::update_size): Define this helper private member function. (array_type_def::get_subrange_representation): Adjust for this to work when there is no element type setup yet. (array_type_def::{set_element_type, append_subranges}): Update the size and name of the array. * src/abg-reader.cc (build_array_type_def): Create the array type before the element type so that the later can re-use the former. 2021-06-07 Dodji Seketeli rhbz1951526 - SELF CHECK FAILED for 'gimp-2.10' * include/abg-ir.h (environment::use_enum_binary_only_equality): Declare accessors. (type_or_decl_base::{s,g}et_is_artificial): Likewise. (decl_base::{s,g}et_is_artificial): Remove accessors. * src/abg-ir.cc (environment::priv::use_enum_binary_only_equality): Define new data member. (environment::priv::use_enum_binary_only_equality): Define accessors. (type_or_decl_base::priv::is_artificial_): Define new data member. It has actually moved here from decl_base::priv::is_artificial_. (type_or_decl_base::priv::priv): Initialize it. (type_or_decl_base::{g,s}et_is_artificial): Define accessors. (decl_base::is_artificial_): Move this to type_or_decl_base::is_artificial_. (maybe_adjust_canonical_type): In a given class of equivalence of function types, if there is one non-artificial function type, then the entire class of equivalence is considered non-artificial; so flag the canonical function type as being non-artificial. (is_enumerator_present_in_enum): Define new static function. (equals): Re-arrange the overload for enums so the order of the enumerators doesn't count in the comparison. Also, two enums with different numbers of enumerators can still be equal, with the right redundancy. In the overload for var_decl, avoid taking into account the names of data members in the comparison. (enum_type_decl::enumerator::operator==): In the binary-level comparison mode, only compare the value of enumerators, not their name. * src/abg-comparison.cc (compute_diff): In the overload for enum_type_decl, if the enums compare different using binary-level comparison, then use source-level comparison to build the diff-IR. * src/abg-dwarf-reader.cc (read_context::compare_before_canonicalisation): Compare enums using binary-level comparison. (add_or_update_class_type): If we are looking at the definition of an existing declaration that has been already defined then use the previous definition, in case we are going to need to update the definition. Also, update the size only if it's needed. (build_function_type): By default, consider the newly built function type as artificial. (build_ir_node_from_die): When looking at a DW_TAG_subroutine_type DIE, consider the built function type as non-artificial. * src/abg-reader.cc (read_context::maybe_check_abixml_canonical_type_stability): Don't consider declaration-only classes in an ODR context because they don't have canonical types. (build_function_decl): Flag the function type of the function as artificial. (build_class_decl): Make sure to reuse class types that were already created. * src/abg-writer.cc (write_translation_unit): Allow emitting empty classes. Make sure referenced types are emitting in the translation unit where they belong. Avoid emitting artificial function types. * tests/data/test-alt-dwarf-file/rhbz1951526/rhbz1951526-report-0.txt: New test reference output. * tests/data/test-alt-dwarf-file/rhbz1951526/usr/bin/gimp-2.10: New reference test binary input. * tests/data/test-alt-dwarf-file/rhbz1951526/usr/lib/debug/.dwz/gimp-2.10.22-2.el9.1.aarch64: Likewise. * tests/data/test-alt-dwarf-file/rhbz1951526/usr/lib/debug/usr/bin/gimp-2.10-2.10.22-2.el9.1.aarch64.debug: Likewise. * tests/data/Makefile.am: Add the new test files to source directory. * tests/test-alt-dwarf-file.cc: Add the new test inputs to this test harness. * tests/data/test-abidiff/test-PR18791-report0.txt: Adjust. * tests/data/test-abidiff/test-enum0-report.txt: Likewise. * tests/data/test-annotate/libtest23.so.abi: Likewise. * tests/data/test-annotate/libtest24-drop-fns-2.so.abi: Likewise. * tests/data/test-annotate/libtest24-drop-fns.so.abi: Likewise. * tests/data/test-annotate/test-anonymous-members-0.o.abi: Likewise. * tests/data/test-annotate/test13-pr18894.so.abi: Likewise. * tests/data/test-annotate/test14-pr18893.so.abi: Likewise. * tests/data/test-annotate/test15-pr18892.so.abi: Likewise. * tests/data/test-annotate/test17-pr19027.so.abi: Likewise. * tests/data/test-annotate/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: Likewise. * tests/data/test-annotate/test19-pr19023-libtcmalloc_and_profiler.so.abi: Likewise. * tests/data/test-annotate/test20-pr19025-libvtkParallelCore-6.1.so.abi: Likewise. * tests/data/test-annotate/test21-pr19092.so.abi: Likewise. * tests/data/test-diff-dwarf-abixml/test0-pr19026-libvtkIOSQL-6.1.so.1.abi: Likewise. * tests/data/test-diff-dwarf/PR25058-liblttng-ctl-report-1.txt: Likewise. * tests/data/test-diff-dwarf/test6-report.txt: Likewise. * tests/data/test-diff-filter/test31-pr18535-libstdc++-report-0.txt: Likewise. * tests/data/test-diff-filter/test31-pr18535-libstdc++-report-1.txt: Likewise. * tests/data/test-diff-filter/test8-report.txt: Likewise. * tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-2.txt: Likewise. * tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-3.txt: Likewise. * tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-0.txt: Likewise. * tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-1.txt: Likewise. * tests/data/test-read-dwarf/PR22015-libboost_iostreams.so.abi: Likewise. * tests/data/test-read-dwarf/PR22122-libftdc.so.abi: Likewise. * tests/data/test-read-dwarf/PR25007-sdhci.ko.abi: Likewise. * tests/data/test-read-dwarf/PR25042-libgdbm-clang-dwarf5.so.6.0.0.abi: Likewise. * tests/data/test-read-dwarf/PR26261/PR26261-exe.abi: Likewise. * tests/data/test-read-dwarf/libtest23.so.abi: Likewise. * tests/data/test-read-dwarf/libtest24-drop-fns-2.so.abi: Likewise. * tests/data/test-read-dwarf/libtest24-drop-fns.so.abi: Likewise. * tests/data/test-read-dwarf/test-libandroid.so.abi: Likewise. * tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: Likewise. * tests/data/test-read-dwarf/test12-pr18844.so.abi: Likewise. * tests/data/test-read-dwarf/test13-pr18894.so.abi: Likewise. * tests/data/test-read-dwarf/test14-pr18893.so.abi: Likewise. * tests/data/test-read-dwarf/test15-pr18892.so.abi: Likewise. * tests/data/test-read-dwarf/test16-pr18904.so.abi: Likewise. * tests/data/test-read-dwarf/test17-pr19027.so.abi: Likewise. * tests/data/test-read-dwarf/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: Likewise. * tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi: Likewise. * tests/data/test-read-dwarf/test20-pr19025-libvtkParallelCore-6.1.so.abi: Likewise. * tests/data/test-read-dwarf/test21-pr19092.so.abi: Likewise. * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: Likewise. * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Likewise. * tests/data/test-read-write/test28-without-std-fns-ref.xml: Likewise. * tests/data/test-read-write/test28-without-std-vars-ref.xml: Likewise. 2021-06-07 Dodji Seketeli reader: Canonicalizing a type once is enough * src/abg-reader.cc (build_type): Don't try to canonicalize the type here because all the sub-routines of this function (which actually build the type) already try to canonicalize it. 2021-06-07 Dodji Seketeli ir: make 'debug(artefact)' support showing enums * src/abg-ir.cc (get_debug_representation): Add support for showing details for enums. Also show declaration-only-ness for class or unions. 2021-06-07 Dodji Seketeli location:expand() shouldn't crash when no location manager available * src/abg-ir.cc (location::expand): When no location manager is present, just expand to an empty location. 2021-06-07 Dodji Seketeli Add environment::{get_type_id_from_pointer,get_canonical_type_from_type_id} * include/abg-ir.h (environment::{get_pointer_type_id_map, get_type_id_from_pointer, get_canonical_type_from_type_id}): Declare new member functions. * src/abg-ir.cc (environment::{get_pointer_type_id_map, get_type_id_from_pointer, get_canonical_type_from_type_id}): Define member functions. (environment::priv::pointer_type_id_map_): Move this data member here from ... * src/abg-reader.cc (read_context::m_pointer_type_id_map): ... here. (read_context::get_pointer_type_id_map): Remove this as it's now defined in environment::get_pointer_type_id_map. (read_context::maybe_check_abixml_canonical_type_stability): Adjust. (build_type): Likewise. 2021-06-07 Dodji Seketeli ir: Enable setting breakpoint on first type inequality * src/abg-ir.cc (notify_equality_failed): Define new static function if WITH_DEBUG_SELF_COMPARISON is defined. (ABG_RETURN_EQUAL, ABG_RETURN_FALSE, ABG_RETURN): Define new macros. (try_canonical_compare): Use ABG_RETURN_EQUAL rather than just returning the result of a comparison. (equals): In all the overloads, use the new ABG_RETURN* macros, rather than just returning boolean values. 2021-05-22 Dodji Seketeli xml reader: Fix recursive qualified & reference type definition * include/abg-ir.h (qualified_type_def::qualified_type_def): Declare a constructor with no underlying type. (reference_type_def::reference_type_def): Declare a constructor with no pointed-to type. (reference_type_def::set_pointed_to_type): Declare new method. * src/abg-ir.cc (qualified_type_def::priv::priv): Define a constructor that takes no underlying type. (qualified_type_def::build_name): Make this work even on incomplete types with no underlying type. In that case, this behaves like if the underlying type is "void". (qualified_type_def::qualified_type_def): Define a constructor that takes no underlying type. (qualified_type_def::get_size_in_bits): Make this work on incomplete types with no underlying type. (qualified_type_def::set_underlying_type): Adjust to properly update this type when a new underlying type is set. Particularly, its name and the lookup maps from the type scope. (reference_type_def::reference_type_def): Define a constructor that takes no pointed-to type. (reference_type_def::set_pointed_to_type): Define new function. * src/abg-reader.cc (build_qualified_type_decl): Construct the qualified type early before we try to construct its underlying type. Associate this incomplete type with the type-id. Then try to construct the underlying type. During its construction, if this incomplete qualified type is needed due to recursion then it can be used, leading to just one qualified type being used as it should be. (build_reference_type_def): Likewise for building incomplete reference type first before its pointed-to type. 2021-05-21 Dodji Seketeli abixml reader: Fix recursive type definition handling * include/abg-ir.h (pointer_type_def::pointer_type_def): Declare a constructor with no pointed-to type. (pointer_type_def::set_pointed_to_type): Declare new method. (typedef_decl::typedef_decl): Declare a constructor with no underlying type. * src/abg-ir.cc (pointer_type_def::pointer_type_def): Define a constructor with no pointed-to type. The pointed-to type can thus later be set when it becomes available. (pointer_type_def::set_pointed_to_type): Define new method. (pointer_type_def::get_qualified_name): Make this work on a pointer type that (momentarily) has no pointed-to type. (typedef_decl::typedef_decl): Define a constructor with no underlying type. (typedef_decl::get_size_in_bits): Make this work on a typedef that has (momentarily) no underlying type. (typedef_decl::set_underlying_type): Update the size and alignment of the typedef from its new underlying type. * src/abg-reader.cc (build_pointer_type_def): Construct the pointer type early /BEFORE/ we even try to construct its pointed-to type. Associate this incomplete type with the type-id. Then try to construct the pointed-to type. During the construction of the pointed-to type, if this pointer is needed (due to recursion) then the incomplete pointer type can be used, leading to just one pointer type used (recursively) as it should be. (build_typedef_decl): Likewise for building typedef type early without its underlying type so that it can used by the underlying type if needed. * tests/data/test-diff-pkg/graphviz-2.44.0-18.el9.aarch64-self-check-report-0.txt: New test reference output. * tests/data/test-diff-pkg/graphviz-2.44.0-18.el9.aarch64.rpm: New binary test input. * tests/data/test-diff-pkg/graphviz-debuginfo-2.44.0-18.el9.aarch64.rpm: Likewise. * tests/data/Makefile.am: Add the new test material above to source distribution. * tests/test-diff-pkg.cc (in_out_specs): Add the test inputs above to this test harness. 2021-05-20 Dodji Seketeli Introduce artificial locations * include/abg-fwd.h (get_artificial_or_natural_location): Declare new function. * include/abg-ir.h (location::location): Initialize & copy ... (location::is_artificial_): ... a new data member. (location::{g,s}et_is_artificial): New accessors. (location::{operator=}): Adjust. (type_or_decl_base::{set,get,has}_artificial_location): Declare new member functions. * src/abg-ir.cc (decl_topo_comp::operator()): In the overload for decl_base*, use artificial location for topological sort in priority. Otherwise, use natural location. Otherwise, sort lexicographically. (type_topo_comp::operator()): In the overload for type_base*, use lexicographical sort only for types that don't have location at all. (type_or_decl_base::priv::artificial_location_): Define new data member. (type_or_decl_base::{set,get,has}_artificial_location): Define new member functions. (decl_base::priv): Allow a constructor without location. That one sets no natural location to the artifact. (decl_base::decl_base): Use decl_base::set_location in the constructor now. (decl_base::set_location): Adjust this to support setting a natural or an artificial location. (get_debug_representation): Emit debugging log showing the location of an artifact, using its artificial location in priority. (get_natural_or_artificial_location): Define new function. * src/abg-reader.cc (read_artificial_location) (maybe_set_artificial_location): Define new static functions. (read_location): Read artificial location when no natural location was found. (build_namespace_decl, build_function_decl, build_type_decl) (build_qualified_type_decl, build_pointer_type_def) (build_reference_type_def, build_subrange_type) (build_array_type_def, build_enum_type_decl, build_typedef_decl) (build_class_decl, build_union_decl, build_function_tdecl) (build_class_tdecl, build_type_tparameter) (build_non_type_tparameter, build_template_tparameter): Read and set artificial location. * src/abg-writer.cc (write_location): Don't serialize artificial locations. (write_namespace_decl): Topologically sort member declarations before serializing them. * tests/data/test-read-write/test28-without-std-fns-ref.xml: Adjust. * tests/data/test-read-write/test28-without-std-vars-ref.xml: Likewise. * tests/data/test-annotate/libtest23.so.abi: Likewise. * tests/data/test-annotate/libtest24-drop-fns-2.so.abi: Likewise. * tests/data/test-annotate/libtest24-drop-fns.so.abi: Likewise. * tests/data/test-annotate/test0.abi: Likewise. * tests/data/test-annotate/test13-pr18894.so.abi: Likewise. * tests/data/test-annotate/test14-pr18893.so.abi: Likewise. * tests/data/test-annotate/test15-pr18892.so.abi: Likewise. * tests/data/test-annotate/test17-pr19027.so.abi: Likewise. * tests/data/test-annotate/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: Likewise. * tests/data/test-annotate/test19-pr19023-libtcmalloc_and_profiler.so.abi: Likewise. * tests/data/test-annotate/test20-pr19025-libvtkParallelCore-6.1.so.abi: Likewise. * tests/data/test-annotate/test21-pr19092.so.abi: Likewise. * tests/data/test-read-dwarf/PR22015-libboost_iostreams.so.abi: Likewise. * tests/data/test-read-dwarf/PR22122-libftdc.so.abi: Likewise. * tests/data/test-read-dwarf/PR25007-sdhci.ko.abi: Likewise. * tests/data/test-read-dwarf/PR25042-libgdbm-clang-dwarf5.so.6.0.0.abi: Likewise. * tests/data/test-read-dwarf/PR26261/PR26261-exe.abi: Likewise. * tests/data/test-read-dwarf/libtest23.so.abi: Likewise. * tests/data/test-read-dwarf/libtest24-drop-fns-2.so.abi: Likewise. * tests/data/test-read-dwarf/libtest24-drop-fns.so.abi: Likewise. * tests/data/test-read-dwarf/test-libandroid.so.abi: Likewise. * tests/data/test-read-dwarf/test-suppressed-alias.o.abi: Likewise. * tests/data/test-read-dwarf/test0.abi: Likewise. * tests/data/test-read-dwarf/test0.hash.abi: Likewise. * tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: Likewise. * tests/data/test-read-dwarf/test11-pr18828.so.abi: Likewise. * tests/data/test-read-dwarf/test12-pr18844.so.abi: Likewise. * tests/data/test-read-dwarf/test13-pr18894.so.abi: Likewise. * tests/data/test-read-dwarf/test14-pr18893.so.abi: Likewise. * tests/data/test-read-dwarf/test15-pr18892.so.abi: Likewise. * tests/data/test-read-dwarf/test16-pr18904.so.abi: Likewise. * tests/data/test-read-dwarf/test17-pr19027.so.abi: Likewise. * tests/data/test-read-dwarf/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: Likewise. * tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi: Likewise. * tests/data/test-read-dwarf/test20-pr19025-libvtkParallelCore-6.1.so.abi: Likewise. * tests/data/test-read-dwarf/test21-pr19092.so.abi: Likewise. * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: Likewise. * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Likewise. * tests/data/test-read-write/test28-without-std-fns-ref.xml: Likewise. * tests/data/test-read-write/test28-without-std-vars-ref.xml: Likewise. 2021-05-19 Dodji Seketeli Detect abixml canonical type instability during abidw --debug-abidiff * include/abg-ir.h (environment::get_type_id_canonical_type_map): Declare new data member. * src/abg-ir.cc (environment::priv::type_id_canonical_type_map_): Define new data member. (environment::get_type_id_canonical_type_map): Define new method. * include/abg-reader.h (load_canonical_type_ids): Declare new function. * src/abg-reader.cc (read_context::m_pointer_type_id_map): Define new data member. (read_context::{get_pointer_type_id_map, maybe_check_abixml_canonical_type_stability}): Define new methods. (read_context::{maybe_canonicalize_type, perform_late_type_canonicalizing}): Invoke maybe_perform_self_comparison_canonical_type_check after canonicalization to perform canonicalization type stability checking. (build_type): Associate the pointer value for the newly built type with the type id string identifying it in the abixml. Once the abixml representation is dropped from memory and we are about to perform type canonicalization, we can still know what the type id of a given type coming from abixml was; it's thus possible to verify that the canonical type associated to that type id is the same as the one stored in the typeid file. (read_type_id_string): Define new static function. (load_canonical_type_ids): Define new function. * include/abg-writer.h (write_canonical_type_ids): Likewise. * src/abg-writer.cc (write_canonical_type_ids): Define new function overloads. * tools/abidw.cc (options::type_id_file_path): New data member. (load_corpus_and_write_abixml): Write and read back the typeid file. 2021-05-18 Dodji Seketeli Detect failed self comparison in type canonicalization of abixml * doc/manuals/abidw.rst: Add documentation for the --debug-abidiff option. * include/abg-ir.h (environment::{set_self_comparison_debug_input, get_self_comparison_debug_inputs, self_comparison_debug_is_on}): Declare new methods. * configure.ac: Define a new --enable-debug-self-comparison option that is disabled by default. That option defines a new WITH_DEBUG_SELF_COMPARISON preprocessor macro. * src/abg-ir.cc (environment::priv::{first_self_comparison_corpus_, second_self_comparison_corpus_, self_comparison_debug_on_}): New data members. Also, re-indent the data members. (environment::{set_self_comparison_debug_input, get_self_comparison_debug_inputs, self_comparison_debug_is_on}): Define new method. (type_base::get_canonical_type_for): In the "debug self comparison mode", if a type coming from the second corpus compares different from its counterpart coming from the first corpus then log a debug message. * src/abg-dwarf-reader.cc (read_debug_info_into_corpus): When loading the first corpus, if the debug self comparison mode is on, then save that corpus on the side in the environment. * src/abg-reader.cc (read_corpus_from_input): When loading the second corpus, if the debug self comparison mode is on, then save that corpus on the side in the environment. * tools/abidw.cc: Include the config.h file for preprocessor macros defined at configure (options::debug_abidiff): New data member. (parse_command_line): Parse the --debug-abidiff option. (load_corpus_and_write_abixml): Switch the self debug mode on when the --debug-abidiff option is provided. Use a read_context for the abixml loading. That is going to be useful for subsequent patches. 2021-05-17 Dodji Seketeli Add primitives callable from the command line of the debugger * include/abg-fwd.h (get_debug_representation, get_data_member) (debug, debug_equals): Declare new functions. * include/abg-ir.h (environment{get_canonical_types, get_canonical_type}): Declare new member functions. * src/abg-ir.cc (environment::{get_canonical_types, get_canonical_type}): Define new member functions. (get_debug_representation, get_data_member) (debug, debug_equals): Define new functions. 2021-05-24 Dodji Seketeli Peel array types when peeling pointers from a type * src/abg-ir.cc (peel_typedef_pointer_or_reference_type): In the overloads for type_base_sptr and type_base*, peel array type off as well. 2021-05-24 Dodji Seketeli Fix DWARF type DIE canonicalization * src/abg-dwarf-reader.cc (compare_dies): When comparing array type DIEs, take into account the type of the elements of the arrays. 2021-05-24 Dodji Seketeli Miscellaneous indentation and comments cleanups * src/abg-ir.cc (environment::priv::{config_, canonical_types_, sorted_canonical_types_, void_type_, variadic_marker_type_}): Re-indent these data members. (peel_typedef_pointer_or_reference_type): Fix comment. (var_decl::var_decl): Likewise. (function_decl::function_decl): Add a comment. * src/abg-reader.cc (handle_reference_type_def): Fix indentation of parameters. 2021-05-20 Dodji Seketeli Fix thinko in configure.ac * configure.ac: Fix a thinko I spotted while looking at something else. 2021-04-19 Dodji Seketeli reader: Use xmlFirstElementChild/xmlNextElementSibling to iterate over children elements * src/abg-reader.cc (walk_xml_node_to_map_type_ids) (read_translation_unit, read_translation_unit_from_input) (read_symbol_db_from_input, build_needed) (read_elf_needed_from_input, read_corpus_group_from_input) (build_namespace_decl, build_elf_symbol_db, build_function_decl) (build_function_type, build_array_type_def, build_enum_type_decl) (build_class_decl, build_union_decl, build_function_tdecl) (build_class_tdecl, build_type_composition) (build_template_tparameter): Use xmlFirstElementChild/xmlNextElementSibling rather than poking at xmlNode::children and looping over xmlNode::next by hand. 2021-04-19 Dodji Seketeli reader: Use xmlFirstElementChild and xmlNextElementSibling rather than xml::advance_to_next_sibling_element * include/abg-libxml-utils.h (advance_to_next_sibling_element): Remove the declaration of this function. * src/abg-libxml-utils.cc (go_to_next_sibling_element_or_stay) (advance_to_next_sibling_element): Remove definitions of these functions. * src/abg-reader.cc (read_translation_unit_from_input) (read_elf_needed_from_input, read_corpus_group_from_input): Use xmlNextElementSibling instead of xml::advance_to_next_sibling_element. (read_corpus_from_input): Likewise. Also, use xmlFirstElementChild instead of xml::advance_to_next_sibling_element on the xmlNode::children data member. (read_corpus_group_from_input): use xmlFirstElementChild instead of xml::advance_to_next_sibling_element on the xmlNode::children data member. 2021-04-14 Dodji Seketeli reader: Handle 'abi-corpus' element being possibly empty * src/abg-reader.cc (read_context::get_corpus_node): Add comment to this member function. (read_translation_unit_from_input, read_symbol_db_from_input) (read_elf_needed_from_input): Start processing the current node of the corpus that needs to be processed rather than its next sibling. Once the processing is done, set the new "current node of the corpus to be processed" properly by skipping to the next element node to be processed. (read_corpus_from_input): Don't get out early when the 'abi-corpus' element is empty. If, however, it has children node, skip to the first child element and flag it -- using read_context::set_corpus_node -- as being the element node to be processed by the processing facilities of the reader. If we are in a mode where we called xmlTextReaderExpand ourselves to get the node to process, then it means we need to free that node indirectly by calling xmlTextReaderNext. In that case, that node should not be flagged by read_context::set_corpus_node. Add more comments. * src/abg-corpus.cc (corpus::is_empty): Do not crash when no symtab is around. * src/abg-libxml-utils.cc (go_to_next_sibling_element_or_stay): Fix typo in comment. (advance_to_next_sibling_element): Don't crash when given a nil node. * tests/data/test-abidiff/test-PR27616-squished-v0.abi: Add new test input. * tests/data/test-abidiff/test-PR27616-squished-v1.abi: Likewise. * tests/data/test-abidiff/test-PR27616-v0.xml: Likewise. * tests/data/test-abidiff/test-PR27616-v1.xml: Likewise. * tests/data/Makefile.am: Add the new test inputs above to source distribution. * tests/test-abidiff.cc (specs): Add the new tests inputs above to this harness. * tools/abilint.cc (main): Support writing corpus groups. 2021-04-13 Dodji Seketeli dwarf-reader: properly set artificial-ness in opaque types * src/abg-dwarf-reader.cc (get_opaque_version_of_type): Propagate the artificial-ness of the original type here. * tests/data/test-read-dwarf/PR27700/test-PR27700.abi: Adjust. 2021-04-12 Dodji Seketeli dwarf-reader: Canonicalize opaque enums and classes * src/abg-dwarf-reader.cc (build_ir_node_from_die): Canonicalize opaque enums and classes. * tests/data/test-read-dwarf/PR27700/include-dir/priv.h: New test header file. * tests/data/test-read-dwarf/PR27700/include-dir/pub.h: Likewise * tests/data/test-read-dwarf/PR27700/pub-incdir/inc.h: Likewise. * tests/data/test-read-dwarf/PR27700/test-PR27700.o: New binary input file. * tests/data/test-read-dwarf/PR27700/test-PR27700.abi: Reference abi file of the binary above. * tests/data/test-read-dwarf/PR27700/test-PR27700.c: Source file of the binary above. * tests/data/Makefile.am: Add the test material above to source distribution. * tests/test-read-dwarf.cc (InOutSpec::in_public_headers_path): Add new data member. (in_out_specs): Adjust to reflect the new data member in the InOutSpec type. Add a new test input. (set_suppressions_from_headers): Define new static function. (test_task::perform): Use the content of the new InOutSpec::in_public_headers_path to construct and add "--headers-dir --drop-private-types" to the options of the abidw program run. 2020-07-01 Matthias Maennich symtab: Add support for MODVERSIONS (CRC checksums) * include/abg-ir.h (elf_symbol::elf_symbol): Add CRC parameter. (elf_symbol::create): Likewise. (elf_symbol::get_crc): New member method. (elf_symbol::set_crc): New member method. * src/abg-comp-filter.cc (crc_changed): New function. (categorize_harmful_diff_node): Also test for CRC changes. * src/abg-ir.cc (elf_symbol::priv::crc_): New data member. * src/abg-ir.cc (elf_symbol::priv::priv): Add CRC parameter. (elf_symbol::elf_symbol): Likewise. (elf_symbol::create): Likewise. (elf_symbol::textually_equals): Add CRC support. (elf_symbol::get_crc): New member method. (elf_symbol::set_crc): New member method. * src/abg-reader.cc (build_elf_symbol): Add CRC support. * src/abg-reporter-priv.cc (maybe_report_diff_for_symbol): Likewise. * src/abg-symtab-reader.cc (symtab::load): Likewise. * src/abg-writer.cc (write_elf_symbol): Likewise. * tests/data/Makefile.am: Add new test data files. * tests/data/test-abidiff-exit/test-crc-report.txt: New test file. * tests/data/test-abidiff-exit/test-crc-v0.abi: Likewise. * tests/data/test-abidiff-exit/test-crc-v1.abi: Likewise. * tests/data/test-abidiff/empty-report.txt: New file. * tests/data/test-abidiff/test-PR18166-libtirpc.so.report.txt: Deleted. * tests/data/test-abidiff/test-PR24552-report0.txt: Deleted. * tests/data/test-abidiff/test-crc-0.xml: New test file. * tests/data/test-abidiff/test-crc-1.xml: Likewise. * tests/data/test-abidiff/test-crc-2.xml: Likewise. * tests/data/test-abidiff/test-crc-report.txt: Likewise. * tests/data/test-abidiff/test-empty-corpus-report.txt: Deleted. * tests/data/test-read-dwarf/PR25007-sdhci.ko.abi: Add CRC values. * tests/data/test-read-write/test-crc.xml: New test data file. * tests/data/test-symtab/kernel-modversions/Makefile: New test source. * tests/data/test-symtab/kernel-modversions/one_of_each.c: Likewise. * tests/data/test-symtab/kernel-modversions/one_of_each.ko: Likewise. * tests/test-abidiff-exit.cc: Add new test case. * tests/test-abidiff.cc: Add new test case. * tests/test-read-write.cc: Likewise. * tests/test-symtab.cc (Symtab::KernelSymtabsWithCRC): New test case. Reviewed-by: Giuliano Procida Reviewed-by: Dodji Seketeli 2020-10-15 Giuliano Procida abg-writer.cc: fix write_elf_symbol_reference loop * src/abg-writer.cc (write_elf_symbol_reference): Check main symbol and aliases with more care. Fixes: commmit ("dwarf-reader/writer: consider aliases when dealing with suppressions") Reviewed-by: Dodji Seketeli 2020-06-28 Matthias Maennich dwarf-reader/writer: consider aliases when dealing with suppressions * src/abg-dwarf-reader.cc(function_is_suppressed): Do not suppress a function for which there is an alias that is not suppressed. (variable_is_suppressed): Likewise for variables. * src/abg-reader.cc (build_elf_symbol): Improve handling of suppressed aliased symbols when reading from XML. * src/abg-symtab-reader.cc (load): Likewise. * src/abg-writer.cc(write_elf_symbol_reference): Fall back to any aliased symbol if the main symbol is suppressed. * tests/data/Makefile.am: Add new test files. * tests/data/test-abidiff-exit/test-missing-alias-report.txt: New test file. * tests/data/test-abidiff-exit/test-missing-alias.abi: Likewise. * tests/data/test-abidiff-exit/test-missing-alias.suppr: Likewise. * tests/test-abidiff-exit.cc: Add support for whitelists and add new testcase. * tests/data/test-read-dwarf/test-suppressed-alias.c: New test file. * tests/data/test-read-dwarf/test-suppressed-alias.o: Likewise. * tests/data/test-read-dwarf/test-suppressed-alias.o.abi: Likewise. * tests/data/test-read-dwarf/test-suppressed-alias.suppr: Likewise. * tests/data/test-read-dwarf/test3-alias-1.so.hash.abi: Likewise. * tests/data/test-read-dwarf/test3-alias-1.suppr: Likewise. * tests/data/test-read-dwarf/test3-alias-2.so.hash.abi: Likewise. * tests/data/test-read-dwarf/test3-alias-2.suppr: Likewise. * tests/data/test-read-dwarf/test3-alias-3.so.hash.abi: Likewise. * tests/data/test-read-dwarf/test3-alias-3.suppr: Likewise. * tests/data/test-read-dwarf/test3-alias-4.so.hash.abi: Likewise. * tests/data/test-read-dwarf/test3-alias-4.suppr: Likewise. * tests/test-read-dwarf.cc: Add new test cases. Reviewed-by: Giuliano Procida Reviewed-by: Dodji Seketeli 2020-06-30 Matthias Maennich symtab/dwarf-reader: allow hinting of main symbols for aliases * include/abg-ir.h (elf_symbol::update_main_symbol): New method. * include/abg-symtab-reader.h (symtab::update_main_symbol): New method. * src/abg-dwarf-reader.cc (build_var_decl): Hint symtab about main symbol discovered in DWARF. (build_function_decl): Likewise. * src/abg-ir.cc (elf_symbol::get_main_symbol): Lock the weak_ptr on access in both overloads. (update_main_symbol): New method to allow updating the main symbol. * src/abg-symtab-reader.cc (symtab::update_main_symbol): New method. * data/Makefile.am: Add new test data files. * tests/data/test-annotate/test15-pr18892.so.abi: Updated test file. * tests/data/test-annotate/test19-pr19023-libtcmalloc_and_profiler.so.abi: Likewise. * tests/data/test-annotate/test2.so.abi: Likewise. * tests/data/test-annotate/test3.so.abi: Likewise. * tests/data/test-diff-dwarf/test12-report.txt: Likewise. * tests/data/test-diff-dwarf/test42-PR21296-clanggcc-report0.txt: Likewise. * tests/data/test-diff-filter/test31-pr18535-libstdc++-report-0.txt: Likewise. * tests/data/test-diff-filter/test31-pr18535-libstdc++-report-0.txt: Likewise. * tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-0.txt: Likewise. * tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-1.txt: Likewise. * tests/data/test-diff-suppr/test23-alias-filter-4.suppr: Likewise. * tests/data/test-diff-suppr/test23-alias-filter-report-0.txt: Likewise. * tests/data/test-diff-suppr/test23-alias-filter-report-2.txt: Likewise. * tests/data/test-read-dwarf/PR22015-libboost_iostreams.so.abi: Likewise. * tests/data/test-read-dwarf/PR22122-libftdc.so.abi: Likewise. * tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: Likewise. * tests/data/test-read-dwarf/test11-pr18828.so.abi: Likewise. * tests/data/test-read-dwarf/test12-pr18844.so.abi: Likewise. * tests/data/test-read-dwarf/test15-pr18892.so.abi: Likewise. * tests/data/test-read-dwarf/test16-pr18904.so.abi: Likewise. * tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi: Likewise. * tests/data/test-read-dwarf/test2.so.abi: Likewise. * tests/data/test-read-dwarf/test2.so.hash.abi: Likewise. * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: Likewise. * tests/data/test-read-dwarf/test3.so.abi: Likewise. * tests/data/test-read-dwarf/test3.so.hash.abi: Likewise. * tests/data/test-symtab/basic/aliases.c: New test source file. * tests/data/test-symtab/basic/aliases.so: Likewise. * tests/test-symtab.cc (Symtab::AliasedFunctionSymbols): New test case. (Symtab::AliasedVariableSymbols): Likewise. Reviewed-by: Giuliano Procida Reviewed-by: Dodji Seketeli 2020-06-29 Matthias Maennich test-symtab: add tests for whitelisted functions * tests/data/Makefile.am: add new test files * tests/data/test-symtab/basic/one_function_one_variable_all.whitelist: New test file, * tests/data/test-symtab/basic/one_function_one_variable_function.whitelist: Likewise. * tests/data/test-symtab/basic/one_function_one_variable_irrelevant.whitelist: Likewise. * tests/data/test-symtab/basic/one_function_one_variable_variable.whitelist: Likewise. * tests/test-symtab.cc (read_corpus): Add support for whitelists. (assert_symbol_count): Likewise. (Symtab::SymtabWithWhitelist): New testcase. Reviewed-by: Giuliano Procida Reviewed-by: Dodji Seketeli 2020-06-02 Matthias Maennich dwarf reader: drop (now) unused code related to symbol table reading * include/abg-dwarf-reader.h (set_ignore_symbol_table): Remove. (get_ignore_symbol_table): Likewise. * src/abg-dwarf-reader.cc (add_symbol_to_map): Likewise. (read_context::options_type::ignore_symbol_table): Likewise. (read_context::options_type): Adjust. (read_context::fun_addr_sym_map_): Remove. (read_context::fun_entry_addr_sym_map_): Likewise. (read_context::fun_syms_): Likewise. (read_context::var_addr_sym_map_): Likewise. (read_context::var_syms_): Likewise. (read_context::undefined_fun_syms_): Likewise. (read_context::undefined_var_syms_): Likewise. (read_context::initialize): Adjust. (read_context::lookup_elf_symbol_from_index): Remove. (read_context::fun_entry_addr_sym_map_sptr): Likewise. (read_context::fun_entry_addr_sym_map): Likewise. (read_context::fun_syms_sptr): Likewise. (read_context::fun_syms): Likewise. (read_context::var_syms_sptr): Likewise. (read_context::var_syms): Likewise. (read_context::undefined_fun_syms_sptr): Likewise. (read_context::undefined_var_syms_sptr): Likewise. (read_context::load_symbol_maps_from_symtab_section): Likewise. (read_context::load_symbol_maps): Likewise. (read_context::maybe_load_symbol_maps): Likewise. (set_ignore_symbol_table): Likewise. (get_ignore_symbol_table): Likewise. (create_default_var_sym): Likewise. (build_var_decl): Adjust. (function_is_suppressed): Likewise. (variable_is_suppressed): Likewise. (build_function_decl): Likewise. (add_symbol_to_map): Remove. (read_corpus_from_elf): Adjust. (build_corpus_group_from_kernel_dist_under): Likewise. * tools/abidw.cc (main): Likewise. Reviewed-by: Giuliano Procida Reviewed-by: Dodji Seketeli 2020-05-21 Matthias Maennich abg-corpus: remove symbol maps and their setters * include/abg-corpus.h (corpus::set_fun_symbol_map): Remove method declaration. (corpus::set_undefined_fun_symbol_map): Likewise. (corpus::set_var_symbol_map): Likewise. (corpus::set_undefined_var_symbol_map): Likewise. (corpus::get_fun_symbol_map_sptr): Likewise. (corpus::get_undefined_fun_symbol_map_sptr): Likewise. (corpus::get_var_symbol_map_sptr): Likewise. (corpus::get_undefined_var_symbol_map_sptr): Likewise. * src/abg-corpus-priv.h (corpus::priv::var_symbol_map): make private and mutable (corpus::priv::undefined_var_symbol_map): Likewise. (corpus::priv::fun_symbol_map): Likewise. (corpus::priv::undefined_fun_symbol_map): Likewise. (corpus::priv::get_fun_symbol_map): New method declaration. (corpus::priv::get_undefined_fun_symbol_map): Likewise. (corpus::priv::get_var_symbol_map): Likewise. (corpus::priv::get_undefined_var_symbol_map): Likewise. * src/abg-corpus.cc (corpus::priv::get_fun_symbol_map): New method implementation. (corpus::priv::get_undefined_fun_symbol_map): Likewise. (corpus::priv::get_var_symbol_map): Likewise. (corpus::priv::get_undefined_var_symbol_map): Likewise. (corpus::is_empty): depend on symtab only. (corpus::set_fun_symbol_map): Remove method. (corpus::set_undefined_fun_symbol_map): Likewise. (corpus::set_var_symbol_map): Likewise. (corpus::set_undefined_var_symbol_map): Likewise. (corpus::get_fun_symbol_map_sptr): Likewise. (corpus::get_undefined_fun_symbol_map_sptr): Likewise. (corpus::get_var_symbol_map_sptr): Likewise. (corpus::get_undefined_var_symbol_map_sptr): Likewise. (corpus::get_fun_symbol_map): Use corpus::priv proxy method. (corpus::get_undefined_fun_symbol_map): Likewise. (corpus::get_var_symbol_map): Likewise. (corpus::get_undefined_var_symbol_map): Likewise. * src/abg-dwarf-reader.cc (read_debug_info_into_corpus): Do not set corpus symbol maps anymore. * src/abg-reader.cc (read_corpus_from_input): Likewise. * tests/test-symtab.cc (assert_symbol_count): Do not access the corpus symbol maps through sptr anymore. * tests/data/test-read-dwarf/PR25007-sdhci.ko.abi: Adjust expected test output. Reviewed-by: Giuliano Procida Reviewed-by: Dodji Seketeli 2020-05-14 Matthias Maennich symtab_reader: add support for ppc64 ELFv1 binaries * src/abg-symtab-reader.cc (symtab::lookup_symbol): fall back to lookup the address in entry_addr_symbol_map_. (symtab::load): update the function entry address map for ppc64 targets. (symtab::update_function_entry_address_symbol_map): New function implementation. * src/abg-symtab-reader.h (symtab::entry_addr_symbol_map_): New data member. (symtab::update_function_entry_address_symbol_map): New function declaration. Reviewed-by: Giuliano Procida Reviewed-by: Dodji Seketeli 2020-05-12 Matthias Maennich abg-elf-helpers: migrate ppc64 specific helpers * src/abg-dwarf-reader.cc (read_context::opd_section_): Delete. (read_context::find_opd_section): Delete. (read_context::read_uint64_from_array_of_bytes): Delete. (read_context::read_int_from_array_of_bytes): Delete. (read_context::lookup_ppc64_elf_fn_entry_point_address): Delete. (read_context::address_is_in_opd_section): Delete. (read_context::address_is_in_section): Delete. (read_context::load_symbol_maps_from_symtab_section): Adjust. * src/abg-elf-helpers.cc (read_int_from_array_of_bytes): New. (read_uint64_from_array_of_bytes): New. (lookup_ppc64_elf_fn_entry_point_address): New. (address_is_in_section): New. (address_is_in_opd_section): New. * src/abg-elf-helpers.h (lookup_ppc64_elf_fn_entry_point_address): New declaration. (address_is_in_opd_section): New declaration. Reviewed-by: Giuliano Procida Reviewed-by: Dodji Seketeli 2020-05-06 Matthias Maennich Switch kernel stuff over to new symtab and drop unused code * src/abg-dwarf-reader.cc (read_context::ksymtab_format_): Delete. (read_context::ksymtab_entry_size_): Likewise. (read_context::nb_ksymtab_entries_): Likewise. (read_context::nb_ksymtab_gpl_entries_): Likewise. (read_context::ksymtab_section_): Likewise. (read_context::ksymtab_reloc_section_): Likewise. (read_context::ksymtab_gpl_section_): Likewise. (read_context::ksymtab_gpl_reloc_section_): Likewise. (read_context::ksymtab_strings_section_): Likewise. (read_context::linux_exported_fn_syms): Likewise. (read_context::linux_exported_var_syms): Likewise. (read_context::linux_exported_gpl_fn_syms): Likewise. (read_context::linux_exported_gpl_var_syms): Likewise. (read_context::initialize): Remove initializations accordingly. (read_context::find_ksymtab_section): Delete. (read_context::find_ksymtab_gpl_section): Likewise. (read_context::find_ksymtab_reloc_section): Likewise. (read_context::find_ksymtab_gpl_reloc_section): Likewise. (read_context::find_ksymtab_strings_section): Likewise. (read_context::find_any_ksymtab_section): Likewise. (read_context::find_any_ksymtab_reloc_section): Likewise. (read_context::lookup_elf_symbol_from_index): Adjust. (read_context::linux_exported_fn_syms): Delete. (read_context::create_or_get_linux_exported_fn_syms): Likewise. (read_context::linux_exported_var_syms): Likewise. (read_context::create_or_get_linux_exported_var_syms): Likewise. (read_context::linux_exported_gpl_fn_syms): Delete. (read_context::create_or_get_linux_exported_gpl_fn_syms): Likewise. (read_context::linux_exported_gpl_var_syms): Likewise. (read_context::create_or_get_linux_exported_gpl_var_syms): Likewise. (read_context::try_reading_first_ksymtab_entry): Likewise. (read_context::try_reading_first_ksymtab_entry_using_pre_v4_19_format): Likewise. (read_context::try_reading_first_ksymtab_entry_using_v4_19_format): Likewise. (read_context::get_ksymtab_format_module): Likewise. (read_context::get_ksymtab_format): Likewise. (read_context::get_ksymtab_symbol_value_size): Likewise. (read_context::get_ksymtab_entry_size): Likewise. (read_context::get_nb_ksymtab_entries): Likewise. (read_context::get_nb_ksymtab_gpl_entries): Likewise. (read_context::populate_symbol_map_from_ksymtab): Likewise. (read_context::populate_symbol_map_from_ksymtab_reloc): Likewise. (read_context::load_kernel_symbol_table): Likewise. (read_context::load_ksymtab_symbols): Likewise. (read_context::load_ksymtab_gpl_symbols): Likewise. (read_context::load_linux_specific_exported_symbol_maps): Likewise. (read_context::load_symbol_maps): Do not load kernel symbol maps. (read_context::maybe_adjust_sym_address_from_v4_19_ksymtab): Delete. (read_context::add_fn_symbols_to_map): Likewise. (read_context::add_var_symbols_to_map): Likewise. (read_context::read_debug_info_into_corpus): Fill export maps from new symtab. (read_context::lookup_elf_fn_symbol_from_address): Delete. (read_context::lookup_elf_var_symbol_from_address): Likewise. (read_context::lookup_elf_symbol_from_address): Likewise. (read_context::lookup_public_function_symbol_from_elf): Likewise. (read_context::fun_entry_addr_sym_map_sptr): Likewise. (read_context::fun_entry_addr_sym_map): Likewise. (read_context::var_addr_sym_map): Likewise. Reviewed-by: Giuliano Procida Reviewed-by: Dodji Seketeli 2020-05-06 Matthias Maennich dwarf-reader: read_context: use new symtab in *_symbols_is_exported * src/abg-dwarf-reader.cc (function_symbol_is_exported): Use new symtab implementation. (variable_symbol_is_exported): Likewise. Reviewed-by: Giuliano Procida Reviewed-by: Dodji Seketeli 2020-05-04 Matthias Maennich abg-reader: avoid using the (var|function)_symbol_map * src/abg-reader.cc (build_elf_symbol_from_reference): drop last parameter indicating the lookup type and use corpus symtab for the lookup (build_function_decl): Adjust accordingly. (build_var_decl): Likewise. Reviewed-by: Giuliano Procida Reviewed-by: Dodji Seketeli 2020-05-04 Matthias Maennich corpus: make get_unreferenced_(function|variable)_symbols use the new symtab * src/abg-corpus-priv.h (corpus::priv::unrefed_var_symbols): make private, mutable and optional. (corpus::unrefed_fun_symbols): Likewise. (corpus::priv::get_unreferenced_function_symbols): New method declaration. (corpus::priv::get_unreferenced_variable_symbols): Likewise. * src/abg-corpus.cc (corpus::priv::build_unreferenced_symbols_tables): Delete method. (corpus::priv::get_unreferenced_function_symbols): New method implementation. (corpus::priv::get_unreferenced_variable_symbols): Likewise. (corpus::get_unreferenced_function_symbols): Proxy call to corpus::priv. (corpus::get_unreferenced_variable_symbols): Likewise. Reviewed-by: Giuliano Procida Reviewed-by: Dodji Seketeli 2020-04-30 Matthias Maennich corpus: make get_(undefined_)?_(var|fun)_symbols use the new symtab * src/abg-corpus-priv.h (corpus::priv::sorted_var_symbols): make private, mutable and optional. (corpus::sorted_undefined_var_symbols): Likewise. (corpus::sorted_fun_symbols): Likewise. (corpus::sorted_undefined_fun_symbols): Likewise. (corpus::priv::get_sorted_fun_symbols): New method declaration. (corpus::priv::get_sorted_undefined_fun_symbols): Likewise. (corpus::priv::get_sorted_var_symbols): Likewise. (corpus::priv::get_sorted_undefined_var_symbols): Likewise. * src/abg-corpus.cc (corpus::elf_symbol_comp_functor): Delete struct. (corpus::priv::get_sorted_fun_symbols): New method implementation. (corpus::priv::get_sorted_undefined_fun_symbols): Likewise. (corpus::priv::get_sorted_var_symbols): Likewise. (corpus::priv::get_sorted_undefined_var_symbols): Likewise. (corpus::get_sorted_fun_symbols): Proxy call to corpus::priv. (corpus::get_sorted_undefined_fun_symbols): Likewise. (corpus::get_sorted_var_symbols): Likewise. (corpus::get_sorted_undefined_var_symbols): Likewise. * src/abg-writer.cc (write_elf_symbol_aliases): When emitting aliases for a kernel symbol, ensure to only emit exported, public aliases. * tests/data/test-read-dwarf/PR25007-sdhci.ko.abi: update test data. Reviewed-by: Giuliano Procida Reviewed-by: Dodji Seketeli 2020-05-19 Matthias Maennich Integrate new symtab reader into corpus and read_context * include/abg-corpus.h (corpus::set_symtab): New method declaration. (corpus::get_symtab): New method declaration. * include/abg-fwd.h (symtab_reader::symtab_sptr): New forward declaration. * src/abg-corpus-priv.h (corpus::priv::symtab_): New data member. * src/abg-corpus.cc (corpus::set_symtab): Likewise. (corpus::get_symtab): Likewise. * src/abg-dwarf-reader.cc (read_context::symtab_): New data member. (read_context::initialize): reset symtab_ as well (read_context::symtab): new method that loads a symtab on first access and returns it. (read_debug_info_into_corpus): also set the new symtab object on the current corpus. (read_corpus_from_elf): Also determine (i.e. load) the new symtab object and contribute to the load status. * src/abg-reader.cc (read_corpus_from_input): also set the new type symtab when reading from xml. * tests/test-symtab.cc: Add test assertions. Reviewed-by: Giuliano Procida Reviewed-by: Dodji Seketeli 2020-04-29 Matthias Maennich Refactor ELF symbol table reading by adding a new symtab reader * src/abg-symtab-reader.h (symtab_filter): New class. (symtab_iterator): Likewise. (symtab): Likewise. (filtered_symtab): Likewise. * src/abg-symtab-reader.cc (symtab_filter::matches): New. (symtab::make_filter): Likewise. (symtab::lookup_symbol): Likewise. (symbol_sort): Likewise. (symtab::load): Likewise. (symtab::load_): Likewise. Reviewed-by: Giuliano Procida Reviewed-by: Dodji Seketeli 2021-03-29 Matthias Maennich clang-format: Minor correction to not break parameters on the first line * .clang-format: correct function parameter break/indentation 2021-03-31 Dodji Seketeli Bug 27598 - abidiff mishandles union member functions * src/abg-default-reporter.cc (default_reporter::report): Assume the parent type of the method can be either a class or a union. * tests/data/test-diff-filter/test-PR27598-report-0.txt: New reference output for the test. * tests/data/test-diff-filter/test-PR27598-v{0,1}.cc: New source code for the input binaries below. * tests/data/test-diff-filter/test-PR27598-v{0,1}.o: New input test binaries. * tests/data/Makefile.am: Add the new test material to source distribution. * tests/test-diff-filter.cc (in_out_specs): Add the test inputs above to this test harness. 2021-03-25 Dodji Seketeli Bug 27569 - abidiff misses a function parameter addition * include/abg-comparison.h (enum diff_category): Add a new FN_PARM_ADD_REMOVE_CHANGE_CATEGORY enumerator and adjust the following enumerator values. Update the EVERYTHING_CATEGORY accordingly. (function_type_diff::{sorted_deleted_parms, sorted_added_parms}): Add new member functions. * src/abg-comparison.cc (function_type_diff::{sorted_deleted_parms, sorted_added_parms}): Define new accessors. (get_default_harmful_categories_bitmap): Consider changes of the category FN_PARM_ADD_REMOVE_CHANGE_CATEGORY as harmful. (operator<<(ostream& o, diff_category c)): Support the new FN_PARM_ADD_REMOVE_CHANGE_CATEGORY while serializing a category bitmap. * src/abg-comp-filter.cc (has_added_or_removed_function_parameters): Define new static function. (categorize_harmful_diff_node): Categorize diff nodes representing function parameter addition or removal as FN_PARM_ADD_REMOVE_CHANGE_CATEGORY. * tests/data/test-diff-filter/test-PR27569-report-0.txt: New test reference output. * tests/data/test-diff-filter/test-PR27569-v{0,1}.abi: New test inputs. * tests/data/Makefile.am: Add the new test inputs to the source distribution. * tests/test-diff-filter.cc (in_out_specs): Add the new test inputs to this test harness. * tests/data/test-diff-filter/test31-pr18535-libstdc++-report-0.txt: Adjust. * tests/data/test-diff-filter/test31-pr18535-libstdc++-report-1.txt: Likewise. * tests/data/test-diff-pkg/libsigc++-2.0-0c2a_2.4.0-1_amd64--libsigc++-2.0-0v5_2.4.1-1ubuntu2_amd64-report-0.txt: Likewise. * tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-0.txt: Likewise. * tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-1.txt: Likewise. 2021-03-15 Giuliano Procida dwarf-reader: Treat union members as public by default. * src/abg-dwarf-reader.cc (add_or_update_union_type): Replace "class" with "union" in comments; give union members public access by default. (finish_member_function_reading): Give union members public access by default. (maybe_set_member_type_access_specifier): Give union members public access by default. * tests/data/test-annotate/libtest24-drop-fns-2.so.abi: Refresh. * tests/data/test-annotate/libtest24-drop-fns.so.abi: Refresh. * tests/data/test-annotate/test-anonymous-members-0.o.abi: Refresh. * tests/data/test-annotate/test13-pr18894.so.abi: Refresh. * tests/data/test-annotate/test14-pr18893.so.abi: Refresh. * tests/data/test-annotate/test15-pr18892.so.abi: Refresh. * tests/data/test-annotate/test17-pr19027.so.abi: Refresh. * tests/data/test-annotate/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: Refresh. * tests/data/test-annotate/test19-pr19023-libtcmalloc_and_profiler.so.abi: Refresh. * tests/data/test-annotate/test20-pr19025-libvtkParallelCore-6.1.so.abi: Refresh. * tests/data/test-annotate/test21-pr19092.so.abi: Refresh. * tests/data/test-diff-dwarf-abixml/PR25409-librte_bus_dpaa.so.20.0.abi: Refresh. * tests/data/test-diff-dwarf-abixml/test0-pr19026-libvtkIOSQL-6.1.so.1.abi: Refresh. * tests/data/test-read-dwarf/PR22015-libboost_iostreams.so.abi: Refresh. * tests/data/test-read-dwarf/PR25007-sdhci.ko.abi: Refresh. * tests/data/test-read-dwarf/libtest24-drop-fns-2.so.abi: Refresh. * tests/data/test-read-dwarf/libtest24-drop-fns.so.abi: Refresh. * tests/data/test-read-dwarf/test-PR26568-1.o.abi: Refresh. * tests/data/test-read-dwarf/test-PR26568-2.o.abi: Refresh. * tests/data/test-read-dwarf/test-libandroid.so.abi: Refresh. * tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: Refresh. * tests/data/test-read-dwarf/test11-pr18828.so.abi: Refresh. * tests/data/test-read-dwarf/test12-pr18844.so.abi: Refresh. * tests/data/test-read-dwarf/test13-pr18894.so.abi: Refresh. * tests/data/test-read-dwarf/test14-pr18893.so.abi: Refresh. * tests/data/test-read-dwarf/test15-pr18892.so.abi: Refresh. * tests/data/test-read-dwarf/test16-pr18904.so.abi: Refresh. * tests/data/test-read-dwarf/test17-pr19027.so.abi: Refresh. * tests/data/test-read-dwarf/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: Refresh. * tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi: Refresh. * tests/data/test-read-dwarf/test20-pr19025-libvtkParallelCore-6.1.so.abi: Refresh. * tests/data/test-read-dwarf/test21-pr19092.so.abi: Refresh. * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: Refresh. * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Refresh. 2021-03-12 Ben Woodard via Libabigail Bug 27512 - Remove broken zip-archive support * configure.ac: remove --enable-zip-archive option and logic associated with it. * include/abg-libzip-utils.h: Remove. * src/abg-libzip-utils.cc: Likewise. * include/Makefile.am: remove reference to include/abg-libzip-utils.h that no longer exists. * src/Makefile.am: remove reference to src/abg-libzip-utils.cc that no longer exists. * relicensing-scripts/file-licenses.orig.txt: remove references to files that no longer exist. * relicensing-scripts/files-with-lgplv3.txt: remove references to files that no longer exist. * tests/test-write-read-archive.cc: Remove because it tests code that no longer exists. * tests/Makefile.am: remove reference to tests that no longer exist. * include/abg-reader.h: remove conditionally compiled code for zip archives. * include/abg-tools-utils.h: remove conditionally compiled code for zip archives. * src/abg-corpus.cc: remove conditionally compiled code for zip archives. * src/abg-reader.cc: remove conditionally compiled code for zip archives. * src/abg-tools-utils.cc: remove conditionally compiled code for zip archives. * src/abg-writer.cc: remove conditionally compiled code for zip archives. * tools/abidiff.cc: remove conditionally compiled code for zip archives. * tools/abilint.cc: remove conditionally compiled code for zip archives. * tools/abiar.c: Remove. * tools/Makefile.am: remove references to abiar a utility that no longer has a reason for existing. 2021-03-18 Dodji Seketeli dwarf-reader: Support more DWARF-5 type DIEs * src/abg-dwarf-reader.cc (is_type_tag): Support DW_TAG_coarray_type, DW_TAG_atomic_type and DW_TAG_immutable_type. * tests/data/test-diff-pkg/elfutils-debuginfo-0.183-1.el9.x86_64.rpm: Add new binary test input. * tests/data/test-diff-pkg/elfutils-libs-debuginfo-0.183-1.el9.x86_64.rpm: Likewise. * tests/data/test-diff-pkg/elfutils-libs-0.183-1.el9.x86_64.rpm: Likewise. * tests/data/test-diff-pkg/elfutils-libs-debuginfo-0.183-1.el9.x86_64-self-check-report-0.txt: Add new reference test output. * tests/test-diff-pkg.cc (in_out_specs): Add the test inputs above to the harness. 2021-03-10 Giuliano Procida DWARF reader: Comment ARM32 ELF address interpretation * src/abg-dwarf-reader.cc (read_context::load_symbol_maps_from_symtab_section): Add descriptive comment to ARM32 address handling; shorten the assignment using &=. 2021-01-27 Matthias Maennich dwarf-reader split: create abg-symtab-reader.{h,cc} and test case * src/abg-symtab-reader.h: New header file. * src/abg-symtab-reader.cc: New source file. * src/Makefile.am: Add new source files. * tests/Makefile.am: Add new test case runtestsymtabreader. * tests/test-symtab-reader.cc: New test source file. Reviewed-by: Giuliano Procida 2021-03-09 Giuliano Procida DWARF reader: Interpret ARM32 ELF addresses correctly * src/abg-dwarf-reader.cc (read_context::load_symbol_maps_from_symtab_section): Clear bit zero of ARM32 function addresses. * src/abg-elf-helpers.cc (architecture_is_arm32): Add new function. * src/abg-elf-helpers.h (architecture_is_arm32): Likewise. * tests/data/test-read-dwarf/test-libandroid.so.abi: Update. 2021-01-27 Matthias Maennich abg-ir: elf_symbol: add is_suppressed field * include/abg-ir.h (elf_symbol::elf_symbol): Add is_suppressed parameter. (elf_symbol::create): Likewise. (elf_symbol::is_suppressed): New getter declaration. (elf_symbol::set_is_suppressed): New setter declaration. * src/abg-ir.cc (elf_symbol::priv::priv): Add is_suppressed parameter. (elf_symbol::priv::is_suppressed_): New field. (elf_symbol::elf_symbol): Add is_suppressed parameter. (elf_symbol::create): Likewise. (elf_symbol::is_suppressed): New getter implementation. (elf_symbol::set_is_suppressed): New setter implementation. Reviewed-by: Giuliano Procida 2021-01-27 Matthias Maennich abg-ir: elf_symbol: add is_in_ksymtab field * include/abg-ir.h (elf_symbol::elf_symbol): Add is_in_ksymtab parameter. (elf_symbol::create): Likewise. (elf_symbol::is_in_ksymtab): New getter declaration. (elf_symbol::set_is_in_ksymtab): New setter declaration. * src/abg-ir.cc (elf_symbol::priv::priv): Add is_in_ksymtab parameter. (elf_symbol::priv::is_in_ksymtab_): New field. (elf_symbol::elf_symbol): Add is_in_ksymtab parameter. (elf_symbol::create): Likewise. (elf_symbol::is_in_ksymtab): New getter implementation. (elf_symbol::set_is_in_ksymtab): New setter implementation. Reviewed-by: Giuliano Procida 2021-01-27 Matthias Maennich abg-cxx-compat: add simplified version of std::optional * include/abg-cxx-compat.h (abg_compat::optional): Add new class. * tests/tests-cxx-compat.cc: Add new test cases. Reviewed-by: Giuliano Procida 2021-03-02 Ben Woodard via Libabigail Fix declaratons of conditionally defined functions * include/abg-reader.h (read_corpus_from_file): Guard the declaration of these overloads with #ifdef WITH_ZIP_ARCHIVE. * tools/abilint.cc: Guard the use of abigail::xml_reader::read_corpus_from_file with #ifdef WITH_ZIP_ARCHIVE. 2021-03-08 Dodji Seketeli Revert "Fix declaratons of conditionally defined functions" * include/abg-reader.h: * tools/abilint.cc: 2021-03-02 Ben Woodard via Libabigail Fix declaratons of conditionally defined functions * include/abg-reader.h: * tools/abilint.cc: 2021-03-08 Dodji Seketeli tests/catch.hpp: Add SPDX header back * tests/lib/catch.hpp: Add SPDX header back. 2021-02-25 Dodji Seketeli dwarf-reader: Keep stable order when de-duplicating class definitions * src/abg-dwarf-reader.cc (read_context::resolve_declaration_only_classes): Compare the classes that have the same name across several TU, always in the same order. * tests/data/test-annotate/test15-pr18892.so.abi: Adjust. * tests/data/test-read-dwarf/test15-pr18892.so.abi: Likewise. 2021-02-24 Dodji Seketeli Better sorting of (anonymous) types in ABIXML files * src/abg-writer.cc (type_ptr_cmp::operator()): Use the internal pretty representation of types, for comparison. * tests/data/test-read-dwarf/PR22015-libboost_iostreams.so.abi: Adjust. * tests/data/test-read-dwarf/PR22122-libftdc.so.abi: Likewise. * tests/data/test-read-dwarf/PR25007-sdhci.ko.abi: Likewise. * tests/data/test-read-dwarf/PR25042-libgdbm-clang-dwarf5.so.6.0.0.abi: Likewise. * tests/data/test-read-dwarf/test-libandroid.so.abi: Likewise. * tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: Likewise. * tests/data/test-read-dwarf/test12-pr18844.so.abi: Likewise. * tests/data/test-read-dwarf/test13-pr18894.so.abi: Likewise. * tests/data/test-read-dwarf/test14-pr18893.so.abi: Likewise. * tests/data/test-read-dwarf/test15-pr18892.so.abi: Likewise. * tests/data/test-read-dwarf/test16-pr18904.so.abi: Likewise. * tests/data/test-read-dwarf/test17-pr19027.so.abi: Likewise. * tests/data/test-read-dwarf/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: Likewise. * tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi: Likewise. * tests/data/test-read-dwarf/test20-pr19025-libvtkParallelCore-6.1.so.abi: Likewise. * tests/data/test-read-dwarf/test21-pr19092.so.abi: Likewise. * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: Likewise. * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Likewise. * tests/data/test-annotate/test13-pr18894.so.abi: Likewise. * tests/data/test-annotate/test14-pr18893.so.abi: Likewise. * tests/data/test-annotate/test15-pr18892.so.abi: Likewise. * tests/data/test-annotate/test17-pr19027.so.abi: Likewise. * tests/data/test-annotate/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: Likewise. * tests/data/test-annotate/test19-pr19023-libtcmalloc_and_profiler.so.abi: Likewise. * tests/data/test-annotate/test20-pr19025-libvtkParallelCore-6.1.so.abi: Likewise. * tests/data/test-annotate/test21-pr19092.so.abi: Likewise. 2021-02-23 Dodji Seketeli tests: Update to catch.hpp v2.13.4 and fix #2178 * tests/lib/catch.hpp: Update to v2.13.4 and initialize sigStackSize to 32768 for now, as suggested by https://github.com/catchorg/Catch2/issues/2178. 2021-02-11 Dodji Seketeli Don't consider type name when comparing typedefs * include/abg-ir.h (maybe_compare_as_member_decls): Declare new function. Make it a friend of class decl_base. * src/abg-dwarf-reader.cc (maybe_canonicalize_type): Don't early canonicalize typedefs because they can be "part" of a type that is not yet completed, especially considering that class declaration resolution is part of type building, stricto sensu. * src/abg-ir.cc (maybe_compare_as_member_decls): Factorize this out of ... (equals): ... the overload for decl_base. Use it in the overload for typedef_decl. * tests/data/test-diff-pkg/nmap-7.70-5.el8_testjcc.x86_64-self-check-report-0.txt: New test reference output. * tests/data/test-diff-pkg/nmap-7.70-5.el8_testjcc.x86_64.rpm: New binary input. * tests/data/test-diff-pkg/nmap-debuginfo-7.70-5.el8_testjcc.x86_64.rpm: Likewise. * tests/data/Makefile.am: Add these new testing material to source distribution. * tests/test-diff-pkg.cc (in_out_specs): Add the new test input to the harness. * tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-0.txt: Adjust. * tests/data/test-diff-suppr/test39-opaque-type-report-0.txt: Adjust. 2021-02-10 Dodji Seketeli Use generic internal type name to canonicalize anonymous enums * src/abg-ir.cc (has_generic_anonymous_internal_type_name) : Define new static function. (get_generic_anonymous_internal_type_name): Use it here. (decl_base::get_pretty_representation): For internal purposes, build an anonymous name that is stable. * tests/data/test-annotate/test21-pr19092.so.abi: Adjust. * tests/data/test-diff-pkg/PR24690/PR24690-report-0.txt: Adjust. * tests/data/test-diff-pkg/nss-3.23.0-1.0.fc23.x86_64-report-0.txt: Adjust. * tests/data/test-read-dwarf/PR22122-libftdc.so.abi: Adjust. * tests/data/test-read-dwarf/test-libandroid.so.abi: Adjust. * tests/data/test-read-dwarf/test21-pr19092.so.abi: Adjust. 2021-02-08 Giuliano Procida abg-dwarf-reader: Fix typo in compare_dies_string_attribute_value * src/abg-dwarf-reader.cc (compare_dies_string_attribute_value): Typo fix. 2021-01-27 Giuliano Procida abidiff: do not qualify member names in diff report * src/abg-reporter-priv.cc (represent_data_member): Do not qualify member names. (represent): Do not qualify member names. * tests/data/test-abicompat/test0-fn-changed-report-0.txt: Refresh. * tests/data/test-abicompat/test0-fn-changed-report-2.txt: Refresh. * tests/data/test-abicompat/test5-fn-changed-report-0.txt: Refresh. * tests/data/test-abicompat/test5-fn-changed-report-1.txt: Refresh. * tests/data/test-abicompat/test6-var-changed-report-0.txt: Refresh. * tests/data/test-abicompat/test6-var-changed-report-1.txt: Refresh. * tests/data/test-abicompat/test7-fn-changed-report-0.txt: Refresh. * tests/data/test-abicompat/test7-fn-changed-report-1.txt: Refresh. * tests/data/test-abicompat/test7-fn-changed-report-2.txt: Refresh. * tests/data/test-abicompat/test8-fn-changed-report-0.txt: Refresh. * tests/data/test-abicompat/test9-fn-changed-report-0.txt: Refresh. * tests/data/test-abidiff-exit/qualifier-typedef-array-report-1.txt: Refresh. * tests/data/test-abidiff-exit/test-fun-param-report.txt: Refresh. * tests/data/test-abidiff-exit/test-headers-dirs/test-headers-dir-report-2.txt: Refresh. * tests/data/test-abidiff-exit/test-leaf-cxx-members-report.txt: Refresh. * tests/data/test-abidiff-exit/test-leaf-peeling-report.txt: Refresh. * tests/data/test-abidiff-exit/test-leaf-redundant-report.txt: Refresh. * tests/data/test-abidiff-exit/test-member-size-report0.txt: Refresh. * tests/data/test-abidiff-exit/test-member-size-report1.txt: Refresh. * tests/data/test-abidiff-exit/test-net-change-report0.txt: Refresh. * tests/data/test-abidiff/test-PR18791-report0.txt: Refresh. * tests/data/test-abidiff/test-qual-type0-report.txt: Refresh. * tests/data/test-abidiff/test-struct0-report.txt: Refresh. * tests/data/test-abidiff/test-struct1-report.txt: Refresh. * tests/data/test-diff-dwarf/PR25058-liblttng-ctl-report-1.txt: Refresh. * tests/data/test-diff-dwarf/test0-report.txt: Refresh. * tests/data/test-diff-dwarf/test1-report.txt: Refresh. * tests/data/test-diff-dwarf/test10-report.txt: Refresh. * tests/data/test-diff-dwarf/test11-report.txt: Refresh. * tests/data/test-diff-dwarf/test13-report.txt: Refresh. * tests/data/test-diff-dwarf/test21-redundant-fn-report-0.txt: Refresh. * tests/data/test-diff-dwarf/test27-local-base-diff-report.txt: Refresh. * tests/data/test-diff-dwarf/test3-report.txt: Refresh. * tests/data/test-diff-dwarf/test32-fnptr-changes-report-0.txt: Refresh. * tests/data/test-diff-dwarf/test33-fnref-changes-report-0.txt: Refresh. * tests/data/test-diff-dwarf/test36-ppc64-aliases-report-0.txt: Refresh. * tests/data/test-diff-dwarf/test37-union-report-0.txt: Refresh. * tests/data/test-diff-dwarf/test38-union-report-0.txt: Refresh. * tests/data/test-diff-dwarf/test39-union-report-0.txt: Refresh. * tests/data/test-diff-dwarf/test4-report.txt: Refresh. * tests/data/test-diff-dwarf/test40-report-0.txt: Refresh. * tests/data/test-diff-dwarf/test44-anon-struct-union-report-0.txt: Refresh. * tests/data/test-diff-dwarf/test45-anon-dm-change-report-0.txt: Refresh. * tests/data/test-diff-dwarf/test46-rust-report-0.txt: Refresh. * tests/data/test-diff-dwarf/test5-report.txt: Refresh. * tests/data/test-diff-dwarf/test8-report.txt: Refresh. * tests/data/test-diff-filter/libtest45-basic-type-change-report-0.txt: Refresh. * tests/data/test-diff-filter/test-PR26739-2-report-0.txt: Refresh. * tests/data/test-diff-filter/test0-report.txt: Refresh. * tests/data/test-diff-filter/test01-report.txt: Refresh. * tests/data/test-diff-filter/test1-report.txt: Refresh. * tests/data/test-diff-filter/test10-report.txt: Refresh. * tests/data/test-diff-filter/test11-report.txt: Refresh. * tests/data/test-diff-filter/test13-report.txt: Refresh. * tests/data/test-diff-filter/test14-0-report.txt: Refresh. * tests/data/test-diff-filter/test14-1-report.txt: Refresh. * tests/data/test-diff-filter/test15-0-report.txt: Refresh. * tests/data/test-diff-filter/test15-1-report.txt: Refresh. * tests/data/test-diff-filter/test16-report-2.txt: Refresh. * tests/data/test-diff-filter/test16-report.txt: Refresh. * tests/data/test-diff-filter/test17-0-report.txt: Refresh. * tests/data/test-diff-filter/test17-1-report.txt: Refresh. * tests/data/test-diff-filter/test18-report.txt: Refresh. * tests/data/test-diff-filter/test2-report.txt: Refresh. * tests/data/test-diff-filter/test25-cyclic-type-report-0.txt: Refresh. * tests/data/test-diff-filter/test25-cyclic-type-report-1.txt: Refresh. * tests/data/test-diff-filter/test26-qualified-redundant-node-report-0.txt: Refresh. * tests/data/test-diff-filter/test26-qualified-redundant-node-report-1.txt: Refresh. * tests/data/test-diff-filter/test27-redundant-and-filtered-children-nodes-report-0.txt: Refresh. * tests/data/test-diff-filter/test27-redundant-and-filtered-children-nodes-report-1.txt: Refresh. * tests/data/test-diff-filter/test27-redundant-and-filtered-children-nodes-report-2.txt: Refresh. * tests/data/test-diff-filter/test28-redundant-and-filtered-children-nodes-report-0.txt: Refresh. * tests/data/test-diff-filter/test28-redundant-and-filtered-children-nodes-report-1.txt: Refresh. * tests/data/test-diff-filter/test29-finer-redundancy-marking-report-0.txt: Refresh. * tests/data/test-diff-filter/test3-report.txt: Refresh. * tests/data/test-diff-filter/test30-pr18904-rvalueref-report0.txt: Refresh. * tests/data/test-diff-filter/test30-pr18904-rvalueref-report1.txt: Refresh. * tests/data/test-diff-filter/test30-pr18904-rvalueref-report2.txt: Refresh. * tests/data/test-diff-filter/test31-pr18535-libstdc++-report-0.txt: Refresh. * tests/data/test-diff-filter/test31-pr18535-libstdc++-report-1.txt: Refresh. * tests/data/test-diff-filter/test32-ppc64le-struct-change-report0.txt: Refresh. * tests/data/test-diff-filter/test35-pr18754-no-added-syms-report-0.txt: Refresh. * tests/data/test-diff-filter/test36-report-0.txt: Refresh. * tests/data/test-diff-filter/test37-report-0.txt: Refresh. * tests/data/test-diff-filter/test39/test39-report-0.txt: Refresh. * tests/data/test-diff-filter/test42-leaf-report-output-0.txt: Refresh. * tests/data/test-diff-filter/test44-anonymous-data-member-report-0.txt: Refresh. * tests/data/test-diff-filter/test44-anonymous-data-member-report-1.txt: Refresh. * tests/data/test-diff-filter/test9-report.txt: Refresh. * tests/data/test-diff-pkg/GtkAda-gl-2.24.2-29.fc29.x86_64--2.24.2-30.fc30.x86_64-report-0.txt: Refresh. * tests/data/test-diff-pkg/PR24690/PR24690-report-0.txt: Refresh. * tests/data/test-diff-pkg/dirpkg-1-report-1.txt: Refresh. * tests/data/test-diff-pkg/dirpkg-3-report-1.txt: Refresh. * tests/data/test-diff-pkg/dirpkg-3-report-2.txt: Refresh. * 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: Refresh. * tests/data/test-diff-pkg/libcdio-0.94-1.fc26.x86_64--libcdio-0.94-2.fc26.x86_64-report.1.txt: Refresh. * tests/data/test-diff-pkg/libsigc++-2.0-0c2a_2.4.0-1_amd64--libsigc++-2.0-0v5_2.4.1-1ubuntu2_amd64-report-0.txt: Refresh. * tests/data/test-diff-pkg/nss-3.23.0-1.0.fc23.x86_64-report-0.txt: Refresh. * tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-2.txt: Refresh. * tests/data/test-diff-pkg/symlink-dir-test1-report0.txt: Refresh. * tests/data/test-diff-pkg/tarpkg-0-report-0.txt: Refresh. * tests/data/test-diff-pkg/tarpkg-1-report-0.txt: Refresh. * tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-0.txt: Refresh. * tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-1.txt: Refresh. * tests/data/test-diff-suppr/libtest48-soname-abixml-report-1.txt: Refresh. * tests/data/test-diff-suppr/test0-type-suppr-report-0.txt: Refresh. * tests/data/test-diff-suppr/test0-type-suppr-report-3.txt: Refresh. * tests/data/test-diff-suppr/test0-type-suppr-report-5.txt: Refresh. * tests/data/test-diff-suppr/test0-type-suppr-report-7.txt: Refresh. * tests/data/test-diff-suppr/test1-typedef-suppr-report-0.txt: Refresh. * tests/data/test-diff-suppr/test1-typedef-suppr-report-2.txt: Refresh. * tests/data/test-diff-suppr/test11-add-data-member-report-0.txt: Refresh. * tests/data/test-diff-suppr/test12-add-data-member-report-0.txt: Refresh. * tests/data/test-diff-suppr/test12-add-data-member-report-2.txt: Refresh. * tests/data/test-diff-suppr/test13-suppr-through-pointer-report-0.txt: Refresh. * tests/data/test-diff-suppr/test13-suppr-through-pointer-report-1.txt: Refresh. * tests/data/test-diff-suppr/test14-suppr-non-redundant-report-0.txt: Refresh. * tests/data/test-diff-suppr/test14-suppr-non-redundant-report-1.txt: Refresh. * tests/data/test-diff-suppr/test15-suppr-added-fn-report-0.txt: Refresh. * tests/data/test-diff-suppr/test15-suppr-added-fn-report-1.txt: Refresh. * tests/data/test-diff-suppr/test15-suppr-added-fn-report-5.txt: Refresh. * tests/data/test-diff-suppr/test16-suppr-removed-fn-report-0.txt: Refresh. * tests/data/test-diff-suppr/test16-suppr-removed-fn-report-2.txt: Refresh. * tests/data/test-diff-suppr/test16-suppr-removed-fn-report-5.txt: Refresh. * tests/data/test-diff-suppr/test17-suppr-added-var-report-0.txt: Refresh. * tests/data/test-diff-suppr/test17-suppr-added-var-report-2.txt: Refresh. * tests/data/test-diff-suppr/test17-suppr-added-var-report-5.txt: Refresh. * tests/data/test-diff-suppr/test18-suppr-removed-var-report-0.txt: Refresh. * tests/data/test-diff-suppr/test18-suppr-removed-var-report-2.txt: Refresh. * tests/data/test-diff-suppr/test18-suppr-removed-var-report-5.txt: Refresh. * tests/data/test-diff-suppr/test2-struct-suppr-report-0.txt: Refresh. * tests/data/test-diff-suppr/test23-alias-filter-report-0.txt: Refresh. * tests/data/test-diff-suppr/test23-alias-filter-report-2.txt: Refresh. * tests/data/test-diff-suppr/test24-soname-report-1.txt: Refresh. * tests/data/test-diff-suppr/test24-soname-report-10.txt: Refresh. * tests/data/test-diff-suppr/test24-soname-report-12.txt: Refresh. * tests/data/test-diff-suppr/test24-soname-report-14.txt: Refresh. * tests/data/test-diff-suppr/test24-soname-report-16.txt: Refresh. * tests/data/test-diff-suppr/test24-soname-report-4.txt: Refresh. * tests/data/test-diff-suppr/test25-typedef-report-0.txt: Refresh. * tests/data/test-diff-suppr/test26-loc-suppr-report-0.txt: Refresh. * tests/data/test-diff-suppr/test26-loc-suppr-report-3.txt: Refresh. * tests/data/test-diff-suppr/test29-soname-report-3.txt: Refresh. * tests/data/test-diff-suppr/test29-soname-report-6.txt: Refresh. * tests/data/test-diff-suppr/test29-soname-report-8.txt: Refresh. * tests/data/test-diff-suppr/test3-struct-suppr-report-0.txt: Refresh. * tests/data/test-diff-suppr/test3-struct-suppr-report-1.txt: Refresh. * tests/data/test-diff-suppr/test3-struct-suppr-report-2.txt: Refresh. * tests/data/test-diff-suppr/test30-report-0.txt: Refresh. * tests/data/test-diff-suppr/test31-report-1.txt: Refresh. * tests/data/test-diff-suppr/test33-report-0.txt: Refresh. * tests/data/test-diff-suppr/test35-leaf-report-0.txt: Refresh. * tests/data/test-diff-suppr/test36-leaf-report-0.txt: Refresh. * tests/data/test-diff-suppr/test4-local-suppr-report-0.txt: Refresh. * tests/data/test-diff-suppr/test4-local-suppr-report-1.txt: Refresh. * tests/data/test-diff-suppr/test42-negative-suppr-type-report-0.txt: Refresh. * tests/data/test-diff-suppr/test42-negative-suppr-type-report-1.txt: Refresh. * tests/data/test-diff-suppr/test46-PR25128-report-1.txt: Refresh. * tests/data/test-diff-suppr/test46-PR25128-report-2.txt: Refresh. * tests/data/test-diff-suppr/test47-non-reachable-types-report-1.txt: Refresh. * tests/data/test-diff-suppr/test47-non-reachable-types-report-2.txt: Refresh. * tests/data/test-diff-suppr/test47-non-reachable-types-report-4.txt: Refresh. * tests/data/test-diff-suppr/test47-non-reachable-types-report-7.txt: Refresh. * tests/data/test-diff-suppr/test5-fn-suppr-report-0.txt: Refresh. * tests/data/test-diff-suppr/test5-fn-suppr-report-1.txt: Refresh. * tests/data/test-diff-suppr/test5-fn-suppr-report-2.txt: Refresh. * tests/data/test-diff-suppr/test5-fn-suppr-report-3.txt: Refresh. * tests/data/test-diff-suppr/test5-fn-suppr-report-4.txt: Refresh. * tests/data/test-diff-suppr/test5-fn-suppr-report-5.txt: Refresh. * tests/data/test-diff-suppr/test6-fn-suppr-report-0-1.txt: Refresh. * tests/data/test-diff-suppr/test6-fn-suppr-report-0.txt: Refresh. * tests/data/test-diff-suppr/test6-fn-suppr-report-1.txt: Refresh. * tests/data/test-diff-suppr/test6-fn-suppr-report-2.txt: Refresh. * tests/data/test-diff-suppr/test6-fn-suppr-report-3.txt: Refresh. * tests/data/test-diff-suppr/test6-fn-suppr-report-4.txt: Refresh. * tests/data/test-diff-suppr/test7-var-suppr-report-0.txt: Refresh. * tests/data/test-diff-suppr/test7-var-suppr-report-1.txt: Refresh. * tests/data/test-diff-suppr/test7-var-suppr-report-2.txt: Refresh. * tests/data/test-diff-suppr/test7-var-suppr-report-3.txt: Refresh. * tests/data/test-diff-suppr/test7-var-suppr-report-4.txt: Refresh. * tests/data/test-diff-suppr/test7-var-suppr-report-7.txt: Refresh. * tests/data/test-diff-suppr/test7-var-suppr-report-8.txt: Refresh. * tests/data/test-diff-suppr/test8-redundant-fn-report-0.txt: Refresh. * tests/data/test-diff-suppr/test8-redundant-fn-report-1.txt: Refresh. 2021-02-08 Dodji Seketeli dwarf-reader: Use DW_FORM_line_strp only if it's present * configure.ac: Define if HAS_DW_FORM_line_strp if the DW_FORM_line_strp enumerator is present. * src/abg-dwarf-reader.cc (form_is_DW_FORM_line_strp): Define new static function. (compare_dies_string_attribute_value): Use it. 2021-02-04 Dodji Seketeli Bug 27267 - Better support for opaque enum types * src/abg-dwarf-reader.cc (get_opaque_version_of_type): Do not quit early for enum types, because the code that comes a bit later can handle enums. Add the newly built enum to its scope for proper life cycle management. * tests/data/test-diff-suppr/PR27267/include-dir-v{0,1}/include.h: New include files for the input test library. * tests/data/test-diff-suppr/PR27267/libtestpr27267-v{0,1}.so: New input test library. * tests/data/test-diff-suppr/PR27267/report-1.txt: New reference output for the comparison. * tests/data/test-diff-suppr/PR27267/v{0,1}.c: Source code for the new input test library. * tests/data/Makefile.am: Add the new test material above to source distribution. * tests/test-diff-suppr.cc (in_out_specs): Add the new test input above to the test harness. 2021-02-03 Dodji Seketeli Bug 27331 - Data member offset change not considered local * src/abg-ir.cc (equals): In the overload of class_or_union, when a data member changes without having its type change, then consider the data change as being local. * tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-3.txt: Adjust. * tests/data/test-diff-filter/test-PR27331-report-0.txt: New reference output. * tests/data/test-diff-filter/test-PR27331-v{0,1}.c: New test source files. * tests/data/test-diff-filter/test-PR27331-v{0,1}.o: New test binary inputs. * tests/data/Makefile.am: Add these new test material to source distribution. * tests/test-diff-filter.cc (in_out_specs): Add the tests above to the harness. 2021-02-02 Dodji Seketeli Bug 27165 - Better support multi-language binaries * src/abg-dwarf-reader.cc (get_scope_for_die): Get the language of the DIE from the compilation unit of the DIE itself. * tests/data/test-types-stability/PR27165-libzmq.so.5.2.3: New test input. * tests/data/test-types-stability/PR27165-libzmq.so.5.2.3.debug: Debug information for the new test input. * tests/data/Makefile.am: Add the test inputs above to the source distribution. * tests/test-types-stability.cc (elf_paths): Add the new test inputs to this test harness. 2020-10-22 Dodji Seketeli Bump ABIXML format version to 2.0 * include/abg-corpus.h (corpus::init_format_version): Declare new private method. (corpus::set_environment): Make this non-const. (corpus::{get,set}_format_{major,minor}_version_number): Declare new accessors. * src/abg-corpus.cc (corpus::init_format_version): Define new method. (corpus::set_environment): By default, initialize the format version number of the corpus to the one supported by Libabigail. (corpus::{get,set}_format_{major,minor}_version_number): Define new accessors. * include/abg-ir.h: Include abg-config.h to use the abigail::config. (environment::get_config): Declare new accessor. * src/abg-ir.cc (environment::priv::config_): Add new data member. (environment::get_config): Define new accessor. * src/abg-config.cc (config::config): Bump the format version number to "2.0". * src/abg-corpus-priv.h (corpus::priv::format_{major,minor}_version_number_): Add new data members. * src/abg-reader.cc (handle_version_attribute): Define new static function. (read_corpus_from_input, read_corpus_group_from_input): Use it to read the value of the "version" attribute and set the format version number of the corpus and corpus group accordingly. * src/abg-writer.cc (write_context::m_config): Remove the config object because we can now get it from the environment. (write_context::get_config): Get the config object from the environment. (write_translation_unit): Do not emit the version attribute on the translation unit element anymore. (write_version_info): Define static function. (write_corpus, write_corpus_group): Use it to emit version attribute on both the corpus and corpus group elements. * tools/abidiff.cc (emit_incomptatible_format_version_error_message): Define new static function. (main): Ensure that corpora and corpus groups being compared have the same major version number. * tests/update-test-output.py: Adjust syntax for python3. * tests/data/test-annotate/libtest23.so.abi: Adjust. * tests/data/test-annotate/libtest24-drop-fns-2.so.abi: Likewise. * tests/data/test-annotate/libtest24-drop-fns.so.abi: Likewise. * tests/data/test-annotate/test-anonymous-members-0.o.abi: Likewise. * tests/data/test-annotate/test0.abi: Likewise. * tests/data/test-annotate/test1.abi: Likewise. * tests/data/test-annotate/test13-pr18894.so.abi: Likewise. * tests/data/test-annotate/test14-pr18893.so.abi: Likewise. * tests/data/test-annotate/test15-pr18892.so.abi: Likewise. * tests/data/test-annotate/test17-pr19027.so.abi: Likewise. * tests/data/test-annotate/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: Likewise. * tests/data/test-annotate/test19-pr19023-libtcmalloc_and_profiler.so.abi: Likewise. * tests/data/test-annotate/test2.so.abi: Likewise. * tests/data/test-annotate/test20-pr19025-libvtkParallelCore-6.1.so.abi: Likewise. * tests/data/test-annotate/test21-pr19092.so.abi: Likewise. * tests/data/test-annotate/test3.so.abi: Likewise. * tests/data/test-annotate/test4.so.abi: Likewise. * tests/data/test-annotate/test5.o.abi: Likewise. * tests/data/test-annotate/test6.so.abi: Likewise. * tests/data/test-annotate/test7.so.abi: Likewise. * tests/data/test-annotate/test8-qualified-this-pointer.so.abi: Likewise. * tests/data/test-diff-dwarf-abixml/PR25409-librte_bus_dpaa.so.20.0.abi: Likewise. * tests/data/test-diff-dwarf-abixml/test0-pr19026-libvtkIOSQL-6.1.so.1-report-0.txt: Likewise. * tests/data/test-diff-dwarf-abixml/test0-pr19026-libvtkIOSQL-6.1.so.1.abi: Likewise. * tests/data/test-diff-suppr/libtest48-soname-abixml-v0.so.abi: Likewise. * tests/data/test-diff-suppr/libtest48-soname-abixml-v1.so.abi: Likewise. * tests/data/test-read-dwarf/PR22015-libboost_iostreams.so.abi: Likewise. * tests/data/test-read-dwarf/PR22122-libftdc.so.abi: Likewise. * tests/data/test-read-dwarf/PR24378-fn-is-not-scope.abi: Likewise. * tests/data/test-read-dwarf/PR25007-sdhci.ko.abi: Likewise. * tests/data/test-read-dwarf/PR25042-libgdbm-clang-dwarf5.so.6.0.0.abi: Likewise. * tests/data/test-read-dwarf/PR26261/PR26261-exe.abi: Likewise. * tests/data/test-read-dwarf/libtest23.so.abi: Likewise. * tests/data/test-read-dwarf/libtest24-drop-fns-2.so.abi: Likewise. * tests/data/test-read-dwarf/libtest24-drop-fns.so.abi: Likewise. * tests/data/test-read-dwarf/test-PR26568-1.o.abi: Likewise. * tests/data/test-read-dwarf/test-PR26568-2.o.abi: Likewise. * tests/data/test-read-dwarf/test0.abi: Likewise. * tests/data/test-read-dwarf/test0.hash.abi: Likewise. * tests/data/test-read-dwarf/test1.abi: Likewise. * tests/data/test-read-dwarf/test1.hash.abi: Likewise. * tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: Likewise. * tests/data/test-read-dwarf/test11-pr18828.so.abi: Likewise. * tests/data/test-read-dwarf/test12-pr18844.so.abi: Likewise. * tests/data/test-read-dwarf/test13-pr18894.so.abi: Likewise. * tests/data/test-read-dwarf/test14-pr18893.so.abi: Likewise. * tests/data/test-read-dwarf/test15-pr18892.so.abi: Likewise. * tests/data/test-read-dwarf/test16-pr18904.so.abi: Likewise. * tests/data/test-read-dwarf/test17-pr19027.so.abi: Likewise. * tests/data/test-read-dwarf/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: Likewise. * tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi: Likewise. * tests/data/test-read-dwarf/test2.so.abi: Likewise. * tests/data/test-read-dwarf/test2.so.hash.abi: Likewise. * tests/data/test-read-dwarf/test20-pr19025-libvtkParallelCore-6.1.so.abi: Likewise. * tests/data/test-read-dwarf/test21-pr19092.so.abi: Likewise. * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: Likewise. * tests/data/test-read-dwarf/test3.so.abi: Likewise. * tests/data/test-read-dwarf/test3.so.hash.abi: Likewise. * tests/data/test-read-dwarf/test4.so.abi: Likewise. * tests/data/test-read-dwarf/test4.so.hash.abi: Likewise. * tests/data/test-read-dwarf/test5.o.abi: Likewise. * tests/data/test-read-dwarf/test5.o.hash.abi: Likewise. * tests/data/test-read-dwarf/test6.so.abi: Likewise. * tests/data/test-read-dwarf/test6.so.hash.abi: Likewise. * tests/data/test-read-dwarf/test7.so.abi: Likewise. * tests/data/test-read-dwarf/test7.so.hash.abi: Likewise. * tests/data/test-read-dwarf/test8-qualified-this-pointer.so.abi: Likewise. * tests/data/test-read-dwarf/test8-qualified-this-pointer.so.hash.abi: Likewise. * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Likewise. * tests/data/test-read-write/test0.xml: Likewise. * tests/data/test-read-write/test1.xml: Likewise. * tests/data/test-read-write/test10.xml: Likewise. * tests/data/test-read-write/test11.xml: Likewise. * tests/data/test-read-write/test12.xml: Likewise. * tests/data/test-read-write/test13.xml: Likewise. * tests/data/test-read-write/test14.xml: Likewise. * tests/data/test-read-write/test15.xml: Likewise. * tests/data/test-read-write/test16.xml: Likewise. * tests/data/test-read-write/test17.xml: Likewise. * tests/data/test-read-write/test18.xml: Likewise. * tests/data/test-read-write/test19.xml: Likewise. * tests/data/test-read-write/test2.xml: Likewise. * tests/data/test-read-write/test20.xml: Likewise. * tests/data/test-read-write/test21.xml: Likewise. * tests/data/test-read-write/test22.xml: Likewise. * tests/data/test-read-write/test23.xml: Likewise. * tests/data/test-read-write/test24.xml: Likewise. * tests/data/test-read-write/test25.xml: Likewise. * tests/data/test-read-write/test26.xml: Likewise. * tests/data/test-read-write/test27.xml: Likewise. * tests/data/test-read-write/test28-without-std-fns-ref.xml: Likewise. * tests/data/test-read-write/test28-without-std-vars-ref.xml: Likewise. * tests/data/test-read-write/test3.xml: Likewise. * tests/data/test-read-write/test4.xml: Likewise. * tests/data/test-read-write/test5.xml: Likewise. * tests/data/test-read-write/test6.xml: Likewise. * tests/data/test-read-write/test7.xml: Likewise. * tests/data/test-read-write/test8.xml: Likewise. * tests/data/test-read-write/test9.xml: Likewise. 2020-10-20 Dodji Seketeli Bug 26684 - Support DW_AT_data_bit_offset attribute * src/abg-dwarf-reader.cc (read_and_convert_DW_at_bit_offset): Define new static function. (die_member_offset): Primarily use DW_AT_data_bit_offset if its present. Otherwise, look for DW_AT_bit_offset. Use the new read_and_convert_DW_at_bit_offset function to properly interpret DW_AT_bit_offset if its present. Update comment. * tests/data/test-diff-filter/test-PR26684-dwarf{4,5}.o: New binary test inputs. * tests/data/test-diff-filter/test-PR26684.c: Source code of the new binary test inputs above. * tests/data/test-diff-filter/test-PR26684-report-0.txt: New reference test output. * tests/data/Makefile.am: Add the new test material above to source distribution. * tests/test-diff-filter.cc (in_out_specs): Add the test inputs above to this test harness. * tests/data/test-annotate/test13-pr18894.so.abi: Adjust. * tests/data/test-annotate/test15-pr18892.so.abi: Adjust. * tests/data/test-annotate/test17-pr19027.so.abi: Adjust. * tests/data/test-annotate/test19-pr19023-libtcmalloc_and_profiler.so.abi: Adjust. * tests/data/test-annotate/test21-pr19092.so.abi: Adjust. * tests/data/test-diff-dwarf-abixml/PR25409-librte_bus_dpaa.so.20.0.abi: Adjust. * tests/data/test-diff-pkg/libcdio-0.94-1.fc26.x86_64--libcdio-0.94-2.fc26.x86_64-report.1.txt: Adjust. * tests/data/test-read-dwarf/PR25007-sdhci.ko.abi: Adjust. * tests/data/test-read-dwarf/PR25042-libgdbm-clang-dwarf5.so.6.0.0.abi: Adjust. * tests/data/test-read-dwarf/test13-pr18894.so.abi: Adjust. * tests/data/test-read-dwarf/test15-pr18892.so.abi: Adjust. * tests/data/test-read-dwarf/test16-pr18904.so.abi: Adjust. * tests/data/test-read-dwarf/test17-pr19027.so.abi: Adjust. * tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi: Adjust. * tests/data/test-read-dwarf/test21-pr19092.so.abi: Adjust. * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: Adjust. 2021-01-27 Dodji Seketeli Bug 27255 - fedabipkgdiff fails on nfs-utils on Fedora 33 * tools/fedabipkgdiff (RPMCollection::get_sibling_debuginfo): Update comment. (RPMCollection::get_matching_debuginfo): Define new function. (generate_comparison_halves): Use RPMCollection::get_matching_debuginfo instead of RPMCollection::get_sibling_debuginfo. 2021-01-26 Dodji Seketeli dwarf-reader: Support fast DW_FORM_line_strp string comparison * src/abg-dwarf-reader.cc (compare_dies_string_attribute_value): Support DW_FORM_line_strp. * tests/data/test-diff-pkg/sshpass-1.07-1.fc34.x86_64-self-check-report-0.txt: New reference test output. * tests/data/test-diff-pkg/sshpass-1.07-1.fc34.x86_64.rpm: New test input. * tests/data/test-diff-pkg/sshpass-debuginfo-1.07-1.fc34.x86_64.rpm: Likewise. * tests/data/Makefile.am: Add the new testing material above to source distribution. * tests/test-diff-pkg.cc (in_out_specs): Add the test input above to this harness. 2021-01-26 Dodji Seketeli Bug 27232 - fedabipkgdiff fails on gawk from Fedora 33 * tools/abipkgdiff.cc (options::pkg{1,2}): Add new data members to store the packages to compare and have them available for the various functions that may need them down the road. (package::create_abi_file_path): Add new function. (compare_to_self): Use the new package::create_abi_file_path to create the path to the ABI file in a directory not owned by the package. That should increase our chances of having the rights to write that one. Make sure to emit error message when the comparison against self fails. ({compare_task, self_compare_task}::perform): During the process of comparison if an internal error happens, report it. Cleanup the existing reporting a little bit. (pkg_extraction_task::perform): Fix comment. * tests/data/test-diff-pkg/libxfce4ui-devel-4.12.1-8.fc27.ppc64-self-report-0.txt: Adjust. 2021-01-26 Matthias Maennich abipkgdiff: Address operator precedence warning * tools/abipkgdiff.cc (compare_to_self): address clang warning. 2021-01-26 Dodji Seketeli Bug 27233 - fedabipkgdiff fails on package gnupg2 from Fedora 33 * src/abg-dwarf-reader.cc (read_context::canonicalize_types_scheduled): Don't forget to canonicalize types stored in extra_types_to_canonicalize_. * src/abg-ir.cc (type_base::get_canonical_type_for): Add better comment. (hash_as_canonical_type_or_constant): Remove crutch that is useless now that we canonicalize almost all types in the system. 2021-01-25 Dodji Seketeli Bug 27236 - Pointer comparison wrongly fails because of typedef change * src/abg-ir.cc (equals): In the overloads for pointer_type_def, reference_type_def and array_type_def, compare the pointed-to-type modulo typedefs. * tests/data/test-diff-dwarf/test42-PR21296-clanggcc-report0.txt: Adjust. * 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: Adjust. * tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-2.txt: Adjust. 2021-01-22 Dodji Seketeli Ignore duplicated functions and those not associated with ELF symbols * include/abg-ir.h (class_or_union::string_mem_fn_sptr_map_type): Add a typedef for unordered_map. (class_or_union::find_member_function_sptr): Declare new function. * src/abg-ir.cc (class_or_union::priv::mem_fns_map_): Change the type of this to string_mem_fn_sptr_map_type, so that shared pointers to functions can be stored in the map, instead of bare pointers to functions. This is useful to implement class_or_union::find_member_function_sptr which returns a shared pointer to function. (class_or_union::find_member_function_sptr): Define new function. (class_or_union::find_member_function): Adjust. (method_decl::set_linkage_name): Use a non-deleting shared pointer to store the current instance of member function into class_or_union::priv::mem_fns_map_. (hash_as_canonical_type_or_constant): As we are seeing more function types, it appears that some function types are not canonicalized. I am not sure why exactly, but let's loosen the assert here for now, I'll chase the root of this later. * src/abg-dwarf-reader.cc (finish_member_function_reading): Improve detection of member function 'static-ness' by handling cases where a this pointer can be const. Also support DW_AT_object_pointer when it's present. This fixes the occurrence of spurious change reports about loss of 'static-ness' of member functions. (potential_member_fn_should_be_dropped): Define new static function and ... (build_ir_node_from_die): ... use it here. When a function DIE has the same linkage name as an existing function IR, do not create a new IR for it. Rather, re-use the existing one to complete it with the properties found on the function DIE. If a new function doesn't seem to have an associated ELF symbol and is not meant to be a virtual member function then drop its IR on the floor as well. * tests/data/test-annotate/libtest23.so.abi: Adjust. * tests/data/test-annotate/libtest24-drop-fns-2.so.abi: Likewise. * tests/data/test-annotate/libtest24-drop-fns.so.abi: Likewise. * tests/data/test-annotate/test0.abi: Likewise. * tests/data/test-annotate/test1.abi: Likewise. * tests/data/test-annotate/test14-pr18893.so.abi: Likewise. * tests/data/test-annotate/test15-pr18892.so.abi: Likewise. * tests/data/test-annotate/test17-pr19027.so.abi: Likewise. * tests/data/test-annotate/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: Likewise. * tests/data/test-annotate/test19-pr19023-libtcmalloc_and_profiler.so.abi: Likewise. * tests/data/test-annotate/test20-pr19025-libvtkParallelCore-6.1.so.abi: Likewise. * tests/data/test-annotate/test21-pr19092.so.abi: Likewise. * tests/data/test-annotate/test6.so.abi: Likewise. * tests/data/test-annotate/test8-qualified-this-pointer.so.abi: Likewise. * tests/data/test-diff-dwarf-abixml/PR25409-librte_bus_dpaa.so.20.0.abi: Likewise. * tests/data/test-diff-dwarf-abixml/test0-pr19026-libvtkIOSQL-6.1.so.1.abi: Likewise. * tests/data/test-diff-dwarf/test0-report.txt: Likewise. * tests/data/test-diff-dwarf/test28-vtable-changes-report-0.txt: Likewise. * tests/data/test-diff-dwarf/test42-PR21296-clanggcc-report0.txt: Likewise. * tests/data/test-diff-filter/test0-report.txt: Likewise. * tests/data/test-diff-filter/test01-report.txt: Likewise. * tests/data/test-diff-filter/test10-report.txt: Likewise. * tests/data/test-diff-filter/test30-pr18904-rvalueref-report0.txt: Likewise. * tests/data/test-diff-filter/test30-pr18904-rvalueref-report1.txt: Likewise. * tests/data/test-diff-filter/test30-pr18904-rvalueref-report2.txt: Likewise. * tests/data/test-diff-filter/test31-pr18535-libstdc++-report-0.txt: Likewise. * tests/data/test-diff-filter/test31-pr18535-libstdc++-report-1.txt: Likewise. * tests/data/test-diff-filter/test35-pr18754-no-added-syms-report-0.txt: Likewise. * tests/data/test-diff-filter/test35-pr18754-no-added-syms-report-1.txt: Likewise. * tests/data/test-diff-filter/test41-report-0.txt: Likewise. * tests/data/test-diff-filter/test9-report.txt: Likewise. * tests/data/test-diff-pkg/libsigc++-2.0-0c2a_2.4.0-1_amd64--libsigc++-2.0-0v5_2.4.1-1ubuntu2_amd64-report-0.txt: Likewise. * tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-0.txt: Likewise. * tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-1.txt: Likewise. * tests/data/test-diff-suppr/test24-soname-report-1.txt: Likewise. * tests/data/test-diff-suppr/test24-soname-report-10.txt: Likewise. * tests/data/test-diff-suppr/test24-soname-report-12.txt: Likewise. * tests/data/test-diff-suppr/test24-soname-report-14.txt: Likewise. * tests/data/test-diff-suppr/test24-soname-report-16.txt: Likewise. * tests/data/test-diff-suppr/test24-soname-report-4.txt: Likewise. * tests/data/test-diff-suppr/test31-report-1.txt: Likewise. * tests/data/test-read-dwarf/PR22015-libboost_iostreams.so.abi: Likewise. * tests/data/test-read-dwarf/PR22122-libftdc.so.abi: Likewise. * tests/data/test-read-dwarf/libtest23.so.abi: Likewise. * tests/data/test-read-dwarf/libtest24-drop-fns-2.so.abi: Likewise. * tests/data/test-read-dwarf/libtest24-drop-fns.so.abi: Likewise. * tests/data/test-read-dwarf/test-libandroid.so.abi: Likewise. * tests/data/test-read-dwarf/test0.abi: Likewise. * tests/data/test-read-dwarf/test0.hash.abi: Likewise. * tests/data/test-read-dwarf/test1.abi: Likewise. * tests/data/test-read-dwarf/test1.hash.abi: Likewise. * tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: Likewise. * tests/data/test-read-dwarf/test11-pr18828.so.abi: Likewise. * tests/data/test-read-dwarf/test12-pr18844.so.abi: Likewise. * tests/data/test-read-dwarf/test14-pr18893.so.abi: Likewise. * tests/data/test-read-dwarf/test15-pr18892.so.abi: Likewise. * tests/data/test-read-dwarf/test16-pr18904.so.abi: Likewise. * tests/data/test-read-dwarf/test17-pr19027.so.abi: Likewise. * tests/data/test-read-dwarf/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: Likewise. * tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi: Likewise. * tests/data/test-read-dwarf/test20-pr19025-libvtkParallelCore-6.1.so.abi: Likewise. * tests/data/test-read-dwarf/test21-pr19092.so.abi: Likewise. * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: Likewise. * tests/data/test-read-dwarf/test6.so.abi: Likewise. * tests/data/test-read-dwarf/test6.so.hash.abi: Likewise. * tests/data/test-read-dwarf/test8-qualified-this-pointer.so.abi: Likewise. * tests/data/test-read-dwarf/test8-qualified-this-pointer.so.hash.abi: Likewise. * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Likewise. 2021-01-20 Dodji Seketeli Bug 27204 - potential loss of some aliased ELF function symbols * src/abg-ir.cc (function_decl::get_id): If the elf symbol has aliases, make the function name be part of the ID so that this ID differs from the one of the other functions that share a symbol alias with this one. * tests/data/test-abidiff/test-PR18791-report0.txt: Adjust. * tests/data/test-diff-dwarf/test42-PR21296-clanggcc-report0.txt: Likewise. * tests/data/test-diff-filter/test31-pr18535-libstdc++-report-0.txt: Likewise. * tests/data/test-diff-filter/test31-pr18535-libstdc++-report-1.txt: Likewise. * tests/data/test-diff-filter/test41-report-0.txt: Likewise. * tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: Likewise. * tests/data/test-read-dwarf/test16-pr18904.so.abi: Likewise. * tests/data/test-diff-pkg/glibc-2.32-3.fc33.aarch64-self-check-report-0.txt: New test reference output. * tests/data/test-diff-pkg/glibc-2.32-3.fc33.aarch64.rpm: New test input RPM. * tests/data/test-diff-pkg/glibc-debuginfo-2.32-3.fc33.aarch64.rpm: Likewise. * tests/data/Makefile.am: Add the new test material to source distribution. * tests/test-diff-pkg.cc (in_out_specs): Add the new test input RPMs to this test harness. 2020-12-15 Matthias Maennich abg-ir: Optimize calls to std::string::find() for a single char. * src/abg-ir.cc (elf_symbol::get_name_and_version_from_id): use character literal overload for single character string::find. (parse_integral_type): Likewise. Suggested-by: Chris Kennelly 2021-01-15 Dodji Seketeli Bug 26992 - Try harder to resolve declaration-only classes * src/abg-dwarf-reader.cc (read_context::compare_before_canonicalisation): Define new member function. (read_context::resolve_declaration_only_classes): When there are more than one definition that can resolve a given declaration, if all those definitions are equal, then resolve the declaration to those definitions. (read_context::resolve_declaration_only_enums): Add a comment to update similarly update this function (or do away with it completely) later. * tests/data/test-annotate/test15-pr18892.so.abi: Adjust. * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Likewise. * tests/data/test-read-dwarf/test15-pr18892.so.abi: Likewise. * tests/data/test-diff-pkg/cogl-1.22.8-2.fc33.x86_64.rpm: Add new test input. * tests/data/test-diff-pkg/cogl-debuginfo-1.22.8-2.fc33.x86_64.rpm: Likewise. * tests/data/test-diff-pkg/cogl-1.22.8-2.fc33.x86_64.self-check-report-0.txt: Likewise. * tests/test-diff-pkg.cc (in_out_specs): Add the new test inputs to the test harness. * tests/data/Makefile.am: Add the new test input files to source distribution. 2021-01-11 Dodji Seketeli mainpage: Update web page for 1.8 release * doc/website/mainpage.txt: Update web page for 1.8 release 2020-12-14 Matthias Maennich Update catch2 testing framework: v1.12.2 -> v2.13.3 * tests/lib/catch.hpp: update to v2.13.3 * tests/test-symtab.cc (TEST_CASE("Symtab::SimpleSymtabs")): Use the corpus variable to avoid unused variable warnings. 2020-12-14 Matthias Maennich clang-format: define C++ standard to improve formatting * .clang-format: Set C++11 standard for formatting. 2020-12-11 Giuliano Procida Refresh ABI cross check test files * tests/data/test-diff-dwarf-abixml/test0-pr19026-libvtkIOSQL-6.1.so.1.abi: Refreshed ABI. * tests/data/test-diff-dwarf-abixml/test0-pr19026-libvtkIOSQL-6.1.so.1-report-0.txt: File now empty. 2020-12-14 Matthias Maennich Drop unneccessary includes of abg-cxx-compat.h * include/abg-comparison.h: Remove include of abg-cxx-compat.h. * include/abg-diff-utils.h: Likewise. * include/abg-fwd.h: Likewise. * include/abg-ini.h: Likewise. * include/abg-interned-str.h: Likewise. * include/abg-ir.h: Likewise. * include/abg-libxml-utils.h: Likewise. * include/abg-libzip-utils.h: Likewise. * include/abg-regex.h: Likewise. * include/abg-reporter.h: Likewise. * include/abg-sptr-utils.h: Likewise. * include/abg-suppression.h: Likewise. * include/abg-tools-utils.h: Likewise. * include/abg-workers.h: Likewise. * src/abg-comp-filter.cc: Likewise. * src/abg-comparison-priv.h: Likewise. * src/abg-corpus.cc: Likewise. * src/abg-dwarf-reader.cc: Likewise. * src/abg-hash.cc: Likewise. * src/abg-ir.cc: Likewise. * src/abg-reader.cc: Likewise. * src/abg-suppression.cc: Likewise. * src/abg-tools-utils.cc: Likewise. * src/abg-writer.cc: Likewise. * tests/test-diff-suppr.cc: Likewise. * tests/test-read-write.cc: Likewise. * tools/abicompat.cc: Likewise. * tools/abidw.cc: Likewise. * tools/abilint.cc: Likewise. * tools/abipkgdiff.cc: Likewise. 2020-12-14 Matthias Maennich Remove usages from abg_compat * include/abg-cxx-compat.h: Drop compatibility for . * include/abg-comparison.h: migrate abg_compat use to std. * include/abg-interned-str.h: Likewise. * include/abg-suppression.h: Likewise. * src/abg-comparison-priv.h: Likewise. * src/abg-dwarf-reader.cc: Likewise. * tests/test-diff-suppr.cc: Likewise. * tools/abipkgdiff.cc: Likewise. 2020-12-14 Matthias Maennich Remove usages from abg_compat * include/abg-cxx-compat.h: Drop compatibility layer for . * include/abg-comparison.h: migrate abg_compat use to std. * include/abg-cxx-compat.h: Likewise. * include/abg-fwd.h: Likewise. * include/abg-ir.h: Likewise. * src/abg-corpus.cc: Likewise. * src/abg-dwarf-reader.cc: Likewise. * src/abg-ir.cc: Likewise. * src/abg-reader.cc: Likewise. * src/abg-writer.cc: Likewise. 2020-12-14 Matthias Maennich Remove usages from abg_compat * include/abg-cxx-compat.h: Drop compatibility layer for . * include/abg-diff-utils.h: migrate abg_compat use to std. * include/abg-fwd.h: Likewise. * include/abg-ini.h: Likewise. * include/abg-interned-str.h: Likewise. * include/abg-libxml-utils.h: Likewise. * include/abg-libzip-utils.h: Likewise. * include/abg-regex.h: Likewise. * include/abg-reporter.h: Likewise. * include/abg-sptr-utils.h: Likewise. * include/abg-tools-utils.h: Likewise. * include/abg-workers.h: Likewise. * src/abg-comp-filter.cc: Likewise. * src/abg-comparison-priv.h: Likewise. * src/abg-dwarf-reader.cc: Likewise. * src/abg-ir.cc: Likewise. * src/abg-reader.cc: Likewise. * src/abg-suppression.cc: Likewise. * src/abg-tools-utils.cc: Likewise. * src/abg-writer.cc: Likewise. * tests/test-diff-filter.cc: Likewise. * tests/test-diff-pkg.cc: Likewise. * tests/test-diff-suppr.cc: Likewise. * tests/test-read-dwarf.cc: Likewise. * tests/test-read-write.cc: Likewise. * tests/test-types-stability.cc: Likewise. * tests/test-write-read-archive.cc: Likewise. * tools/abicompat.cc: Likewise. * tools/abidiff.cc: Likewise. * tools/abidw.cc: Likewise. * tools/abilint.cc: Likewise. * tools/abipkgdiff.cc: Likewise. 2020-12-14 Matthias Maennich Remove usages from abg_compat * include/abg-cxx-compat.h: Drop compatibility layer for . * include/abg-interned-str.h: migrate abg_compat use to std. * include/abg-ir.h: Likewise. * src/abg-hash.cc: Likewise. * src/abg-ir.cc: Likewise. 2020-12-14 Matthias Maennich Drop C++03 compatibility layer * include/abg-cxx-compat.h: remove compatibility with pre C++11. * include/abg-ir.h: Remove mention of std::tr1 from comments. * include/abg-sptr-utils.h: Likewise. 2020-12-04 Giuliano Procida Add qualifier / typedef / array / pointer test * tests/data/Makefile.am: Add new test files * tests/data/test-abidiff-exit/qualifier-typedef-array-v0.c: New test file. * tests/data/test-abidiff-exit/qualifier-typedef-array-v0.o: New test file. * tests/data/test-abidiff-exit/qualifier-typedef-array-v1.c: New test file. * tests/data/test-abidiff-exit/qualifier-typedef-array-v1.o: New test file. * tests/data/test-abidiff-exit/qualifier-typedef-array-report-0.txt: Plain diff report. * tests/data/test-abidiff-exit/qualifier-typedef-array-report-1.txt: Harmless diff report. * tests/data/test-abidiff-exit/qualifier-typedef-array-report-2.txt: Leaf changes report. * tests/data/test-abidiff-exit/qualifier-typedef-array-report-3.txt: Harmless leaf changes report. * tests/test-abidiff-exit.cc: Run new test. 2020-12-03 Giuliano Procida ir: Arrays are indirect types for type structure similarity purposes * src/abg-ir.cc (types_have_similar_structure): When examining array types, always treat element types as being underlying types of an indirect type. * tests/data/Makefile.am: Add new test case files. * tests/data/test-abidiff-exit/test-non-leaf-array-report.txt: New test case showing correct --leaf-changes-only reporting. * tests/data/test-abidiff-exit/test-non-leaf-array-v0.c: Likewise. * tests/data/test-abidiff-exit/test-non-leaf-array-v0.o: Likewise. * tests/data/test-abidiff-exit/test-non-leaf-array-v1.c: Likewise. * tests/data/test-abidiff-exit/test-non-leaf-array-v1.o: Likewise. * tests/test-abidiff-exit.cc: Run new test case. 2020-12-04 Dodji Seketeli ir: Add better comments to types_have_similar_structure * src/abg-ir.cc (types_have_similar_structure): Arrays are also indirect types, just like pointers and references, for the purpose of the concept of "type similarity". Add that to the introductory comment of the function. Add some more misc comments throughout the code base. 2020-12-03 Giuliano Procida abidiff: support --dump-diff-tree with --leaf-changes-only * src/abg-leaf-reporter.cc (leaf_reporter::report): In the corpus_diff override, conclude by calling maybe_dump_diff_tree. 2020-12-03 Dodji Seketeli Use C++11 for the code base * CONTRIBUTING: Enact use of c++11. Also, we favor those who read/debug/maintain the code as opposed to those who write it ;-) * configure.ac: Switch to c++11 unconditionally. * src/Makefile.am: Adjust. * tests/Makefile.am: Adjust. 2020-12-03 Dodji Seketeli CONTRIBUTING: Update instructions about regression tests * CONTRIBUTING: Update instructions about how to launch regression tests. 2020-12-02 Dodji Seketeli Teach Automake that COPYING* files are gone from sources * Makefile.am: Teach Automake that COPYING* files are gone and that LICENSE.txt and license-change-2020.txt were added. 2020-06-09 Dodji Seketeli Add a license-change-2020.txt file * license-change-2020.txt: New file. 2020-06-09 Dodji Seketeli Delete COPYING* files * COPYING: Delete. * COPYING-GPLV3: Likewise. * COPYING-LGPLV2: Likewise. * COPYING-LGPLV3: Likewise. 2020-06-09 Dodji Seketeli Add the LICENSE.txt file * LICENSE.txt: New file coming from http://llvm.org/foundation/relicensing/LICENSE.txt. 2020-05-29 Dodji Seketeli Re-license the project to Apache v2 With LLVM Exception * abigail.m4: Change the SPDX identifier from "GPL-3.0-or-later WITH GCC-exception-3.1" to "Apache-2.0 WITH LLVM-exception" * include/abg-cxx-compat.h: Change the SPDX identifier from "LGPL-2.0-or-later" to "Apache-2.0 WITH LLVM-exception". * .clang-format: Change the SPDX identifier from "LGPL-3.0-or-later" to "Apache-2.0 WITH LLVM-exception". * Makefile.am: Likewise. * bash-completion/Makefile.am: Likewise. * bash-completion/abicompat: Likewise. * bash-completion/abidiff: Likewise. * bash-completion/abidw: Likewise. * bash-completion/abilint: Likewise. * bash-completion/abinilint: Likewise. * bash-completion/abipkgdiff: Likewise. * bash-completion/abisym: Likewise. * bash-completion/fedabipkgdiff: Likewise. * configure.ac: Likewise. * default.abignore: Likewise. * doc/Makefile.am: Likewise. * doc/api/libabigail.doxy: Likewise. * doc/manuals/Makefile.am: Likewise. * doc/website/libabigail-website.doxy: Likewise. * include/Makefile.am: Likewise. * include/abg-comp-filter.h: Likewise. * include/abg-comparison.h: Likewise. * include/abg-config.h: Likewise. * include/abg-corpus.h: Likewise. * include/abg-diff-utils.h: Likewise. * include/abg-dwarf-reader.h: Likewise. * include/abg-fwd.h: Likewise. * include/abg-hash.h: Likewise. * include/abg-ini.h: Likewise. * include/abg-interned-str.h: Likewise. * include/abg-ir.h: Likewise. * include/abg-libxml-utils.h: Likewise. * include/abg-libzip-utils.h: Likewise. * include/abg-reader.h: Likewise. * include/abg-regex.h: Likewise. * include/abg-reporter.h: Likewise. * include/abg-sptr-utils.h: Likewise. * include/abg-suppression.h: Likewise. * include/abg-tools-utils.h: Likewise. * include/abg-traverse.h: Likewise. * include/abg-version.h.in: Likewise. * include/abg-viz-common.h: Likewise. * include/abg-viz-dot.h: Likewise. * include/abg-viz-svg.h: Likewise. * include/abg-workers.h: Likewise. * include/abg-writer.h: Likewise. * scripts/dot_to_png.sh: Likewise. * scripts/dot_to_svg.sh: Likewise. * scripts/make-verbose.sh: Likewise. * scripts/svg_to_plain_svg.sh: Likewise. * scripts/svg_to_png_and_pdf.sh: Likewise. * src/Makefile.am: Likewise. * src/abg-comp-filter.cc: Likewise. * src/abg-comparison-priv.h: Likewise. * src/abg-comparison.cc: Likewise. * src/abg-config.cc: Likewise. * src/abg-corpus-priv.h: Likewise. * src/abg-corpus.cc: Likewise. * src/abg-default-reporter.cc: Likewise. * src/abg-diff-utils.cc: Likewise. * src/abg-dwarf-reader.cc: Likewise. * src/abg-elf-helpers.cc: Likewise. * src/abg-elf-helpers.h: Likewise. * src/abg-hash.cc: Likewise. * src/abg-ini.cc: Likewise. * src/abg-internal.h: Likewise. * src/abg-ir-priv.h: Likewise. * src/abg-ir.cc: Likewise. * src/abg-leaf-reporter.cc: Likewise. * src/abg-libxml-utils.cc: Likewise. * src/abg-libzip-utils.cc: Likewise. * src/abg-reader.cc: Likewise. * src/abg-regex.cc: Likewise. * src/abg-reporter-priv.cc: Likewise. * src/abg-reporter-priv.h: Likewise. * src/abg-suppression-priv.h: Likewise. * src/abg-suppression.cc: Likewise. * src/abg-tools-utils.cc: Likewise. * src/abg-traverse.cc: Likewise. * src/abg-viz-common.cc: Likewise. * src/abg-viz-dot.cc: Likewise. * src/abg-viz-svg.cc: Likewise. * src/abg-workers.cc: Likewise. * src/abg-writer.cc: Likewise. * tests/Makefile.am: Likewise. * tests/data/Makefile.am: Likewise. * tests/lib/catch.cc: Likewise. * tests/mockfedabipkgdiff.in: Likewise. * tests/print-diff-tree.cc: Likewise. * tests/runtestcanonicalizetypes.sh.in: Likewise. * tests/runtestdefaultsupprs.py.in: Likewise. * tests/runtestdefaultsupprspy3.sh.in: Likewise. * tests/runtestfedabipkgdiff.py.in: Likewise. * tests/runtestfedabipkgdiffpy3.sh.in: Likewise. * tests/test-abicompat.cc: Likewise. * tests/test-abidiff-exit.cc: Likewise. * tests/test-abidiff.cc: Likewise. * tests/test-alt-dwarf-file.cc: Likewise. * tests/test-annotate.cc: Likewise. * tests/test-core-diff.cc: Likewise. * tests/test-cxx-compat.cc: Likewise. * tests/test-diff-dwarf-abixml.cc: Likewise. * tests/test-diff-dwarf.cc: Likewise. * tests/test-diff-filter.cc: Likewise. * tests/test-diff-pkg.cc: Likewise. * tests/test-diff-suppr.cc: Likewise. * tests/test-diff2.cc: Likewise. * tests/test-dot.cc: Change the SPDX identifier from "GPL-3.0-or-later WITH GCC-exception-3.1" to "Apache-2.0 WITH LLVM-exception" * tests/test-elf-helpers.cc: Change the SPDX identifier from "LGPL-3.0-or-later" to "Apache-2.0 WITH LLVM-exception" * tests/test-ini.cc: Likewise. * tests/test-ir-walker.cc: Likewise. * tests/test-kmi-whitelist.cc: Likewise. * tests/test-lookup-syms.cc: Likewise. * tests/test-read-dwarf.cc: Likewise. * tests/test-read-write.cc: Likewise. * tests/test-svg.cc: Change the SPDX identifier from "GPL-3.0-or-later WITH GCC-exception-3.1" to "Apache-2.0 WITH LLVM-exception". * tests/test-symtab.cc: Change the SPDX identifier from "LGPL-3.0-or-later" to "Apache-2.0 WITH LLVM-exception" * tests/test-tools-utils.cc: Likewise. * tests/test-types-stability.cc: Likewise. * tests/test-utils.cc: Likewise. * tests/test-utils.h: Likewise. * tests/test-write-read-archive.cc: Likewise. * tests/update-test-output.py: Likewise. * tools/Makefile.am: Likewise. * tools/abiar.cc: Likewise. * tools/abicompat.cc: Likewise. * tools/abidiff.cc: Likewise. * tools/abidw.cc: Likewise. * tools/abilint.cc: Likewise. * tools/abipkgdiff.cc: Likewise. * tools/abisym.cc: Likewise. * tools/binilint.cc: Likewise. * tools/fedabipkgdiff: Likewise. * tools/kmidiff.cc: Likewise. * update-copyright.sh: Likewise. 2020-05-29 Dodji Seketeli Add helper files to perform the re-licensing * relicensing-scripts/file-licenses.orig.txt: New file that contains the raw set of files with SPDX identifiers denoting LGPLv3+ files. It's the result of a simple command based on "find" and "grep". * relicensing-scripts/files-with-lgplv3.txt: New file containing the same data as the file above, but massaged to be easily useable by the script below. * relicensing-scripts/do-relicensing.sh: This is a simple command which performs the re-licensing on the files listed in the file above. 2020-05-29 Dodji Seketeli Add replace-spdx-license.sh script * relicensing-scripts/replace-spdx-license.sh: New script. 2020-05-27 Dodji Seketeli Add has-spdx-header.sh script * relicensing-scripts/has-spdx-header.sh: New script. 2020-05-29 Dodji Seketeli Add missing SPDX headers to source files not specifying any license * Makefile.am: Add a LGPL-3.0-or-later SPDX header prefixed with '##' so that that the header doesn't get emitted in the resulting Makefile.in file. Note that the license of Makefile.in files is "FSF All Permissible License", which virtually compatible with anything. * bash-completion/Makefile.am: Likewise. * doc/Makefile.am: Likewise * doc/manuals/Makefile.am: Likewise * include/Makefile.am: Likewise * src/Makefile.am: Likewise * tests/Makefile.am: Likewise * tests/data/Makefile.am: Likewise * tools/Makefile.am: Likewise * .clang-format: Add a LGPL-3.0-or-later SPDX header. * bash-completion/abicompat: Likewise. * bash-completion/abidiff: Likewise. * bash-completion/abidw: Likewise. * bash-completion/abilint: Likewise. * bash-completion/abinilint: Likewise. * bash-completion/abipkgdiff: Likewise. * bash-completion/abisym: Likewise. * bash-completion/fedabipkgdiff: Likewise. * configure.ac: Likewise. * default.abignore: Likewise. * doc/api/libabigail.doxy: Likewise. * doc/website/libabigail-website.doxy: Likewise. * include/abg-version.h.in: Likewise. * scripts/dot_to_png.sh: Likewise. * scripts/dot_to_svg.sh: Likewise. * scripts/make-verbose.sh: Likewise. * scripts/svg_to_plain_svg.sh: Likewise. * scripts/svg_to_png_and_pdf.sh: Likewise. * tests/runtestcanonicalizetypes.sh.in: Likewise. * tests/runtestdefaultsupprs.py.in: Likewise. * tests/runtestdefaultsupprspy3.sh.in: Likewise. * tests/runtestfedabipkgdiffpy3.sh.in: Likewise. * tests/update-test-output.py: Likewise. * update-copyright.sh: Likewise. 2020-03-07 Matthias Maennich Replace individual license references with SPDX Identifiers * abigail.m4: Replace the license header with the SPDX identifier GPL-3.0-or-later WITH GCC-exception-3.1 * autoconf-archive/ax_check_python_modules.m4: Correctly set the SPDX identifier to FSFAP. * autoconf-archive/ax_compare_version.m4: Replace the license header with the SPDX identifier FSFAP. * autoconf-archive/ax_prog_python_version.m4: Likewise. header with the SPDX identifier FSFAP. * autoconf-archive/ax_valgrind_check.m4: Likewise. * gen-changelog.py: Replace the license header with the SPDX identifier LGPL-2.0-or-later. * include/abg-comp-filter.h: Replace the license header with the SPDX identifier LGPL-3.0-or-later. * include/abg-comparison.h: Likewise. * include/abg-config.h: Likewise. * include/abg-corpus.h: Likewise. * include/abg-cxx-compat.h: Replace the license header with the SPDX identifier LGPL-2.0-or-later. * include/abg-diff-utils.h: Replace the license header with the SPDX identifier LGPL-3.0-or-later * include/abg-dwarf-reader.h: Likewise. * include/abg-fwd.h: Likewise. * include/abg-hash.h: Likewise. * include/abg-ini.h: Likewise. * include/abg-interned-str.h: Likewise. * include/abg-ir.h: Likewise. * include/abg-libxml-utils.h: Likewise. * include/abg-libzip-utils.h: Likewise. * include/abg-reader.h: Likewise. * include/abg-regex.h: Likewise. * include/abg-reporter.h: Likewise. * include/abg-sptr-utils.h: Likewise. * include/abg-suppression.h: Likewise. * include/abg-tools-utils.h: Likewise. * include/abg-traverse.h: Likewise. * include/abg-viz-common.h: Likewise. * include/abg-viz-dot.h: Likewise. * include/abg-viz-svg.h: Likewise. * include/abg-workers.h: Likewise. * include/abg-writer.h: Likewise. * install-sh: Replace the license header with the SPDX identifier MIT. * ltmain.sh: Replace the license header with the SPDX identifier GPL-2.0-or-later. Note that this file has the libtool special exception which allows us to redistribute it under the general license of the project. * src/abg-comp-filter.cc: Replace the license header with the SPDX * src/abg-comparison-priv.h: Likewise. * src/abg-comparison.cc: Likewise. * src/abg-config.cc: Likewise. * src/abg-corpus-priv.h: Likewise. * src/abg-corpus.cc: Likewise. * src/abg-default-reporter.cc: Likewise. * src/abg-diff-utils.cc: Likewise. * src/abg-dwarf-reader.cc: Likewise. * src/abg-elf-helpers.cc: Likewise. * src/abg-elf-helpers.h: Likewise. * src/abg-regex.cc: Likewise. * src/abg-hash.cc: Likewise. * src/abg-ini.cc: Likewise. * src/abg-internal.h: Likewise. * src/abg-ir-priv.h: Likewise. * src/abg-ir.cc: Likewise. * src/abg-leaf-reporter.cc: Likewise. * src/abg-libxml-utils.cc: Likewise. * src/abg-libzip-utils.cc: Likewise. * src/abg-reader.cc: Likewise. * src/abg-reporter-priv.cc: Likewise. * src/abg-reporter-priv.h: Likewise. * src/abg-sptr-utils.cc: Likewise. * src/abg-suppression-priv.h: Likewise. * src/abg-suppression.cc: Likewise. * src/abg-tools-utils.cc: Likewise. * src/abg-traverse.cc: Likewise. * src/abg-viz-common.cc: Likewise. * src/abg-viz-dot.cc: Likewise. * src/abg-viz-svg.cc: Likewise. * src/abg-workers.cc: Likewise. * src/abg-writer.cc: Likewise. * tests/lib/catch.cc: Likewise. * tests/lib/catch.hpp: Add an SPDX identifier BSL-1.0. * tests/mockfedabipkgdiff.in: Replace the license header with the SPDX identifier GPL-3.0-or-later. * tests/print-diff-tree.cc: Likewise. * tests/runtestfedabipkgdiff.py.in: Replaace the license header with the SPDW identifier GPL-3.0-or-later. * tests/test-abicompat.cc: Replace the license header with the SPDX identifier LGPL-3.0-or-later. * tests/test-abidiff-exit.cc: Likewise. * tests/test-abidiff.cc: Likewise. * tests/test-alt-dwarf-file.cc: Likewise. * tests/test-annotate.cc: Likewise. * tests/test-cxx-compat.cc: Likewise. * tests/test-core-diff.cc: Likewise. * tests/test-diff-dwarf-abixml.cc: Likewise. * tests/test-diff-dwarf.cc: Likewise. * tests/test-diff-filter.cc: Likewise. * tests/test-diff-pkg.cc: Likewise. * tests/test-diff-suppr.cc: Likewise. * tests/test-diff2.cc: Likewise. * tests/test-dot.cc: Replace the license header with the SPDX identifier GPL-3.0-with-GCC-exception. * tests/test-elf-helpers.cc: Replace the license header with the SPDX identifier LGPL-3.0-or-later. * tests/test-ini.cc: Likewise. * tests/test-ir-walker.cc: Likewise. * tests/test-kmi-whitelist.cc: Likewise. * tests/test-lookup-syms.cc: Likewise. * tests/test-read-dwarf.cc: Likewise. * tests/test-read-write.cc: Likewise. * tests/test-svg.cc: Replace the license header with the SPDX identifier GPL-3.0-with-GCC-exception. * tests/test-symtab.cc: Replace the license header with the SPDX identifier LGPL-3.0-or-later. * tests/test-tools-utils.cc: Likewise. * tests/test-types-stability.cc: Likewise. * tests/test-utils.cc: Likewise. * tests/test-utils.h: Likewise. * tests/test-write-read-archive.cc: Likewise. * tools/abiar.cc: Likewise. * tools/abicompat.cc: Likewise. * tools/abidiff.cc: Likewise. * tools/abidw.cc: Likewise. * tools/abilint.cc: Likewise. * tools/abipkgdiff.cc: Likewise. * tools/abisym.cc: Likewise. * tools/binilint.cc: Likewise. * tools/fedabipkgdiff: Replace the license header with the SPDX identifier GPL-3.0-or-later. * tools/kmidiff.cc: Likewise. 2020-12-01 Dodji Seketeli Bump version number to 2.0 * configure.ac: Bump number version to 2.0 2020-12-01 Dodji Seketeli Update NEWS file for 1.8 * NEWS: Update for 1.8 2020-12-01 Dodji Seketeli Update the Changelog for 1.8 * Changelog: Update automatically with "make update-changelog' 2020-12-01 Dodji Seketeli Add check-self-compare to release regression testing * Makefile.am: Make 'make tarball-and-all' run the 'check-self-compare' target as part of the release process. 2020-12-01 Dodji Seketeli configure: add --enable-rpm415 option * configure: Introduce the --{en, dis}able-rpm415 option. 2020-11-30 Dodji Seketeli dwarf-reader: Bug 26908 - don't crash on empty DW_TAG_partial_unit * src/abg-dwarf-reader.cc (die_has_children): Define new static function. (read_context::build_die_parent_relations_under): Do not try to instantiate an imported_unit_point type for an imported unit with no children node. (imported_unit_point::imported_unit_point): Assert that the imported die has a sub-tree. (imported_unit_point::imported_unit_point): Remove useless spaces. 2020-11-27 Dodji Seketeli reader: Fix off-by-one error in assert * src/abg-reader.cc (build_subrange_type): Fix off-by-one error. 2020-11-27 Dodji Seketeli writer: fix off-by-one error in assertion * src/abg-writer.cc (write_array_subrange_type): Fix off-by-one error in assertion. * src/abg-dwarf-reader.cc (build_subrange_type): Assert the length of the array complies with its bounds. 2020-11-27 Dodji Seketeli abipkgdiff: make --self-check to fail on any change against own ABIXML * tools/abipkgdiff.cc (compare_to_self): Report *any* ABI change. Not just the "net" changes. 2020-11-26 Dodji Seketeli abidw: make --abidiff report any change against own ABIXML * tools/abidw.cc (load_corpus_and_write_abixml): Emit an error when comparing the binary to its ABIXML representation yields any change. 2020-11-27 Dodji Seketeli dwarf-reader: Avoid having several functions with the same symbol * src/abg-dwarf-reader.cc (read_context::symbol_already_belongs_to_a_function): Define new member function. (read_context::fixup_functions_with_no_symbols): Use the new symbol_already_belongs_to_a_function function to avoid setting a symbol that already belongs to a function. * tests/data/test-read-dwarf/PR22122-libftdc.so.abi: Adjust. * tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: Likewise. * tests/data/test-read-dwarf/test16-pr18904.so.abi: Likewise. * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: Likewise. 2020-11-27 Dodji Seketeli reader: Don't lose anonymous-ness of decl-only classes * src/abg-reader.cc (build_class_decl): Set the is-anonymous flag when reading a decl-only class. 2020-11-27 Dodji Seketeli ir: Introduce internal pretty representation for anonymous classes * include/abg-fwd.h (get_class_or_union_flat_representation): Introduce an "internal" parameter. * src/abg-ir.cc (get_class_or_union_flat_representation): Introduce an "internal" parameter. In the flat representation of a class for internal purposes, always use the prefix "class" even if this is a struct. (get_type_name): To build an internal name for a reference or pointer to an anonymous type, consider the namespace name of said type. (equals): In the overload for decl_base, take the namespace name of anonymous decls into account when comparing them. ({var_decl, union_decl}::get_pretty_representation): Adjust calls to get_class_or_union_flat_representation to pass a proper "internal" argument. * src/abg-default-reporter.cc (default_reporter::report): Adjust the call to get_class_or_union_flat_representation to pass an "internal" argument set to 'false'. * tests/data/test-annotate/libtest23.so.abi: Adjust. * tests/data/test-read-dwarf/PR22122-libftdc.so.abi: Likewise. * tests/data/test-read-dwarf/libtest23.so.abi: Likewise. * tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: Likewise. * tests/data/test-read-dwarf/test11-pr18828.so.abi: Likewise. * tests/data/test-read-dwarf/test12-pr18844.so.abi: Likewise. * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Likewise. * tests/data/test-read-dwarf/test-libandroid.so.abi: Likewise. 2020-11-26 Dodji Seketeli writer: Emit definitions of declarations when they are present * src/abg-writer.cc (write_class_decl, write_union_decl): Get the definition of the declaration if it exists and emit that. * tests/data/test-read-dwarf/test13-pr18894.so.abi: Adjust. * tests/data/test-read-dwarf/test15-pr18892.so.abi: Likewise. * tests/data/test-read-dwarf/test21-pr19092.so.abi: Likewise. * tests/data/test-annotate/test13-pr18894.so.abi: Likewise. * tests/data/test-annotate/test15-pr18892.so.abi: Likewise. * tests/data/test-annotate/test21-pr19092.so.abi: Likewise. 2020-11-26 Dodji Seketeli Bug 26780 - Fix array subrange bounds (de)serialization * src/abg-reader.cc (build_subrange_type): Read lower-bound attribute if present. Then try to read upper-bound attribute as well. If this is not an infinite subrange assert that the length must be equal to the difference between the bounds. * src/abg-writer.cc (write_array_subrange_type): Write the lower-bound if it's present and not zero. In that case, write the upper-bound as well. * tests/data/test-diff-pkg/hdf5-1.10.6-2.fc33.x86_64.rpm: Add new binary test input. * tests/data/test-diff-pkg/hdf5-debuginfo-1.10.6-2.fc33.x86_64.rpm: Likewise. * tests/data/test-diff-pkg/hdf5-1.10.6-2.fc33.x86_64.self-check-report-0.txt: Add new reference output. * tests/data/Makefile.am: Add the new test material above to source distribution. * tests/test-diff-pkg.cc (in_out_specs): Add the binary test input to the set of --self-check tests. 2020-11-26 Dodji Seketeli reader: Read array subrange length into an uint64_t * src/abg-reader.cc (build_subrange_type): Change the type of length to uint64_t and read it using strtoull. 2020-11-25 Dodji Seketeli abipkgdiff: Avoid uncertainty when sorting worker tasks * elf_size_is_greater: Take the name of the binaries into account when their size is equal. Also, assert that all comparison tasks have compared binaries. 2020-11-25 Dodji Seketeli tests/data/test-fedabipkgdiff: Update reference output * tests/data/test-fedabipkgdiff/test7-self-compare-from-fc23-dbus-glib-report-0.txt: Adjust. 2020-11-24 Matthias Maennich abipkgdiff: minor cleanups * tools/abipkgdiff.cc: remove unused using statements (self_compare_task): remove shadowing members and delegate construction to base class. 2020-11-23 Dodji Seketeli dwarf-reader: support artificially generated translation units * configure.ac: Detect if we are running on RPM >= 4.15. If yes, then define the preprocessor macro RPM_4_15. If that macro is defined then test-diff-pkg.cc can support RPMs from Fedora >= 31 as those are compressed with zstd. Earlier RPM versions don't support that compression scheme. * src/abg-dwarf-reader.cc (build_translation_unit_and_add_to_ir): Suffix the offset of the translation unit to its name when that name is "". * tests/data/test-diff-pkg/mesa-libGLU-9.0.1-3.fc33.x86_64.rpm: New binary test input. * tests/data/test-diff-pkg/mesa-libGLU-debuginfo-9.0.1-3.fc33.x86_64.rpm: Likewise. * tests/data/test-diff-pkg/mesa-libGLU-9.0.1-3.fc33.x86_64.self-check-report-0.txt: New reference output for the binary test input above. * tests/data/Makefile.am: Add the new test inputs above to source distribution. * tests/test-diff-pkg.cc (in_out_specs): Add the binary test inputs above to source distribution if we are running on an RPM version >= 4.15. 2020-11-20 Dodji Seketeli fedabipkgdiff: make --self-compare use abipkgdiff --self-check * tools/fedabipkgdiff (abipkgdiff): If the user provides the --self-compare options, generate the abipkgdiff command by using the --self-check option. (run_abipkgdiff): Each return value of the abipkgidiff runs can be negative because they are unsigned values in essence, but as python doesn't seem to have a unsigned integer type. So we need to consider the max of the absolute value of the return codes here. * tests/data/test-fedabipkgdiff/test7-self-compare-from-fc23-dbus-glib-report-0.txt: Adjust. 2020-11-19 Dodji Seketeli abipkgdiff: Add a new --self-check option * tools/abipkgdiff.cc (options::self_check): Define new data member. (options::options): Initialize it. (display_usage): Add help string for the --self-check option. (parse_command): Parse the new --self-check option. (extract_deb): Add missing newline. (compare): Remove useless white space. (compare_to_self, self_compare_prepared_userspace_package) (self_compare_prepared_package, compare_to_self): Add new static functions. (class self_compare_task): Add new class. (prepare_package): Add a new overload that takes just one parameter. (elf_size_is_greater): Don't crash if the args are empty. (main): If the --self-check option is given, make sure we have just one package in argument. Use the new compare_to_self function to handle the --self-check option. * doc/manuals/abipkgdiff.rst: Add documentation for the new --self-check option. 2020-11-16 Dodji Seketeli Bug 26769 - Fix missing types in abixml output * include/abg-corpus.h (corpus::{record_canonical_type, lookup_canonical_type}): Remove function declarations. * src/abg-corpus-priv.h (corpus::priv::canonical_types_): Remove data member. * src/abg-corpus.cc (corpus::{record_canonical_type, lookup_canonical_type}): Remove functions. * src/abg-ir.cc (type_eligible_for_odr_based_comparison): Remove static function. (type_base::get_canonical_type_for): Don't perform the ODR-based optimization for C++ anymore. * src/abg-reader.cc (read_context&::maybe_add_var_to_exported_decls): Don't add a variable that hasn't been added to its scope. Otherwise, it means we added a variable that wasn't yet properly constructed. Also add a new overload for var_decl_sptr&. (build_var_decl): Do not add the var to its the set of exported declaration before we are sure it has been fully constructed and added to the scope it belongs. (build_class_decl): Only add *static* data members to the list of exported declarations. (handle_var_decl): A var decl seen here is a global variable declaration. Add it to the list of exported declarations. * src/abg-writer.cc (write_context::decl_only_type_is_emitted): Constify parameter. (write_translation_unit): Do not forget to emit referenced types that were maybe not canonicalized. Also, avoid using noop_deleter when it's not necessary. (write_namespace_decl): Do not forget to emit canonicalized types that are present in namespaces other than the global namespace. * tests/runtestslowselfcompare.sh.in: New test that compares libabigail.so against its own ABIXML representation. * tests/Makefile.am: Add the new test runtestslowselfcompare.sh to source distribution. This test is too slow to be run during the course of 'make check'. It takes more than 5 minutes on my slow box here. Rather, it can be run using 'make check-self-compare'. I plan to run this before releases now. * tests/data/test-annotate/libtest24-drop-fns-2.so.abi: Adjust. * tests/data/test-annotate/libtest24-drop-fns.so.abi: Likewise. * tests/data/test-annotate/test0.abi: Likewise. * tests/data/test-annotate/test13-pr18894.so.abi: Likewise. * tests/data/test-annotate/test14-pr18893.so.abi: Likewise. * tests/data/test-annotate/test15-pr18892.so.abi: Likewise. * tests/data/test-annotate/test17-pr19027.so.abi: Likewise. * tests/data/test-annotate/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: Likewise. * tests/data/test-annotate/test19-pr19023-libtcmalloc_and_profiler.so.abi: Likewise. * tests/data/test-annotate/test20-pr19025-libvtkParallelCore-6.1.so.abi: Likewise. * tests/data/test-annotate/test21-pr19092.so.abi: Likewise. * tests/data/test-read-dwarf/PR22015-libboost_iostreams.so.abi: Likewise. * tests/data/test-read-dwarf/PR22122-libftdc.so.abi: Likewise. * tests/data/test-read-dwarf/PR25042-libgdbm-clang-dwarf5.so.6.0.0.abi: Likewise. * tests/data/test-read-dwarf/PR26261/PR26261-exe.abi: Likewise. * tests/data/test-read-dwarf/libtest24-drop-fns-2.so.abi: Likewise. * tests/data/test-read-dwarf/libtest24-drop-fns.so.abi: Likewise. * tests/data/test-read-dwarf/test-libandroid.so.abi: Likewise. * tests/data/test-read-dwarf/test0.abi: Likewise. * tests/data/test-read-dwarf/test0.hash.abi: Likewise. * tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: Likewise. * tests/data/test-read-dwarf/test11-pr18828.so.abi: Likewise. * tests/data/test-read-dwarf/test12-pr18844.so.abi: Likewise. * tests/data/test-read-dwarf/test14-pr18893.so.abi: Likewise. * tests/data/test-read-dwarf/test15-pr18892.so.abi: Likewise. * tests/data/test-read-dwarf/test16-pr18904.so.abi: Likewise. * tests/data/test-read-dwarf/test17-pr19027.so.abi: Likewise. * tests/data/test-read-dwarf/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: Likewise. * tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi: Likewise. * tests/data/test-read-dwarf/test20-pr19025-libvtkParallelCore-6.1.so.abi: Likewise. * tests/data/test-read-dwarf/test21-pr19092.so.abi: Likewise. * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: Likewise. * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Likewise. * tests/data/test-read-write/test28-without-std-fns-ref.xml: Likewise. * tests/data/test-read-write/test28-without-std-vars-ref.xml: Likewise. * tests/data/test-read-write/test6.xml: Likewise. 2020-11-13 Dodji Seketeli Make sure to canonicalize all types but decl-only classes * include/abg-fwd.h (is_declaration_only_class_or_union_type): Declare new ... * src/abg-ir.cc (is_declaration_only_class_or_union_type): ... function. (clone_array): Add the cloned array subrange to its scope so that it can later be canonicalized. (synthesize_type_from_translation_unit) (synthesize_function_type_from_translation_unit): Canonicalize the synthesized types. (hash_as_canonical_type_or_constant): Ensure that all types are canonicalized. * src/abg-dwarf-reader.cc (maybe_canonicalize_type): Remove useless overload. (build_ir_node_for_variadic_parameter_type) (schedule_array_tree_for_late_canonicalization): Define new static functions. (maybe_strip_qualification): Schedule type canonicalization for types cloned prior to editing. (build_function_type): Use the new build_ir_node_for_variadic_parameter_type. It takes care of canonicalizing variadic parameter types. (build_function_decl): Canonicalize the function type that is created here. (build_ir_node_from_die): Use the overload of maybe_canonicalize_type which canonicalizes class_or_union nodes directly, rather than the one which handles DIE offsets. The latter was used as an optimization to reduce the size of the array of types scheduled for canonicalization, as DIE offsets take less space than pointers to IR types. Now that we have DIE de-duplication, my bet is that we can do away with the former. And that also ensures that we miss no type for canonicalization purposes. * src/abg-reader.cc (build_array_type_def): Canonicalize the subrange types of the array. (build_type): Canonicalize all types. * tests/data/test-annotate/libtest23.so.abi: Adjust. * tests/data/test-annotate/libtest24-drop-fns-2.so.abi: Likewise. * tests/data/test-annotate/libtest24-drop-fns.so.abi: Likewise. * tests/data/test-annotate/test0.abi: Likewise. * tests/data/test-annotate/test13-pr18894.so.abi: Likewise. * tests/data/test-annotate/test15-pr18892.so.abi: Likewise. * tests/data/test-annotate/test17-pr19027.so.abi: Likewise. * tests/data/test-annotate/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: Likewise. * tests/data/test-annotate/test19-pr19023-libtcmalloc_and_profiler.so.abi: Likewise. * tests/data/test-annotate/test20-pr19025-libvtkParallelCore-6.1.so.abi: Likewise. * tests/data/test-annotate/test21-pr19092.so.abi: Likewise. * tests/data/test-diff-filter/test30-pr18904-rvalueref-report0.txt: Likewise. * tests/data/test-diff-filter/test30-pr18904-rvalueref-report1.txt: Likewise. * tests/data/test-diff-filter/test30-pr18904-rvalueref-report2.txt: Likewise. * tests/data/test-diff-filter/test35-pr18754-no-added-syms-report-0.txt: Likewise. * tests/data/test-read-dwarf/PR22015-libboost_iostreams.so.abi: Likewise. * tests/data/test-read-dwarf/PR22122-libftdc.so.abi: Likewise. * tests/data/test-read-dwarf/PR25042-libgdbm-clang-dwarf5.so.6.0.0.abi: Likewise. * tests/data/test-read-dwarf/libtest23.so.abi: Likewise. * tests/data/test-read-dwarf/libtest24-drop-fns-2.so.abi: Likewise. * tests/data/test-read-dwarf/libtest24-drop-fns.so.abi: Likewise. * tests/data/test-read-dwarf/test-libandroid.so.abi: Likewise. * tests/data/test-read-dwarf/test0.abi: Likewise. * tests/data/test-read-dwarf/test0.hash.abi: Likewise. * tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: Likewise. * tests/data/test-read-dwarf/test11-pr18828.so.abi: Likewise. * tests/data/test-read-dwarf/test12-pr18844.so.abi: Likewise. * tests/data/test-read-dwarf/test13-pr18894.so.abi: Likewise. * tests/data/test-read-dwarf/test15-pr18892.so.abi: Likewise. * tests/data/test-read-dwarf/test16-pr18904.so.abi: Likewise. * tests/data/test-read-dwarf/test17-pr19027.so.abi: Likewise. * tests/data/test-read-dwarf/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: Likewise. * tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi: Likewise. * tests/data/test-read-dwarf/test20-pr19025-libvtkParallelCore-6.1.so.abi: Likewise. * tests/data/test-read-dwarf/test21-pr19092.so.abi: Likewise. * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: Likewise. * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Likewise. 2020-11-13 Dodji Seketeli ir: Add equality op to array_type_def::subrange_type::bound_value * include/abg-ir.h (array_type_def::subrange_type::bound_value::operator==): Declare new ... * src/abg-ir.cc (array_type_def::subrange_type::bound_value::operator==): ... equality operator. 2020-11-12 Dodji Seketeli writer: Sort decls and fix topological sorting for types * include/abg-ir.h (scope_decl::get_sorted_member_decls): Declare new member function. * src/abg-ir.cc (struct decl_topo_comp): New sorting functor. (type_topo_comp::operator()): Re-use the decl_topo_comp to sort type declarations. (scope_decl::priv::sorted_members_): Add new data member. (scope_decl::get_sorted_member_decls): Define new member function. * src/abg-writer.cc (write_translation_unit): Use the new scope_decl::get_sorted_member_decls. * tests/data/test-annotate/libtest23.so.abi: Adjust. * tests/data/test-annotate/test15-pr18892.so.abi: Likewise. * tests/data/test-annotate/test17-pr19027.so.abi: Likewise. * tests/data/test-annotate/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: Likewise. * tests/data/test-annotate/test19-pr19023-libtcmalloc_and_profiler.so.abi: Likewise. * tests/data/test-annotate/test20-pr19025-libvtkParallelCore-6.1.so.abi: Likewise. * tests/data/test-annotate/test21-pr19092.so.abi: Likewise. * tests/data/test-read-dwarf/libtest23.so.abi: Likewise. * tests/data/test-read-dwarf/test-libandroid.so.abi: Likewise. * tests/data/test-read-dwarf/test15-pr18892.so.abi: Likewise. * tests/data/test-read-dwarf/test17-pr19027.so.abi: Likewise. * tests/data/test-read-dwarf/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: Likewise. * tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi: Likewise. * tests/data/test-read-dwarf/test20-pr19025-libvtkParallelCore-6.1.so.abi: Likewise. * tests/data/test-read-dwarf/test21-pr19092.so.abi: Likewise. * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: Likewise. * tests/data/test-read-write/test2.xml: Likewise. * tests/data/test-read-write/test28-without-std-fns-ref.xml: Likewise. * tests/data/test-read-write/test28-without-std-vars-ref.xml: Likewise. 2020-10-27 Dodji Seketeli Bug PR26739 - Handle qualified typedef array types * include/abg-fwd.h (is_typedef_of_array, clone_array) (clone_typedef, clone_qualified_type, clone_array_tree): Declare new functions. (peel_qualified_or_typedef_type): Declare new overload. (is_array_of_qualified_element): Constify the parameter. * include/abg-ir.h ({qualified_type, typedef}_def::set_underlying_type): Add new member functions. (array_type_def::subrange_type::subrange_type): Make constify the reference to the underlying type parameter. * src/abg-ir.cc (is_array_of_qualified_element): Constify the parameter. (peel_qualified_or_typedef_type): Define new overload for type_base_sptr. (clone_typedef_array_qualified_type): Define static function. (clone_array clone_typedef, clone_qualified_type) (clone_array_tree, is_typedef_of_array): Define new functions. (qualified_type_def::get_underlying_type): Rename the return type shared_ptr into type_base_sptr. ({typedef, qualified_type}_def::set_underlying_type): Define new member function. (array_type_def::subrange_type::priv::priv): Initialize the 'infinite_' data member. * src/abg-dwarf-reader.cc (maybe_strip_qualification): Handle qualified typedef of arrays. Merge this with the handling of qualified arrays. Note that before editing the elements of the array to make the array (or typedef) qualifier apply to the element the sub-tree is cloned to make its type nodes be 'un-shared'. This prevents us from editing type nodes that are shared by other type expressions. * tests/data/test-diff-filter/test-PR26739-report-0.txt: New reference test output. * tests/data/test-diff-filter/test-PR26739-2-report-0.txt: Likewise. * tests/data/test-diff-filter/test-PR26739-v{0,1}.c: Source code of new binary test input. * tests/data/test-diff-filter/test-PR26739-2-v{0,1}.c: Likewise. * tests/data/test-diff-filter/test-PR26739-v{0,1}.o: New binary test inputs. * tests/data/test-diff-filter/test-PR26739-2-v{0,1}.o: Likewise. * tests/data/Makefile.am: Add the new test material above to source distribution. * tests/test-diff-filter.cc (in_out_specs): Add the test inputs above to this harness. * tests/data/test-annotate/test15-pr18892.so.abi: Adjust. * tests/data/test-annotate/test17-pr19027.so.abi: Likewise. * tests/data/test-annotate/test19-pr19023-libtcmalloc_and_profiler.so.abi: Likewise. * tests/data/test-annotate/test21-pr19092.so.abi: Likewise. * tests/data/test-read-dwarf/PR22122-libftdc.so.abi: Likewise. * tests/data/test-read-dwarf/test12-pr18844.so.abi: Likewise. * tests/data/test-read-dwarf/test15-pr18892.so.abi: Likewise. * tests/data/test-read-dwarf/test17-pr19027.so.abi: Likewise. * tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi: Likewise. * tests/data/test-read-dwarf/test21-pr19092.so.abi: Likewise. * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: Likewise. 2020-11-03 Dodji Seketeli Update test-libandroid.so.abi * tests/data/test-read-dwarf/test-libandroid.so.abi: Update. 2020-10-29 Matthias Maennich dwarf-reader: Ignore zero length location expressions from DW_AT_location * src/abg-dwarf-reader.cc (die_location_expr): Ignore zero length location expressions. * tests/data/Makefile.am: Add new test files. * tests/data/test-read-dwarf/test-libandroid.so: New test file. * tests/data/test-read-dwarf/test-libandroid.so.abi: Likewise. * tests/test-read-dwarf.cc: Add new test case. Reported-by: Dan Albert Reviewed-by: Giuliano Procida Cc: Mark Wielaard 2020-10-29 Giuliano Procida Improve enum synthetic type names * src/abg-dwarf-reader.cc (build_internal_underlying_enum_type_name): Add a size argument (and don't default is_anonymous argument). Append size of type to synthetic type name. (build_enum_underlying_type): Pass type size to build_internal_underlying_enum_type_name. * tests/data/test-abidiff-exit/test-decl-enum-report-3.txt: Update. Note that there may be an issue with leaf-mode reporting of pointer type changes. * tests/data/test-diff-dwarf-abixml/PR25409-librte_bus_dpaa.so.20.0.abi: Regenerate this (catching up with various abidw updates). * tests/data/test-annotate/test-anonymous-members-0.o.abi: Refresh with new type names. * tests/data/test-annotate/test0.abi: Likewise. * tests/data/test-annotate/test13-pr18894.so.abi: Likewise. * tests/data/test-annotate/test14-pr18893.so.abi: Likewise. * tests/data/test-annotate/test15-pr18892.so.abi: Likewise. * tests/data/test-annotate/test17-pr19027.so.abi: Likewise. * tests/data/test-annotate/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: Likewise. * tests/data/test-annotate/test19-pr19023-libtcmalloc_and_profiler.so.abi: Likewise. * tests/data/test-annotate/test20-pr19025-libvtkParallelCore-6.1.so.abi: Likewise. * tests/data/test-annotate/test21-pr19092.so.abi: Likewise. * tests/data/test-read-dwarf/PR22015-libboost_iostreams.so.abi: Likewise. * tests/data/test-read-dwarf/PR22122-libftdc.so.abi: Likewise. * tests/data/test-read-dwarf/PR25007-sdhci.ko.abi: Likewise. * tests/data/test-read-dwarf/PR25042-libgdbm-clang-dwarf5.so.6.0.0.abi: Likewise. * tests/data/test-read-dwarf/test0.abi: Likewise. * tests/data/test-read-dwarf/test0.hash.abi: Likewise. * tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: Likewise. * tests/data/test-read-dwarf/test11-pr18828.so.abi: Likewise. * tests/data/test-read-dwarf/test12-pr18844.so.abi: Likewise. * tests/data/test-read-dwarf/test13-pr18894.so.abi: Likewise. * tests/data/test-read-dwarf/test14-pr18893.so.abi: Likewise. * tests/data/test-read-dwarf/test15-pr18892.so.abi: Likewise. * tests/data/test-read-dwarf/test16-pr18904.so.abi: Likewise. * tests/data/test-read-dwarf/test17-pr19027.so.abi: Likewise. * tests/data/test-read-dwarf/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: Likewise. * tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi: Likewise. * tests/data/test-read-dwarf/test20-pr19025-libvtkParallelCore-6.1.so.abi: Likewise. * tests/data/test-read-dwarf/test21-pr19092.so.abi: Likewise. * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: Likewise. * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Likewise. 2020-10-29 Giuliano Procida Improve and stabilise sort of member functions * src/abg-ir.cc (virtual_member_function_less_than::operator()): Name temporaries like offsets and symbols to reduce repetition; test each pair of elements (including symbol presence) and return immediately if there's a difference; add a comparison of linkage name just after comparing symbol names. (sort_virtual_member_functions): Use stable_sort instead of sort. * tests/data/test-read-dwarf/PR22015-libboost_iostreams.so.abi: Update with new ordering of member functions. * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: Likewise. 2020-11-01 Dodji Seketeli update-test-output.py: Update syntax * tests/update-test-output.py: Update syntax for python3. 2020-10-31 Dodji Seketeli Bug 26770 - Spurious declaration-only-ness induces spurious type changes * src/abg-dwarf-reader.cc (add_or_update_class_type): When creating a class, set declaration-only-ness unconditionally. When updating the class however, only set the declaration-only-ness when the current one is not consistent with the size of the class. * tests/data/test-annotate/test14-pr18893.so.abi: Adjust. * tests/data/test-annotate/test19-pr19023-libtcmalloc_and_profiler.so.abi: Likewise. * tests/data/test-annotate/test20-pr19025-libvtkParallelCore-6.1.so.abi: Likewise. * tests/data/test-read-dwarf/test14-pr18893.so.abi: Likewise. * tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi: Likewise. * tests/data/test-read-dwarf/test20-pr19025-libvtkParallelCore-6.1.so.abi: Likewise. * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: Likewise. 2020-10-21 Matthias Maennich dwarf-reader: fix lookup for repeated translation unit paths * src/abg-dwarf-reader.cc(build_translation_unit_and_add_to_ir): Fix lookup for potentially already existing translation units. Reported-by: Dan Albert 2020-10-21 Giuliano Procida Stabilise sort of canonical types * src/abg-ir.cc (scope_decl::get_sorted_canonical_types): Sort canonical types with std::stable_sort(..., type_topo_comp()). Reviewed-by: Matthias Maennich 2020-10-27 Mark Wielaard Assume subrange bounds types are unsigned if no underlying type is given. * src/abg-dwarf-reader.cc (build_subrange_type): Default is_signed to false. 2020-10-23 Mark Wielaard dwarf-reader: get subrange_type bounds signedness from underlying type * src/abg-dwarf-reader.cc (die_attribute_has_form) (die_attribute_is_signed, die_attribute_is_unsigned) (die_attribute_has_no_signedness): Remove static functions. (die_constant_attribute): Add the 'is_signed' parameter. (die_address_attribute): Adjust comment. (build_subrange_type): Determine signedness of the bounds by looking at the DW_AT_encoding attribute of the underlying type. 2020-10-23 Dodji Seketeli abg-tools-utils: Fix comment * include/abg-tools-utils.h (enum abidiff_status): Fix a comment. 2020-10-13 Dodji Seketeli configure: Support ABIGAIL_NO_OPTIMIZATION_DEBUG environment variable * configure.ac: Set the CXXFLAGS and CFLAGS to "-g -O0 -Wall -Wextra -Werror" if the ABIGAIL_NO_OPTIMIZATION_DEBUG is set. 2020-10-13 Dodji Seketeli Structurally compare the few non-canonicalized types in general * include/abg-fwd.h (hash_as_canonical_type_or_constant): Remove public declaration of this function. * src/abg-hash.cc (type_base::dynamic_hash::operator()): Add a comment. * src/abg-ir.cc (hash_as_canonical_type_or_constant): Make this function static now. (hash_type_or_decl): Use hash_type for types. * src/abg-writer.cc (type_hasher::operator()): Use hash_type. 2020-10-12 Dodji Seketeli Fix redundancy detection in the diff graph * src/abg-comparison-priv.h (diff_context::priv::last_visited_diff_node_): Remove unnecessary data member. (class_or_union_diff::priv::sorted_{deleted,inserted}_member_functions_): Add new data members. (sort_string_member_function_sptr_map): Declare new function. * src/abg-comparison.cc (sort_string_member_function_sptr_map): Define new function. (redundancy_marking_visitor::visit_begin): If the current diff node is equivalent to another one that has been already marked redundant, then consider the current diff node as redundant as well. Considering the fact an ancestor node has been filtered out is now useless because if that's the case then the current descendant node wouldn't even be walked at reporting time. So remove the call to diff_has_ancestor_filtered_out. (categorize_redundancy): Remove useless call here as well. (diff_has_ancestor_filtered_out, diff_has_ancestor_filtered_out) (diff_context::{mark_last_diff_visited_per_class_of_equivalence, clear_last_diffs_visited_per_class_of_equivalence, get_last_visited_diff_of_class_of_equivalence}): Remove unnecessary functions. (redundancy_marking_visitor::visit_end): Add comment. (class_diff::ensure_lookup_tables_populated): Lexicographically sort inserted/deleted member functions. (class_or_union_diff::chain_into_hierarchy): Chain changed data members diff nodes in a sorted manner. * src/abg-default-reporter.cc (default_reporter::report): Report deleted/inserted member functions in lexicographic order. * tests/data/test-diff-filter/test31-pr18535-libstdc++-report-0.txt: Adjust. * tests/data/test-diff-filter/test31-pr18535-libstdc++-report-1.txt: Likewise. * 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: Likewise. * tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-0.txt: Likewise. * tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-1.txt: Likewise. 2020-10-08 Dodji Seketeli Consider the implicit 'this' parameter when comparing methods * include/abg-ir.h (function_type::get_first_parm): Declare new accessor. * src/abg-ir.cc (function_type::get_first_parm): Define new accessor. (equals): In the overload for function_type, always take the implicit "this" parameter into account in parameter comparisons. (function_type::get_first_non_implicit_parm): Adjust comment. * src/abg-comp-filter.cc (function_name_changed_but_not_symbol): Avoid potential NULL pointer dereferencing. * src/abg-comparison.cc (function_type_diff::ensure_lookup_tables_populated): Always take the changes to the implicit 'this' parameter into account in the function type diff. (compute_diff): In the overload for function_type, Always compare the implicit 'this' parameter when comparing function parameters. * src/abg-default-reporter.cc (default_reporter::report): Refer to "implicit parameter" when reporting changes on parameters artificially generated by the compiler. * src/abg-suppression.cc (type_suppression::suppresses_diff): Make the 'access_through' predicate work on a qualified version of type 'S', even if it was meant to work on type 'S'. This allows it to work on 'const S', especially when S is accessed through 'pointer to const S', which happens when we consider the implicit 'this' parameter of a const member function. * tests/data/test-abicompat/test5-fn-changed-report-0.txt: Adjust. * tests/data/test-abicompat/test5-fn-changed-report-1.txt: Likewise. * tests/data/test-abidiff-exit/test1-voffset-change-report0.txt: Likewise. * tests/data/test-abidiff/test-PR18791-report0.txt: Likewise. * tests/data/test-abidiff/test-struct1-report.txt: Likewise. * tests/data/test-diff-dwarf-abixml/test0-pr19026-libvtkIOSQL-6.1.so.1-report-0.txt: Likewise. * tests/data/test-diff-dwarf/test0-report.txt: Likewise. * tests/data/test-diff-dwarf/test28-vtable-changes-report-0.txt: Likewise. * tests/data/test-diff-dwarf/test29-vtable-changes-report-0.txt: Likewise. * tests/data/test-diff-dwarf/test30-vtable-changes-report-0.txt: Likewise. * tests/data/test-diff-dwarf/test31-vtable-changes-report-0.txt: Likewise. * tests/data/test-diff-dwarf/test36-ppc64-aliases-report-0.txt: Likewise. * tests/data/test-diff-dwarf/test41-PR20476-hidden-report-0.txt: Likewise. * tests/data/test-diff-dwarf/test42-PR21296-clanggcc-report0.txt: Likewise. * tests/data/test-diff-dwarf/test5-report.txt: Likewise. * tests/data/test-diff-dwarf/test8-report.txt: Likewise. * tests/data/test-diff-filter/test0-report.txt: Likewise. * tests/data/test-diff-filter/test01-report.txt: Likewise. * tests/data/test-diff-filter/test10-report.txt: Likewise. * tests/data/test-diff-filter/test13-report.txt: Likewise. * tests/data/test-diff-filter/test2-report.txt: Likewise. * tests/data/test-diff-filter/test28-redundant-and-filtered-children-nodes-report-0.txt: Likewise. * tests/data/test-diff-filter/test28-redundant-and-filtered-children-nodes-report-1.txt: Likewise. * tests/data/test-diff-filter/test30-pr18904-rvalueref-report0.txt: Likewise. * tests/data/test-diff-filter/test30-pr18904-rvalueref-report1.txt: Likewise. * tests/data/test-diff-filter/test30-pr18904-rvalueref-report2.txt: Likewise. * tests/data/test-diff-filter/test31-pr18535-libstdc++-report-0.txt: Likewise. * tests/data/test-diff-filter/test31-pr18535-libstdc++-report-1.txt: Likewise. * tests/data/test-diff-filter/test35-pr18754-no-added-syms-report-0.txt: Likewise. * tests/data/test-diff-filter/test35-pr18754-no-added-syms-report-1.txt: Likewise. * tests/data/test-diff-filter/test4-report.txt: Likewise. * tests/data/test-diff-filter/test41-report-0.txt: Likewise. * tests/data/test-diff-filter/test9-report.txt: Likewise. * tests/data/test-diff-pkg/libsigc++-2.0-0c2a_2.4.0-1_amd64--libsigc++-2.0-0v5_2.4.1-1ubuntu2_amd64-report-0.txt: Likewise. * tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-0.txt: Likewise. * tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-1.txt: Likewise. * tests/data/test-diff-suppr/test24-soname-report-0.txt: Likewise. * tests/data/test-diff-suppr/test24-soname-report-1.txt: Likewise. * tests/data/test-diff-suppr/test24-soname-report-10.txt: Likewise. * tests/data/test-diff-suppr/test24-soname-report-11.txt: Likewise. * tests/data/test-diff-suppr/test24-soname-report-12.txt: Likewise. * tests/data/test-diff-suppr/test24-soname-report-13.txt: Likewise. * tests/data/test-diff-suppr/test24-soname-report-14.txt: Likewise. * tests/data/test-diff-suppr/test24-soname-report-15.txt: Likewise. * tests/data/test-diff-suppr/test24-soname-report-16.txt: Likewise. * tests/data/test-diff-suppr/test24-soname-report-2.txt: Likewise. * tests/data/test-diff-suppr/test24-soname-report-3.txt: Likewise. * tests/data/test-diff-suppr/test24-soname-report-4.txt: Likewise. * tests/data/test-diff-suppr/test24-soname-report-5.txt: Likewise. * tests/data/test-diff-suppr/test24-soname-report-6.txt: Likewise. * tests/data/test-diff-suppr/test24-soname-report-7.txt: Likewise. * tests/data/test-diff-suppr/test24-soname-report-8.txt: Likewise. * tests/data/test-diff-suppr/test24-soname-report-9.txt: Likewise. * tests/data/test-diff-suppr/test31-report-1.txt: Likewise. * tests/data/test-diff-suppr/test33-report-0.txt: Likewise. 2020-08-17 Giuliano Procida Fix two wrongs in test suppression regex * tests/data/test-diff-suppr/test38-char-class-in-ini.abignore: Don't anchor regex match to beginning of file name. Change "filename_regexp" to "file_name_regexp". 2020-08-17 Giuliano Procida Add missing newlines to end of test files. * tests/data/test-diff-suppr/test0-type-suppr-2.suppr: Add final new line. * tests/data/test-diff-suppr/test22-suppr-removed-var-sym-4.suppr: Likewise. * tests/data/test-diff-suppr/test23-alias-filter-0.suppr: Likewise. * tests/data/test-diff-suppr/test23-alias-filter-4.suppr: Likewise. * tests/data/test-diff-suppr/test28-add-aliased-function-1.suppr: Likewise. * tests/data/test-diff-suppr/test28-add-aliased-function-2.suppr: Likewise. * tests/data/test-diff-suppr/test28-add-aliased-function-3.suppr: Likewise. * tests/data/test-diff-suppr/test28-add-aliased-function-4.suppr: Likewise. * tests/data/test-diff-suppr/test41-enumerator-changes-0.suppr: Likewise. * tests/data/test-diff-suppr/test7-var-suppr-7.suppr: Likewise. * tests/data/test-ini/test01-equal-in-property-string.abignore: Likewise. 2020-09-18 Giuliano Procida abg-corpus.cc: report architecture discrepancies * src/abg-corpus.cc (corpus_group::add_corpus): Report architecture discrepancies. 2020-09-16 Dodji Seketeli Bug 26568 - Union should support more than one anonymous member * src/abg-dwarf-reader.cc (add_or_update_union_type): Don't use the empty name of anonymous members in the lookup to ensure that all data members are unique. Rather, use the whole anonymous member itself for the lookup, just like is done to handle anonymous data member in classes/structs. * src/abg-reader.cc (build_union_decl): Likewise. * src/abg-ir.cc (get_generic_anonymous_internal_type_name): Define new static function. (get_type_name): For internal purposes, make the type name of all anonymous types of a given kind to be the same. This allows the internal representation of anonymous types which are based on type names to all be the same, so that they can be compared among themselves during type canonicalization. * tests/data/test-read-dwarf/test-PR26568-{1,2}.c: Source code of binary test input. * tests/data/test-read-dwarf/test-PR26568-{1,2}.o: New binary test input. * tests/data/test-read-dwarf/test-PR26568-{1,2}.o.abi: New reference test ouput. * tests/data/Makefile.am: Add the new test material above to source distribution. * tests/test-read-dwarf.cc (in_out_specs): Add the new binary test input above to this test harness. * tests/data/test-diff-dwarf-abixml/PR25409-librte_bus_dpaa.so.20.0.abi: Adjust. * tests/data/test-read-dwarf/PR22122-libftdc.so.abi: Likewise. * tests/data/test-read-dwarf/PR25007-sdhci.ko.abi: Likewise. 2020-09-02 Dodji Seketeli Make abidiff and abidw support several --headers-dir{1,2} options * doc/manuals/abidiff.rst: Update documentation for the --headers-dir{1,2} options. * doc/manuals/abidw.rst: Likewise for the --header-dir option. * include/abg-tools-utils.h (gen_suppr_spec_from_headers): Add new overload that takes a vector of headers root dirs. * src/abg-tools-utils.cc (gen_suppr_spec_from_headers_root_dir): Define new function. (gen_suppr_spec_from_headers): Define a new overload that takes a vector of head_root_dir strings; it uses the new gen_suppr_spec_from_headers function. Use the new overload in the previous one that takes just one head_root_dir string. * tools/abidiff.cc (options::headers_dirs{1,2}): Rename option::headers_dir{1,2} into this one and make it be a vector of strings rather than just a string. (parse_command_line): Support several --headers-dir{1,2} on the command line. (set_diff_context_from_opts, set_suppressions): Adjust. * tools/abidw.cc (options::headers_dirs): Renamed options::headers_dir into this and make it be a vector of strings rather than just a string. (parse_command_line): Support several --headers-dir on the command line. (set_suppressions): Adjust. * tests/data/test-abidiff-exit/test-headers-dirs/headers-a/header-a-v{0,1}.h: Header files of new binary test input. * tests/data/test-abidiff-exit/test-headers-dirs/headers-b/header-b-v{0,1}.h: Likewise. * tests/data/test-abidiff-exit/test-headers-dirs/test-headers-dir-v{0,1}.c: Source code of new binary test input. * tests/data/test-abidiff-exit/test-headers-dirs/test-headers-dir-report-{1,2}.txt: Reference output of new binary test input. * tests/data/test-abidiff-exit/test-headers-dirs/test-headers-dir-v{0,1}.o: New binary test input. * tests/data/Makefile.am: Add the new files above to source distribution. * tests/test-abidiff-exit.cc (InOutSpec::in_elfv{0,1}_path): Add new data members. (in_out_specs): Adjust the content of this array as its type changed. Also, add two new entries to run the test over the new binary test inputs above. (do_prefix_strings): Define new static function. (main): Use it the new do_prefix_strings here. Make abidiff use the --header-dir{1,2} option whenever header directories are specified in an entry of the in_out_specs array. 2020-09-14 Dodji Seketeli Bug 26309 - Wrong leaf reporting of changes to typedef underlying type * src/abg-ir.cc (equals): In the overload for typedef_decls, report changes to the underlying type as being local of kind LOCAL_TYPE_CHANGE_KIND. * src/abg-comparison.cc (leaf_diff_node_marker_visitor::visit_begin): Do not mark typedef diff node as leaf node. (suppression_categorization_visitor::visit_end): Propagate the 'suppressed' category of the underlying type to the parent typedef unless the later has a local non-type change. (redundancy_marking_visitor::visit_end): Likewise for the 'redundant' category. * include/abg-reporter.h (report_non_type_typedef_changes): Rename ... * src/abg-default-reporter.cc (report_non_type_typedef_changes): ... report_local_typedef_changes into this. * src/abg-leaf-reporter.cc (leaf_reporter::report): Make the leaf reporter invoke the reporting method of the default reporter for typedefs as all typedef changes are now local. * tests/data/test-diff-filter/test-PR26309-report-0.txt: Add new test reference output. * tests/data/test-diff-filter/test-PR26309-v{0,1}.o: Add new test binary input. * tests/data/test-diff-filter/test-PR26309-v{0,1}.c: Add source code for new test binary input. * tests/data/Makefile.am: Add the new text material above to source distribution. * tests/test-diff-filter.cc (in_out_specs): Add the new test input above to this test harness. * tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-3.txt: Adjust. 2020-09-14 Dodji Seketeli Fix thinko in get_vmlinux_path_from_kernel_dist * src/abg-tools-utils.cc (get_vmlinux_path_from_kernel_dist): Fix thinko. 2020-09-08 Dodji Seketeli writer: Avoid using dynamic hashing in type maps * include/abg-fwd.h (hash_as_canonical_type_or_constant): Declare ... * src/abg-ir.cc (hash_as_canonical_type_or_constant): ... new function. * src/abg-writer.cc (type_hasher::operator()): Use the new hash_as_canonical_type_or_constant. * tests/data/test-read-dwarf/test16-pr18904.so.abi: Adjust. 2020-09-08 Dodji Seketeli Use flat representation to canonicalize anonymous classes and unions * src/abg-ir.cc ({class, union}_decl::get_pretty_representation): Use the flat representation of the class or union even for internal purposes. * tests/data/test-annotate/libtest23.so.abi: Adjust. * tests/data/test-diff-dwarf/PR25058-liblttng-ctl-report-1.txt: Likewise. * tests/data/test-diff-filter/test30-pr18904-rvalueref-report0.txt: Likewise. * tests/data/test-diff-filter/test30-pr18904-rvalueref-report1.txt: Likewise. * tests/data/test-diff-filter/test30-pr18904-rvalueref-report2.txt: Likewise. * tests/data/test-diff-filter/test35-pr18754-no-added-syms-report-0.txt: Likewise. * tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-2.txt: Likewise. * tests/data/test-read-dwarf/PR25007-sdhci.ko.abi: Likewise. * tests/data/test-read-dwarf/libtest23.so.abi: Likewise. * tests/data/test-read-dwarf/test11-pr18828.so.abi: Likewise. 2020-07-24 Giuliano Procida DWARF: track chained DIE declaration-only status * src/abg-dwarf-reader.cc (add_or_update_class_type): Add an is_declaration_only argument. Use this in favour of the die_is_declaration_only helper function. (add_or_update_union_type): Ditto. (function_is_suppressed): Ditto. (build_or_get_fn_decl_if_not_suppressed): Ditto. (build_enum_type): Ditto. (build_ir_node_from_die): To the main overload, add is_declaration_only argument and default this to true. Update this to false if the given DIE is not declaration only and pass this on in recusrive calls and calls to build_enum_type, add_or_update_union_type, add_or_update_class_type and build_or_get_fn_decl_if_not_suppressed. * tests/data/test-annotate/test17-pr19027.so.abi: Update test. This is mostly the removal of is-declaration-only attributes, removal of unreachable parts of the type graph and type id renumbering. * tests/data/test-annotate/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: Likewise. * tests/data/test-annotate/test19-pr19023-libtcmalloc_and_profiler.so.abi: Likewise. * tests/data/test-annotate/test20-pr19025-libvtkParallelCore-6.1.so.abi: Likewise. * tests/data/test-diff-dwarf-abixml/test0-pr19026-libvtkIOSQL-6.1.so.1-report-0.txt: Likewise. * tests/data/test-read-dwarf/test17-pr19027.so.abi: Likewise. * tests/data/test-read-dwarf/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: Likewise. * tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi: Likewise. * tests/data/test-read-dwarf/test20-pr19025-libvtkParallelCore-6.1.so.abi: Likewise. 2020-07-24 Giuliano Procida DWARF: look up DW_AT_declaration non-recursively * src/abg-dwarf-reader.cc (die_die_attribute): Rename 'look_thru_abstract_origin' argument to 'recursively' and mention DW_AT_specification in its doc comment. Remove stale comment for non-existent argument. Simplify code with the help of the ternary operator. (die_flag_attribute): Add recursively argument, defaulted to true. If this is false, look for attribute using dwarf_attr rather than dwarf_attr_integrate. (die_is_declaration_only): Call die_flag_attribute specifying non-recursive attribute search. * tests/data/test-annotate/test15-pr18892.so.abi: Update tests. This is mostly the removal of unreachable parts of the type graph and type id renumbering. * tests/data/test-annotate/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: Likewise. * tests/data/test-annotate/test19-pr19023-libtcmalloc_and_profiler.so.abi: Likewise. * tests/data/test-diff-dwarf-abixml/test0-pr19026-libvtkIOSQL-6.1.so.1-report-0.txt: Likewise. * tests/data/test-read-dwarf/test15-pr18892.so.abi: Likewise. * tests/data/test-read-dwarf/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: Likewise. * tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi: Likewise. * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: Likewise. 2020-07-24 Giuliano Procida Improve documentation of abidiff --type-id-style * tools/abidw.cc (display_usage): In documentation of "--type-id-style" option, add a missing closing ')', spell "type id" without a '-', split overly long string over two lines, use "<...>" to indicate mandatory argument and improve description of formats. * doc/manuals/abidw.rst: In documentation of "--type-id-style" option, use "<...>" to indicate mandatory argument. 2020-07-23 Giuliano Procida Fix maybe_report_data_members_replaced_by_anon_dm * src/abg-reporter-priv.cc (maybe_report_data_members_replaced_by_anon_dm): Move declarations of anonymous_data_member and dms_replaced_by_same_anon_dm into inner loop. Use anonymous_data_member for testing and reporting, allowing iterators i and j to be replaced by just iterator i. Push first decl onto dms_replaced_by_same_anon_dm unconditionally and move control flow logic into loop condition. * tests/data/Makefile.am: Add new test cases. * tests/data/test-diff-filter/test-PR25661-7-report-1.txt: New test case file. * tests/data/test-diff-filter/test-PR25661-7-report-2.txt: Likewise. * tests/data/test-diff-filter/test-PR25661-7-report-3.txt: Likewise. * tests/data/test-diff-filter/test-PR25661-7-report-4.txt: Likewise. * tests/data/test-diff-filter/test-PR25661-7-v0.c: Likewise. * tests/data/test-diff-filter/test-PR25661-7-v0.o: Likewise. * tests/data/test-diff-filter/test-PR25661-7-v1.c: Likewise. * tests/data/test-diff-filter/test-PR25661-7-v1.o: Likewise. * tests/test-diff-filter.cc: Call new test cases. 2020-07-22 Giuliano Procida Fix decl_base comparison function * src/abg-ir.cc (equals): In the decl_base overload, note that the value returned by decl_names_equal should be negated and replace decls_are_different with decls_are_same, negating all occurrences. * tests/data/test-diff-dwarf/PR25058-liblttng-ctl-report-1.txt: Update tests, removing some spurious anonymous union name change. * tests/data/test-diff-filter/test33-report-0.txt: Diff now completely empty. * tests/data/test-diff-pkg/elfutils-libs-0.170-4.el7.x86_64-multiple-sym-vers-report-0.txt: 3 functions previously considered to have harmless changes are now deemed to have no changes. * tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-2.txt: 1 struct RedStore data member previously considered to have harmless changes is now deemed to have no changes. * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: One instance of an anonymous struct removed and a typedef repointed at another existing instance; many type ids renumbered. 2020-07-22 Giuliano Procida Make decl_names_equal more accurate * src/abg-tools-utils.cc (decl_names_equal): Move {l,r}_pos2 declarations into the loop and make {l,r}_length const. Avoid chance of arithmetic on string::npos values. Rework logic so there is a single test for "names compare equal" and a single test for different numbers of name components. * tests/test-tools-utils.cc (main): Add nine more tests. 2020-07-30 Dodji Seketeli Bug 26261 - Fix logic for canonicalizing DW_TAG_subroutine_type DIEs * src/abg-dwarf-reader.cc (compare_dies): Get out early if we are are in the middle of a potential recursive comparison of function types. Likewise if we detect that the two function types have different textual representations, linkage names, or have a the same textual representation, linkage names and are defined in the same translation unit. * tests/data/test-read-dwarf/PR26261/PR26261-exe: New test binary input file. * tests/data/test-read-dwarf/PR26261/PR26261-exe.abi: New reference test output file. * tests/data/test-read-dwarf/PR26261/PR26261-main.c: Source code of the binary above. * tests/data/test-read-dwarf/PR26261/PR26261-obj{a,b}.{c,h}: Likewise. * tests/data/test-read-dwarf/PR26261/Makefile: Makefile to build the exe out of the source files. * tests/data/Makefile.am: Add the new test input files to source distribution. * tests/test-read-dwarf.cc (in_out_spec): Add the binary test input above to the test harness. 2020-07-29 Dodji Seketeli dwarf-reader: re-indent a block of code * src/abg-dwarf-reader.cc (compare_dies): Properly indent a sub-block of the big switch case statement in there. 2020-07-17 Giuliano Procida abg-ir.cc: Remove duplicated line of code * src/abg-ir.cc (decl_base::set_definition_of_declaration): Remove duplicated assignment statement. 2020-07-16 Giuliano Procida abg-writer.cc: Fix indentation of XML output * src/abg-writer.cc (write_canonical_types_of_scope): Do not add additional indentation. (write_translation_unit): Pass additional indentation to write_canonical_types_of_scope. (write_class_decl): Ensure optional annotations of base classes have the same indentation as the base classes themselves. * tests/data/test-annotate/libtest23.so.abi: Fix indentation. * tests/data/test-annotate/libtest24-drop-fns-2.so.abi: Ditto. * tests/data/test-annotate/libtest24-drop-fns.so.abi: Ditto. * tests/data/test-annotate/test-anonymous-members-0.o.abi: Ditto. * tests/data/test-annotate/test1.abi: Ditto. * tests/data/test-annotate/test14-pr18893.so.abi: Ditto. * tests/data/test-annotate/test15-pr18892.so.abi: Ditto. * tests/data/test-annotate/test17-pr19027.so.abi: Ditto. * tests/data/test-annotate/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: Ditto. * tests/data/test-annotate/test19-pr19023-libtcmalloc_and_profiler.so.abi: Ditto. * tests/data/test-annotate/test20-pr19025-libvtkParallelCore-6.1.so.abi: Ditto. * tests/data/test-annotate/test21-pr19092.so.abi: Ditto. * tests/data/test-diff-suppr/test45-abi-wl.xml: Ditto. * tests/data/test-diff-suppr/test45-abi.xml: Ditto. * tests/data/test-diff-suppr/test46-PR25128-base.xml: Ditto. * tests/data/test-diff-suppr/test46-PR25128-new.xml: Ditto. * tests/data/test-read-dwarf/PR22015-libboost_iostreams.so.abi: Ditto. * tests/data/test-read-dwarf/PR22122-libftdc.so.abi: Ditto. * tests/data/test-read-dwarf/libtest23.so.abi: Ditto. * tests/data/test-read-dwarf/libtest24-drop-fns-2.so.abi: Ditto. * tests/data/test-read-dwarf/libtest24-drop-fns.so.abi: Ditto. * tests/data/test-read-dwarf/test1.abi: Ditto. * tests/data/test-read-dwarf/test1.hash.abi: Ditto. * tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: Ditto. * tests/data/test-read-dwarf/test11-pr18828.so.abi: Ditto. * tests/data/test-read-dwarf/test12-pr18844.so.abi: Ditto. * tests/data/test-read-dwarf/test14-pr18893.so.abi: Ditto. * tests/data/test-read-dwarf/test15-pr18892.so.abi: Ditto. * tests/data/test-read-dwarf/test16-pr18904.so.abi: Ditto. * tests/data/test-read-dwarf/test17-pr19027.so.abi: Ditto. * tests/data/test-read-dwarf/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: Ditto. * tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi: Ditto. * tests/data/test-read-dwarf/test20-pr19025-libvtkParallelCore-6.1.so.abi: Ditto. * tests/data/test-read-dwarf/test21-pr19092.so.abi: Ditto. * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: Ditto. * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Ditto. * tests/data/test-read-write/test10.xml: Ditto. * tests/data/test-read-write/test15.xml: Ditto. * tests/data/test-read-write/test21.xml: Ditto. * tests/data/test-read-write/test28-without-std-fns-ref.xml: Ditto. * tests/data/test-read-write/test28-without-std-vars-ref.xml: Ditto. 2020-07-16 Giuliano Procida Remove ABI XML test data file blank lines * tests/data/test-abidiff/test-PR18166-libtirpc.so.abi: Remove blank lines. * tests/data/test-diff-dwarf-abixml/PR25409-librte_bus_dpaa.so.20.0.abi: Ditto. * tests/data/test-diff-dwarf-abixml/test0-pr19026-libvtkIOSQL-6.1.so.1.abi: Ditto. * tests/data/test-diff-suppr/test45-abi-wl.xml: Ditto. * tests/data/test-diff-suppr/test45-abi.xml: Ditto. * tests/data/test-diff-suppr/test46-PR25128-base.xml: Ditto. * tests/data/test-diff-suppr/test46-PR25128-new.xml: Ditto. 2020-07-15 Giuliano Procida abg-ir.cc: Fix incorrect pop of compared types. * src/abg-ir.cc (equals): In the class_or_union overload, replace one instance of RETURN(false) with return false. 2020-07-09 Giuliano Procida Enable Clang's -Werror-overloaded-virtual. * configure.ac: Remove the special clause that disabled -Werror-overloaded-virtual for Clang builds. 2020-07-09 Giuliano Procida Fix inheritance of scope_decl::insert_member_decl * include/abg-ir.h (scope_decl::insert_member_decl): Change type of member argument from const decl_base_sptr& to plain decl_base_sptr. * src/abg-ir.cc (scope_decl::insert_member_decl): Likewise. 2020-07-27 Dodji Seketeli Pimpl-ify traversable_base and remove its unused traverse method * include/abg-traverse.h (traversable_base::priv): Declare new type. (traverse_base::priv_sptr): Add pointer to private data member. (traverse_base::visiting_): Move this data member definition into traverse_base::priv. (traverse_base::{visiting, traverse_base, ~traverse_base}): Move definitions out-of-oline. (traverse_base::traverse): Comment out. * src/abg-traverse.cc (struct traversable_base::priv): Define new type. (traversable_base::{traversable_base, ~traversable_base, traverse, visiting}): Move these previous inline definitions here. 2020-07-09 Giuliano Procida Simplify peel_typedef_pointer_or_reference_type * include/abg-fwd.h (peel_qualified_or_typedef_type): Remove second argument in declarations of both overloads. * src/abg-comp-filter.cc (is_mostly_distinct_diff): Remove second argument to peel_qualified_or_typedef_type. * src/abg-dwarf-reader.cc (maybe_canonicalize_type): Likewise. * src/abg-ir.cc (peel_qualified_or_typedef_type): In both overloads, remove second argument peel_qual_type, simplify code with the assumption it was always false and remove incomplete array type peeling logic. In type_base_sptr overload, remove stray space. 2020-07-09 Giuliano Procida Remove unused is_reference_or_pointer_diff. * include/abg-comparison.h (is_reference_or_pointer_diff): Drop function declaration. * src/abg-comparison.cc (is_reference_or_pointer_diff): Drop function definition. 2020-07-09 Giuliano Procida abg-comparison.h: Remove stray declaration * include/abg-comparison (is_reference_or_pointer_diff_to_non_basic_distinct_types): Remove stray declaration. 2020-07-08 Giuliano Procida abg-ir.cc: Refactor operator== methods with helper function * src/abg-ir.cc (try_canonical_compare): New template function. (type_decl::operator==): Use it here. (scope_type_decl::operator==): Likewise. (qualified_type_def::operator==): Likewise. (pointer_type_def::operator==): Likewise. (reference_type_def::operator==): Likewise. (array_type_def::subrange_type::operator==): Likewise. (array_type_def::operator==): Likewise. (enum_type_decl::operator==): Likewise. (typedef_decl::operator==): Likewise. (function_type::operator==): Likewise. (class_or_union::operator==): Likewise. (class_decl::operator==): Likewise. (union_decl::operator==): Likewise. 2020-07-01 Giuliano Procida abg-comparison.cc: Tidy some corpus_diff code * src/abg-comparison.cc (corpus_diff::priv::emit_diff_stats): Adjust code whitespace; rename the second instance of total_nb_variable_changes to total_nb_unreachable_type_changes. (corpus_diff::has_incompatible_changes): Fix comment typo. 2020-07-06 Giuliano Procida Fix --type-id-style hash for empty internal names. * src/abg-writer.cc (write_context::get_id_for_type): When hashing internal type names, convert to std::string rather than using the raw method directly as this will avoid a null pointer dereference in the case of an empty string; tabify code indentation. 2020-07-08 Giuliano Procida abg-ir.cc: Tidy some operator== definitions * src/abg-irc.cc (scope_type_decl::operator==): Compare naked canonical type pointers instead of the shared pointers. (qualified_type_def::operator==): Remove excess blank line. (function_type::operator==): Do dynamic_cast and check of argument before comparing naked canonical type pointers. (class_or_union::operator==): Eliminate temporary reference. (class_decl::operator==): Likewise. (union_decl::operator==): Likewise. 2020-07-17 Giuliano Procida Fix corpus_diff::has_net_changes for --leaf-changes-only mode * include/abg-reporter.h ({reporter_base, default_reporter, leaf_reporter}::diff_has_net_changes): Add new virtual function. This breaks binary compatibility but should conserve source compatibility. * src/abg-default-reporter.cc (default_reporter::diff_has_net_changes): Define new member function. * src/abg-leaf-reporter.cc (leaf_reporter::diff_has_net_changes): Likewise. * src/abg-comparison.cc (corpus_diff::has_net_changes): Invoke reporter_base::diff_has_net_changes on the current reporter, rather than trying to handle all the different kinds of reporters here. (corpus_diff::priv::apply_filters_and_compute_diff_stats): Add a TODO to possibly delegate the implementation of this function to the reporters. * tests/data/Makefile.am: Add new test case files. * tests/data/test-abidiff-exit/test-net-change-report0.txt: Normal mode, nothing suppressed. * tests/data/test-abidiff-exit/test-net-change-report1.txt: Normal mode, everything suppressed. * tests/data/test-abidiff-exit/test-net-change-report2.txt: Leaf mode, nothing suppressed. * tests/data/test-abidiff-exit/test-net-change-report3.txt: Leaf mode, everything suppressions. * tests/data/test-abidiff-exit/test-net-change-v0.c: Test file * tests/data/test-abidiff-exit/test-net-change-v0.o: Test file * tests/data/test-abidiff-exit/test-net-change-v1.c: Test file * tests/data/test-abidiff-exit/test-net-change-v1.o: Test file * tests/data/test-abidiff-exit/test-net-change.abignore: This suppresses changes for all variables, functions and types in the test files, except for the 'victim' function. * tests/test-abidiff-exit.cc: Run new test cases. Reviewed-by: Matthias Maennich 2020-07-01 Giuliano Procida reporter: Fix report whitespace typos. * src/abg-reporter-priv.cc (represent): Add missing space to string split across two lines in certain anonymous data member diffs. * src/abg-default-reporter.cc (report): In the array_diff overload, eliminate trailing space at end of line. * tests/data/test-diff-dwarf/test10-report.txt: Delete trailing whitespace. * tests/data/test-diff-filter/test24-compatible-vars-report-1.txt: Ditto. * 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: Ditto. * tests/data/test-diff-pkg/libcdio-0.94-1.fc26.x86_64--libcdio-0.94-2.fc26.x86_64-report.1.txt: Ditto. * tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-0.txt: Ditto. * tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-2.txt: Ditto. 2020-07-09 Giuliano Procida abg-writer.cc: Clean up new line emission. * src/abg-writer.cc (annotate): In the function_decl::parameter_sptr overload, fix code whitespace. (write_decl_in_scope): Remove wrote_context state variable and associated logic; emit new line unconditionally after end of XML tags and nowhere else. (write_canonical_types_of_scope): Emit new line after end of XML comment and nowhere else. (write_translation_unit): Emit new line after end of XML tags and nowhere else. (write_type_decl): Likewise. (write_namespace_decl): Likewise. (write_qualified_type_def): Emit new line after end of XML tag. (write_pointer_type_def): Likewise. (write_reference_type_def): Likewise. (write_array_type_def): Emit new line after end of XML tags and nowhere else. (write_enum_type_decl): Emit new line after end of XML tag. (write_elf_symbol): Likewise. (write_elf_symbols_table): Emit no new lines. (write_elf_needed): Emit new line unconditionally after end of XML tags. (write_typedef_decl): Emit new line after end of XML tag. (write_var_decl): Emit new line after end of XML tag. (write_function_decl): Likewise. (write_function_type): Fold two output statements into one; emit new line after end of XML tag. (write_class_decl_opening_tag): Emit new line unconditionally after end of XML tags and simplify empty element tag logic. (write_union_decl_opening_tag): Likewise. (write_class_decl): Emit new line after end of XML tag and nowhere else. (write_union_decl): Likewise. (write_member_type_opening_tag): Emit new line after end of XML tag. (write_member_type): Emit new lines only after XML tags. (write_type_tparameter): Emit new line after XML tag. (write_non_type_tparameter): Likewise. (write_template_tparameter): Emit new line after XML tag and nowhere else. (write_type_composition): Likewise. (write_template_parameters): Emit no new lines. (write_function_tdecl): Emit new line after XML tag and nowhere else. (write_class_tdecl): Likewise. (write_corpus): Emit new lines only after XML tags. (dump): In the decl_base_sptr overload, don't emit final new line as this is now done by write_decl. In the var_decl_sptr overload, don't emit final new line (mistakenly done to cerr instead of o) as this is now done by write_var_decl. In the translation_unit overload, don't emit final new line as this doubles that emitted by write_translation_unit. * tests/data/test-annotate/libtest23.so.abi: Delete all blank lines. * tests/data/test-annotate/libtest24-drop-fns-2.so.abi: Ditto. * tests/data/test-annotate/libtest24-drop-fns.so.abi: Ditto. * tests/data/test-annotate/test-anonymous-members-0.o.abi: Ditto. * tests/data/test-annotate/test1.abi: Ditto. * tests/data/test-annotate/test13-pr18894.so.abi: Ditto. * tests/data/test-annotate/test14-pr18893.so.abi: Ditto. * tests/data/test-annotate/test15-pr18892.so.abi: Ditto. * tests/data/test-annotate/test17-pr19027.so.abi: Ditto. * tests/data/test-annotate/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: Ditto. * tests/data/test-annotate/test19-pr19023-libtcmalloc_and_profiler.so.abi: Ditto. * tests/data/test-annotate/test20-pr19025-libvtkParallelCore-6.1.so.abi: Ditto. * tests/data/test-annotate/test21-pr19092.so.abi: Ditto. * tests/data/test-annotate/test7.so.abi: Ditto. * tests/data/test-read-dwarf/PR22015-libboost_iostreams.so.abi: Ditto. * tests/data/test-read-dwarf/PR22122-libftdc.so.abi: Ditto. * tests/data/test-read-dwarf/PR25007-sdhci.ko.abi: Ditto. * tests/data/test-read-dwarf/PR25042-libgdbm-clang-dwarf5.so.6.0.0.abi: Ditto. * tests/data/test-read-dwarf/libtest23.so.abi: Ditto. * tests/data/test-read-dwarf/libtest24-drop-fns-2.so.abi: Ditto. * tests/data/test-read-dwarf/libtest24-drop-fns.so.abi: Ditto. * tests/data/test-read-dwarf/test1.abi: Ditto. * tests/data/test-read-dwarf/test1.hash.abi: Ditto. * tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: Ditto. * tests/data/test-read-dwarf/test11-pr18828.so.abi: Ditto. * tests/data/test-read-dwarf/test12-pr18844.so.abi: Ditto. * tests/data/test-read-dwarf/test13-pr18894.so.abi: Ditto. * tests/data/test-read-dwarf/test14-pr18893.so.abi: Ditto. * tests/data/test-read-dwarf/test15-pr18892.so.abi: Ditto. * tests/data/test-read-dwarf/test16-pr18904.so.abi: Ditto. * tests/data/test-read-dwarf/test17-pr19027.so.abi: Ditto. * tests/data/test-read-dwarf/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: Ditto. * tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi: Ditto. * tests/data/test-read-dwarf/test20-pr19025-libvtkParallelCore-6.1.so.abi: Ditto. * tests/data/test-read-dwarf/test21-pr19092.so.abi: Ditto. * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: Ditto. * tests/data/test-read-dwarf/test7.so.abi: Ditto. * tests/data/test-read-dwarf/test7.so.hash.abi: Ditto. * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Ditto. * tests/data/test-read-write/test10.xml: Ditto. * tests/data/test-read-write/test15.xml: Ditto. * tests/data/test-read-write/test21.xml: Ditto. * tests/data/test-read-write/test25.xml: Ditto. * tests/data/test-read-write/test28-without-std-fns-ref.xml: Ditto. * tests/data/test-read-write/test28-without-std-vars-ref.xml: Ditto. 2020-07-09 Dodji Seketeli reader: Remove useless support for WIP types * src/abg-reader.cc (read_context::m_wip_types_map): Remove data member. (read_context::{clear_wip_classes_map, mark_type_as_wip, unmark_type_as_wip, is_wip_type}): Remove member functions. (read_context::maybe_canonicalize_type): Remove use of is_wip_type. 2020-06-19 Giuliano Procida Use pointers not strings in type graph comparison. * tests/data/test-diff-dwarf/PR25058-liblttng-ctl-report-1.txt: Update. * tests/data/test-diff-pkg/elfutils-libs-0.170-4.el7.x86_64-multiple-sym-vers-report-0.txt: Update. * tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-2.txt: Update. * tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-3.txt: Update. 2020-06-10 Giuliano Procida Add tests for declaration-only enums. * tests/data/test-abidiff-exit/test-decl-enum-report-2.txt: Add new test reference output. * tests/data/test-abidiff-exit/test-decl-enum-report-3.txt: Likewise. * tests/data/test-abidiff-exit/test-decl-enum-report.txt: Likewise. * tests/data/test-abidiff-exit/test-decl-enum-v{0,1}.c: Add source code for the binaries below. * tests/data/test-abidiff-exit/test-decl-enum-v{0,1}.o: Add new binary test inputs. * tests/data/Makefile.am: Add the new files above to source distribution. * tests/test-abidiff-exit.cc: Add the test inputs above to the test harness. 2020-06-10 Giuliano Procida Add declaration-only enums to XML reader/writer. * src/abg-reader.cc (build_enum_type_decl): Detect a declaration-only enum and flag it as such. (build_type_decl): Support reading the "is-declaration" attribute. (build_class_decl): Adjust. * src/abg-writer.cc (write_is_declaration_only): Renamed write_class_or_union_is_declaration_only into this. (write_enum_is_declaration_only): Remove. (write_type_decl, write_enum_type_decl) (write_class_decl_opening_tag, write_union_decl_opening_tag): Use write_is_declaration_only. * tests/data/test-read-dwarf/PR22122-libftdc.so.abi: Adjust. * tests/data/test-read-dwarf/test12-pr18844.so.abi: Likewise. * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Likewise. 2020-06-10 Dodji Seketeli Support declaration-only enums in DWARF reader. * src/abg-dwarf-reader.cc (string_enums_map): Define new convenience typedef. (read_context::decl_only_enums_map_): Define new data member. (read_context::{declaration_only_enums, is_decl_only_enum_scheduled_for_resolution, resolve_declaration_only_enums}): Define new member functions. (build_internal_underlying_enum_type_name) (build_enum_underlying_type): Factorize these functions out of ... (build_enum_type): ... here. Detect a decl-only enum and flag it as such. If the enum type is decl-only, then set its underlying type as decl-only as well. (build_enum_underlying_type): Mark the underlying type as artificial. (get_opaque_version_of_type): Make this handle enums as well. So make its return type be type_or_decl_base_sptr, rather than just class_or_union_sptr as it used to be. (read_debug_info_into_corpus): Add logging to trace decl-only enums resolution. (build_ir_node_from_die): Detect when a suppression specification makes an enum opaque. In that case, get an opaque version of the enum type by invoking get_opaque_version_of_type. Note that get_opaque_version_of_type doesn't support returning opaque -- i.e, decl-only enum types -- yet, but this is going to be handled in a subsequent patch. 2020-06-10 Giuliano Procida Support incomplete enums in core and diff code. * include/abg-comp-filter.h (has_decl_only_def_change) : Declare New function. * src/abg-comp-filter.cc (there_is_a_decl_only_enum): Define new static function and ... (type_size_changed): ... use it here. (has_decl_only_def_change): Define new function and ... (categorize_harm{less, ful}_diff_node): ... use it here. * include/abg-fwd.h (enums_type, decl_base_wptr): Declare new typedefs. (look_through_decl_only_class): Declare new overload for class_or_union*. (is_compatible_with_enum_type, is_compatible_with_enum_type) (look_through_decl_only, lookup_enum_types, lookup_enum_types): Declare new functions. * include/abg-ir.h (decl_base::{get_is_declaration_only, set_is_declaration_only, set_definition_of_declaration, get_definition_of_declaration, get_naked_definition_of_declaration}): Declare new member functions. They were moved here from the class_or_union class. (class_or_union::{get_earlier_declaration, set_earlier_declaration, get_definition_of_declaration, set_definition_of_declaration, get_naked_definition_of_declaration, get_is_declaration_only, set_is_declaration_only}): Remove these member functions. * src/abg-ir.cc (decl_base::priv::{declaration_, definition_of_declaration_, naked_definition_of_declaration_, is_declaration_only_}): Define data members. Moved here from class_or_union. (decl_base::priv::priv): Adjust to initialize the new data members. (decl_base::{get_earlier_declaration, set_earlier_declaration, get_definition_of_declaration, get_naked_definition_of_declaration, get_is_declaration_only, set_is_declaration_only, set_definition_of_declaration}): Define member functions. (operator|): In the overload for (change_kind, change_kind), adjust the return type of the call to decl_base::get_definition_of_declaration. (look_through_decl_only): Define new function. (look_through_decl_only_class): Adjust. (look_through_decl_only_enum): Likewise. (maybe_update_types_lookup_map): Adjust return type of call to decl_base::get_definition_of_declaration. (types_defined_same_linux_kernel_corpus_public): Use look_through_decl_only_class rather than open coding it. (class_or_union::priv::{declaration_, definition_of_declaration_, naked_definition_of_declaration_, is_declaration_only_}): Remove these data members. They are now carried by decl_base::priv. (class_or_union::{g,s}et_alignment_in_bits): Adjust. (class_or_union::{g,s}et_size_in_bits): Likewise. (class_or_union::operator==): Likewise. (equals): Adjust the overload for class_or_union. (is_compatible_with_enum_type) * src/abg-comparison.cc (try_to_diff): Adjust the return type of decl_base::get_definition_of_declaration. (leaf_diff_node_marker_visitor::visit_begin): Use filtering::has_decl_only_def_change rather than filtering::has_class_decl_only_def_change. Decl-only changes to enums (or any other type really) will thus not be recorded as leaf changes. * src/abg-dwarf-reader.cc (get_scope_for_die): Adjust return type of decl_base::get_definition_of_declaration. * src/abg-default-reporter.cc (default_reporter::report): Report enum decl-only <-> definition changes. * src/abg-hash.cc (class_or_union::hash::operator()): In the overload for class_or_union& adjust the return type for decl_base::get_definition_of_declaration. 2020-06-19 Giuliano Procida abg-ir.cc: Remove unused re_canonicalize function. * include/abg-fwd.h (re_canonicalize): Remove declaration of obsolete function. * include/abg-ir.h (class {decl_base, type_base}): Remove re_canonicalize friend declarations from these classes. * src/abg-ir.cc (re_canonicalize): Remove obsolete function. 2020-06-24 Dodji Seketeli Bug 26135 - Wrong linkage name causes anonymous classes miscomparison * include/abg-ir.h (class_decl::class_decl): Add two overloads that take the "is_anonymous" flag. (union_decl::union_decl): Likewise. * src/abg-ir.cc (class_decl::class_decl): Define two overloads that take the "is_anonymous" flag and set the linkage name accordingly. (union_decl::union_decl): Likewise. (type_base::get_canonical_type_for): Assert that an anonymous class or union can't have a linkage name for now. * src/abg-dwarf-reader.cc (add_or_update_class_type) (add_or_update_union_type): Use a new overload for the constuctor of {class, union}_decl and set the "is_anonymous" flag. Don't use decl_base::set_is_anonymous anymore. * src/abg-reader.cc (build_class_decl, build_union_decl): Likewise. * tests/data/test-read-dwarf/PR22122-libftdc.so.abi: Adjust. * tests/data/test-read-dwarf/test12-pr18844.so.abi: Likewise. * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Likewise. 2020-06-29 Giuliano Procida Rename declaration-definition change category. * include/abg-comparison.h (TYPE_DECL_ONLY_DEF_CHANGE_CATEGORY): Rename CLASS_DECL_ONLY_DEF_CHANGE_CATEGORY into this. (EVERYTHING_CATEGORY): In the value of this enumerator, rename CLASS_DECL_ONLY_DEF_CHANGE_CATEGORY into TYPE_DECL_ONLY_DEF_CHANGE_CATEGORY. * src/abg-comp-filter.cc (categorize_harmless_diff_node): Likewise. * src/abg-comparison.cc (get_default_harmless_categories_bitmap): Likewise. (operator<<(ostream& o, diff_category c)): Likewise. * src/abg-default-reporter.cc (default_reporter::report): Likewise in the overload for class_or_union_diff. * src/abg-leaf-reporter.cc (leaf_reporter::report): Likewise in the overload for class_or_union_diff. 2020-06-10 Giuliano Procida Tidy build_enum_type state variables. * src/abg-dwarf-reader.cc (build_enum_type): Rename local variable enum_is_anonymous to is_anonymous. Move initilisation of local variable is_artificial to location corresponding to that in add_or_update_class_type and add_or_update_union_type functions. 2020-06-10 Giuliano Procida Refactor d.context() as ctxt in report(enum_diff). * src/abg-default-reporter.cc (report): In the enum_diff overload, introduce the name ctxt to replace four occurrences of d.context(). 2020-06-10 Giuliano Procida Improve code comments and whitespace. * include/abg-fwd.h: Correct doc-comment reference to enum_type_decl. * src/abg-comp-filter.cc: Fix doc-comment syntax. * src/abg-comparison.cc (operator<<): In the diff_category overload, fix code indentation. * src/abg-default-reporter.cc (report): In the class_or_union_diff overload, adjust comment to reflect that the code is reporting changes between declaration-only and defined types, in either direction. 2020-06-17 Giuliano Procida get_canonical_type_for: restore environment better * src/abg-ir.cc (get_canonical_type_for): Ensure the do_on_the_fly_canonicalization and decl_only_class_equals_definition flags are restored unconditionally. 2020-06-18 Dodji Seketeli Bug 26127 - abidw --annotate emits incomplete function types * include/abg-ir.h (decl_base::clear_qualified_name): Declare new protected member function. ({pointer_type_def, reference_type_def, qualified_type_def, function_type}::on_canonical_type_set): Declare virtual member functions. * src/abg-ir.cc (decl_base::clear_qualified_name): Define new protected member function. ({pointer_type_def, reference_type_def, qualified_type_def, function_type}::on_canonical_type_set): Define virtual member functions. * tests/data/test-annotate/test17-pr19027.so.abi: Adjust. * tests/data/test-annotate/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: Likewise. * tests/data/test-annotate/test20-pr19025-libvtkParallelCore-6.1.so.abi: Likewise. 2020-06-11 Giuliano Procida Fix bug that suppressed DWARF read tests. * tests/test-read-dwarf.cc (in_out_specs): Use NULL instead of empty ABI paths for test25, test26 and test27. (perform): Check members of spec, rather than locals with same name, when deciding to terminate testing early; fix some code whitespace. * tests/data/test-read-dwarf/test14-pr18893.so.abi: Update multidimensional array sizes. * tests/data/test-read-dwarf/test17-pr19027.so.abi: Ditto. * tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi: Ditto. * tests/data/test-read-dwarf/test7.so.abi: Ditto. * tests/data/test-read-dwarf/PR25042-libgdbm-clang-dwarf5.so.6.0.0.abi: Update following translation unit ordering change. * tests/data/test-read-dwarf/test13-pr18894.so.abi: Ditto. * tests/data/test-read-dwarf/test14-pr18893.so.abi: Ditto. * tests/data/test-read-dwarf/test15-pr18892.so.abi: Ditto. * tests/data/test-read-dwarf/test16-pr18904.so.abi: Ditto. * tests/data/test-read-dwarf/test17-pr19027.so.abi: Ditto. * tests/data/test-read-dwarf/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: Ditto. * tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi: Ditto. * tests/data/test-read-dwarf/test20-pr19025-libvtkParallelCore-6.1.so.abi: Ditto. * tests/data/test-read-dwarf/test21-pr19092.so.abi: Ditto. * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: Ditto. * tests/data/test-read-dwarf/PR25007-sdhci.ko.abi: Update following code changes affecting ordering of some ABI elements. * tests/data/test-read-dwarf/test16-pr18904.so.abi Reviewed-by: Matthias Maennich Tested-by: Matthias Maennich 2020-06-16 Matthias Maennich cleanup: std::weak_ptr use: replace manual lock by std::weak_ptr::lock * src/abg-comparison-priv.h (diff::priv::get_context): improve weak_ptr usage. (corpus_diff:diff_stats::priv::ctxt): Likewise. * src/abg-comparison.cc (corpus_diff::priv::get_context): Likewise. (var_diff::type_diff): Likewise. * src/abg-ir.cc (elf_symbol::get_next_alias): Likewise. (elf_symbol::get_next_common_instance): Likewise. (type_base::get_canonical_type): Likewise. (qualified_type_def::get_underlying_type): Likewise. (pointer_type_def::get_pointed_to_type): Likewise. (reference_type_def::get_pointed_to_type): Likewise. (array_type_def::subrange_type::get_underlying_type): Likewise. (array_type_def::get_element_type): Likewise. (typedef_decl::get_underlying_type): Likewise. (var_decl::get_type): Likewise. (function_type::get_return_type): Likewise. (function_decl::get_type): Likewise. (function_decl::parameter::get_type): Likewise. (class_or_union::get_naming_typedef): Likewise. (class_or_union::get_definition_of_declaration): Likewise. (class_decl::base_spec::get_base_class): Likewise. (template_parameter::get_enclosing_template_decl): Likewise. (non_type_tparameter::get_type): Likewise. (type_composition::get_composed_type): Likewise. 2020-06-16 Giuliano Procida Fix leaf-mode formatting of decl <-> defn diffs. * src/abg-leaf-reporter.cc (leaf_reporter::report): In the class_or_union_diff overload, add a terminating new line after reporting a declaration-only <-> definition difference. 2020-06-15 Giuliano Procida abg-writer: Add support for stable hash type ids. * doc/manuals/abidw.rst: Replace stray documentation of --named-type-ids with documention of new --type-id-style option. * include/abg-writer.h (type_id_style_kind): Add new enum. (set_type_id_style): Add new write_context setter. (set_common_options): Set type id style in write context. * include/abg-hash.h (fnv_hash): Declare new 32-bit FNV-1a hash function in abigail::hashing namespace. * src/abg-hash.h (fnv_hash): Define new 32-bit FNV-1a hash function in abigail::hashing namespace. * src/abg-writer.cc (write_context): Add m_type_id_style member to record type style to use, defaulting to SEQUENCE_TYPE_ID_STYLE; add m_used_type_id_hashes to record already-used hashes. (write_context::get_type_id_style): Add new getter. (write_context::set_type_id_style): Add new setter. (get_id_for_type): Add support for HASH_TYPE_ID_STYLE style. (set_type_id_style): Add new helper function. * tools/abidw.cc (options): Add type_id_style member. (display_usage): Add description of --type-id-style option. (parse_command_line): Parse --type-id-style option. * tests/data/Makefile.am: Add new hash type id ABI files. * tests/test-read-dwarf.cc: (InOutSpec): Add type_id_style member. (in_out_specs): Set type_id_style to SEQUENCE_TYPE_ID_STYLE in existing test specifications. Duplicate first 9 test cases with type_id_style set to HASH_TYPE_ID_STYLE. * tests/data/test-read-dwarf/test0.hash.abi: New ABI XML file with hash type ids. * tests/data/test-read-dwarf/test1.hash.abi: Ditto. * tests/data/test-read-dwarf/test2.so.hash.abi: Ditto. * tests/data/test-read-dwarf/test3.so.hash.abi: Ditto. * tests/data/test-read-dwarf/test4.so.hash.abi: Ditto. * tests/data/test-read-dwarf/test5.o.hash.abi: Ditto. * tests/data/test-read-dwarf/test6.so.hash.abi: Ditto. * tests/data/test-read-dwarf/test7.so.hash.abi: Ditto. * tests/data/test-read-dwarf/test8-qualified-this-pointer.so.hash.abi: Ditto. 2020-06-12 Giuliano Procida Eliminate non-ASCII characters. * include/abg-diff-utils.h: Replace "’’" with "'". * src/abg-elf-helpers.cc: Replace "⋅" with ".". * src/abg-ini.cc: Replace "@êef" with "@ref". * src/abg-ir.cc: Ditto. * src/abg-tools-utils.cc: Replace "–" with "-". 2020-06-11 Matthias Maennich dwarf-reader: get_die_source: always initialize return value * src/abg-dwarf-reader.cc (read_context::get_die_source): Always initialize die_source. (read_context::ContainerType::get_container): Fix initialization of die_source. (read_context::compute_canonical_die): Likewise. (read_context::get_canonical_die): Likewise. (read_context::get_or_compute_canonical_die): Likewise. (read_context::associate_die_to_decl): Likewise. (read_context::set_canonical_die_offset): Likewise. (read_context::schedule_type_for_late_canonicalization): Likewise. (read_context::compare_dies): Likewise. (read_context::get_parent_die): Likewise. (read_context::get_scope_for_die): Likewise. (read_context::add_or_update_union_type): Likewise. (read_context::maybe_canonicalize_type): Likewise. (read_context::build_ir_node_from_die): Likewise. 2020-06-09 Matthias Maennich abipkgdiff: remove unused includes of elfutils/libdw.h and elf.h * tools/abipkgdiff.cc: Drop unused includes. 2020-05-29 Matthias Maennich abg-reporter: fully qualify std::string and std::ostream * include/abg-reporter.h (reporter_base::report) fully qualify std::string and std::ostream for all overloads. (default_reporter::report_local_typedef_changes): Likewise. (default_reporter::report_local_qualified_type_changes): Likewise. (default_reporter::report_local_reference_type_changes): Likewise. (default_reporter::report_local_function_type_changes): Likewise. (default_reporter::report): Likewise. (leaf_reporter::report_changes_from_diff_maps): Likewise. (leaf_reporter::report): Likewise. Suggested-by: Mark Barolak 2020-06-05 Giuliano Procida Fix HARMLESS_SYMBOL_ALIAS_CHANGE_CATEGORY spelling * include/abg-comparison.h (enum diff_category): Rename HARMLESS_SYMBOL_ALIAS_CHANGE_CATEORY enumerator to HARMLESS_SYMBOL_ALIAS_CHANGE_CATEGORY. * src/abg-comp-filter.cc (categorize_harmless_diff_node): Replace use of HARMLESS_SYMBOL_ALIAS_CHANGE_CATEORY enumerator with HARMLESS_SYMBOL_ALIAS_CHANGE_CATEGORY. * src/abg-comparison.cc (get_default_harmless_categories_bitmap): Replace use of HARMLESS_SYMBOL_ALIAS_CHANGE_CATEORY enumerator with HARMLESS_SYMBOL_ALIAS_CHANGE_CATEGORY. (operator<<): In the diff_category overload, replace use of HARMLESS_SYMBOL_ALIAS_CHANGE_CATEORY enumerator with HARMLESS_SYMBOL_ALIAS_CHANGE_CATEGORY and output correct spelling for both this and HARMLESS_UNION_CHANGE_CATEGORY. * tools/abicompat.cc (create_diff_context): Replace use of HARMLESS_SYMBOL_ALIAS_CHANGE_CATEORY enumerator with HARMLESS_SYMBOL_ALIAS_CHANGE_CATEGORY. 2020-05-18 Matthias Maennich dwarf-reader: read_context: drop unused symbol versioning code * src/abg-dwarf-reader.cc (read_context::versym_section_): Delete. (read_context::verdef_section_): Delete. (read_context::verneed_section_): Delete. (read_context::symbol_versionning_sections_loaded_): Delete. (read_context::symbol_versionning_sections_found_): Delete. (read_context::initialize): Remove initializations of deleted members. (read_context::get_symbol_versionning_sections): Delete. (read_context::get_version_for_symbol): Delete. (read_context::lookup_elf_symbol_from_index): Use get_version_for_symbol provided by elf_helpers. 2020-05-18 Matthias Maennich dwarf-reader: Remove unused code * src/abg-dwarf-reader.cc (lookup_public_variable_symbol_from_elf): Delete. (read_context::bss_section_): Delete. (read_context::text_section_): Delete. (read_context::rodata_section_): Delete. (read_context::data_section_): Delete. (read_context::data1_section_): Delete. (read_context::initialize): Remove initializations of deleted members. (read_context::options): Delete. (read_context::bss_section): Delete. (read_context::text_section): Delete. (read_context::rodata_section): Delete. (read_context::data_section): Delete. (read_context::data1_section): Delete. (read_context::get_elf_file_type): Delete. (read_context::lookup_symbol_from_elf): Delete. (read_context::lookup_public_variable_symbol_from_elf): Delete. (read_context::fun_addr_sym_map_sptr): Delete. (read_context::fun_addr_sym_map): Delete. (read_context::get_data_section_for_variable_address): Delete. (read_context::suppression_matches_function_sym_name): Delete. (read_context::suppression_matches_function_name): Delete. (read_context::suppression_matches_type_name): Delete. 2020-05-29 Dodji Seketeli abigail.m4: Fix copyright notice * abigail.m4: Mention Red Hat in the copyright and myself as author. 2020-05-18 Matthias Maennich tests: Add kernel symtab test suite * tests/data/Makefile.am: add new test data for runtestsymtab * tests/data/test-symtab/kernel-4.14/Makefile: New test case makefile. * tests/data/test-symtab/kernel-4.14/empty.c: Likewise. * tests/data/test-symtab/kernel-4.14/one_of_each.c: Likewise. * tests/data/test-symtab/kernel-4.14/single_function.c: Likewise. * tests/data/test-symtab/kernel-4.14/single_function_gpl.c: Likewise. * tests/data/test-symtab/kernel-4.14/single_variable.c: Likewise. * tests/data/test-symtab/kernel-4.14/single_variable_gpl.c: Likewise. * tests/data/test-symtab/kernel-4.14/empty.ko: New test data. * tests/data/test-symtab/kernel-4.14/one_of_each.ko: Likewise. * tests/data/test-symtab/kernel-4.14/single_function.ko: Likewise. * tests/data/test-symtab/kernel-4.14/single_function_gpl.ko: Likewise. * tests/data/test-symtab/kernel-4.14/single_variable.ko: Likewise. * tests/data/test-symtab/kernel-4.14/single_variable_gpl.ko: Likewise. * tests/data/test-symtab/kernel-4.19/Makefile: New test case makefile. * tests/data/test-symtab/kernel-4.19/empty.c: Likewise. * tests/data/test-symtab/kernel-4.19/one_of_each.c: Likewise. * tests/data/test-symtab/kernel-4.19/single_function.c: Likewise. * tests/data/test-symtab/kernel-4.19/single_function_gpl.c: Likewise. * tests/data/test-symtab/kernel-4.19/single_variable.c: Likewise. * tests/data/test-symtab/kernel-4.19/single_variable_gpl.c: Likewise. * tests/data/test-symtab/kernel-4.19/empty.ko: New test data. * tests/data/test-symtab/kernel-4.19/one_of_each.ko: Likewise. * tests/data/test-symtab/kernel-4.19/single_function.ko: Likewise. * tests/data/test-symtab/kernel-4.19/single_function_gpl.ko: Likewise. * tests/data/test-symtab/kernel-4.19/single_variable.ko: Likewise. * tests/data/test-symtab/kernel-4.19/single_variable_gpl.ko: Likewise. * tests/data/test-symtab/kernel-5.4/Makefile: New test case makefile. * tests/data/test-symtab/kernel-5.4/empty.c: Likewise. * tests/data/test-symtab/kernel-5.4/one_of_each.c: Likewise. * tests/data/test-symtab/kernel-5.4/single_function.c: Likewise. * tests/data/test-symtab/kernel-5.4/single_function_gpl.c: Likewise. * tests/data/test-symtab/kernel-5.4/single_variable.c: Likewise. * tests/data/test-symtab/kernel-5.4/single_variable_gpl.c: Likewise. * tests/data/test-symtab/kernel-5.4/empty.ko: New test data. * tests/data/test-symtab/kernel-5.4/one_of_each.ko: Likewise. * tests/data/test-symtab/kernel-5.4/single_function.ko: Likewise. * tests/data/test-symtab/kernel-5.4/single_function_gpl.ko: Likewise. * tests/data/test-symtab/kernel-5.4/single_variable.ko: Likewise. * tests/data/test-symtab/kernel-5.4/single_variable_gpl.ko: Likewise. * tests/data/test-symtab/kernel-5.6/Makefile: New test case makefile. * tests/data/test-symtab/kernel-5.6/empty.c: Likewise. * tests/data/test-symtab/kernel-5.6/one_of_each.c: Likewise. * tests/data/test-symtab/kernel-5.6/single_function.c: Likewise. * tests/data/test-symtab/kernel-5.6/single_function_gpl.c: Likewise. * tests/data/test-symtab/kernel-5.6/single_variable.c: Likewise. * tests/data/test-symtab/kernel-5.6/single_variable_gpl.c: Likewise. * tests/data/test-symtab/kernel-5.6/empty.ko: New test data. * tests/data/test-symtab/kernel-5.6/one_of_each.ko: Likewise. * tests/data/test-symtab/kernel-5.6/single_function.ko: Likewise. * tests/data/test-symtab/kernel-5.6/single_function_gpl.ko: Likewise. * tests/data/test-symtab/kernel-5.6/single_variable.ko: Likewise. * tests/data/test-symtab/kernel-5.6/single_variable_gpl.ko: Likewise. * tests/data/test-symtab/kernel/Makefile: New test case source file. * tests/data/test-symtab/kernel/empty.c: Likewise. * tests/data/test-symtab/kernel/one_of_each.c: Likewise. * tests/data/test-symtab/kernel/single_function.c: Likewise. * tests/data/test-symtab/kernel/single_function_gpl.c: Likewise. * tests/data/test-symtab/kernel/single_variable.c: Likewise. * tests/data/test-symtab/kernel/single_variable_gpl.c: Likewise. * tests/test-symtab.cc: New test case to test kernel symtabs. 2020-05-18 Matthias Maennich tests: Add symtab test suite * tests/Makefile.am: add new test runtestsymtab * tests/data/Makefile.am: add new test data for runtestsymtab * tests/data/test-symtab/Makefile: Add this to build the binaries below from their source code. * tests/data/test-symtab/basic/empty.c: New test case source. * tests/data/test-symtab/basic/link_against_me.c: Likewise. * tests/data/test-symtab/basic/no_debug_info.c: Likewise. * tests/data/test-symtab/basic/one_function_one_variable.c: Likewise. * tests/data/test-symtab/basic/one_function_one_variable_undefined.c: Likewise. * tests/data/test-symtab/basic/single_function.c: Likewise. * tests/data/test-symtab/basic/single_undefined_function.c: Likewise. * tests/data/test-symtab/basic/single_undefined_variable.c: Likewise. * tests/data/test-symtab/basic/single_variable.c: Likewise. * tests/data/test-symtab/basic/empty.so: New test data, built from the Makefile above. * tests/data/test-symtab/basic/link_against_me.so: Likewise. * tests/data/test-symtab/basic/no_debug_info.so: Likewise. * tests/data/test-symtab/basic/one_function_one_variable.so: Likewise. * tests/data/test-symtab/basic/one_function_one_variable_undefined.so: Likewise. * tests/data/test-symtab/basic/single_function.so: Likewise. * tests/data/test-symtab/basic/single_undefined_function.so: Likewise. * tests/data/test-symtab/basic/single_undefined_variable.so: Likewise. * tests/data/test-symtab/basic/single_variable.so: Likewise. * tests/test-symtab.cc: New test driver. 2020-05-19 Dodji Seketeli Bug 25989 - type_topo_comp doesn't meet irreflexive requirements * src/abg-ir.cc (type_topo_comp::operator()): In the comparison operator consider two equivalent empty-qualified types as being topologically equivalent. 2020-05-07 Dodji Seketeli Bug 25661 - Support data member replacement by anonymous data member * include/abg-comp-filter.h (has_data_member_replaced_by_anon_dm): Declare new function. * include/abg-comparison.h (changed_var_sptr) (changed_var_sptrs_type): Declare new typedefs. (HARMLESS_DATA_MEMBER_CHANGE_CATEGORY): Add a new enumerator to the diff_category enum. (EVERYTHING_CATEGORY): In the diff_category, adjust this enumerator to OR the new HARMLESS_DATA_MEMBER_CHANGE_CATEGORY into it. (SUPPRESSED_CATEGORY, PRIVATE_TYPE_CATEGORY) (SIZE_OR_OFFSET_CHANGE_CATEGORY, VIRTUAL_MEMBER_CHANGE_CATEGORY) (CLASS_DECL_ONLY_DEF_CHANGE_CATEGORY) (FN_PARM_TYPE_TOP_CV_CHANGE_CATEGORY) (FN_RETURN_TYPE_CV_CHANGE_CATEGORY, VAR_TYPE_CV_CHANGE_CATEGORY) (VOID_PTR_TO_PTR_CHANGE_CATEGORY) (BENIGN_INFINITE_ARRAY_CHANGE_CATEGORY): Adjust the value of these enumerators of the diff_category enum. (class_or_union_diff::{data_members_replaced_by_adms, ordered_data_members_replaced_by_adms}): Declare new member functions. * include/abg-fwd.h (var_decl_wptr): Declare new typedef. (get_next_data_member, get_first_non_anonymous_data_member) (find_data_member_from_anonymous_data_member) (get_absolute_data_member_offset): Declare new functions. * include/abg-ir.h (struct anonymous_dm_hash): Declare new type. (anonymous_data_member_sptr_set_type): Declare new typedef. (class decl_base): Befriend class class_or_union. (class dm_context_rel): Pimpl-ify this class. (dm_context_rel::{g,s}et_anonymous_data_member_types): Declare new member functions. (var_decl::get_anon_dm_reliable_name): Declare new member function. (class var_decl): Make get_absolute_data_member_offset, get_absolute_data_member_offset be friends of this. (class_or_union::maybe_fixup_members_of_anon_data_member): Declare new protected member function. * src/abg-comp-filter.cc (has_data_member_replaced_by_anon_dm): Define new function. (categorize_harmless_diff_node): Use the above. * src/abg-comparison-priv.h (class_or_union_diff::priv::{dms_replaced_by_adms_, changed_var_sptrs_type dms_replaced_by_adms_ordered_}): Add new data members. (data_member_comp::compare_data_members): Factorize this out of ... (data_member_comp::operator()(decl_base_sptr&, decl_base_sptr&)): ... this. (data_member_comp::operator()(changed_var_sptr&, changed_var_sptr&)): Add new member function. (sort_changed_data_members): Declare ... * src/abg-comparison.cc (sort_changed_data_members): ... new function. (get_default_harmless_categories_bitmap): Adjust to take the new abigail::comparison::HARMLESS_DATA_MEMBER_CHANGE_CATEGORY into account. (operator<<(ostream& o, diff_category c)): Likewise. (class_or_union_diff::ensure_lookup_tables_populated): Handle Handle the insertion of anonymous data members to replace existing data members. (class_or_union_diff::{data_members_replaced_by_adms, ordered_data_members_replaced_by_adms}): Define new accessors. (suppression_categorization_visitor::visit_end): Propagate the SUPPRESSION_CATEGORIZATION_VISITOR from changes to the type of the data member if the data member doesn't have real local changes. * src/abg-default-reporter.cc (default_reporter::report): Report about anonymous data members that replace data members. * src/abg-ir.cc (struct dm_context_rel::priv): Define new data structure. (dm_context_rel::{dm_context_rel, get_is_laid_out, set_is_laid_out, get_offset_in_bits, set_offset_in_bits, operator==, operator!=, get_anonymous_data_member, set_anonymous_data_member}): Define the member functions here as they are not inline anymore. (class_or_union::maybe_fixup_members_of_anon_data_member): Define new member function. (class_or_union::add_data_member): Use it. (get_first_non_anonymous_data_member, get_next_data_member) (get_absolute_data_member_offset) (find_data_member_from_anonymous_data_member): Define new functions. * src/abg-reporter-priv.h (maybe_report_data_members_replaced_by_anon_dm): Declare ... * src/abg-reporter-priv.cc (maybe_report_data_members_replaced_by_anon_dm): ... new function. * src/abg-leaf-reporter.cc (leaf_reporter::report): Report data members replaced by anonymous data members. * tests/data/test-diff-filter/test-PR25661-[1-6]-report-[1-4].txt: New test reference outputs. * tests/data/test-diff-filter/test-PR25661-[1-6]-v{0,1}.c: Test source code files. * tests/data/test-diff-filter/test-PR25661-[1-6]-v{0,1}.o: Test binary input files. * tests/data/Makefile.am: Add the new test files above to source distribution. * tests/test-diff-filter.cc (in_out_specs): Add the binary test inputs above to this test harness. * tests/data/test-diff-dwarf/test45-anon-dm-change-report-0.txt: Adjust. 2020-05-07 Dodji Seketeli dwarf-reader: support several anonymous data members in a given class * include/abg-ir.h (class_or_union::find_anonymous_data_member): Declare a new member function. (class_or_union::find_data_member): Declare a new overload. (var_decl::get_anon_dm_reliable_name): Declare new member function. * src/abg-ir.cc (var_decl::get_pretty_representation): Make this work on a var_decl is going to be used to represent an anonymous data member even before the var_decl has been added to its finale scope. This is useful to make class_or_union::find_data_member work on a var_decl that is to be used as an anonymous data member. (var_decl::get_anon_dm_reliable_name): Define new member function. (class_or_union::find_data_member): In the existing overload that takes a string, look for the named data member inside the anonymous data members. Define a new overload that takes a var_decl_sptr, to look for anonymous data members. (class_or_union::find_anonymous_data_member): Define a new member function. (lookup_data_member): Use the existing class_or_union::find_data_member. * src/abg-reader.cc: (build_class_decl): Use the full anonymous variable for lookup, rather than its name which is empty and will thus give false positives. * src/abg-dwarf-reader.cc (add_or_update_class_type): Likewise. * src/abg-comparison.cc (class_or_union_diff::ensure_lookup_tables_populated): Name anonymous data members properly - as opposed to wrongly using their empty name. * src/abg-reporter-priv.cc (represent): In the overload for var_diff_sptr, make sure that changes to the /type/ of a variable declaration are always reported. * tests/data/test-abidiff-exit/test-member-size-report0.txt: Adjust as we now emit more detailed changes about anonymous data members. * tests/data/test-abidiff-exit/test-member-size-report1.txt: Likewise. * tests/data/test-annotate/test-anonymous-members-0.o.abi: Adjust to reflect the fact that a class can now have several anonymous data members. * tests/data/test-diff-dwarf-abixml/PR25409-librte_bus_dpaa.so.20.0.abi: Likewise. * tests/data/test-diff-filter/test30-pr18904-rvalueref-report0.txt: Likewise. * tests/data/test-diff-filter/test30-pr18904-rvalueref-report1.txt: Likewise. * tests/data/test-diff-filter/test35-pr18754-no-added-syms-report-0.txt: Likewise. 2020-05-07 Dodji Seketeli {default,leaf}-reporter: group data members changes reports together * include/abg-comparison.h (class_or_union_diff::{sorted_changed_data_members, count_filtered_changed_data_members, sorted_subtype_changed_data_members, count_filtered_subtype_changed_data_members}): Declare ... * src/abg-comparison.cc (class_or_union_diff::{sorted_changed_data_members, count_filtered_changed_data_members, sorted_subtype_changed_data_members, count_filtered_subtype_changed_data_members}): ... accessors for existing private data members. * src/abg-default-reporter.cc (default_reporter::report): In the class_or_union_diff& overload, group the reporting of the changes to data member sub-types with the replacement of data members. These are just data member changes after all. Use the newly declared accessors for better measure. * src/abg-leaf-reporter.cc (leaf_reporter::report): Likewise. * tests/data/test-diff-dwarf/test45-anon-dm-change-report-0.txt: Adjust. * src/abg-leaf-reporter.cc (leaf_reporter::report): Likewise. * tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-2.txt: Likewise. 2020-05-18 Dodji Seketeli Add -g back to ABIGAIL_DEVEL * configure.ac: Don't forget to set -g when ABIGAIL_DEVEL is set. 2020-05-15 Giuliano Procida clang-format: set continuation indentation to 2 * .clang-format: Set ContinuationIndentWidth to 2. 2020-05-15 Matthias Maennich configure: add more diagnostic options when ABIGAIL_DEVEL is set * configure.ac: add -D_FORTIFY_SOURCE=2 and -D_GLIBCXX_DEBUG compilation defines if ABIGAIL_DEVEL is set. Note that with GCC 4.8.5, -D_FORTIFY_SOURCE=2 requires options to be set. So I am setting the optimization level to -Og. * src/abg-dwarf-reader.cc (read_context::{compute_canonical_die, get_or_compute_canonical_die, associate_die_to_decl, set_canonical_die_offset, schedule_type_for_late_canonicalization, compare_dies}, get_scope_for_die, add_or_update_union_type) (read_debug_info_into_corpus, build_ir_node_from_die): Initialize the 'source' variable. * tests/test-diff-filter.cc (main): Check the return value of the system function. * tests/test-diff-pkg.cc (main): Likewise. * tests/test-read-write.cc (main): Likewise. 2020-05-15 Matthias Maennich configure: add ABIGAIL_DEBUG options * configure.ac: add ABIGAIL_DEBUG environment variable for improved debugging capabilities 2020-05-05 Giuliano Procida Tidy get_pretty_representation qualified_name. * include/abg-ir.h (type_decl::get_pretty_representation) Change default for qualified_name parameter to true. 2020-05-13 Dodji Seketeli Bug 25986 - Wrong name of function type used in change report * src/abg-ir.cc (function_type::get_cached_name): Don't cache names for non-canonicalized types. * tests/data/test-abidiff-exit/test-fun-param-report.txt: Add reference output for new test. * tests/data/test-abidiff-exit/test-fun-param-v{0,1}.abi: Add new test input files. * tests/data/test-abidiff-exit/test-fun-param-v{0,1}.c: Add source files for the above. * tests/data/test-abidiff-exit/test-fun-param-v{0,1}.o: Add binaries for the above. 2020-05-11 Mark Wielaard Don't iterate before the start of a RandomAccessOutputIterator. * include/abg-diff-utils.h (compute_diff): Put brackets around p[ux].[xy]() + 1 calculation. 2020-05-12 Giuliano Procida doc: Fix sufficient suppression property lists. * doc/manuals/libabigail-concepts.rst: Add missing sufficient properties for suppress_file, suppress_function and suppress_variable. Use consistent language about what will happen when no property in the list in provided. 2020-05-11 Matthias Maennich cxx-compat: add test suite for cxx-compat * tests/Makefile.am: Add new test case runtestcxxcompat. * tests/test-cxx-compat.cc: New test source file. Reviewed-by: Giuliano Procida 2020-05-11 Matthias Maennich dwarf-reader: read_context: drop some unused accessor methods * src/abg-dwarf-reader.cc (read_context::fun_syms_sptr): Delete method. (read_context::fun_syms): Likewise. (read_context::var_syms_sptr): Likewise. (read_context::var_syms): Likewise. (read_context::undefined_fun_syms_sptr): Likewise. (read_context::undefined_fun_syms): Likewise. Both overloads. (read_context::undefined_var_syms_sptr): Likewise. (read_context::undefined_var_syms): Likewise. Both overloads. Reviewed-by: Giuliano Procida 2020-05-11 Matthias Maennich tests/.gitignore: ignore all files starting with runtest* * tests/.gitignore: gitignore all files named runtest* Reviewed-by: Giuliano Procida 2020-05-11 Matthias Maennich configure: set -Wno-error-overloaded-virtual for clang builds * configure.ac: set -Wno-error-overloaded-virtual for clang++ 2020-05-05 Giuliano Procida Let std::unordered_map::operator[] insert keys. * src/abg-reader.cc (read_context::key_type_decl): Rely on std::unordered_map::operator[] to create map entries if they are missing. (build_elf_symbol_db): Ditto. 2020-05-05 Giuliano Procida abg-reader.cc: Remove key_replacement_type_map. * src/abg-reader.cc (key_replacement_type_map): Drop unused function. 2020-05-04 Giuliano Procida Refactor read_parameter_spec_from_string logic. * src/abg-suppression.cc (read_parameter_spec_from_string): Use separate string and regex variables to simplify the creation of returned parameter specification. Reviewed-by: Matthias Maennich 2020-05-04 Giuliano Procida Use regex::match wrapper instead of regexec. * src/abg-corpus-priv.h: Mechanically substitute use of regexec with regex::match wrapper. * src/abg-suppression-priv.h: Ditto. * src/abg-suppression.cc: Ditto. Reviewed-by: Matthias Maennich 2020-05-12 Giuliano Procida Tidy checks for sufficient suppression properties. * src/abg-suppression.cc (check_sufficient_props): New helper function to check for sufficient properties in a section. (read_type_suppression): Replace conditional logic with call to check_sufficient_props. (read_function_suppression): Ditto. (read_variable_suppression): Ditto. (read_file_suppression): Ditto. * tests/data/test-diff-suppr/test15-suppr-added-fn-4.suppr: Explain why the suppression will be ignored. * tests/data/test-diff-suppr/test16-suppr-removed-fn-4.suppr: Ditto. * tests/data/test-diff-suppr/test17-suppr-added-var-4.suppr: Ditto. * tests/data/test-diff-suppr/test18-suppr-removed-var-4.suppr: Ditto. 2020-05-12 Dodji Seketeli Bug 25977 - runtestabidiffexit regression on EL7 * abg-comparison.cc: (suppression_categorization_visitor::visit_end): Don't suppress the entire class of equivalence of a function diff node if that function diff node itself was not suppressed. 2020-05-04 Giuliano Procida Use regex::compile wrapper instead of regcomp. * src/abg-corpus-priv.h: Mechanically substitute use of regcomp with regex::compile wrapper. * src/abg-suppression-priv.h: Ditto. There are no behavioural changes. Reviewed-by: Matthias Maennich 2020-05-04 Giuliano Procida Add POSIX regex wrapper functions. * include/abg-regex.h (compile): Declare new function. (match): Declare new function. * src/abg-regex.cc (compile): Add new function wrapping regcomp. (match): Add new function wrapping regexec. Reviewed-by: Matthias Maennich 2020-05-04 Giuliano Procida abg-suppression.cc: More uniform variable naming. * src/abg-suppression.cc (read_type_suppression): Rename "nil" variable to "result" and reset it instead of introducing "suppr" later on. (read_function_suppression): Rename "nil" variable to "result" and reset it instead of introducing "result" later on. Reviewed-by: Matthias Maennich 2020-05-04 Giuliano Procida Escape names used in symbol whitelisting regex. * include/regex.h (escape): New string reference holder class. (operator<<): Declaration of std::ostream, regex::escape overload. * include/regex.cc (operator<<): New std::ostream, regex::escape overload that outputs regex-escaped strings. * src/abg-tools-utils.cc (gen_suppr_spec_from_kernel_abi_whitelists): Make sure any special regex characters in symbol names are escaped. Reviewed-by: Matthias Maennich 2020-05-04 Giuliano Procida Document ^_^ regex in generate_from_strings. * src/abg-regex.cc (generate_from_strings): Document ^_^ regex. 2020-05-04 Giuliano Procida Tidy #includes in a few files. * src/abg-corpus-priv.h: Separate and sort #include directives. * src/abg-corpus.cc: Ditto. * src/abg-regex.cc: Ditto. * src/abg-suppression-priv.h: Ditto. * src/abg-suppression.cc: Ditto. 2020-05-01 Giuliano Procida Hoist some common expressions evaluating offsets. * src/abg-suppression.cc (type_suppression::suppresses_diff): Hoist some constant expressions out of loops. Reviewed-by: Matthias Maennich 2020-05-01 Giuliano Procida Make set_drops_artifact_from_ir non-const. * include/abg-suppression.h (suppression_base::set_drops_artifact_from_ir): Drop const qualifier. * src/abg-suppression.cc (suppression_base::set_drops_artifact_from_ir): Drop const qualifier. Reviewed-by: Matthias Maennich 2020-05-01 Giuliano Procida Eliminate redundant conditional operators. * src/abg-corpus.cc (corpus::priv::build_unreferenced_symbols_tables): Eliminate redundant conditional operator. * src/abg-dwarf-reader.cc (build_reference_type): Ditto. * src/abg-reader.cc (read_static): Ditto. (read_is_artificial): Ditto. (build_function_parameter): Ditto. (build_function_decl): Ditto. (build_qualified_type_decl): Ditto. (build_reference_type_def): Ditto. Reviewed-by: Matthias Maennich 2020-05-01 Giuliano Procida Remove stray semicolons. * include/abg-diff-utils.h (display_edit_script): Remove redundant semicolon. * include/abg-fwd.h (lookup_basic_type): Ditto. * src/abg-comparison.cc (mark_diff_as_visited): Ditto. (array_diff::has_local_changes): Ditto. (class_diff::ensure_lookup_tables_populated): Ditto. * src/abg-corpus.cc (corpus::priv::build_unreferenced_symbols_tables): Ditto. * src/abg-default-reporter.cc (default_reporter::report): Ditto. * src/abg-dwarf-reader.cc (finish_member_function_reading): Ditto. * src/abg-ir.cc (is_compatible_with_class_type): Ditto. (enum_type_decl::enumerator::set_name): Ditto. * src/abg-reader.cc (read_corpus_from_input): Ditto. (build_function_type): Ditto. * src/abg-suppression.cc (type_suppression::suppresses_type): Ditto. Reviewed-by: Matthias Maennich 2020-05-01 Giuliano Procida Remove excess whitespace. * src/abg-suppression.cc: Eliminate double blank lines. (read_parameter_spec_from_string): Eliminate space between ++ operator and its operand. Reviewed-by: Matthias Maennich 2020-01-12 Matthias Maennich corpus/writer: sort emitted translation units by path name * include/abg-fwd.h: remove translation_units fwd declaration. * include/abg-ir.h (struct shared_translation_unit_comparator): Define new class. (translation_units): Define new typedef. * src/abg-corpus.cc (corpus::add): do checked insert into the translation_units set (rather than vector::push_back) * tests/data/test-annotate/test13-pr18894.so.abi: Adjust test data. * tests/data/test-annotate/test14-pr18893.so.abi: Likewise. * tests/data/test-annotate/test15-pr18892.so.abi: Likewise. * tests/data/test-annotate/test17-pr19027.so.abi: Likewise. * tests/data/test-annotate/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: Likewise. * tests/data/test-annotate/test19-pr19023-libtcmalloc_and_profiler.so.abi: Likewise. * tests/data/test-annotate/test20-pr19025-libvtkParallelCore-6.1.so.abi: Likewise. * tests/data/test-annotate/test21-pr19092.so.abi: Likewise. 2020-04-29 Matthias Maennich tests: reorder test execution to optimize 'make check' runtime * tests/Makefile.am(TESTS): split up in expensive and non expensive tests, sort the expensive ones by runime, the cheap ones alphabetically 2020-04-29 Matthias Maennich test-types-stability: parallelize test case alternatives * tests/test-types-stability.cc (test_task): add field no_default_sizes (test_task::perform) Switch on the new flag to test a different behaviour. (main): Schedule an additional test case to test with the new flag. Cc: Mark Wielaard 2020-05-04 Dodji Seketeli Fix compilation with g++ 4.8.5 on el7 * include/abg-libxml-utils.h (build_sptr): Wrap this specialization in the namespace sptr_utils and do away with the sptr_utils qualifier. * include/abg-regex.h (build_sptr): Likewise. 2020-04-24 Giuliano Procida Simplify generation of symbol whitelist regex. * include/abg-regex.h (generate_from_strings): Declare new function to build a regex from some strings, representing a membership test. * src/abg-regex.cc (generate_from_strings): Implement new function to build a regex from some strings, representing a membership test, in a straightfoward fashion. * src/abg-tools-utils.cc (gen_suppr_spec_from_kernel_abi_whitelists): Replace regex-building code with a call to generate_from_strings. * tests/test-kmi-whitelist.cc: Update regexes in test. 2020-04-24 Giuliano Procida Move libxml bits out of abg-sptr-utils.h. * include/abg-sptr-utils.h: Remove reader_sptr and xml_char_sptr typedefs, from namespace sptr_utils. (build_sptr): Remove corresponding template function specialisations for these types. * include/abg-libxml-utils.h: Add reader_sptr and xml_char_sptr typedefs, to namespace xml. (build_sptr): Add corresponding template function specialisations for these types. 2020-04-24 Giuliano Procida Move regex definitions to own files. * include/Makefile.am: Add abg-regex.h. * src/Makefile.am: Remove abg-sptr-utils.h, add abg-regex.cc * include/abg-sptr-utils.h (regex_t_sptr): Remove this typedef, from namespace abigail::sptr_utils. (regex_t_deleter): Remove this struct, from namespace abigail::sptr_utils. (build_sptr): Remove these template specialisations, in duplicate, for regex_t_sptr. * include/abg-regex.h: New file, introduces namespace abigail::regex. (regex_t_sptr): Add this typedef, to namespace abigail::regex. (regex_t_deleter): Add this struct, to namespace abigail::regex. (build_sptr): Add these template specialisations for regex_t_sptr * src/abg-sptr-utils.cc: Remove this file. * src/abg-regex.cc: Add new file with contents effectively the same as abg-sptr-utils.cc. * src/abg-corpus-priv.h: Update regex_t_sptr namespace qualification. * src/abg-corpus.cc: Ditto. * src/abg-suppression-priv.h: Ditto. * src/abg-suppression.cc: Ditto. 2020-04-27 Mark Wielaard Add --no-write-default-sizes option. * doc/manuals/abidw.rst: Document --no-write-default-sizes. * include/abg-writer.h (set_write_default_sizes): New function declaration. (set_common_options): Call set_write_default_sizes. * src/abg-reader.cc (build_function_decl): Get default size. (build_pointer_type_def): Likewise. (build_reference_type_def): Likewise. (build_function_type): Likewise. * src/abg-writer.cc (write_context): Add m_write_default_sizes bool. (get_write_default_sizes): New method. (set_write_default_sizes): Likewise. (write_size_and_alignment): Add default size and alignment parameters. (set_write_default_sizes): New function. (write_type_decl): Set default size and alignment. (write_pointer_type_def): Likewise. (write_reference_type_def): Likewise. (write_function_decl): Likewise. (write_function_type): Likewise. (write_class_decl_opening_tag): Likewise. (write_union_decl_opening_tag): Likewise. * tests/test-types-stability.cc (perform): Also test --abidiff with --no-write-default-sizes. * tools/abidw.cc (option): Add default_sizes bool. (parse_command_line): Parse --no-write-default-sizes. (display_usage): Add doc string for --no-write-default-sizes. 2020-04-26 Mark Wielaard Rename read_elf_symbol_binding to read_elf_symbol_visibility. * src/abg-reader.cc (read_elf_symbol_binding): Renamed to... (read_elf_symbol_visibility): ...this. 2020-04-22 Giuliano Procida abidiff: Omit declaration-only type size 0 diffs. * src/abg-reporter-priv.cc (report_size_and_alignment_changes): Filter out declaration-only / defined type size changes unconditionally. * tests/data/test-abidiff-exit/test-decl-struct-report.txt: Update test. 2020-04-22 Giuliano Procida abidiff: Blank line after declaration-only diff. * src/abg-default-reporter.cc (default_reporter::report): In the class_or_union_diff overload, emit a new line at the end of the declaration-only reporting path. * tests/data/test-abidiff-exit/test-decl-struct-report.txt: Add missing blank lines. 2020-04-22 Giuliano Procida Add tests for declaration-only struct diffs. * tests/data/Makefile.am: Add new test case files. * tests/data/test-abidiff-exit/test-decl-struct-report.txt: New test case generating "declaration-only" output. * tests/data/test-abidiff-exit/test-decl-struct-v0.c: Ditto. * tests/data/test-abidiff-exit/test-decl-struct-v0.o: Ditto. * tests/data/test-abidiff-exit/test-decl-struct-v1.c: Ditto. * tests/data/test-abidiff-exit/test-decl-struct-v1.o: Ditto. * tests/test-abidiff-exit.cc: Run new test case. 2020-04-24 Mark Wielaard Add --no-elf-needed option to drop DT_NEEDED list from corpus. * doc/manuals/abidw.rst: Document --no-elf-needed. * include/abg-writer.h (set_write_elf_needed): New function. (set_common_options): Call it. * src/abg-writer.cc (write_context::m_write_elf_needed): New data member. (write_context::{g,s}et_write_elf_needed): Add new accessors. (set_write_elf_needed): New function. (write_context::write_corpus): Check write_elf_needed. * tools/abidw.cc (options): Add write_elf_needed bool. (display_usage): Describe --no-elf-needed. (parse_command_line): Parse --no-elf-needed. 2020-04-21 Mark Wielaard Add no-parameter-names to drop function parameter names. * doc/manuals/abidw.rst: Add documentation for --no-parameter-names. * include/abg-writer.h (set_write_parameter_names): New function. (set_write_parameter_names): Call it. * src/abg-writer.cc (write_context): Add m_write_parameter_names bool, get_write_parameter_names and set_write_parameter_names functions. (write_context::write_function_decl): Check write_parameter_names. * tools/abidw.cc (options): Add write_parameter_names. (display_usage): Describe --no-parameter-names. (parse_command_line): Parse --no-parameter-names. 2020-04-24 Dodji Seketeli abipkgdiff: Fix race condition while using private types suppr specs * tools/abipkgdiff.cc (compare_args::private_types_suppr{1,2}): Make these data member *not* be a reference anymore. (maybe_create_private_types_suppressions): Rename this into ... (create_private_types_suppressions): ... this. Also, make this function return a copy of the vector of suppression specifications for private types created. (compare_prepared_userspace_packages): Use the new create_private_types_suppressions to create a copy of private types suppression specifications, rather than sharing it from package::private_types_suppressions_. (extract_package_and_map_its_content): Adjust to avoid creating the shared suppression specifications for private types. (package::private_types_suppressions_): Remove this data member that was holding the shared suppressions for private types. (package::private_types_suppressions): Remove these accessors. 2020-04-22 Giuliano Procida test24-soname-suppr*txt: Fix suppression syntax. * tests/data/test-diff-suppr/test24-soname-suppr-0.txt: Fix typo, change "reached_through" to "accessed_through". * tests/data/test-diff-suppr/test24-soname-suppr-1.txt: Ditto. * tests/data/test-diff-suppr/test24-soname-suppr-2.txt: Ditto. * tests/data/test-diff-suppr/test24-soname-suppr-3.txt: Ditto. * tests/data/test-diff-suppr/test24-soname-suppr-4.txt: Ditto. 2020-04-20 Giuliano Procida test35-leaf.suppr: fix regex typo. * tests/data/test-diff-suppr/test35-leaf.suppr: Fix typo in regex, "*." -> ".*". 2020-04-21 Matthias Maennich abg-elf-helpers: migrate maybe_adjust_et_rel_sym_addr_to_abs_addr * src/abg-dwarf-reader.cc (maybe_adjust_et_rel_sym_addr_to_abs_addr) (drop the wrapped overload completely): Move out functions. * src/abg-elf-helpers.cc (maybe_adjust_et_rel_sym_addr_to_abs_addr): New function. * src/abg-elf-helpers.h (maybe_adjust_et_rel_sym_addr_to_abs_addr): New function declaration. Reviewed-by: Giuliano Procida 2020-04-21 Matthias Maennich abg-elf-helpers: migrate more elf helpers (architecture specific helpers) * src/abg-dwarf-reader.cc (elf_architecture_is_ppc64): Move function out and adjust callers to call the migrated functions. (elf_architecture_is_big_endian): Likewise. (architecture_word_size): Likewise. (current_elf_file_is_executable): Likewise. (current_elf_file_is_dso): Likewise. * src/abg-elf-helpers.cc (architecture_is_ppc64): Add new function. (architecture_is_big_endian): Likewise. (get_architecture_word_size): Likewise. (is_executable): Likewise. (is_dso): Likewise. * src/abg-elf-helpers.h (architecture_is_ppc64): Add new declaration. (architecture_is_big_endian): Likewise. (get_architecture_word_size): Likewise. (is_executable): Likewise. (is_dso): Likewise. Reviewed-by: Giuliano Procida 2020-04-21 Matthias Maennich abg-dwarf-reader: migrate more ELF helpers to elf-helpers * src/abg-dwarf-reader.cc (read_context::{opd_section_, ksymtab_section_, ksymtab_reloc_section_, ksymtab_gpl_section_, ksymtab_gpl_reloc_section_, ksymtab_strings_section_}): Make these data members mutable as they are set by their getter member functions, as an implementation detail. (read_context::find_symbol_table_section): adjust to new interface of elf_helpers::find_symbol_table_section. (find_opd_section): use elf_helpers::find_opd_section for lookup. (find_ksymtab_section): use elf_helpers::find_ksymtab_section. (find_ksymtab_gpl_section): use elf_helpers::find_ksymtab_gpl_section. (find_relocation_section): Move out function. (get_binary_load_address): Move out function. (find_ksymtab_reloc_section): use elf_helpers::find_relocation_section (find_ksymtab_gpl_reloc_section): use elf_helpers::find_relocation_section * src/elf-helpers.cc (find_symbol_table_section): change interface to match other find_*_section functions. (find_symbol_table_section_index): Adjust for the new interface of find_symbol_table_section. (find_opd_section): New function. (find_ksymtab_section): New function. (find_ksymtab_gpl_section): New function. (find_relocation_section): New function. (get_binary_load_address): New function. * src/elf-helpers.h (find_symbol_table_section): Change declaration. (find_opd_section): New function declaration. (find_ksymtab_section): New function declaration. (find_ksymtab_gpl_section): New function declaration. (find_relocation_section): New function declaration. (get_binary_load_address): New function declaration. 2020-04-21 Matthias Maennich abg-elf-helpers: consolidate the is_linux_kernel* helpers * src/abg-dwarf-reader.cc (read_context::function_symbol_is_exported): use is_linux_kernel from elf_helpers. (read_context::variable_is_exported): Likewise. (read_context::get_symtab_format): Likewise. (read_context::load_symbol_maps): Likewise. (read_debug_info_into_corpus): Likewise. (read_context::is_linux_kernel_binary): Drop function. (read_context::is_linux_kernel_module): Drop function. * src/abg-elf-helpers.cc (binary_is_linux_kernel): rename to is_linux_kernel (binary_is_linux_kernel_module): rename to is_linux_kernel_module (find_ksymtab_strings_section): Adjust to function renames. * src/abg-elf-helpers.h (binary_is_linux_kernel): rename to is_linux_kernel (binary_is_linux_kernel_module): rename to is_linux_kernel_module Reviewed-by: Giuliano Procida 2020-04-21 Matthias Maennich abg-elf-helpers: move some kernel helpers from abg-dwarf-reader * abg-dwarf-reader.cc (binary_is_linux_kernel): Move function out. (binary_is_linux_kernel_module): Likewise. (find_ksymtab_strings_section): Likewise. * abg-elf-helpers.cc (binary_is_linux_kernel): Move function in. (binary_is_linux_kernel_module): Likewise. (find_ksymtab_strings_section): Likewise. * abg-elf-helpers.h (binary_is_linux_kernel): Add declaration. (binary_is_linux_kernel_module): Likewise. (find_ksymtab_strings_section): Likewise. Reviewed-by: Giuliano Procida 2020-04-21 Matthias Maennich abg-elf-helpers: move some versioning helpers from abg-dwarf-reader * abg-dwarf-reader.cc (get_symbol_versionning_sections): Move function out. (get_version_definition_for_versym): Likewise. (get_version_needed_for_versym): Likewise. (get_version_for_symbol): Likewise. * abg-elf-helpers.cc (get_symbol_versionning_sections): Move function in. (get_version_definition_for_versym): Likewise. (get_version_needed_for_versym): Likewise. (get_version_for_symbol): Likewise. * abg-elf-helpers.h (get_symbol_versionning_sections): Add declaration. (get_version_definition_for_versym): Likewise. (get_version_needed_for_versym): Likewise. (get_version_for_symbol): Likewise. Reviewed-by: Giuliano Procida 2020-04-21 Matthias Maennich abg-elf-helpers: move some elf helpers from abg-dwarf-reader * abg-dwarf-reader.cc (stt_to_elf_symbol_type): Move function out. (stb_to_elf_symbol_binding): Likewise. (stv_to_elf_symbol_visibility): Likewise. (e_machine_to_string): Likewise. (find_section): Likewise. (find_symbol_table_section): Likewise. (find_symbol_table_section_index): Likewise. (enum hash_table_kind): Likewise. (find_hash_table_section_index): Likewise. (get_symbol_versionning_sections): Likewise. (find_text_section): Likewise. (find_bss_section): Likewise. (find_rodata_section): Likewise. (find_data_section): Likewise. (find_data1_section): Likewise. * abg-elf-helpers.cc (stt_to_elf_symbol_type): Move function in. (stb_to_elf_symbol_binding): Likewise. (stv_to_elf_symbol_visibility): Likewise. (e_machine_to_string): Likewise. (find_section): Likewise. (find_symbol_table_section): Likewise. (find_symbol_table_section_index): Likewise. (enum hash_table_kind): Likewise. (find_hash_table_section_index): Likewise. (get_symbol_versionning_sections): Likewise. (find_text_section): Likewise. (find_bss_section): Likewise. (find_rodata_section): Likewise. (find_data_section): Likewise. (find_data1_section): Likewise. * abg-elf-helpers.h (stt_to_elf_symbol_type): Add declaration. (stb_to_elf_symbol_binding): Likewise. (stv_to_elf_symbol_visibility): Likewise. (e_machine_to_string): Likewise. (find_section): Likewise. (find_symbol_table_section): Likewise. (find_symbol_table_section_index): Likewise. (enum hash_table_kind): Likewise. (find_hash_table_section_index): Likewise. (get_symbol_versionning_sections): Likewise. (find_text_section): Likewise. (find_bss_section): Likewise. (find_rodata_section): Likewise. (find_data_section): Likewise. (find_data1_section): Likewise. Reviewed-by: Giuliano Procida 2020-04-21 Matthias Maennich abg-dwarf-reader split: create abg-elf-helpers.{h,cc} and test case * src/Makefile.am: Add new source files abg-elf-helpers.{h,cc}. * src/abg-elf-helpers.cc: New source file. * src/abg-elf-helpers.h: New header file. * tests/.gitignore: Exclude runtestelfhelpers from being committed. * tests/Makefile.am: Add new test case runtestelfhelpers. * tests/test-elf-helpers.cc: New test source file. Reviewed-by: Giuliano Procida 2020-04-20 Matthias Maennich tests: parallelize diff-suppr test * tests/test-diff-suppr.cc(main): parallelize test execution. (test_task) new abigail::workers::task implementation to run test cases in this test as separate worker tasks. 2020-04-20 Matthias Maennich abg-dwarf-reader: simplify symbol map update * src/abg-dwarf-reader.cc (read_context::load_symbol_maps_from_symtab_section): simplify symbol map update for fun_syms_, undefined_fun_syms_, var_syms_, undefined_var_syms_. 2020-04-20 Matthias Maennich make: add distcheck-fast target * Makefile.am: add distcheck-fast make target 2020-04-14 Giuliano Procida Fix variable suppression name_not_regex. * src/abg-suppression-priv.h: In get_symbol_name_not_regex method of variable_suppression::priv, fix typo causing miscompilation of regex. 2020-04-13 Mark Wielaard Add --drop-undefined-syms to abidw. * include/abg-dwarf-reader.h (set_drop_undefined_syms): New declaration. * src/abg-dwarf-reader.cc (class read_context): Add private bool drop_undefined_syms_. (drop_undefined_syms): New getter and setter method. (set_drop_undefined_syms): New function. (function_is_suppressed): Check drop_undefined_syms on read_context. (variable_is_suppressed): Likewise. * src/abg-reader.cc (read_context): Add private bool m_drop_undefined_syms. (drop_undefined_syms): New getter and setter method. * tools/abidw.cc (struct options): Add drop_undefined_syms. (display_usage): Print --drop-undefined-syms. (parse_command_line): Parse --drop-undefined-syms. (main): Call set_drop_undefined_syms. 2020-04-12 Mark Wielaard Add --drop-private-types to abidw. * tools/abidw.cc (options): Add drop_private_types bool. (display_usage): Add --drop-private-types. (parse_command_line): Parse --drop-private-types, set opts. (set_suppressions): Call set_drops_artifact_from_ir when drop_private_types set. * doc/manuals/abidw.rst: Document --drop-private-types. 2020-04-12 Mark Wielaard Add --header-file option to add individual public header files. * include/abg-tools-utils.h (gen_suppr_spec_from_headers): Add hdr_files string vector argument. * src/abg-tools-utils.cc (handle_file_entry): New function that adds one specific file to the type_suppression. Implementation lifted from... (handle_fts_entry): ...here. Call handle_file_entry for each file. (gen_suppr_spec_from_headers): Also takes a header_files string vector as argument. Call handle_file_entry for each file entry. * tools/abidiff.cc (options): Add header_files1 and header_files2 string vectors. (display_usage): Print --header-file1 and --header-file2 usage. (parse_command_line): Handle --header-file1, --hf1 and --header-file2, --hf2. (set_diff_context_from_opts): Call gen_suppr_spec_from_headers with header_files1 and header_files2. (set_suppressions): Likewise. * tools/abidw.cc (options): Add header_files string vector. (display_usage): Print --header-file usage. (parse_command_line): Handle --header-file1, --hf1. (maybe_check_header_files): New function. (set_suppressions): Call gen_suppr_spec_from_headers with header_files. (main): Call maybe_check_header_files. * tools/abilint.cc (options): Add header_files string vector. (display_usage): Print --header-file usage. (parse_command_line): Handle --header-file1, --hf1. (set_suppressions): Call gen_suppr_spec_from_headers with header_files. * doc/manuals/abidiff.rst: Document --header-file1, --hf1 and --header-file2, --hf2. Add new options to documentation of --drop-private-types. * doc/manuals/abidw.rst: Document --header-file, --hf. * doc/manuals/abilint.rst: Likewise. 2020-04-08 Giuliano Procida abidiff: Document and refresh tests. * tests/data/test-abidiff-exit/test-leaf-cxx-members-v1.cc: Comment test. Reorder members of ops to get better coverage. * tests/data/test-abidiff-exit/test-leaf-fun-type-v1.cc: Comment test. * tests/data/test-abidiff-exit/test-leaf-more-v1.cc: Ditto. * tests/data/test-abidiff-exit/test-leaf-peeling-v1.cc: Comment test. Update comment on ops2. * tests/data/test-abidiff-exit/test-leaf-redundant-v1.c: Comment test. * tests/data/test-abidiff-exit/test-leaf-stats-v1.cc: Ditto. * tests/data/test-abidiff-exit/test-leaf-cxx-members-report.txt: Update locations. Update report to reflect deletion, insertion and changed members (was previously changed only).: * tests/data/test-abidiff-exit/test-leaf-peeling-report.txt: Update locations. * tests/data/test-abidiff-exit/test-leaf-redundant-report.txt: Ditto.: * tests/data/test-abidiff-exit/test-leaf-cxx-members-v0.cc: Added one line comment referring to -v1 source file. * tests/data/test-abidiff-exit/test-leaf-fun-type-v0.cc: Ditto. * tests/data/test-abidiff-exit/test-leaf-more-v0.cc: Ditto. * tests/data/test-abidiff-exit/test-leaf-peeling-v0.cc: Ditto. * tests/data/test-abidiff-exit/test-leaf-redundant-v0.c: Ditto. * tests/data/test-abidiff-exit/test-leaf-stats-v0.cc: Ditto. * tests/data/test-abidiff-exit/test-leaf-cxx-members-v0.o: Recompiled. * tests/data/test-abidiff-exit/test-leaf-cxx-members-v1.o: Ditto. * tests/data/test-abidiff-exit/test-leaf-fun-type-v0.o: Ditto. * tests/data/test-abidiff-exit/test-leaf-fun-type-v1.o: Ditto. * tests/data/test-abidiff-exit/test-leaf-more-v0.o: Ditto. * tests/data/test-abidiff-exit/test-leaf-more-v1.o: Ditto. * tests/data/test-abidiff-exit/test-leaf-peeling-v0.o: Ditto. * tests/data/test-abidiff-exit/test-leaf-peeling-v1.o: Ditto. * tests/data/test-abidiff-exit/test-leaf-redundant-v0.o: Ditto. * tests/data/test-abidiff-exit/test-leaf-redundant-v1.o: Ditto. * tests/data/test-abidiff-exit/test-leaf-stats-v0.o: Ditto. * tests/data/test-abidiff-exit/test-leaf-stats-v1.o: Ditto. 2020-04-14 Giuliano Procida abg-reporter-priv.cc: Improve readability of represent helper function. * src/abg-reporter-priv.cc (represent): In the var_diff_sptr overload, rename pretty_representation to o_pretty_representation, introduce n_pretty_representation where needed and replace the duplicate tr1 and tr2 with these; rename all other variables foo1 and foo2 to o_foo and n_foo respectively, using _type instead of _t; introduce o_anon and n_anon and use them to make the local variable is_strict_anonymous_data_member_change const, make ABG_ASSERT in anonymous data member handling more obvious in the case where anonymity has changed and allow simplification of formatting in this case; move declarations of const local variables above those of the non-const, state-tracking, variables. 2020-04-07 Giuliano Procida abg-reporter-priv.cc: Fix anonymous member size change reports. * src/abg-reporter-priv.cc (represent): In the var_diff_sptr overload, factor out some expressions as local variables, rely on diff_to_be_reported to decide whether to emit a change, fold together local/non-local change reporting using local_changes to preserve current name formatting differences, keep track explicitly of whether size information has been emitted and ensure it happens if needed, make offset and size change reporting for anonymous data members more meaningful. * tests/test-abidiff-exit.cc: Run new test cases. * tests/data/Makefile.am: Add new test files. * tests/data/test-abidiff-exit/test-member-size-v0.cc: New test. * tests/data/test-abidiff-exit/test-member-size-v0.o: Ditto. * tests/data/test-abidiff-exit/test-member-size-v1.cc: Ditto. * tests/data/test-abidiff-exit/test-member-size-v1.o: Ditto. * tests/data/test-abidiff-exit/test-member-size-report0.txt: New test, default mode. * tests/data/test-abidiff-exit/test-member-size-report1.txt: New test, --leaf-changes-only mode. * tests/data/test-abidiff-exit/test-leaf-cxx-members-report.txt: Eliminate duplicate reporting of member sizes. * tests/data/test-abidiff-exit/test-leaf-more-report.txt: Ditto. * tests/data/test-abidiff-exit/test-leaf-peeling-report.txt: Ditto. * tests/data/test-abidiff-exit/test-no-stray-comma-report.txt: Ditto. * tests/data/test-diff-dwarf/test45-anon-dm-change-report-0.txt: Add size report for anonymous data member. * tests/data/test-diff-filter/test44-anonymous-data-member-report-0.txt: Ditto. * tests/data/test-diff-pkg/libsigc++-2.0-0c2a_2.4.0-1_amd64--libsigc++-2.0-0v5_2.4.1-1ubuntu2_amd64-report-0.txt: Add missing size change report. * tests/data/test-diff-suppr/test36-leaf-report-0.txt: Remove size change report for previously reported type. * tests/data/test-diff-suppr/test46-PR25128-report-1.txt: Eliminate duplicate reporting of member size change. * tests/data/test-diff-suppr/test46-PR25128-report-2.txt: Ditto. 2020-04-07 Giuliano Procida abidiff: More compact references to prior diffs. * src/abg-reporter-priv.cc (represent): In the var_diff_sptr overload, use consistent punctuation and keep to a single line of output when referring back to an existing type diff report. Remove unnecessary braces around single line conditional blocks. * src/abg-reporter-priv.h: In the macro RETURN_IF_BEING_REPORTED_OR_WAS_REPORTED_EARLIER, use consistent punctuation when referring back to an existing type diff report. * tests/data/test-abidiff/test-PR18791-report0.txt: Adjust formatting of back references to existing type diff reports. * tests/data/test-diff-dwarf/PR25058-liblttng-ctl-report-1.txt: Ditto. * tests/data/test-diff-filter/test16-report-2.txt: Ditto. * tests/data/test-diff-filter/test17-1-report.txt: Ditto. * tests/data/test-diff-filter/test25-cyclic-type-report-1.txt: Ditto. * tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-2.txt: Ditto. * tests/data/test-diff-suppr/test36-leaf-report-0.txt: Ditto. 2020-04-06 Giuliano Procida test-abidiff-exit.cc: Drop redundant --redundant. * tests/test-abidiff-exit.cc: Drop obsolete --redundant flag and comment as --redundant is now implied by --leaf-changes-only. 2020-04-06 Giuliano Procida Rename test-abidiff-exit/test-leaf[0-3] files. * tests/data/Makefile.am: Rename test files. * tests/test-abidiff-exit.cc: Rename test files. * tests/data/test-abidiff-exit/test-leaf-fun-type-report.txt: Renamed from test-leaf2-report.txt. * tests/data/test-abidiff-exit/test-leaf-fun-type-v0.cc: Renamed from test-leaf2-v0.cc. * tests/data/test-abidiff-exit/test-leaf-fun-type-v0.o: Renamed from test-leaf2-v0.o. * tests/data/test-abidiff-exit/test-leaf-fun-type-v1.cc: Renamed from test-leaf2-v1.cc. * tests/data/test-abidiff-exit/test-leaf-fun-type-v1.o: Renamed from test-leaf2-v1.o. * tests/data/test-abidiff-exit/test-leaf-more-report.txt: Renamed from test-leaf1-report.txt. * tests/data/test-abidiff-exit/test-leaf-more-v0.cc: Renamed from test-leaf1-v0.cc. * tests/data/test-abidiff-exit/test-leaf-more-v0.o: Renamed from test-leaf1-v0.o. * tests/data/test-abidiff-exit/test-leaf-more-v1.cc: Renamed from test-leaf1-v1.cc. * tests/data/test-abidiff-exit/test-leaf-more-v1.o: Renamed from test-leaf1-v1.o. * tests/data/test-abidiff-exit/test-leaf-redundant-report.txt: Renamed from test-leaf3-report.txt. * tests/data/test-abidiff-exit/test-leaf-redundant-v0.c: Renamed from test-leaf3-v0.c. * tests/data/test-abidiff-exit/test-leaf-redundant-v0.o: Renamed from test-leaf3-v0.o. * tests/data/test-abidiff-exit/test-leaf-redundant-v1.c: Renamed from test-leaf3-v1.c. * tests/data/test-abidiff-exit/test-leaf-redundant-v1.o: Renamed from test-leaf3-v1.o. * tests/data/test-abidiff-exit/test-leaf-stats-report.txt: Renamed from test-leaf0-report.txt. * tests/data/test-abidiff-exit/test-leaf-stats-v0.cc: Renamed from test-leaf0-v0.cc. * tests/data/test-abidiff-exit/test-leaf-stats-v0.o: Renamed from test-leaf0-v0.o. * tests/data/test-abidiff-exit/test-leaf-stats-v1.cc: Renamed from test-leaf0-v1.cc. * tests/data/test-abidiff-exit/test-leaf-stats-v1.o: Renamed from test-leaf0-v1.o. 2020-04-07 Dodji Seketeli Update the mailing list registration form on the web page * doc/website/mainpage.txt: Use the form at https://sourceware.org/mailman/listinfo/libabigail to register to the mailing list. 2020-03-30 Giuliano Procida abg-dwarf-reader.cc: Avoid division by zero. * src/abg-dwarf-reader.cc (perform_late_type_canonicalizing): If total is zero, don't try to output percentages using it as a divisor. 2020-03-29 Giuliano Procida abidiffpkg: Remove stray test report file. * tests/data/Makefile.am: Removed tests/data/test-diff-pkg/dirpkg-2-report-1.txt. * tests/data/test-diff-pkg/dirpkg-2-report-1.txt: Removed. 2020-03-29 Giuliano Procida test-diff-suppr.cc: Add missing tests. * tests/test-diff-suppr.cc: Add stanzas for test6-fn-suppr-report-4, test16-suppr-removed-fn-report-5 and test22-suppr-removed-var-sym-report-5 and test23-alias-filter-report-4 tests. * tests/data/test-diff-suppr/test6-fn-suppr-report-4.txt: Number parameters from 1 and update expected output to current formatting. * tests/data/test-diff-suppr/test16-suppr-removed-fn-report-5.txt: Update expected output to current formatting. * tests/data/test-diff-suppr/test22-suppr-removed-var-sym-report-5.txt: Update expected output to current formatting. 2020-03-29 Giuliano Procida abidiff: Remove blank line after typedef changes. * include/abg-reporter.h (default_reporter::report_local_typedef_changes): Change return type to void. * src/abg-default-reporter.cc: (default_reporter::report_local_typedef_changes): Change return type to void, remove emit_nl state variable and logic. * tests/data/test-abidiff/test-PR18791-report0.txt: Remove blank lines. * tests/data/test-diff-dwarf/test42-PR21296-clanggcc-report0.txt: Ditto. * tests/data/test-diff-suppr/test39-opaque-type-report-0.txt: Ditto. 2020-03-26 Giuliano Procida Fix size calculations for multidimensional arrays. * include/abg-ir.h (array_type_def::append_subrange): Remove this function. * src/abg-ir.cc (array_type_def::set_element_type): Add a note about safe usage. (array_type_def::append_subrange): Inline this function into its only caller append_subranges and remove it. (array_type_def::append_subranges): Do correct multiplicative calculation of multidimensional array sizes. * src/abg-reader.cc (build_array_type_def): When checking calculated against read array sizes, warn once if value matches old behaviour rather than raising an assertion. Otherwise, before raising an assertion, emit an informative error message. * tests/data/test-annotate/test14-pr18893.so.abi: Correct array sizes. * tests/data/test-annotate/test17-pr19027.so.abi: Ditto. * tests/data/test-annotate/test19-pr19023-libtcmalloc_and_profiler.so.abi: Ditto. * tests/data/test-annotate/test7.so.abi: Ditto. * tests/data/test-diff-dwarf/test10-report.txt: Ditto. * tests/data/test-diff-dwarf/test11-report.txt: Ditto. * tests/data/test-read-write/test25.xml: Ditto. Reviewed-by: Matthias Maennich 2020-03-27 Giuliano Procida abidiff: Remove new lines after parameter diffs. * src/abg-default-reporter.cc: (report_local_function_type_changes): Remove unnecessary blank lines after lists of parameter changes. * tests/data/test-*/test*report*.txt: Remove blank lines after parameter change lists in 12 files. Reviewed-by: Matthias Maennich 2020-03-27 Giuliano Procida abidiff: Eliminate leaf mode double blank lines. * src/abg-leaf-reporter.cc: (report_diffs) Emit 1 instead of 2 new lines between sections. * tests/data/test-abidiff-exit/test-leaf-peeling-report.txt: Replace double blank lines with single ones. * tests/data/test-diff-filter/libtest45-basic-type-change-report-1.txt: Ditto. * tests/data/test-diff-suppr/test36-leaf-report-0.txt: Ditto. * tests/data/test-*/test*report*.txt:: Ditto. Reviewed-by: Matthias Maennich 2020-03-27 Giuliano Procida abidiff: Fix variable declaration formatting. * src/abg-reporter-priv.cc: (represent) In the var_diff_sptr overload, make sure the state variables begin_with_and and emitted are updated consistently; add a TODO for one case which may result in the end of the function being reached without having emitted a report; add missing new lines following reporting of anonymous member changes; only emit a final new line if begin_with_and hasn't tracked one already; document state variables. * tests/data/test-diff-dwarf/test45-anon-dm-change-report-0.txt: Add missing blank line after anonymous member change text. * tests/data/test-diff-filter/test44-anonymous-data-member-report-1.txt: Add missing "and " continuation. Reviewed-by: Matthias Maennich 2020-03-27 Giuliano Procida abidiff: Remove member function diff blank lines. * src/abg-default-reporter.cc (report): In the class_or_union_diff overload, don't emit a new line after each list of member function, member type, template member function and template member class changes. * src/abg-leaf-reporter.cc (report): : In the class_or_union_diff overload, don't emit a new line after each list of member function changes. * tests/data/Makefile.am: Add new test case files. * tests/data/test-abidiff-exit/test-leaf-cxx-members-v0.cc: New test case for --leaf-changes-only member function diffs. * tests/data/test-abidiff-exit/test-leaf-cxx-members-v0.o: Ditto. * tests/data/test-abidiff-exit/test-leaf-cxx-members-v1.cc: Ditto. Also add a TODO regarding a potentially bad diff. * tests/data/test-abidiff-exit/test-leaf-cxx-members-v1.o: Ditto. * tests/data/test-abidiff/test-struct1-report.txt: Remove blank lines after member function changes lists. * tests/data/test-diff-dwarf/test41-PR20476-hidden-report-0.txt: Ditto. * tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-0.txt: Ditto. * tests/test-abidiff-exit.cc: Add new test case. Reviewed-by: Matthias Maennich 2020-03-26 Giuliano Procida abidiff: Fix enum impacted interfaces blank line. * src/abg-default-reporter.cc (report): In the enum_diff overload, don't emit a blank line before a possible "impacted interfaces" stanza. In the class_or_union overload, change a stray conditional to use the emitted state variable for consistency. * tests/data/test*report*.txt: Remove blank lines after enum diffs in 17 files. Reviewed-by: Matthias Maennich 2020-03-26 Giuliano Procida abidiff: Remove blank line after base class diffs. * src/abg-default-reporter.cc (report): In the class_diff overload, eliminate the extra blank line after base class changes and remove unneeded new line logic. * tests/data/test*report*.txt: Remove blank lines after base class diffs in 9 files. Reviewed-by: Matthias Maennich 2020-03-26 Giuliano Procida abidiff: Clean up new lines between sections. * src/abg-default-reporter.cc (report): In the corpus_diff override, add back the extra blank line per changed function but remove the extra one after all changed changed functions and variables; comment these. * src/abg-leaf-reporter.cc (report): In the corpus_diff override, add back the extra blank line per changed function but remove the extra one after all changed changed functions and variables; comment these. * src/abg-reporter-priv.cc (maybe_report_unreachable_type_changes): Remove extra blank line emitted after all unreachable type changes; comment this. * tests/data/test*report*.txt: Remove/add blank lines. Reviewed-by: Matthias Maennich 2020-03-26 Giuliano Procida abg-ir.cc: Add types_have_similar_structure tests. * src/abg-ir.cc (types_have_similar_structure): Update TODO regarding structure of arrays - multidimensional arrays are the issue. * tests/data/test-abidiff-exit/test-leaf-peeling-report.txt: Updated following changes. * tests/data/test-abidiff-exit/test-leaf-peeling-v0.cc: Add more cases (see below). * tests/data/test-abidiff-exit/test-leaf-peeling-v0.o: Updated. * tests/data/test-abidiff-exit/test-leaf-peeling-v1.cc: Add comment about a potential change to local-change semantics; add test cases to demonstrate that * and & and * and *** are structurally different; add a TODO regarding multidimensional arrays where changes are sometimes missed in leaf mode. * tests/data/test-abidiff-exit/test-leaf-peeling-v1.o 2020-03-28 Giuliano Procida abg-reader.cc: Fix code indentation and tabify. * src/abg-reader.cc (build_elf_symbol_db): Fix code indentation. (build_array_type_def): Tabify. 2020-03-26 Dodji Seketeli Update tests/data/test-abidiff-exit/test-leaf-peeling-report.txt * tests/data/test-abidiff-exit/test-leaf-peeling-report.txt: Update output. 2020-03-25 Giuliano Procida abidiff: Remove some more unnecessary blank lines. * src/abg-default-reporter.cc (report) In the class_or_union_diff overload, don't emit a new line after calls to represent. In the union_diff overload, emit a new line after a from/to change; fix indentation. In the corpus_diff overload, don't emit an extra new line after reporting a diff. * src/abg-leaf-reporter.cc (report_diffs) Don't emit a new line after reporting a canonical diff. In the class_or_union_diff overload, don't emit a new line after calls to represent. In the corpus_diff overload, don't emit an extra new line after reporting a diff. * src/abg-reporter-priv.cc (represent): Emit a final new line, but only if needed. (maybe_report_interfaces_impacted_by_diff): Emit a new line after the last impacted interface. * tests/data/test-*/*report*.txt: Remove blank lines (and add a missing one) to 77 test cases. 2020-03-25 Giuliano Procida abg-ir.cc: Improve types_have_similar_structure. * include/abg-fwd.h (types_have_similar_structure): In both overloads, add an indirect_type argument, defaulting to false. * src/abg-ir.cc (reference_type_def constructor): Tabify. (types_have_similar_structure): In both overloads, add an indirect_type argument and update documentation text. In the type_base_sptr overload, pass indirect_type in the tail call. In the type_base* overload, replace was_indirect_type with indirect_type; peel CV qualifiers and typedefs without testing as the peel function does this; replace the indiscriminate peeling of qualifier/pointer/reference/array type components with code that checks the same pointer/reference/array type component is used on each side and makes recursive calls with indirect_type set to true; pass the indirect_type argument recursively when comparing other subtypes; move the typeid check earlier, document its purpose and remove unneccessary checks after later dynamic casts; remove an always-true conditional; add a TODO for comparing array types more accurately. * tests/data/Makefile.am: Add new test case files. * tests/data/test-abidiff-exit/test-leaf-peeling-v0.cc: New test case. * tests/data/test-abidiff-exit/test-leaf-peeling-v1.cc: Ditto. * tests/data/test-abidiff-exit/test-leaf-peeling-report.txt: Ditto. * tests/test-abidiff-exit.cc: Run new test case. 2020-03-19 Giuliano Procida abg-ir.cc: Remove always-true check. * src/abg-ir.cc (types_have_similar_structure): Remove identical nested conditional. (reference_type_def::reference_type_def): Tabify. Reviewed-by: Matthias Maennich 2020-03-19 Giuliano Procida abg-ir.cc: Fix peel_typedef_type(const type_base*). * src/abg-ir.cc (peel_typedef_type): In the const type_base* overload, return the original argument rather than null if the type isn't actually a typedef. 2020-03-18 Giuliano Procida Eliminate redundancy in representation of local change kinds. * include/abg-ir.h (change_kind): Remove redundant LOCAL_CHANGE_KIND member, renumber members and update comments. * src/abg-comparison.cc (distinct_diff::has_local_changes): Remove redundant LOCAL_CHANGE_KIND. (var_diff::has_local_changes * src/abg-ir.cc (equals): In the type_base, qualified_type_def, pointer_type_def, reference_type_def, array_type_def::subrange_type, array_type_def, enum_type_decl, typedef_decl, var_decl, function_type, function_decl, function_decl::parameter, class_or_union, class_decl::base_spec, class_decl, decl_base and scope_decl overloads, remove redundant LOCAL_CHANGE_KIND. (enum_has_non_name_change): Remove redundant LOCAL_CHANGE_KIND. 2020-03-20 Dodji Seketeli dwarf-reader: Fix bloom filter access in GNU_HASH section * src/abg-dwarf-reader.cc (bloom_word_at): Properly read an element from the bloom bitmasks array of 32-bits values as a 64-bits value in a portable way. Always return a 64 bits value. (lookup_symbol_from_gnu_hash_tab): Use a 64-bits value to store the bloom bitmask. * tests/data/test-lookup-syms/test1-32bits.so: New test input, compiled as a 32bits binary to test for ELFCLASS32 binaries. * tests/data/test-lookup-syms/test1.c.compiling.txt: Documentation about how to compile the test1[-21bits].so files. * tests/data/Makefile.am: Add the new test material above to source distribution. * tests/test-lookup-syms.cc (in_out_specs): Add the test1-32bits.so test case to this test harness. 2020-03-18 Giuliano Procida Ensure change_kind enum values are used consistently. * src/abg-comparison.cc (distinct_diff::has_local_changes): Remove unnecessary parentheses around return expression. * src/abg-default-reporter.cc (report): In the reference_diff overload, replace test against LOCAL_CHANGE_KIND with test against ALL_LOCAL_CHANGES_MASK. * src/abg-ir.cc (equals): In the array_type_def and class_decl overloads, add missing LOCAL_TYPE_CHANGE_KIND. In the class_decl overload, also add missing LOCAL_CHANGE_KIND. In the enum_type_decl and function_decl::parameter overloads clarify pairing of LOCAL*CHANGE_KIND bits. (enum_has_non_name_change): Clarify pairing of LOCAL*CHANGE_KIND bits. 2020-03-18 Giuliano Procida dwarf-reader: Use all bits of Bloom filter words. * src/abg-dwarf-reader.cc (lookup_symbol_from_gnu_hash_tab): Don't narrow calculated Bloom word to 8 bits before using it to mask the fetched Bloom word. 2020-03-15 Matthias Maennich dwarf-reader: remove superfluous ABG_ASSERT * src/abg-dwarf-reader.cc (maybe_adjust_et_rel_sym_addr_to_abs_addr): improve NULL check, remove superfluous ABG_ASSERT * tests/data/Makefile.am: Add new test case to the distribution. * tests/test-read-dwarf.cc: Likewise. * tests/data/test-read-dwarf/test27-bogus-binary.elf: New test case. 2020-03-15 Matthias Maennich test-read-dwarf: ensure in_elf_path exists and add missing test files * tests/data/Makefile.am: add missing test case files * tests/test-read-dwarf.cc (test_task::perform): assert the input elf file exists. 2020-03-18 Matthias Maennich configure: add support for memory sanitizer (--enable-msan) * configure.ac: Add configure options for -fsanitize=memory 2020-03-18 Dodji Seketeli abipkgdiff: fix documentation of --impacted-interface * tools/abipkgdiff.cc (display_usage): Use the same help string for the --impacted-interface option as abidiff does. 2020-03-15 Matthias Maennich abidiff: fix documentation of --impacted-interfaces * tools/abidiff.cc(display_usage): Fix doc string for --impacted-interfaces. Reported-by: Saravana Kannan 2020-03-17 Giuliano Procida Tag add/remove/change lines unconditionally with [A], [D], [C]. * src/abg-default-reporter.cc (report): In the corpus_diff override, remove calculations of number of changes (total) and comparisons against arbitrary threshold (large_num); emit [A], [D], [C] tags unconditionally. * src/abg-reporter-priv.cc (maybe_report_unreachable_type_changes): Remove comparisons of number of changes against arbitrary threshold (large_num); emit [A], [D], [C] tags unconditionally; fix quoting of deleted unreachable types; fix indentation of changed unreachable types. * tools/abipkgdiff.cc (compare_prepared_userspace_packages): Emit [D] and [A] tags for removed and added binaries. * tests/data/test-*/*report*.txt: In 109 report files, add tags [A], [D], [C] tags and correct some indentation and quoting. 2020-03-12 Matthias Maennich abg-workers: guard bring_workers_down to avoid dead lock * src/abg-workers.cc(do_bring_workers_down): keep task_todo_mutex locked while writing bring_workers_down, (wait_to_execute_a_task): rewrite the loop condition to ensure safe access to bring_workers_down. 2020-03-12 Matthias Maennich configure: add support for thread sanitizer (--enable-tsan) * configure.ac: Add configure options for -fsanitize=thread 2020-03-13 Matthias Maennich dwarf-reader: gnu_hash_tab lookup: fix overflow in bloom hash calculation * src/abg-dwarf-reader.cc(lookup_symbol_from_gnu_hash_tab): Fix signed integer overflow. 2020-03-12 Giuliano Procida Treat function type changes as local. * src/abg-ir.cc (types_have_similar_structure): Always compare function types (instead of just returning true) regardless of whether they are components of pointer-to-function or reference-to-function types. * tests/data/Makefile.am: Add new test case files. * tests/data/test-abidiff-exit/test-leaf2-report.txt: New test case. * tests/data/test-abidiff-exit/test-leaf2-v0.cc: Ditto. * tests/data/test-abidiff-exit/test-leaf2-v0.o: Ditto. * tests/data/test-abidiff-exit/test-leaf2-v1.cc: Ditto. * tests/data/test-abidiff-exit/test-leaf2-v1.o: Ditto. * tests/test-abidiff-exit.cc: Run new test case. 2020-03-13 Giuliano Procida Output 2-space indentation consistently. * src/abg-default-reporter.cc (report): In the class_or_union_diff override, use 2-space indentation when listing changed members. In the var_diff override, do the same for variable type changes. * src/abg-leaf-reporter.cc: Ditto. * tests/data/test-*/*report*.txt: Update many test cases. 2020-03-16 Giuliano Procida Eliminate some unnecessary blank lines in diff output. * src/abg-default-reporter.cc (report): In the type_decl_diff, enum_diff, array_diff, class_diff, union_diff and var_diff overrides, simplify new line logic which no longer needs to be threaded through report_name_size_and_alignment_changes. In the distinct_diff override, simplify new line logic which no longer needs to be threaded through report_size_and_alignment_changes. In the enum_diff override, emit just one blank line after each enum. In the array_diff override, remove stray location reporting which doesn't appear to ever trigger; fix new line logic. In the class_or_union_diff override, simplify new line logic for deleted members; pass indentation to represent_data_member. * src/abg-leaf-reporter.cc (report): In the array_diff, class_diff, union_diff and var_diff overrides, simplify new line logic which no longer needs to be threaded through report_name_size_and_alignment_changes. In the distinct_diff override, simplify new line logic which no longer needs to be threaded through report_size_and_alignment_changes. In the array_diff override, remove stray location reporting which doesn't appear to ever trigger; fix new line handling. In the class_or_union_diff override, simplify new line logic for deleted members; pass indentation to represent_data_member. In the corpus_diff override, tabify source indentation. * src/abg-reporter-priv.cc (represent_data_member): Handle indentation; fix new line logic. (report_size_and_alignment_changes): Fix new line logic for "type size hasn't changed" message; simplify new line logic and replace local bool n with argument bool nl for clarity. (report_size_and_alignment_changes): Remove bool nl argument and associated code as it had become always false; take responsibility for emitting terminating new lines and change return type to void. (report_name_size_and_alignment_changes): Fix new line logic; remove bool nl argument and associated code as it had become always false; take responsibility for emitting terminating new lines and change return type to void. (maybe_report_interfaces_impacted_by_diff) In both overrides, remove new line prefix code and new_line_prefix argument. * src/abg-reporter-priv.h (represent_data_member): Add indent argument. (report_size_and_alignment_changes) Remove bool nl argument; change return type to void. (report_name_size_and_alignment_changes) Remove bool nl argument; change return type to void. (maybe_report_interfaces_impacted_by_diff) In both overrides, remove new_line_prefix argument. * tests/data/test-*/*report*.txt: Remove some blank lines. 2020-03-12 Giuliano Procida abg-leaf-reporter.cc: Fix indentation of function parameter diffs. * src/abg-leaf-reporter.cc (report): In the fn_parm_diff override, indent the lines of detail by 2 spaces. * tests/data/test-abidiff-exit/test-leaf3-report.txt: Update report with correct indentation. 2020-03-12 Giuliano Procida Fix interaction of --redundant and --leaf-changes-only options. * src/abg-comparison.cc (diff_context::show_leaf_changes_only): Remove "--leaf-changes-only implies --redundant" logic. * tools/abidiff.cc (display_usage): Mention that --leaf-changes-only implies --redundant. (set_diff_context_from_opts): Make --leaf-changes-only imply --redundant; document this behaviour in a comment. * tools/abipkgdiff.cc: Ditto. * tests/data/Makefile.am: Add new test case files. * tests/data/test-abidiff-exit/test-leaf3-report.txt: Add new test case, to show --leaf-changes-only implies --redundant. * tests/data/test-abidiff-exit/test-leaf3-v0.c: Ditto. * tests/data/test-abidiff-exit/test-leaf3-v0.o: Ditto. * tests/data/test-abidiff-exit/test-leaf3-v1.c: Ditto. * tests/data/test-abidiff-exit/test-leaf3-v1.o: Ditto. * tests/test-abidiff-exit.cc: Run new test case. * tests/data/test-diff-pkg/libcdio-0.94-1.fc26.x86_64--libcdio-0.94-2.fc26.x86_64-report.1.txt: Update abipkgdiff report with --redundant output. * tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-1.txt: Ditto. * tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-2.txt: Ditto. 2020-03-13 Giuliano Procida Add more leaf change reporting. * doc/manuals/abidiff.rst: Update the documentation for --leaf-changes-only. * doc/manuals/abipkgdiff.rst: Likewise. * src/abg-comparison.cc (emit_diff_stats): Exclude non-leaf changes to variables from the reported total of leaf changes. * src/abg-default-reporter.cc (report): In the corpus_diff override, move some code and comments for clarity. * src/abg-leaf-reporter.cc (report): In the corpus_diff override, additionally report removed/added/changed variables and removed/added symbols absent from debug info. * tests/data/Makefile.am: Add new test case files. * tests/data/test-abidiff-exit/test-leaf0-report.txt: Update to include reporting of variable diff (change of type). * tests/data/test-abidiff-exit/test-leaf1-report.txt: New test case with added/removed variables/functions and changed variables (both local and non-local type changes). * tests/data/test-abidiff-exit/test-leaf1-v0.cc: Ditto. * tests/data/test-abidiff-exit/test-leaf1-v0.o: Ditto. * tests/data/test-abidiff-exit/test-leaf1-v1.cc: Ditto. * tests/data/test-abidiff-exit/test-leaf1-v1.o: Ditto. * tests/test-abidiff-exit.cc: Run new test case. Supply --redundant otherwise the test isn't meaningful. 2020-03-12 Dodji Seketeli Update fedabipkgdiff tests according to commit b602f46c * tests/data/test-fedabipkgdiff/test0-from-fc20-to-fc23-dbus-glib-report-0.txt: Adjust for useless whitespace removal. * tests/data/test-fedabipkgdiff/test1-from-fc20-to-dbus-glib-0.106-1.fc23.x86_64-report-0.txt: Likewise. * tests/data/test-fedabipkgdiff/test2-dbus-glib-0.100.2-2.fc20--dbus-glib-0.106-1.fc23-report-0.txt: Likewise. * tests/data/test-fedabipkgdiff/test3-dbus-glib-0.100.2-2.fc20.i686--dbus-glib-0.106-1.fc23.i686-report-0.txt: Likewise. * tests/data/test-fedabipkgdiff/test4-glib-0.100.2-2.fc20.x86_64.rpm-glib-0.106-1.fc23.x86_64.rpm-report-0.txt: Likewise. 2020-03-11 Giuliano Procida Fix spurious new lines after diff sections. * src/abg-default-reporter.cc (report): In the corpus_diff overload, just use a local boolean emitted state variable within each section to determine whether or not to follow the section with an extra new line. * src/abg-leaf-reporter.cc: Ditto. * tests/data/test-*/*report*.txt: Remove unwanted new lines from 27 files. 2020-03-10 Giuliano Procida abg-comparison.cc: Remove stray function declaration. * src/abg-comparison.cc (show_relative_offset_changes): Remove this stray function declaration. 2020-03-10 Giuliano Procida abisym: Remove leading space in output. * tools/abisym.cc (main): Remove leading space from output. * tests/data/test-lookup-syms/test0-report.txt: Remove leading space from expected output. * tests/data/test-lookup-syms/test01-report.txt: Ditto. * tests/data/test-lookup-syms/test02-report.txt: Ditto. * tests/data/test-lookup-syms/test1-1-report.txt: Ditto. 2020-03-09 Giuliano Procida Fix the reporting of leaf change statistics. * src/abg-comparison.cc (apply_filters_and_compute_diff_stats): Increment the correct counter for leaf variable changes. * tests/data/Makefile.am: Add new test case files. * tests/data/test-abidiff-exit/test-leaf0-report.txt: New test case. * tests/data/test-abidiff-exit/test-leaf0-v0.cc: Ditto. * tests/data/test-abidiff-exit/test-leaf0-v0.o: Ditto. * tests/data/test-abidiff-exit/test-leaf0-v1.cc: Ditto. * tests/data/test-abidiff-exit/test-leaf0-v1.o: Ditto. * tests/test-abidiff-exit.cc: Run new test case. Reviewed-by: Matthias Maennich 2020-03-05 Giuliano Procida Add space missing between "[C]" tag and description of changed item. * src/abg-default-reporter.cc (report): In the overload for corpus_diff, output space after "[C]". * src/abg-leaf-reporter.cc (report): Likewise. * tests/data/test-*/*report*.txt: Update all the test reports. 2020-03-05 Giuliano Procida Correct various inconsequential typos. * src/abg-leaf-reporter.cc (report): In the class_or_union_diff overoad, swap calls to report_mem_header to match the rest of the code. * src/abg-reporter-priv.cc (represent): In the var_diff_sptr overload, add some missing whitespace; remember we've emitted the pretty representation in 2 cases where this was omitted (though 1 of these is the last case where it makes no difference). maybe_report_diff_for_symbol Add some missing whitespace; remember we've reported a diff (and need a trailing newline) in 1 case where this was omitted, also affecting the return value of the function (but no caller cares). 2020-03-05 Giuliano Procida Correct spelling of "alignment". * src/abg-reporter-priv.cc: s/alignement/alignment/ * tests/data/test-abidiff/test-struct0-report.txt: Ditto.. * tests/data/test-abidiff/test-struct1-report.txt: Ditto. * tests/data/test-abidiff/test-var0-report.txt: Ditto. 2020-02-27 Dodji Seketeli Bump version number to 1.8 * configure.ac: Update version number to 1.8 2020-02-26 Dodji Seketeli Update website for 1.7 * doc/website/mainpage.txt: Update for 1.7 2020-02-25 Dodji Seketeli Update ChangeLog * ChangeLog: Automatically update by running: 'make update-changelog'. 2020-02-25 Dodji Seketeli Update NEWS file for 1.7 * NEWS: update for 1.7 2020-02-25 Dodji Seketeli gen-changelog.py: Update the script for python3 * gen-changelog.py (process_commit): Use the functional notation for the print function invocation required by python3. (output_commits, get_rel_tags, ): Specify that the output stream of the subprocess running the git command is in the text format. 2020-02-26 Dodji Seketeli tools-utils: Drop redefinition of fopen when BAD_FTS is defined * src/abg-tools-utils.cc: Do not remap fopen to fopen64 as we don't use fopen explicitly anymore. 2020-02-21 Dodji Seketeli Update copyright year to 2020 * include/abg-comp-filter.h: Update copyright year to 2020. * include/abg-comparison.h: Likewise. * include/abg-config.h: Likewise. * include/abg-corpus.h: Likewise. * include/abg-cxx-compat.h: Likewise. * include/abg-diff-utils.h: Likewise. * include/abg-dwarf-reader.h: Likewise. * include/abg-fwd.h: Likewise. * include/abg-hash.h: Likewise. * include/abg-ini.h: Likewise. * include/abg-interned-str.h: Likewise. * include/abg-ir.h: Likewise. * include/abg-libxml-utils.h: Likewise. * include/abg-libzip-utils.h: Likewise. * include/abg-reader.h: Likewise. * include/abg-reporter.h: Likewise. * include/abg-sptr-utils.h: Likewise. * include/abg-suppression.h: Likewise. * include/abg-tools-utils.h: Likewise. * include/abg-traverse.h: Likewise. * include/abg-viz-common.h: Likewise. * include/abg-viz-dot.h: Likewise. * include/abg-viz-svg.h: Likewise. * include/abg-workers.h: Likewise. * include/abg-writer.h: Likewise. * src/abg-comp-filter.cc: Likewise. * src/abg-comparison-priv.h: Likewise. * src/abg-comparison.cc: Likewise. * src/abg-config.cc: Likewise. * src/abg-corpus-priv.h: Likewise. * src/abg-corpus.cc: Likewise. * src/abg-default-reporter.cc: Likewise. * src/abg-diff-utils.cc: Likewise. * src/abg-dwarf-reader.cc: Likewise. * src/abg-hash.cc: Likewise. * src/abg-ini.cc: Likewise. * src/abg-internal.h: Likewise. * src/abg-ir-priv.h: Likewise. * src/abg-ir.cc: Likewise. * src/abg-leaf-reporter.cc: Likewise. * src/abg-libxml-utils.cc: Likewise. * src/abg-libzip-utils.cc: Likewise. * src/abg-reader.cc: Likewise. * src/abg-reporter-priv.cc: Likewise. * src/abg-reporter-priv.h: Likewise. * src/abg-sptr-utils.cc: Likewise. * src/abg-suppression-priv.h: Likewise. * src/abg-suppression.cc: Likewise. * src/abg-tools-utils.cc: Likewise. * src/abg-traverse.cc: Likewise. * src/abg-viz-common.cc: Likewise. * src/abg-viz-dot.cc: Likewise. * src/abg-viz-svg.cc: Likewise. * src/abg-workers.cc: Likewise. * src/abg-writer.cc: Likewise. * tests/print-diff-tree.cc: Likewise. * tests/test-abicompat.cc: Likewise. * tests/test-abidiff-exit.cc: Likewise. * tests/test-abidiff.cc: Likewise. * tests/test-alt-dwarf-file.cc: Likewise. * tests/test-core-diff.cc: Likewise. * tests/test-diff-dwarf-abixml.cc: Likewise. * tests/test-diff-dwarf.cc: Likewise. * tests/test-diff-filter.cc: Likewise. * tests/test-diff-pkg.cc: Likewise. * tests/test-diff-suppr.cc: Likewise. * tests/test-diff2.cc: Likewise. * tests/test-dot.cc: Likewise. * tests/test-ini.cc: Likewise. * tests/test-ir-walker.cc: Likewise. * tests/test-lookup-syms.cc: Likewise. * tests/test-read-dwarf.cc: Likewise. * tests/test-read-write.cc: Likewise. * tests/test-svg.cc: Likewise. * tests/test-tools-utils.cc: Likewise. * tests/test-types-stability.cc: Likewise. * tests/test-utils.cc: Likewise. * tests/test-utils.h: Likewise. * tests/test-write-read-archive.cc: Likewise. * tools/abiar.cc: Likewise. * tools/abicompat.cc: Likewise. * tools/abidiff.cc: Likewise. * tools/abidw.cc: Likewise. * tools/abilint.cc: Likewise. * tools/abipkgdiff.cc: Likewise. * tools/abisym.cc: Likewise. * tools/binilint.cc: Likewise. * tools/kmidiff.cc: Likewise. * update-copyright.sh: Fix the updating script to handle not just "Red Hat, Inc." 2020-02-21 Dodji Seketeli abixml-reader: Support SONAME related properties on file suppression * doc/manuals/libabigail-concepts.rst: Update the documentation to mention soname_regexp and soname_not_regexp is supported in the [suppress_file] section. * include/abg-suppression.h (suppression_matches_soname) (suppression_matches_soname_or_filename): Declare new functions. Make them be friends of class suppression_base. * src/abg-reader.cc (read_context::corpus_is_suppressed_by_soname_or_filename): Define new member function. (read_corpus_from_input): Apply file suppression. * src/abg-suppression.cc (read_file_suppression): Support "soname_regexp" and "soname_not_regexp" in the [suppress_file] section. (suppression_matches_soname) (suppression_matches_soname_or_filename): Define new functions. * tests/data/test-diff-suppr/libtest48-soname-abixml-report-{1,2}.txt: New test reference output files. Likewise. * tests/data/test-diff-suppr/libtest48-soname-abixml-suppr.txt: New test suppression file. * tests/data/test-diff-suppr/libtest48-soname-abixml-suppr-{2,3,4}.txt:: Likewise. * tests/data/test-diff-suppr/libtest48-soname-abixml-v{0,1}.so: New test binary input files. * tests/data/test-diff-suppr/libtest48-soname-abixml-v{0,1}.so.abi: New abixml for the binary input files above. * tests/data/test-diff-suppr/test48-soname-abixml-v{0,1}.c: Source code of the binary input files above. * tests/data/Makefile.am: Add the above test material to source distribution. * tests/test-diff-suppr.cc (in_out_specs): Add the test input above to this test harness. 2020-02-21 Dodji Seketeli suppression: Better handle soname/filename properties evaluation * include/abg-suppression.h (suppression_base::has_{soname,file_name}_related_property): Add new member functions. * src/abg-dwarf-reader.cc (read_context::suppression_can_match): Fix the logic to make a difference between the case where the suppression doesn't have any soname/filename property and the case where the suppression does have a soname/filename property that does not match the current binary. * src/abg-reader.cc (read_context::suppression_can_match): Likewise. * src/abg-suppression-priv.h (suppression_base::priv::matches_soname): If the suppression does not have any soname related property then it doesn't match the soname we are looking at. (suppression_base::priv::matches_binary_name): If the suppression does not have any filename related property then it doesn't match the filename we are looking at. * src/abg-suppression.cc (suppression_base::has_{soname,file_name}_related_property): Define new member functions. (sonames_of_binaries_match): If the suppression does not have any soname related property then it doesn't match the corpora of the diff we are looking at. (names_of_binaries_match): If the suppression does not have any filename related property then it doesn't match the corpora of the diff we are looking at. (type_suppression::suppresses_type): Fix the logic to make a difference between the case where the suppression doesn't have any soname/filename property and the case where the suppression does have a soname/filename property that does not match the current binary. (function_suppression::suppresses_{function, function_symbol}): Likewise. (variable_suppression::suppresses_{variable, variable_symbol}): Likewise. (file_suppression::suppresses_file): Likewise. 2020-02-05 Giuliano Procida Fix stray comma in leaf-changes-only mode. * src/abg-reporter-priv.cc (represent): Don't try to follow output of indented pretty representation with a comma, just emit "and" unconditionally; remove unnecessary intermediate ostringstream. * tests/data/Makefile.am: Add new test case files. * tests/data/test-abidiff-exit/test-no-stray-comma-*: New test cases. * tests/data/test-diff-suppr/test46-PR25128-report-?.txt: Replace unindented comma with indented "and". * tests/test-abidiff-exit.cc: Add no-stray-comma test case. Reviewed-by: Matthias Maennich 2020-02-04 Giuliano Procida Sort kernel module object files before processing them. * src/abg-tools-utils.cc (get_binary_paths_from_kernel_dist): Sort module_paths. 2020-02-04 Matthias Maennich abg-workers: Rework the worker queue to improve concurrent behaviour * include/abg-workers.h (workers::task): move entire implementation to header and drop superfluous forward declaration. * src/abg-workers.cc (workers::task):: Likewise. (workers::queue::priv): Drop queue_cond_mutex, rename queue_cond to tasks_todo_cond, add task_done_cond, make default_notify static. (workers::queue::priv::priv): Add default arguments to fully qualified constructor, drop the remaining ones. (workers::queue:prive::more_tasks_to_execute): Drop method. (workers::queue:prive::schedule_task): Do not synchronize access to the queue condition variable, but only on the mutex. (do_bring_workers_down): Likewise. Also await tasks_done to be empty. (workers::queue:prive::worker::wait_to_execute_a_task): Await tasks on the tasks_todo with tasks_todo_(cond|mutex) and signal task completion to tasks_done_cond. 2020-02-03 Matthias Maennich abg-dwarf-reader: zero initialize local Dwarf_Addr values * src/abg-dwarf-reader.cc (read_context::get_first_exported_fn_address_from_DW_AT_ranges): initialize local Dwarf_Addr variables. Reviewed-by: Dodji Seketeli 2020-01-29 Matthias Maennich abg-comparison: prefer .empty() over implicit bool conversion of .size() * src/abg-comparison.cc (corpus_diff::has_changes): prefer !container.empty() over bool(container.size()) [1] https://clang.llvm.org/extra/clang-tidy/checks/readability-container-size-empty.html Reviewed-by: Dodji Seketeli 2020-01-29 Matthias Maennich Fix some parameter name inconsistencies * src/abg-comparison-priv.h (corpus_diff::priv::count_unreachable_types): use consistent parameter naming. * tools/abidiff.cc(main): Likewise. Reviewed-by: Dodji Seketeli 2020-02-03 Giuliano Procida Don't ignore options when diffing translation units (.bi files). * tests/data/Makefile.am: Add test case files. * tests/data/test-abidiff-exit/test-loc-*: New test cases. * tests/test-abidiff-exit.cc (in_out_specs): Add new test cases. * tools/abidiff.cc (main): Use populated ctxt for translation unit diff. 2020-01-29 Giuliano Procida Fix typo in COMPILING. * COMPILING: 2020-01-29 Giuliano Procida Remove redundant mention of libtool in COMPILING documentation. * COMPILING: Remove redundant mention of libtool. 2020-01-26 Matthias Maennich Testing: add Catch Unit test framework * tests/.gitignore: Add entry for .dirstamp * tests/Makefile.am: Add libcatch test library and use it for runtestkmiwhitelist. * tests/lib/catch.cc: New test driver implementation. * tests/lib/catch.hpp: Add Catch v1.12.2 header only test library. * tests/test-kmi-whitelist.cc: Migrate to use Catch test framework. Reviewed-by: Dodji Seketeli 2020-01-25 Matthias Maennich abg-fwd: drop duplicate forward declaration for corpus_sptr * include/abg-fwd.h: drop superfluous forward declaration. 2020-01-25 Matthias Maennich Fix / add include guards * include/abg-dwarf-reader.h: Move include guard to the beginning. * include/abg-reporter-priv.h: Likewise. * include/abg-libxml-utils.h: Add include guard. * include/abg-libzip-utils.h: Likewise. 2020-01-25 Matthias Maennich dwarf-reader: handle binaries with missing symtab * src/abg-dwarf-reader.cc (load_symbol_maps_from_symtab_section): Handle elf file with missing symtab. * tests/test-read-dwarf.cc (InOutSpec): add test case. * tests/data/test-read-dwarf/test26-bogus-binary.elf: new test data. 2020-01-24 Matthias Maennich dwarf-reader: handle symtab.section_header.sh_entsize == 0 * src/abg-dwarf-reader.cc (load_symbol_maps_from_symtab_section): Handle elf file with invalid sh_entsize. * tests/test-read-dwarf.cc (test_task::perform): handle empty in_abi_path and out_abi_path as 'read only' test. (InOutSpec): add test case. * tests/data/test-read-dwarf/test25-bogus-binary.elf: new test data. 2020-01-21 Matthias Maennich clang-format: Better approximation for binary operators and assignments * .clang-format: Add BreakBeforeBinaryOperators option. 2020-01-14 Matthias Maennich KMI Whitelists: Drop old whitelist extraction methods * include/abg-tools-utils.h (gen_suppr_spec_from_kernel_abi_whitelist): Delete declaration. * src/abg-tools-utils.cc (gen_suppr_spec_from_kernel_abi_whitelist): Delete definition and migrate users to gen_suppr_spec_from_kernel_abi_whitelists. * tools/abidiff.cc (set_suppressions): Migrate from using gen_suppr_spec_from_kernel_abi_whitelist to gen_suppr_spec_from_kernel_abi_whitelists. * tools/abidw.cc (set_suppressions): Likewise. * tools/abipkgdiff.cc: Drop unused using definition. * tools/kmidiff.cc: Likewise. Reviewed-by: Dodji Seketeli 2020-01-14 Matthias Maennich KMI Whitelists: Add functionality to make whitelists additive * include/abg-tools-utils.h (gen_suppr_spec_from_kernel_abi_whitelists): New function. * src/abg-tools-utils.cc (gen_suppr_spec_from_kernel_abi_whitelists): Likewise. * tests/.gitignore: Ignore new test executable. * tests/Makefile.am: Add new test executable. * tests/data/test-kmi-whitelist/whitelist-with-another-single-entry: New test input file. * tests/data/test-kmi-whitelist/whitelist-with-duplicate-entry: Likewise. * tests/data/test-kmi-whitelist/whitelist-with-single-entry: Likewise. * tests/data/test-kmi-whitelist/whitelist-with-two-sections: Likewise. * tests/data/Makefile.am: Add above test material. * tests/test-kmi-whitelist.cc: Add new test executable. Reviewed-by: Dodji Seketeli 2020-01-13 Matthias Maennich writer: completely skip over empty corpora * src/abg-writer.cc (write_corpus): completely skip empty corpora rather than creating an empty entry for them. Reviewed-by: Dodji Seketeli 2020-01-13 Matthias Maennich corpus: is_empty: consider actual translation unit contents * src/abg-corpus.cc (corpus::is_empty): consider a list of empty members to be empty. Reviewed-by: Dodji Seketeli 2020-01-13 Matthias Maennich abg-reader: handle empty corpus nodes in xml representation * src/abg-reader.cc (read_corpus_from_input): when assigning a corpus node, assure the node actually has children. * tests/test-abidiff.cc (main): Add test for variants of empty xml nodes to the test harness. * tests/data/test-abidiff/test-empty-corpus-0.xml: Test input containing an empty xml node that closes immediately. * tests/data/test-abidiff/test-empty-corpus-0.xml: Test input containing an empty xml node that closes immediately with a tag. * tests/data/test-abidiff/test-empty-corpus-0.xml: Test input containing an empty xml node that closes with a tag on a new line. * tests/data/test-abidiff/test-empty-corpus-report.txt: Expected test output (empty abidiff) for diffing xml with itself. * tests/data/Makefile.am: Add the new test input material above to source distribution. Reviewed-by: Dodji Seketeli 2020-01-17 Dodji Seketeli Bug 25409 - Fix reading layout-offset-in-bits attribute of data-member * src/abg-reader.cc (read_offset_in_bits): Fix comment. Use stroull rather than atoi. * tests/data/test-diff-dwarf-abixml/PR25409-librte_bus_dpaa.so.20.0: Add new binary test input. * tests/data/test-diff-dwarf-abixml/PR25409-librte_bus_dpaa.so.20.0-report-0.txt: Add new reference output. * tests/data/test-diff-dwarf-abixml/PR25409-librte_bus_dpaa.so.20.0.abi: Add new abixml representation for the binary test input above. * tests/data/Makefile.am: Add the new test material above to source distribution. * tests/test-diff-dwarf-abixml.cc (in_out_specs): Add the test input above to the test harness. 2020-01-13 Matthias Maennich abidiff/kmidiff: do not default-suppress added symbols * tools/abidiff.cc (adjust_diff_context_for_kmidiff): Drop default suppression of added symbols. * tools/kmidiff.cc (set_diff_context): Likewise. * tests/data/test-diff-suppr/test46-PR25128-report-1.txt: Adjust test expectation. * tests/data/test-diff-suppr/test46-PR25128-report-2.txt: Add test case for abidiff with flag --no-added-syms. * tests/data/Makefile.am: add new testcase. Reviewed-by: Dodji Seketeli 2019-12-15 Matthias Maennich Add (undocumented) support for version suffixes * configure.ac: add substitution for VERSION_SUFFIX * include/abg-version.h.in: add define for ABIGAIL_VERSION_SUFFIX * include/abg-config.h(abigail_get_library_version): add support for a version suffix * src/abg-config.cc(abigail_get_library_version): Likewise. * src/abg-tools-utils.cc(get_library_version_string): Likewise. Reviewed-by: Dodji Seketeli 2019-11-13 Matthias Maennich dwarf-reader: relax restriction about relocation sections in try_reading_first_ksymtab_entry * src/abg-dwarf-reader.cc (try_reading_first_ksymtab_entry): remove assertion and update documentation Fixes: 43679a610316 ("dwarf-reader: refactor try_reading_first_ksymtab_entry_using{pre,}_v4_19_format") Reviewed-by: Dodji Seketeli 2019-11-11 Matthias Maennich abg-dwarf-reader: resolve relocation sections by index * src/abg-dwarf-reader.cc (find_relocation_section): New function. (find_ksymtab_reloc_section): Use find_relocation_section to resolve the ksymtab's relocation section. (find_ksymtab_gpl_reloc_section): Likewise. Fixes: e6870326e01a ("Support pre and post v4.19 ksymtabs for Linux kernel modules") Cc: Jessica Yu Cc: Android Kernel Team Reviewed-by: Dodji Seketeli 2019-12-03 Dodji Seketeli Misc typo fixes * src/abg-comparison.cc (leaf_diff_node_marker_visitor::visit_begin): Fix typo in comments. * src/abg-corpus.cc (corpus::get_types_not_reachable_from_public_interfaces): Likewise. * src/abg-ir.cc (decl_base::set_has_anonymous_parent): Likewise. * src/abg-reader.cc (add_read_context_suppressions): Likewise. 2019-11-13 Dodji Seketeli Bug 24690 - Support comparing non-reachable types of a binary * include/abg-comparison.h (string_type_base_sptr_map): Define new typedef. (diff_context::show_unreachable_types): Declare new member functions. (corpus_diff::{deleted_unreachable_types, deleted_unreachable_types_sorted, added_unreachable_types, added_unreachable_types_sorted, changed_unreachable_types, changed_unreachable_types_sorted}): Likewise. (maybe_report_unreachable_type_changes): Declare this function a friend of class corpus_diff. (corpus_diff::diff_stats::{num_added_unreachable_types, num_added_unreachable_types_filtered_out, net_num_added_unreachable_types, num_removed_unreachable_types, num_removed_unreachable_types_filtered_out, net_num_removed_unreachable_types, num_changed_unreachable_types, num_changed_unreachable_types_filtered_out, net_num_changed_unreachable_types}): Likewise. * src/abg-comparison-priv.h (diff_context::priv::show_unreachable_types_): Define new data member. (diff_context::priv::priv): Initialize the new data member. (diff_comp::operator()): Use pretty representation of diff subjects to sort them, rather than just their name. Also, add comment to the other member functions of diff_comp. (corpus_diff::{unreachable_types_edit_script_, deleted_unreachable_types_, deleted_unreachable_types_sorted_, suppressed_deleted_unreachable_types_, added_unreachable_types_, added_unreachable_types_sorted_, suppressed_added_unreachable_types_, changed_unreachable_types_, changed_unreachable_types_sorted_}): Define new data members. (corpus_diff::priv::apply_supprs_to_added_removed_fns_vars_unreachable_types): Changed the name of corpus_diff::priv::apply_suppressions_to_added_removed_fns_vars into this. (corpus_diff::priv::{added_unreachable_type_is_suppressed, deleted_unreachable_type_is_suppressed, changed_unreachable_types_sorted, count_unreachable_types}): Declare new member functions. (corpus_diff::diff_stats::priv::{num_added_unreachable_types, num_added_unreachable_types_filtered_out, num_removed_unreachable_types, num_removed_unreachable_types_filtered_out, num_changed_unreachable_types, num_changed_unreachable_types_filtered_out}): Define new data members. (sort_string_type_base_sptr_map): Declare new function. * src/abg-comparison.cc (sort_string_type_base_sptr_map) (diff_context::show_unreachable_types): Define new functions. (corpus_diff::diff_stats::{num_added_unreachable_types, num_added_unreachable_types_filtered_out, net_num_added_unreachable_types, net_num_removed_unreachable_types, num_removed_unreachable_types_filtered_out, num_removed_unreachable_types}): Define new member functions. (diff_maps::insert_diff_node): Do not update the map "diff -> impacted interfaces" if the current impacted interface is nil. This happens if we are looking at a diff node for a change on a type that is not reachable from any interfaces. (corpus_diff::priv::ensure_lookup_tables_populated): Handle the edit script for unreachable types. (corpus_diff::priv::apply_supprs_to_added_removed_fns_vars_unreachable_types): Rename corpus_diff::priv::apply_suppressions_to_added_removed_fns_vars into this. Apply suppression specifications to added and removed unreachable types as well. (corpus_diff::priv::{added,deleted}_unreachable_type_is_suppressed): Define new member functions. (corpus_diff::priv::{count_unreachable_types, changed_unreachable_types_sorted}): Likewise. (corpus_diff::priv::apply_filters_and_compute_diff_stats): Update statistics (including walking changed unreachable types to apply categorization and redundancy filters to them) related to unreachable types. (corpus_diff::priv::emit_diff_stats): Emit diff stats related to unreachable types. (corpus_diff::priv::maybe_dump_diff_tree): Dump diff tree nodes related to unreachable types. (corpus_diff::{deleted_unreachable_types, deleted_unreachable_types_sorted, added_unreachable_types, added_unreachable_types_sorted, changed_unreachable_types, changed_unreachable_types_sorted): Define new member functions. (corpus_diff::has_changes): Take deleted/added/changed unreachable types into account. (corpus_diff::has_incompatible_changes): Take net removed/changed unreachable types into account. (corpus_diff::has_net_subtype_changes): Take net removed and changed unreachable types into account. (corpus_diff::has_net_changes): Take net removed/added/changed unreachable types into account. (corpus_diff::traverse): When traversing the components of a corpus_diff node, make sure to traverse the changed unreachable types of the corpus. (leaf_diff_node_marker_visitor::visit_begin): Arrange for the fact that the current topmost interface can be nil if we are looking at types not reachable from global functions/variables. Also, make sure that only leaf nodes that are reachable from a global function/variable are recorded as leaf nodes. (compute_diff): In the overload for corpus_sptr, compute the changes between types not reachable from global functions and variables, if the user wishes that we do so. Also, add more comments. (apply_suppressions): Update for the name change of the function apply_suppressions_to_added_removed_fns_vars to apply_supprs_to_added_removed_fns_vars_unreachable_types. * include/abg-corpus.h (corpus::{record_type_as_reachable_from_public_interfaces, type_is_reachable_from_public_interfaces, get_types_not_reachable_from_public_interfaces}): Declare new member functions. (corpus::recording_types_reachable_from_public_interface_supported): Declare new virtual member function. (corpus_group::get_public_types_pretty_representations): Declare new member functons. (corpus_group::recording_types_reachable_from_public_interface_supported): Declare new virtual member function. * src/abg-corpus-priv.h (corpus::priv::{types_not_reachable_from_pub_ifaces_, pub_type_pretty_reprs_}): Define new data members. (corpus::priv::priv): Initialize the pub_type_pretty_reprs_ data member because it's a pointer. (corpus::priv::get_public_types_pretty_representations): Declare new member function. (corpus::priv::~priv): Declare a destructor. * src/abg-corpus.cc (corpus::priv::get_public_types_pretty_representations): Define new member function. (corpus::priv::~priv): Define new destructor to delete the new pub_type_pretty_reprs_ member pointer. (corpus::{record_type_as_reachable_from_public_interfaces, type_is_reachable_from_public_interfaces, get_types_not_reachable_from_public_interfaces, recording_types_reachable_from_public_interface_supported}): Define new member functions (corpus_group::get_public_types_pretty_representations): Likewise. * include/abg-diff-utils.h (struct deep_ptr_eq_functor): Document the equality operator. Also, add an overload to the equality operator, for weak_ptr. The existing equality operator overload was just for shared_ptr. * include/abg-fwd.h (is_user_defined_type): Declare function. * include/abg-ir.h (operator!=(const decl_base_sptr&, const decl_base_sptr&)): Declare new operator. (type_maps::get_types_sorted_by_name): Declare new member function. (decl_base::{g,s}et_is_artificial): Declare new member function. (function_decl::parameter::{g,s}et_artificial): Remove these member functions. * src/abg-ir.cc (operator!=(const decl_base_sptr&, const decl_base_sptr&)): Define new operator. (decl_base::priv::is_artificial_): Define new data member. (type_maps::priv::sorted_types_): Define new data member. (struct type_name_comp): Define new comparison functor to sort types based on their pretty representations. (decl_base::priv::priv): Initialize it. (decl_base::{g,s}et_is_artificial): Define new member functions. (type_maps::get_types_sorted_by_name): Define new member function. (is_user_defined_type): Define new function overloads. (strip_typedef, function_type::{function_type, set_parameters}): Adjust using decl_base::get_is_artificial rather than function_decl::parameter::get_artificial. (function_decl::parameter::priv::artificial_): Remove this data member. (function_decl::parameter::priv::priv): Adjust to the removal of function_decl::parameter::priv::artificial_. This constructor does not take an "is_artificial" flag anymore. (function_decl::parameter::parameter): Adjust to the removal of the is_artificial flag from the arguments of the constructor of function_decl::parameter::parameter::priv. (function_decl::parameter::get_artificial): Remove this member function. * src/abg-reporter-priv.h (maybe_report_unreachable_type_changes): Declare new function. * src/abg-reporter-priv.cc (maybe_report_unreachable_type_changes): Define new function. * src/abg-default-reporter.cc (default_reporter::report): In the overload for corpus_diff&, report added/removed/changed types that are not reachable from global functions and variables using the new function maybe_report_unreachable_type_changes. * src/abg-leaf-reporter.cc (leaf_reporter::report): In the overload for corpus_diff, report changes to types unreachable from global functions or variables, using the new function maybe_report_unreachable_type_changes. * src/abg-dwarf-reader.cc (build_ir_node_from_die): When the user requests that all types be loaded, record relevant types as reachable from global functions and variables. (build_enum_type, add_or_update_class_type) (add_or_update_union_type): Read the 'is-artificial' DWARF attribute and set the corresponding decl_base property accordingly. (finish_member_function_reading, strip_typedef) (function_type::function_type): Adjust using decl_base::get_is_artificial, rather than function_decl::parameter::get_artificial. * include/abg-reader.h (consider_types_not_reachable_from_public_interfaces): Declare new function. * src/abg-reader.cc (read_context::m_tracking_non_reachable_types): Add new data member. (read_context::read_context): Initialize it. (read_context::tracking_non_reachable_types): Define accessors for the new data member above. (read_is_declaration_only): Re-indent. (read_is_artificial): Define new helper function. (build_function_parameter): Use the new read_is_artificial function here, rather than open-coding it. (build_enum_type_decl, build_class_decl, build_union_decl): Support reading the 'is-artificial' property by using the new read_is_artificial function. (read_corpus_from_input): If the user wants us to take non-reachable types into account, then make sure we do so. (read_tracking_non_reachable_types, read_is_non_reachable_type): Define new static functions. (handle_element_node, build_type): Read the "is-non-reachable" attribute on type element nodes if the user wants us to track non-reachable types. (consider_types_not_reachable_from_public_interfaces): Define new function. * src/abg-writer.cc (write_is_artificial): Define new static helper function. (annotate): Adjust using decl_base::get_is_artificial rather than function_decl::parameter::get_artificial. (write_enum_type_decl, write_class_decl_opening_tag) (write_union_decl_opening_tag): Support writing the "is-artificial" property, using the new write_is_artificial function. (write_function_type): Adjust this to use the new write_is_artificial rather than open-coding writing the 'is-artificial' attribute. (write_is_non_reachable) (write_tracking_non_reachable_types): Define new static functions. (write_enum_type_decl, write_class_decl_opening_tag) (write_union_decl_opening_tag): Write the 'is-no-reachable' attribute when applicable. (write_corpus, write_corpus_group): Write the 'tracking-non-reachable-types' attribute when applicable. * tools/abidiff.cc (options::options): Initialize ... (options::show_all_types): ... new data member. (display_usage): Add help string from the new --non-reachable-types option. (parse_command_line): Parse the new --non-reachable-types option. (set_diff_context_from_opts): Set the dwarf_reader::read_context::show_unreachable_types property. (set_native_xml_reader_options): Define new static function. (main): Load all types when analyzing the DWARF or the ABIXML files, if the user wants us to do so. * tools/abipkgdiff.cc (options::show_all_types): Define new data member. (options::options): Initialize it. (parse_command_line): Parse the --non-reachable-types option to set the options::show_all_types data member. (display_usage): Add a help string for the new --non-reachable-types option. (set_diff_context_from_opts): Set the dwarf_reader::read_context::show_unreachable_types property based on the options::show_all_type data member. (compare): Configure the read context to load all types while analyzing the DWARF info, depending on the options::show_all_type data member. * doc/manuals/abidiff.rst: Document the new --non-reachable-types option added to abidiff above. * doc/manuals/abipkgdiff.rst: Add documentation for the --non-reachable-types option. * tests/data/test-diff-suppr/test47-non-reachable-types-v{0,1}.c: Source code files of test binary input. * tests/data/test-diff-suppr/test47-non-reachable-types-suppr-{1,2,3,4,5}.txt: New test input files. * tests/data/test-diff-suppr/test47-non-reachable-types-report-{1,2,3,4,5,6,7,8,9,10}.txt: New test reference output files. * tests/data/test-diff-suppr/test47-non-reachable-types-v{0,1}.o.alltypes.abixml: New test input abixml. * tests/data/Makefile.am: Add the new test material to source distribution. * tests/test-diff-suppr.cc (in_out_specs): Add the new tests above to this test harness. * tests/data/test-abidiff/test-struct1-report.txt: Adjust. * tests/data/test-diff-pkg/PR24690/flatpak-debuginfo-1.2.4-3.fc30.x86_64.rpm: New input binary RPM. * tests/data/test-diff-pkg/PR24690/flatpak-debuginfo-1.4.0-1.fc30.x86_64.rpm: Likewise. * tests/data/test-diff-pkg/PR24690/flatpak-devel-1.2.4-3.fc30.x86_64.rpm: Likewise. * tests/data/test-diff-pkg/PR24690/flatpak-devel-1.4.0-1.fc30.x86_64.rpm: Likewise. * tests/data/test-diff-pkg/PR24690/flatpak-libs-1.2.4-3.fc30.x86_64.rpm: Likewise. * tests/data/test-diff-pkg/PR24690/flatpak-libs-1.4.0-1.fc30.x86_64.rpm: Likewise. * tests/data/test-diff-pkg/PR24690/flatpak-libs-debuginfo-1.2.4-3.fc30.x86_64.rpm: Likewise. * tests/data/test-diff-pkg/PR24690/flatpak-libs-debuginfo-1.4.0-1.fc30.x86_64.rpm: Likewise. * tests/data/test-diff-pkg/PR24690/PR24690-report-0.txt: New test reference output. * tests/data/Makefile.am: Add the new test material above to source distribution. * tests/test-diff-pkg.cc (in_out_specs): Add the new test material above to this test harness. 2019-11-26 Dodji Seketeli Small style fix in abg-default-reporter.cc * src/abg-default-reporter.cc (default_reporter::report): In the overload for corpus_diff, break a line longer than 80 characters. 2019-10-21 Matthias Maennich dwarf-reader: add support for symbol namespaces in ksymtab entries * src/abg-dwarf-reader.cc (read_context::try_reading_first_ksymtab_entry): Add symbol_offset parameter. (read_context::get_ksymtab_entry_size): Add support for variable size ksymtab entries due to symbol namespaces. (load_kernel_symbol_table): only load nb_entries when needed [1] https://lore.kernel.org/lkml/20190906103235.197072-1-maennich@google.com/ 2019-10-21 Matthias Maennich dwarf-reader: refactor try_reading_first_ksymtab_entry_using{pre,}_v4_19_format * src/abg-dwarf-reader.cc(try_reading_first_ksymtab_entry): New function to consolidate functionality for try_reading_first_ksymtab_entry_using_{pre,}v4_19_format functions. (try_reading_first_ksymtab_entry_using_v4_19_format, try_reading_first_ksymtab_entry_using_pre_v4_19_format): refactor to use try_reading_first_ksymtab_entry 2019-10-28 Dodji Seketeli Bug 25128 - Handle decl-only classes that differ only in size * include/abg-comp-filter.h (is_decl_only_class_with_size_change): Declare an overload. * include/abg-fwd.h (look_through_decl_only_class): Declare an overload. * src/abg-comp-filter.cc (is_decl_only_class_with_size_change): Define an overload that takes class_or_union& type. Re-write the previous overload in terms of this new one. * src/abg-ir.cc (look_through_decl_only_class): Define a new overload that takes a class_or_union&. Rewrite the previous overload in terms of this one. (equals): In the overload for class_or_union&, use is_decl_only_class_with_size_change to detect cases of decl-only classes that differ only by their size attribute and avoid comparing them. * tests/data/test-annotate/test21-pr19092.so.abi: Adjust. * tests/data/test-read-dwarf/test21-pr19092.so.abi: Likewise. * tests/data/test-diff-filter/test41-report-0.txt: Likewise. 2019-10-24 Dodji Seketeli Bug 25128 - Leaf diff reporter shouldn't compare decl-only classes * include/abg-comp-filter.h (is_decl_only_class_with_size_change): Declare new function. * src/abg-comp-filter.cc (is_decl_only_class_with_size_change): Define new function. * src/abg-comparison.cc (leaf_diff_node_marker_visitor::visit_begin): Use the newly defined is_decl_only_class_with_size_change above to ignore bogus decl-only classes with a size change. * tests/data/test-diff-suppr/test45-abi-report-1.txt: New test input. * tests/data/test-diff-suppr/test45-abi-wl.xml: Likewise. * tests/data/test-diff-suppr/test45-abi.xml: Likewise. * tests/data/test-diff-suppr/test45-abi.suppr.txt: New reference output for the test input above. * tests/data/test-diff-suppr/test46-PR25128-base.xml: New test input. * tests/data/test-diff-suppr/test46-PR25128-new.xml: Likewise. * tests/data/test-diff-suppr/test46-PR25128-report-1.txt: New reference input for the test input above. * tests/data/Makefile.am: Add the new test material to source distribution. * tests/test-diff-suppr.cc (in_out_spec): Add the new test input above to this test harness. 2019-10-18 Dodji Seketeli Bug 25095 - Apply symbol white lists to ELF symbols * src/abg-tools-utils.cc (gen_suppr_spec_from_kernel_abi_whitelist): Generate a suppression specification which considers the name of the symbol associated to a function/variable, rather than just the name of said function/variable. 2019-10-18 Dodji Seketeli Support symbol_name_not_regexp in [suppress_{function, variable}] * doc/manuals/libabigail-concepts.rst: Document the new symbol_name_not_regexp properties for the suppress_{function,variable} directives. * include/abg-suppression.h ({function,variable}_suppression::{g,s}et_symbol_name_not_regex_str): Declare new member functions. * src/abg-dwarf-reader.cc (read_context::is_elf_symbol_suppressed): Define new member functions. (read_context::{load_symbol_maps_from_symtab_section, populate_symbol_map_from_ksymtab, populate_symbol_map_from_ksymtab_reloc}): Drop suppressed symbols when reading symbol tables. ({function,variable}_is_suppressed): Consider that in C, the linkage name is _by default_ the same as the function/variable name. Remove local variable. * include/abg-ir.h (elf_symbol_is_{function,variable}): Add ... * src/abg-ir.cc (elf_symbol_is_{function,variable}): ... new functions. * src/abg-reader.cc (build_elf_symbol): Take an additional boolean to detect and drop suppressed symbols. (build_elf_symbol_db): Adjust the call to build_elf_symbol to make it detect and drop suppressed symbols. (read_corpus_from_input): Be mindful that the set of symbols for a given corpus can be empty because of suppression specifications. * src/abg-suppression-priv.h ({function,variable}_suppression::priv::symbol_name_not_regex[_str_]): Add new data members. (function,variable}_suppression::priv::get_symbol_name_not_regex): Add new member functions. ({function,variable}_is_suppressed): Guard against empty name. (is_elf_symbol_suppressed): Define new function template. * src/abg-suppression.cc ({function,variable}_suppression::{g,s}et_symbol_name_not_regex_str): Define new member functions. ({function,variable}_suppression::suppresses_function) (suppression_matches_{function,variable}_sym_name) (read_{function,variable}_suppression): Support the new "symbol_name_not_regex" property. * tests/data/test-diff-suppr/test44-suppr-sym-name-not-regexp-report-1.txt: New test reference report. * tests/data/test-diff-suppr/test44-suppr-sym-name-not-regexp-report-2.txt: Likewise. * tests/data/test-diff-suppr/test44-suppr-sym-name-not-regexp-v{0,1}.c: Sources of the new test input. * tests/data/test-diff-suppr/test44-suppr-sym-name-not-regexp-v{0,1}.o: New test input binaries. * tests/data/test-diff-suppr/test44-suppr-sym-name-not-regexp-v{0,1}.o.abi: New test input abixml files. * tests/data/test-diff-suppr/test44-suppr-sym-name-not-regexp.suppr.txt: Next test suppression specification. * tests/data/Makefile.am: Add the new test material above to source distribution. * tests/test-diff-suppr.cc (in_out_specs): Add the input tests above to the test harness. 2019-10-24 Dodji Seketeli [abg-comparison.cc] Fix comments typo * src/abg-comparison.cc (leaf_diff_node_marker_visitor::visit_begin): Fix typo in comment. 2019-10-04 Matthias Maennich kmidiff: fix help message * tools/kmidiff.c (display_usage): add missing line breaks to help text 2019-10-04 Matthias Maennich dwarf-reader: read_corpus_from_elf: unconditionally load elf properties * src/abg-dwarf-reader.cc (read_corpus_from_elf): unconditionally load elf properties into context 2019-10-04 Dodji Seketeli PR25058 - Better support fn DIEs referring to symbols using DW_AT_ranges * src/abg-dwarf-reader.cc (read_context::get_first_exported_fn_address_from_DW_AT_ranges): Rename read_context::get_first_address_from_DW_AT_ranges into this. Walk through the addresses referred to by the DW_AT_ranges attribute until we find one that is for an exported function symbol, rather than just picking the first address of the set. (read_context::get_function_address): Adjust. 2019-10-03 Dodji Seketeli PR25058 - Support decl DIEs referring to symbols using DW_AT_ranges * src/abg-dwarf-reader.cc (read_context::get_first_address_from_DW_AT_ranges): Define new member function. (read_context::get_function_address): Use the new read_context::get_first_address_from_DW_AT_ranges here. * tests/data/test-diff-dwarf/PR25058-liblttng-ctl-report-1.txt: New reference test output. * tests/data/test-diff-dwarf/PR25058-liblttng-ctl.so: New test input binary. * tests/data/test-diff-dwarf/PR25058-liblttng-ctl2.10.so: New test input binary. * tests/data/Makefile.am: Add the new test materials above to source distribution. * tests/test-diff-dwarf.cc (in_out_specs): Add the new input test input binary files to this test harness. 2019-10-01 Dodji Seketeli Fix thinkos in DW_FORM_strx detection in configure.ac * configure.ac: Fix thinko when setting the HAVE_DW_FORM_strx macro. 2019-10-01 Dodji Seketeli Fix a typo in a comment of abg-dwar-reader.cc * src/abg-dwarf-reader.cc (compare_dies_string_attribute_value): Fix a typo in the comment of this function. 2019-09-30 Dodji Seketeli PR25042 - Support string form DW_FORM_strx{1,4} from DWARF 5 * configure.ac: Detect the presence of the DW_FORM_strx{1,4} enumerators. * src/abg-dwarf-reader.cc (form_is_DW_FORM_strx): Define new function. (compare_dies_string_attribute_value): Use the new form_is_DW_FORM_strx here. * tests/data/Makefile.am: Add the new test input files below to source distribution. * tests/data/test-read-dwarf/PR25042-libgdbm-clang-dwarf5.so.6.0.0: New binary test input file. * tests/data/test-read-dwarf/PR25042-libgdbm-clang-dwarf5.so.6.0.0.abi: Reference output of the new binary test input file. * tests/test-read-dwarf.cc (in_out_specs): Add the input test files above to the test harness, for platforms that support the DW_FORM_strx form. 2019-09-04 Dodji Seketeli Support the "name_not_regexp" property in the [suppress_type] section * doc/manuals/libabigail-concepts.rst: Update this to document the new name_not_regexp property of the suppress_type directive. * include/abg-suppression.h (type_suppression::{g,s}et_type_name_not_regex_str): Declare new accessors. * src/abg-suppression-priv.h (type_suppression::priv::{type_name_not_regex_str_, type_name_not_regex_}): Define new data members. (type_suppression::priv::{get_type_name_not_regex, set_type_name_not_regex, get_type_name_not_regex_str, set_type_name_not_regex_str}): Define new member functions. * src/abg-suppression.cc (type_suppression::get_type_name_regex_str): Fix comments. (type_suppression::{set_type_name_not_regex_str, get_type_name_not_regex_str}): Define new data members. (suppression_matches_type_name): Adapt to support the new type_name_not_regex property. (read_type_suppression): Support parsing the type_name_not_regexp property. * tests/data/test-diff-suppr/test42-negative-suppr-type-report-0.txt: New test reference output. * tests/data/test-diff-suppr/test42-negative-suppr-type-report-1.txt: Likewise. * tests/data/test-diff-suppr/test42-negative-suppr-type-suppr-1.txt: New test input. * tests/data/test-diff-suppr/test42-negative-suppr-type-suppr-2.txt: Likewise. * tests/data/test-diff-suppr/test42-negative-suppr-type-v0.{cc, o}: Likewise. * tests/data/test-diff-suppr/test42-negative-suppr-type-v1.{cc, o}: Likewise. * tests/data/Makefile.am: Add the test files above to source distribution. * tests/test-diff-suppr.cc (int_out_specs): Add the new tests to the harness. 2019-09-04 Dodji Seketeli Better propagation of suppressed-ness to function types * src/abg-comparison.cc (suppression_categorization_visitor::visit_end): Propagate suppression-ness from suppressed function type diff node to its parent function node if the latter doesn't have any local non-type change. * tests/data/test-diff-suppr/test43-suppr-direct-fn-subtype-report-1.txt: New test reference output. * tests/data/test-diff-suppr/test43-suppr-direct-fn-subtype-suppr-1.txt: New test input suppression file. * tests/data/test-diff-suppr/test43-suppr-direct-fn-subtype-v{0,1}.cc: Source code of input binary file. * tests/data/test-diff-suppr/test43-suppr-direct-fn-subtype-v{0,1}.o: Input binary files. * tests/data/Makefile.am: Add the new test input files above to source distribution. * tests/test-diff-suppr.cc (in_out_specs): Add the test input to test harness. 2019-09-04 Dodji Seketeli [has_type_change] Better detect type size changes * src/abg-comp-filter.cc (has_type_change): Support function parameters. 2019-09-23 Dodji Seketeli Fix reading of relocation sections when endianness mismatches * src/abg-dwarf-reader.cc (read_context::{get_ksymtab_format_module, populate_symbol_map_from_ksymtab_reloc}): Use elf_getdata rather than elf_rawdata. 2019-09-20 Dodji Seketeli Guard testing v4.19+ AARCH64 kernel module loading for EL6 support * tests/test-read-dwarf.cc: Do not run the test on PR25007-sdhci.ko if the macros R_AARCH64_PREL32 and R_AARCH64_ABS64 are not defined. 2019-09-19 Dodji Seketeli Remove the elf_symbol::get_value property * include/abg-ir.h (elf_symbol::{elf_symbol, create}): Remove the 'val' parameter. * src/abg-dwarf-reader.cc (elf_symbol::get_value): Remove this member function declaration. (lookup_symbol_from_sysv_hash_tab) (lookup_symbol_from_gnu_hash_tab, lookup_symbol_from_symtab) (create_default_var_sym, create_default_fn_sym) (read_context::lookup_elf_symbol_from_index): Adjust calls to creating elf_symbol instances. * src/abg-ir.cc (elf_symbol::priv::value_): Remove this data member. (elf_symbol::{priv::priv, elf_symbol, create): Adjust. * src/abg-reader.cc (build_elf_symbol): Likewise. 2019-09-19 Dodji Seketeli Bug 25007 - Don't use section-relative symbol values on ET_REL binaries * src/abg-dwarf-reader.cc (read_context::{lookup_native_elf_symbol_from_index, maybe_adjust_et_rel_sym_addr_to_abs_addr}): Define new member functions. (read_context::lookup_elf_symbol_from_index): Add a new overload. Write the old overloads in terms of the new one. (read_context::{load_symbol_maps_from_symtab_section, populate_symbol_map_from_ksymtab_reloc}): Use the new maybe_adjust_et_rel_sym_addr_to_abs_addr function to translate the symbol value/address into a binary-relative address before adding it to the addr->sym maps. (read_context::maybe_adjust_{fn, var}_sym_address): Do not adjust DWARF-referred-to addresses of ET_REL symbols anymore. * tests/data/test-read-dwarf/PR25007-sdhci.ko: New binary test input. * tests/data/test-read-dwarf/PR25007-sdhci.ko.abi: ABI representation of the above. * tests/test-read-dwarf.cc: Add the new test input to the harness. * tests/data/test-diff-dwarf/test28-vtable-changes-report-0.txt: Adjust. * tests/data/test-diff-filter/test20-inline-report-0.txt: Likewise. * tests/data/test-diff-filter/test20-inline-report-1.txt: Likewise. * tests/data/test-diff-filter/test41-report-0.txt: Likewise. * tests/data/test-diff-filter/test9-report.txt: Likewise. 2019-09-18 Dodji Seketeli Detect the presence of R_AARCH64_{ABS64, PREL32} macros * configure.ac: Define macros HAVE_R_AARCH64_{ABS64, PREL32}_MACRO if the macros R_AARCH64_{ABS64, PREL32} are present. * src/abg-dwarf-reader.cc (read_context::get_ksymtab_format_module): Conditionalize the use of R_AARCH64_{ABS64, PREL32} using HAVE_R_AARCH64_{ABS64, PREL32}_MACRO. 2019-09-03 Jessica Yu Support pre and post v4.19 ksymtabs for Linux kernel modules * include/abg-ir.h (elf_symbol::{elf_symbol, create}): Take new symbol value and shndx parameters. (elf_symbol::{get_value, get_shndx}): Declare new accessors. * src/abg-ir.cc (elf_symbol::priv::{value_, shndx_}): New data members. (elf_symbol::priv::priv): Adjust. (elf_symbol::elf_symbol): Take new value and is_linux_string_cst parameters. (elf_symbol::create): Likewise. (elf_symbol::{get_value, get_is_linux_string_cst}): Define new accessors. * src/abg-reader.cc (build_elf_symbol): Adjust. * src/abg-dwarf-reader.cc (binary_is_linux_kernel) (binary_is_linux_kernel): New static functions. (lookup_symbol_from_sysv_hash_tab) (lookup_symbol_from_gnu_hash_tab) (lookup_symbol_from_symtab): Adjust. (read_context::{ksymtab_reloc_section_, ksymtab_gpl_reloc_section_, ksymtab_strings_section_}): New data members. (read_context::read_context): Initialize ksymtab_reloc_section_, ksymtab_gpl_reloc_section_, ksymtab_strings_section_. (read_context::{find_ksymtab_reloc_section, find_ksymtab_gpl_reloc_section, find_ksymtab_strings_section, find_any_ksymtab_reloc_section, get_ksymtab_format_module, populate_symbol_map_from_ksymtab, populate_symbol_map_from_ksymtab_reloc, is_linux_kernel_module}): New member functions. (read_context::load_kernel_symbol_table): Adjust to call either populate_symbol_map_from_ksymtab{_reloc,} depending on ksymtab format. (read_context::get_ksymtab_format): Adjust to call get_ksymtab_format_module for linux kernel modules. (read_context::lookup_elf_symbol_from_index): Adjust. (create_default_var_sym, create_default_fn_sym): Adjust. 2019-08-02 Dodji Seketeli Serialize canonical types to avoid testing if types have been emitted * include/abg-fwd.h (is_decl_slow) (peel_pointer_or_reference_type): Declare new functions. * include/abg-ir.h (struct canonical_type_hash): Define new type. (type_base_ptr_set_type, type_base_ptrs_type) (type_base_sptrs_type, canonical_type_sptr_set_type): Define new typedefs. (environment::get_canonical_types_map): Declare new member function. (scope_decl::{get_canonical_types, get_sorted_canonical_types}): Declare new member functions. * src/abg-ir.cc (is_ptr_ref_or_qual_type) (peel_pointer_or_reference_type, is_decl_slow): Define new functions. (environment::{get_canonical_types_map}): Define new member functions. (canonical_type_hash::operator()): Likewise. (scope_decl::{get_canonical_types, get_sorted_canonical_types}): Likewise. (struct type_topo_comp): Define new comparison functor type. (environment::{sorted_canonical_types_}): Define new data member. (scope_decl::priv::{canonical_types_, sorted_canonical_types_}): Likewise. (scope_decl::is_empty): Take the presence of canonical types into account when determining if a scope is empty or not. (is_decl): Make this work for cases where the artifact at hand is a type which has a declaration, as opposed to being a pure declaration like a variable or a function. (canonicalize): Add the canonical type the list of canonical types of its scope. * src/abg-dwarf-reader.cc (read_context::die_is_in_cplus_plus): Define new member function. * src/abg-writer.cc (write_type, write_canonical_types_of_scope): Define new static functions. (fn_type_ptr_set_type): Define new typedef. (write_context::{m_referenced_fn_types_set, m_referenced_non_canonical_types_set}): Add new data members. (write_context::m_referenced_types_set): Renamed m_referenced_types_map into this. (write_context::get_referenced_types): Adjust. (write_context::get_referenced_{function_types, non_canonical_types}): (write_context::record_type_as_referenced): Adjust to add the referenced type in the proper set which would be one of the three following: write_context::{get_referenced_types, get_referenced_function_types, get_referenced_non_canonical_types}. (write_context::{type_is_referenced, clear_referenced}): Adjust. (write_translation_unit): Use the new write_canonical_types_of_scope. Also emit declaration-only classes that have member types. Do not test if a given type of a given scope has been emitted, in general, as this was super slow given the number of types. Emit referenced function types (as these don't belong to any scope). Rather than using the expensive "is_function_type" on *all* the referenced types, just walk the set write_context::get_referenced_function_types. Likewise, rather than using type_base::get_naked_canonical_type on *all* the referenced types, just walk the set write_context::get_referenced_non_canonical_types (write_class): Use write_canonical_types_of_scope here. * tools/abilint.cc (main): Support linting corpus group abixml files. * tests/data/test-annotate/libtest23.so.abi: Adjust. * tests/data/test-annotate/libtest24-drop-fns-2.so.abi: Likewise. * tests/data/test-annotate/libtest24-drop-fns.so.abi: Likewise. * tests/data/test-annotate/test-anonymous-members-0.o.abi: Likewise. * tests/data/test-annotate/test0.abi: Likewise. * tests/data/test-annotate/test1.abi: Likewise. * tests/data/test-annotate/test13-pr18894.so.abi: Likewise. * tests/data/test-annotate/test14-pr18893.so.abi: Likewise. * tests/data/test-annotate/test15-pr18892.so.abi: Likewise. * tests/data/test-annotate/test17-pr19027.so.abi: Likewise. * tests/data/test-annotate/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: Likewise. * tests/data/test-annotate/test19-pr19023-libtcmalloc_and_profiler.so.abi: Likewise. * tests/data/test-annotate/test2.so.abi: Likewise. * tests/data/test-annotate/test20-pr19025-libvtkParallelCore-6.1.so.abi: Likewise. * tests/data/test-annotate/test21-pr19092.so.abi: Likewise. * tests/data/test-annotate/test4.so.abi: Likewise. * tests/data/test-annotate/test6.so.abi: Likewise. * tests/data/test-annotate/test7.so.abi: Likewise. * tests/data/test-annotate/test8-qualified-this-pointer.so.abi: Likewise. * tests/data/test-read-dwarf/PR22015-libboost_iostreams.so.abi: Likewise. * tests/data/test-read-dwarf/PR22122-libftdc.so.abi: Likewise. * tests/data/test-read-dwarf/PR24378-fn-is-not-scope.abi: Likewise. * tests/data/test-read-dwarf/libtest23.so.abi: Likewise. * tests/data/test-read-dwarf/libtest24-drop-fns-2.so.abi: Likewise. * tests/data/test-read-dwarf/libtest24-drop-fns.so.abi: Likewise. * tests/data/test-read-dwarf/test0.abi: Likewise. * tests/data/test-read-dwarf/test1.abi: Likewise. * tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: Likewise. * tests/data/test-read-dwarf/test11-pr18828.so.abi: Likewise. * tests/data/test-read-dwarf/test12-pr18844.so.abi: Likewise. * tests/data/test-read-dwarf/test13-pr18894.so.abi: Likewise. * tests/data/test-read-dwarf/test14-pr18893.so.abi: Likewise. * tests/data/test-read-dwarf/test15-pr18892.so.abi: Likewise. * tests/data/test-read-dwarf/test16-pr18904.so.abi: Likewise. * tests/data/test-read-dwarf/test17-pr19027.so.abi: Likewise. * tests/data/test-read-dwarf/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: Likewise. * tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi: Likewise. * tests/data/test-read-dwarf/test2.so.abi: Likewise. * tests/data/test-read-dwarf/test20-pr19025-libvtkParallelCore-6.1.so.abi: Likewise. * tests/data/test-read-dwarf/test21-pr19092.so.abi: Likewise. * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: Likewise. * tests/data/test-read-dwarf/test4.so.abi: Likewise. * tests/data/test-read-dwarf/test6.so.abi: Likewise. * tests/data/test-read-dwarf/test7.so.abi: Likewise. * tests/data/test-read-dwarf/test8-qualified-this-pointer.so.abi: Likewise. * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Likewise. * tests/data/test-read-write/test10.xml: Likewise. * tests/data/test-read-write/test14.xml: Likewise. * tests/data/test-read-write/test15.xml: Likewise. * tests/data/test-read-write/test17.xml: Likewise. * tests/data/test-read-write/test18.xml: Likewise. * tests/data/test-read-write/test19.xml: Likewise. * tests/data/test-read-write/test2.xml: Likewise. * tests/data/test-read-write/test20.xml: Likewise. * tests/data/test-read-write/test21.xml: Likewise. * tests/data/test-read-write/test22.xml: Likewise. * tests/data/test-read-write/test23.xml: Likewise. * tests/data/test-read-write/test24.xml: Likewise. * tests/data/test-read-write/test25.xml: Likewise. * tests/data/test-read-write/test26.xml: Likewise. * tests/data/test-read-write/test27.xml: Likewise. * tests/data/test-read-write/test28-without-std-fns-ref.xml: Likewise. * tests/data/test-read-write/test28-without-std-vars-ref.xml: Likewise. * tests/data/test-read-write/test3.xml: Likewise. * tests/data/test-read-write/test6.xml: Likewise. 2019-07-24 Matthias Maennich abg-dwarf-reader: detect kernel modules without exports as such * src/abg-dwarf-reader.cc(is_linux_kernel_binary): consider binaries only having a .modinfo section to be kernel binaries Co-developed-by: Alessio Balsini 2019-07-22 Matthias Maennich Ensure a consistent C++ standard use * configure.ac: add -std=c++11 flag to CXXFLAGS when compiling for C++11 * src/Makefile.am: drop now obsolete setting of the -std flag * tests/Makefile.am: likewise Reported-by: Chun-Hung Wu 2019-07-19 Dodji Seketeli Bug 24787 - Filter out enum changes into compatible integer types * include/abg-comparison.h (peel_typedef_or_qualified_type_diff): Declare new function. (peel_pointer_or_qualified_type_diff): Rename peel_pointer_or_qualified_type into this. * include/abg-fwd.h (is_enum_type): Declare a new overload for type_or_decl_base*. * src/abg-comp-filter.cc (has_harmless_enum_to_int_change): Define new static function. * src/abg-comparison.cc (categorize_harmless_diff_node): Use the new has_harmless_enum_to_int_change here. (peel_pointer_or_qualified_type_diff): Renamed peel_pointer_or_qualified_type into this. (is_diff_of_basic_type): Adjust. (peel_typedef_or_qualified_type_diff): Define new function. * test-diff-filter/PR24787-lib{one, two}.so: New test input binaries. * test-diff-filter/PR24787-{one, two}.c: Source files of the test input binaries above. * test-diff-filter/PR24787-report-0.txt: Test output reference. * tests/data/Makefile.am: Add the new testing material to source distribution. * tests/test-diff-filter.cc (in_out_specs): Add the new test to the test harness. 2019-07-19 Dodji Seketeli Add timing to the verbose logs of abidw * include/abg-tools-utils.h (class timer): Declare new type. (operator<<(ostream&, const timer&)): Declare new streaming operator for the new timer type. * src/abg-tools-utils.cc (struct timer::priv): Define new type. (timer::{timer, start, stop, value_in_seconds, value, value_as_string, ~timer}): Define member functions. (operator<<(ostream& o, const timer& t)): Define streaming operator. (build_corpus_group_from_kernel_dist_under): Add timing logs to the linux kernel reading process. * src/abg-dwarf-reader.cc (read_context::canonicalize_types_scheduled): Add timing logs to type canonicalization. (read_debug_info_into_corpus): Add timing logs for the whole debug info loading and internal representation building process. * tools/abidw.cc (load_corpus_and_write_abixml): Add timing logs for the binary loading and serizalization process. (load_kernel_corpus_group_and_write_abixml): Add timing logs the Linux Kernel binary loading and writing process. 2019-07-18 Dodji Seketeli [ir] Fix indentation and add comments * src/abg-ir.cc (types_defined_same_linux_kernel_corpus_public): Fix indentation and add comments. 2019-07-15 Dodji Seketeli Implement fast comparison of Linux Kernel types when applicable * include/abg-corpus.h (corpus::origin): Add a new LINUX_KERNEL_BINARY_ORIGIN enumerator. (corpus::{s,g}et_group): Declare new member functions. (class corpus): Make the corpus_group class friend of this one. (corpus_group::get_main_corpus): Declare new member function. * src/abg-corpus-priv.h (corpus::priv::group): Define new data member. (corpus::priv::priv): Initialize the new corpus::priv::group data member. * src/abg-corpus.cc (corpus::{g,s}et_group): Define new member functions. (corpus_group::get_main_corpus): Likewise. (corpus_group::add_corpus): Use the new corpus::set_group() here to to make the corpus be aware of the group it belongs to. * src/abg-dwarf-reader.cc (read_debug_info_into_corpus): Set the current corpus origin to the corpus::LINUX_KERNEL_BINARY_ORIGIN if we are looking at a Linux Kernel binary. (read_context::main_corpus_from_current_group): Use the corpus_group::get_main_corpus method. (should_reuse_type_from_corpus_group): Return the corpus group, rather than the main corpus. (read_debug_info_into_corpus): Add the current corpus to the current corpus group before the debug info reading is done. That way, the corpus group will be accessible from the current corpus during the construction of the internal representation. (read_and_add_corpus_to_group_from_elf): Add the corpus to the group only if it wasn't added to it before. * include/abg-ir.h (operator{==,!=}): Declare new deep equality and inequality operators for class_or_union_sptr and union_decl_sptr. * src/abg-ir.cc (types_defined_same_linux_kernel_corpus_public): Define a new static function. (type_base::get_canonical_type_for): Use the new types_defined_same_linux_kernel_corpus_public here to speed up type comparison. (equals): In the overload of class_or_union, use the new types_defined_same_linux_kernel_corpus_public as well, to speed up type comparison. (operator{==,!=}): Define new deep equality and inequality operators for class_or_union_sptr and union_decl_sptr. (maybe_update_types_lookup_map): In the overload function for type_decl_sptr, class_decl_sptr, union_decl_sptr, enum_type_decl_sptr, typedef_decl_sptr, qualified_type_def_sptr, reference_type_def_sptr, array_type_def_sptr, array_type_def::subrange_sptr, and function_type_sptr, update the type lookup maps of the containing corpus group as well, not just the ones of the current corpus. * src/abg-reader.cc (build_enum_type_decl): Forgot to set the "is-anonymous" flag. Oops, fix this. * tests/data/test-read-dwarf/PR22122-libftdc.so.abi: Adjust. * tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: Adjust. * tests/data/test-read-dwarf/test12-pr18844.so.abi: Adjust. * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: Adjust. * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Adjust. 2019-07-09 Matthias Maennich abg-tools-utils: add missing header include guards * include/abg-tools-utils.h: add header include guards 2019-07-05 Matthias Maennich Add compatibility layer for C++11 mode * include/abg-cxx-compat.h: new file introducing the abg_compat namespace to provide C++11 functionality from either std::tr1 or std:: * include/Makefile.am: Add the new abg-cxx-compat.h to source distribution. * include/abg-comparison.h: replace std::tr1 usage by abg_compat and adjust includes accordingly: likewise * include/abg-diff-utils.h: likewise * include/abg-fwd.h: likewise * include/abg-ini.h: likewise * include/abg-interned-str.h: likewise * include/abg-ir.h: likewise * include/abg-libxml-utils.h: likewise * include/abg-libzip-utils.h: likewise * include/abg-reporter.h: likewise * include/abg-sptr-utils.h: likewise * include/abg-suppression.h: likewise * include/abg-tools-utils.h: likewise * include/abg-workers.h: likewise * src/abg-comp-filter.cc: likewise * src/abg-comparison-priv.h: likewise * src/abg-corpus.cc: likewise * src/abg-dwarf-reader.cc: likewise * src/abg-hash.cc: likewise * src/abg-ir.cc: likewise * src/abg-reader.cc: likewise * src/abg-suppression.cc: likewise * src/abg-tools-utils.cc: likewise * src/abg-writer.cc: likewise * tests/test-diff-filter.cc: likewise * tests/test-diff-pkg.cc: likewise * tests/test-read-dwarf.cc: likewise * tests/test-read-write.cc: likewise * tests/test-types-stability.cc: likewise * tests/test-write-read-archive.cc: likewise * tools/abicompat.cc: likewise * tools/abidiff.cc: likewise * tools/abidw.cc: likewise * tools/abilint.cc: likewise * tools/abipkgdiff.cc: likewise 2019-07-05 Matthias Maennich Update tests/.gitignore to ignore runtesttoolsutils * tests/.gitignore: ignore runtesttoolsutils 2019-07-05 Matthias Maennich Drop requirement to compile with GNU extensions * include/abg-tools-utils.h (get_stream): Change return type to std::fstream * src/abg-corpus.cc: remove unused #include of ext/stdio_filebuf.h * src/abg-tools-utils (temp_file::priv): remove filebuf_ member, and replace iostream_ by fstream_ with changing the shared_ptr type accordingly (temp_file::priv::priv): initialize fstream_ based on temporary file name (temp_file::priv::~priv): adjust destruction accordingly (temp_file::is_good): test the fstream rather than the fd (temp_file::get_stream): adjust return type to std::fstream and adjust implementation based on the changes in temp_file::priv * src/Makefile.am: remove gnu extension from c++ standard flag * tests/Makefile.am: likewise 2019-07-09 Dodji Seketeli Misc indent cleanup * src/abg-dwarf-reader.cc (addr_elf_symbol_sptr_map_sptr): Fix a typo in the comment of this typedef. * src/abg-ir.cc (hash_type_or_decl): Fix typo in a comment. * src/abg-writer.cc (write_translation_unit): Remove useless vertical space. 2019-07-08 Dodji Seketeli [xml-writer] Remove a useless kludge * src/abg-writer.cc (write_context::type_is_emitted): Remove useless kludge from here. 2019-07-08 Dodji Seketeli [xml-writter] Speedup function_type::get_cached_name * src/abg-ir.cc (function_type::get_cached_name): Really cache the computed name of function_type instances. 2019-07-08 Dodji Seketeli [xml-writter] Avoid using RTTI when dynamically hashing types * include/abg-fwd.h (hash_type): Declare new function. * src/abg-ir.cc (hash_type): Define new function. * src/abg-writer.cc (type_hasher::operator()): Use the new hash_type rather than the old hash_type_or_decl. 2019-07-08 Dodji Seketeli Implement a poor-man's RTTI for performance * include/abg-fwd.h (is_type_decl): Replace the overloads that takes a type_base* and/or a decl_base* by one that takes a type_or_decl_base*. * include/abg-ir.h (type_or_decl_base::type_or_decl_kind): Define new enum. (type_or_decl_base::{kind, runtime_type_instance, type_or_decl_base_pointer}): Declare new accessors. (operator{|,|=,&,&=): Declare new operators for the new type_or_decl_base::type_or_decl_kind enum. (global_scope::global_scope): Move the definition of this constructor to ... * src/abg-ir.cc (global_scope::global_scope): ... here. (type_or_decl_base::priv::{kind_, rtti_, type_or_decl_ptr_}): Add new data members. (type_or_decl_base::priv::priv): Take a type_or_decl_base::type_or_decl_kind enum. (type_or_decl_base::priv::kind): Define new accessors. (operator{|,|=,&,&=): Define new operators for the new type_or_decl_base::type_or_decl_kind enum. (type_or_decl_base::type_or_decl_base): Take a type_or_decl_base::type_or_decl_kind enum. (type_or_decl_base::{kind, runtime_type_instance, type_or_decl_base_pointer}): Define new accessors. (decl_base::decl_base, scope_decl::scope_decl) (type_base::type_base, scope_type_decl::scope_type_decl) (class_or_union::class_or_union) : Adjust to set the runtime type identifier of the instances of these types. (global_scope::global_scope, type_decl::type_decl) (qualified_type_def::qualified_type_def) (pointer_type_def::pointer_type_def) (reference_type_def::reference_type_def array_type_def::subrange_type::subrange_type) (array_type_def::array_type_def, enum_type_decl::enum_type_decl) (typedef_decl::typedef_decl, var_decl::var_decl) (function_type::function_type, method_type::method_type) (function_decl::function_decl) (function_decl::parameter::parameter, method_decl::method_decl) (class_decl::class_decl, class_decl::base_spec::base_spec) (union_decl::union_decl, template_decl::template_decl) (type_tparameter::type_tparameter) (non_type_tparameter::non_type_tparameter) (template_tparameter::template_tparameter) (type_composition::type_composition) (function_tdecl::function_tdecl, function_tdecl::function_tdecl) (class_tdecl::class_tdecl): Likewise and call runtime_type_instance() here to set the runtime type instance pointers of the current instance. (is_decl, is_type, is_class_type, is_pointer_type): Adjust to use the new poor-man's rtti machinery. (is_type_decl): Replace the overloads that takes a type_base* and/or a decl_base* by one that takes a type_or_decl_base*. (pointer_type_def::operator==, class_decl::operator==): Use the poor-man's rtti machinery to replace dynamic_cast. hash_type_or_decl: Replace dynamic_cast by is_type() and dynamic_cast by is_decl(). 2019-07-05 Dodji Seketeli [dwarf-reader] Make sure to canonicalize anonymous types * src/abg-dwarf-reader.cc (maybe_canonicalize_type): Add two new overloads. One that takes type_base_sptr, one that takes a Dwarf_Die* and type_base_sptr. These force canonicalization for anonymous types. (build_function_type): Schedule function types for canonicalization. (build_ir_node_from_die): For struct/classes and unions, use the new overload of maybe_canonicalize_type to schedule canonicalization. * tests/data/test-read-dwarf/PR22122-libftdc.so.abi: Adjust. * tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: Adjust. * tests/data/test-read-dwarf/test12-pr18844.so.abi: Adjust. * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: Adjust. * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Adjust. 2019-07-04 Dodji Seketeli [dwarf-reader] Constify the first parameter of maybe_canonicalize_type * src/abg-dwarf-reader.cc (maybe_canonicalize_type): Make the first parameter const. (read_context::{get_canonical_die, lookup_artifact_from_die, lookup_type_from_die, schedule_type_for_late_canonicalization}): Adjust. 2019-06-26 Dodji Seketeli Make abidiff --harmless show harmless changes in unions * include/abg-fwd.h (get_class_or_union_flat_representation): Add a "qualified_name" boolean parameter. * include/abg-ir.h ({type_or_decl_base, decl_base, type_decl, namespace_decl, array_type_def::subrange_type, array_type_def, enum_type_decl, typedef_decl, var_decl, function_decl, function_decl::parameter, function_type, method_type, class_decl, union_decl}::get_pretty_representation): Likewise. * src/abg-ir.cc ({type_or_decl_base, decl_base, type_decl, namespace_decl, array_type_def::subrange_type, array_type_def, enum_type_decl, typedef_decl, var_decl, function_decl, function_decl::parameter, function_type, method_type, class_decl, union_decl, }::get_pretty_representation): Adjust the code to emit qualified or non-qualified names depending on the new "qualified_name" boolean parameter. (get_class_or_union_flat_representation): Likewise. * src/abg-default-reporter.cc (default_reporter::report): Use get_class_or_union_flat_representation with the new "qualified_name" boolean set to false. * tests/data/test-diff-dwarf/test38-union-report-0.txt: Adjust. * tests/test-diff-filter.cc (in_out_specs): Run the test harness on test-PR24731-v{0,1}.o make abidiff use the --harmless option. 2019-06-26 Dodji Seketeli Bug 24731 - Wrongly reporting union members order change * include/abg-comp-filter.h (union_diff_has_harmless_changes): Declare new function and ... * src/abg-comp-filter.cc (union_diff_has_harmless_changes): ... define it here. (categorize_harmless_diff_node): Use the new union_diff_has_harmless_changes here. * include/abg-comparison.h (HARMLESS_UNION_CHANGE_CATEGORY): Add a new enumerator to diff_category enum. Adjust the value of the other enumerators. * src/abg-comparison.cc (get_default_harmless_categories_bitmap): Add the new HARMLESS_UNION_CHANGE_CATEGORY in here. (operator<<(ostream& o, diff_category c)): Support the new HARMLESS_UNION_CHANGE_CATEGORY. * tests/data/test-diff-filter/test-PR24731-report-0.txt: Likewise. * tests/data/test-diff-filter/test-PR24731-report-1.txt: Likewise. * tests/data/test-diff-filter/test-PR24731-v0.c: Likewise. * tests/data/test-diff-filter/test-PR24731-v0.o: Likewise. * tests/data/test-diff-filter/test-PR24731-v1.c: Likewise. * tests/data/test-diff-filter/test-PR24731-v1.o: Likewise. * tests/data/Makefile.am: Add the new test material above to source distribution. * tests/test-diff-filter.cc (in_out_spec): Add the new test input to this test harness. 2019-06-20 Dodji Seketeli Fully account for anonymous-ness of scopes when comparing decl names * include/abg-ir.h (decl_base::{get_has_anonymous_parent, set_has_anonymous_parent, get_is_anonymous_or_has_anonymous_parent}): Declare new member functions. * src/abg-ir.cc (decl_base::priv::has_anonymous_parent_): Define new data member. (decl_base::priv): Initialize the new data member. (decl_base::{get_has_anonymous_parent, set_has_anonymous_parent, get_is_anonymous_or_has_anonymous_parent}): Define new member functions. (equals): In the overload for decl_base, use the new decl_names_equal for decls that have anonymous scopes. (scope_decl::add_member_decl): Propagate the decl_base::has_anonymous_parent_ property. * include/abg-tools-utils.h (get_anonymous_struct_internal_name_prefix) (get_anonymous_union_internal_name_prefix) (get_anonymous_enum_internal_name_prefix, decl_names_equal): Declare new functions. * src/abg-comp-filter.cc (has_harmless_name_change): Handle the case where the name change is actually from an anonymous name to another one, using the new decl_names_equal function. * src/abg-dwarf-reader.cc (get_internal_anonymous_die_prefix_name): Renamed get_internal_anonynous_die_base_name into this. Use the new get_anonymous_{struct, union, enum}_internal_name_prefix functions here. (get_internal_anonymous_die_name, die_qualified_type_name) (build_enum_type, add_or_update_class_type) (add_or_update_union_type): Adjust. * src/abg-tools-utils.cc (get_anonymous_struct_internal_name_prefix) (get_anonymous_union_internal_name_prefix) (get_anonymous_enum_internal_name_prefix, decl_names_equal): Define new functions. * tests/test-tools-utils.cc: New test file. * tests/Makefile.am: Add new runtesttoolsutils test, built from test-tools-utils.cc. * tests/data/test-diff-dwarf/test46-rust-report-0.txt: Adjust. * tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-3.txt: Likewise. * tests/data/test-read-dwarf/PR22122-libftdc.so.abi: Likewise. 2019-06-12 Matthias Maennich abg-reporter.h: add missing includes / using declarations * include/abg-reporter.h: fix includes and using declarations 2019-06-17 Dodji Seketeli [dwarf-reader] Fix indentation in compare_dies_string_attribute_value * src/abg-dwarf-reader.cc (compare_dies_string_attribute_value): Fix indentation. 2019-06-17 Dodji Seketeli [dwarf-reader] Optimize speed of compare_as_decl_dies * src/abg-dwarf-reader.cc (die_is_class_type): Take a const pointer to Dwarf_Die. (compare_as_decl_dies): For classes/structs, call compare_dies_string_attribute_value just once to compare the DW_AT_name attribute values. 2019-06-13 Dodji Seketeli [dwarf-reader] Better use of linkage name for fn decl de-duplication * src/abg-dwarf-reader.cc (read_context::{die_is_in_c, die_is_in_c_or_cplusplus}): Define new member functions. (fn_die_equal_by_linkage_name): Define new static function. (compare_dies): In the case for for DW_TAG_subprogram, use the new fn_die_equal_by_linkage_name. * tests/data/test-annotate/test15-pr18892.so.abi: Adjust. * tests/data/test-annotate/test21-pr19092.so.abi: Adjust. * tests/data/test-read-dwarf/test15-pr18892.so.abi: Adjust. * tests/data/test-read-dwarf/test21-pr19092.so.abi: Adjust. 2019-06-13 Dodji Seketeli [dwarf-reader] Re-use function types inside a given TU * src/abg-dwarf-reader.cc (istring_fn_type_map_type): Declare new typedef. (die_is_function_type): Define new static function. (read_context::per_tu_repr_to_fn_type_maps_): Define new data member ... (read_context::per_tu_repr_to_fn_type_maps): ... and its accessor. (read_context::{associate_die_repr_to_fn_type_per_tu, lookup_fn_type_from_die_repr_per_tu}): Define new member functions. (build_function_type): Use the new read_context::lookup_fn_type_from_die_repr_per_tu and read_context::associate_die_repr_to_fn_type_per_tu functions, instead of read_context::lookup_type_from_die. * tests/data/test-annotate/test13-pr18894.so.abi: Adjust. * tests/data/test-annotate/test14-pr18893.so.abi: Adjust. * tests/data/test-annotate/test21-pr19092.so.abi: Adjust. * tests/data/test-read-dwarf/test13-pr18894.so.abi: Adjust. * tests/data/test-read-dwarf/test14-pr18893.so.abi: Adjust. * tests/data/test-read-dwarf/test16-pr18904.so.abi: Adjust. * tests/data/test-read-dwarf/test21-pr19092.so.abi: Adjust. 2019-06-03 Dodji Seketeli [dwarf-reader] const-ify Dwarf_Die* use in many places * src/abg-dwarf-reader.cc (get_parent_die, get_scope_die) (die_is_anonymous, die_is_type, die_is_decl, die_is_namespace) (die_is_pointer_type, pointer_or_qual_die_of_anonymous_class_type) (die_is_reference_type, die_is_pointer_or_reference_type) (die_is_qualified_type, die_has_object_pointer) (die_is_at_class_scope, die_unsigned_constant_attribute) (die_signed_constant_attribute, die_attribute_is_signed) (die_attribute_is_unsigned, die_attribute_has_no_signedness) (die_name, die_location, die_qualified_type_name) (die_qualified_decl_name, die_qualified_name) (die_qualified_type_name_empty) (die_return_and_parm_names_from_fn_type_die) (die_function_signature, die_function_type_is_method_type) (die_pretty_print_type, die_pretty_print_decl, die_pretty_print) (maybe_canonicalize_type, build_subrange_type) (build_subranges_from_array_type_die, compare_dies) (read_context::get_container) (read_context::compute_canonical_die_offset) (read_context::get_or_compute_canonical_die) (read_context::get_die_source) (read_context::get_die_qualified_type_name) (read_context::get_die_pretty_representation) (read_context::get_die_language, read_context::odr_is_relevant) (read_context::set_canonical_die_offset) (read_context::associate_die_to_type, die_is_anonymous) (die_string_attribute, die_constant_attribute) (die_attribute_has_form, die_linkage_name) (die_decl_file_attribute, die_die_attribute, die_size_in_bits) (die_is_decl, die_is_namespace) (pointer_or_qual_die_of_anonymous_class_type, die_is_array_type) (die_is_pointer_reference_or_typedef_type) (die_peel_pointer_and_typedef, die_function_type_is_method_type) (die_virtuality, die_is_virtual) (compare_dies_string_attribute_value, compare_dies_cu_decl_file) (die_location_expr, die_member_offset) (get_internal_anonynous_die_base_name, compare_as_decl_dies) (compare_as_type_dies): Const-ify the Dwarf_Die* parameter(s) of these functions. 2019-06-05 Dodji Seketeli Take anonymous scopes into account when comparing decls * include/abg-interned-str.h (interned_string::clear): Add new member function. * src/abg-ir.cc (equals): In the overload for decl_base, consider the scope of the current (anonymous) decl. If that scope is anonymous then take that into account as well. * tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-3.txt: Adjust. * tests/data/test-read-dwarf/PR22122-libftdc.so.abi: Likewise. 2019-05-21 Matthias Maennich .clang-format: Add more options for match existing coding style * .clang-format: Add options for ConstructorInitializers Set SortUsingDeclarations=false Set AlignConsecutiveDeclarations=true 2019-05-21 Matthias Maennich .gitignore: Add libabigail-?.* *.orig files * .gitignore: add entries for distribution artifacts * .gitignore: add *.orig files 2019-05-21 Matthias Maennich abg-writer: drop deprecated API * include/abg-fwd.h (ABG_DEPRECATED): Remove this macro. * include/abg-writer.h (write_translation_unit, write_corpus) (write_corpus_group): Drop the deprecated overloads of these declarations. * src/abg-writer.cc (write_translation_unit, write_corpus) (write_corpus_group): Drop the deprecated overloads of these definitions. 2019-05-21 Matthias Maennich abidw: add option to only emit file names (--short-locs) * include/abg-writer.h (set_short_locs): Declare new function. (set_common_options): Use it. set_opts * src/abg-writer.cc (write_context::m_short_locs): New data member. (write_context::write_context): Initialize it. (write_context::{g,s}et_short_locs): Define new accessors. (write_location, write_translation_unit, write_corpus): Honour the new write_context::get_short_locs property. (set_short_locs): Define new function. * tools/abidw.cc (options::short_locs): New data member. (display_usage): Help string for the new --no-show-locs option. (parse_command_line): Parse the new --no-show-locs option. 2019-05-21 Matthias Maennich abidw: add option to omit the compilation directory * include/abg-writer.h (set_write_comp_dir): Declare new function. (set_common_options): Use it. * src/abg-writer.cc (write_context::m_write_comp_dir): Define new data member. (write_context::write_context): Initialize it. (write_context::{g,s}et_write_comp_dir): Define new member accessors. (set_write_comp_dir): Define new free-form getter. (write_translation_unit): Teach to respect write_comp_dir flag of write_context. * tools/abidw.cc (options::write_corpus_path): Define new data member. (options::options): Initialize it. (display_usage): Add doc string for a new command line option: --no-comp-dir-path. (parse_command_line): Parse the new command line option --no-comp-dir-path. 2019-05-21 Matthias Maennich Make write_architecture and write_corpus_path flags in the write_context * include/abg-writer.h (set_write_architecture) (set_write_corpus_path): Declare new getter functions. (write_corpus): Take a new "member_of_group" argument. (set_common_options): Use set_write_{architecture, corpus_path} here. * src/abg-writer.cc (write_context::m_write_{architecture, corpus_path}}): Add new data members. (write_context::write_context): Initialize the new data members. (write_context::{s,g}et_write_{architecture, corpus}): Define new accessors. (set_write_{architecture, corpus}): Define new free-form getter functions. (write_corpus): Add flag to make aware if written as part of a group. * tools/abidw.cc (load_corpus_and_write_abixml) (load_kernel_corpus_group_and_write_abixml): Drop obsolete option handling as xml_writer::set_common_options now takes care of it. ldiff --git a/include/abg-writer.h b/include/abg-writer.h index 200b5f7..729b455 100644 --- a/include/abg-writer.h +++ b/include/abg-writer.h @@ -53,6 +53,11 @@ set_show_locs(write_context& ctxt, bool flag); void set_annotate(write_context& ctxt, bool flag); +void +set_write_architecture(write_context& ctxt, bool flag); + +void +set_write_corpus_path(write_context& ctxt, bool flag); /// A convenience generic function to set common options (usually used /// by Libabigail tools) from a generic options carrying-object, into @@ -69,6 +74,8 @@ set_common_options(write_context& ctxt, const OPTS& opts) { set_annotate(ctxt, opts.annotate); set_show_locs(ctxt, opts.show_locs); + set_write_architecture(ctxt, opts.write_architecture); + set_write_corpus_path(ctxt, opts.write_corpus_path); } void @@ -105,7 +112,10 @@ write_corpus_to_archive(const corpus_sptr corp, const bool annotate = false); bool -write_corpus(write_context& ctxt, const corpus_sptr& corpus, unsigned indent); +write_corpus(write_context& ctxt, + const corpus_sptr& corpus, + unsigned indent, + bool member_of_group = false); bool ABG_DEPRECATED write_corpus(const corpus_sptr& corpus, unsigned indent, write_context& ctxt); 2019-05-21 Matthias Maennich abidw: Consolidate setting options * include/abg-writer.h (set_common_option): Declare new function. * tools/abidw.cc (load_corpus_and_write_abixml) (load_kernel_corpus_group_and_write_abixml): Use the newly introduced set_common_option. 2019-05-21 Matthias Maennich write_context: allow mutating the ostream used * include/abg-writer.h (set_ostream): Declare new function. * src/abg-writer.cc (write_context::m_ostream): Make this data member be a pointer rather than a reference. (write_context::{write_context, get_ostream): Adjust. member. (write_context::set_ostream): Define new member function. (set_ostream): Define new free-form function. * tools/abidw.cc (load_corpus_and_write_abixml) (load_kernel_corpus_group_and_write_abixml): Use the feature of mutating the ostream and reuse the write_context in most cases. 2019-05-21 Matthias Maennich abg-writer: Refactor write_corpus_group API * include/abg-writer.h (write_corpus_group): Introduce new overload write_corpus_group(ctxt, corpus_group, indent) and deprecate all others. * src/abg-writer.cc (write_corpus_group): Likewise for the definitions and adjust. * tools/abidw.cc (load_kernel_corpus_group_and_write_abixml): Migrate to new API of write_corpus_group() 2019-05-21 Matthias Maennich abg-writer: Refactor write_corpus API * include/abg-writer.h (write_corpus): Introduce new overload write_corpus(ctxt, corpus, indent) and deprecate all others. * src/abg-writer.cc (write_corpus): Likewise for the definitions and adjust. * tests/test-read-dwarf.cc (test_task::perform): Use the new write_corpus which requires a write_context. * tools/abidw.cc (load_corpus_and_write_abixml, ): Likewise. * tools/abilint.cc (main): Likewise. Also simplify logic around the locations as they now can be expressed with less code. 2019-05-21 Matthias Maennich abg-writer: Refactor write_translation_unit API * include/abg-writer.h (write_translation_unit): Declare a new overload write_translation_unit(ctxt, tu, indent) and deprecate all others. * src/abg-writer.cc (write_translation_unit): Likewise in the definitions. (write_corpus, dump, write_translation_unit): Adjust. * tools/abilint.cc (main): use new write_translation_unit() API 2019-05-21 Matthias Maennich Add deprecation facilities * include/abg-fwd.h: Introduce deprecation macro ABG_DEPRECATED 2019-05-21 Matthias Maennich abg-writer: Simplify 'annotate' propagation * src/abg-writer.cc (write_context::write_context): remove 'annotate' parameter. (write_translation_unit, write_corpus, write_corpus_group, dump): Adjust. 2019-05-15 Matthias Maennich Add .clang-format approximation * .clang-format: New File. 2019-05-16 Dodji Seketeli Bug 24552 - abidiff fails comparing a corpus against a corpus group * include/abg-corpus.h (corpus{_group}::get_{fun, var}_symbol_map): Make these member functions virtual. * src/abg-corpus.cc (corpus::lookup_{function, variable}_symbol): Use the virtual corpus::get_{fun, var}_symbol_map() member function to get the symbols of the current corpus or corpus_group. * tests/data/Makefile.am: Add the new test input material below to source distribution. * tests/data/test-abidiff/test-PR24552-report0.txt: New test input. * tests/data/test-abidiff/test-PR24552-v0.abi: Likewise. * tests/data/test-abidiff/test-PR24552-v1.abi: Likewise. * tests/test-abidiff.cc (main): Support comparing corpus groups. (specs): Add the new test inputs to the harness. 2019-05-15 Dodji Seketeli Bug 24560 - Assertion failure on an abixml with an anonymous type * src/abg-reader.cc (read_context::maybe_canonicalize_type): Delay canonicalization of union types too. (build_class_decl, build_union_decl): Do not try to re-use anonymous types. 2019-05-13 Dodji Seketeli Handle Linux kernel binaries with no __ksymtab section * src/abg-dwarf-reader.cc (find_section): Use elf_getshdrstrndx rather than poking at the elf header on our own. (read_context::find_any_ksymtab_section): Define new member function. (read_context::{get_symtab_format, try_reading_first_ksymtab_entry_using_pre_v4_19_format}): Use the new find_any_ksymtab_section rather than find_ksymtab_section. (read_context::get_nb_ksymtab_entries): Handle the absence of __ksymtab. (read_context::get_nb_ksymtab_gpl_entries): Handle the absence of __ksymtab_gpl. (read_context::load_kernel_symbol_table): Handle the case of zero ksymtab entries. (read_context::{maybe_adjust_address_for_exec_or_dyn, maybe_adjust_fn_sym_address, load_kernel_symbol_table}): Handle an address that is zero. 2019-05-10 Dodji Seketeli Fix logic of get_binary_load_address * src/abg-dwarf-reader.cc (get_binary_load_address): Consider the load address pointed to by the program header pointer returned by gelf_getphdr rather than the program header itself. 2019-05-10 maennich@google.com Bug 24431 Treat __ksymtab as int32_t for v4.19+ kernels * src/abg-dwarf-reader.cc (maybe_adjust_sym_address_from_v4_19_ksymtab): treat passed addr as 32bit signed offset in case of v4.19+ __ksymtabs 2019-05-10 maennich@google.com Bug 24431 Read 32bit values when testing for the v4.19 symbol table format * src/abg-dwarf-reader.cc (try_reading_first_ksymtab_entry_using_v4_19_format): attempt to read first __ksymtab entry into int32_t to preserve sign 2019-05-10 maennich@google.com dwarf-reader: templatize read_int_from_array_of_bytes * src/abg-dwarf-reader.cc (read_int_from_array_of_bytes): templatize return type to allow passing of signed integer references 2019-05-10 maennich@google.com dwarf-reader: Fix comments for try_reading_first_ksymtab_entry_using_{pre_,}v4_19_format * src/abg-dwarf-reader.cc: swap the comments of try_reading_first_ksymtab_entry_using_{pre_,}v4_19_format 2019-05-09 Dodji Seketeli Better handle several anonymous types of the same kind *unqualified* name of its scope. Unlike for qualified names, the scoped name won't have a "__anonymous_*__" string in its name if its directly containing scope is not anonymous; a qualified name might still have that string in its name because the decl has a parent scope (not necessarily its directly containing scope though) that is anonymous. The patch goes on to update the logic for comparison of decls that are anonymous. For a decl which direct scope is *NOT* anonymous, the scoped name is what's used in the comparison. Otherwise, only the name of the decl is used. The patch also updates how we detect changes in data members and member types, in the comparison engine. It now uses the names of the data members, rather than their qualified name. This is in the scope of the current class/union anyway. The improvement is that the fact that the class/union itself is anonymous (even if its anonymous name changes to another anonymous name) won't have any spurious impact on the detection of name change of the members. The patch considers the change of an anonymous decl name which anonymous name changes to another anonymous name as being harmless. The patch updates the logic of category propagation in the comparison engine. Although a public typedef to private underlying type needs to stay public and thus not propagate the PRIVATE_TYPE_CATEGORY from its child diff node to himself, it still needs to suppress the changes to the private underlying diff node that were suppressed (because of the private-ness), unless that typedef has local changes. * include/abg-ir.h (decl_base::get_scoped_name): Declare new member function. (scope_decl::get_num_anonymous_member_{classes, unions, enums}): Declare new virtual member functions. (class_decl::get_num_anonymous_member_{classes, unions, enums}): Adjust to make these virtual. It's not necessary but I feel redundancy is a kind of self-documentation here. * src/abg-comp-filter.cc (has_harmless_name_change): Consider anonymous name changes as harmless. * src/abg-comparison.cc (class_or_union_diff::ensure_lookup_tables_populated): Consider the names of the members rather than their qualified names. (suppression_categorization_visitor::visit_end): Suppress the changes to the private underlying diff node that were suppressed because of the private-ness, unless that typedef has local changes. * src/abg-dwarf-reader.cc (build_enum_type) (add_or_update_class_type, add_or_update_union_type): Handle anonymous types in namespaces as well, not just in class/unions. * src/abg-ir.cc (decl_base::priv::scoped_name_): Define new data member. (decl_base::get_scoped_name): Define new member function. (equals): For the decl_base overload, use scoped name in the comparison, unless the decl belongs to an anonymous type. For the class_or_union_diff, only consider scoped_name during comparison. Avoid name comparison between anonymous types. (scope_decl::get_num_anonymous_member_{classes, unions, enums}): Define new member functions. (types_have_similar_structure): Do not compare names between anonymous types. (qualified_name_setter::do_update): Update scoped names too. * tests/data/test-abidiff/test-PR18791-report0.txt: Adjust. * tests/data/test-annotate/libtest23.so.abi: Likewise. * tests/data/test-annotate/test13-pr18894.so.abi: Likewise. * tests/data/test-annotate/test14-pr18893.so.abi: Likewise. * tests/data/test-annotate/test15-pr18892.so.abi: Likewise. * tests/data/test-annotate/test21-pr19092.so.abi: Likewise. * tests/data/test-diff-dwarf/test43-PR22913-report-0.txt: Likewise. * tests/data/test-diff-dwarf/test46-rust-report-0.txt: Likewise. * tests/data/test-diff-filter/test30-pr18904-rvalueref-report0.txt: Likewise. * tests/data/test-diff-filter/test30-pr18904-rvalueref-report1.txt: Likewise. * tests/data/test-diff-filter/test30-pr18904-rvalueref-report2.txt: Likewise. * tests/data/test-diff-filter/test31-pr18535-libstdc++-report-0.txt: Likewise. * tests/data/test-diff-filter/test31-pr18535-libstdc++-report-1.txt: Likewise. * tests/data/test-diff-filter/test33-report-0.txt: Likewise. * tests/data/test-diff-filter/test35-pr18754-no-added-syms-report-0.txt: Likewise. * tests/data/test-diff-filter/test44-anonymous-data-member-report-0.txt: Likewise. * tests/data/test-diff-pkg/libsigc++-2.0-0c2a_2.4.0-1_amd64--libsigc++-2.0-0v5_2.4.1-1ubuntu2_amd64-report-0.txt: Likewise. * tests/data/test-diff-pkg/nss-3.23.0-1.0.fc23.x86_64-report-0.txt: Likewise. * tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-0.txt: Likewise. * tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-1.txt: Likewise. * tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-2.txt: Likewise. * tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-3.txt: Likewise. * tests/data/test-read-dwarf/PR22015-libboost_iostreams.so.abi: Likewise. * tests/data/test-read-dwarf/PR22122-libftdc.so.abi: Likewise. * tests/data/test-read-dwarf/libtest23.so.abi: Likewise. * tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: Likewise. * tests/data/test-read-dwarf/test11-pr18828.so.abi: Likewise. * tests/data/test-read-dwarf/test12-pr18844.so.abi: Likewise. * tests/data/test-read-dwarf/test13-pr18894.so.abi: Likewise. * tests/data/test-read-dwarf/test14-pr18893.so.abi: Likewise. * tests/data/test-read-dwarf/test15-pr18892.so.abi: Likewise. * tests/data/test-read-dwarf/test16-pr18904.so.abi: Likewise. * tests/data/test-read-dwarf/test21-pr19092.so.abi: Likewise. * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: Likewise. * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Likewise. 2019-05-07 Dodji Seketeli Handle several member anonymous types of the same kind * include/abg-ir.h (class_or_union::get_num_anonymous_member_{classes, unions, enums}): Declare new member functions. * src/abg-dwarf-reader.cc (get_internal_anonynous_die_base_name) (build_internal_anonymous_die_name) (get_internal_anonymous_die_name, is_anonymous_type_die): Define new static functions. (die_qualified_type_name): Use the new get_internal_anonymous_die_name. (get_scope_for_die): Fix this to put anonymous types that were wrongly emitted into the scope of DW_TAG_subroutine_type or DW_TAG_array_type by buggy DWARF emitters into the enclosing namespace, rather than into the enclosing class/union. (build_enum_type): Take the scope of the enum to have a chance to properly name potential anonymous enums. (lookup_class_typedef_or_enum_type_from_corpus): Take an anonymous member type index for when the DIE we are lookup up represents an anonymous type. Support proper building of the internal anonymous name of the anonymous type we are lookup up. (add_or_update_class_type): Use the new get_internal_anonynous_die_base_name and build_internal_anonymous_die_name functions. Support making sure that the anonymous member type we are adding to the class wasn't already there, especially for cases where we are updating a class type. (add_or_update_union_type): Use the new get_internal_anonynous_die_base_name and build_internal_anonymous_die_name functions. (build_ir_node_from_die): Adjust the use of build_enum_type to pass it the scope of the enum type we are building. * src/abg-ir.cc (lookup_union_type): Add a new overload. (lookup_class_or_typedef_type): Use the new overload of lookup_union_type above to support looking up union types too. (class_or_union::get_num_anonymous_member_{classes, unions, enums}): Define new member functions. * src/abg-reporter-priv.cc (represent): Detect when anonymous types of anonymous data members have their internal names change, probably because anonymous member types were inserted in the scope. * tests/data/Makefile.am: Add the new test-anonymous-members-0.* test input files to the source distribution. * tests/data/test-annotate/test-anonymous-members-0.cc: New test input file. * tests/data/test-annotate/test-anonymous-members-0.o: Likewise. * tests/data/test-annotate/test-anonymous-members-0.o.abi: Likewise. * tests/data/test-annotate/test17-pr19027.so.abi: Adjust. * tests/data/test-annotate/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: Likewise. * tests/data/test-annotate/test19-pr19023-libtcmalloc_and_profiler.so.abi: Likewise. * tests/data/test-annotate/test21-pr19092.so.abi: Likewise. * tests/data/test-diff-filter/test30-pr18904-rvalueref-report0.txt: Likewise. * tests/data/test-diff-filter/test30-pr18904-rvalueref-report1.txt * tests/data/test-diff-filter/test30-pr18904-rvalueref-report2.txt: Likewise. * tests/data/test-diff-filter/test35-pr18754-no-added-syms-report-0.txt: Likewise. * tests/data/test-read-dwarf/PR22122-libftdc.so.abi: Likewise. * tests/data/test-read-dwarf/test12-pr18844.so.abi: Likewise. * tests/data/test-read-dwarf/test16-pr18904.so.abi: Likewise. * tests/data/test-read-dwarf/test17-pr19027.so.abi: Likewise. * tests/data/test-read-dwarf/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: Likewise. * tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi: Likewise. * tests/data/test-read-dwarf/test21-pr19092.so.abi: Likewise. * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: Likewise. * tests/test-annotate.cc (int_out_specs): Add the new test inputs to this test harness. 2019-04-24 Dodji Seketeli Use canonical types hash maps for type IDs in abixml writer * src/abg-writer.cc (write_context::{type_has_existing_id, get_id_for_type}): Save the canonical type of the type in the map, not the type itself. (write_context::{type_is_emitted}): Use the canonical type rather than the type itself. * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Adjust. 2019-04-24 Dodji Seketeli Don't try to de-duplicate all anonymous struct DIEs * include/abg-fwd.h (is_typedef): Remove the overloads for type_base_sptr and decl_base_sptr. Replace those with an overload for type_or_decl_base_sptr. * src/abg-ir.cc (is_typedef): Do the same for the definitions. * src/abg-dwarf-reader.cc (add_or_update_class_type) (add_or_update_union_type): Do not de-duplicate anonymous struct/union DIEs. (build_typedef_type): Try to de-duplicate typedefs DIEs. * tests/data/test-annotate/test17-pr19027.so.abi: Adjust. * tests/data/test-annotate/test19-pr19023-libtcmalloc_and_profiler.so.abi: Likewise * tests/data/test-annotate/test21-pr19092.so.abi: Likewise. * tests/data/test-read-dwarf/PR22015-libboost_iostreams.so.abi: Likewise. * tests/data/test-read-dwarf/PR22122-libftdc.so.abi: Likewise. * tests/data/test-read-dwarf/test16-pr18904.so.abi: Likewise. * tests/data/test-read-dwarf/test17-pr19027.so.abi: Likewise. * tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi: Likewise. * tests/data/test-read-dwarf/test21-pr19092.so.abi: Likewise. * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Likewise. 2019-04-24 Dodji Seketeli Canonicalize types non tied to any DWARF DIE * src/abg-dwarf-reader.cc (read_context::extra_types_to_canonicalize_): Add new data member. (read_context::{initialize, clear_types_to_canonicalize}): Adjust. (read_context::extra_types_to_canonicalize): Create new accessor. (read_context::schedule_type_for_late_canonicalization): Add new overload for type_base_sptr. (read_context::perform_late_type_canonicalizing): Perform the canonicalization of the types created by the DWARF analyzer, but that are not tied to any DIE. (maybe_strip_qualification): Take a read_context&. Schedule newly created types (during type edition) for late canonicalization. (build_ir_node_from_die): Adjust the call to maybe_strip_qualification to pass a read_context. * tests/data/test-annotate/test15-pr18892.so.abi: Adjust. * tests/data/test-annotate/test17-pr19027.so.abi: Likewise. * tests/data/test-annotate/test21-pr19092.so.abi: Likewise. * tests/data/test-read-dwarf/PR22122-libftdc.so.abi: Likewise. * tests/data/test-read-dwarf/test12-pr18844.so.abi: Likewise. * tests/data/test-read-dwarf/test15-pr18892.so.abi: Likewise. * tests/data/test-read-dwarf/test17-pr19027.so.abi: Likewise. * tests/data/test-read-dwarf/test21-pr19092.so.abi: Likewise. * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: Likewise. 2019-04-18 Mark Wielaard Don't try to read a build_id as string in find_alt_debug_info_link. * src/abg-dwarf-reader.cc (find_alt_debug_info_link): Remove build_id argument. Don't try to read the buildid chars as a string. (find_alt_debug_info): Don't call find_alt_debug_info_link with a build_id string argument. 2019-04-18 Mark Wielaard Fix an undefined behaviour in has_var_type_cv_qual_change * src/abg-comp-filter.cc: (has_var_type_cv_qual_change): Initialize the ch_kind variable before using it. 2019-04-18 Dodji Seketeli Add --enable-{asan,ubsan} configure options * configure.ac: Add configure options for -fsanitize=address and -fsanitize=undefined. 2019-04-18 Dodji Seketeli abg-tools-utils.cc: Plug a leak in find_file_under_dir * src/abg-tools-utils.cc (find_file_under_dir): Call fts_close before return. 2019-04-18 Matthias Maennich dwarf-reader: fix undefined behaviour in get_binary_load_address * src/abg-dwarf-reader.cc (get_binary_load_address): Move the ph_mem and program_header variables out of the inner for-loop. 2019-04-18 Dodji Seketeli Delay canonicalization for array and qualified types * src/abg-dwarf-reader.cc (maybe_canonicalize_type): Delay the canonicalization of array and qualified types, just like what we do for classes and function types already. (maybe_strip_qualification): Do not re-canonicalize array and qualified types here because it should not be necessary anymore. 2019-04-18 Dodji Seketeli Fix a memory leak in real_path * src/abg-tools-utils.cc (real_path): Fee the returned pointer of realpath. 2019-04-18 Dodji Seketeli Enable building with AddressSanitizer activated * configure.ac: If ABIGAIL_DEVEL_ASAN=on (in addition to ABIGAIL_DEVEL=on), then turn on AddressSanitizer in the build. 2019-04-17 Dodji Seketeli Bug 24431 - ELF reader fails to determine __ksymtab format * src/abg-dwarf-reader.cc (read_context::{try_reading_first_ksymtab_entry_using_pre_v4_19_format, try_reading_first_ksymtab_entry_using_v4_19_format}): Define new member functions. (read_context::maybe_adjust_sym_address_from_v4_19_ksymtab): Make member function this const. (read_context::get_ksymtab_format): Implement the new heuristic here, using try_reading_first_ksymtab_entry_using_pre_v4_19_format and try_reading_first_ksymtab_entry_using_v4_19_format, rather than assuming that if we have no relocations, then we are in the v4.19 format. (maybe_adjust_sym_address_from_v4_19_ksymtab): When on a 64 bits architecture, ensure the 32 bits address read from the v4.19 format __ksymtab section is converted into a 64 bits address. 2019-04-15 Matthias Maennich via libabigail Update .gitignore files to ignore typical dev side products * tests/.gitignore: exclude tests binaries and test results * tools/.gitignore: update to ignore produced binaries 2019-04-15 Matthias Maennich via libabigail dwarf-reader: fix recursion in expr_result::operator& * src/abg-dwarf-reader.cc: fix expr_result::operator& 2019-04-15 Matthias Maennich via libabigail distinct_diff: avoid expression with side effects within typeid * src/abg-comparison.cc: fix clang warning "potentially-evaluated-expression" 2019-04-15 Matthias Maennich via libabigail ir: drop unused data members from {environment,qualified_name}_setter * src/abg-ir.cc: drop unused data members 2019-04-15 Matthias Maennich via libabigail suppressions: drop unused parameter from type_is_suppressed * include/abg-suppression-priv.h: drop unused argument from type_is_suppressed 2019-04-15 Matthias Maennich via libabigail viz-dot: remove unused members from dot * include/abg-viz-dot.h: remove unused data members from 'dot' 2019-04-15 Matthias Maennich via libabigail add missing virtual destructors * include/abg-comparison.h: add virtual destructor for corpus_diff and diff_node_visitor * include/abg-corpus.h: add virtual destructor for corpus * include/abg-reporter.h: add virtual destructor for reporter_base * include/abg-traverse.h: add virtual destructor for traversable_base 2019-04-15 Matthias Maennich via libabigail diff-utils: point: fix postfix decrement/increment operator * include/abg-diff-utils.h: fix postfix dec/inc operator 2019-04-15 Matthias Maennich via libabigail abg-reader: clarify boolean use of assignment * src/abg-reader.cc: clarify boolean use of assignment 2019-04-15 Matthias Maennich via libabigail abilint: fix return types bool -> int * tools/abilint.cc: return int in main rather than bool. * tests/print-diff-tree.cc: Likewise. 2019-04-15 Matthias Maennich via libabigail abg-fwd.h: fix mismatched tags for ir_node_visitor * include/abg-fwd.h: forward-declare ir_node_visitor as class 2019-04-16 Dodji Seketeli Bug 24431 - ELF reader can't interpret ksymtab with Kernel 4.19+ * src/abg-dwarf-reader.cc (enum kernel_symbol_table_kind): Move this enum at the top. (enum ksymtab_format): Define new enum. (read_context::{ksymtab_format_, ksymtab_entry_size_, nb_ksymtab_entries_, nb_ksymtab_gpl_entries_}): Define new data members. (read_context::initiliaze): Initialize the new data members above. (read_context::{get_ksymtab_format, get_ksymtab_symbol_value_size, get_ksymtab_entry_size, get_nb_ksymtab_entries, get_nb_ksymtab_gpl_entries, maybe_adjust_sym_address_from_v4_19_ksymtab}): Define new member functions. (read_context::load_kernel_symbol_table): Support loading from both pre and post v4.19 linux kernels with their different ksymtab formats. Add more comments. 2019-04-10 Dodji Seketeli Bug 24430 - Fold away const for array types * include/abg-fwd.h (is_array_of_qualified_element): Declare 2 overloads of this function. (re_canonicalize): Declare a new function. * include/abg-ir.h (class {decl_base, type_base}): Declare re_canonicalize as a friend of these classes. * src/abg-dwarf-reader.cc (maybe_strip_qualification): Detect qualified array types and appropriately qualifies the array element type, instead of qualifying the array type itself. Re-canonicalize the resulting type if necessary. * src/abg-ir.cc (is_array_of_qualified_element): Define 2 overloads of this function. (re_canonicalize): Define new function. * tests/data/Makefile.am: The two new test binary input files PR24430-fold-qualified-array-clang and PR24430-fold-qualified-array-gcc to source distribution, as well as the expected reference output. * tests/data/test-annotate/test15-pr18892.so.abi: Adjust. * tests/data/test-annotate/test17-pr19027.so.abi: Likewise. * tests/data/test-annotate/test19-pr19023-libtcmalloc_and_profiler.so.abi: Likewise. * tests/data/test-annotate/test21-pr19092.so.abi: Likewise. * tests/data/test-diff-filter/PR24430-fold-qualified-array-clang: New binary test input coming from the bug report. * tests/data/test-diff-filter/PR24430-fold-qualified-array-gcc: Likewise. * tests/data/test-diff-filter/PR24430-fold-qualified-array-report-0.txt: Expected reference abi difference. * tests/data/test-diff-filter/test33-report-0.txt: Adjust. * tests/data/test-diff-pkg/nss-3.23.0-1.0.fc23.x86_64-report-0.txt: Likewise. * tests/data/test-read-dwarf/PR22122-libftdc.so.abi: Likewise. * tests/data/test-read-dwarf/test12-pr18844.so.abi: Likewise. * tests/data/test-read-dwarf/test15-pr18892.so.abi: Likewise. * tests/data/test-read-dwarf/test17-pr19027.so.abi: Likewise. * tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi: Likewise. * tests/data/test-read-dwarf/test21-pr19092.so.abi: Likewise. * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: Likewise. * tests/test-diff-filter.cc: Add the new binary test input to this test harness. 2019-04-09 Dodji Seketeli Fix "Add test for the fix for PR24410" * tests/data/test-diff-pkg/PR24410-new/poppler-debuginfo-0.73.0-8.fc30.x86_64.rpm: Really add this. * tests/data/test-diff-pkg/PR24410-new/poppler-qt5-0.73.0-8.fc30.x86_64.rpm: Likewise. * tests/data/test-diff-pkg/PR24410-new/poppler-qt5-debuginfo-0.73.0-8.fc30.x86_64.rpm: Likewise. * tests/data/test-diff-pkg/PR24410-new/poppler-qt5-devel-0.73.0-8.fc30.x86_64.rpm: Likewise. * tests/data/test-diff-pkg/PR24410-old/poppler-debuginfo-0.73.0-4.fc30.x86_64.rpm: Likewise. * tests/data/test-diff-pkg/PR24410-old/poppler-qt5-0.73.0-4.fc30.x86_64.rpm: Likewise. * tests/data/test-diff-pkg/PR24410-old/poppler-qt5-debuginfo-0.73.0-4.fc30.x86_64.rpm: Likewise. * tests/data/test-diff-pkg/PR24410-old/poppler-qt5-devel-0.73.0-4.fc30.x86_64.rpm: Likewise. * tests/data/test-diff-pkg/PR24410-report-0.txt: Likewise. 2019-04-09 Dodji Seketeli Add test for the fix for PR24410 * tests/data/test-diff-pkg/PR24410-new/poppler-debuginfo-0.73.0-8.fc30.x86_64.rpm: Add new test input. * tests/data/test-diff-pkg/PR24410-new/poppler-qt5-0.73.0-8.fc30.x86_64.rpm: Add new test input. * tests/data/test-diff-pkg/PR24410-new/poppler-qt5-debuginfo-0.73.0-8.fc30.x86_64.rpm: Add new test input. * tests/data/test-diff-pkg/PR24410-new/poppler-qt5-devel-0.73.0-8.fc30.x86_64.rpm: Add new test input. * tests/data/test-diff-pkg/PR24410-old/poppler-debuginfo-0.73.0-4.fc30.x86_64.rpm: Add new test input. * tests/data/test-diff-pkg/PR24410-old/poppler-qt5-0.73.0-4.fc30.x86_64.rpm: Add new test input. * tests/data/test-diff-pkg/PR24410-old/poppler-qt5-debuginfo-0.73.0-4.fc30.x86_64.rpm: Add new test input. * tests/data/test-diff-pkg/PR24410-old/poppler-qt5-devel-0.73.0-4.fc30.x86_64.rpm: Add new test input. * tests/data/test-diff-pkg/PR24410-report-0.txt: Add new test input. * tests/data/Makefile.am: Add the test input above to source distribution. * tests/test-diff-pkg.cc: Make this test harness use the new input rpms above. 2019-04-05 Dodji Seketeli Propagate private type diff category through refs/qualified type diffs * src/abg-comparison.cc (suppression_categorization_visitor::visit_end): Propagate suppressed and private type diff categories for reference and qualified types. For qualified types, make sure they don't have local changes. Even when there are no local changes, do not propagate private diff categories to typedefs. * tests/data/test-annotate/test17-pr19027.so.abi: Adjust. * tests/data/test-annotate/test21-pr19092.so.abi: Likewise. * tests/data/test-read-dwarf/PR22122-libftdc.so.abi: Likewise. * tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: Likewise. * tests/data/test-read-dwarf/test11-pr18828.so.abi: Likewise. * tests/data/test-read-dwarf/test12-pr18844.so.abi: Likewise. * tests/data/test-read-dwarf/test16-pr18904.so.abi: Likewise. * tests/data/test-read-dwarf/test17-pr19027.so.abi: Likewise. * tests/data/test-read-dwarf/test21-pr19092.so.abi: Likewise. * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: Likewise. * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Likewise. 2019-04-05 Dodji Seketeli Fix anonymous union constructed under the wrong context * src/abg-dwarf-reader.cc (add_or_update_class_type) (add_or_update_union_type): Only reuse anonymous class/union types which have the same scope as the current one. 2019-04-08 Dodji Seketeli Internal pretty repr of union cannot be flat representation * src/abg-ir.cc (union_decl::get_pretty_representation): Anonymous internal pretty representation of unin is its fully qualified name. 2019-04-08 Dodji Seketeli Misc comment fixes * src/abg-comp-filter.cc (has_harmless_name_change): Fix comment. * src/abg-ir.cc (var_decl::get_qualified_name): Likewise. 2019-03-29 Dodji Seketeli Bump version number to 1.7 * configure.ac: Bump version number to 1.7 2019-03-28 Dodji Seketeli Update website mainpage for 1.6 release * doc/website/mainpage.txt: Update for 1.6 release. 2019-03-27 Dodji Seketeli Update ChangeLog * ChangeLog: Update automatically by using "make update-changelog". 2019-03-27 Dodji Seketeli Update NEWS file for 1.6 * NEWS: Update for 1.6 2019-03-27 Dodji Seketeli Add missing assignment operators * include/abg-interned-str.h (interned_string::operator=): Define assignment operator. * include/abg-ir.h ({location, enum_type_decl::enumerator}::operator=): Declare assignment operator. * src/abg-ir.cc (enum_type_decl::enumerator::operator=): Define assignment operator. 2019-03-25 Dodji Seketeli Bug 24378 - DW_TAG_subroutine_type as a DIE scope causes infinite loop * src/abg-dwarf-reader.cc (get_scope_die): Look through DW_TAG_subroutine_type to get the scope of a given DIE. * tests/data/Makefile.am: Add the two new files below to source distribution. * tests/data/test-read-dwarf/PR24378-fn-is-not-scope.abi: New reference test output. * tests/data/test-read-dwarf/PR24378-fn-is-not-scope.o: New binary test input. * tests/test-read-dwarf.cc (in_out_specs): Add the new test input to the test harness. 2019-03-22 Dodji Seketeli Misc cleanups * src/abg-dwarf-reader.cc (build_function_type): Cleanup indentation and comments. 2019-03-21 Dodji Seketeli Better pointer name equality optimization in DIE de-duplication code * src/abg-dwarf-reader.cc (die_is_pointer_reference_or_typedef_type) (die_peel_pointer_and_typedef): Define new static functions. (compare_dies_string_attribute_value): Turn this function into a static one. (compare_dies_cu_decl_file): Make this function compare the cu decl file name of the leaf type of the pointer, not just the one of the pointer itself. (compare_as_decl_dies): Compare the DWARF tags too. (compare_dies): Simplify logic. 2019-03-21 Dodji Seketeli Add ir::{lookup_data_member, get_function_parameter} * include/abg-ir.h (lookup_data_member, get_function_parameter): Declare new functions. * src/abg-ir.cc (lookup_data_member, get_function_parameter): Define them. 2019-03-21 Dodji Seketeli Better detection of void* to something* change * include/abg-ir.h (is_void_type): Add a new overload that takes type_base*. * src/abg-ir.cc (is_void_type): Define the new overload that takes type_base*. (is_void_pointer_type): Look through typedefs in the pointed-to type. 2019-03-21 Dodji Seketeli PR24257 - Handle DW_TAG_typedef with no underlying type * src/abg-dwarf-reader.cc (build_typedef_type): DW_TAG_typedef with no underlying type means typedef void foo. * tests/data/test-annotate/test15-pr18892.so.abi: Adjust. * tests/data/test-annotate/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: Likewise. * tests/data/test-annotate/test19-pr19023-libtcmalloc_and_profiler.so.abi: Likewise. * tests/data/test-annotate/test20-pr19025-libvtkParallelCore-6.1.so.abi: Likewise. * tests/data/test-annotate/test21-pr19092.so.abi: Likewise. * tests/data/test-read-dwarf/PR22015-libboost_iostreams.so.abi: Likewise. * tests/data/test-read-dwarf/PR22122-libftdc.so.abi: Likewise. * tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: Likewise. * tests/data/test-read-dwarf/test11-pr18828.so.abi: Likewise. * tests/data/test-read-dwarf/test12-pr18844.so.abi: Likewise. * tests/data/test-read-dwarf/test15-pr18892.so.abi: Likewise. * tests/data/test-read-dwarf/test16-pr18904.so.abi: Likewise. * tests/data/test-read-dwarf/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: Likewise. * tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi: Likewise. * tests/data/test-read-dwarf/test20-pr19025-libvtkParallelCore-6.1.so.abi: Likewise. * tests/data/test-read-dwarf/test21-pr19092.so.abi: Likewise. * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: Likewise. * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Likewise. 2019-02-20 Dodji Seketeli Do not build DIE -> parent map just because we see an asm TU * src/abg-dwarf-reader.cc: 2019-02-19 Dodji Seketeli Avoid over-suppressing fns & vars when analysing the Kernel * include/abg-dwarf-reader.h (get_ignore_symbol_table): Take a const read_context&. * src/abg-dwarf-reader.cc (get_ignore_symbol_table): Likewise. (function_is_suppressed): When the symbol table optimization is in flight -- that is, when no symbol table has been loaded -- do not try to see if a given function symbol was exported at the ELF level or not. Just look at if the function was suppressed or not. (variable_is_suppressed): Likewise for variables. 2019-02-08 Dodji Seketeli Bug 24188 - Assertion failed while analysing a Fortran binary * src/abg-dwarf-reader.cc (compare_as_type_dies): Handle DW_TAG_string_type DIEs here. (compare_dies): Handle DW_TAG_string_type DIEs by using compare_as_type_dies. * tests/data/test-diff-pkg/netcdf-fortran-debuginfo-4.4.4-10.fc29.x86_64.rpm: New test RPM. * tests/data/test-diff-pkg/netcdf-fortran-debuginfo-4.4.4-11.fc30.x86_64.rpm: Likewise. * tests/data/test-diff-pkg/netcdf-fortran-mpich-4.4.4-10.fc29.x86_64-4.4.4-11.fc30.x86_64-report-0.txt: New expected test reference output. * tests/data/test-diff-pkg/netcdf-fortran-mpich-4.4.4-10.fc29.x86_64.rpm: New test RPM. * tests/data/test-diff-pkg/netcdf-fortran-mpich-4.4.4-11.fc30.x86_64.rpm: Likewise. * tests/data/test-diff-pkg/netcdf-fortran-mpich-debuginfo-4.4.4-10.fc29.x86_64.rpm: Likewise. * tests/data/test-diff-pkg/netcdf-fortran-mpich-debuginfo-4.4.4-11.fc30.x86_64.rpm: Likewise. * tests/data/test-diff-pkg/netcdf-fortran-mpich-devel-4.4.4-10.fc29.x86_64.rpm: Likewise. * tests/data/test-diff-pkg/netcdf-fortran-mpich-devel-4.4.4-11.fc30.x86_64.rpm: Likewise. * tests/data/Makefile.am: Add the new test input material above to source distribution. * tests/test-diff-pkg.cc (in_out_spec): Add the new test RPMs above to the set of RPMs to use as test input. 2019-02-06 Dodji Seketeli Bug 24157 - Wrong support of Ada ranges * include/abg-ir.h (array_type_def::subrange_type::bound_value): Define new class. (array_type_def::subrange_type::subrange_type): Adjust to use the new bound_value type for bound values. (array_type_def::subrange_type::{get_upper_bound, get_lower_bound, set_upper_bound, set_lower_bound}): Return or take int64_t rather than size_t. (array_type_def::subrange_type::get_length): Return uint64_t rather than size_t. * src/abg-dwarf-reader.cc (die_signed_constant_attribute) (die_constant_attribute, die_attribute_has_form) (die_attribute_is_signed, die_attribute_is_unsigned) (die_attribute_has_no_signedness): Define new static functions. (get_default_array_lower_bound): Return uint64_t rather than int. (build_subrange_type): Use the new array_type_def::subrange_type::bound_value type for bound values. Use the new die_constant_attribute function, rather than die_unsigned_constant_attribute to fecth the bound values. * src/abg-ir.cc (array_type_def::subrange_type::bound_value::{bound_value, get_signedness, set_signedness, get_signed_value, get_unsigned_value, set_unsigned, set_signed}): Define new member functions. (array_type_def::subrange_type::priv::{lower_bound_, upper_bound}): Use the new class bound_value. (array_type_def::subrange_type::priv::priv): Adjust to use the new bound_value class to hold bound values. (array_type_def::subrange_type::subrange_type): Likewise. (array_type_def::subrange_type::{get_upper_bound, get_lower_bound, set_upper_bound, set_lower_bound}): Return or take int64_t rather than size_t. (array_type_def::subrange_type::get_length): Return uint64_t rather than size_t. (types_have_similar_structure): Handle array_type_def::subrange_type * src/abg-reader.cc (build_subrange_type): Use the new array_type_def::subrange_type::bound_value to hold bound values. * tests/data/test-diff-pkg/GtkAda-debuginfo-2.24.2-29.fc29.x86_64.rpm: New binary RPM as test input. * tests/data/test-diff-pkg/GtkAda-debuginfo-2.24.2-30.fc30.x86_64.rpm: Likewise. * tests/data/test-diff-pkg/GtkAda-devel-2.24.2-29.fc29.x86_64.rpm: Likewise. * tests/data/test-diff-pkg/GtkAda-devel-2.24.2-30.fc30.x86_64.rpm: Likewise. * tests/data/test-diff-pkg/GtkAda-gl-2.24.2-29.fc29.x86_64--2.24.2-30.fc30.x86_64-report-0.txt: New expected test output. * tests/data/test-diff-pkg/GtkAda-gl-2.24.2-29.fc29.x86_64.rpm: New binary RPM as test input. * tests/data/test-diff-pkg/GtkAda-gl-2.24.2-30.fc30.x86_64.rpm: Likewise. * tests/data/test-diff-pkg/GtkAda-gl-debuginfo-2.24.2-29.fc29.x86_64.rpm: Likewise. * tests/data/test-diff-pkg/GtkAda-gl-debuginfo-2.24.2-30.fc30.x86_64.rpm: Likewise. * tests/data/Makefile.am: Add the new test material above to source distribution. * tests/test-diff-pkg.cc (in_out_specs): Add the new input testing RPMs in here. 2019-01-30 Dodji Seketeli Small apidoc fix * src/abg-comparison.cc (enum_diff::changed_enumerators): Fix apidoc. 2019-01-30 Dodji Seketeli Bug 24139 - Support suppressing some enumerator changes * doc/manuals/libabigail-concepts.rst: Document the new 'changed_enumerators' property. * include/abg-suppression.h (type_suppression::{g, s}et_changed_enumerator_names): Declare two new member functions. * src/abg-suppression-priv.h (type_suppression::priv::changed_enumerator_names_): Add a new data member. * src/abg-suppression.cc (type_suppression::{g,s}et_changed_enumerator_names): Define two new member functions. (type_suppression::suppresses_diff): Support evaluating the new 'changed_enumerators = '. (read_type_suppression): Read the new list property'changed_enumerators" and store it into the type_suppression using the new type_suppression::set_changed_enumerator_names (). * tests/data/test-diff-suppr/libtest4{0,1}-enumerator-changes-v{0,1}.so: Add new test inpujts. * tests/data/test-diff-suppr/test4{0,1}-enumerator-changes-0.suppr: Add a new suppr spec for this new test. * tests/data/test-diff-suppr/test4{0,1}-enumerator-changes-report-0.txt: The default report. * tests/data/test-diff-suppr/test4{0,1}-enumerator-changes-v{0,1}.cc: Add Source code of libtest4{0,1}-enumerator-changes-v{0,1}.so. * tests/data/Makefile.am: Add the test files above to source distribution. * tests/test-diff-suppr.cc: Add the test input files above to the harness. 2019-01-25 Dodji Seketeli Better comments in the comparison engine * include/abg-comparison.h (enum diff_category): Add comments to describe what to update when a new enumerator is added to this enum. * src/abg-comp-filter.cc (has_fn_return_type_cv_qual_change): Fix comment thinko here. 2019-01-25 Dodji Seketeli Bug 20175 - Classify CV qual changes in variable type as harmless * include/abg-comparison.h (VAR_TYPE_CV_CHANGE_CATEGORY): Add new enumerator to diff_category enum. (EVERYTHING_CATEGORY): Update this enumerator. * src/abg-comp-filter.cc (type_diff_has_cv_qual_change_only): Support array diff nodes carrying a cv qual change on the element type. (has_var_type_cv_qual_change): Define new static function. (categorize_harmless_diff_node): Use the new has_var_type_cv_qual_change to categorize variable diff node with cv qual change on its type as harmless. * src/abg-comparison.cc (get_default_harmless_categories_bitmap): Update this. (operator<<(ostream& o, diff_category c)): Likewise. * include/abg-ir.h (equals_modulo_cv_qualifier): Declare new ... * src/abg-ir.cc (equals_modulo_cv_qualifier): ... function. * 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: Update expected test output. * tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-2.txt: Likewise. * tests/data/Makefile.am: Add the new test material below to source distribution. * tests/data/test-diff-pkg/nss-3.23.0-1.0.fc23.x86_64-report-0.txt: New expecte test output. * tests/data/test-diff-pkg/nss-3.23.0-1.0.fc23.x86_64.rpm: New test input. * tests/data/test-diff-pkg/nss-3.24.0-1.0.fc23.x86_64.rpm: Likewise. * tests/data/test-diff-pkg/nss-debuginfo-3.23.0-1.0.fc23.x86_64.rpm: Likewise. * tests/data/test-diff-pkg/nss-debuginfo-3.24.0-1.0.fc23.x86_64.rpm: Likewise. * tests/data/test-diff-pkg/nss-devel-3.23.0-1.0.fc23.x86_64.rpm: Likewise. * tests/data/test-diff-pkg/nss-devel-3.24.0-1.0.fc23.x86_64.rpm: Likewise. * tests/test-diff-pkg.cc (in_out_specs): Add the test input above to the test harness. 2019-01-24 Dodji Seketeli Properly add the new rust tests to EXTRA_DIST * tests/data/Makefile.am: Add the new rust tests to EXTRA_DIST. 2019-01-24 Dodji Seketeli Conditionalize the Rust support regression test * tests/test-diff-dwarf.cc: Run the rust support regression test only if we support Rust on the platform. * tests/test-utils.h: Include config.h. 2019-01-24 Dodji Seketeli Fix a typo in the recent Rust support and update regression tests * configure.ac: Fix the typo HAS_LANG_Rust into HAS_DW_LANG_Rust. * tests/data/test-diff-dwarf/test46-readme.txt: Add new file to the test suite. * tests/data/test-diff-dwarf/test46-rust-libone.so: Likewise. * tests/data/test-diff-dwarf/test46-rust-libtwo.so: Likewise. * tests/data/test-diff-dwarf/test46-rust-report-0.txt: Likewise. * tests/test-diff-dwarf.cc (in_out_specs): Update the tests array to compare the two new binaries included above. 2019-01-18 Dodji Seketeli Overhaul detection the DW_LANG_* enumerators from dwarf.h * configure.ac: Detect the presence of DW_LANG_{UPC, D, Python, Go, C11, C_plus_plus_03, C_plus_plus_11, C_plus_plus_14, Mips_Assembler, Rust} and define the corresponding HAVE_DW_LANG_*_enumerator macro accordingly. * include/abg-ir.h (LANG_C_plus_plus_03): Define this new enumerator in the translation_unit::language enum. * src/abg-dwarf-reader.cc (dwarf_language_to_tu_language): Use the new HAVE_DW_LANG_*_enumerator macros. (get_default_array_lower_bound): Support the translation_unit::LANG_C_plus_plus_03 enumerator. * src/abg-ir.cc (is_cplus_plus_language): Support the translation_unit::LANG_C_plus_plus_03 enumerator. 2019-01-18 Dodji Seketeli Fix a thinko * src/abg-dwarf-reader.cc (dwarf_language_to_tu_language): Fix a thinko in the detection of the support of the DW_LANG_Rust enumerator. 2019-01-17 Mark Wielaard Conditionalize the use of DW_LANG_C_plus_plus_03 and DW_LANG_Rust * include/abg-ir.h (LANG_C_plus_plus_03): Add this new language enum to "enum translation_unit::language". * src/abg-dwarf-reader.cc (dwarf_language_to_tu_language): Do not use DW_LANG_Rust or DW_LANG_C_plus_plus_03 if these are not defined. (get_default_array_lower_bound): Handle the new translation_unit::LANG_C_plus_plus_03 enumerator. 2019-01-17 Dodji Seketeli Support some new DWARF language encoding for C and C++ * src/abg-dwarf-reader.cc (dwarf_language_to_tu_language): Support new DW_LANG_{C11, C_plus_plus_03, C_plus_plus_11, C_plus_plus_14} enumerators. 2019-01-17 Dodji Seketeli Add (very) basic support for Rust * include/abg-ir.h (LANG_Rust): Add this new enumerator to the "enum language" enum. * src/abg-dwarf-reader.cc (dwarf_language_to_tu_language): Handle the Rust language. (get_default_array_lower_bound): Likewise. 2019-01-15 Dodji Seketeli Separate public types of first binary from those of the second * include/abg-dwarf-reader.h (read_context_get_path): Declare new function. * include/abg-reader.h (read_context_get_path): Likewise. * src/abg-dwarf-reader.cc (read_context_get_path): Define new function. * src/abg-reader.cc (read_context_get_path): Likewise. * tools/abidiff.cc (set_suppressions): Set the suppression specification derived from the --headers-dir1 option only for the first binary, and similarly, from the --headers-dir2 option only for the second binary. 2019-01-09 Dodji Seketeli Bug 23044 - Assertions with side effects * configure.ac: * include/abg-diff-utils.h: * include/abg-fwd.h: * src/abg-comp-filter.cc: * src/abg-comparison-priv.h: * src/abg-comparison.cc: * src/abg-corpus-priv.h: * src/abg-corpus.cc: * src/abg-default-reporter.cc: * src/abg-diff-utils.cc: * src/abg-dwarf-reader.cc: * src/abg-hash.cc: * src/abg-ini.cc: * src/abg-ir.cc: * src/abg-leaf-reporter.cc: * src/abg-reader.cc: * src/abg-reporter-priv.cc: * src/abg-suppression.cc: * src/abg-tools-utils.cc: * src/abg-workers.cc: * src/abg-writer.cc: * tests/test-diff-filter.cc: * tests/test-diff-pkg.cc: * tests/test-read-dwarf.cc: * tests/test-read-write.cc: * tests/test-types-stability.cc: * tools/abicompat.cc: * tools/abidw.cc: * tools/abipkgdiff.cc: 2019-01-07 Dodji Seketeli Update copyright for 2019 * include/abg-comp-filter.h: Update copyright for 2019 * include/abg-comparison.h: Update copyright for 2019 * include/abg-config.h: Update copyright for 2019 * include/abg-corpus.h: Update copyright for 2019 * include/abg-diff-utils.h: Update copyright for 2019 * include/abg-dwarf-reader.h: Update copyright for 2019 * include/abg-fwd.h: Update copyright for 2019 * include/abg-hash.h: Update copyright for 2019 * include/abg-ini.h: Update copyright for 2019 * include/abg-interned-str.h: Update copyright for 2019 * include/abg-ir.h: Update copyright for 2019 * include/abg-libxml-utils.h: Update copyright for 2019 * include/abg-libzip-utils.h: Update copyright for 2019 * include/abg-reader.h: Update copyright for 2019 * include/abg-reporter.h: Update copyright for 2019 * include/abg-sptr-utils.h: Update copyright for 2019 * include/abg-suppression.h: Update copyright for 2019 * include/abg-tools-utils.h: Update copyright for 2019 * include/abg-traverse.h: Update copyright for 2019 * include/abg-viz-common.h: Update copyright for 2019 * include/abg-viz-dot.h: Update copyright for 2019 * include/abg-viz-svg.h: Update copyright for 2019 * include/abg-workers.h: Update copyright for 2019 * include/abg-writer.h: Update copyright for 2019 * src/abg-comp-filter.cc: Update copyright for 2019 * src/abg-comparison-priv.h: Update copyright for 2019 * src/abg-comparison.cc: Update copyright for 2019 * src/abg-config.cc: Update copyright for 2019 * src/abg-corpus-priv.h: Update copyright for 2019 * src/abg-corpus.cc: Update copyright for 2019 * src/abg-default-reporter.cc: Update copyright for 2019 * src/abg-diff-utils.cc: Update copyright for 2019 * src/abg-dwarf-reader.cc: Update copyright for 2019 * src/abg-hash.cc: Update copyright for 2019 * src/abg-ini.cc: Update copyright for 2019 * src/abg-internal.h: Update copyright for 2019 * src/abg-ir-priv.h: Update copyright for 2019 * src/abg-ir.cc: Update copyright for 2019 * src/abg-leaf-reporter.cc: Update copyright for 2019 * src/abg-libxml-utils.cc: Update copyright for 2019 * src/abg-libzip-utils.cc: Update copyright for 2019 * src/abg-reader.cc: Update copyright for 2019 * src/abg-reporter-priv.cc: Update copyright for 2019 * src/abg-reporter-priv.h: Update copyright for 2019 * src/abg-sptr-utils.cc: Update copyright for 2019 * src/abg-suppression-priv.h: Update copyright for 2019 * src/abg-suppression.cc: Update copyright for 2019 * src/abg-tools-utils.cc: Update copyright for 2019 * src/abg-traverse.cc: Update copyright for 2019 * src/abg-viz-common.cc: Update copyright for 2019 * src/abg-viz-dot.cc: Update copyright for 2019 * src/abg-viz-svg.cc: Update copyright for 2019 * src/abg-workers.cc: Update copyright for 2019 * src/abg-writer.cc: Update copyright for 2019 * tests/print-diff-tree.cc: Update copyright for 2019 * tests/test-abicompat.cc: Update copyright for 2019 * tests/test-abidiff-exit.cc: Update copyright for 2019 * tests/test-abidiff.cc: Update copyright for 2019 * tests/test-alt-dwarf-file.cc: Update copyright for 2019 * tests/test-core-diff.cc: Update copyright for 2019 * tests/test-diff-dwarf-abixml.cc: Update copyright for 2019 * tests/test-diff-dwarf.cc: Update copyright for 2019 * tests/test-diff-filter.cc: Update copyright for 2019 * tests/test-diff-pkg.cc: Update copyright for 2019 * tests/test-diff-suppr.cc: Update copyright for 2019 * tests/test-diff2.cc: Update copyright for 2019 * tests/test-ini.cc: Update copyright for 2019 * tests/test-ir-walker.cc: Update copyright for 2019 * tests/test-lookup-syms.cc: Update copyright for 2019 * tests/test-read-dwarf.cc: Update copyright for 2019 * tests/test-read-write.cc: Update copyright for 2019 * tests/test-types-stability.cc: Update copyright for 2019 * tests/test-utils.cc: Update copyright for 2019 * tests/test-utils.h: Update copyright for 2019 * tests/test-write-read-archive.cc: Update copyright for 2019 * tools/abiar.cc: Update copyright for 2019 * tools/abicompat.cc: Update copyright for 2019 * tools/abidiff.cc: Update copyright for 2019 * tools/abidw.cc: Update copyright for 2019 * tools/abilint.cc: Update copyright for 2019 * tools/abipkgdiff.cc: Update copyright for 2019 * tools/abisym.cc: Update copyright for 2019 * tools/binilint.cc: Update copyright for 2019 * tools/kmidiff.cc: Update copyright for 2019 * update-copyright.sh: Update new year to 2019 2018-12-06 Xiao Jia via libabigail Some documentation fixes * COMPILING: Add the pkg-config dependency. * doc/manuals/kmidiff.rst: Replace the redundant --full-impact documentation with the proper --impacted-interfaces one. 2018-11-29 Dodji Seketeli Add basic support for Fortran binaries * src/abg-dwarf-reader.cc (die_pretty_print_type): Support DW_TAG_string_type DIEs. They all have the same representation for now. 2018-11-08 Dodji Seketeli Some light style change in abidiff.cc * tools/abidiff.cc (adjust_diff_context_for_kmidiff): Take a reference to diff_context rather than a pointer. (main): Adjust. 2018-11-08 Dodji Seketeli Add a --fail-no-debug-info to abidiff * doc/manuals/abidiff.rst: Document the new --fail-no-debug-info option. * tools/abidiff.cc (options::fail_no_debug_info): Define new data member. (display_usage): Provide a help string for the new --fail-no-debug-info option. (parse_command_line): Parse the new option. (main): If --fail-no-debug-info and no debug info was found, or not alternate debuginfo file was found, bail out. 2018-11-08 Dodji Seketeli Support having several debuginfo search dirs for a binary * doc/manuals/abidiff.rst: Adjust doc for the --debug-info-dir{1,2} that can now be provided several times. * include/abg-dwarf-reader.h ({create, reset}_read_context) (read_corpus_from_elf): Take a vector of debug info root dirs. * include/abg-tools-utils.h (trim_leading_string) (find_file_under_dir, make_path_absolute_to_be_freed) (convert_char_stars_to_char_star_stars): Declare new functions. * src/abg-dwarf-reader.cc (find_alt_debug_info_link): Renamed find_alt_debug_info_location into this. (find_alt_debug_info_path): Define new static function. (find_alt_debug_info): Take a vector of debug info root dirs. Use the new find_alt_debug_info_path to look into the debug info root dirs for the alt debug info. (read_context::debug_info_root_paths_): Define new data member. (read_context::read_context): Take a vector of debug info root dirs and initialize the new read_context::debug_info_root_paths_. (read_context::{initialize, create_default_dwfl}): Take a vector of debug info root dirs and adjust. (read_context::{add_debug_info_root_paths, add_debug_info_root_path, find_alt_debug_info}): Define new member functions. (read_context::load_debug_info): Look into the debug info roots for split debug info files. (create_read_context, read_corpus_from_elf): Take a vector of debug info root dirs and adjust. (has_alt_debug_info): Adjust. * src/abg-tools-utils.cc (trim_leading_string) (make_path_absolute_to_be_freed, find_file_under_dir) (convert_char_stars_to_char_star_stars): Define new functions. (entry_of_file_with_name): Define new static function. (build_corpus_group_from_kernel_dist_under): Adjust. * tests/print-diff-tree.cc (main): Adjust. * tests/test-diff-dwarf.cc (main): Adjust. * tests/test-ir-walker.cc (main): Adjust. * tests/test-read-dwarf.cc (main): Adjust. * tools/abicompat.cc (main): Adjust. * tools/abidiff.cc (options::di_root_paths{1,2}): Changed di_root_path{1,2} into this, change their types into vectors of allocated char*. (options::prepared_di_root_paths{1,2}): Define new data members. (options::~options): Define new destructor. (parse_command_line): Adjust. (prepare_di_root_paths): Define new static function. (handle_error): Remove arguments input_file_name, debug_info_dir{1,2}. Now just take an instance of options instead. Adjust. (main): Adjust. * tools/abidw.cc (options::dir_root_paths): Renamed dir_root_path into this and make it be a vector of allocated char*. (options::prepared_di_root_paths): Define new data member. (options::~options): Free the allocated char* in options::dir_root_paths. (parse_command_line): Support several --debug-info-dir. (load_corpus_and_write_abixml): Adjust. (prepare_di_root_paths): Define static function. (main): Adjust. * tools/abilint.cc (main): Adjust. * tools/abipkgdiff.cc (compare): Adjust. 2018-10-26 Dodji Seketeli Update website for 1.5 * doc/website/mainpage.txt: Update website for 1.5 2018-10-26 Dodji Seketeli Bump version number to 1.6 * configure.ac: Bump version number to 1.6 2018-10-25 Dodji Seketeli Update ChangeLog for 1.5 * ChangeLog: Update automatically by calling make update-changelog. 2018-10-25 Dodji Seketeli Update NEWS file for 1.5 * NEWS: Update for 1.5 2018-10-18 Dodji Seketeli Bug rhbz1638554 - assertion failed in is_mostly_distinct_diff * src/abg-comp-filter.cc (is_mostly_distinct_diff): Handle the case of the type diff of the function parameter diff being a distinct diff. 2018-10-17 Dodji Seketeli Define UINT64_MAX when it's not defined * src/abg-dwarf-reader.cc: Define UINT64_MAX when it's not defined. 2018-10-16 Dodji Seketeli Better support array with unknown upper bound * include/abg-comparison.h (BENIGN_INFINITE_ARRAY_CHANGE_CATEGORY): A new enumerator in the diff_category enum. (EVERYTHING_CATEGORY): Adjust. * src/abg-comparison.cc (get_default_harmless_categories_bitmap): Adjust. (operator<<(ostream& o, diff_category)): Likewise. * include/abg-ir.h (array_type_def::subrange_type::is_infinite): Declare new member function. * src/abg-ir.cc (array_type_def::subrange_type::priv::infinite_): New data member. (array_type_def::subrange_type::priv::priv): Initialize it. (array_type_def::subrange_type::get_length): Better support unknown sized subrange. (array_type_def::subrange_type::is_infinite): Define new member function. * src/abg-comp-filter.cc (has_benign_infinite_array_change): Define new static function. (categorize_harmless_diff_node): Use the new has_benign_infinite_array_change above. * src/abg-dwarf-reader.cc (build_subrange_type): Better recognize a subrange type with unknown upper bound. Represent that with the new array_type_def::subrange_type::is_infinite member property. * src/abg-reader.cc (build_subrange_type): Likewise. * tests/data/test-abidiff/test-PR18166-libtirpc.so.abi: Adjust. * tests/data/test-annotate/libtest23.so.abi: Likewise. * tests/data/test-annotate/libtest24-drop-fns-2.so.abi: Likewise. * tests/data/test-annotate/libtest24-drop-fns.so.abi: Likewise. * tests/data/test-annotate/test14-pr18893.so.abi: Likewise. * tests/data/test-annotate/test19-pr19023-libtcmalloc_and_profiler.so.abi: Likewise. * tests/data/test-annotate/test7.so.abi: Likewise. * tests/data/test-read-dwarf/libtest23.so.abi: Likewise. * tests/data/test-read-dwarf/libtest24-drop-fns-2.so.abi: Likewise. * tests/data/test-read-dwarf/libtest24-drop-fns.so.abi: Likewise. * tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: Likewise. * tests/data/test-read-dwarf/test11-pr18828.so.abi: Likewise. * tests/data/test-read-dwarf/test14-pr18893.so.abi: Likewise. * tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi: Likewise. * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: Likewise. * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Likewise. 2018-10-11 Dodji Seketeli Add default suppression specification for the libvirt project * default.abignore: Suppress changes on functions with symbol version LIBVIRT_PRIVATE in libvirt.so.* shared objects. 2018-10-11 Dodji Seketeli Add default suppression specification for the krb5 project * default.abignore: Ignore changes about functions starting with krb5int_.*. 2018-10-03 Dodji Seketeli Misc comment fix * src/abg-suppression.cc (type_suppression::suppresses_diff): Fix comment. 2018-10-03 Dodji Seketeli Bug 23708 - categorize void* to pointer change as harmless * include/abg-comparison.h (VOID_PTR_TO_PTR_CHANGE_CATEGORY): New enumerator in the diff_category enum. Also, adjust the EVERYTHING_CATEGORY enumerator. * include/abg-fwd.h (is_void_pointer_type): Declare new function. * src/abg-comp-filter.cc (has_void_ptr_to_ptr_change): Define new static function and ... (categorize_harmless_diff_node): ... use it here. * src/abg-comparison.cc (get_default_harmless_categories_bitmap): Add the new abigail::comparison::VOID_PTR_TO_PTR_CHANGE_CATEGORY category in here. (operator<<(ostream& o, diff_category c)): Add support for the new VOID_PTR_TO_PTR_CHANGE_CATEGORY. * src/abg-ir.cc (is_void_pointer_type): Define new function. * tests/data/Makefile.am: Add the new test material below to source distribution. * tests/data/test-diff-filter/test47-filter-void-ptr-change-report-0.txt: New test reference output. * tests/data/test-diff-filter/test47-filter-void-ptr-change-v{0,1}.c: Source code of the new binary test input below. * tests/data/test-diff-filter/test47-filter-void-ptr-change-v{0,1}.o: New binary test input. * tests/test-diff-filter.cc: Add the test input/output above to test harness. 2018-10-02 Dodji Seketeli Categorize CV qualifier changes on fn return types as harmless * include/abg-comparison.h (FN_RETURN_TYPE_CV_CHANGE_CATEGORY): New enumerator for diff_category. (EVERYTHING_CATEGORY): Update. * src/abg-comp-filter.cc (type_diff_has_cv_qual_change_only): Factorize this function out of ... (has_fn_parm_type_cv_qual_change): ... this one. (has_fn_return_type_cv_qual_change): Define new static function. (categorize_harmless_diff_node): Use the new has_fn_return_type_cv_qual_change. * src/abg-comparison.cc (get_default_harmless_categories_bitmap): Adjust to add the new FN_RETURN_TYPE_CV_CHANGE_CATEGORY category. (operator<<(ostream& o, diff_category c)): Support the new FN_RETURN_TYPE_CV_CHANGE_CATEGORY. * tests/data/Makefile.am: Add the new test material below to source distribution. * tests/data/test-diff-filter/test46-fn-return-qual-change-report-0.txt: New reference output for the new input test. * tests/data/test-diff-filter/test46-fn-return-qual-change-v{0,1}.c: New source code for the new binary test input. * tests/data/test-diff-filter/test46-fn-return-qual-change-v{0,1}.o: New binary test input files. * tests/test-diff-filter.cc: Add the new test input above to test harness. 2018-10-01 Dodji Seketeli Fix propagation of private type suppression category * include/abg-comp-filter.h (has_harmful_name_change): Declare new function overloads. * include/abg-comparison.h (PRIVATE_TYPE_CATEGORY): New enumerator for diff_category; (EVERYTHING_CATEGORY): Adjust this enumerator in diff_category; (is_suppressed): Take an output parameter to say if the suppression is a private type suppression. * include/abg-suppression.h (is_private_type_suppr_spec): Take a const reference parameter and add an overload for a shared pointer. * src/abg-comp-filter.cc (has_harmful_name_change): Define new function. * src/abg-comparison-priv.h (diff::priv::is_filtered_out): Diffs of category PRIVATE_TYPE_CATEGORY are also considered filtered out. * src/abg-comparison.cc (diff::is_filtered_out): Adjust to account for canonical diffs of category PRIVATE_TYPE_CATEGORY. (diff::is_suppressed): Add an overload that takes a is_private_type output parameter. Re-write the old overload in terms of the new one. (operator<<(ostream& o, diff_category c)): Handle PRIVATE_TYPE_CATEGORY. (category_propagation_visitor::visit_end): Do not propagate PRIVATE_TYPE_CATEGORY here. Do not propagate HARMLESS_DECL_NAME_CHANGE_CATEGORY either, when the class does have a harmful decl name change. (suppression_categorization_visitor::visit_begin): Set the new PRIVATE_TYPE_CATEGORY category but do not propagate it. (suppression_categorization_visitor::visit_end): Add some comments. * src/abg-default-reporter.cc (default_reporter::report): Avoid reporting typedef underlying types that are in the PRIVATE_TYPE_CATEGORY category. * src/abg-suppression.cc (type_suppression::suppresses_diff): Do not peel typedefs if we are a private type suppression. (is_private_type_suppr_spec): Take a const reference. * tests/data/Makefile.am: Add the new test material below to source distribution. * tests/test-diff-suppr.cc: Use new test binary input. * tests/data/test-diff-filter/test7-report.txt: Adjust. * tests/data/test-diff-suppr/test39-opaque-type-report-0.txt: New test reference output. * tests/data/test-diff-suppr/test39-opaque-type-v{0,1}.c: Source code of new test binary input. * tests/data/test-diff-suppr/test39-opaque-type-v{0,1}.o: New test binary input. * tests/data/test-diff-suppr/test39-public-headers-dir/test39-header-v{0,1}.h: Source code of new test binary input. 2018-09-25 Dodji Seketeli PR23641 - confusion when a type definition DIE is matched by a supprspec and its decl DIEs aren't * src/abg-dwarf-reader.cc (get_opaque_version_of_type): If no pre-existing opaque version was found, a new one is created and returned. Take a needed "where_offset" parameter. (build_ir_node_from_die): Adjust the call to get_opaque_version_of_type. 2018-09-21 Dodji Seketeli PR23641 - Type definition DIE matched by a supprspec but not its decl *definition* of T, they will be dropped too. We'll end up with those two libraries that are identical (modulo the order in which libabigail sees type declarations and their definitions) and are considered different when a suppression specification makes us drop T: the second library appears to libabigail as if T was removed from it. This is the problem addressed by this patch. When the definition of a type T is suppressed because it's considered private then we look if there was a forward declaration for it elsewhere, that is not matched by the private type suppression specification. If we encountered such a type declaration then it means that declaration is in effect an "opaque" version of T. So rather than just dropping T altogether, we keep (and build an IR) for its opaque version only. And we drop the definition of T. This seems to fix the issue. I can't seem to reproduce the slight re-ordering of DIEs descriptions that uncover the issue so I'll rely on integration tests to catch future regressions on this issue, rather than on unit tests. Sigh. * include/abg-tools-utils.h (PRIVATE_TYPES_SUPPR_SPEC_NAME): Remove this extern constant definition. * src/abg-dwarf-reader.cc (type_is_suppressed): Add an overload that takes an additional type_is_private output parameter. (get_opaque_version_of_type): New static function. (build_ir_node_from_die): For class types, get the opaque version for suppressed private types rather than dropping them altogether. * src/abg-reader.cc (type_is_suppressed): Adjust. * src/abg-suppression-priv.h (type_is_suppressed): Add an overload that takes a type_is_private output parameter. * include/abg-suppression.h (get_private_types_suppr_spec_label) (is_private_type_suppr_spec): Declare new functions. * src/abg-suppression.cc (get_private_types_suppr_spec_label, is_private_type_suppr_spec): Define new functions. (suppression_matches_type_name_or_location): Use the new get_private_types_suppr_spec_label rather than a global extern variable. * src/abg-tools-utils.cc (handle_fts_entry): Adjust to use the new get_private_types_suppr_spec_label. (gen_suppr_spec_from_headers): Handle the case or an empty headers root dir. 2018-09-03 Dodji Seketeli Add option to avoid walking abigail::ir nodes twice * include/abg-ir.h (struct ir_node_visitor): Make this be a class. Add a private data member to it, following the 'pimpl' idiom. (ir_node_visitor::{allow_visiting_already_visited_type_node, mark_type_node_as_visited, forget_visited_type_nodes, type_node_has_been_visited}): Declare new member functions. * src/abg-ir.cc ({type_base, type_decl, scope_type_decl, qualified_type_decl, pointer_type_def, reference_type_def, array_type_def, enum_type_decl, typedef_decl, class_or_union, class_decl, union_decl}::traverse): Avoid re-visiting the type node if the visitor was configured as such. (struct ir_node_visitor::priv): Define new struct. (ir_node_visitor::{allow_visiting_already_visited_type_node, mark_type_node_as_visited, forget_visited_type_nodes, type_node_has_been_visited}): Define new member functions. * tests/test-ir-walker.cc (name_printing_visitor::name_printing_visitor): Avoid visiting a type node twice. 2018-08-31 Dodji Seketeli Fix apidoc of dwarf_reader::get_soname_of_elf_file * src/abg-dwarf-reader.cc (get_soname_of_elf_file): Document the first parameter. Remove bogus documentation of the previous 'elf' parameter. 2018-08-30 Dodji Seketeli Bug 23533 - Accept '=' in ini property values * src/abg-ini.cc (char_is_delimiter): Take a new include_equal flag to control is the equal character should be considered as a delimiter or not. (char_is_property_value_char): Accept the equal character as a valid property value character. * tests/Makefile.am: Build a new runtestini test from the new tests/test-ini.cc source file. * tests/data/Makefile.am: Add the two new test inputs below to source distribution. * tests/data/test-ini/test01-equal-in-property-string.{abignore, abignore.expected}: New test inputs. * tests/test-ini.cc: New test harness. 2018-08-06 Dodji Seketeli Make test-ir-walker work on ELF binaries directly * test-ir-walker.cc (main): Load an ABI corpus from an elf file and walk its translation units. 2018-07-17 Dodji Seketeli Allow use of python even when fedabipkgdiff is disabled * configure.ac: Detect the presence and version of python even when fedabipkgdiff is disabled. 2018-07-16 Dodji Seketeli Bump version number to 1.5 * configure.ac: Bump version number to 1.5 2018-07-13 Dodji Seketeli Update ChangeLog for 1.4 release * ChangeLog: Update this using make update-changelog 2018-07-13 Dodji Seketeli Update NEWS file for 1.4 release * NEWS: Added 1.4 entries 2018-07-13 Dodji Seketeli Properly add test materials for test-diff-suppr/test38-char-class-in-ini* * tests/data/Makefile.am: Add proper path for test-diff-suppr/test38-char-class-in-ini*. 2018-07-12 Dodji Seketeli Allow square brackets in ini property values * src/abg-ini.cc (char_is_delimiter): Possibly disallow square bracket characters into the set of delimiters. * tests/data/test-diff-suppr/test38-char-class-in-ini-report-0.txt: New reference output. * tests/data/test-diff-suppr/test38-char-class-in-ini-v{0,1}.c: Source code new test binaries. * tests/data/test-diff-suppr/test38-char-class-in-ini-v{0,1}.o: New test binaries. * tests/data/test-diff-suppr/test38-char-class-in-ini.abignore: New test abi suppression file. * tests/data/Makefile.am: Add the new test materials above to source distribution. * tests/test-diff-suppr.cc: Add the test materials above to the set of tests to run. 2018-07-10 Dodji Seketeli Fix race between runtestdefaultsupprs{py3.sh,.py} * tests/Makefile.am: Run runtestdefaultsupprspy3.sh if we are in python3 mode otherwise run runtestdefaultsupprs.py. 2018-06-29 Dodji Seketeli Ensure die_function_type_is_method_type returns a class type die * src/abg-dwarf-reader.cc (die_peel_typedef): Define new static function. (die_function_type_is_method_type): Use the function above to peel the class die from potential typedefs wrapping it. 2018-06-28 Dodji Seketeli Misc style adjustements * include/abg-suppression.h (function_suppression::ADDED_FUNCTION_CHANGE_KIND): Fix the comment of this enumerator. (suppresses_variable): Cleanup parameter name. * src/abg-comparison.cc: Remove useless horizontal space. * src/abg-suppression.cc (variable_suppression::suppresses_variable): Fix typo. 2018-06-28 Dodji Seketeli Initial basic support of union type in suppression specifications * src/abg-suppression.cc (suppression_matches_type_no_name): Support union types. 2018-06-28 Dodji Seketeli Filter out changes like type to const type * include/abg-comparison.h (FN_PARM_TYPE_CV_CHANGE_CATEGORY): Add this new enumerator to the diff_category enum. Also, OR this to the value of the EVERYTHING_CATEGORY enumerator. * src/abg-comp-filter.cc (has_fn_parm_type_top_cv_qual_change): Rename has_fn_parm_type_cv_qual_change into this. (has_fn_parm_type_cv_qual_change): New function. (categorize_harmless_diff_node): Categorize cv qual changes as being of category FN_PARM_TYPE_CV_CHANGE_CATEGORY. * src/abg-comparison.cc (get_default_harmless_categories_bitmap): Add FN_PARM_TYPE_CV_CHANGE_CATEGORY to the default harmless categories. * 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: Adjust. 2018-06-28 Dodji Seketeli Fix redundancy detection through fn ptr and typedef paths * include/abg-comparison.h (is_function_type_diff_with_local_changes) (is_reference_or_pointer_diff_to_non_basic_distinct_types) (peel_typedef_diff): Declare new functions. * src/abg-comparison.cc (is_function_type_diff_with_local_changes) (is_reference_or_ptr_diff_to_non_basic_nor_distinct_types) (peel_typedef_diff): Define new functions. (is_reference_or_pointer_diff): Peel typedefs before operating. (redundancy_marking_visitor::visit_begin): Only sibbling parameter diff node that carry basic type changes (or distinct type changes) are *not* marked as redundant. All other kinds of sibbling parameter diff nodes are markes redundant. Also, rather than never marking function type diffs as redundant by fear of missing local changes on these, just avoid marking function type diff nodes with local changes. It's possible to be that precise now that we can detect that a diff node carries local changes. * tests/data/test-diff-suppr/test37-opaque-type-v{0,1}.o: New binary tests input. * tests/data/test-diff-suppr/test37-opaque-type-v{0,1}.c: Source code of the binary tests input above. * tests/data/test-diff-suppr/test37-opaque-type-header-dir/test37-opaque-type-header-v{0,1}.h: Headers of the binary tests input above. * tests/data/test-diff-suppr/test37-opaque-type-report-0.txt: Reference output for this new test. * tests/data/Makefile.am: Add the new test material above to source distribution. * tests/test-diff-suppr.cc (in_out_specs): Add the new test input above to the test harness. 2018-06-08 Dodji Seketeli Fix indentation of help string in abipkgdiff * tools/abipkgdiff.cc (display_usage): Fix indentation of help string. 2018-06-08 Dodji Seketeli Identify a function using its symbol name and version * src/abg-default-reporter.cc (default_reporter::report): In C, tell the user about the underlying function symbol name only if said symbol name is different from the name of the function. * src/abg-ir.cc (function_decl::get_id): If the function has an underlying symbol, use the symbol name and version as the function ID. But if the function symbol has an alias then use the linkage name as the ID. * tests/data/test-diff-pkg/elfutils-debuginfo-0.170-4.el7.x86_64.rpm: New binary test input. * tests/data/test-diff-pkg/elfutils-debuginfo-0.171-1.el7.x86_64.rpm: Likewise. * tests/data/test-diff-pkg/elfutils-devel-0.170-4.el7.x86_64.rpm: Likewise. * tests/data/test-diff-pkg/elfutils-devel-0.171-1.el7.x86_64.rpm: Likewise. * tests/data/test-diff-pkg/elfutils-libs-0.170-4.el7.x86_64.rpm: Likewise. * tests/data/test-diff-pkg/elfutils-libs-0.171-1.el7.x86_64.rpm: Likewise. * tests/data/test-diff-pkg/elfutils-libs-0.170-4.el7.x86_64-multiple-sym-vers-report-0.txt: New reference test output. * tests/data/Makefile.am: Add the new test material above to source distribution. * tests/test-diff-pkg.cc (in_out_specs): Integrate the new test inputs above into the harness. 2018-06-06 Dodji Seketeli Bump version to 1.4 * configure.ac: Bump version to 1.4 2018-06-06 Dodji Seketeli Explicitely detect anonymous data member changes * include/abg-comp-filter.h (has_anonymous_data_member_change): Add new function declaration. * include/abg-fwd.h (is_data_member, is_anonymous_data_member): declare new overloads. * src/abg-comp-filter.cc (has_anonymous_data_member_change): Define new overloads. * src/abg-ir.cc (is_data_member, is_anonymous_data_member): Define new overloads. * src/abg-reporter-priv.cc (represent): In the var_diff overload, detect when we have anonymous data member changes and emit explicit error messages then. * tests/data/test-diff-dwarf/test45-anon-dm-change-report-0.txt: New test material. * tests/data/test-diff-dwarf/test45-anon-dm-change-v0.cc: Likewise. * tests/data/test-diff-dwarf/test45-anon-dm-change-v0.o: Likewise. * tests/data/test-diff-dwarf/test45-anon-dm-change-v1.cc: Likewise. * tests/data/test-diff-dwarf/test45-anon-dm-change-v1.o: Likewise. * tests/data/Makefile.am: Add the new test material above to source distribution. * tests/test-diff-dwarf.cc (in_out_specs): Add the new test material above to the test harness. * tests/data/test-diff-filter/test30-pr18904-rvalueref-report0.txt: Adjust. * tests/data/test-diff-filter/test30-pr18904-rvalueref-report1.txt: Likewise. * tests/data/test-diff-filter/test30-pr18904-rvalueref-report2.txt: Likewise. * tests/data/test-diff-filter/test35-pr18754-no-added-syms-report-0.txt: Likewise. 2018-06-05 Dodji Seketeli Add test44-anon-struct-union-v{0,1}.o to source distribution * tests/data/Makefile.am: Add test-diff-dwarf/test44-anon-struct-union-v{0,1}.o files to source distribution. 2018-06-04 Dodji Seketeli Use the flat representation for anonymous struct/unions * src/abg-ir.cc (get_class_or_union_flat_representation): Take a const class_or_union* (like what the declaration in the header file says), rather than just a class_or_union*. ({class,union}_decl::get_pretty_representation): For anonymous classes and unions, use the flat representation. * tests/data/test-annotate/libtest23.so.abi: Adjust. * tests/data/test-annotate/libtest24-drop-fns-2.so.abi: Likewise. * tests/data/test-annotate/libtest24-drop-fns.so.abi: Likewise. * tests/data/test-annotate/test13-pr18894.so.abi: Likewise. * tests/data/test-annotate/test14-pr18893.so.abi: Likewise. * tests/data/test-annotate/test15-pr18892.so.abi: Likewise. * tests/data/test-annotate/test17-pr19027.so.abi: Likewise. * tests/data/test-annotate/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: Likewise. * tests/data/test-annotate/test19-pr19023-libtcmalloc_and_profiler.so.abi: Likewise. * tests/data/test-annotate/test20-pr19025-libvtkParallelCore-6.1.so.abi: Likewise. * tests/data/test-annotate/test21-pr19092.so.abi: Likewise. * tests/data/test-diff-dwarf/test43-PR22913-report-0.txt: Likewise. * tests/data/test-diff-dwarf/test44-anon-struct-union-report-0.txt: New test reference output. * tests/data/test-diff-dwarf/test44-anon-struct-union-v{0,1}.cc: Source code of new test binary outputs. * tests/data/test-diff-dwarf/test44-anon-struct-union-v{0,1}.o: New test binary outputs. * tests/data/Makefile.am: Add the new test materials above to source districution. * tests/test-diff-dwarf.cc (in_out_specs): Add the new test material above to the test harness here. * tests/data/test-diff-filter/test30-pr18904-rvalueref-report0.txt: Adjust. * tests/data/test-diff-filter/test30-pr18904-rvalueref-report1.txt: Likewise. * tests/data/test-diff-filter/test30-pr18904-rvalueref-report2.txt: Likewise. * tests/data/test-diff-filter/test35-pr18754-no-added-syms-report-0.txt: Likewise. * tests/data/test-diff-pkg/libcdio-0.94-1.fc26.x86_64--libcdio-0.94-2.fc26.x86_64-report.1.txt: Likewise. * tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-2.txt: Likewise. * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: Likewise. 2018-06-01 Dodji Seketeli Better detect when pointer and qualified types carry local changes * src/abg-comparison.cc (leaf_diff_node_marker_visitor::visit_begin): Do not mark qualified types as leaf diff nodes. (redundancy_marking_visitor::visit_end): Changes to qualified type are never considered local. This is just as for pointer and reference types. * src/abg-default-reporter.cc (default_reporter::report_local_reference_type_changes): Display structural changes of the pointed-to type. (default_reporter::report): In the overload for reference_diff, better detect and handle when we have local changes, or not. * src/abg-ir.cc (equals): In the overload for qualified_type_def and reference_type_de, report local type changes of the underlying type as local changes. Add comments in the overload for pointer type, and make it look like the the overload for reference_type. * src/abg-leaf-reporter.cc (leaf_reporter::report): In the overload for pointer_diff, remove end of line. * tests/data/test-diff-filter/libtest45-basic-type-change-report-1.txt: Adjust. * tests/data/test-diff-filter/test30-pr18904-rvalueref-report0.txt: Likewise. * tests/data/test-diff-filter/test30-pr18904-rvalueref-report1.txt: Likewise. * tests/data/test-diff-filter/test30-pr18904-rvalueref-report2.txt: Likewise. * tests/data/test-diff-filter/test35-pr18754-no-added-syms-report-0.txt: Likewise. 2018-05-23 Dodji Seketeli Better detect when diff nodes only carry local type changes * include/abg-comparison.h ({diff, type_diff_base, decl_diff_base, distinct_diff, var_diff, pointer_diff, reference_diff, array_diff, qualified_type, enum_diff, class_or_union_diff, class_diff, base_diff, scope_diff, fn_parm_diff, function_type_diff, function_decl_diff, typedef_diff, translation_unit_diff}::has_local_changes): Return an enum change_kind, rather than just a bool. (is_diff_of_basic_type): Declare an overload that takes a boolean flag. (is_qualified_type_diff, peel_pointer_diff, peel_reference_diff) (peel_qualified_type, peel_pointer_or_qualified_type): Declare new functions * include/abg-fwd.h (peel_qualified_type): * include/abg-ir.h (enum change_kind::{LOCAL_TYPE_CHANGE_KIND, LOCAL_NON_TYPE_CHANGE_KIND, ALL_LOCAL_CHANGES_MASK}): Add these three new enumerators. * src/abg-comparison.cc ({distinct_diff, var_diff, pointer_diff, array_diff, reference_diff, qualified_type_diff, enum_diff, class_or_union_diff, class_diff, base_diff, scope_diff, fn_parm_diff, function_type_diff, function_decl_diff, type_decl_diff, typedef_diff, translation_unit_diff}::has_local_changes): Adjust to return an enum change_kind, rather than just a bool. (has_local_type_change_only): Define new functions. (has_basic_type_change_only): Use the new has_local_type_change_only function and the new overload for is_diff_of_basic_type. (is_diff_of_basic_type): Define an overload that takes a boolean flag. (is_qualified_type_diff, peel_pointer_diff, peel_reference_diff) (peel_qualified_type, peel_pointer_or_qualified_type): Define new functions. * src/abg-ir.cc (equals): In the overloads for decl_base, scope_decl, type_base, qualified_type_diff, pointer_type_def, reference_type_def, array_type_def, enum_type_decl, typedef_decl, var_decl, function_type, function_decl, function_decl::parameter, class_or_union, class_decl::base_spec and class_decl, properly set the new abigail::ir::{LOCAL_CHANGE_KIND, LOCAL_NON_TYPE_CHANGE_KIND, LOCAL_TYPE_CHANGE_KIND} bits. (types_have_similar_structure): Peel qualified types and typedefs off, first thing. (peel_qualified_or_typedef_type): Define new function. * tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-3.txt: Adjust. * tests/data/test-diff-filter/libtest45-basic-type-change-report-{0,1}.txt: New reference test reports. * tests/data/test-diff-filter/libtest45-basic-type-change-v{0,1}.so: New input test binaries. * tests/data/test-diff-filter/test45-basic-type-change-v{0,1}.cc: Source code of the input test binaries above. * tests/data/Makefile.am: Add the new test file above to source distribution. * tests/test-diff-filter.cc: Add the test input above to the test harness. 2018-05-18 Dodji Seketeli Improve detection of local *type* changes * include/abg-fwd.h (is_type_decl): Declare new overload for type_base*. (types_have_similar_structure): Declare new function. * src/abg-comparison.cc (class_or_union_diff::priv::count_filtered_changed_dm): Even when looking at local changes only, do not forget to count nodes that were filtered out. * src/abg-ir.cc (types_have_similar_structure): Define new function. (is_type_decl): Define new overload for type_base*. (is_enum_type): (equals): In the overload for var_decl, use the new types_have_similar_structure function to detect local (type) changes. * src/abg-reporter-priv.cc (represent): In the overload for var_decl, use the diff::has_local_changes function to detect local changes, now that we can better detect local changes. * tests/data/test-diff-filter/test44-anonymous-data-member-report-1.txt: Adjust. * tests/data/test-diff-suppr/test36-leaf-report-0.txt: Likewise. 2018-05-16 Dodji Seketeli Remove references, arrays and fn parms from leaf diff nodes * src/abg-comparison.cc (leaf_diff_node_marker_visitor::visit_begin): Do not mark references, array and fn parms diff nodes as leaf nodes. * tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-3.txt: Adjust. 2018-05-23 Dodji Seketeli Fix typo in tests/runtestdefaultsupprs.py * tests/runtestdefaultsupprs.py.in: Fix typo. 2018-05-17 Dodji Seketeli Update ChangeLog * ChangeLog: Update this file automatically by running the "make update-changelog" command. 2018-05-17 Dodji Seketeli Update NEWS file for 1.3 release * NEWS: Update for 1.3. 2018-05-16 Dodji Seketeli Don't bail because "rpm" issued an error * src/abg-tools-utils.cc (get_dsos_provided_by_rpm): Do not fail when the rpm command issues an error. Rather rely on the presence of a valid output or not. Also, make sure to filter out error outputs so that they don't appear in the general output of tools using this function. 2018-05-16 Dodji Seketeli Handle cases where no python2 interpreter is found * configure.ac: When no python2 is found and only python3 is found, then use python3. 2018-05-16 Dodji Seketeli Use the correct python interpreter in runtestdefaultsupprs.py * configure.ac: Make the PYTHON environemnt variable usable in auto-generated files. * tests/runtestdefaultsupprs.py.in: Use the python interpreter detected by configure. 2018-05-16 Dodji Seketeli Use the dynamically selected python for Koji configure tests * configure.ac: Use the python interpreter that was selected by the configure script for the Koji version test. 2018-05-14 Dodji Seketeli Sort the output of the leaf reporter * include/abg-comparison.h (diff_ptrs_type): Define new typedef. * src/abg-comparison-priv.h (sort_string_diff_ptr_map): Declare new function. * src/abg-comparison.cc (sort_string_diff_sptr_map): Update comment. (sort_string_diff_ptr_map): Define new function. * src/abg-leaf-reporter.cc (report_diffs): Sort the diff nodes before reporting about them. * tests/data/test-diff-suppr/test36-leaf-report-0.txt: Adjust. 2018-05-14 Dodji Seketeli Show data member offsets in bytes too * src/abg-reporter-priv.cc (represent): In the overload for var_diff_sptr, use the function show_offset_or_size, rather than emit_num_value. * tests/data/test-diff-filter/test31-pr18535-libstdc++-report-0.txt: Adjust. * tests/data/test-diff-filter/test31-pr18535-libstdc++-report-1.txt: Adjust. * tests/data/test-diff-filter/test44-anonymous-data-member-report-0.txt: Adjust. * tests/data/test-diff-filter/test44-anonymous-data-member-report-1.txt: Adjust. 2018-05-09 Dodji Seketeli Initial support of anonymous data members * include/abg-comparison.h (is_class_or_union_diff) (is_anonymous_class_or_union_diff): Declare new functions. * include/abg-fwd.h (is_class_type): Declare new overload for type_or_decl_base&. (is_data_member): Declare new overload for decl_base*. (is_anonymous_data_member) (anonymous_data_member_to_class_or_union) (get_class_or_union_flat_representation) (data_member_has_anonymous_type): Declare new functions. (is_at_class_scope): Return the class or union scope. * include/abg-ir.h (var_decl::get_qualified_name): New virtual data member which overloads decl_base::get_qualified_name. * src/abg-comparison.cc (is_class_or_union_diff) (is_anonymous_class_or_union_diff): Define new functions (leaf_diff_node_marker_visitor::visit_begin): Don't mark anonymous class or union diff nodes as diff nodes. * src/abg-ir.cc (is_data_member): Define new overload for decl_base*. (is_class_type, is_union_type): Define new overload for type_or_decl_base&. (is_anonymous_data_member) (anonymous_data_member_to_class_or_union) (get_class_or_union_flat_representation) (data_member_has_anonymous_type): Define new function overloads. (var_decl::get_qualified_name): Define new virtual member function. (is_at_class_scope): Return the class or union scope. (var_decl::get_pretty_representation): Support anonymous data members. (equals): In the overload for class_or_union_diff, mark data member textual representation changes as local changes. * src/abg-reporter-priv.cc (represent): In the overload for var_diff, support changes to anonymous data members. * src/abg-leaf-reporter.cc (leaf_reporter::report): Report sorted -- by offset -- data member changes before the ones that are sorted by other things. * tests/data/test-diff-filter/libtest44-anonymous-data-member-v{0,1}.so: New binary test input * tests/data/test-diff-filter/test44-anonymous-data-member-report-{0,1}.txt: New reference test outputs. * tests/data/test-diff-filter/test44-anonymous-data-member-v{0,1}.c: Source code of the new binary test output above. * tests/data/Makefile.am: Add the new test files above to the source distribution. * tests/data/test-annotate/libtest23.so.abi: Adjust test reference output. * tests/data/test-annotate/libtest24-drop-fns-2.so.abi: Likewise. * tests/data/test-annotate/libtest24-drop-fns.so.abi: Likewise. * tests/data/test-annotate/test13-pr18894.so.abi: Likewise. * tests/data/test-annotate/test14-pr18893.so.abi: Likewise. * tests/data/test-annotate/test15-pr18892.so.abi: Likewise. * tests/data/test-annotate/test17-pr19027.so.abi: Likewise. * tests/data/test-annotate/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: Likewise. * tests/data/test-annotate/test19-pr19023-libtcmalloc_and_profiler.so.abi: Likewise. * tests/data/test-annotate/test20-pr19025-libvtkParallelCore-6.1.so.abi: Likewise. * tests/data/test-annotate/test21-pr19092.so.abi: Likewise. * tests/data/test-diff-dwarf/test43-PR22913-report-0.txt: Likewise. * tests/data/test-diff-filter/test30-pr18904-rvalueref-report0.txt: Likewise. * tests/data/test-diff-filter/test30-pr18904-rvalueref-report1.txt: Likewise. * tests/data/test-diff-filter/test30-pr18904-rvalueref-report2.txt: Likewise. * tests/data/test-diff-filter/test31-pr18535-libstdc++-report-0.txt: Likewise. * tests/data/test-diff-filter/test31-pr18535-libstdc++-report-1.txt: Likewise. * tests/data/test-diff-filter/test35-pr18754-no-added-syms-report-0.txt: Likewise. * tests/data/test-diff-pkg/libcdio-0.94-1.fc26.x86_64--libcdio-0.94-2.fc26.x86_64-report.1.txt: Likewise. * tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-2.txt: Likewise. 2018-04-20 Dodji Seketeli Represent sizes and offsets in bytes and hexadecimal values * doc/manuals/abidiff.rst: Add documentation for the new --show-bits, --show-bytes, --show-hex and --show-dec options. * doc/manuals/abipkgdiff.rst: Likewise. * doc/manuals/kmidiff.rst: Likewise. * include/abg-comparison.h (diff_context::{show_hex_values, show_offsets_sizes_in_bits}): Declare new member functions. * src/abg-comparison-priv.h (diff_context::priv::{hex_values_, show_offsets_sizes_in_bits_}): Declare new data members. (diff_context::priv::priv): Initialize them. * src/abg-comparison.cc (diff_context::{show_hex_values, show_offsets_sizes_in_bits}): Define new member functions. * src/abg-default-reporter.cc (default_reporter::report): Adjust the call to maybe_report_diff_for_symbol. * src/abg-leaf-reporter.cc (leaf_reporter::report): Likewise. * src/abg-reporter-priv.h (convert_bits_to_bytes) (maybe_convert_bits_to_bytes, emit_num_value, show_offset_or_size) (show_numerical_change): Declare new functions. (maybe_report_diff_for_symbol): Take a diff_context in parameter. * src/abg-reporter-priv.cc (convert_bits_to_bytes, emit_num_value) (maybe_convert_bits_to_bytes, show_numerical_change) (show_offset_or_size): Define new functions. (represent): In the overload for method_decl, var_decl, use the new emit_num_value function. (represent_data_member): Use the new show_offset_or_size function. (maybe_show_relative_offset_change): Use the new convert_bits_to_bytes, diff_context::show_offsets_sizes_in_bits, emit_num_value functions. (maybe_show_relative_offset_change): Likewise. (report_size_and_alignment_changes): Use the new emit_num_value and show_numerical_change functions. (maybe_report_diff_for_symbol): Tak a diff_context in argument. Use the new show_numerical_change function. * tests/test-diff-filter.cc (in_out_spec): Add a new entry to test hexa and bytes output. * tools/abidiff.cc (options::{show_hexadecimal_values, show_offsets_sizes_in_bits}): New data members. (options::options): Initialize them. (display_usage): New help strings for the new --show{bytes,bits,hex,dec} options. (parse_command_line): Parse the new --show{bytes,bits,hex,dec} options. (set_diff_context_from_opts) Set the diff context wrt hex and bytes values. * tools/abipkgdiff.cc (options::{show_hexadecimal_values, show_offsets_sizes_in_bits}): New data members. (options::options): Initialize them. (display_usage): New help strings for the new --show{bytes,bits,hex,dec} options. (set_diff_context_from_opts): Set the diff context wrt hex and bytes values. (parse_command_line): Parse the new --show{bytes,bits,hex,dec} options. * tools/kmidiff.cc (options::{show_hexadecimal_values, show_offsets_sizes_in_bits}): New data members. (options::options): Initialize them. (display_usage):New help strings for the new --show{bytes,bits,hex,dec} options. (parse_command_line): Parse the new --show{bytes,bits,hex,dec} options. (set_diff_context): Set the diff context wrt hex and bytes values. * tests/data/test-diff-filter/test30-pr18904-rvalueref-report2.txt: New reference test output. * tests/data/Makefile.am: Add the new reference test output above to source distribution. * tests/data/test-abicompat/test0-fn-changed-report-0.txt: Adjust. * tests/data/test-abicompat/test0-fn-changed-report-2.txt: Likewise. * tests/data/test-abicompat/test5-fn-changed-report-0.txt: Likewise. * tests/data/test-abicompat/test5-fn-changed-report-1.txt: Likewise. * tests/data/test-abicompat/test6-var-changed-report-0.txt: Likewise. * tests/data/test-abicompat/test6-var-changed-report-1.txt: Likewise. * tests/data/test-abicompat/test7-fn-changed-report-0.txt: Likewise. * tests/data/test-abicompat/test7-fn-changed-report-1.txt: Likewise. * tests/data/test-abicompat/test7-fn-changed-report-2.txt: Likewise. * tests/data/test-abicompat/test8-fn-changed-report-0.txt: Likewise. * tests/data/test-abicompat/test9-fn-changed-report-0.txt: Likewise. * tests/data/test-abidiff/test-PR18791-report0.txt: Likewise. * tests/data/test-abidiff/test-qual-type0-report.txt: Likewise. * tests/data/test-abidiff/test-struct0-report.txt: Likewise. * tests/data/test-abidiff/test-struct1-report.txt: Likewise. * tests/data/test-abidiff/test-var0-report.txt: Likewise. * tests/data/test-diff-dwarf/test0-report.txt: Likewise. * tests/data/test-diff-dwarf/test1-report.txt: Likewise. * tests/data/test-diff-dwarf/test10-report.txt: Likewise. * tests/data/test-diff-dwarf/test11-report.txt: Likewise. * tests/data/test-diff-dwarf/test13-report.txt: Likewise. * tests/data/test-diff-dwarf/test21-redundant-fn-report-0.txt: Likewise. * tests/data/test-diff-dwarf/test22-changed-parm-c-report-0.txt: Likewise. * tests/data/test-diff-dwarf/test26-added-parms-before-variadic-report.txt: Likewise. * tests/data/test-diff-dwarf/test27-local-base-diff-report.txt: Likewise. * tests/data/test-diff-dwarf/test3-report.txt: Likewise. * tests/data/test-diff-dwarf/test32-fnptr-changes-report-0.txt: Likewise. * tests/data/test-diff-dwarf/test33-fnref-changes-report-0.txt: Likewise. * tests/data/test-diff-dwarf/test34-pr19173-libfoo-report-0.txt: Likewise. * tests/data/test-diff-dwarf/test35-pr19173-libfoo-long-clang-report-0.txt: Likewise. * tests/data/test-diff-dwarf/test35-pr19173-libfoo-long-gcc-report-0.txt: Likewise. * tests/data/test-diff-dwarf/test36-ppc64-aliases-report-0.txt: Likewise. * tests/data/test-diff-dwarf/test37-union-report-0.txt: Likewise. * tests/data/test-diff-dwarf/test39-union-report-0.txt: Likewise. * tests/data/test-diff-dwarf/test40-report-0.txt: Likewise. * tests/data/test-diff-dwarf/test43-PR22913-report-0.txt: Likewise. * tests/data/test-diff-dwarf/test8-report.txt: Likewise. * tests/data/test-diff-dwarf/test9-report.txt: Likewise. * tests/data/test-diff-filter/test0-report.txt: Likewise. * tests/data/test-diff-filter/test01-report.txt: Likewise. * tests/data/test-diff-filter/test1-report.txt: Likewise. * tests/data/test-diff-filter/test10-report.txt: Likewise. * tests/data/test-diff-filter/test11-report.txt: Likewise. * tests/data/test-diff-filter/test13-report.txt: Likewise. * tests/data/test-diff-filter/test14-0-report.txt: Likewise. * tests/data/test-diff-filter/test14-1-report.txt: Likewise. * tests/data/test-diff-filter/test15-0-report.txt: Likewise. * tests/data/test-diff-filter/test15-1-report.txt: Likewise. * tests/data/test-diff-filter/test16-report-2.txt: Likewise. * tests/data/test-diff-filter/test16-report.txt: Likewise. * tests/data/test-diff-filter/test17-0-report.txt: Likewise. * tests/data/test-diff-filter/test17-1-report.txt: Likewise. * tests/data/test-diff-filter/test2-report.txt: Likewise. * tests/data/test-diff-filter/test27-redundant-and-filtered-children-nodes-report-0.txt: Likewise. * tests/data/test-diff-filter/test27-redundant-and-filtered-children-nodes-report-1.txt: Likewise. * tests/data/test-diff-filter/test27-redundant-and-filtered-children-nodes-report-2.txt: Likewise. * tests/data/test-diff-filter/test28-redundant-and-filtered-children-nodes-report-0.txt: Likewise. * tests/data/test-diff-filter/test28-redundant-and-filtered-children-nodes-report-1.txt: Likewise. * tests/data/test-diff-filter/test29-finer-redundancy-marking-report-0.txt: Likewise. * tests/data/test-diff-filter/test3-report.txt: Likewise. * tests/data/test-diff-filter/test30-pr18904-rvalueref-report0.txt: Likewise. * tests/data/test-diff-filter/test30-pr18904-rvalueref-report1.txt: Likewise. * tests/data/test-diff-filter/test31-pr18535-libstdc++-report-0.txt: Likewise. * tests/data/test-diff-filter/test31-pr18535-libstdc++-report-1.txt: Likewise. * tests/data/test-diff-filter/test32-ppc64le-struct-change-report0.txt: Likewise. * tests/data/test-diff-filter/test35-pr18754-no-added-syms-report-0.txt: Likewise. * tests/data/test-diff-filter/test35-pr18754-no-added-syms-report-1.txt: Likewise. * tests/data/test-diff-filter/test37-report-0.txt: Likewise. * tests/data/test-diff-filter/test39/test39-report-0.txt: Likewise. * tests/data/test-diff-filter/test42-leaf-report-output-0.txt: Likewise. * tests/data/test-diff-filter/test6-report.txt: Likewise. * tests/data/test-diff-filter/test9-report.txt: Likewise. * tests/data/test-diff-pkg/dirpkg-1-report-1.txt: Likewise. * tests/data/test-diff-pkg/dirpkg-3-report-1.txt: Likewise. * tests/data/test-diff-pkg/dirpkg-3-report-2.txt: Likewise. * 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: Likewise. * tests/data/test-diff-pkg/libsigc++-2.0-0c2a_2.4.0-1_amd64--libsigc++-2.0-0v5_2.4.1-1ubuntu2_amd64-report-0.txt: Likewise. * tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-2.txt: Likewise. * tests/data/test-diff-pkg/symlink-dir-test1-report0.txt: Likewise. * tests/data/test-diff-pkg/tarpkg-0-report-0.txt: Likewise. * tests/data/test-diff-pkg/tarpkg-1-report-0.txt: Likewise. * tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-0.txt: Likewise. * tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-1.txt: Likewise. * tests/data/test-diff-suppr/test0-type-suppr-report-0.txt: Likewise. * tests/data/test-diff-suppr/test0-type-suppr-report-3.txt: Likewise. * tests/data/test-diff-suppr/test0-type-suppr-report-5.txt: Likewise. * tests/data/test-diff-suppr/test0-type-suppr-report-7.txt: Likewise. * tests/data/test-diff-suppr/test1-typedef-suppr-report-0.txt: Likewise. * tests/data/test-diff-suppr/test1-typedef-suppr-report-2.txt: Likewise. * tests/data/test-diff-suppr/test11-add-data-member-report-0.txt: Likewise. * tests/data/test-diff-suppr/test12-add-data-member-report-0.txt: Likewise. * tests/data/test-diff-suppr/test12-add-data-member-report-2.txt: Likewise. * tests/data/test-diff-suppr/test13-suppr-through-pointer-report-0.txt: Likewise. * tests/data/test-diff-suppr/test13-suppr-through-pointer-report-1.txt: Likewise. * tests/data/test-diff-suppr/test14-suppr-non-redundant-report-0.txt: Likewise. * tests/data/test-diff-suppr/test14-suppr-non-redundant-report-1.txt: Likewise. * tests/data/test-diff-suppr/test15-suppr-added-fn-report-0.txt: Likewise. * tests/data/test-diff-suppr/test15-suppr-added-fn-report-1.txt: Likewise. * tests/data/test-diff-suppr/test15-suppr-added-fn-report-5.txt: Likewise. * tests/data/test-diff-suppr/test16-suppr-removed-fn-report-0.txt: Likewise. * tests/data/test-diff-suppr/test16-suppr-removed-fn-report-2.txt: Likewise. * tests/data/test-diff-suppr/test17-suppr-added-var-report-0.txt: Likewise. * tests/data/test-diff-suppr/test17-suppr-added-var-report-2.txt: Likewise. * tests/data/test-diff-suppr/test17-suppr-added-var-report-5.txt: Likewise. * tests/data/test-diff-suppr/test18-suppr-removed-var-report-0.txt: Likewise. * tests/data/test-diff-suppr/test18-suppr-removed-var-report-2.txt: Likewise. * tests/data/test-diff-suppr/test18-suppr-removed-var-report-5.txt: Likewise. * tests/data/test-diff-suppr/test2-struct-suppr-report-0.txt: Likewise. * tests/data/test-diff-suppr/test23-alias-filter-report-0.txt: Likewise. * tests/data/test-diff-suppr/test23-alias-filter-report-2.txt: Likewise. * tests/data/test-diff-suppr/test24-soname-report-1.txt: Likewise. * tests/data/test-diff-suppr/test24-soname-report-10.txt: Likewise. * tests/data/test-diff-suppr/test24-soname-report-12.txt: Likewise. * tests/data/test-diff-suppr/test24-soname-report-14.txt: Likewise. * tests/data/test-diff-suppr/test24-soname-report-16.txt: Likewise. * tests/data/test-diff-suppr/test24-soname-report-4.txt: Likewise. * tests/data/test-diff-suppr/test25-typedef-report-0.txt: Likewise. * tests/data/test-diff-suppr/test26-loc-suppr-report-0.txt: Likewise. * tests/data/test-diff-suppr/test26-loc-suppr-report-3.txt: Likewise. * tests/data/test-diff-suppr/test29-soname-report-3.txt: Likewise. * tests/data/test-diff-suppr/test29-soname-report-6.txt: Likewise. * tests/data/test-diff-suppr/test29-soname-report-8.txt: Likewise. * tests/data/test-diff-suppr/test3-struct-suppr-report-0.txt: Likewise. * tests/data/test-diff-suppr/test3-struct-suppr-report-1.txt: Likewise. * tests/data/test-diff-suppr/test3-struct-suppr-report-2.txt: Likewise. * tests/data/test-diff-suppr/test30-report-0.txt: Likewise. * tests/data/test-diff-suppr/test31-report-1.txt: Likewise. * tests/data/test-diff-suppr/test32-report-0.txt: Likewise. * tests/data/test-diff-suppr/test32-report-1.txt: Likewise. * tests/data/test-diff-suppr/test33-report-0.txt: Likewise. * tests/data/test-diff-suppr/test35-leaf-report-0.txt: Likewise. * tests/data/test-diff-suppr/test36-leaf-report-0.txt: Likewise. * tests/data/test-diff-suppr/test4-local-suppr-report-0.txt: Likewise. * tests/data/test-diff-suppr/test4-local-suppr-report-1.txt: Likewise. * tests/data/test-diff-suppr/test5-fn-suppr-report-0.txt: Likewise. * tests/data/test-diff-suppr/test5-fn-suppr-report-1.txt: Likewise. * tests/data/test-diff-suppr/test5-fn-suppr-report-2.txt: Likewise. * tests/data/test-diff-suppr/test5-fn-suppr-report-3.txt: Likewise. * tests/data/test-diff-suppr/test5-fn-suppr-report-4.txt: Likewise. * tests/data/test-diff-suppr/test5-fn-suppr-report-5.txt: Likewise. * tests/data/test-diff-suppr/test6-fn-suppr-report-0-1.txt: Likewise. * tests/data/test-diff-suppr/test6-fn-suppr-report-0.txt: Likewise. * tests/data/test-diff-suppr/test6-fn-suppr-report-1.txt: Likewise. * tests/data/test-diff-suppr/test6-fn-suppr-report-2.txt: Likewise. * tests/data/test-diff-suppr/test6-fn-suppr-report-3.txt: Likewise. * tests/data/test-diff-suppr/test7-var-suppr-report-0.txt: Likewise. * tests/data/test-diff-suppr/test7-var-suppr-report-1.txt: Likewise. * tests/data/test-diff-suppr/test7-var-suppr-report-2.txt: Likewise. * tests/data/test-diff-suppr/test7-var-suppr-report-3.txt: Likewise. * tests/data/test-diff-suppr/test7-var-suppr-report-4.txt: Likewise. * tests/data/test-diff-suppr/test7-var-suppr-report-7.txt: Likewise. * tests/data/test-diff-suppr/test7-var-suppr-report-8.txt: Likewise. * tests/data/test-diff-suppr/test8-redundant-fn-report-0.txt: Likewise. * tests/data/test-diff-suppr/test8-redundant-fn-report-1.txt: Likewise. * tests/data/test-diff-suppr/test9-changed-parm-c-report-0.txt: Likewise. * tests/data/test-diff-suppr/test9-changed-parm-c-report-1.txt: Likewise. 2018-04-18 Dodji Seketeli Use absolute builddir paths in automake test files * tests/runtestdefaultsupprs.py.in: Use abs_top_builddir rather than top_builddir. 2018-04-10 Jonathan Wakely Use std::string::substr instead of appending single chars * src/abg-ini.cc (trim_white_space): Use std::string::substr instead of appending single chars. 2018-04-10 Jonathan Wakely Rename misleading remove_trailing_white_spaces functions * include/abg-tools-utils.h (trim_white_space): Renamed remove_trailing_white_spaces into this. * src/abg-ini.cc (trim_white_space): Likewise. * src/abg-tools-utils.cc (get_dsos_provided_by_rpm): Adjust. 2018-04-10 Jonathan Wakely Remove unused local set variables * src/abg-tools-utils.cc (get_dsos_provided_by_rpm): Remove unsed set variable. * tools/abipkgdiff.cc (maybe_create_public_dso_sonames_set): Likewise. 2018-04-10 Jonathan Wakely Remove assertion with side-effects * src/abg-tools-utils.cc (get_dsos_provided_by_rpm): Fix std::string::sbustr and remove assert with side effect. 2018-04-13 Dodji Seketeli Misc style changes * src/abg-comparison.cc (category_propagation_visitor): Adjust comment. * src/abg-default-reporter.cc (default_reporter::report_local_function_type_changes): Remove useless new line. 2018-04-13 Dodji Seketeli Update tests for the "better leaf mode redundancy management" patchset * tests/data/test-abidiff-exit/test1-voffset-change-report1.txt: Adjust. * tests/data/test-abidiff/test-PR18791-report0.txt: Likewise. * tests/data/test-abidiff/test-enum0-report.txt: Likewise. * tests/data/test-abidiff/test-enum1-report.txt: Likewise. * tests/data/test-diff-filter/test1-report.txt: Likewise. * tests/data/test-diff-filter/test14-0-report.txt: Likewise. * tests/data/test-diff-filter/test15-0-report.txt: Likewise. * tests/data/test-diff-filter/test17-0-report.txt: Likewise. * tests/data/test-diff-filter/test27-redundant-and-filtered-children-nodes-report-0.txt: Likewise. * tests/data/test-diff-filter/test28-redundant-and-filtered-children-nodes-report-0.txt: Likewise. * tests/data/test-diff-filter/test3-report.txt: Likewise. * tests/data/test-diff-filter/test30-pr18904-rvalueref-report0.txt: Likewise. * tests/data/test-diff-filter/test30-pr18904-rvalueref-report1.txt: Likewise. * tests/data/test-diff-filter/test32-ppc64le-struct-change-report0.txt: Likewise. * tests/data/test-diff-filter/test35-pr18754-no-added-syms-report-0.txt: Likewise. * tests/data/test-diff-filter/test35-pr18754-no-added-syms-report-1.txt: Likewise. * tests/data/test-diff-filter/test4-report.txt: Likewise. * tests/data/test-diff-filter/test41-report-0.txt: Likewise. * tests/data/test-diff-filter/test42-leaf-report-output-0.txt: Likewise. * tests/data/test-diff-pkg/dirpkg-3-report-1.txt: Likewise. * tests/data/test-diff-pkg/dirpkg-3-report-2.txt: Likewise. * 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: Likewise. * tests/data/test-diff-pkg/libcdio-0.94-1.fc26.x86_64--libcdio-0.94-2.fc26.x86_64-report.1.txt: Likewise. * tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-0.txt: Likewise. * tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-1.txt: Likewise. * tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-2.txt: Likewise. * tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-3.txt: Likewise. * tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-0.txt: Likewise. * tests/data/test-diff-suppr/test1-typedef-suppr-report-1.txt: Likewise. * tests/data/test-diff-suppr/test1-typedef-suppr-report-2.txt: Likewise. * tests/data/test-diff-suppr/test13-suppr-through-pointer-report-1.txt: Likewise. * tests/data/test-diff-suppr/test14-suppr-non-redundant-report-0.txt: Likewise. * tests/data/test-diff-suppr/test14-suppr-non-redundant-report-1.txt: Likewise. * tests/data/test-diff-suppr/test15-suppr-added-fn-report-1.txt: Likewise. * tests/data/test-diff-suppr/test15-suppr-added-fn-report-2.txt: Likewise. * tests/data/test-diff-suppr/test15-suppr-added-fn-report-3.txt: Likewise. * tests/data/test-diff-suppr/test15-suppr-added-fn-report-4.txt: Likewise. * tests/data/test-diff-suppr/test16-suppr-removed-fn-report-1.txt: Likewise. * tests/data/test-diff-suppr/test16-suppr-removed-fn-report-2.txt: Likewise. * tests/data/test-diff-suppr/test16-suppr-removed-fn-report-3.txt: Likewise. * tests/data/test-diff-suppr/test16-suppr-removed-fn-report-4.txt: Likewise. * tests/data/test-diff-suppr/test17-suppr-added-var-report-1.txt: Likewise. * tests/data/test-diff-suppr/test17-suppr-added-var-report-2.txt: Likewise. * tests/data/test-diff-suppr/test17-suppr-added-var-report-3.txt: Likewise. * tests/data/test-diff-suppr/test17-suppr-added-var-report-4.txt: Likewise. * tests/data/test-diff-suppr/test18-suppr-removed-var-report-1.txt: Likewise. * tests/data/test-diff-suppr/test18-suppr-removed-var-report-3.txt: Likewise. * tests/data/test-diff-suppr/test18-suppr-removed-var-report-4.txt: Likewise. * tests/data/test-diff-suppr/test2-struct-suppr-report-0.txt: Likewise. * tests/data/test-diff-suppr/test2-struct-suppr-report-1.txt: Likewise. * tests/data/test-diff-suppr/test25-typedef-report-1.txt: Likewise. * tests/data/test-diff-suppr/test27-add-aliased-function-report-1.txt: Likewise. * tests/data/test-diff-suppr/test27-add-aliased-function-report-2.txt: Likewise. * tests/data/test-diff-suppr/test27-add-aliased-function-report-5.txt: Likewise. * tests/data/test-diff-suppr/test28-add-aliased-function-report-3.txt: Likewise. * tests/data/test-diff-suppr/test28-add-aliased-function-report-6.txt: Likewise. * tests/data/test-diff-suppr/test30-report-1.txt: Likewise. * tests/data/test-diff-suppr/test34-report-0.txt: Likewise. * tests/data/test-diff-suppr/test35-leaf-report-0.txt: Likewise. * tests/data/test-diff-suppr/test36-leaf-report-0.txt: Likewise. * tests/data/test-diff-suppr/test5-fn-suppr-report-1.txt: Likewise. * tests/data/test-diff-suppr/test5-fn-suppr-report-2.txt: Likewise. * tests/data/test-diff-suppr/test5-fn-suppr-report-3.txt: Likewise. * tests/data/test-diff-suppr/test5-fn-suppr-report-4.txt: Likewise. * tests/data/test-diff-suppr/test5-fn-suppr-report-5.txt: Likewise. * tests/data/test-diff-suppr/test7-var-suppr-report-1.txt: Likewise. * tests/data/test-diff-suppr/test7-var-suppr-report-2.txt: Likewise. * tests/data/test-diff-suppr/test7-var-suppr-report-3.txt: Likewise. * tests/data/test-diff-suppr/test7-var-suppr-report-4.txt: Likewise. * tests/data/test-diff-suppr/test7-var-suppr-report-5.txt: Likewise. * tests/data/test-diff-suppr/test7-var-suppr-report-6.txt: Likewise. * tests/data/test-diff-suppr/test7-var-suppr-report-7.txt: Likewise. * tests/data/test-diff-suppr/test7-var-suppr-report-9.txt: Likewise. * tests/data/test-diff-suppr/test8-redundant-fn-report-0.txt: Likewise. 2018-04-13 Dodji Seketeli [abipkgdiff]: in leaf mode we always show redundant changes * tools/abipkgdiff.cc (set_diff_context_from_opts): diff_context::show_leaf_changes_only automatically makes us show redundant changes. So do not try to show redundant changes in that case. 2018-04-13 Dodji Seketeli When we say an a change was reported earlier give its source location * src/abg-reporter-priv.h (RETURN_IF_BEING_REPORTED_OR_WAS_REPORTED_EARLIER2) (RETURN_IF_BEING_REPORTED_OR_WAS_REPORTED_EARLIER3): Report the location of the artifact. 2018-04-13 Dodji Seketeli Avoid reporting an enum change if it has already been reported * src/abg-default-reporter.cc (default_reporter::report): In the enum_diff overload, do not report a node if it's always been reported; rather, say that it has been reported earlier. 2018-04-13 Dodji Seketeli Always show redundant changes in leaf mode * src/abg-comparison.cc (diff_context::show_leaf_changes_only): Show redundant changes when in leaf mode. 2018-04-12 Dodji Seketeli Fix leaf report of class data member changes * src/abg-leaf-reporter.cc (leaf_reporter::report): In the class_or_uion_diff overload, do not emit the data member changes header twice. * src/abg-reporter-priv.cc (represent): In the var_diff_sptr overload, show data member changes when its textual representation changed. 2018-04-12 Dodji Seketeli Only show leaf type changes in the leaf type changes section * src/abg-leaf-reporter.cc (report_type_changes_from_diff_maps): Split this out from leaf_reporter::report_changes_from_diff_maps and make it report only about leaf *type* changes. (leaf_reporter::report_changes_from_diff_maps): Use the new report_type_changes_from_diff_maps function. (leaf_reporter::report): In the overload for corpus_diff, use the new report_type_changes_from_diff_maps function, instead of the report_changes_from_diff_maps function. 2018-04-12 Dodji Seketeli Don't filter out typedef changes with redundant underlying type changes * src/abg-default-reporter.cc (default_reporter::report): In the overload for typedef, report underlying type changes een when they are redundant, if the whole typedef change needs to be repoted. 2018-04-12 Dodji Seketeli Improve function changes reporting in leaf and default mode * src/abg-default-reporter.cc (default_reporter::report): In the overload for fn_parm_diff, consider that parameter type changes are never redundant. * src/abg-ir.cc (equals): In the overload for function_type, consider that if the textual representation of the function return type or a function parameter changed, then that's a local change for the current instance of function_type. Likewise, in the overload for function_decl, consider that a change in the textual representation of the function_decl is a local change. Likewise, in the overload of function_decl::parameter, consider that a change in the textual representation of the parameter type is a local change. * src/abg-leaf-reporter.cc (leaf_reporter::report): Report leaf changes to functions. 2018-04-12 Dodji Seketeli Better handle category propagation of pointer changes * src/abg-comparison.cc (leaf_diff_node_marker_visitor::visit_begin): Do not consider local pointer changes as being leaf changes. (suppression_categorization_visitor::visit_end): Allow propagation of the SUPPRESSED_CATEGORY category to pointer diff nodes. (redundancy_marking_visitor::visit_end): Allow propagation of the REDUNDANT_CATEGORY category to pointer diff nodes. * src/abg-ir.cc (equals): In the pointer_type_def overload, consider changes where the textual representation of the pointed-to changed as being local to the pointer type. * src/abg-leaf-reporter.cc (leaf_reporter::report): In the pointer_diff overload, report the change in the textual representation of the pointer. 2018-04-11 Dodji Seketeli Fix meaning of "harmless name change" to avoid overfiltering * include/abg-ir.h (enum_has_non_name_change): Declare new * function. Make it a friend of class enum_type_decl. * src/abg-comp-filter.cc (has_harmless_name_change): A typedef name change cannot be harmless if the textual representation of the underlying type changes too. Also, use the new enum_has_non_name_change to tighten the harmless name change definition for an enum. * src/abg-default-reporter.cc (default_reporter::report_local_typedef_changes): If the name of the typedef changed, report it no matter what. * src/abg-ir.cc (enum_has_non_name_change): Define new function. 2018-04-11 Dodji Seketeli Do not mark "distinct" diff nodes as being redundant * include/abg-comp-filter.h (is_mostly_distinct_diff): Declare new function. * include/abg-fwd.h (peel_typedef_pointer_or_reference_type): Take a boolean to decide to peel qualified types or not. * src/abg-comp-filter.cc (is_mostly_distinct_diff): Define this function. * src/abg-comparison.cc (redundancy_marking_visitor::visit_begin): Do not mark distinct_diff nodes as being redundant. * src/abg-ir.cc (peel_typedef_pointer_or_reference_type): Implement taking a boolean to decide to peel qualified types or not. 2018-04-11 Dodji Seketeli Overhaul of the report diff stats summary * include/abg-comparison.h (corpus_diff::diff_stats::{num_leaf_type_changes, num_leaf_type_changes_filtered_out, net_num_leaf_type_changes, num_leaf_func_changes, num_leaf_func_changes_filtered_out, net_num_leaf_func_changes, num_leaf_var_changes, num_leaf_var_changes_filtered_out, net_num_leaf_var_changes}): Declare new member functions. * src/abg-comparison-priv.h (corpus_diff::priv::count_leaf_type_changes): Declare new member function. * src/abg-comparison.cc (corpus_diff::diff_stats::net_num_leaf_changes): Fix comment. (corpus_diff::diff_stats::{num_leaf_type_changes, num_leaf_type_changes_filtered_out, net_num_leaf_type_changes, num_leaf_func_changes, num_leaf_func_changes_filtered_out, net_num_leaf_func_changes, num_leaf_var_changes, num_leaf_var_changes_filtered_out, net_num_leaf_var_changes}): Define these member functions. (do_count_diff_map_changes): Move this macro out of ... (corpus_diff::priv::count_leaf_changes): ... this. Also, use the new function corpus_diff::priv::count_leaf_type_changes. (corpus_diff::priv::count_leaf_type_changes): Splitted this out of the previous corpus_diff::priv::count_leaf_changes function. (corpus_diff::priv::apply_filters_and_compute_diff_stats): Account for (filtered) types, functions and variables, in a leaf change manner. (corpus_diff::priv::emit_diff_stats): Emit a better stat summary that takes into account leaf-changed types, functions and variables. 2018-04-10 Dodji Seketeli Do not show decl-only-to-def changes in the leaf reporter * include/abg-comp-filter.h (has_class_decl_only_def_change): Declare this function. * src/abg-comp-filter.cc (has_class_decl_only_def_change): Make this function be non-static. * src/abg-comparison.cc (leaf_diff_node_marker_visitor::visit_begin): Use it to avoid marking class-decl-only-def changes as being leaf changes. * libtest43-decl-only-def-change-leaf-report-v0.so: New test input file. * libtest43-decl-only-def-change-leaf-report-v1.so: Likewise. * test43-decl-only-def-change-leaf-report-0.txt: Likewise. * test43-decl-only-def-change-leaf-report-v0.cc: Likewise. * test43-decl-only-def-change-leaf-report-v1.cc: Likewise. * tests/test-diff-filter.cc (in_out_specs): Run the test over the new test input. * tests/data/Makefile.am: Add the new test materials to source distribution. 2018-03-30 Dodji Seketeli Don't possibly forget type definition when reading a CorpusGroup * src/abg-dwarf-reader.cc (add_or_update_class_type): Look for declaration-only-ness to determine if we've already seen the same type from the main corpus of the group. 2018-03-30 Dodji Seketeli Don't crash when invoking kmidiff with no debug info root dir * tools/kmidiff.cc (main): Do not crash on empty debug info root dir. 2018-03-30 Dodji Seketeli Do not enable fedabipkgdiff tests if fedabipkgdiff itself is disabled * tests/Makefile.am: Run runtestfedabipkgdiff{py3?}.py only if fedabipkgdiff itself is enabled. 2018-03-25 Chenxiong Qi Bug 22722 - Make fedabipkgdiff and its tests support both python 3 and 2 * configure.ac: Add new option --enable-python3. Add new test runner file tests/runtestdefaultsupprs-py3 and tests/runtestfedabipkgdiffpy3.sh. Add required six Python module. * tests/Makefile.am: Add new test files tests/runtestdefaultsupprspy3.sh and tests/runtestfedabipkgdiffpy3.sh accordingly. * tests/mockfedabipkgdiff.in: Convert print statement to six.print_. Replace call to function filter with list comprehension. Replace basestring with six.string_types. * tests/runtestdefaultsupprspy3.sh.in: New shell script to run test runtestdefaultsupprs with Python 3. * tests/runtestdefaultsupprs.py.in: Repalce a few tabs with proper number of spaces which is detected by Python 3 interpreter. * tests/runtestfedabipkgdiffpy3.sh.in: New shell script to run test runtestfedabipkgdiff with Python 3. * tests/runtestfedabipkgdiff.py.in: Use python from env in shebang instead of a fixed path to a Python interpreter. * tools/fedabipkgdiff: Globally replace print statement with a function call to print which is available by importing print_function from __future__ module. Use six.print_ to output string to stderr instead. Convert function call to map to for-loop. (cmp_nvr): Change argument to handle a Koji build mapping instead of only the nvr. (Brew.listBuilds): use the new cmp_nvr to sort builds. 2018-03-29 Dodji Seketeli Detect the presence of 'rpm' as it's now needed by abipkgdiff * configure.ac: Detect that the 'rpm' is present. Otherwise, disable rpm support. 2018-03-28 Dodji Seketeli Make abipkgdiff avoid comparing private DSOs from RPMs * doc/manuals/abipkgdiff.rst: Add documentation for the new --private-dso option. * include/abg-tools-utils.h (execute_command_and_get_output) (execute_command_and_get_output, remove_trailing_white_spaces): Declare new functions. * src/abg-tools-utils.cc (execute_command_and_get_output) (get_dsos_provided_by_rpm, remove_trailing_white_spaces): Define new functions. * tests/test-diff-pkg.cc (in_out_specs): Add the new --private-dso option where it makes sense. * tools/abipkgdiff.cc (options::compare_private_dsos): Add new data member. (options::options): Initialize it. (package::public_dso_sonames_): Add new data member. (package::public_dso_sonames): Add new accessors pair. (display_usage): Add a help string for the new --private-dso option. (maybe_create_public_dso_sonames_set) (must_compare_public_dso_only): Define new static functions. (create_maps_of_package_content): Call the new maybe_create_public_dso_sonames_set. Skip packages which SONAME is not in the set of public SONAMES. (parse_command_line): Parse the new --private-dso option. 2018-03-16 Dodji Seketeli Skip changes to function *types* in the leaf reporter * src/abg-leaf-reporter.cc (leaf_reporter::report_changes_from_diff_maps): Don't report function type changes. 2018-03-16 Dodji Seketeli Report change locations in leaf reports * src/abg-leaf-reporter.cc (report_diffs): Report the source location of the diff. * tests/data/test-diff-filter/test42-leaf-report-output-0.txt: Update test reference output. * tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-3.txt: Likewise. * tests/data/test-diff-suppr/test35-leaf-report-0.txt: Likewise. * tests/data/test-diff-suppr/test36-leaf-report-0.txt: Likewise. 2018-03-06 Dodji Seketeli Make the "upload-release" target be usable in parallel * Makefile.am: Re-arrange the upload-release target to make it usable with 'make upload-release -jN'. 2018-03-06 Dodji Seketeli Bump version number to 1.3 * configure.ac: Now that 1.2 is out of the door, bump version number to 1.3 2018-03-06 Dodji Seketeli Update website for 1.2 * doc/website/mainpage.txt: Update link to download the tarball, for 1.2. 2018-03-06 Dodji Seketeli Update ChangeLog for 1.2 * ChangeLog: Updated automatically by running make update-changelog. 2018-03-06 Dodji Seketeli Update NEWS file for 1.2 * NEWS: Update for 1.2 2018-01-31 Dodji Seketeli Fix typo in abipkgdiff documenation * doc/manuals/abipkgdiff.rst: Fix a typo 2018-01-31 Dodji Seketeli Update abipkgdiff documentation wrt suppression specifications * doc/manuals/abipkgdiff.rst: Mention the .abignore file that is read by the tool and considered as a suppression specification file. 2018-03-06 Dodji Seketeli Fix indentation in the DWARF reader * src/abg-dwarf-reader.cc (build_subrange_type): Fix indentation. 2018-03-02 Dodji Seketeli Fix the output indentation of abidiff --help * tools/abidiff.cc (display_usage): Fix indentation of the help string for the --drop-private-types option. 2018-03-02 Dodji Seketeli Bug 22913 - Correctly de-duplicate pointers to anonymous structs inside a given * src/abg-dwarf-reader.cc (pointer_or_qual_die_of_anonymous_class_type) (die_is_qualified_type): Define new functions. (compare_dies): If pointers, reference or qualified type have an anonymous struct as their underlying type, then we need to structurally compare the underlying anonymous struct. * tests/data/test-diff-dwarf/libtest43-PR22913-v{0,1}.so: New binary test input files. * tests/data/test-diff-dwarf/test43-PR22913-report-0.txt: New reference output of the comparison of the two binaries above. * tests/data/test-diff-dwarf/test43-PR22913-v{0,1}.c: Source code of the binaries above. * tests/test-diff-dwarf.cc (in_out_specs): Make the test harness compare the two binaries above. * tests/data/Makefile.am: Add the new test files above to the source distribution. 2018-02-27 Dodji Seketeli Initial support for Ada ranges * include/abg-ir.h (type_maps::subrange_types): Declare new accessors. (is_ada_language, is_subrange_type): Declare new functions. (class array_type_def::subrange_type): Make this extend type_base and decl_base. (array_type_def::subrange_type::{get_language, operator==, get_pretty_representation, traverse}): Declare new member functions. (ir_node_visitor::visit_begin): Add new overloads for array_type::def::subrange_type. * src/abg-dwarf-reader.cc (build_subrange_type): Define new static function. (build_subranges_from_array_type_die): Cleanup the parameters of this function. (build_array_type): Adjust. (build_ir_node_from_die): Support free-form DW_TAG_subrange_type. (read_context::odr_is_relevant): Handle Ada. (die_qualified_type_name): Support DW_TAG_subrange_type. (die_pretty_print_type): Likewise. Make the handling of DW_TAG_subrange_type use die_qualified_type_name. Adjust the use of build_subranges_from_array_type_die. (get_scope_die): a DW_TAG_array_type cannot be a scope. Rather, it's its scope that can be a scope. * src/abg-ir.cc (type_maps::priv::subrange_types_): New data member. (type_maps::empty): Adjust. (type_maps::subrange_types): Define new accessors. (is_ada_language, is_subrange_type): Define new functions. (odr_is_relevant): Support Ada. (maybe_update_types_lookup_map): Add an overload for array_type_def::subrange_type. In the decl_base_sptr overload, add support for the array_type_def::subrange_type type. (struct array_type_def::subrange_type::priv::location_): Remove this as it's now carried by the parent decl_base type. (array_type_def::subrange_type::subrange_type): Adjust. Take an environement pointer, a name, an underlying type and a language. (array_type_def::subrange_type::{g,s}et_underlying_type): Define new accessors. (array_type_def::subrange_type::{get_language, get_pretty_representation, traverse}): Define new member functions. (array_type_def::subrange_type::as_string): Add a representation for Ada. (equals): Define new overload for array_type_def::subrange_type. (array_type_def::subrange_type::operator==): Define three new overloads for decl_base, type_base and subrange_type. (array_type_def::subrange_type::operator!=): Define new operator. (get_type_representation): In the overload for array_type_def, support Ada. (array_type_def::get_language): Define new member function. (ir_node_visitor::visit_{begin,end}): Define new overloads for array_type_def::subrange_type. * src/abg-reader.cc (build_subrange_type): Adjust documentation. Support the new 'id', 'name', and 'type-id' properties. * src/abg-writer.cc (write_array_subrange_type): Define new static function. (write_array_type_def): Use the new write_array_subrange_type function. * tests/data/test-abidiff/test-PR18166-libtirpc.so.abi: Adjust. * tests/data/test-annotate/libtest23.so.abi: Likewise. * tests/data/test-annotate/libtest24-drop-fns-2.so.abi: Likewise. * tests/data/test-annotate/libtest24-drop-fns.so.abi: Likewise. * tests/data/test-annotate/test13-pr18894.so.abi: Likewise. * tests/data/test-annotate/test14-pr18893.so.abi: Likewise. * tests/data/test-annotate/test15-pr18892.so.abi: Likewise. * tests/data/test-annotate/test17-pr19027.so.abi: Likewise. * tests/data/test-annotate/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: Likewise. * tests/data/test-annotate/test19-pr19023-libtcmalloc_and_profiler.so.abi: Likewise. * tests/data/test-annotate/test20-pr19025-libvtkParallelCore-6.1.so.abi: Likewise. * tests/data/test-annotate/test21-pr19092.so.abi: Likewise. * tests/data/test-annotate/test7.so.abi: Likewise. * tests/data/test-read-dwarf/PR22015-libboost_iostreams.so.abi: Likewise. * tests/data/test-read-dwarf/PR22122-libftdc.so.abi: Likewise. * tests/data/test-read-dwarf/libtest23.so.abi: Likewise. * tests/data/test-read-dwarf/libtest24-drop-fns-2.so.abi: Likewise. * tests/data/test-read-dwarf/libtest24-drop-fns.so.abi: Likewise. * tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: Likewise. * tests/data/test-read-dwarf/test11-pr18828.so.abi: Likewise. * tests/data/test-read-dwarf/test12-pr18844.so.abi: Likewise. * tests/data/test-read-dwarf/test13-pr18894.so.abi: Likewise. * tests/data/test-read-dwarf/test14-pr18893.so.abi: Likewise. * tests/data/test-read-dwarf/test15-pr18892.so.abi: Likewise. * tests/data/test-read-dwarf/test16-pr18904.so.abi: Likewise. * tests/data/test-read-dwarf/test17-pr19027.so.abi: Likewise. * tests/data/test-read-dwarf/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: Likewise. * tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi: Likewise. * tests/data/test-read-dwarf/test20-pr19025-libvtkParallelCore-6.1.so.abi: Likewise. * tests/data/test-read-dwarf/test21-pr19092.so.abi: Likewise. * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: Likewise. * tests/data/test-read-dwarf/test7.so.abi: Likewise. * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Likewise. * tests/data/test-read-write/test25.xml: Likewise. 2018-02-06 Dodji Seketeli Add newline at end of version string display * tools/abidiff.cc (main): Add a newline at the end of the version string line. * tools/abidw.cc (main): Likewise. * tools/abipkgdiff.cc (main): Likewise. * tools/kmidiff.cc (main): Likewise. 2018-01-31 Dodji Seketeli Bump version number to 1.2 * configure.ac: Bump version number to 1.2 2018-01-25 Dodji Seketeli Update website for 1.1 * doc/website/mainpage.txt: Update for 1.1. 2018-01-25 Dodji Seketeli Update ChangeLog for 1.1 * ChangeLog: Automatically update using 'make update-changelog'. 2018-01-25 Dodji Seketeli Update NEWS file for 1.1 * NEWS: Update for 1.1 2018-01-29 Dodji Seketeli Correctly link with pthread * src/Makefile.am: use -lpthread, not -pthread. 2018-01-18 Dodji Seketeli Skip class types with changed names in leaf reports * include/abg-comp-filter.h (has_class_or_union_type_name_change) (has_basic_or_class_type_name_change): Declare new functions. * include/abg-comparison.h (is_diff_of_class_or_union_type): Likewise. * src/abg-comp-filter.cc (has_class_or_union_type_name_change) (has_basic_or_class_type_name_change): * src/abg-comparison.cc (leaf_diff_node_marker_visitor::visit_begin): Use the new filtering::has_basic_or_class_type_name_change to test if a basic or class/union diff type carries a name change. Update comment. * tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-3.txt: Adjust. 2018-01-16 Dodji Seketeli Only consider local changes when filtering subtype changes * src/abg-comparison-priv.h (class_or_union_diff::priv::{count_filtered_subtype_changed_dm, count_filtered_changed_dm}): Take an additional flag. * src/abg-comparison.cc (class_or_union_diff::priv::{count_filtered_subtype_changed_dm, count_filtered_changed_dm}): Likewise. When asked, only consider local changes. * src/abg-leaf-reporter.cc (leaf_reporter::report): Consider reporting only the *net local* data member changes. 2018-01-16 Dodji Seketeli Make kmidiff show the wrong option when it complains about it * tools/kmidiff.cc (parse_command_line): Don't forget to record the wrong option in options::wrong_option. 2018-01-12 Dodji Seketeli Fix typo in abipkgdiff.cc * tools/abipkgdiff.cc (compare_task::perform): Fix a typo in a comment. 2018-01-12 Dodji Seketeli Suppress duplicates when listing package content * tools/abipkgdiff.cc (maybe_update_package_content): Rename maybe_update_vector_of_package_content into this. Take a set of strings, rather than a vector of strings. (get_interesting_files_under_dir): Adjust. 2018-01-12 Dodji Seketeli Fix symlinks paths handling in abipkgdiff * include/abg-tools-utils.h (real_path): Declare new function. * src/abg-tools-utils.cc (real_path): Define it. * tools/abipkgdiff.cc (package::convert_path_to_relative): Use the new real_path function to consider real path (where symlinks are resolved) of the extraction directory of the package. (get_interesting_files_under_dir): Similarly, use the new real_path function to consider the real path of the directory we are exploring. 2018-01-12 Dodji Seketeli Fix logic in common_prefix * src/abg-tools-utils.cc (common_prefix): Fix logic error. 2018-01-12 Dodji Seketeli abipkgdiff --verbose shouldn't trigger --fail-no-dbg * tools/abipkgdiff.cc (compare): In the overload for elf_files, separate the effect of --verbose from the one of --fail-no-dbg. 2018-01-10 Dodji Seketeli Bug 22692 - Consider Java as a language that supports the ODR * include/abg-ir.h (is_java_language): Declare new function. * src/abg-dwarf-reader.cc (odr_is_relevant): Adjust to consider that Java also respects the ODR. * src/abg-ir.cc (is_java_language): Define new function. (odr_is_relevant): Adjust to consider that Java also respects the ODR. 2018-01-09 Dodji Seketeli Fix version revision number printing in tools --help option * configure.ac: Properly set the VERSION_REVISION macro. * include/abg-tools-utils.h (get_library_version_string): Declare new function. * src/abg-tools-utils.cc (get_library_version_string): Define the new function. (gen_suppr_spec_from_kernel_abi_whitelist): Dis-ambiguate the use of the 'config' type. * tools/abicompat.cc (main): Use the new abigail::tools_utils::get_library_version_string function. * tools/abidiff.cc (main): Likewise. * tools/abidw.cc (main): Likewise. * tools/abilint.cc (main): Likewise. * tools/abipkgdiff.cc (main): Likewise. * tools/abisym.cc (main): Likewise. * tools/kmidiff.cc (main): Likewise. 2018-01-09 Dodji Seketeli Bug 22684 - Add --d{1,2} options to kmidiff * doc/manuals/kmidiff.rst: Add documentation for the new options. * tools/kmidiff.cc (options::{di_root_path{1,2}): New data members. (display_usage): Add help strings for the new options. (parse_command_line): Parse the new options. (main): Pass the debug info root directory to build_corpus_group_from_kernel_dist_under. 2018-01-08 Dodji Seketeli Update copyright notice for all source files * update-copyright.sh: New sed-based script to update the year in the copyright notice. * include/abg-comp-filter.h: Updated the year in the copyright notice. * include/abg-comparison.h: Likewise. * include/abg-config.h: Likewise. * include/abg-corpus.h: Likewise. * include/abg-diff-utils.h: Likewise. * include/abg-dwarf-reader.h: Likewise. * include/abg-fwd.h: Likewise. * include/abg-hash.h: Likewise. * include/abg-ini.h: Likewise. * include/abg-interned-str.h: Likewise. * include/abg-ir.h: Likewise. * include/abg-libxml-utils.h: Likewise. * include/abg-libzip-utils.h: Likewise. * include/abg-reader.h: Likewise. * include/abg-reporter.h: Likewise. * include/abg-sptr-utils.h: Likewise. * include/abg-suppression.h: Likewise. * include/abg-tools-utils.h: Likewise. * include/abg-traverse.h: Likewise. * include/abg-viz-common.h: Likewise. * include/abg-viz-dot.h: Likewise. * include/abg-viz-svg.h: Likewise. * include/abg-workers.h: Likewise. * include/abg-writer.h: Likewise. * src/abg-comp-filter.cc: Likewise. * src/abg-comparison-priv.h: Likewise. * src/abg-comparison.cc: Likewise. * src/abg-config.cc: Likewise. * src/abg-corpus-priv.h: Likewise. * src/abg-corpus.cc: Likewise. * src/abg-default-reporter.cc: Likewise. * src/abg-diff-utils.cc: Likewise. * src/abg-dwarf-reader.cc: Likewise. * src/abg-hash.cc: Likewise. * src/abg-ini.cc: Likewise. * src/abg-internal.h: Likewise. * src/abg-ir-priv.h: Likewise. * src/abg-ir.cc: Likewise. * src/abg-leaf-reporter.cc: Likewise. * src/abg-libxml-utils.cc: Likewise. * src/abg-libzip-utils.cc: Likewise. * src/abg-reader.cc: Likewise. * src/abg-reporter-priv.cc: Likewise. * src/abg-reporter-priv.h: Likewise. * src/abg-sptr-utils.cc: Likewise. * src/abg-suppression-priv.h: Likewise. * src/abg-suppression.cc: Likewise. * src/abg-tools-utils.cc: Likewise. * src/abg-traverse.cc: Likewise. * src/abg-viz-common.cc: Likewise. * src/abg-viz-dot.cc: Likewise. * src/abg-viz-svg.cc: Likewise. * src/abg-workers.cc: Likewise. * src/abg-writer.cc: Likewise. * tests/print-diff-tree.cc: Likewise. * tests/test-abicompat.cc: Likewise. * tests/test-abidiff-exit.cc: Likewise. * tests/test-abidiff.cc: Likewise. * tests/test-alt-dwarf-file.cc: Likewise. * tests/test-core-diff.cc: Likewise. * tests/test-diff-dwarf-abixml.cc: Likewise. * tests/test-diff-dwarf.cc: Likewise. * tests/test-diff-filter.cc: Likewise. * tests/test-diff-pkg.cc: Likewise. * tests/test-diff-suppr.cc: Likewise. * tests/test-diff2.cc: Likewise. * tests/test-ir-walker.cc: Likewise. * tests/test-lookup-syms.cc: Likewise. * tests/test-read-dwarf.cc: Likewise. * tests/test-read-write.cc: Likewise. * tests/test-types-stability.cc: Likewise. * tests/test-utils.cc: Likewise. * tests/test-utils.h: Likewise. * tests/test-write-read-archive.cc: Likewise. * tools/abiar.cc: Likewise. * tools/abicompat.cc: Likewise. * tools/abidiff.cc: Likewise. * tools/abidw.cc: Likewise. * tools/abilint.cc: Likewise. * tools/abipkgdiff.cc: Likewise. * tools/abisym.cc: Likewise. * tools/binilint.cc: Likewise. * tools/kmidiff.cc: Likewise. 2017-12-15 Dodji Seketeli Bug 22437 - Make fedabipkgdiff use all debug info RPMs of a sub-RPM * tools/fedabipkgdiff (RPM::get_all_debuginfo_rpms): Define new member function. (RPM::generate_comparison_halves): The ancillary debuginfo RPM of a given RPM now has a list type; there can be more than one debuginfo RPM associated to a given RPM, especially if the RPM is a devel one. (format_debug_info_pkg_options): Define new function. (abipkgdiff): Use the new function above. 2017-12-15 Dodji Seketeli Improve comments wording in fedabipkgdiff * tools/fedabipkgdiff (class RPM): Fix wording. (RPM::__init__): Likewise. 2017-12-11 Dodji Seketeli Update & cleanup the tools manuals summary * doc/manuals/abidw.rst: Use the same header structure as or the other tools manual. * doc/manuals/kmidiff.rst: Likewise. * doc/manuals/libabigail-tools.rst: Add the new kmidiff tool to the summary. 2017-12-01 Dodji Seketeli Bug 22488 - Make abipkgdiff handle different binaries with same basename * include/abg-tools-utils.h (string_suffix) (sorted_strings_common_prefix): Declare new functions. (dir_name): Take a new keep_separator_at_end parameter at the end. * src/abg-tools-utils.cc (dir_name): Take a new keep_separator_at_end parameter at the end. Add a comment for it and update. (string_suffix, sorted_strings_common_prefix): Define new functions. (common_prefix): Define new static function. * tools/abipkgdiff.cc (get_interesting_files_under_dir): Forward declare this pre-existing static function. (package::{common_paths_prefix_, elf_file_paths_}): New data members. (package::{common_paths_prefix, elf_file_paths, convert_path_to_relative, convert_path_to_unique_suffix, load_elf_file_paths}): New member functions. (create_maps_of_package_content): Use the new package::{load_elf_file_paths, convert_path_to_unique_suffix} functions. (compare_prepared_userspace_packages): Show relative paths of package elements in reported. * tests/data/test-diff-pkg/dbus-glib-0.104-3.fc23.x86_64--dbus-glib-0.104-3.fc23.armv7hl-report-0.txt: Update test ouptut. * tests/data/test-diff-pkg/libxfce4ui-devel-4.12.1-8.fc27.ppc64-self-report-0.txt: Likewise. 2017-12-01 Dodji Seketeli Fully report diagnostic about alternate debug info file not found * src/abg-dwarf-reader.cc (status_to_diagnostic_string): Report textual diagnostic for the STATUS_ALT_DEBUG_INFO_NOT_FOUND case too. 2017-11-27 Dodji Seketeli Bug 22436 - make abipkgdiff accept several debuginfo packages * doc/manuals/abipkgdiff.rst: Document the fact that --d{1,2} can be provided several times on the command line. * tools/abipkgdiff.cc (options::debug_packages{1,2}): Rename the debug_package{1,2} data members into this, and make them be vector of strings, rather than just strings. (package::debug_info_packages_): Renamed package::debug_info_package_ into this and make it be a vector of package_sptr, rather than just a package_sptr. (package::debug_info_packages): Renamed the method package::debug_info_package into this and -- for the getter overload -- make it return a vector of package_sptr, rather than just a package_sptr. Likewise for the setter overload. Add a non-const getter overload. (package::erase_extraction_directories) (extract_package_and_map_its_content): Adjust. (extract_rpm, extract_deb): Do not erase the content of the extraction directory (if it was pre-existing) prior to extracting the RPM/deb into it. (pkg_extraction::pkgs): Renamed pkg_extraction::pkg into this and make it be a vector of packages, rather than just a package. (pkg_extraction::pkg_extraction): Adjust to take a package_sptr rather than just a package. Add an overload to take a vector of packages_sptr. (pkg_extraction::perform): Extract the vector of package that the task is not responsible for, not just one random package. (extract_package_and_map_its_content): Adjust. (prepare_packages): Take smart pointers to package rather than just packages. Adjust accordingly. (compare_prepared_package): Make the overload that takes two packages to take two smart pointers of packages. (compare): Make the overload that takes two package take two package_sptr. (parse_command_line): Parse having --d{1,2} several times for a given input package. (main): Take several debug info packages for one input file. * include/abg-tools-utils.h (split_string): Declare ... * src/abg-tools-utils.cc (split_string): ... new function. * tests/data/test-diff-pkg/libxfce4ui-debuginfo-4.12.1-8.fc27.ppc64.rpm: Add a new RPM test input file. * tests/data/test-diff-pkg/libxfce4ui-devel-4.12.1-8.fc27.ppc64-self-report-ok-0.txt: new reference output file. * tests/data/Makefile.am: Add the new test input files above to source distribution. * tests/test-diff-pkg.cc (in_out_spec): Add new test entry to specify two debug info packages for one input package. (test_task::perform): Support having several debug info package paths in the IntOutSpec::{first,second}_in_debug_package_path data member. The debug info packages paths are separated by either a white space or commas. 2017-11-22 Dodji Seketeli Update version number to 1.1 * configure.ac: Update version number to 1.1 2017-11-22 Dodji Seketeli Bug 22076 - Disable fedabipkgdiff for old koji clients * configure.ac: Try to invoke the koji.read_config method. If it fails then disable the fedabipkgdiff feature. 2017-11-22 Dodji Seketeli Update the release text template after 1.0 * release-text-template.txt: Update some wording. 2017-11-22 Dodji Seketeli Update website for 1.0 * doc/website/mainpage.txt: Update after 1.0 release. 2017-11-21 Dodji Seketeli Update NEWS file for 1.0 * NEWS: Update for 1.0 2017-11-21 Dodji Seketeli Automatically Update ChangeLog for 1.0 * ChangeLog: Automatically update for 1.0 2017-11-21 Dodji Seketeli Bug 22438 - Emit a clear message when debug info is not found * include/abg-dwarf-reader.h (enum abigail::dwarf_reader::status): Add a new STATUS_ALT_DEBUG_INFO_NOT_FOUND enumerator there. (refers_to_alt_debug_info): Declare new function. * src/abg-dwarf-reader.cc (read_corpus_from_elf): Detect when the referred-to alternate debug info file is not found and flip the STATUS_ALT_DEBUG_INFO_NOT_FOUND bit of the status accordingly. If the debug info was found but not the alternate debug info, then do not try to read the debug info at all. (refers_to_alt_debug_info): Define new function. * tools/abidiff.cc (handle_error): Define new static function. (main): Use it, rather than handling errors preventing libabigail from reading the corpus on a case by case basis. tools/abipkgdiff.cc (compare): Handle the case where no alternate debug info was found. * tests/data/test-diff-pkg/libxfce4ui-devel-4.12.1-8.fc27.ppc64-self-report-0.txt: New test output reference. * tests/data/test-diff-pkg/libxfce4ui-devel-4.12.1-8.fc27.ppc64.rpm: New test input RPM. * tests/data/test-diff-pkg/libxfce4ui-devel-debuginfo-4.12.1-8.fc27.ppc64.rpm: Likewise. * tests/data/Makefile.am: Add the new test files above to source distribution. * tests/test-diff-pkg.cc (in_out_specs): Add a new test case from the new input files above. 2017-11-13 Dodji Seketeli Support systems where fts.h can't be used with _FILE_OFFSET_BITS set * configure.ac: Detect if we are on a system where fts.h cannot be included with _FILE_OFFSET_BITS defined. If that is the case, then define the BAD_FTS macro. * src/abg-tools-utils.cc: If BAD_FTS is defined then include fts.h with _FILE_OFFSET_BITS not defined (that is, before config.h) but then make sure that open and fopen are 64 bits aware. * tools/abipkgdiff.cc: Likewise. 2017-11-08 Dodji Seketeli Edit the NEWS file a tiny little bit for 1.0 * NEWS: Cleanup. 2017-11-06 Dodji Seketeli Automatically Update ChangeLog for 1.0 * ChangeLog: Update this file by running "make update-changelog". 2017-11-06 Dodji Seketeli Update NEWS file for 1.0 changes * NEWS: Update for 1.0 changes 2017-11-06 Dodji Seketeli Bump version number to 1.0 * configure.ac: Bump version number to 1.0 2017-11-08 Dodji Seketeli Don't make system headers depend on config.h * tools/abipkgdiff.cc: Include config.h after system headers and before libabigail's headers. 2017-11-02 Dodji Seketeli Wire the --no-show-locs option to abidw * doc/manuals/abidw.rst: Update the documentation. * tests/test-annotate.cc: Now that --no-show-locs has an effect on the ABIXML output, let's not use it here, because it changes the output and we don't want that. * tools/abidw.cc (display_usage): Fix a typo in the help string. (load_corpus_and_write_abixml): Set the "show-locs" option to the write_context object that we use. 2017-11-02 Dodji Seketeli Allow setting options to instances of xml_writer::write_context * include/abg-writer.h (create_write_context, set_show_locs) (set_annotate): Declare new functions. (write_corpus, write_corpus_group): Remove the output stream and the annotate parameters as these can be retrieved from the context. * src/abg-writer.cc (write_context::m_show_locs): New data member. (write_context::write_context): Initialize it. (write_context::{get_show_locs, set_show_locs}): Add new member functions. (write_location): Take a write_context, rather than an output stream. From the context, we detect if the user did set the "show loc" option and act accordingly. Write the second overload in terms of the first one. (create_write_context, set_show_locs, set_annotate): Define new functions. (write_type_decl, write_qualified_type_def) (write_pointer_type_def, write_reference_type_def) (write_array_type_def, write_enum_type_decl, write_typedef_decl) (write_var_decl, write_function_decl) (write_class_decl_opening_tag, write_union_decl_opening_tag) (write_type_tparameter, write_non_type_tparameter) (write_function_tdecl, write_class_tdecl): Adjust the invocation of write_location. (write_corpus, write_corpus_group): Remove the output stream and the annotate parameters as these can be retrieved from the context. Adjust. * tools/abidw.c: (load_corpus_and_write_abixml): Create a write_context object, set the 'annotate' option to it and use that object to actually write out the corpus. 2017-11-02 Dodji Seketeli Remove useless vertical space from src/abg-writer.cc * src/abg-writer.cc (class write_context): Remove useless vertical space near the end of the class definition. 2017-10-16 Dodji Seketeli Add a --suppressions option to fedabipkgdiff * tools/fedabipkgdiff (abipkgdiff): If a suppression file was provided, pass it to the underlying abipkgdiff tool. (build_commandline_args_parser): Parse the new --suppressions option. * docs/manuals/fedabipkgdiff.rst: Add documentation for the new --suppressions option. 2017-10-16 Dodji Seketeli Handle exceptions when global_config is not yet set in fedabipkgdiff * tools/fedabipkgdiff: When handling an exception, if the global_config object is not yet set then just let the exception through. 2017-10-11 Dodji Seketeli Fix a indentation warning from GCC 7.2.1 * tools/abipkgdiff.cc (compare): In the overload of elf_file, fix a mis-indentation pointed out by a GCC 7.2.1 warning. 2017-10-11 Dodji Seketeli Cleanup a switch-case logic to avoid a GCC 7.2.1 warning * src/abg-dwarf-reader.cc (die_qualified_type_name): Cleanup a switch case to make the form support more what we meant, and shut down a GCC 7.2.1 warning. 2017-10-09 Mark Wielaard Fix -Wmisleading-indentation warning in abg-leaf-reporter.cc. * src/abg-leaf-reporter.cc (leaf_reporter::report): Fix misleading indentation. 2017-10-06 Dodji Seketeli Add --impacted-changes option to kmidiff * doc/manuals/kmidiff.rst: Document the new --impacted-changes option. * tools/kmidif.cc (options::show_impacted_interfaces): Add new data member. (options::options): Initialize the new data member to false. (display_usage): Add a description string for the new --impacted-changes option. (parse_command_line): Parse the new --impacted-changes option. (set_diff_context): Update the 'show-impacted-interface' property accordingly. 2017-10-04 Dodji Seketeli Add --full-impact option to kmidiff * doc/manuals/kmidiff.rst: Add documentation for the new --full-impact|-f option. * tools/kmidiff.cc (options::leaf_changes_only): Add new data member. (option::option): Initialize the new data member. (display_usage): Add a documentation string for the new --full-impact|-f option. (parse_command_line): Parse the new --full-impact|-f option. (set_diff_context): Set the diff context appropriately. 2017-09-18 Dodji Seketeli Add a --leaf-changes-only option to abipkgdiff * doc/manuals/abipkgdiff.rst: Add documentation for the new --leaf-change-only, --impacted-interfaces and --full-impact options. * tools/abipkgdiff.cc (options::{leaf_changes_only, show_impacted_interfaces, show_full_impact_report): Add new data members. (options::options): Initialize them. (display_usage): Add help strings for the new --leaf-change-only, --impacted-interfaces and --full-impact|-f options. (set_diff_context_from_opts): Set the diff context for the 'leaf-changes-only' and 'show-impacted-interfaces' flags. (parse_command_line): Parse the --leaf-change-only, --impacted-interfaces and --full-impact options. Handle the case where the --linux-kernel-abi-whitelist|-w option is given a whitelist *package*. * tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-3.txt: New test output reference. * tests/test-diff-pkg.cc (in_out_spec): Compare data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64.rpm and data/test-diff-pkg/spice-server-0.12.8-1.el7.x86_64.rpm with the new --leaf-changes-only and --impacted-interfaces options, using the new output reference above. * tests/data/Makefile.am: Add the new test material to source distribution. 2017-08-02 Dodji Seketeli Initial implementation of a --leaf-changes-only option to abidiff * doc/manuals/abidiff.rst: Add documentation the new --leaf-changes-only and --impacted-interfaces options. * src/abg-leaf-reporter.cc: New file. * src/Makefile.am: Add the new src/abg-leaf-reporter.cc file to source distribution. * include/abg-fwd.h (get_var_size_in_bits) (function_decl_is_less_than): Declare new functions. (get_name): Add new overload for type_or_decl_base*. * include/abg-ir.h (struct type_or_decl_hash, type_or_decl_equal) (type_or_decl_base_comp): Define new types. (artifact_sptr_set_type, artifact_ptr_set_type): Define new typedefs. * include/abg-comp-filter.h: Update copyright year. (has_basic_type_name_change): Add new function declaration. * src/abg-comp-filter.cc (decl_name_changed): Take a type_or_decl_base rather than just a decl. Add an overload for diff*. (has_basic_type_name_change): Define new function. * include/abg-comparison.h: Update copyright year. (string_diff_ptr_map): Define this new typedef. (class diff_maps): Define this new class. (diff_context::{set_corpora}): Remove this member function. (diff_context::{set_corpus_diff, get_corpus_diff, show_leaf_changes_only, show_impacted_interfaces, forbid_visiting_a_node_twice_per_interface}): Declare these new member functions. (diff_node_visitor::priv_): Add a new pimpl data member. (diff_node_visitor::{diff_node_visitor, get_visiting_kind, set_visiting_kind}): Turn these into out-of-line member functions. (diff_node_visitor::{set,get}_current_topmost_iface_diff): Add new member functions. (class {scope_diff, function_type_diff, corpus_diff}): Add class leaf_reporter as a friend. (corpus_diff::mark_leaf_diff_nodes, get_leaf_diffs): Declare new member functions. (diff::{visiting_a_node_twice_is_forbidden_per_interface, parent_interface_node}): Define new member functions. (is_diff_of_basic_type): Return a type_decl_diff* rather than just a bool. (is_enum_diff, is_array_diff, is_function_type, is_typedef_diff) (is_corpus_diff): Declare new functions. (corpus_diff::diff_stats::{num_leaf_changes, num_leaf_changes_filtered_out, net_num_leaf_changes}): Add new member functions. (is_distinct_diff): Declare new function. * include/abg-reporter.h: Forward-declare "class diff_maps". (reporter_base::diff_to_be_reported): Declare a new virtual member function. (reporter_base::{report_local_typedef_changes, report_local_reference_type_changes, report_local_function_type_changes}): Declare new member functions. (class leaf_reporter): Define new type. * src/abg-comparison-priv.h (struct diff_hash, diff_equal): Define new types. (diff_artifact_set_map_type): Define new typedef. (diff_context::priv::{first_corpus_, second_corpus_}): Remove these data members. (diff_context::priv::{corpus_diff_, leaf_changes_only_, reset_visited_diffs_for_each_interface_, show_impacted_interfaces_}): Add new data members. (diff_context::priv::priv): Adjust. (corpus_diff::priv::{leaf_diffs_, parent_interface_}): Add new data member. (corpus_diff::diff_stats::priv::{num_leaf_changes, num_leaf_changes_filtered_out}): Add new data members. (corpus_diff::priv::count_leaf_changes): Define new member function. (sort_artifacts_set, get_fn_decl_or_var_decl_diff_ancestor) (is_diff_of_global_decls): Declare new functions. (function_comp::operator()): Factorize this out into the new function abigail::ir::function_decl_is_less_than. * src/abg-ir.cc (get_var_size_in_bits) (function_decl_is_less_than): Define new functions. (get_name): Define new overload for type_or_decl_base*. * src/abg-comparison.cc (is_enum_diff, is_typedef_diff) (is_array_diff, is_function_type_diff, is_corpus_diff) (is_distinct_diff, sort_artifacts_set, is_diff_of_global_decls): Define new functions. (is_union_diff): Fix comment. (diff_context::forbid_visiting_a_node_twice_per_interface): Define new member functions. (diff_context::set_corpus_diff, get_corpus_diff) (diff_context::show_leaf_changes_only) (diff_context::visiting_a_node_twice_is_forbidden_per_interface) (diff_context::show_impacted_interfaces): Define new member functions. (diff_context::get_reporter): Create the reporter that matches what diff_context::show_leaf_changes_only says. (diff_node_visitor::priv): Define a new type. (diff_node_visitor::{diff_node_visitor, get_visiting_kind, set_visiting_kind, or_visiting_kind, set_current_topmost_iface_diff, get_current_topmost_iface_diff}): Define new out-of-line member functions. (struct diff_maps::priv): Define new type. (diff_maps::{diff_maps, get_type_decl_diff_map, get_type_decl_diff_map, get_enum_diff_map, get_class_diff_map, get_union_diff_map, get_typedef_diff_map, get_array_diff_map, get_function_type_diff_map, get_function_decl_diff_map, get_var_decl_diff_map, get_reference_diff_map, get_fn_parm_diff_map, get_distinct_diff_map, insert_diff_node, lookup_impacted_interfaces}): Define member functions. (corpus_diff::{mark_leaf_diff_nodes, get_leaf_diffs}): Define new member functions. (struct leaf_diff_node_marker_visitor): Define new type. (corpus_diff::apply_filters_and_suppressions_before_reporting): Mark diff nodes in here. (corpus_diff::traverse): Appropriately set the current topmost interface into the visitor before visiting a diff node. (compute_diff): In the overload for corpus_sptr, adjust to reflect that we are now storing the corpus_diff in the diff context. (is_diff_of_basic_type): Return a type_decl_diff*, not just a bool. (corpus_diff::priv::count_leaf_changes): Define a new member function. (corpus_diff::diff_stats::{num_leaf_changes, num_leaf_changes_filtered_out, net_num_leaf_changes}): Define new member functions. (corpus_diff::priv::apply_filters_and_compute_diff_stats): Use the new corpus_diff::priv::count_leaf_changes to compute the number of leaf changes. (corpus_diff::priv::emit_diff_stats): Emit the report about leaf type changes when necessary. * src/abg-reporter-priv.h (report_mem_header): Declare new overload. (maybe_show_relative_offset_change,): Pass the var_diff_sptr parameter by const reference. (represent): Pass the var_diff_sptr parameter by const reference and take a new "local-only" flag. (maybe_show_relative_size_change) (maybe_report_interfaces_impacted_by_diff): Declare new functions. * src/abg-default-reporter.cc: Adjust copyright year. (default_reporter::{report_local_typedef_changes, report_local_qualified_type_changes, report_local_reference_type_changes, report_local_function_type_changes}): Define new member functions. (default_reporter::report): Adjust. Add an overload for function_type_diff&. In the overload for qualified_type_diff, if the name of the underlying type changed, do not detail the changes any further. In the overload for function_decl_diff, Adjust to use the new diff_context::get_{first, second}_corpus member function. In the overload for enum_diff, call the new maybe_report_interfaces_impacted_by_diff that is advertised below. * src/abg-reporter-priv.cc (represent): Adjust the overload for var_diff_sptr. (report_mem_header): Define new overload. (maybe_show_relative_size_change) (maybe_report_interfaces_impacted_by_diff): Define new functions. (reporter_base::diff_to_be_reported): Define new member function. (maybe_show_relative_offset_change): Pass the var_diff_sptr parameter by const reference. (represent): In the overload for var_diff_sptr, pass the var_diff_sptr parameter by reference. Take a 'local_only' flag. Iisplay type changes only if we are not displaying "local changes only". Display size changes of data members too, when in "local-only" mode. * src/abg-suppression.cc (sonames_of_binaries_match) (names_of_binaries_match): Adjust. * tools/abidiff.cc (options::{leaf_changes_only, show_impacted_interfaces}): Add new data members. (display_usage): Emit usage string for the new --leaf-changes-only and --impacted-interfaces options. (parse_command_line): Parse the new --leaf-changes-only and the --impacted-interfaces options. (set_diff_context_from_opts): Set the 'show-leaf-changes' and the 'show-impacted-interfaces' flags. * tests/data/test-diff-filter/libtest42-leaf-report-v{0,1}.so: New test input. * tests/data/test-diff-filter/test42-leaf-report-output-0.txt: New test reference output. * tests/data/test-diff-filter/test42-leaf-report-v{0,1}.cc: Source code of the new test inputs. * tests/test-diff-filter.cc (in_out_specs): Use the new test inputs above in this harness. * tests/data/test-diff-suppr/libtest35-leaf-v0.so: New test input. * tests/data/test-diff-suppr/test35-leaf-report-0.txt: New test reference output. * tests/data/test-diff-suppr/test35-leaf-v{0,1}.cc: Source code of the new test inputs. * tests/data/test-diff-suppr/test35-leaf.suppr: Suppression specification to use for the test35 test. * tests/data/test-diff-suppr/libtest36-leaf-v0.so: New test input. * tests/data/test-diff-suppr/libtest36-leaf-v1.so: Likewise. * tests/data/test-diff-suppr/test36-leaf-report-0.txt: New reference test output. * tests/data/test-diff-suppr/test36-leaf-v0.cc: Source code of test input above. * tests/data/test-diff-suppr/test36-leaf-v1.cc: Likewise. * tests/test-diff-suppr.cc (in_out_specs): Use the new test inputs above in this harness. * tests/data/Makefile.am: Add the new test inputs above to source distribution. 2017-07-17 Dodji Seketeli Allow several kinds of reports to be emitted * include/Makefile.am: Add the new abg-reporter.h header file to source distribution. * include/abg-comparison.h: Include the new abg-reporter.h header file. (diff_context::{g,s}et_reporter): Declare new accessors. ({type_diff_base, decl_diff_base, corpus_diff}::priv): Make this be a struct rather than a class. ({decl_diff_base, class_diff, scope_diff, function_type_diff, corpus_diff}): Declare default_reporter a friend class of these. * include/abg-reporter.h: New file. * src/Makefile.am: Add abg-comparison-priv.h, abg-reporter-priv.{h,cc} and abg-default-reporter.cc files to source distribution. * src/abg-comparison-priv.h: New file. * src/abg-comparison.cc (sort_enumerators) (sort_changed_enumerators, sort_data_members) (sort_string_function_ptr_map) (sort_string_function_decl_diff_sptr_map) (sort_string_var_diff_sptr_map, sort_string_elf_symbol_map) (sort_string_var_ptr_map, sort_string_data_member_diff_sptr_map) (sort_unsigned_data_member_diff_sptr_map) (sort_string_diff_sptr_map, sort_string_base_diff_sptr_map) (sort_string_base_sptr_map, sort_string_fn_parm_diff_sptr_map) (sort_string_parm_map, get_leaf_type, sort_enumerators) (sort_changed_enumerators): Make these functions non-static and move them at the beginning of the file. These functions are now declared in abg-compared-priv.h so they can be shared privately with other files in src/. (diff_context::{g,s}et_reporter): Define new accessors. ({diff_context, diff, type_diff_base, decl_diff_base, distinct_diff, pointer_diff, array_diff, reference_diff, qualified_type_diff, enum_diff, class_or_union_diff, class_diff, base_diff, scope_diff, fn_parm_diff, function_type_diff, function_decl_diff, type_decl_diff, typedef_diff, translation_unit_diff, corpus_diff::diff_stats, corpus_diff}::priv) (diff_less_than_functor, enumerator_value_comp) (changed_enumerator_comp, base_spec_comp, base_diff_comp) (data_member_diff_comp, diff_comp, fn_parm_diff_comp, parm_comp) (elf_symbol_comp, function_comp, function_decl_diff_comp) (var_diff_sptr_comp): Move these type definitions to abg-comparison-priv.h (report_size_and_alignment_changes, report_loc_info) (maybe_report_diff_for_member, maybe_report_diff_for_symbol) (represent, represent_data_member) (maybe_show_relative_offset_change, represent) (report_size_and_alignment_changes, report_loc_info) (report_name_size_and_alignment_changes, report_mem_header) (maybe_report_diff_for_member, maybe_report_diff_for_symbol) (show_linkage_name_and_aliases): Move these definitions to abg-reporter-priv.cc. ({distinct_diff, var_diff, pointer_diff, array_diff, reference_diff, qualified_type_diff, enum_diff, class_or_union_diff, class_diff, base_diff, union_diff, scope_diff, fn_parm_diff, function_type_diff, type_decl_diff, typedef_diff, corpus_diff}::report): Use the reporter object to report about the changes carried by the the current diff node. * src/abg-default-reporter.cc: New file. * src/abg-reporter-priv.h: Likewise. 2017-10-04 Dodji Seketeli Update copyright year to tools/abidiff.cc * tools/abidiff.cc: Update copyright year. 2017-10-04 Dodji Seketeli Add missing comment to type declaration * include/abg-comparison.h (struct diff_sptr_hasher): Add missing comment. 2017-10-04 Dodji Seketeli Misc style fixes in abg-writer.cc * src/abg-writer.cc (type_hasher): Add comment. (write_context::record_decl_as_emitted): Remove useless newline. 2017-10-04 Dodji Seketeli Initialize naked canonical type * src/abg-ir.cc (type_base::priv::priv): Initialize the naked canonical type data member. 2017-10-04 Dodji Seketeli [abixml writer] Use an unordered set when appropriate * src/abg-writer.cc (write_context::m_emitted_decl_only_set): Renamed m_emitted_decl_only_map into this and make the type be a set, rather than a map. (write_context::{record_decl_only_type_as_emitted, decl_only_type_is_emitted}): Adjust. 2017-09-29 Dodji Seketeli [abixml writer] Store pointers to emitted types rather than type-ids * src/abg-writer.cc (type_ptr_set_type): Declare new typedef. (writer_context::m_emitted_type_id_map): Remove this data member. (writer_context::m_emitted_type_set): Add a new data member. (writer_context::{record_type_id_as_emitted, type_id_is_emitted, clear_emitted_types_map}): Remove these member functions. (writer_context::{record_type_as_emitted, type_is_emitted}): Use the new m_emitted_type_set data member above. 2017-09-27 Dodji Seketeli Use an unordered map for canonical DIE offsets * src/abg-dwarf-reader.cc (read_context::canonical_type_die_offsets_): Renamed the canonical_type_die_vecs_ data member into this. (read_context::canonical_decl_die_offsets_): Renamed the canonical_decl_die_vecs_ data member into this. (read_context::{initialize, compute_canonical_die_offset, compute_canonical_die, get_canonical_die, get_or_compute_canonical_die, set_canonical_die_offset, get_canonical_die_offset}): Adjust. 2017-09-27 Dodji Seketeli Bug 22190 - crash in read_context::get_or_compute_canonical_die * src/abg-dwarf-reader.cc: 2017-09-27 Dodji Seketeli Remove redundant (useless) typedef declaration * src/abg-dwarf-reader.cc (dwarf_offsets_type): There are two instances of this typedef declaration, remove one. 2017-09-27 Dodji Seketeli Renamed offset_offset_map type name into offset_offset_map_type * src/abg-dwarf-reader.cc (offset_offset_map_type): Renamed offset_offset_map into this. (read_context::{primary_die_parent_map_, alternate_die_parent_map_, type_section_die_parent_map_}): Adjust the type of these data members. (read_context::{die_parent_map, type_section_die_parent_map}): Adjust the type of these member functions. (read_context::{build_die_parent_relations_under, get_parent_die}): Adjust for the type name in these functions. 2017-09-27 Dodji Seketeli Add missing newlines to kmidiff's usage strings * tools/kmidiff.cc (display_usage): Add newlines after the lines for --vmlinux1 and --vmlinux2. 2017-09-21 Dodji Seketeli 22160 - Annotate state flag unitialized in abidw * tools/abidw.cc (options::options): Initialize the annotate data member. 2017-09-18 Dodji Seketeli Don't crash on classes that differ in their virtual member fn count * src/abg-ir.cc (equals): In the overload for class_decl, when we detect that the virtual member function counts are different, get out, even when we are being asked about the kind of the change. 2017-09-18 Dodji Seketeli Avoid adding the same data member twice in the DWARF reader * src/abg-dwarf-reader.cc (add_or_update_class_type): After a we try to create a data member type, look *again* if the data member wasn't added recursively by the creation of the data member type. 2017-09-11 Mark Wielaard Bug 22075 - data_member_diff_comp forgets data members names * src/abg-comparison.cc (data_member_diff_comp): Make the comparison take the qualified name of the data member into account. Also, if the initial offset and qualified names of the data members of the diff nodes are equal, consider the offset and qualified names of the new data members. 2017-09-11 Dodji Seketeli Bug 22122 - Fail to represent 'const array' * src/abg-dwarf-reader.cc (die_is_array_type): Define new static function. (die_is_pointer_or_reference_type): Also test that the DIE can be an array. * tests/data/test-read-dwarf/PR22122-libftdc.so: New binary test input. * tests/data/test-read-dwarf/PR22122-libftdc.so.abi: New reference output. * tests/data/Makefile.am: Add the two new test files above to source distribution. * tests/test-read-dwarf.cc (in_out_specs): Run this test harness over the new test input. 2017-09-08 Dodji Seketeli Finer detection of local changes of var_decl type * src/abg-ir.cc (equals): In the var_decl overload detect size changes of type as being a local change. 2017-09-08 Dodji Seketeli Misc style fixes * include/abg-fwd.h (get_pretty_representation): Add missing white space. * src/abg-ir.cc (get_name): Fix typo in comment. 2017-09-02 Mark Wielaard readdir_r() is deprecated, use readdir(). * src/abg-tools-utils.cc (dir_is_empty): Use readdir() instead of readdir_r(). 2017-09-02 Mark Wielaard Declare eval_last_constant_dwarf_sub_expr with [u]int64_t not [s]size_t. * src/abg-dwarf-reader.cc (eval_last_constant_dwarf_sub_expr): Declare expr_len as uint64_t and value as int64_t. 2017-08-28 Dodji Seketeli Bug 22015 - Failing to return global scope of a DIE in certain cases * src/abg-dwarf-reader.cc (get_scope_for_die): If the translation unit of the parent die hasn't yet been constructed, then return the global scope of the current translation unit. * tests/data/test-read-dwarf/PR22015-libboost_iostreams.so: New binary test input. * tests/data/test-read-dwarf/PR22015-libboost_iostreams.so.abi: New reference test output. * tests/data/Makefile.am: Add the new test materials above to source distribution. * tests/test-read-dwarf.cc (in_out_specs): Add the new test input to the test suite. 2017-07-17 Dodji Seketeli Fix some make distcheck failures * tests/data/Makefile.am: Add test-diff-dwarf/test42-PR21296-libgcc.so, test-diff-dwarf/test42-PR21296-libclang.so, test-diff-dwarf/test42-PR21296-clanggcc-report0.txt to the source distribution. Also look for test-diff-filter/test39* tests inputs in the test-diff-filter/test39/ directory. 2017-07-17 Dodji Seketeli Avoid crashing when the elf file could not be read * src/abg-dwarf-reader.cc (read_context::elf_architecture_is_ppc64): Do not crash if the elf handle is nil. 2017-07-10 Dodji Seketeli Bug 21730 - Make abipkgdiff compare Linux Kernel packages as expected * include/abg-tools-utils.h (get_vmlinux_path_from_kernel_dist): Declare new function. (get_binary_paths_from_kernel_dist): Re-organize order of parameters. (file_is_kernel_package, file_is_kernel_debuginfo_package): Make the file_path parameter be const. (build_corpus_group_from_kernel_dist_under): Take an additional debug_info_root parameter. * src/abg-tools-utils.cc (file_is_kernel_package) (file_is_kernel_debuginfo_package): Const-ify the file_name parameter. (find_vmlinux_path): Define new static function. (get_binary_paths_from_kernel_dist): Re-organize the order of parameters. The debug_info_root_path parameter is now an input parameter. (get_vmlinux_path_from_kernel_dist): Define new function. (get_binary_paths_from_kernel_dist): Adjust invocation of get_binary_paths_from_kernel_dist. (build_corpus_group_from_kernel_dist_under): Take an additional debug_info_root parameter. * tools/abidw.cc (load_kernel_corpus_group_and_write_abixml): Adjust invocation to build_corpus_group_from_kernel_dist_under. * tools/abipkgdiff.cc (create_maps_of_package_content): Don't map the content of a Linux Kernel package. (compare_prepared_userspace_packages) (compare_prepared_linux_kernel_packages, compare_prepared): Define new functions. (compare): Use the new functions above here. * tools/kmidiff.cc (print_kernel_dist_binary_paths_under): Adjust the invocation of get_binary_paths_from_kernel_dist. (main): Adjust the invocation of build_corpus_group_from_kernel_dist_under. Make sure that a kernel package is accompanied by a debug info package. 2017-07-11 Dodji Seketeli Support up to two --wp options for abipkgdiff * doc/manuals/abipkgdiff.rst: Update the documentation to say that --wp can be provided twice, but not more than that. * tools/abipkgdiff.cc (options::kabi_whitelist_packages): Rename kabi_whitelist_package to this, and make be of vector type. (package::erase_extraction_directories): Erase the white list package extracted data. (maybe_handle_kabi_whitelist_pkg, parse_command_line): Adjust. (main): Make sure there is no more than 2 --wp on the command line. Associate a white list package to each kernel package on the command line. 2017-07-11 Dodji Seketeli Fix support of the --wp option of abipkgdiff * tools/abipkgdiff.cc (parse_command_line): Consider the absolute path of the package given in argument to --wp. 2017-07-11 Dodji Seketeli Use shorter lines in abipkgdiff.cc * tools/abipkgdiff.cc (parse_command_line): Use shorter lines here. 2017-07-11 Dodji Seketeli Add missing space in abipkgdiff error message * tools/abipkgdiff.cc (extract_package): Add missing space here. 2017-07-11 Dodji Seketeli Replace --lkaw with -w and --lkaw-pkg with --wp * doc/manuals/abipkgdiff.rst: Adjust the documentation. * tools/abipkgdiff.cc (display_usage): Adjust the usage string. (parse_command_line): Parse -w instead of --lkaw and --wp insteadof --lkaw-pkg. 2017-07-11 Dodji Seketeli speed up class type lookup in a corpus * src/abg-ir.cc (lookup_class_type): In the overload that looks for a class name denoted by an interned_string in the corpus, do not look for the class in the translation units when the type wasn't found in the type map of the corpus. (maybe_update_types_lookup_map): Remove the erase_if_exists_already parameter and the code that uses it. (lookup_class_type_through_translation_units): Remove this function that is now useless. 2017-07-06 Dodji Seketeli Bug 21644 - abipkgdiff does not emit diagnostics about comparison errors * include/abg-dwarf-reader.h (status_to_diagnostic_string): Declare new function. * src/abg-dwarf-reader.cc (status_to_diagnostic_string): Define new function. * tools/abipkgdiff.cc (compare): Take a new detailed_error_status parameter. (compare_task::perform): Get the details of the error, in case the status of the comparison is ABIDIFF_ERROR. 2017-07-05 Dodji Seketeli Bug 21153 - abipkgdiff reports undetermined interface subtype changes * src/abg-ir.cc (get_name_of_qualified_type): A noop-qualified type has an empty string as reprsentation for its qualifier. * src/abg-dwarf-reader.cc (die_qualified_type_name): Adjust to comply with what is done in get_name_of_qualified_type. Adjust comment too. * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: Adjust. * tests/data/test-diff-pkg/libcdio-0.94-1.fc26.x86_64--libcdio-0.94-2.fc26.x86_64-report.1.txt: New reference test output. * tests/data/test-diff-pkg/libcdio-0.94-1.fc26.x86_64.rpm: New test binary input. * tests/data/test-diff-pkg/libcdio-0.94-2.fc26.x86_64.rpm: Likewise. * tests/data/test-diff-pkg/libcdio-debuginfo-0.94-1.fc26.x86_64.rpm: Likewise. * tests/data/test-diff-pkg/libcdio-debuginfo-0.94-2.fc26.x86_64.rpm Likewise. * tests/data/Makefile.am: Add the new test inputs to source distribution. * tests/test-diff-pkg.cc (in_out_specs): Make this test harness run on the new test inputs above. 2017-07-03 Dodji Seketeli Fix typo in comments * src/abg-ir.cc (type_base::get_canonical_type_for): Fix a typo in a command. 2017-07-03 Dodji Seketeli Fix a typo when reporting size change wrt a decl-only class * src/abg-comparison.cc (report_size_and_alignment_changes): Fix typo. 2017-07-03 Dodji Seketeli Better handle decl-only classes being different from their definition * src/abg-comparison.cc (function_decl_diff::report): Don't report possible vtable changes between a decl-only class and its definition. * src/abg-ir.cc (type_base::get_canonical_type_for): Consider that a decl-only class is different from its definition when comparing types for the purpose of type canonicalization. (equals): In the class_or_union overload, only consider the global decl_only_class_equals_definition() property to know when to consider that a decl-only class is different from its definition when comparing two classes. * src/abg-reader.cc (build_class_decl): Read the size property of a class, even if it's a decl-only class. * src/abg-writer.cc (write_class_decl_opening_tag): Write size property of types even if the types are decl-only classes. * tests/data/test-annotate/test13-pr18894.so.abi: Adjust. * tests/data/test-annotate/test14-pr18893.so.abi: Likewise. * tests/data/test-annotate/test15-pr18892.so.abi: Likewise. * tests/data/test-annotate/test17-pr19027.so.abi: Likewise. * tests/data/test-annotate/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: Likewise. * tests/data/test-annotate/test19-pr19023-libtcmalloc_and_profiler.so.abi: Likewise. * tests/data/test-annotate/test20-pr19025-libvtkParallelCore-6.1.so.abi: Likewise. * tests/data/test-annotate/test21-pr19092.so.abi: Likewise. * tests/data/test-diff-dwarf-abixml/test0-pr19026-libvtkIOSQL-6.1.so.1.abi: Likewise. * tests/data/test-diff-filter/test31-pr18535-libstdc++-report-0.txt: Likewise. * tests/data/test-diff-filter/test31-pr18535-libstdc++-report-1.txt: Likewise. * tests/data/test-read-dwarf/test12-pr18844.so.abi: Likewise. * tests/data/test-read-dwarf/test13-pr18894.so.abi: Likewise. * tests/data/test-read-dwarf/test14-pr18893.so.abi: Likewise. * tests/data/test-read-dwarf/test15-pr18892.so.abi: Likewise. * tests/data/test-read-dwarf/test17-pr19027.so.abi: Likewise. * tests/data/test-read-dwarf/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: Likewise. * tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi: Likewise. * tests/data/test-read-dwarf/test20-pr19025-libvtkParallelCore-6.1.so.abi: Likewise. * tests/data/test-read-dwarf/test21-pr19092.so.abi: Likewise. * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: Likewise. * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Likewise. 2017-06-28 Dodji Seketeli Don't add empty translation unit to corpus * src/abg-dwarf-reader.cc (build_translation_unit_and_add_to_ir): A translation unit DIE that has no child DIE shall not be added to the current ABI corpus. 2017-06-27 Dodji Seketeli Bug 21631 - Forgot a "break" statement in stv_to_elf_symbol_visibility * src/abg-dwarf-reader.cc (stv_to_elf_symbol_visibility): Add a missing break statement. 2017-06-26 Dodji Seketeli Bug 21630 - A this pointer DIE can be const * src/abg-dwarf-reader.cc (die_this_pointer_is_const): If the DIE is not a DW_TAG_pointer_type then don't crash. 2017-06-23 Dodji Seketeli Bug 21629 - equivalent DIEs must be of the same DIE source * src/abg-dwarf-reader.cc (compare_dies): Don't propagate a canonical DIE to a DIE that comes from a different source. 2017-06-22 Dodji Seketeli Bug 21627 - Libabigail doesn't consider translation unit compile dir *if* that translation unit has already been seen in the current binary, instead of creating a new one altogether. This patch doesn't carry a regression test as the problem was found while running the https://pagure.io/libabigail-selfcheck/blob/master/f/selfcheck.py script over the Fedora 25 critpath packages. The patch does however update existing reference outputs of existings tests where appropriate. * include/abg-ir.h (translation_unit::{get_compilation_dir_path, set_compilation_dir_path, get_absolute_path}): * src/abg-corpus.cc (corpus::add): Use the new translation_unit::get_absolute_path() as the key for the tu path -> tu map. * src/abg-dwarf-reader.cc (read_context::resolve_declaration_only_classes): Use the new translation_unit::get_absolute_path(). (build_translation_unit_and_add_to_ir): Set the compilation directory of the translation unit. * src/abg-ir-priv.h (translation_unit::priv::{comp_dir_path_, abs_path_}): * src/abg-ir.cc (translation_unit::set_path): Update comment. (translation_unit::{get_compilation_dir_path, set_compilation_dir_path, get_absolute_path}): Define new member functions. * src/abg-reader.cc (read_translation_unit): Take the new 'comp-dir-path' attribute into account. * src/abg-writer.cc (write_translation_unit): Emit the new 'comp-dir-path' attribute. * tests/data/test-annotate/libtest23.so.abi: Adjust. * tests/data/test-annotate/libtest24-drop-fns-2.so.abi: Adjust. * tests/data/test-annotate/libtest24-drop-fns.so.abi: Adjust. * tests/data/test-annotate/test0.abi: Adjust. * tests/data/test-annotate/test1.abi: Adjust. * tests/data/test-annotate/test13-pr18894.so.abi: Adjust. * tests/data/test-annotate/test14-pr18893.so.abi: Adjust. * tests/data/test-annotate/test15-pr18892.so.abi: Adjust. * tests/data/test-annotate/test17-pr19027.so.abi: Adjust. * tests/data/test-annotate/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: Adjust. * tests/data/test-annotate/test19-pr19023-libtcmalloc_and_profiler.so.abi: Adjust. * tests/data/test-annotate/test2.so.abi: Adjust. * tests/data/test-annotate/test20-pr19025-libvtkParallelCore-6.1.so.abi: Adjust. * tests/data/test-annotate/test21-pr19092.so.abi: Adjust. * tests/data/test-annotate/test3.so.abi: Adjust. * tests/data/test-annotate/test4.so.abi: Adjust. * tests/data/test-annotate/test5.o.abi: Adjust. * tests/data/test-annotate/test6.so.abi: Adjust. * tests/data/test-annotate/test7.so.abi: Adjust. * tests/data/test-annotate/test8-qualified-this-pointer.so.abi: Adjust. * tests/data/test-read-dwarf/libtest23.so.abi: Adjust. * tests/data/test-read-dwarf/libtest24-drop-fns-2.so.abi: Adjust. * tests/data/test-read-dwarf/libtest24-drop-fns.so.abi: Adjust. * tests/data/test-read-dwarf/test0.abi: Adjust. * tests/data/test-read-dwarf/test1.abi: Adjust. * tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: Adjust. * tests/data/test-read-dwarf/test11-pr18828.so.abi: Adjust. * tests/data/test-read-dwarf/test12-pr18844.so.abi: Adjust. * tests/data/test-read-dwarf/test13-pr18894.so.abi: Adjust. * tests/data/test-read-dwarf/test14-pr18893.so.abi: Adjust. * tests/data/test-read-dwarf/test15-pr18892.so.abi: Adjust. * tests/data/test-read-dwarf/test16-pr18904.so.abi: Adjust. * tests/data/test-read-dwarf/test17-pr19027.so.abi: Adjust. * tests/data/test-read-dwarf/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: Adjust. * tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi: Adjust. * tests/data/test-read-dwarf/test2.so.abi: Adjust. * tests/data/test-read-dwarf/test20-pr19025-libvtkParallelCore-6.1.so.abi: Adjust. * tests/data/test-read-dwarf/test21-pr19092.so.abi: Adjust. * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: Adjust. * tests/data/test-read-dwarf/test3.so.abi: Adjust. * tests/data/test-read-dwarf/test4.so.abi: Adjust. * tests/data/test-read-dwarf/test5.o.abi: Adjust. * tests/data/test-read-dwarf/test6.so.abi: Adjust. * tests/data/test-read-dwarf/test7.so.abi: Adjust. * tests/data/test-read-dwarf/test8-qualified-this-pointer.so.abi: Adjust. * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Adjust. 2017-05-04 Dodji Seketeli Misc style fixes * src/abg-dwarf-reader.cc (read_context::{die_wip_classes_map, die_wip_function_types_map, types_to_canonicalize, tu_die_imported_unit_points_map, die_parent_map, load_kernel_symbol_table}): Add missing space to statement. (get_parent_die): Likewise. (build_enum_type): Fix typo in comment. (e_machine_to_string, get_version_definition_for_versym) (lookup_public_function_symbol_from_elf) (lookup_public_variable_symbol_from_elf) (lookup_data_tag_from_dynamic_segment, die_is_declaration_only) (die_is_reference_type, die_function_type_is_method_type): Fix indentation. (read_context::{resolve_declaration_only_classes, fixup_functions_with_no_symbols, load_symbol_maps_from_symtab_section, load_dt_soname_and_needed, load_elf_architecture, load_elf_properties, maybe_adjust_address_for_exec_or_dyn, maybe_adjust_fn_sym_address, address_is_in_opd_section, load_elf_architecture, build_die_parent_maps}): Likewise. (op_pushes_constant_value, op_manipulates_stack): Use the dwarf_expr_eval_context::push method. (op_is_control_flow, die_return_and_parm_names_from_fn_type_die) (die_function_signature, die_pretty_print_type) (get_default_array_lower_bound) (build_translation_unit_and_add_to_ir, build_enum_type) (add_or_update_class_type, build_function_type) (build_function_decl, build_ir_node_from_die) (lookup_public_function_symbol_from_elf): Fix indentation. * src/abg-ir.cc (maybe_update_types_lookup_map): Remove useless space. 2017-05-31 Dodji Seketeli Fix doc glitch in abidiff.rst * doc/manuals/abidiff.rst: Fix glitch. 2017-06-12 Dodji Seketeli Symbols with the same zero value are not aliases * src/abg-dwarf-reader.cc (load_symbol_maps_from_symtab_section): Do not consider symbols with zero value as being aliases. * tests/data/test-diff-filter/test20-inline-report-0.txt: Adjust. * tests/data/test-diff-filter/test20-inline-report-1.txt: Likewise. * test-diff-filter/test41-PR21486-abg-writer.gcc.o: New test binary input. * tests/data/test-diff-filter/test41-PR21486-abg-writer.llvm.o: Likewise. * tests/data/Makefile.am: Add the new test material to source distribution. * tests/test-diff-filter.cc (in_out_specs): Run the test harness on the new test input above. * tests/data/test-diff-dwarf/test5-report.txt: Adjust. * tests/data/test-diff-filter/test9-report.txt: Adjust. * tests/data/test-diff-filter/test20-inline-report-0.txt: Adjust. * tests/data/test-diff-filter/test20-inline-report-1.txt: Adjust. 2017-06-12 Dodji Seketeli Support ELF symbol visibility property * include/abg-ir.h (enum elf_symbol::visibility): Define new enum. (elf_symbol::{elf_symbol, create}): Take a visibility parameter. (elf_symbol::{set, get}_visibility): Declare new accessors. (string_to_elf_symbol_binding): Declare new function. * src/abg-ir.cc (elf_symbol::priv::visibility_): New data member. (elf_symbol::priv::priv): Adjust. (elf_symbol::elf_symbol): Take a visibility parameter. (elf_symbol::create): Likewise (elf_symbol::{s,g}et_visibility): Define new accessors. (elf_symbol::is_public): Adjust. (operator<<(std::ostream&, elf_symbol::visibility)): Define new operator. (string_to_elf_symbol_visibility): Define new function. * src/abg-dwarf-reader.cc (stv_to_elf_symbol_visibility): Define new static function. (lookup_symbol_from_sysv_hash_tab) (lookup_symbol_from_gnu_hash_tab, lookup_symbol_from_symtab) (create_default_var_sym, create_default_fn_sym): Adjust. * src/abg-reader.cc (read_elf_symbol_binding): Define new function. (build_elf_symbol): Adjust. * src/abg-writer.cc (write_elf_symbol_visibility): Define new function. * tests/data/test-annotate/libtest23.so.abi: Adjust. * tests/data/test-annotate/libtest24-drop-fns-2.so.abi: Adjust. * tests/data/test-annotate/libtest24-drop-fns.so.abi: Adjust. * tests/data/test-annotate/test0.abi: Adjust. * tests/data/test-annotate/test1.abi: Adjust. * tests/data/test-annotate/test13-pr18894.so.abi: Adjust. * tests/data/test-annotate/test14-pr18893.so.abi: Adjust. * tests/data/test-annotate/test15-pr18892.so.abi: Adjust. * tests/data/test-annotate/test17-pr19027.so.abi: Adjust. * tests/data/test-annotate/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: Adjust. * tests/data/test-annotate/test19-pr19023-libtcmalloc_and_profiler.so.abi: Adjust. * tests/data/test-annotate/test2.so.abi: Adjust. * tests/data/test-annotate/test20-pr19025-libvtkParallelCore-6.1.so.abi: Adjust. * tests/data/test-annotate/test21-pr19092.so.abi: Adjust. * tests/data/test-annotate/test3.so.abi: Adjust. * tests/data/test-annotate/test4.so.abi: Adjust. * tests/data/test-annotate/test5.o.abi: Adjust. * tests/data/test-annotate/test6.so.abi: Adjust. * tests/data/test-annotate/test7.so.abi: Adjust. * tests/data/test-annotate/test8-qualified-this-pointer.so.abi: Adjust. * tests/data/test-read-dwarf/libtest23.so.abi: Adjust. * tests/data/test-read-dwarf/libtest24-drop-fns-2.so.abi: Adjust. * tests/data/test-read-dwarf/libtest24-drop-fns.so.abi: Adjust. * tests/data/test-read-dwarf/test0.abi: Adjust. * tests/data/test-read-dwarf/test1.abi: Adjust. * tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: Adjust. * tests/data/test-read-dwarf/test11-pr18828.so.abi: Adjust. * tests/data/test-read-dwarf/test12-pr18844.so.abi: Adjust. * tests/data/test-read-dwarf/test13-pr18894.so.abi: Adjust. * tests/data/test-read-dwarf/test14-pr18893.so.abi: Adjust. * tests/data/test-read-dwarf/test15-pr18892.so.abi: Adjust. * tests/data/test-read-dwarf/test16-pr18904.so.abi: Adjust. * tests/data/test-read-dwarf/test17-pr19027.so.abi: Adjust. * tests/data/test-read-dwarf/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: Adjust. * tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi: Adjust. * tests/data/test-read-dwarf/test2.so.abi: Adjust. * tests/data/test-read-dwarf/test20-pr19025-libvtkParallelCore-6.1.so.abi: Adjust. * tests/data/test-read-dwarf/test21-pr19092.so.abi: Adjust. * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: Adjust. * tests/data/test-read-dwarf/test3.so.abi: Adjust. * tests/data/test-read-dwarf/test4.so.abi: Adjust. * tests/data/test-read-dwarf/test5.o.abi: Adjust. * tests/data/test-read-dwarf/test6.so.abi: Adjust. * tests/data/test-read-dwarf/test7.so.abi: Adjust. * tests/data/test-read-dwarf/test8-qualified-this-pointer.so.abi: Adjust. * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Adjust. * tests/data/test-read-write/test26.xml: Adjust. * tests/data/test-read-write/test27.xml: Adjust. * tests/data/test-read-write/test28-without-std-fns-ref.xml: Adjust. * tests/data/test-read-write/test28-without-std-vars-ref.xml: Adjust. 2017-06-09 Dodji Seketeli Filter top cv qualifier changes on function parameter types * include/abg-comparison.h (enum diff_category): Add a new FN_PARM_TYPE_TOP_CV_CHANGE_CATEGORY enumerator. "Or" the enumerator to the EVERYTHING_CATEGORY enumerator. * src/abg-comp-filter.cc (has_fn_parm_type_cv_qual_change): Define new static function. (categorize_harmless_diff_node): Categorize changes to top cv qualifiers on function parameter types into the new FN_PARM_TYPE_TOP_CV_CHANGE_CATEGORY. * src/abg-comparison.cc (get_default_harmless_categories_bitmap): Add the new FN_PARM_TYPE_TOP_CV_CHANGE_CATEGORY category to the set of harmless categories. (operator<<(ostream&, diff_category)): Adjust to serialize the new FN_PARM_TYPE_TOP_CV_CHANGE_CATEGORY. * tests/data/test-diff-filter/libtest40-v0.so: New test input binary. * tests/data/test-diff-filter/libtest40-v1.so: Likewise. * tests/data/test-diff-filter/test40-report-0.txt: New test reference output. * tests/data/test-diff-filter/test40-v0.cc: Source code of the test binary above. * tests/data/test-diff-filter/test40-v1.cc: Likewise. * tests/data/Makefile.am: Add the new test material above to source distribution. * tests/test-diff-filter.cc (in_out_specs): Add new binaries to compare. * tests/data/test-diff-filter/test30-pr18904-rvalueref-report0.txt: Adjust. * tests/data/test-diff-filter/test30-pr18904-rvalueref-report1.txt: Likewise. * tests/data/test-diff-filter/test35-pr18754-no-added-syms-report-0.txt: Likewise. * tests/data/test-diff-filter/test35-pr18754-no-added-syms-report-1.txt: Likewise. 2017-05-28 Dodji Seketeli Do not report about voffset when it's not set in debug info * include/abg-ir.h (mem_fn_context_rel::mem_fn_context_rel): Initialize the virtual offset to -1. * src/abg-comparison.cc (represent): In the overload to represent a method_decl, do not represent the vofffset if it's not set. * src/abg-writer.cc (write_voffset): The virtual offset is signed because if it's -1, it means no offset is set. * tests/data/test-annotate/test14-pr18893.so.abi: Adjust. * tests/data/test-annotate/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: Adjust. * tests/data/test-annotate/test19-pr19023-libtcmalloc_and_profiler.so.abi: Adjust. * tests/data/test-annotate/test20-pr19025-libvtkParallelCore-6.1.so.abi: Adjust. * tests/data/test-diff-dwarf-abixml/test0-pr19026-libvtkIOSQL-6.1.so.1.abi: Adjust. * tests/data/test-diff-dwarf/test28-vtable-changes-report-0.txt: Adjust. * tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: Adjust. * tests/data/test-read-dwarf/test11-pr18828.so.abi: Adjust. * tests/data/test-read-dwarf/test14-pr18893.so.abi: Adjust. * tests/data/test-read-dwarf/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: Adjust. * tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi: Adjust. * tests/data/test-read-dwarf/test20-pr19025-libvtkParallelCore-6.1.so.abi: Adjust. * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: Adjust. 2017-05-17 Dodji Seketeli Allow selective resolution of class declaration * include/abg-fwd.h (type_base_wptrs_type) (istring_type_base_wptrs_map_type): Define new typedefs. (lookup_class_types): Declare new functions. * include/abg-ir.h (environment::decl_only_class_equals_definition): Declare new accessor. (type_maps::{*_types}): Make these accessors return istring_type_base_wptrs_map_type& instead of istring_type_base_wptr_map_type&. * src/abg-dwarf-reader.cc (read_context::resolve_declaration_only_classes): Implement the new selective declaration resolution scheme. * src/abg-ir.cc (type_maps::priv::{*_types_}): Change the type of these data members from istring_type_base_wptr_map_type to istring_type_base_wptrs_map_type. (type_maps::{*_types}): Make these accessors definitions return istring_type_base_wptrs_map_type& instead of istring_type_base_wptr_map_type&. (translation_unit::bind_function_type_life_time): Adjust. (environment::priv::decl_only_class_equals_definition_): New data member. (environment::priv::priv): Initialize it. By default, a decl-only class is now considered different from its definition. (environment::decl_only_class_equals_definition): Define new accessor. (lookup_types_in_map, lookup_class_types): Define new functions. (lookup_type_in_map, lookup_union_type_per_location) (lookup_basic_type, lookup_basic_type_per_location) (lookup_class_type, lookup_class_type_per_location) (lookup_union_type, lookup_enum_type) (lookup_enum_type_per_location, lookup_typedef_type) (lookup_typedef_type_per_location, lookup_qualified_type) (lookup_pointer_type, lookup_reference_type, lookup_array_type) (lookup_function_type, maybe_update_types_lookup_map) (maybe_update_types_lookup_map) (maybe_update_types_lookup_map): Adjust. (type_base::get_canonical_type_for): When doing type comparison here, we can now consider that an unresolved class declaration compares different to an incompatible class definition of the same name. So no need to look through decl-only classes in that case. (equals): In the overload for class_or_union, if environment::decl_only_class_equals_definition() is false, then an unresolved class declaration of name "N" compares different to a class definition named "N". * tests/data/test-annotate/test15-pr18892.so.abi: Adjust. * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Adjust * tests/data/test-read-dwarf/test12-pr18844.so.abi: Adjust. * tests/data/test-read-dwarf/test15-pr18892.so.abi: Adjust. * tests/data/test-diff-dwarf/test28-vtable-changes-report-0.txt: Adjust. * tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-2.txt: Adjust. * tests/data/test-diff-filter/test38/Makefile: New test material. * tests/data/test-diff-filter/test38/test38-a.c: Likewise. * tests/data/test-diff-filter/test38/test38-b.c: Likewise. * tests/data/test-diff-filter/test38/test38-c.c: Likewise. * tests/data/test-diff-filter/test38/test38-report-0.txt: Likewise. * tests/data/test-diff-filter/test38/test38-v0: Likewise. * tests/data/test-diff-filter/test38/test38-v1: Likewise. * tests/data/test-diff-filter/test38/test38.h: Likewise. * tests/data/test-diff-filter/test39/Makefile: Likewise. * tests/data/test-diff-filter/test39/test39-a-v0.c: Likewise. * tests/data/test-diff-filter/test39/test39-a-v1.c: Likewise. * tests/data/test-diff-filter/test39/test39-b-v0.c: Likewise. * tests/data/test-diff-filter/test39/test39-b-v1.c: Likewise. * tests/data/test-diff-filter/test39/test39-c-v0.c: Likewise. * tests/data/test-diff-filter/test39/test39-c-v1.c: Likewise. * tests/data/test-diff-filter/test39/test39-main.c: Likewise. * tests/data/test-diff-filter/test39/test39-report-0.txt: Likewise. * tests/data/test-diff-filter/test39/test39-v0: Likewise. * tests/data/test-diff-filter/test39/test39-v1: Likewise. * tests/data/test-diff-filter/test39/test39.h: Likewise. * tests/data/Makefile.am: Add the new test material above to the source distribution. * tests/test-diff-filter.cc (in_out_specs): Add the new test inputs above to the test harness. 2017-05-31 Dodji Seketeli Add documentation for the kmidiff tool * doc/manuals/kmidiff.rst: New doc file. * doc/manuals/Makefile.am: Add the above file to source distribution. 2017-05-31 Dodji Seketeli Allow re-using the ELF/DWARF read_context when loading a corpus group * include/abg-dwarf-reader.h (reset_read_context): Declare new function. * src/abg-dwarf-reader.cc (read_context::elf_paths_): Make this to be non const. (read_context::initialize): New function to initialize all data members. (read_context::read_context): Use the new read_context::initialize function, rather than initializing data members 'inline' here. (reset_read_context): Define a new function to reset a read_context so that it can be re-used to load a new corpus. 2017-05-31 Dodji Seketeli Add --vmlinux{1,2} option to abidw and kmidiff * include/abg-tools-utils.h (build_corpus_group_from_kernel_dist_under): Add a new vmlinux_path parameter. * src/abg-tools-utils.cc (find_vmlinux_and_module_paths): Do not try to find a vmlinux binary if we already have the path to one. (build_corpus_group_from_kernel_dist_under): Add a new vmlinux_path parameter. * tools/abidw.cc (options::vmlinux): New data member. (display_usage): Add a usage string for --vmlinux (parse_command_line): Parse the new --vmlinux option. (load_kernel_corpus_group_and_write_abixml): Fix some return code when the function fails. Verify the presence of the vmlinux binary that was given. Adjust. * tools/kmidiff.cc (options::{vmlinux1, vmlinux2}): New data members. (display_usage): Add a usage string for --vmlinux1 and --vmlinux2. (parse_command_line): Parse the --vmlinux1 and --vmlinux2 options. (main): Adjust. 2017-05-18 Dodji Seketeli Cache function type name computation results * src/abg-ir.cc (get_type_name): Cache function type names. 2017-05-29 Dodji Seketeli Fix innacurate test condition when reading an enum type from abixml * src/abg-reader.cc (build_enum_type_decl): Do not check for errno which might have been set earlier by something else. Rather, check the returned value for overflow or underflow. 2017-05-28 Dodji Seketeli Do not report about voffset when it's not set in debug info * include/abg-ir.h (mem_fn_context_rel::mem_fn_context_rel): Initialize the virtual offset to -1. * src/abg-comparison.cc (represent): In the overload to represent a method_decl, do not represent the vofffset if it's not set. * src/abg-writer.cc (write_voffset): The virtual offset is signed because if it's -1, it means no offset is set. * tests/data/test-annotate/test14-pr18893.so.abi: Adjust. * tests/data/test-annotate/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: Adjust. * tests/data/test-annotate/test19-pr19023-libtcmalloc_and_profiler.so.abi: Adjust. * tests/data/test-annotate/test20-pr19025-libvtkParallelCore-6.1.so.abi: Adjust. * tests/data/test-diff-dwarf-abixml/test0-pr19026-libvtkIOSQL-6.1.so.1.abi: Adjust. * tests/data/test-diff-dwarf/test28-vtable-changes-report-0.txt: Adjust. * tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: Adjust. * tests/data/test-read-dwarf/test11-pr18828.so.abi: Adjust. * tests/data/test-read-dwarf/test14-pr18893.so.abi: Adjust. * tests/data/test-read-dwarf/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: Adjust. * tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi: Adjust. * tests/data/test-read-dwarf/test20-pr19025-libvtkParallelCore-6.1.so.abi: Adjust. * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: Adjust. 2017-05-18 Dodji Seketeli Speedup DIE representation computing esp function signature in C * src/abg-dwarf-reader.cc (die_function_signature): For C DIEs, just return the (linkage) name of the function. * tests/data/test-annotate/test15-pr18892.so.abi: Adjust. * tests/data/test-annotate/test21-pr19092.so.abi: Adjust. * tests/data/test-read-dwarf/test15-pr18892.so.abi: Adjust. * tests/data/test-read-dwarf/test21-pr19092.so.abi: Adjust. 2017-05-17 Dodji Seketeli Allow selective resolution of class declaration * include/abg-fwd.h (type_base_wptrs_type) (istring_type_base_wptrs_map_type): Define new typedefs. (lookup_class_types): Declare new functions. * include/abg-ir.h (environment::decl_only_class_equals_definition): Declare new accessor. (type_maps::{*_types}): Make these accessors return istring_type_base_wptrs_map_type& instead of istring_type_base_wptr_map_type&. * src/abg-dwarf-reader.cc (read_context::resolve_declaration_only_classes): Implement the new selective declaration resolution scheme. * src/abg-ir.cc (type_maps::priv::{*_types_}): Change the type of these data members from istring_type_base_wptr_map_type to istring_type_base_wptrs_map_type. (type_maps::{*_types}): Make these accessors definitions return istring_type_base_wptrs_map_type& instead of istring_type_base_wptr_map_type&. (translation_unit::bind_function_type_life_time): Adjust. (environment::priv::decl_only_class_equals_definition_): New data member. (environment::priv::priv): Initialize it. By default, a decl-only class is now considered different from its definition. (environment::decl_only_class_equals_definition): Define new accessor. (lookup_types_in_map, lookup_class_types): Define new functions. (lookup_type_in_map, lookup_union_type_per_location) (lookup_basic_type, lookup_basic_type_per_location) (lookup_class_type, lookup_class_type_per_location) (lookup_union_type, lookup_enum_type) (lookup_enum_type_per_location, lookup_typedef_type) (lookup_typedef_type_per_location, lookup_qualified_type) (lookup_pointer_type, lookup_reference_type, lookup_array_type) (lookup_function_type, maybe_update_types_lookup_map) (maybe_update_types_lookup_map) (maybe_update_types_lookup_map): Adjust. (type_base::get_canonical_type_for): When doing type comparison here, we can now consider that an unresolved class declaration compares different to an incompatible class definition of the same name. So no need to look through decl-only classes in that case. (equals): In the overload for class_or_union, if environment::decl_only_class_equals_definition() is false, then an unresolved class declaration of name "N" compares different to a class definition named "N". * tests/data/test-annotate/test15-pr18892.so.abi: Adjust. * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Adjust * tests/data/test-read-dwarf/test12-pr18844.so.abi: Adjust. * tests/data/test-read-dwarf/test15-pr18892.so.abi: Adjust. * tests/data/test-diff-dwarf/test28-vtable-changes-report-0.txt: Adjust. * tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-2.txt: Adjust. * tests/data/test-diff-filter/test38/Makefile: New test material. * tests/data/test-diff-filter/test38/test38-a.c: Likewise. * tests/data/test-diff-filter/test38/test38-b.c: Likewise. * tests/data/test-diff-filter/test38/test38-c.c: Likewise. * tests/data/test-diff-filter/test38/test38-report-0.txt: Likewise. * tests/data/test-diff-filter/test38/test38-v0: Likewise. * tests/data/test-diff-filter/test38/test38-v1: Likewise. * tests/data/test-diff-filter/test38/test38.h: Likewise. * tests/data/test-diff-filter/test39/Makefile: Likewise. * tests/data/test-diff-filter/test39/test39-a-v0.c: Likewise. * tests/data/test-diff-filter/test39/test39-a-v1.c: Likewise. * tests/data/test-diff-filter/test39/test39-b-v0.c: Likewise. * tests/data/test-diff-filter/test39/test39-b-v1.c: Likewise. * tests/data/test-diff-filter/test39/test39-c-v0.c: Likewise. * tests/data/test-diff-filter/test39/test39-c-v1.c: Likewise. * tests/data/test-diff-filter/test39/test39-main.c: Likewise. * tests/data/test-diff-filter/test39/test39-report-0.txt: Likewise. * tests/data/test-diff-filter/test39/test39-v0: Likewise. * tests/data/test-diff-filter/test39/test39-v1: Likewise. * tests/data/test-diff-filter/test39/test39.h: Likewise. * tests/data/Makefile.am: Add the new test material above to the source distribution. * tests/test-diff-filter.cc (in_out_specs): Add the new test inputs above to the test harness. 2017-05-04 Dodji Seketeli Avoid de-duplicating different C types that have identical name * src/abg-dwarf-reader.cc (die_decl_map_type, die_type_map_type): Remove these typedefs. (die_artefact_map_type, istring_dwarf_offsets_map_type): New typedefs. (die_is_at_class_scope, die_qualified_type_name) (die_qualified_decl_name, die_qualified_type_name_empty) (die_return_and_parm_names_from_fn_type_die) (die_function_type_is_method_type): Const-ify the read_context& parameter. (read_context::die_source_dependant_container_set::get_container): Likewise. (read_context::{name_artefacts_map_, per_tu_name_artefacts_map_, die_decl_map_, alternate_die_decl_map_, type_unit_die_decl_map_, die_type_map_, alternate_die_type_map_, type_unit_die_type_map_}): Remove data members. (read_context::{die_decl_map, alternate_die_decl_map, associate_die_to_decl_primary, associate_die_to_decl_alternate, associate_die_to_decl_from_type_unit, lookup_decl_from_die_offset_primary, lookup_decl_from_die_offset_alternate, lookup_decl_from_type_unit_die_offset, lookup_type_artifact_from_die_per_tu, lookup_artifact_from_per_tu_die_representation, associate_die_to_artifact_by_repr, associate_die_to_artifact_by_repr_internal, clear_die_type_maps}): Remove member functions. (read_context::{decl_die_repr_die_offsets_maps_, type_die_repr_die_offsets_maps_, decl_die_artefact_maps_, type_die_artefact_maps_, dwarf_expr_eval_context_}): Add new data members. (read_context::clear_per_translation_unit_data): Don't clear read_context::per_tu_name_artefacts_map_ data member as it's removed. (read_context::clear_per_corpus_data): Don't clear read_context::name_artefacts_map_ and all the other relevant data members that got removed. (read_context::{dwarf_per_die_source, decl_die_repr_die_offsets_maps, type_die_repr_die_offsets_maps, get_canonical_die, get_die_from_offset, decl_die_artefact_maps, type_die_artefact_maps, dwarf_expr_eval_ctxt}): Add new member functions. (compare_dies, compare_as_decl_dies) (compare_as_type_dies, maybe_finish_function_decl_reading) (die_is_anonymous): Define new functions. (read_context::associate_die_to_decl): Remove the do_associate_by_repr_per_tu parameter. Use the new read_context::{decl_die_artefact_maps_, get_canonical_die} member functions. (read_context::lookup_decl_from_die_offset): Use Dwarf_Off rather than size_t for the type of the die_offset parameter. Use the lookup_artifact_from_die_offset member function. (read_context::lookup_type_artifact_from_die): Const-ify. In one overload, take a new 'die_as_type' parameter. Use the new get_canonical_die, type_die_artefact_maps and decl_die_artefact_maps member functions. In the second overload, use the first overload. (read_context::odr_is_relevant): Add an overload that takes a DIE. (read_context::associate_die_to_type): Remove the do_associate_by_repr and do_associate_per_tu parameters. Use the new get_canonical_die and type_die_artefact_maps member functions. (read_context::lookup_type_from_die): Use the new lookup_artifact_from_die member function. (read_context::lookup_type_from_die_offset): Use the new type_die_artefact_maps member function. When the found artifact is a function_decl, return its type. (read_context::schedule_type_for_late_canonicalization): Use the new get_canonical_die and type_die_artefact_maps member functions. (die_function_signature): Const-ify. Get the scope name right even for scopes that are not types. (die_member_offset): Make eval_last_constant_dwarf_sub_expr use the new cached DWARF expression evalution context. (get_parent_die): Support where_offset equals to zero. This means we are looking at a C binary, basically. (build_enum_type) : Use the new overload of read_context::odr_is_relevant that takes a DIE. Adjust. (add_or_update_union_type, add_or_update_class_type): Don't lookup classes/unions per location anymore. Now that we can compare DIEs in a fined grain manner, the approximation of the location is not useful anymore. (build_pointer_type) (build_function_type): Associate DIE to type if we reuse an existing type. (build_or_get_fn_decl_if_not_suppressed): When re-using a function decl internal representation from an equivalent DIE that we've seen before, it can happen that we want to augment that function decl internal representation with new properties coming from the DIE we are currently looking at; do that here. (is_function_for_die_a_member_of_class): Remove the "where_offset" parameter. (add_or_update_member_function): Adjust. * tests/data/test-annotate/libtest23.so.abi: Adjust. * tests/data/test-annotate/test13-pr18894.so.abi: Adjust. * tests/data/test-annotate/test14-pr18893.so.abi: Adjust. * tests/data/test-annotate/test15-pr18892.so.abi: Adjust. * tests/data/test-annotate/test17-pr19027.so.abi: Adjust. * tests/data/test-annotate/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: Adjust. * tests/data/test-annotate/test19-pr19023-libtcmalloc_and_profiler.so.abi: Adjust. * tests/data/test-annotate/test20-pr19025-libvtkParallelCore-6.1.so.abi: Adjust. * tests/data/test-annotate/test21-pr19092.so.abi: Adjust. * 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: Adjust. * tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-0.txt: Adjust. * tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-1.txt: Adjust. * tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-2.txt: Adjust. * tests/data/test-read-dwarf/libtest23.so.abi: Adjust. * tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: Adjust. * tests/data/test-read-dwarf/test11-pr18828.so.abi: Adjust. * tests/data/test-read-dwarf/test12-pr18844.so.abi: Adjust. * tests/data/test-read-dwarf/test13-pr18894.so.abi: Adjust. * tests/data/test-read-dwarf/test14-pr18893.so.abi: Adjust. * tests/data/test-read-dwarf/test15-pr18892.so.abi: Adjust. * tests/data/test-read-dwarf/test16-pr18904.so.abi: Adjust. * tests/data/test-read-dwarf/test17-pr19027.so.abi: Adjust. * tests/data/test-read-dwarf/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: Adjust. * tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi: Adjust. * tests/data/test-read-dwarf/test20-pr19025-libvtkParallelCore-6.1.so.abi: Adjust. * tests/data/test-read-dwarf/test21-pr19092.so.abi: Adjust. * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: Adjust. * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Adjust. 2017-04-14 Dodji Seketeli Speedup access to unreferenced symbols when loading corpus_group * src/abg-corpus.cc (corpus_group::unrefed_{fun, var}_symbol_map): New data members. (corpus_group::priv::priv): Adjust. (corpus_group::priv::add_unref_{fun,var}_symbols): Define new member functions. (corpus_group::add_corpus): Update the map of unreferenced symbols. (corpus_group::get_unreferenced_{function,variable}_symbols) Adjust logic. 2017-04-07 Dodji Seketeli Initial support of de-serializing the KMI of a Linux Kernel Tree * include/abg-libxml-utils.h (advance_to_next_sibling_element): Declare new function. * src/abg-libxml-utils.cc (go_to_next_sibling_element_or_stay) (advance_to_next_sibling_element): Define new functions. * include/abg-reader.h (read_corpus_group_from_input) (read_corpus_group_from_native_xml) (read_corpus_group_from_native_xml_file): Declare new functions. * src/abg-reader.cc (read_context::m_corpus_group): New data member. (read_context::{get_corpus_group, set_corpus_group}): Define new member functions. (read_translation_unit_from_input): Cleanup logic. (read_corpus_from_input): Don't assume that the document is starting with an 'abi-corpus' element. Support the mode where a caller called the xmlTextReaderExpand function (and so we are given an expanded xmlNodePtr) and the mode where we need to use the xmlTextReader API to walk through the 'abi-corpus' element. Also, if we are building a corpus group, do not clear what used to be 'per-corpus' data. That data must be shared by all the corpora of a given abi-corpus-group. (read_corpus_group_from_input, read_corpus_group_from_native_xml) (read_corpus_group_from_native_xml_file): Define new functions. * include/abg-tools-utils.h (FILE_TYPE_XML_CORPUS_GROUP): New enumerator of the file_type enum. * src/abg-tools-utils.cc (operator<<): In the overload for file_type, add a case for the new FILE_TYPE_XML_CORPUS_GROUP. (guess_file_type): Dectect abi-corpus-group xml element. * tools/abidiff.cc (adjust_diff_context_for_kmidiff): Define new static function. (main): Adjust to handle the new FILE_TYPE_XML_CORPUS_GROUP. That is, compare two FILE_TYPE_XML_CORPUS_GROUP if they are present. * tools/abilint.cc (main): Likewise. * tools/kmidiff.cc (main): Detect that one of two .kmi files are passed. In that case, load the .kmi file(s), build a corpus_group of it and use it in the comparison. 2017-04-06 Dodji Seketeli Initial support of the serialization of the KMI of a Linux Kernel Tree * include/abg-tools-utils.h (check_dir) (get_binary_paths_from_kernel_dist) (build_corpus_group_from_kernel_dist_under): Declare new functions. The last two functions are being moved from tools/kmidiff.cc so that they can be re-used. * include/abg-writer.h (write_corpus): Declare one overload that takes a write_context parameter. (write_corpus_group): Declare three overloads of this new function. * src/abg-tools-utils.cc (check_dir): Define new function. (load_generate_apply_suppressions, is_vmlinux, is_kernel_module) (find_vmlinux_and_module_paths) (get_binary_paths_from_kernel_dist) (build_corpus_group_from_kernel_dist_under): Define new functions. * src/abg-writer.cc (write_context::set_annotate): Define new member function. (write_corpus): Add an overload that takes a write_context. Adapt the existing overload to make it use this new one. (write_corpus_group): Define this new function and two additional overloads for it. * tools/kmidiff.cc (set_suppressions, is_vmlinux) (is_kernel_module, find_vmlinux_and_module_paths) (get_binary_paths_from_kernel_dist) (build_corpus_group_from_kernel_dist_under): Remove. (main): Adjust the call to build_corpus_group_from_kernel_dist_under as its arguments are now adapted since it's been factorized out into abg-tools-utils.h. * tools/abidw.cc (options::corpus_group_for_linux): Define new data member. (options::options): Adjust. (display_usage): Add help strings for the new --linux-tree option. (load_corpus_and_write_abixml): Factorize this function out of the main function. (load_kernel_corpus_group_and_write_abixml): Define new function. (main): Use the factorized load_corpus_and_write_abixml and the new load_corpus_and_write_abixml functions. * tests/test-read-write.cc: Adjust. * doc/manuals/abidw.rst: Add documentation for the new --linux-tree option. 2017-04-06 Dodji Seketeli Adjust test reference outputs after changes in abg-writer.cc * tests/data/test-annotate/test13-pr18894.so.abi: Adjust. * tests/data/test-annotate/test14-pr18893.so.abi: Adjust. * tests/data/test-annotate/test15-pr18892.so.abi: Adjust. * tests/data/test-annotate/test17-pr19027.so.abi: Adjust. * tests/data/test-annotate/test19-pr19023-libtcmalloc_and_profiler.so.abi: Adjust. * tests/data/test-read-dwarf/test13-pr18894.so.abi: Adjust. * tests/data/test-read-dwarf/test14-pr18893.so.abi: Adjust. * tests/data/test-read-dwarf/test15-pr18892.so.abi: Adjust. * tests/data/test-read-dwarf/test16-pr18904.so.abi: Adjust. * tests/data/test-read-dwarf/test17-pr19027.so.abi: Adjust. * tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi: Adjust. 2017-04-06 Dodji Seketeli Fix indentation glitch before the tag in abixml * src/abg-writer.cc (write_corpus): Indent before emitting the closing tag. 2017-04-06 Dodji Seketeli Avoid emitting some empty translation units to abixml * src/abg-writer.cc (write_corpus): Do not emit a translation unit that appears empty beforehand. 2017-04-06 Dodji Seketeli Avoid emitting duplicated decls in abixml * src/abg-writer.cc (write_context::m_emitted_decls_map): New data member. (write_context::{decl_name_is_emitted, record_decl_as_emitted}): Define new memeber functions. (write_translation_unit): Do not emit a decl that has already been emitted. (write_var_decl, write_function): Record the decl as emitted. 2017-04-04 Dodji Seketeli Rename write_corpus_to_native_xml into write_corpus * include/abg-writer.h (write_corpus): Rename write_corpus_to_native_xml to this. * src/abg-writer.cc (write_corpus): Rename write_corpus_to_native_xml to this. * tests/test-read-dwarf.cc (test_task::perform): Adjust. * tests/test-read-write.cc: Remove a useless "using abigail::xml_writer::write_corpus_to_native_xml". * tools/abidw.cc (main): Adjust. * tools/abilint.cc (main): Adjust. 2017-04-04 Dodji Seketeli Update the reference output of regression tests after kabidiff work * tests/data/test-annotate/test0.abi: Adjust. * tests/data/test-annotate/test13-pr18894.so.abi: Adjust. * tests/data/test-annotate/test14-pr18893.so.abi: Adjust. * tests/data/test-annotate/test15-pr18892.so.abi: Adjust. * tests/data/test-annotate/test17-pr19027.so.abi: Adjust. * tests/data/test-annotate/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: Adjust. * tests/data/test-annotate/test19-pr19023-libtcmalloc_and_profiler.so.abi: Adjust. * tests/data/test-annotate/test20-pr19025-libvtkParallelCore-6.1.so.abi: Adjust. * tests/data/test-annotate/test21-pr19092.so.abi: Adjust. * tests/data/test-diff-filter/test30-pr18904-rvalueref-report1.txt: Adjust. * tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-0.txt: Adjust. * tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-1.txt: Adjust. * tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-2.txt: Adjust. * tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-0.txt: Adjust. * tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-1.txt: Adjust. * tests/data/test-read-dwarf/test0.abi: Adjust. * tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: Adjust. * tests/data/test-read-dwarf/test11-pr18828.so.abi: Adjust. * tests/data/test-read-dwarf/test12-pr18844.so.abi: Adjust. * tests/data/test-read-dwarf/test13-pr18894.so.abi: Adjust. * tests/data/test-read-dwarf/test14-pr18893.so.abi: Adjust. * tests/data/test-read-dwarf/test15-pr18892.so.abi: Adjust. * tests/data/test-read-dwarf/test16-pr18904.so.abi: Adjust. * tests/data/test-read-dwarf/test17-pr19027.so.abi: Adjust. * tests/data/test-read-dwarf/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: Adjust. * tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi: Adjust. * tests/data/test-read-dwarf/test20-pr19025-libvtkParallelCore-6.1.so.abi: Adjust. * tests/data/test-read-dwarf/test21-pr19092.so.abi: Adjust. * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: Adjust. * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Adjust. 2017-06-12 Dodji Seketeli Introduce the --kmi-whitelist option to abidiff * doc/manuals/abidiff.rst: Add documentation for the --kmi-whitelist option. * tools/abidiff.cc (display_usage): Emit help string for the --kmi-whitelist option (parse_command_line): Parse the new --kmi-whitelist option, of the -w shortcut. 2017-04-04 Dodji Seketeli Make abidw support the --kmi-whitelist option * tools/abidw.cc (options::{kabi_whitelist_paths, kabi_whitelist_supprs}): New data members. (display_usage): Add a help string for the new --kmi-whitelist option. (parse_command_line): Parse the new --kmi-whitelist option. (maybe_check_suppression_files): Check the presence of the linux kernel abi white list passed by the option --kmi-whitelist. (main): Ignore loading the symbol table if the kernel abi white list is provided. * doc/manuals/abidw.rst: Add documentation for the new option. 2017-04-03 Dodji Seketeli Make abipkgdiff compare two kernel packages * include/abg-suppression.h (variable_suppression::variable_suppression): Add default arguments to the parameters. * include/abg-tools-utils.h (dir_exists, dir_is_empty) (string_begins_with, get_rpm_name, get_rpm_arch, get_deb_name) (file_is_kernel_package, file_is_kernel_debuginfo_package): Declare new functions. * src/abg-tools-utils.cc (dir_exists, dir_is_empty) (string_begins_with, get_deb_name, get_rpm_name, get_rpm_arch) (file_is_kernel_package, file_is_kernel_debuginfo_package): Define new functions. (gen_suppr_spec_from_kernel_abi_whitelist): The kernel ABI whitelist is made of ELF symbols names that ought to match functions *and* variables that have ELF symbols with those names. So generate variable suppression specifications as well. Not just function suppression specifications. * tools/abipkgdiff.cc (options::{kabi_whitelist_package, show_symbols_not_referenced_by_debug_info, kabi_whitelist_paths, kabi_suppressions}): New data members. (options::options): Adjust. (package::KIND_KABI_WHITELISTS): New enumerator in the package::kind enum. (package::kabi_whitelist_package_): New data member. (package::{base_name, kabi_whitelist_package, }): New member functions. (display_usage): Add a help string to the new --linux-kernel-abi-whitelist and --no-unreferenced-symbols options. (parse_command_line): Parse the new --no-unreferenced-symbols, --linux-kernel-abi-whitelist and --lkaw-pkg options. (maybe_check_suppression_files): Check the presence of kabi whitelist files. (set_diff_context_from_opts): Consider (not) showing symbols not referenced by debug info. (compare): If we are looking at linux kernel packages, take the kernel abi whitelist into account, apply the suppressions resulting from the kabi whitelists to the ELF read context. (maybe_collect_kabi_whitelists) (get_kabi_whitelists_from_arch_under_dir) (maybe_handle_kabi_whitelist_pkg, maybe_collect_kabi_whitelists) (get_interesting_files_under_dir): Define new functions. (maybe_update_vector_of_package_content): Take a new file_name_to_look_for parameter. (create_maps_of_package_content) (extract_package_and_map_its_content): Consider the case of the package being a linux kernel package. (main): Take the potential --lkaw-pkg into account. * doc/manuals/abipkgdiff.rst: Add documentation for options --linux-kernel-abi-whitelist, --lkaw-pkg and --no-unreferenced-symbols. 2017-04-03 Dodji Seketeli Avoid loading a translation unit twice from abixml * src/abg-reader.cc (read_translation_unit): Take (in parameter) a reference as the resulting translation unit. (get_or_read_and_add_translation_unit): Define new static function. (read_context::get_scope_for_node) (read_translation_unit_from_input): Use the new get_or_read_and_add_translation_unit. 2017-04-03 Dodji Seketeli Support loading and comparing two kernel trees * include/abg-dwarf-reader.h (set_read_context_corpus_group) (read_and_add_corpus_to_group_from_elf, set_ignore_symbol_table) (get_ignore_symbol_table): Declare new functions. * abg-dwarf-reader.cc (read_context::options_type): Define new type. (die_dependant_container_set::clear): Define new member function. (read_context::{bss, tesxt, rodata, data, data1}_section_): Add new data members. (read_context::{symbol_versionning_sections_loaded_, symbol_versionning_sections_found_}): Likewise. (read_context::corpus_group_): Likewise. (read_context::{load_in_linux_kernel_mode, load_all_types, show_stats, do_log_}): Replace these options by .. (read_context::options_): ... this instance of the new read_context:options_type. (read_context::read_context): Adjust. (read_context::{clear_alt_debug_info_data, clear_per_corpus_data, env, get_data_section_for_variable_address, load_all_types, load_in_linux_kernel_mode, show_stats, do_log}): Adjust. (create_read_context): Adjust. (read_context::~read_context): Define destructor. (read_context::{options, bss_section, text_section, rodata_section, data_section, data1_section, current_corpus_group, has_corpus_group, main_corpus_from_current_group, main_corpus_from_current_group, current_corpus_is_main_corpus_from_current_group, should_reuse_type_from_corpus_group}): Define new member functions. (read_context::get_die_qualified_type_name): Handle the name of the current translation unit. (read_context::load_symbol_maps): Really don't load (linux kernel specific) symbol maps if we were told to ignore the ELF symbol table. (set_ignore_symbol_table, get_ignore_symbol_table) (create_default_var_sym, create_default_fn_sym, add_symbol_to_map) (set_read_context_corpus_group) (read_and_add_corpus_to_group_from_elf): Define new functions. (build_type_decl, build_typedef_type, build_enum_type) (add_or_update_class_type) (add_or_update_union_type): Reuse the type being built, from the main corpus of the corpus group. (build_qualified_type): Cleanup logic. (build_var_decl, build_function_decl): Create a default symbol for the variable or function if we are supposed to ignore the symbol table of the current binary. Add that symbol to the symbol table that is created in the read context. (read_debug_info_into_corpus): Don't load the ELF symbol table information if we are asked to ignore the symbol table. But set the symbol table that we built artificially while loading functions and variables, into the ABI corpus being built. (read_context::maybe_adjust_var_sym_address): Adjust. (build_ir_node_from_die): Add ir node to its logical scope. For the C language, the scope of a type is the global scope. (read_corpus_from_elf): Don't load ELF properties if we were asked to avoid the ELF symbol table. * include/abg-comparison.h (compute_diff): Declare ... * src/abg-comparison.cc (compute_diff): ... an overload to compare corpus_group. * tools/kmidiff.cc: New tool. 2017-03-31 Dodji Seketeli Initial support to lookup types per location * include/abg-fwd.h (get_name_of_qualified_type) (get_name_of_reference_to_type, lookup_basic_type_per_location) (lookup_class_type_per_location, lookup_union_type_per_location) (lookup_enum_type_per_location, lookup_typedef_type) (lookup_typedef_type_per_location, lookup_pointer_type) (lookup_reference_type, lookup_type_per_location) (lookup_type_through_translation_units) (lookup_type_from_translation_unit, odr_is_relevant): Declare new functions or new function overloads. * include/abg-ir.h (location::expand): Declare new member function. (type_maps::empty): Likewise. (operator|=): Declare an overload for qualified_type_def::CV. (get_string_representation_of_cv_quals) (get_name_of_qualified_type, lookup_qualified_type): Declare new functions. * src/abg-ir.cc (location::expand): Define new member function. (type_maps::empty): Likewise. (odr_is_relevant): Likewise. (get_string_representation_of_cv_quals) (get_name_of_reference_to_type, get_name_of_qualified_type) (lookup_union_type_per_location): Define new functions or overloads. (lookup_basic_type, lookup_enum_type, lookup_typedef_type) (lookup_qualified_type, lookup_pointer_type) (lookup_reference_type, lookup_type_from_translation_unit) (lookup_basic_type_per_location, lookup_basic_type_per_location) (lookup_class_type_per_location, lookup_class_type_per_location) (lookup_enum_type_per_location, lookup_enum_type_per_location) (lookup_typedef_type_per_location) (lookup_typedef_type_per_location, lookup_type_per_location): Define new overloads. (maybe_update_types_lookup_map) (maybe_update_types_lookup_map) (maybe_update_types_lookup_map): Add a new use_type_name_as_key parameter. If it's false, then associates the type to its location rather than to its name. (maybe_update_types_lookup_map): In the overloads for type_decl, class_decl, union_decl, enum_type, typedef_decl, array_type_def, record the type in the lookup map per location, in addition to the per-name recording. (qualified_type_def::build_name): Use the new get_name_of_qualified_type. (qualified_type_def::get_cv_quals_string_prefix): Use the new get_string_representation_of_cv_quals. (operator|=): Define a new overload for qualified_type_def::CV. (pointer_type_def::get_qualified_name): Use the new get_name_of_pointer_to_type. (reference_type_def::get_qualified_name): Use the new get_name_of_reference_to_type. 2017-03-30 Dodji Seketeli Create a Corpus Group API extension * include/abg-corpus.h (corpus::{find_translation_unit, get_type_per_loc_map}): Declare new member functions. (corpus::{get_architecture_name, is_empty}): Make these member functions const. (corpus::{get_sorted_fun_symbols, get_functions, get_variables, get_unreferenced_function_symbols, get_unreferenced_variable_symbols}): Make these member functions virtual. (class corpus_group): Declare a new type. * include/abg-fwd.h (corpus_sptr, corpus_group_sptr) (string_tu_map_type, istring_var_decl_ptr_map_type) (istring_function_decl_ptr_map_type): Define new typedefs. * src/abg-corpus-priv.h (corpus_priv::{path_tu_map, type_per_loc_map_}): Add new data members. * src/abg-corpus.cc (corpus_add): Complete the function comment. Assert that at most one translation unit of a given path can be added to the corpus. (corpus::{find_translation_unit, get_type_per_loc_map}): Define new member functions. (corpus::{get_architecture_name}): Make this member function const. (struct corpus_group::priv): Define new type. (corpus_group::{corpus_group, ~corpus_group, add_corpus, get_corpora, is_empty, get_functions, get_variables, get_var_symbol_map, get_fun_symbol_map, get_sorted_fun_symbols, get_sorted_var_symbols, get_unreferenced_function_symbols, get_unreferenced_variable_symbols}): Define member functions of the new corpus_group type. 2017-07-03 Dodji Seketeli Fix some typos in abidiff.cc * tools/abidiff.cc (main): Fix typos. 2017-07-03 Dodji Seketeli Avoid comparing kernel.img file from the grub2 package * default.abignore: Do not compare kernel.img files. 2017-06-14 Dodji Seketeli Bug 21567 - Fedabipkgdiff matches build distro names too tightly * tools/fedabipkgdiff (get_distro_from_string): Define new function. (Brew.get_package_latest_build): Also consider builds which distro property is less than the expected distro string that we were given. 2017-06-14 Sinny Kumari Check if return_codes list is empty in fedabipkgdiff * tools/fedabipkgdiff (run_abipkgdiff()): Check if return_codes list is empty 2017-06-13 Dodji Seketeli Do not forget to erase temporary directories in abipkgdiff * tools/abipkgdiff.cc (maybe_erase_temp_dirs): Define new static function. (compare): Call the new maybe_erase_temp_dirs on all return points. 2017-05-11 Ben Woodard Fix more clang build warnings * include/abg-ini.h (config::section::priv): Make this be a class, not a struct. * src/abg-dwarf-reader.cc (build_translation_unit_and_add_to_ir) (build_ir_node_from_die): Add parenthesis around assignment expressions inside conditional expression. * src/abg-suppression.cc (read_function_suppression): Likewise. 2017-05-11 Ben Woodard Fix some clang compile problems * include/abg-comp-filter.h (class filter_base): Declare this as a struct. * include/abg-comparison.h (class filtering::filter_base): Likewise. (struct diff_traversable_base): Declare this as a class. * include/abg-ir.h (function_decl::parameter): Declare this before using it. * src/abg-corpus.cc (corpus::priv::build_unreferenced_symbols_tables): Add missing parenthesis around assignment expressions inside conditional expressions. 2017-05-21 Sinny Kumari Add --self-compare option in fedabipkgdiff * bash-completion/fedabipkgdiff: Add new option --self-compare * tests/data/Makefile.am: Add new test file * tests/data/test-fedabipkgdiff/test7-self-compare-from-fc23-dbus-glib-report-0.txt: New reference output for testing ABI comparison on same package * tests/runtestfedabipkgdiff.py.in (FEDABIPKGDIFF_TEST_SPECS): Add test case for --self-compare * tools/fedabipkgdiff (build_commandline_args_parser()): Add new option --self-compare (generate_comparison_halves()): Find second comparision half in same package list while doing self-compare (self_compare_rpms_from_distro()): New function to perform ABI comparision on same pacakge (main()): Add if condition when --self-compare option is enabled 2017-03-31 Dodji Seketeli Avoid building DIE -> parent DIE map when analyzing a C binary * include/abg-ir.h (global_scope_sptr): Make this be a share_ptr of scope_decl, not of global_scope. (translation_unit::get_global_scope): Return a reference to scope_decl_sptr. * src/abg-ir.cc (translation_unit::get_global_scope): Return a scope_decl not a global_scope. * src/abg-dwarf-reader.cc (read_context::nil_scope_): Add new data member. (read_context::{global_scope, nil_scope}): Define new member functions. (read_context::build_die_parent_maps): Do not build the map if we are looking at a C (or asm) translation unit. (get_scope_die, get_scope_for_die): If we are looking at a C translation unit then do return the global scope. 2017-04-06 Dodji Seketeli Speed up access to the definition of a class declaration-only type * include/abg-ir.h (class_or_union::get_naked_definition_of_declaration): Declare a new member function. (class_decl::get_naked_definition_of_declaration): Likewise. * src/abg-ir.cc ({type_decl, qualified_type_def, array_type_def, enum_type_decl}::operator==): Use the get_naked_canonical_type and get_naked. (class_or_union::priv::naked_definition_of_declaration_): Define new data member. (class_or_union::priv::priv): Adjust to initialize the new data member. (class_or_union::get_naked_definition_of_declaration): Define new member function. ({class_or_union, class_decl}::operator==): Use the new get_naked_definition_of_declaration instead of get_definition_of_declaration. (equals): In the overload for class_or_union, do the same. (class_decl::get_naked_definition_of_declaration): Define new member function. (hash_type_or_decl): Likewise. 2017-04-06 Dodji Seketeli Speedup comparison of decl-only classes * src/abg-ir.cc (equals): In the overload for class_decl, if we are looking at a decl-only class, then directly call the equals function for class_or_union. That one knows how to perform the comparison without calling the class_or_union::priv_->comparison_started function, in that case. 2017-04-04 Dodji Seketeli Update the description of what abipkgdiff does * tools/abipkgdiff.cc: Update the description of the sequence of actions performed. 2017-04-06 Dodji Seketeli Misc cleanups in abg-writer.cc * src/abg-writer.cc (class write_context): Fix indentation. (write_location, write_visibility, write_binding) (write_array_size_and_alignment, write_size_and_alignment): Fix these declarations to use the *_sptr typedefs rather than the explicit shared_ptr<*> types. (write_translation_unit): Fix comment. 2017-05-10 Dodji Seketeli Don't consider changes to basic types as being redundant * include/abg-comparison.h (is_diff_of_basic_type) (has_basic_type_change_only): Declare these functions ... * src/abg-comparison.cc (is_diff_of_basic_type) (has_basic_type_change_only): ... and define them. (redundancy_marking_visitor::visit_begin): Use the new has_basic_type_change_only. * tests/data/test-diff-filter/libtest37-v0.so: New binary test input. * tests/data/test-diff-filter/libtest37-v1.so: Likewise. * tests/data/test-diff-filter/test37-report-0.txt: New test reference output. * tests/data/test-diff-filter/test37-v0.cc: Source code of the new binary test input. * tests/data/test-diff-filter/test37-v1.cc: Likewise. * tests/data/Makefile.am: Update to add the new test material to the source distribution. * tests/test-diff-filter.cc (in_out_spec): Add the new test input to this test harness. 2017-05-10 Dodji Seketeli Rename fn_parm_diff::get_type_diff into fn_parm_diff::type_diff * include/abg-comparison.h (fn_parm_diff::type_diff): Renamed fn_parm_diff::get_type_diff intot his. * src/abg-comparison.cc (fn_parm_diff::type_diff): Likewise. (fn_parm_diff::report): Adjust. (redundancy_marking_visitor::visit_begin): Likewise. (is_diff_of_variadic_parameter): Likewise. 2017-05-03 Dodji Seketeli Invalidate function and variable ID cache when invoking ::set_symbol * src/abg-ir.cc ({function, var}_decl::set_symbol): Invalidate the ID cache. 2017-05-03 Dodji Seketeli Remove useless overloads of is_type * include/abg-fwd.h (is_type): Remove the overloads that take decl_base and type_base types. * src/abg-ir.cc (is_type): Likewise. 2017-05-04 Dodji Seketeli Ensure build_qualified_type can return non-qualified types * src/abg-dwarf-reader.cc (build_qualified_type): Return a type_base_sptr. (build_ir_node_from_die): Adjust the call to build_qualified_type. 2017-05-04 Dodji Seketeli Fix array subranges (wrongly) having the same lower bound * src/abg-dwarf-reader.cc (build_subranges_from_array_type_die): Consider the 'lower_bound' parameter as the default lower bound for each sub-ranges. 2017-03-31 Dodji Seketeli Fix buffer overrun in 'equals' function for arrays * src/abg-ir.cc (equals): In the overload for arrays, check for the end of the subranges of the two arrays, not just for the first one. 2017-04-18 Dodji Seketeli Fix a race condition in queue::priv::do_bring_workers_down * src/abg-workers.cc (queue::priv::tasks_todo_mutex): Make this data member mutable. (more_tasks_to_execute): (queue::priv::do_bring_workers_down): Update the queue::priv::bring_workers_down only in the critical section defined by queue::priv::queue_cond_mutex. (worker::wait_to_execute_a_task): Testing for queue::priv::bring_workers_down is done in the critical section defined by queue::priv::queue_cond_mutex. The loop over waiting ont the condition is also in the critical section, as it ought to be. * tests/test-read-write.cc (struct test_task): New type. (main): Express in terms of the new test_task type. 2017-04-12 Ondrej Oprala cppcheck: mitigate performance warnings * include/abg-diff-utils.h (print_snake): pass argument of type snake by const reference. * include/abg-ir.h (location::operator{==,<}): Likewise. * include/abg-viz-dot.h (node_base::{node_base,parent_node,child_node}): Likewise. * include/abg-viz-svg.h (svg::svg) Likewise. * src/abg-config.cc (config::config): Member initialization in ctor body. * src/abg-dwarf-reader.cc (class_decl_sptr::add_or_update_class_type): Initial value never used. * src/abg-ir.cc: (decl_base::priv::priv) Member initialization in ctor body, pass argument of type location by const reference. (equals): Variable initial value never used. * src/abg-reader.cc (read_corpus_from_input): Initial variable value never used. (build_elf_symbol_db): Use pre-increment. * src/abg-suppression-priv.h (suppression_matches_type_location): Pass argument of type location by const reference. * src/abg-suppression.cc: Likewise. 2017-04-11 Ondrej Oprala Fix cppcheck error: "Same iterator is used with different containers" * src/abg-dwarf-reader.cc (type_or_decl_base_sptr::lookup_artifact_from_per_tu_die_representation): Fix an error found by cppcheck. 2017-04-11 Ondrej Oprala Clean up scripts/* * scripts/dot_to_png.sh: Clean up the script according to shellcheck warnings and remarks. * scripts/dot_to_svg.sh: Likewise. * scripts/svg_to_plain_svg.sh: Likewise. * scripts/svg_to_png_and_pdf.sh: Likewise. 2017-04-12 Ondrej Oprala Fix comparison used instead of an assignment * src/abg-ir.cc (parse_integral_type): An attempt at clang compilation has discovered there to be a comparison with unused result, that apparently should be an assignment. 2017-04-12 Dodji Seketeli Fix some random deadlock while running fedabipkgidiff in tests * tools/fedabipkgdiff (abipkgidff): Do not use Popen.communicate() as it might hang if the data is large. Rather, busy wait for the abipkgdiff process to finish and then get its output. 2017-03-22 Slava Barinov Fix types in header to meet sources * include/abg-fwd.h: Include stdint.h for uint64_t. (ir::set_data_member_offset): Take uint64_t rather than size_t. (ir::get_data_member_offset): Return uint64_t rather than size_t. 2017-03-24 Dodji Seketeli Launch fedabipkgdiff tests first * tests/Makefile.am: Run the fedabipkgdiff test first. 2017-03-24 Dodji Seketeli Bug 21296 - Reporting diff of const ref against non-const ref aborts * include/abg-fwd.h (look_through_no_op_qualified_type): Declare new function. * src/abg-ir.cc (look_through_no_op_qualified_type): Define it. (compute_diff_for_types): Use the new look_through_no_op_qualified_type here rather than open-coding it. (equals): In the overload for function_decl::parameter, use the new look_through_no_op_qualified_type function. * tests/data/test-diff-dwarf/test40-PR21296-clanggcc.cc: Source code of the new test inputs. * tests/data/test-diff-dwarf/test40-PR21296-clanggcc-report0.txt: New test input. * tests/data/test-diff-dwarf/test40-PR21296-libgcc.so: New binary test input. * tests/data/test-diff-dwarf/test40-PR21296-libclang.so: Likewise. * tests/test-diff-dwarf.cc (in_out_specs): Add the new test inputs to the test harness. 2017-03-05 Chenxiong Qi Bug 20087 - Clean cache before or after ABI comparison * configure.ac: Require shutil module. * doc/manuals/fedabipkgdiff.rst: Add document for new option clean-cache, clean-cache-before, and clean-cache-after. * tools/fedabipkgdiff (build_commandline_args_parser): Add new option --clean-cache, --clean-cache-before and --clean-cache-after. (diff_local_rpm_with_latest_rpm_from_koji): Delete download cache directory before or after downloading RPMs. (diff_latest_rpms_based_on_distros): Likewise. (diff_two_nvras_from_koji): Likewise. (diff_from_two_rpm_files): Likewise. * bash-completion/fedabipkgdiff: Add new options. * tests/mockfedabipkgdiff.in (get_download_dir): Rewrite to behave just like the original get_download_dir. (mock_get_download_dir): Removed. (DOWNLOAD_CACHE_DIR): New global variable pointing directory holding packages during tests. (run_fedabipkgdiff): Mock original get_download_dir with the rewrite get_download_dir. * tests/runtestfedabipkgdiff.py.in (run_fedabipkgdiff_tests): Add --clean-cache to run tests to ensure no regression. 2017-03-17 Dodji Seketeli Shut down a helgrind false positive in the "system" libc call * tests/test-valgrind-suppressions.supp: Add a suppression that occurs during an internal libc signal handling occasion. 2017-03-15 Dodji Seketeli Fix data race on worker::queue::priv::bring_workers_down * src/abg-workers.cc (worker::wait_to_execute_a_task): Protect the read of the queue::priv::bring_workers_down down variable with the queue::priv::tasks_todo_mutex. 2017-03-07 Dodji Seketeli Bug 21228 - Handle cloning union member functions * include/abg-ir.h (class_or_union::add_member_function): Move the class_decl::add_member_function overload declaration into the class class_or_union class. (class class_decl): Make the class class_or_union be a friend of class_decl. * src/abg-ir.cc (class_decl::add_member_function): Transform the definition of this overload into ... (class_or_union::add_member_function): ... this one. Make sure that when setting the virtual-ness attributes of the member function, we are effectively looking at the a function that is a member of a class. (function_decl::clone): Do not assert that a member function is necessarily a member of a class_decl. It can also a member of a union_decl!. So, rather, assert that the scope of the member function is of type class_or_union. * tests/data/test-diff-pkg/tbb-2017-8.20161128.fc26.x86_64.rpm: New test input RPM. * tests/data/test-diff-pkg/tbb-2017-9.20170118.fc27.x86_64.rpm: * tests/data/test-diff-pkg/tbb-debuginfo-2017-8.20161128.fc26.x86_64.rpm: Likewise. * tests/data/test-diff-pkg/tbb-debuginfo-2017-9.20170118.fc27.x86_64.rpm: Likewise. * tests/data/test-diff-pkg/tbb-2017-8.20161128.fc26.x86_64--tbb-2017-9.20170118.fc27.x86_64.txt: New reference test output. * tests/data/Makefile.am: Add the new test input RPMs to the source distribution. * tests/test-diff-pkg.cc (in_out_specs): Take the new input tests above into account. 2017-03-03 Dodji Seketeli Consider file path when sorting virtual member functions * src/abg-ir.cc (virtual_member_function_less_than::operator()): Take the file path into account in the sorting. * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: Adjust. 2017-03-03 Dodji Seketeli Fix virtual members sorting to unbreak the build on EL6 * src/abg-ir.cc (virtual_member_function_less_than::operator()): Update comment. When two virtual functions have the same virtual index and one of them has no ELF symbol, then that function is less than the one with an ELF symbol. * tests/data/Makefile.am: Remove test-annotate/{test9-pr18818-clang.so.abi, test11-pr18828.so.abi, test12-pr18844.so.abi, test16-pr18904.so.abi, test22-pr19097-libstdc++.so.6.0.17.so.abi}. * tests/data/test-annotate/test10-pr18818-gcc.so.abi: Remove. * tests/data/test-annotate/test11-pr18828.so.abi: Likewise. * tests/data/test-annotate/test12-pr18844.so.abi: Likewise. * tests/data/test-annotate/test16-pr18904.so.abi: Likewise. * tests/data/test-annotate/test22-pr19097-libstdc++.so.6.0.17.so.abi: Likewise. * tests/test-annotate.cc (in_out_specs): Remove those tests above which input files have been removed. 2017-03-02 Dodji Seketeli Make Helgrind suppressions less specific to libgcc_s version * tests/test-valgrind-suppressions.supp: Make Helgrind suppressions less specific to libgcc_s version. 2017-03-02 Dodji Seketeli More Helgrind suppressions * tests/test-valgrind-suppressions.supp: More specific suppressions. 2017-03-02 Dodji Seketeli Silence Helgrind reports about exception stack unwinding * tests/test-valgrind-suppressions.supp: Silence Helgrind reports about exception stack unwinding. 2017-03-01 Dodji Seketeli Make the helgrind suppressions less specific * tests/test-valgrind-suppressions.supp: Make the ostream writting suppressions be less specific so that they can apply to all the related false positives. 2017-03-01 Dodji Seketeli Move test-read-dwarf.cc to abigail::workers * tests/test-read-dwarf.cc (iospec, spec_lock, write_lock) (out_abi_base, in_elf_base, in_abi_base): Remove these global variables. (handle_in_out_spec): Remove this. (struct test_task): Write this task that does what handle_in_out_spec was doing. (test_task_sptr): Define new typedef. (main): Remove the pthreads artifacts. Use the new test_task type along with the abigail::workers interface. * tests/test-valgrind-suppressions.supp: Add more helgrind suppressions for ostream writting false positives. 2017-02-28 Dodji Seketeli Display the command that failed the runtestfedabipkgdiff.py test * tests/runtestfedabipkgdiff.py.in (run_fedabipkgdiff_tests): When A test fails, display the fedabipkgdiff command that triggered the failure. 2017-02-24 Dodji Seketeli Make abipkgdiff.cc use the abigail::workers interface * tools/abipkgdiff.cc: Remove ftw.h, pthread.h, unistd.h, add fts.h and abg-workers.h. (verbose, elf_file_paths_tls_key, reports_map, env_map, map_lock) (arg_lock, prog_options): Remove all these global variables. (struct package_descriptor): Remove this type. (pthread_routine_extract_package) (first_package_tree_walker_callback_fn) (second_package_tree_walker_callback_fn, pthread_routine_compare) (pthread_join, pthread_routine_extract_pkg_and_map_its_content): Remove these functions. (options::{num_workers, verbose}): Define new data members. (options::options): Initialize the new verbose and num_workers data members. (package::erase_extraction_directory) (erase_created_temporary_directories_parent): Take the program options in parameter. Don't use the global verbose variable anymore. (package::erase_extraction_directories) (erase_created_temporary_directories, extract_package): Take the program options in parameter. (extract_rpm, extract_deb, extract_tar): Likewise. And don't use the global verbose variable anymore. (compare): Don't use the global verbose variable anymore. Use the new compare_task type along with the abigail::workers::queue type. (pkg_extraction_task, pkg_prepare_task, compare_task) (comparison_done_notify): Define new classes. (maybe_update_vector_of_package_content): Define new static function. (create_maps_of_package_content): Don't take the ftw_cp_type anymore. Don't use the global verbose variable anymore. Use the fts_{open,read,close} functions, rather than the ftw one. (extract_package_and_map_its_content): Don't use pthreads anymore. Use the new pkg_extraction_task type created along with the abigail::workers::queue type. (prepare_packages): Don't use pthreads anymore. Use the new pkg_prepare_task type along with the abigail::workers::queue type. (elf_size_is_greater): Adjust to use abigail::workers::queue::tasks, rather than the previous compaer_args_sptr type. (parse_command_line): Adjust to stop using the global verbose variable. (main): Remove use of global variables prog_options and also the packages variable. * tests/data/test-diff-pkg/dbus-glib-0.104-3.fc23.x86_64--dbus-glib-0.104-3.fc23.armv7hl-report-0.txt: Adjust. * tests/data/test-diff-pkg/dirpkg-0-report-0.txt: Likewise. * tests/data/test-diff-pkg/test-dbus-glib-0.80-3.fc12.x86_64-report-0.txt: Likewise. * tests/data/test-diff-pkg/test-rpm-report-0.txt: Likewise. * tests/data/test-diff-pkg/test-rpm-report-1.txt: Likewise. * tests/data/test-diff-pkg/test-rpm-report-2.txt: Likewise. * tests/data/test-diff-pkg/test-rpm-report-3.txt: Likewise. * tests/data/test-fedabipkgdiff/test0-from-fc20-to-fc23-dbus-glib-report-0.txt: Likewise. * tests/data/test-fedabipkgdiff/test1-from-fc20-to-dbus-glib-0.106-1.fc23.x86_64-report-0.txt: Likewise. * tests/data/test-fedabipkgdiff/test2-dbus-glib-0.100.2-2.fc20--dbus-glib-0.106-1.fc23-report-0.txt: Likewise. * tests/data/test-fedabipkgdiff/test3-dbus-glib-0.100.2-2.fc20.i686--dbus-glib-0.106-1.fc23.i686-report-0.txt: Likewise. * tests/data/test-fedabipkgdiff/test4-glib-0.100.2-2.fc20.x86_64.rpm-glib-0.106-1.fc23.x86_64.rpm-report-0.txt: Likewise. 2017-02-24 Dodji Seketeli Do not ignore valgrind checks returning an error * autoconf-archive/ax_valgrind_check.m4 (check-valgrind): Don't ignore errors. 2017-02-24 Dodji Seketeli Add a "make check-valgrind-helgrind-recursive" target * tests/Makefile.am (check-valgrind-helgrind-recursive): New target to run the tests recursively under the control of Valgrind's Helgrind tool. * tests/test-valgrind-suppressions.supp: Update this suppression file with suppressions for Helgrind. 2017-02-24 Dodji Seketeli Several fixes and enhancements to abigail::workers * Don't try to schedule a task if the pointer to the task is nil * Fix a data race when bringing workers (of a queue) down * Always try to wake up all waiting threads when bringing down queue workers. * Fix a data race when accessing the queue condition variable * Fix a data race when notifying listeners about the end of the job performed by the task. Enhancements ============ * Pass the "task done" notifier by reference, to the worker queue. Without this, the worker queue needs to copy the "task done" notifier by value. This implies that user code needs to provide task done notifier instances that come with potentially complicated copy constructors. By passing it by reference and by just re-using the notifier from the user code, we do away with the need for copying altogether. This also fixes some latent copying bugs. * Add a workers::queue::schedule_tasks() method This allows user code to schedule a vector of tasks at once. * make workers::queue::get_completed_tasks() return a non-const vector This enables user code to sort the completed tasks as they wish. * include/abg-workers.h (queue::tasks_type): New typedef. (queue::queue): Pass task_done_notify by reference. (queue::schedule_tasks): Declare new member function. (queue::get_completed_tasks): Return non-const vector. * src/abg-workers.cc (queue::priv::default_notify): New data member. (queue::priv::notify): Make this data member be a reference. (queue::priv::priv): Initialize the notify data member to either the new default_notify (if no notifier is provided by the constructor) or to the notifier provided by the constructor. (queue::priv::schedule_task): Do not schedule a nil task. Update comment. (queue::priv::schedule_tasks): Add a new member function. (queue::priv::do_bring_workers_down): Update comment. Protect access to "bring_workers_down" with tasks_todo_mutex to prevent a data race. Call pthread_cond_broadcast on the queue_cond unconditionaly to prevent some worker threads to keep waiting for ever. Also, protect the access to the queue_cond by the queue_cond_mutex to precent a data race. (queue::queue): Pass the notifier by reference. Update comment. (queue::schedule_task): Update comment. (queue::schedule_tasks): Define new member function. (queue::wait_for_workers_to_complete): Update comment. (queue::get_completed_tasks): Return a non-const vector. Update comment. (worker::wait_to_execute_a_task): Update several comments. Make the execution of the notification code to be synchronized (on the tasks_done_mutex). 2017-02-14 Dodji Seketeli Fix typo in help string of abipkgdiff * tools/abipkgdiff.cc (display_usage): Remove erroneous end line. 2017-01-23 Dodji Seketeli fedabipkgdiff refuses to compare packages with the same release number * tools/fedabipkgdiff (RPM.is_peer): Update comment. Fix logic. * tests/data/test-fedabipkgdiff/packages/vte291/0.39.1/1.fc22/x86_64/vte291-0.39.1-1.fc22.x86_64.rpm: New test input file. * tests/data/test-fedabipkgdiff/packages/vte291/0.39.1/1.fc22/x86_64/vte291-debuginfo-0.39.1-1.fc22.x86_64.rpm: Likewise. * tests/data/test-fedabipkgdiff/packages/vte291/0.39.1/1.fc22/x86_64/vte291-devel-0.39.1-1.fc22.x86_64.rpm: Likewise. * tests/data/test-fedabipkgdiff/packages/vte291/0.39.90/1.fc22/x86_64/vte291-0.39.90-1.fc22.x86_64.rpm: Likewise. * tests/data/test-fedabipkgdiff/packages/vte291/0.39.90/1.fc22/x86_64/vte291-debuginfo-0.39.90-1.fc22.x86_64.rpm: Likewise. * tests/data/test-fedabipkgdiff/packages/vte291/0.39.90/1.fc22/x86_64/vte291-devel-0.39.90-1.fc22.x86_64.rpm: Likewise. * tests/data/test-fedabipkgdiff/vte291-0.39.1-1.fc22.x86_64--vte291-0.39.90-1.fc22.x86_64-report-0.txt: Likewise. * tests/data/Makefile.am: Add the new test input data to source distribution. * tests/mockfedabipkgdiff.in: Update the package and build information to add the new vte291-0.39.1-1.fc22.x86_64.rpm and vte291-0.39.90-1.fc22.x86_64.rpm packages (as well as their devel and debuginfo packages) into the "mock" Koji build database. * tests/runtestfedabipkgdiff.py.in: Make this test harness run over the two aforementioned packages. 2017-01-24 Dodji Seketeli Add missing tests input files to distribution files * tests/data/Makefile.am: Add three missing test input files to the source distribution tarball. Renamed test-fedabipkgdiff/test6-missing-devel-debuginfo-nss-util-3.12.6-1.fc14.x86_64--nss-util-3.24.0-2.0.fc25.x86_64-report-0.txt into test-fedabipkgdiff/test6-nss-util-3.12.6-1.fc14.x86_64--nss-util-3.24.0-2.0.fc25.x86_64-report-0.txt. * tests/runtestfedabipkgdiff.py.in (FEDABIPKGDIFF_TEST_SPECS): Renamed test6-missing-devel-debuginfo-nss-util-3.12.6-1.fc14.x86_64--nss-util-3.24.0-2.0.fc25.x86_64-report-0.txt into test6-nss-util-3.12.6-1.fc14.x86_64--nss-util-3.24.0-2.0.fc25.x86_64-report-0.txt. 2017-01-24 Dodji Seketeli Add missing new line to an error message of runtestfedabipkgdiff.py * tests/runtestfedabipkgdiff.py.in (run_fedabipkgdiff_tests): Add missing new line to an error message. 2017-01-24 Dodji Seketeli Fix silent failure of tests/runtestfedabipkgdiff.py * tests/mockfedabipkgdiff.in (run_fedabipkgdiff): Patch fedabipkgdiff.DEFAULT_KOJI_TOPURL instead of fedabipkgdiff.DEFAULT_KOJI_TOPDIR. * tests/runtestfedabipkgdiff.py.in (main): Properly return 0 upon success, 1 otherwise. 2017-01-14 Dodji Seketeli Misc style fixes * include/abg-ir.h (class_or_union): Fix indentation. * src/abg-dwarf-reader.cc (get_die_pretty_representation): Add new line. * src/abg-ir.cc (struct class_decl::priv): Fix indentation. (virtual_member_function_less_than::operator()): Fix a typo in a comment. 2017-01-13 Dodji Seketeli Bug 20476 - Compare virtual member functions when comparing classes * include/abg-ir.h (class_decl::get_biggest_vtable_offset): Declare new member function. * src/abg-ir.cc (virtual_member_function_less_than::operator()): Either compare the symbol id strings if the functions have symbols or just compare their pretty representations. (class_decl::get_biggest_vtable_offset): Define new member function. (methods_equal_modulo_elf_symbol) (method_matches_at_least_one_in_vector): New static methods. (equals): In the overload for classes, compare the virtual member functions while comparing classes. * src/abg-comparison.cc (represent): In the overload for method_decl_sptr, fix the way we compute the highest vtable offset number for a give class_decl. (class_decl::ensure_lookup_tables_populated): Don't forget added and removed virtual member functions in the report for changed classes. * tests/data/test-diff-dwarf/libtest41-PR20476-hidden-old.so: New test binary input file. * tests/data/test-diff-dwarf/libtest41-PR20476-hidden-new.so: Likewise. * tests/data/test-diff-dwarf/test41-PR20476-hidden-report-0.txt: New reference output. * tests/data/Makefile.am: Add the new test material above to the source distribution. * tests/test-diff-dwarf.cc (in_out_spec): Add the new tests here. * tests/data/test-annotate/test10-pr18818-gcc.so.abi: Adjust. * tests/data/test-annotate/test11-pr18828.so.abi: Adjust. * tests/data/test-annotate/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: Adjust. * tests/data/test-annotate/test20-pr19025-libvtkParallelCore-6.1.so.abi: Adjust. * tests/data/test-annotate/test22-pr19097-libstdc++.so.6.0.17.so.abi: Adjust. * tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: Adjust. * tests/data/test-read-dwarf/test11-pr18828.so.abi: Adjust. * tests/data/test-read-dwarf/test13-pr18894.so.abi: Adjust. * tests/data/test-read-dwarf/test14-pr18893.so.abi: Adjust. * tests/data/test-read-dwarf/test15-pr18892.so.abi: Adjust. * tests/data/test-read-dwarf/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: Adjust. * tests/data/test-read-dwarf/test20-pr19025-libvtkParallelCore-6.1.so.abi: Adjust. * tests/data/test-read-dwarf/test21-pr19092.so.abi: Adjust. * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: Adjust. 2017-02-14 Dodji Seketeli Fix indentation in src/abg-writer.cc * src/abg-writer.cc (annotate): Fix indentation. 2017-02-13 Dodji Seketeli Adjust reference output of test-annotate * tests/data/test-annotate/test15-pr18892.so.abi: Adjust this reference output. 2017-02-13 Dodji Seketeli Fix help string for --header-dirs * tools/abidw.cc (display_usage): Fix patch -> path typo. 2017-02-13 Dodji Seketeli Make abidw --headers-dir work with the --out-file option * tools/abidw.cc (parse_command_line): Don't require an empty output file when parsing the --headers-dir option. This was a thinko. 2017-01-17 Ondrej Oprala Bug 20970 - Add a --annotate option to abidw * doc/manuals/abidiff.rst: Document the '--no-corpus-path' option. * doc/manuals/abidw.rst: Document the '--no-corpus-path' and '--annotate' options. * include/abg-libxml-utils.h ({un,}escape_xml_comment): Add new function declarations. * include/abg-writer.h: Add new annotate functions (write_{translation_unit,corpus_to_{archive,native_xml_file}}): Add an optional "annotate" parameter defaulting to "false". * src/abg-libxml-utils.cc ({un,}escape_xml_comment): Add new function definitions. * src/abg-writer.cc (annotate): Define new templatized function and specialize it for necessary cases. * tests/Makefile.am: Add runtestannotate as a new test. * tests/data/Makefile.am: Add paths to below reference test outputs. * tests/data/test-annotate/libtest23.so.abi: New reference test output. * tests/data/test-annotate/libtest24-drop-fns-2.so.abi: Likewise. * tests/data/test-annotate/libtest24-drop-fns.so.abi: Likewise. * tests/data/test-annotate/test0.abi: Likewise. * tests/data/test-annotate/test1.abi: Likewise. * tests/data/test-annotate/test10-pr18818-gcc.so.abi: Likewise. * tests/data/test-annotate/test11-pr18828.so.abi: Likewise. * tests/data/test-annotate/test12-pr18844.so.abi: Likewise. * tests/data/test-annotate/test13-pr18894.so.abi: Likewise. * tests/data/test-annotate/test14-pr18893.so.abi: Likewise. * tests/data/test-annotate/test15-pr18892.so.abi: Likewise. * tests/data/test-annotate/test16-pr18904.so.abi: Likewise. * tests/data/test-annotate/test17-pr19027.so.abi: Likewise. * tests/data/test-annotate/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: Likewise. * tests/data/test-annotate/test19-pr19023-libtcmalloc_and_profiler.so.abi: Likewise. * tests/data/test-annotate/test2.so.abi: Likewise. * tests/data/test-annotate/test20-pr19025-libvtkParallelCore-6.1.so.abi: Likewise. * tests/data/test-annotate/test21-pr19092.so.abi: Likewise. * tests/data/test-annotate/test22-pr19097-libstdc++.so.6.0.17.so.abi: Likewise. * tests/data/test-annotate/test3.so.abi: Likewise. * tests/data/test-annotate/test4.so.abi: Likewise. * tests/data/test-annotate/test5.o.abi: Likewise. * tests/data/test-annotate/test6.so.abi: Likewise. * tests/data/test-annotate/test7.so.abi: Likewise. * tests/data/test-annotate/test8-qualified-this-pointer.so.abi: Likewise. * tests/data/test-annotate/test9-pr18818-clang.so.abi: Likewise. * tests/test-annotate.cc: New test for ABIXML annotations. * tools/abidiff.cc: Add the new option '--no-corpus-path'. * tools/abidw.cc: Likewise. Also add the '--annotate' option. reviews round 1 2017-01-20 Dodji Seketeli Fix test-diff-pkg after commit 2dcc606 * tests/test-diff-pkg.cc (in_out_specs): Fix paths to spice-server packages. 2017-01-20 Dodji Seketeli Add --harmless option to abipkgdiff * doc/manuals/abidiff.rst: Fix a typo. * doc/manuals/abipkgdiff.rst: Document the --harmless option. * tools/abipkgdiff.cc: Update copyright year. (options::show_harmless_changes): Add new data member. (options::options): Initialize the new data member. (display_usage): Add a help string for the new --harmless option. (parse_command_line): Parse the new --harmless option. (set_diff_context_from_opts): Configure the diff context accordingly, if the user provided the --harmless option. 2017-01-20 Dodji Seketeli Fix suppression category propagation in diff node graph * include/abg-comparison.h (diff::get_class_of_equiv_category): Declare new member function. * src/abg-comparison.cc: Update copyright year. (diff::get_class_of_equiv_category): Define new member function. (suppression_categorization_visitor::visit_end): When considering children nodes category for propagation, consider the category of the class of equivalence of children nodes. * spice-debuginfo-0.12.4-19.el7.x86_64.rpm: New input test package. * spice-debuginfo-0.12.8-1.el7.x86_64.rpm: Likewise. * spice-server-0.12.4-19.el7.x86_64.rpm: Likewise. * spice-server-0.12.8-1.el7.x86_64.rpm: Likewise. * spice-server-devel-0.12.4-19.el7.x86_64.rpm: Likewise. * spice-server-devel-0.12.8-1.el7.x86_64.rpm: Likewise. * spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-0.txt: New reference test output. * spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-1.txt: Likewise. * spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-2.txt: Likewise. * tests/data/Makefile.am: Add the new test material above to source distribution. * tests/test-diff-pkg.cc (in_out_specs): Add the new test inputs to the list of packages to test. 2017-01-18 Dodji Seketeli Bug 21058 - abipkgdiff wrongly drops non-public types * doc/manuals/abidiff.rst (--dont-drop-private-types): Remove documentation. (--drop-private-types): Document this new option. * src/abg-tools-utils.cc: Update copyright notice (handle_fts_entry): On the generated suppression specification, do not set the flag to drop matched types. Also, don't match types defined in files which patch start with "/usr/include/". * tools/abidiff.cc (options::options): Initialize the drop_private_types data member to false. (display_usage): Remove usage string for --dont-drop-private-types. Add a new one for --drop-private-types. (parse_command_line): Don't part --dont-drop-private-types, rather, parse --drop-private-types. (set_suppressions): When the suppression for private types is generated, if --drop-private-types was provided, then instruct the suppression to drop matched types. * tools/abipkgdiff.cc (options::drop_private_types): New option. (options::options): Initialize the new drop_private_types data member to false. (display_usage): Add a usage string for --drop-private-types. (parse_command_line): Parse the new --drop-private-types option. (maybe_create_private_types_suppressions): Don't take just a package, but a package_descriptor because the latter carries the options. So when the user used the --drop-private-types option, make the generated private types suppression to drop matched types. * tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-1.txt: Adjust. * tests/test-diff-suppr.cc (in_out_specs): Likewise. 2017-01-18 Dodji Seketeli Fix some include logic in abg-suppression.cc * src/abg-suppression.cc: Update copyright notice. Fix include files logic. 2017-01-16 Dodji Seketeli Support virtual member functions with vtable offset not yet set * include/abg-fwd.h (member_function_has_vtable_offset): Declare new function. (get_member_function_vtable_offset): Return a ssize_t, not a size_t. (set_member_function_vtable_offset): Take a ssize_t, not a size_t. * include/abg-ir.h (class_decl::virtual_mem_fn_map_type): Adjust the map typedef to make it take ssize_t as the type of the key. (mem_fn_context_rel::vtable_offset_in_bits_): Make this data member be of ssize_t type, not size_t. (mem_fn_context_rel::mem_fn_context_rel): Initialize the vtable_offset_in_bits_ data member to -1. * src/abg-ir.cc (member_function_has_vtable_offset): Define new function. (get_member_function_vtable_offset): Return a ssize_t, not a size_t. (set_member_function_vtable_offset): Take a ssize_t, not a size_t. * src/abg-dwarf-reader.cc (die_virtual_function_index): Take an int64_t& rather than a uint64_t&. (finish_member_function_reading): Don't set the vtable offset if it's -1. * src/abg-reader.cc (build_class_decl): Likewise. 2017-01-14 Dodji Seketeli [comparison engine] Don't crash when the context is null * src/abg-comparison.cc (RETURN_IF_BEING_REPORTED_OR_WAS_REPORTED_EARLIER): Guard against null context. (diff::is_filtered_out): Likewise. 2017-01-14 Dodji Seketeli [dwarf reader] Don't abort when trying to canonicalize a non-type * src/abg-dwarf-reader.cc (maybe_canonicalize_type): Don't abort when trying to canonicalize a decl. 2017-01-14 Dodji Seketeli [dwarf reader] properly separate function decls and types in lookup * src/abg-dwarf-reader.cc (read_context::associate_die_to_artifact_by_repr_internal): Choose the right type of representation depending on if we are associating a type or a decl. * tests/data/test-diff-filter/test31-pr18535-libstdc++-report-0.txt: Adjust. * tests/data/test-diff-filter/test31-pr18535-libstdc++-report-1.txt: Adjust. * tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: Adjust. * tests/data/test-read-dwarf/test11-pr18828.so.abi: Adjust. * tests/data/test-read-dwarf/test12-pr18844.so.abi: Adjust. * tests/data/test-read-dwarf/test13-pr18894.so.abi: Adjust. * tests/data/test-read-dwarf/test14-pr18893.so.abi: Adjust. * tests/data/test-read-dwarf/test15-pr18892.so.abi: Adjust. * tests/data/test-read-dwarf/test16-pr18904.so.abi: Adjust. * tests/data/test-read-dwarf/test17-pr19027.so.abi: Adjust. * tests/data/test-read-dwarf/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: Adjust. * tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi: Adjust. * tests/data/test-read-dwarf/test20-pr19025-libvtkParallelCore-6.1.so.abi: Adjust. * tests/data/test-read-dwarf/test21-pr19092.so.abi: Adjust. * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: Adjust. * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Adjust. 2017-01-14 Dodji Seketeli [dwarf reader] Allow updating and de-duplicating member functions * src/abg-dwarf-reader.cc (add_or_update_class_type): Register member functions for lookup by member function DIE representation. 2017-01-14 Dodji Seketeli [dwarf reader] Do not over de-duplicate function *definitions* * src/abg-dwarf-reader.cc (build_or_get_fn_decl_if_not_suppressed): Do try to de-duplicate a function if it's to be completed. 2017-01-13 Dodji Seketeli [dwarf reader] Fix pretty printing static methods from DWARF * src/abg-dwarf-reader.cc (die_return_and_parm_names_from_fn_type_die): Take a new 'is_static' parameter. (die_qualified_type_name, die_pretty_print_type): Adjust calling die_return_and_parm_names_from_fn_type_die. (die_function_signature): Likewise. Also, do not forget to print the first parameter for a static method. 2017-01-13 Dodji Seketeli Handle several virtual member functions having the same vtable offset * include/abg-ir.h (class_or_union::virtual_mem_fn_map_type): Define new typedef. (class_decl::get_virtual_mem_fns_map): Declare new accessor. * src/abg-ir.cc (class_decl::priv::virtual_mem_fns_map_): New data member. (class_decl::get_virtual_mem_fns_map): Define new accessor. (fixup_virtual_member_function): Populate the new virtual member functions map. (class_decl::on_canonical_type_set): Sort the virtual member function vectors stored in the new virtual member functions map. (class_decl::add_member_function): Call set_member_function_is_virtual *after* calling set_member_function_vtable_offset because the former updates the virtual function map, so it needs the vtable offset. * src/abg-dwarf-reader.cc (finish_member_function_reading): Likewise. * src/abg-reader.cc (build_class_decl): Likewise. 2017-01-13 Dodji Seketeli Speed up pretty representing (function) types * include/abg-ir.h (type_base::get_cached_pretty_representation): Declare new function. (function_type::get_cached_name): Likewise. * src/abg-ir.cc (get_method_type_name): Use the new type_base::get_cached_pretty_representation function. (type_base::priv::{internal_cached_repr_, cached_repr_}): Add new data members. (function_type::priv::{internal_cached_name_, cached_name_}): Likewise. (type_base::get_cached_pretty_representation): Define new function. (function_type::get_cached_name): Likewise. (type_base::get_canonical_type_for): Call type_base::get_cached_pretty_representation here, so the internal representation is cached right before canonicalization. (function_type::{mark_as_being_compared, unmark_as_being_compared, comparison_started}): Uset he new type_base::get_cached_name to speed up function type name retrieval. 2017-01-13 Dodji Seketeli Add missing deep comparison operators for {function, method}_decl_sptr * include/abg-ir.h (operator==): Declare two new overloads for function_decl_sptr an method_decl_sptr. * src/abg-ir.cc (operator==): Define two new overloads for function_decl_sptr an method_decl_sptr. 2017-01-16 Dodji Seketeli Fix performance regression while analyzing libjvm.so * include/abg-ir.h ({type_base, class_decl}::on_canonical_type_set): Declare new virtual member function. * src/abg-ir.cc (type_base::on_canonical_type_set): Define new virtual member function that does nothing. (class_decl::on_canonical_type_set): Define new virtual member function that sorts the virtual member functions of class_decl. (canonicalize): Invoke type_base::on_canonical_type_set when the canonical type is set. (fixup_virtual_member_function): Don't sort virtual member functions here. * src/abg-dwarf-reader.cc (finish_member_function_reading): Do not sort virtual member functions here. * tests/data/test-read-dwarf/test13-pr18894.so.abi: Adjust. * tests/data/test-read-dwarf/test14-pr18893.so.abi: Adjust. * tests/data/test-read-dwarf/test15-pr18892.so.abi: Adjust. * tests/data/test-read-dwarf/test21-pr19092.so.abi: Adjust. * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: Adjust. 2017-01-14 Dodji Seketeli Update copyright notice for abg-fwd.h, abg-ir.h and test-abidiff.cc * include/abg-fwd.h: Adjust copyright. * include/abg-ir.h: Likewise. * tests/test-abidiff.cc: Likewise. 2017-01-16 Dodji Seketeli Remove unused functions from abg-ir.cc * src/abg-ir.cc (convert_node_to_decl): Remove specializations for class_decl_sptr, type_base_sptr and var_decl_sptr. 2016-11-10 Dodji Seketeli Support Linux Kernel ABI whitelist files * include/abg-suppression.h (function_suppression::function_suppression): Make the declaration of the default constructor public. * src/abg-suppression-priv.h (function_suppression::priv::priv): Declare a default constructor. * src/abg-suppression.cc (function_suppression::function_suppression): Define default constructor. * include/abg-tools-utils.h (gen_suppr_spec_from_kernel_abi_whitelist): Declare new function. * src/abg-tools-utils.cc (gen_suppr_spec_from_kernel_abi_whitelist): Define new function. * tools/abidiff.cc (options::kernel_abi_whitelist_paths): (display_usage): Display a help string for the new --linux-kernel-abi-whitelist option. (parse_command_line): Parse the --linux-kernel-abi-whitelist from the command line. (maybe_check_suppression_files): Check the presence of the kernel abi whitelist files. (set_suppressions): Generate suppression specifications from the whitelist files. 2016-10-10 Dodji Seketeli Support Linux Kernel binaries * include/abg-dwarf-reader.h (create_read_context): Take a new flag to say if the context is to read an ELF binary in linux kernel mode. * src/abg-dwarf-reader.cc (typedef address_set_type) (address_set_sptr): New typedefs. (get_binary_load_address): The load address of the binary is the load address specified by the program header that is at the smallest offset; not by the program header that is at offset zero. (read_context::{ksymtab_section_, ksymtab_gpl_section_, linux_exported_fn_syms_, linux_exported_var_syms_, linux_exported_gpl_fn_syms_, linux_exported_gpl_var_syms_, load_in_linux_kernel_mode_}): New data members. (read_context::read_context): Initialize ksymtab_section_, ksymtab_gpl_section_ and load_in_linux_kernel_mode_. (read_context::{find_symbol_table_section, find_opd_section, lookup_elf_fn_symbol_from_address, lookup_elf_var_symbol_from_address, get_function_address, get_variable_address}): Make these const. (read_context::{find_ksymtab_section, find_ksymtab_gpl_section, lookup_elf_symbol_from_address, function_symbol_is_exported, variable_symbol_is_exported, linux_exported_fn_syms, create_or_get_linux_exported_fn_syms, linux_exported_var_syms, create_or_get_linux_exported_var_syms, linux_exported_gpl_fn_syms, linux_exported_gpl_var_syms, create_or_get_linux_exported_gpl_fn_syms, linux_exported_gpl_var_syms, create_or_get_linux_exported_gpl_var_syms, architecture_word_size, load_kernel_symbol_table, load_ksymtab_symbols, load_ksymtab_gpl_symbols, load_linux_specific_exported_symbol_maps, load_in_linux_kernel_mode}): New member functions. (read_context::read_int_from_array_of_bytes): Factorize this new member function out of ... (read_context::{lookup_ppc64_elf_fn_entry_point_address}): ... this. Make this function const too. (read_context::read_uint64_from_array_of_bytes): New function. Uses read_int_from_array_of_bytes above. (read_context::{fun_entry_addr_sym_map_sptr}): Try to load symbol maps only when it's necessary. (read_context::elf_architecture_is_big_endian): Fix logic. (read_context::{var_addr_sym_map}): Express the const variant in terms of the non-const one. In the non-const one, load the map only when necessary. (read_context::load_symbol_maps_from_symtab_section): Renamed load_symbol_maps into this. (read_context::is_linux_kernel_binary): Define new member function. (read_context::{function, variable}_symbol_is_exported): If we are not prevented from considering loading in linux kernel mode, then just looking at a linux kernel binary makes us consider the special kernel sections. (read_debug_info_into_corpus): Likewise. (build_ir_node_from_die): Take a new flag that says if the ir node is a declaration required by another concrete IR node. (enum read_context::kernel_symbol_table_kind): New enum. (read_context::load_symbol_maps): Support loading linux kernel specific sections too. (build_var_decl): Use the new read_context::variable_symbol_is_exported. (function_is_suppressed): Suppress non-member functions or variables that are not declarations and that have no symbol. (variable_is_suppressed, build_var_decl_if_not_suppressed): Take a new flag that says if the variable is a declaration required by a concrete variable. If non member variable that is a declaration is not the specification of another concrete variable, then it's suppressed. (add_fn_symbols_to_map, add_var_symbols_to_map): New function definitions. (read_debug_info_into_corpus): If we are reading linux kernel or linux kernel modules, only set explicitely exported symbols (in the linux kernel binary sense) as exported function or variable symbols. (create_read_context): Take a new flag to say if the context is to read an ELF binary in linux kernel mode. * tools/abidiff.cc (options::options): Initialize options::linux_kernel_mode to true. (display_usage): Display usage of the --no-linux-kernel-mode option. (parse_command_line): Parse the --no-linux-kernel-mode option. * tools/abidw.cc (options::options): Initialize options::linux_kernel_mode to true. (display_usage): Display usage of --no-linux-kernel-mode option. (parse_command_line): Parse the --no-linux-kernel-mode option. * doc/manuals/abidiff.rst: Document the new --no-linux-kernel-mode options. * doc/manuals/abidw.rst: Likewise. * tests/data/test-diff-dwarf-abixml/test0-pr19026-libvtkIOSQL-6.1.so.1.abi: Adjust. * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Adjust. * tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: Adjust. * tests/data/test-read-dwarf/test11-pr18828.so.abi: Adjust. * tests/data/test-read-dwarf/test12-pr18844.so.abi: Likewise. * tests/data/test-read-dwarf/test13-pr18894.so.abi: Likewise. * tests/data/test-read-dwarf/test14-pr18893.so.abi: Likewise. * tests/data/test-read-dwarf/test15-pr18892.so.abi: Likewise. * tests/data/test-read-dwarf/test16-pr18904.so.abi: Likewise. * tests/data/test-read-dwarf/test17-pr19027.so.abi: Likewise. * tests/data/test-read-dwarf/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: Likewise. * tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi: Likewise. * tests/data/test-read-dwarf/test20-pr19025-libvtkParallelCore-6.1.so.abi: Likewise. * tests/data/test-read-dwarf/test21-pr19092.so.abi: Likewise. * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: Likewise. * tests/data/test-read-dwarf/libtest23.so.abi: Adjust. * tests/data/test-read-dwarf/libtest24-drop-fns-2.so.abi: Adjust. * tests/data/test-read-dwarf/libtest24-drop-fns.so.abi: Adjust. 2017-01-06 Dodji Seketeli Add debug routines to dump locations to a stream * src/abg-writer.cc (dump_location): Define new function and one overload. (dump_decl_location): Re-write in terms of the new dump_location. 2017-01-06 Dodji Seketeli Better de-duplicate classes, unions, enums in non-odr contexts * src/abg-dwarf-reader.cc (build_enum_type) (add_or_update_class_type, add_or_update_union_type): When the ODR is not relevant, use the location of the type to detect if two enum, class or union types of the same name actually represent the same type. 2017-01-06 Dodji Seketeli Adjust some reference outputs of the test-read-dwarf test harness * tests/data/test-read-dwarf/test12-pr18844.so.abi: Adjust. * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Adjust. 2017-01-04 Ondrej Oprala Bug 18754 - Add the "--no-added-syms" option to abidiff * doc/manuals/abidiff.rst: Document the new --no-added-syms option. * tools/abidiff.cc (struct options): Add show_added_syms and set it to true by default. (display_usage): Document the new options --no-added-syms. If this is the only suppression option specified, it is equivalent to specifying --show_{changed,deleted}_{fns,vars} as arguments to abidiff. If any of those options are specified before --no-added-syms, then it has no effect. (parse_command_line): Parse the new option and set show_added_{fns,vars,syms} and show_all_{fns,vars} to false if --no-added-syms is specified. * tests/test-diff-filter.cc: Add a test for the new option. * tests/data/test-diff-filter/test35-pr18754-no-added-syms-report-0.txt: Reference results for the new test. * tests/data/test-diff-filter/test35-pr18754-no-added-syms-report-1.txt: Likewise. * tests/data/Makefile.am: Add the above test files to the list of test data. 2017-01-05 Dodji Seketeli Update copyright year on a bunch of files * include/abg-corpus.h: Update copyright year to 2017. * src/abg-dwarf-reader.cc: Likewise. * src/abg-ir.cc: Likewise. * src/abg-reader.cc: Likewise. * src/abg-writer.cc: Likewise. * tools/abicompat.cc: Likewise. * tools/abidw.cc: Likewise. 2017-01-05 Dodji Seketeli [apidoc] Allow brief description at the top of class description pages * doc/api/libabigail.doxy: Don't disable "brief member desc". 2017-01-05 Dodji Seketeli Misc style fixes * include/abg-corpus.h: Remove corpus_sptr typedef. It's in abg-fwd.h now. * src/abg-ir.cc: Remove some unnecessary vertical space. * src/abg-reader.cc (build_function_decl): Cleanup some asserts. * src/abg-writer.cc (write_function_type): Each the inspection of the type id from within the debugger. 2017-01-05 Dodji Seketeli Misc comments and apidoc fixes * src/abg-dwarf-reader.cc (lookup_symbol_from_gnu_hash_tab): Fix typo in comment. * tools/abicompat.cc (perform_compat_check_in_weak_mode): Better comments. * tools/abidw.cc (dislay_usage): Fix white spaces. Conflicts: tools/abidw.cc 2017-01-05 Dodji Seketeli Speedup set_member_is_static * src/abg-ir.cc (set_member_is_static): When comparing data members, consider only their names. 2017-01-05 Dodji Seketeli Avoid unnecessary updates to type lookup maps * src/abg-ir.cc (class_or_union::get_is_declaration_only): Try to update the type maps only when a declaration-only class type is now defined. 2017-01-05 Dodji Seketeli Update tests/data/test-read-dwarf/*.abi files * tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: Adjust. * tests/data/test-read-dwarf/test11-pr18828.so.abi: Likewise. * tests/data/test-read-dwarf/test12-pr18844.so.abi: Likewise. * tests/data/test-read-dwarf/test13-pr18894.so.abi: Likewise. * tests/data/test-read-dwarf/test14-pr18893.so.abi: Likewise. * tests/data/test-read-dwarf/test15-pr18892.so.abi: Likewise. * tests/data/test-read-dwarf/test16-pr18904.so.abi: Likewise. * tests/data/test-read-dwarf/test17-pr19027.so.abi: Likewise. * tests/data/test-read-dwarf/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: Likewise. * tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi: Likewise. * tests/data/test-read-dwarf/test20-pr19025-libvtkParallelCore-6.1.so.abi: Likewise. * tests/data/test-read-dwarf/test21-pr19092.so.abi: Likewise. * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: Likewise. * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Likewise. 2017-01-05 Dodji Seketeli Update tests/data/test-diff-dwarf-abixml/test0-pr19026-libvtkIOSQL-6.1.so.1.abi * tests/data/test-diff-dwarf-abixml/test0-pr19026-libvtkIOSQL-6.1.so.1.abi: Update. 2017-01-05 Dodji Seketeli [abixml writer] Make sure all function types are emitted * src/abg-writer.cc (write_translation_unit): Fix logic to avoid forgetting referenced function types. 2017-01-05 Dodji Seketeli [abixml writer] Fix comparison of pointer to types * src/abg-writer.cc (type_ptr_comp::operator()): Do not add an empty type id string to the type -> type id map when the entry for a given type is empty. 2017-01-05 Dodji Seketeli [dwarf-reader] Don't early canonicalize function types * src/abg-dwarf-reader.cc (maybe_canonicalize_type): Late-canonicalize function types. signed-off-by: Dodji Seketeli 2017-01-05 Dodji Seketeli Fix qualified name caching for some types * src/abg-ir.cc ({qualified, pointer, array}_type_def::get_qualified_name): Don't cache internal and non-internal qualified name when the type is not canonicalized. 2017-01-04 Dodji Seketeli Cleanup ODR-based type canonicalization optimization gating logic * src/abg-ir.cc (type_base::get_canonical_type_for): Make it clear that the ODR-based optimization is allowed only on C++ ABI corpora. 2017-01-04 Dodji Seketeli Fix a typo in method name computation * src/abg-ir.cc (get_method_type_name): Really return the method name. 2017-01-05 Dodji Seketeli 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 * 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: Adjust. 2017-01-05 Dodji Seketeli Update tests/data/test-read-write/test27.xml * tests/data/test-read-write/test27.xml: Adjust. 2017-01-04 Dodji Seketeli [dwarf-reader] Handle per translation-unit type de-duplication * src/abg-dwarf-reader.cc (read_context::per_tu_name_artefacts_map_): New data member. (read_context::clear_per_translation_unit_data): Clear the new read_context::per_tu_name_artefacts_map_. (read_context::associate_die_to_decl): Take a flag to say if we should associate a DIE to its representation and another one to say if the association should be done per-tu or per-corpus. (read_context::lookup_{type_artifact, artifact}_from_die): Update apidoc. (read_context::lookup_artifact_from_die_representation): Likewise. (read_context::{associate_die_to_artifact_by_repr, associate_die_to_artifact_by_repr_internal, associate_die_to_type}): Take a flag to say if the associating should be done on a per-tu basis. (read_context::lookup_{type_artifact, artifact}_from_die_per_tu): New member functions. (read_context::{lookup_artifact_from_per_tu_die_representation, odr_is_relevant}): Likewise. (build_enum_type, add_or_update_class_type) (add_or_update_union_type): If ODR is not relevant, do not perform per-corpus de-duplication. (build_pointer_type_def, build_typedef_type): Do not associate the type to its representation as these kinds of typs are not de-duplicated. (build_function_type): If ODR is not relevant, perform per-tu de-duplication. When ODR is relevant, per-corpus de-duplication is performed. (build_or_get_fn_decl_if_not_suppressed): Function decls are always de-duplicated per-corpus. (build_ir_node_from_die): For data members, do not update the die representation map as data members are not de-duplicated. Do not do it for function decls either. [1]: https://en.wikipedia.org/wiki/One_Definition_Rule 2017-01-02 Dodji Seketeli Handle per translation unit and per corpus types maps * include/abg-fwd.h (lookup_type_in_corpus): Remove. This is to be replaced by the new lookup_type below. (lookup_{basic, class, union, enum, typedef, qualified, pointer, reference, array, function, class_or_typedef, class_typedef_or_enum}_type): (lookup_class_type_through_scopes, lookup_type) (lookup_type_through_scopes, lookup_or_synthesize_fn_type) * src/abg-ir-priv.h (struct translation_unit::priv): Move this private type here, from abg-ir.h. (synthesize_type_from_translation_unit): Declare new functions. * include/abg-ir.h (class type_maps): Define new type. (translation_unit::get_function_types): Remove. (translation_unit::get_types): Now return a type_maps. (translation_unit::get_live_fn_types): Declare new type. (class decl_base): Make canonicalize be a friend of this class. * src/abg-ir.cc (struct translation_unit::priv): Move this to abg-ir-priv.h (struct type_maps::priv): Define new type. (type_maps::{basic, class, union, enum, typedef, qualified, pointer, reference, array, function}_types): Define new accessors. (translation_unit::bind_function_type_life_time): Adjust. (translation_unit::get_function_types): Remove accessor. (translation_unit::get_types, get_live_fn_types): Define new accessors. (lookup_type_in_translation_unit) (lookup_class_type_in_translation_unit) (lookup_function_type_in_translation_unit) (synthesize_type_from_translation_unit) (synthesize_function_type_from_translation_unit) (lookup_class_type_in_translation_unit) Remove function definitions. (lookup_type_in_map): Define function template. (lookup_{basic, class, union, typedef, class_or_typedef, class_typedef_or_enum, qualified, pointer, reference, array, function}_type): Define functions. (lookup_function_type, lookup_type_through_scopes) (lookup_class_type_through_scopes) (lookup_basic_type_through_translation_units) (lookup_union_type_through_translation_units) (lookup_enum_type_through_translation_units) (lookup_class_type_through_translation_units) (lookup_typedef_type_through_translation_units) (lookup_qualified_type_through_translation_units) (lookup_pointer_type_through_translation_units) (lookup_reference_type_through_translation_units) (lookup_array_type_through_translation_units) (lookup_function_type_through_translation_units) (lookup_type_through_translation_units) (lookup_or_synthesize_fn_type, lookup_type): Likewise. (maybe_update_types_lookup_map) (maybe_update_types_lookup_map) (maybe_update_types_lookup_map): Define function template, specilizations and functions. (synthesize_type_from_translation_unit) (synthesize_function_type_from_translation_unit): Define functions. * include/abg-corpus.h (corpus::get_types): Declare new accessor. * src/abg-corpus.cc (corpus::priv::get_types): Define new accessor. (corpus::get_types): Likewise. (lookup_type_in_corpus, lookup_class_type_in_corpus) (lookup_type_in_corpus, lookup_function_type_in_corpus) (maybe_update_types_lookup_map) (maybe_update_types_lookup_map) (maybe_update_types_lookup_map): Remove. (lookup_{basic, class, union, enum, typedef, qualified, pointer, reference, array, function, class_or_typedef, class_typedef_or_enum}_type): Likewise. * src/abg-corpus-priv.h (corpus::priv::{basic, class, union, typedef, qualified, pointer, reference, array, function}_types): Remove these data members. (corpus::priv::get_scopes): Remove member function. (corpus::priv::get_{basic, class, union, enum, typedef, qualified, pointer, reference, array, function}_types): Remove member function declarations. (corpus::priv::types_): New data member. (corpus::priv::get_types): Declare new member function. (lookup_{basic, class, enum, typedef, class_or_typedef, qualified, pointer, reference, array, function}_type): Declare new functions. * src/abg-dwarf-reader.cc (read_context::resolve_declaration_only_classes) (build_translation_unit_and_add_to_ir): Adjust use of lookup_class_type. * src/abg-reader.cc (read_context::type_is_from_translation_unit): Adjust to the use of lookup_function_type_in_translation_unit that got renamed into lookup_function_type. * src/abg-writer.cc (type_ptr_cmp::operator()): New operator implementation. (read_context::sort_type): Add new overloads. (write_translation_unit): Adjust to get the function types from the new translation_unit::get_live_fn_types and sort them. * tools/abicompat.cc (perform_compat_check_in_weak_mode): Adjust to use the new lookup_or_synthesize_fn_type, in lieu of lookup_function_type_in_corpus. Adjust to use lookup_type in lieu of lookup_type_in_corpus. 2016-12-21 Dodji Seketeli Make abg-fwd.h use *_sptr typedefs * include/abg-ir.h: Move convience typedef declarations and some necessary forward declarations to ... * include/abg-fwd.h: ... here. (is_enum_type, is_var_decl): Take a pointer to type_or_decl_base. (lookup_type_in_scope): Return a type_base_sptr. (lookup_type_through_scopes): Introduce this to later replace the overload of lookup_type_in_translation_unit that takes a list of strings. (lookup_type_in_scope): Return a type_base_sptr, not a decl_base_sptr. * src/abg-ir.cc (lookup_type_in_scope, lookup_node_in_scope) (lookup_var_decl_in_scope): Adjust. (is_enum_type, is_var_decl): Take a pointer to type_or_decl_base. (lookup_node_in_scope): Return a type_or_decl_base_sptr. (lookup_type_in_scope): Return a type_base_sptr. (lookup_node_in_translation_unit): Return a type_or_decl_base_sptr. (lookup_type_through_scopes): Replace lookup_type_in_translation_unit. 2016-12-18 Chenxiong Qi Fix wrong variable name * tools/fedabipkgdiff: (diff_latest_rpms_based_on_distros): Fix wrong variable name distro. 2016-12-18 Chenxiong Qi Warn properly when cannot find peer RPM * tools/fedabipkgdiff: (RPMCollection.get_peer_rpm): Return None when cannot find peer RPM due to nonexistent arch. 2016-12-19 Chenxiong Qi Read Koji config via Koji API * tools/fedabipkgdiff: Read DEFAULT_KOJI_TOPURL and DEFAULT_KOJI_SERVER from Koji config via Koji API read_config. (build_commandline_args_parser): --topdir is renamed to --topurl. * doc/manuals/fedabipkgdiff.rst: Rename --topdir to --topurl. 2016-12-19 Chenxiong Qi Follow moved packages when download * tools/fedabipkgdiff: (download_rpm) Add --location to curl CLI. 2016-12-13 Chenxiong Qi More document for local RPMs comparison * doc/manuals/fedabipkgdiff.rst: Add more document for local RPMs comparison. Also fixed a typo. 2016-12-15 Ondrej Oprala Properly report missing files for abipkgdiff * tools/abipkgdiff.cc: (class options): Add the "nonexistent_file" flag (parse_command_line): Check if the files given exist. (main): Check the nonexistent_file flag. If any of the input files don't exist, report it and exit. Also, for present and future test uniformity, only show the base names of the packages when using their names in error output. * tests/test-diff-pkg.cc: Add a new regression test. * tests/data/test-diff-pkg/test-nonexistent-report-0.txt: The expected output of the above regression test. * tests/data/Makefile.am: Add the above file to the list. 2016-12-15 Dodji Seketeli Misc style cleanup * src/abg-dwarf-reader.cc (build_function_type): Remove unnecessary new line. 2016-12-15 Dodji Seketeli make is_anonymous_type work for unions and classes * src/abg-ir.cc (is_anonymous_type): Make this work for class or union types, no only classes. 2016-12-15 Dodji Seketeli Naming typedefs of classes are not read properly from abixml * src/abg-reader.cc (build_class_decl): Use read_context::build_or_get_type_decl rather than read_context::get_type_decl to build the naming typedef referred to by the class being built. Move the handling of naming typedefs after the class is marked as WIP and keyed. 2016-12-15 Dodji Seketeli Don't early-canonicalize function types when reading abixml * src/abg-reader.cc (read_context::maybe_canonicalize_type): late-canonicalize function types too. 2016-12-12 Ondrej Oprala Check --enable-rpm dependencies more rigorously * configure.ac: Check if both rpm2cpio and cpio exist on the system. If not, disable the option and fail the configuration if --enable-rpm was specified explicitly. 2016-12-12 Ondrej Oprala abipkgdiff doesn't mention --no-default-suppression in help * tools/abipkgdiff.cc (display_usage): Mention --no-default-suppression as one of the options. 2016-12-12 Ondrej Oprala Fix a few remarks made by cppcheck * src/abg-comparison.cc (types_or_decls_equal::operator()): Pass arguments by reference. (class_diff::ensure_lookup_tables_populated): Expression !A || (A && B) can be reduced to !A || B. * src/abg-suppression.cc (suppression_matches_type_no_name): Likewise. 2016-12-09 Ondrej Oprala Bug 19272 - abipkgdiff doesn't report arch change * src/abg-comparison.cc (corpus_diff::has_incompatible_changes): The architecture change into account. (corpus_diff::has_net_changes): Take architecture and soname changes into account. * tools/abicompat.cc (perform_compat_check_in_normal_mode): Use corpus_diff::{has_net_changes, has_incompatible_changes}. * tests/data/test-diff-pkg/dbus-glib-0.104-3.fc23.armv7hl.rpm: New test input. * tests/data/test-diff-pkg/dbus-glib-0.104-3.fc23.x86_64--dbus-glib-0.104-3.fc23.armv7hl-report-0.txt: New test reference output. * tests/data/Makefile.am: Add the new test material above to source distribution. * tests/test-diff-pkg.cc (in_out_spec): Compare the new package above against an x86_64 one. 2016-08-11 Chenxiong Qi Bug 20380 - Compare two local RPMs * configure.ac: add dependent mimetype module. * doc/manuals/fedabipkgdiff.rst: Update to add document for the new use case of comparing two local RPMs. * tests/data/Makefile.am: Include new RPMs for tests. * tests/data/test-fedabipkgdiff/dbus-glib/dbus-glib-0.100.2-2.fc20.x86_64.rpm: New RPM for running test. * tests/data/test-fedabipkgdiff/dbus-glib/dbus-glib-0.106-1.fc23.x86_64.rpm: Likewise. * tests/data/test-fedabipkgdiff/nss-util/nss-util-3.12.6-1.fc14.x86_64.rpm: Likewise. * tests/data/test-fedabipkgdiff/nss-util/nss-util-3.24.0-2.0.fc25.x86_64.rpm: Likewise. * tests/data/test-fedabipkgdiff/nss-util/nss-util-devel-3.24.0-2.0.fc25.x86_64.rpm: Likewise. * tests/data/test-fedabipkgdiff/test4-glib-0.100.2-2.fc20.x86_64.rpm-glib-0.106-1.fc23.x86_64.rpm-report-0.txt: Rename filename by adding .rpm extension. * tests/data/test-fedabipkgdiff/test5-same-dir-dbus-glib-0.100.2-2.fc20.x86_64--dbus-glib-0.106-1.fc23.x86_64-report-0.txt: New reference output for testing comparing local RPMs. * tests/data/test-fedabipkgdiff/test6-missing-devel-debuginfo-nss-util-3.12.6-1.fc14.x86_64--nss-util-3.24.0-2.0.fc25.x86_64-report-0.txt: New reference output for testing comparison without non-existent debuginfo or development package. * tests/runtestfedabipkgdiff.py.in (FEDABIPKGDIFF_TEST_SPECS): Rename filename for test4. Add two new test cases. (run_fedabipkgdiff_tests): Remove semicolon and trailing whitespaces. (main): Likewise. (ensure_output_dir_created): Likewise. * tools/fedabipkgdiff: Require some new modules. Fix of return code. (PkgInfo): Renamed to ComparisonHalf. (match_nvr): New method to determine if a string matches format of N-V-R. (match_nvra): New method to determine if a string matches format of N-V-R.A. (is_rpm_file): New method to guess if a file is a RPM file. (RPM.is_peer): New method to determine if current RPM is a peer of another. (RPM.filename): Use Koji module API to construct the filename. (RPM.nvra): Get nvra from filename instead of constructing manually that is duplicated with Koji module API. (RPMCollection): New class to represent a set of RPMs. (generate_pkg_info_pair_for_abipkgdiff): New method working as a generator to yeild comparison halves for running abipkgdiff. (Brew.getRPM): Fix string format with incorrect argument. (Brew.select_rpms_from_a_build): Return instance of RPMCollection. (abipkgdiff): If there is no debuginfo or development package, just ignore it and leave a warning. If --error-on-warning is specified, raise an exception instead. Arguments are modified to represent the new name ComparisonHalf, and relative docstring is also updated. (magic_construct): Removed. (run_abipkgdiff): Rewrite. (make_rpms_usable_for_abipkgdiff): Removed. (diff_local_rpm_with_latest_rpm_from_koji): Rewrite by using RPMCollection. (diff_latest_rpms_based_on_distros): Likewise. (diff_two_nvras_from_koji): Likewise. (diff_from_two_rpm_files): New method to compare two local RPMs. (build_commandline_args_parser): Add new option --error-on-warning. (main): Add support to compare local RPMs. 2016-12-12 Dodji Seketeli Fix template_decl::hash::operator() * src/abg-hash.cc (template_decl::hash::operator()): Combine the contribution of the qualified name to the contribution of the type name to the hash. 2016-12-09 Dodji Seketeli Fix aborting when reading .foo symbols from a ppc64 binary * abg-dwarf-reader.cc (read_context::find_opd_section): Fix comment. (read_context::load_symbol_maps): If for a given function entry point (that we got by looking at the ".opd" section for a given function pointer value) we already had an entry in the function_entry_address -> symbol, maybe it means that the previous entry that we had was from an entry in the symbol table which value was directly the entry point address of a function. In that case, if the name of the symbol is "foo", the name of the symbol which value is directly the entry point address is ".foo". What we do in this case is that we just keep the reference to the "foo" symbol in the function_entry_address -> symbol map. (read_context::address_is_in_opd_section): Define new member function. * tests/data/test-diff-pkg/gmp-4.3.1-10.el6.ppc64.rpm: New test input. * tests/data/test-diff-pkg/gmp-4.3.1-7.el6_2.2.ppc64.rpm: Likewise. * tests/data/test-diff-pkg/gmp-debuginfo-4.3.1-10.el6.ppc64.rpm: Likewise. * tests/data/test-diff-pkg/gmp-debuginfo-4.3.1-7.el6_2.2.ppc64.rpm: Likewise. * tests/data/test-diff-pkg/gmp-4.3.1-7.el6_2.2.ppc64--gmp-4.3.1-10.el6.ppc64-report-0.txt: New test reference output. * tests/data/Makefile.am: Add the new test input and reference output to source distribution. * tests/test-diff-pkg.cc (in_out_specs): Add the new test inputs and reference output to the set of inputs that are compared. 2016-12-05 Dodji Seketeli Bug 20927 - Segfault when $HOME is not set * src/abg-tools-utils.cc (get_default_user_suppression_file_path): Handle the case where the HOME environment variable is not set. * tools/abipkgdiff.cc (package::extracted_packages_parent_dir): Likewise. When $HOME is empty set then use $TMPDIR. If it's empty too then use "/tmp". 2016-12-02 Dodji Seketeli Bug 20887 - Show relative change of offsets * doc/manuals/abidiff.rst: Document the new --no-show-relative-offset-changes. * doc/manuals/abipkgdiff.rst: Likewise. * include/abg-comparison.h (diff_context::show_relative_offset_changes): New accessors. * include/abg-ir.h ({set,get}_data_member_offset): Return uint64_t instead of the less portable size_t. * src/abg-comparison.cc (diff_context::priv::show_relative_offset_changes_): New data member. (dif_context::show_relative_offset_changes): Define accessor. (maybe_show_relative_offset_change): Define new function. (represent): In the overload for var_diff, call the new maybe_show_relative_offset_change. (report_size_and_alignment_changes): If the size of the type didn't change then say it now. * src/abg-ir.cc (set_data_member_offset, get_data_member_offset): Take or return a uint64_t instead of a size_t. * tools/abidiff.cc (options::show_relative_offset_changes): New data member. (options::options): Initialize it. (display_usage): Display help string for the new --no-show-relative-offset-changes. (parse_command_line): Parse the new --no-show-relative-offset-changes options. (set_diff_context_from_opts): Set the "show-relative-offset-changes" flag according to the new option.n * tools/abipkgdiff.cc (options::show_relative_offset_changes): New data member. (options::options): Initialize it. (display_usage): Add help string for the new --no-show-relative-offset-changes option. (set_diff_context_from_opts): Set the "show-relative-offset-changes" flag according to the new option. (parse_command_line): Parse the new command line option. * tests/data/test-diff-dwarf/test40-report-0.txt: Add new reference output. * tests/data/test-diff-dwarf/test40-v0.c: Source code of the first test binary. * tests/data/test-diff-dwarf/test40-v1.c: Source code of the second test binay. * tests/data/test-diff-dwarf/libtest40-v0.so: New first test binary. * tests/data/test-diff-dwarf/libtest40-v1.so: New second test binary. * tests/test-diff-dwarf.cc (in_out_spec): Add the new test binaries above to the set of binaries that are compared. * tests/data/Makefile.am: Add the new test material to source distribution. * tests/data/test-abicompat/test7-fn-changed-report-0.txt: Adjust. * tests/data/test-abidiff/test-PR18791-report0.txt: Likewise. * tests/data/test-abidiff/test-enum0-report.txt: Likewise. * tests/data/test-abidiff/test-enum1-report.txt: Likewise. * tests/data/test-abidiff/test-struct1-report.txt: Likewise. * tests/data/test-diff-dwarf/test0-report.txt: Likewise. * tests/data/test-diff-dwarf/test1-report.txt: Likewise. * tests/data/test-diff-dwarf/test10-report.txt: Likewise. * tests/data/test-diff-dwarf/test11-report.txt: Likewise. * tests/data/test-diff-dwarf/test13-report.txt: Likewise. * tests/data/test-diff-dwarf/test15-enum-report.txt: Likewise. * tests/data/test-diff-dwarf/test27-local-base-diff-report.txt: Likewise. * tests/data/test-diff-dwarf/test32-fnptr-changes-report-0.txt: Likewise. * tests/data/test-diff-dwarf/test33-fnref-changes-report-0.txt: Likewise. * tests/data/test-diff-dwarf/test38-union-report-0.txt: Likewise. * tests/data/test-diff-dwarf/test4-report.txt: Likewise. * tests/data/test-diff-dwarf/test5-report.txt: Likewise. * tests/data/test-diff-dwarf/test6-report.txt: Likewise. * tests/data/test-diff-dwarf/test8-report.txt: Likewise. * tests/data/test-diff-filter/test0-report.txt: Likewise. * tests/data/test-diff-filter/test01-report.txt: Likewise. * tests/data/test-diff-filter/test1-report.txt: Likewise. * tests/data/test-diff-filter/test13-report.txt: Likewise. * tests/data/test-diff-filter/test16-report-2.txt: Likewise. * tests/data/test-diff-filter/test16-report.txt: Likewise. * tests/data/test-diff-filter/test17-0-report.txt: Likewise. * tests/data/test-diff-filter/test17-1-report.txt: Likewise. * tests/data/test-diff-filter/test18-report.txt: Likewise. * tests/data/test-diff-filter/test19-enum-report-1.txt: Likewise. * tests/data/test-diff-filter/test2-report.txt: Likewise. * tests/data/test-diff-filter/test23-redundant-fn-parm-change-report-0.txt: Likewise. * tests/data/test-diff-filter/test24-compatible-vars-report-1.txt: Likewise. * tests/data/test-diff-filter/test25-cyclic-type-report-0.txt: Likewise. * tests/data/test-diff-filter/test25-cyclic-type-report-1.txt: Likewise. * tests/data/test-diff-filter/test26-qualified-redundant-node-report-0.t: Likewise.xt * tests/data/test-diff-filter/test26-qualified-redundant-node-report-1.txt: Likewise. * tests/data/test-diff-filter/test27-redundant-and-filtered-children-nodes-report-1.txt: Likewise. * tests/data/test-diff-filter/test27-redundant-and-filtered-children-nodes-report-2.txt: Likewise. * tests/data/test-diff-filter/test29-finer-redundancy-marking-report-0.txt: Likewise. * tests/data/test-diff-filter/test3-report.txt: Likewise. * tests/data/test-diff-filter/test30-pr18904-rvalueref-report0.txt: Likewise. * tests/data/test-diff-filter/test30-pr18904-rvalueref-report1.txt: Likewise. * tests/data/test-diff-filter/test31-pr18535-libstdc++-report-0.txt: Likewise. * tests/data/test-diff-filter/test31-pr18535-libstdc++-report-1.txt: Likewise. * 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: Likewise. * tests/data/test-diff-pkg/libsigc++-2.0-0c2a_2.4.0-1_amd64--libsigc++-2.0-0v5_2.4.1-1ubuntu2_amd64-report-0.txt: Likewise. * tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-0.txt: Likewise. * tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-1.txt: Likewise. * tests/data/test-diff-suppr/test0-type-suppr-report-0.txt: Likewise. * tests/data/test-diff-suppr/test0-type-suppr-report-3.txt: Likewise. * tests/data/test-diff-suppr/test0-type-suppr-report-5.txt: Likewise. * tests/data/test-diff-suppr/test0-type-suppr-report-7.txt: Likewise. * tests/data/test-diff-suppr/test1-typedef-suppr-report-0.txt: Likewise. * tests/data/test-diff-suppr/test1-typedef-suppr-report-2.txt: Likewise. * tests/data/test-diff-suppr/test10-changed-parm-c-report-0.txt: Likewise. * tests/data/test-diff-suppr/test2-struct-suppr-report-0.txt: Likewise. * tests/data/test-diff-suppr/test23-alias-filter-report-0.txt: Likewise. * tests/data/test-diff-suppr/test23-alias-filter-report-2.txt: Likewise. * tests/data/test-diff-suppr/test3-struct-suppr-report-0.txt: Likewise. * tests/data/test-diff-suppr/test3-struct-suppr-report-1.txt: Likewise. * tests/data/test-diff-suppr/test3-struct-suppr-report-2.txt: Likewise. * tests/data/test-diff-suppr/test30-report-0.txt: Likewise. * tests/data/test-diff-suppr/test4-local-suppr-report-0.txt: Likewise. * tests/data/test-diff-suppr/test4-local-suppr-report-1.txt: Likewise. * tests/data/test-diff-suppr/test5-fn-suppr-report-0.txt: Likewise. * tests/data/test-diff-suppr/test5-fn-suppr-report-1.txt: Likewise. * tests/data/test-diff-suppr/test5-fn-suppr-report-2.txt: Likewise. * tests/data/test-diff-suppr/test5-fn-suppr-report-3.txt: Likewise. * tests/data/test-diff-suppr/test5-fn-suppr-report-4.txt: Likewise. * tests/data/test-diff-suppr/test5-fn-suppr-report-5.txt: Likewise. * tests/data/test-diff-suppr/test6-fn-suppr-report-0-1.txt: Likewise. * tests/data/test-diff-suppr/test6-fn-suppr-report-0.txt: Likewise. * tests/data/test-diff-suppr/test6-fn-suppr-report-1.txt: Likewise. * tests/data/test-diff-suppr/test6-fn-suppr-report-2.txt: Likewise. * tests/data/test-diff-suppr/test6-fn-suppr-report-3.txt: Likewise. * tests/data/test-diff-suppr/test7-var-suppr-report-0.txt: Likewise. * tests/data/test-diff-suppr/test7-var-suppr-report-1.txt: Likewise. * tests/data/test-diff-suppr/test7-var-suppr-report-2.txt: Likewise. * tests/data/test-diff-suppr/test7-var-suppr-report-3.txt: Likewise. * tests/data/test-diff-suppr/test7-var-suppr-report-4.txt: Likewise. * tests/data/test-diff-suppr/test7-var-suppr-report-7.txt: Likewise. * tests/data/test-diff-suppr/test7-var-suppr-report-8.txt: Likewise. 2016-12-02 Dodji Seketeli Rename tests/update-test-read-dwarf-output.py * tests/update-test-output.py: renamed tests/update-test-read-dwarf-output.py into this. Update its comments. Make this script executable. 2016-11-30 Dodji Seketeli Add tests/data/test-diff-suppr/test33-report-0.txt to tarball * tests/data/Makefile.am: Add test-diff-suppr/test33-report-0.txt. 2016-11-30 Dodji Seketeli Bug 20670 - abipkgdiff aborts if $XDG_CACHE_HOME does not exist * tools/abipkgdiff.cc (package::extracted_packages_parent_dir): Ensure that the cache directory is created, even when XDG_CACHE_HOME is set. Also, remove the now useless "using abigail::tools_utils::get_random_number_as_string" statement. 2016-11-09 Dodji Seketeli Very light speed improvements * include/abg-comp-filter.h (has_harmless_name_change): Pass smart pointers by reference. * src/abg-comp-filter.cc (access_changed) (function_name_changed_but_not_symbol) (non_static_data_member_type_size_changed) (static_data_member_type_size_changed, is_compatible_change) (decl_name_changed, has_harmless_name_change): Pass smart pointers by reference. * include/abg-ir.h (decl_base::set_context_rel): Take a bare pointer, not a smart pointer. * src/abg-ir.cc (decl_base::priv::context_): Make this data member be a naked pointer, not a smart pointer. (decl_base::priv::priv): Initialize it. (decl_base::priv::~priv): New constructor. (decl_base::{get_context_rel, set_scope}): Adjust. (class_decl::method_decl::{method_decl, set_scope}): Likewise. (equals): In the overload for var_decl, compare the type of the var first as that might be faster (to detect var_decls with different types) in the general case where types are canonicalized. 2016-11-08 Dodji Seketeli Introduce on-the-fly type canonicalization * include/abg-ir.h (environment::do_on_the_fly_canonicalization): Declare new member functions. ({type_base, function_type}::priv_): Make this public so that static non-member functions defined in abg-ir.cc can access it. * src/abg-ir.cc (environment::priv::do_on_the_fly_canonicalization_): New data member. (environment::priv::priv): Initialize it. (environment::do_on_the_fly_canonicalization): Define new member functions. (type_base::get_canonical_type_for): Trigger on-the-fly canonicalization during comparison of the type being canonicalized and an already canonicalized type. (types_are_being_compared, maybe_propagate_canonical_type): Define new static functions. (equals): In overloads for class_decl and function_type, call maybe_propagate_canonical_type when the two types compare equal. * tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-0.txt: Adjust. * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Likewise. 2016-11-06 Dodji Seketeli Fix pretty representation of array types * include/abg-ir.h (array_type_def::is_infinite): Fix indentation. * src/abg-ir.cc (qualified_type_def::build_name): An empty set of sub-ranges for a vector is represented by "[]". (array_type_def::is_infinite): If a vector has no sub-range, that means it has an infinite size. Adjust comment. * tests/data/test-diff-filter/test33-report-0.txt: Adjust. * tests/data/test-read-dwarf/libtest23.so.abi: Adjust. * tests/data/test-read-dwarf/libtest24-drop-fns-2.so.abi: Adjust. * tests/data/test-read-dwarf/libtest24-drop-fns.so.abi: Adjust. * tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: Adjust. * tests/data/test-read-dwarf/test11-pr18828.so.abi: Adjust. * tests/data/test-read-dwarf/test14-pr18893.so.abi: Adjust. * tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi: Adjust. * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: Adjust. * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Adjust. 2016-10-11 Dodji Seketeli Support naming typedef and use them to speed up type canonicalization * include/abg-ir.h (typedef_decl_wptr): New typedef. (class_decl::{g,s}et_naming_typedef): Declare new member functions. * src/abg-dwarf-reader.cc (build_typedef_type): When the underlying type of a typedef is an anonymous class, the class type is said to have a naming typedef. * src/abg-ir.cc (is_anonymous_type): An anonymous class that has a naming typedef is said to not be anonymous anymore. (class_decl::priv::naming_typedef): New data member. (class_decl::{g,s}et_naming_typedef): Define new member functions. (class_decl::get_pretty_representation): When called for internal purposes (e.g, for type canonicalization) compute the pretty representation of the class by using its typedef name, when class is anonymous and has a naming typedef. * src/abg-reader.cc (build_class_decl): Read the new "naming-typedef-id" attribute. * src/abg-writer.cc (write_naming_typedef): New function. (write_class_decl_opening_tag): Use the new write_naming_typedef function. * tests/data/test-read-dwarf/libtest23.so.abi: Adjust. * tests/data/test-read-dwarf/libtest24-drop-fns-2.so.abi: Likewise. * tests/data/test-read-dwarf/libtest24-drop-fns.so.abi: Likewise. * tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: Likewise. * tests/data/test-read-dwarf/test11-pr18828.so.abi: Likewise. * tests/data/test-read-dwarf/test12-pr18844.so.abi: Likewise. * tests/data/test-read-dwarf/test13-pr18894.so.abi: Likewise. * tests/data/test-read-dwarf/test14-pr18893.so.abi: Likewise. * tests/data/test-read-dwarf/test15-pr18892.so.abi: Likewise. * tests/data/test-read-dwarf/test16-pr18904.so.abi: Likewise. * tests/data/test-read-dwarf/test21-pr19092.so.abi: Likewise. * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: Likewise. * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Likewise. 2016-11-02 Dodji Seketeli Implement de-duplication for types and decls at DWARF loading time * include/abg-ir.h (method_type::priv_): Introduce new pimpl pointer here. (method_type::class_type_): Move this into the pimpl idiom. (method_type::method_type): Take a new is_const flag. (method_type::get_class_type): Make this method out-of-line. (method_type::{s,g}et_is_const): Declare new member functions. (get_method_type_name): Declare this function as a friend of the method_type type. * src/abg-dwarf-reader.cc: Include the new abg-ir-priv.h and abg-corpus-priv.h. (typedef die_tu_map_type): Fix comment. (typedef die_istring_map_type): New typedef. (class read_context::die_source_dependant_container_set): New class template. (read_context::{die_qualified_name_maps_, die_pretty_repr_maps_, die_pretty_type_repr_maps_}): Define new data members. (read_context::{get_die_qualified_name, get_die_qualified_name, get_die_qualified_type_name, get_die_pretty_type_representation, get_die_pretty_representation, lookup_type_artifact_from_die, lookup_artifact_from_die, lookup_artifact_from_die_representation, associate_die_to_artifact_by_repr, associate_die_to_artifact_by_repr_internal, lookup_type_from_die}): Define new member functions. (read_context::lookup_type_from_die_offset): Fix comment. (get_parent_die, get_scope_die, die_is_decl) (die_is_namespace, die_is_unspecified, die_is_void_type) (die_is_pointer_type, die_is_reference_type) (die_is_pointer_or_reference_type, die_is_class_type) (die_has_object_pointer, die_this_pointer_from_object_pointer) (die_this_pointer_is_const, is_decl_tag) (die_object_pointer_is_for_const_method, die_is_at_class_scope) (die_name, die_qualified_type_name, die_qualified_decl_name) (die_qualified_name, die_qualified_type_name_empty) (die_return_and_parm_names_from_fn_type_die) (die_function_signature, die_peel_qual_ptr) (die_function_type_is_method_type, die_pretty_print_type) (die_pretty_print_decl, die_pretty_print) (build_subranges_from_array_type_die) (build_or_get_fn_decl_if_not_suppressed) (lookup_class_or_typedef_type) (lookup_class_typedef_or_enum_type_from_corpus) (is_function_for_die_a_member_of_class) (add_or_update_member_function): Define new static functions. (read_context::associate_die_to_decl): Call associate_die_to_artifact_by_repr. (read_context::{associate_die_to_type, schedule_type_for_late_canonicalization}): Take just one "die" parameter rather than taking a die offset and a die source; adjust accordingly. (maybe_canonicalize_type): Likewise. (finish_member_function_reading): Take a const reference to function_decl_sptr. (die_loc_and_name): Use the new die_name function. (die_is_type): Rename is_type_die into this. (build_type_decl): Take a new "where_offset" parameter. Adjust. If a type of the same name as the one for the current DIE is is already present, do not create a new type; just return the already-existing one. (build_enum_type): Take a new "where_offset" parameter. Adjust. (finish_member_function_reading): Pass two smart pointers by const reference. Assert that the type of the member function is a method_type. Some light cleanups. (add_or_update_class_type): Rename build_class_type_and_add_to_ir. If a DIE defining the same class has already been seen, then return that class; don't construct any other internal representation for the same class. Better handle the updating of member data and functions. Do not duplicate member types. (build_qualified_type, build_pointer_type_def) (build_reference_type): Support de-duplication here. (build_function_type): Likewise. Support detection and building of method type. This also supports *const* method type building. (build_array_type): Use the new build_subranges_from_array_type_die. (build_type_decl): Cleanup logic. (build_or_get_var_decl_if_not_suppressed): Renamed build_var_decl_if_not_suppressed into this. Perform de-duplication for data members. (build_function_decl): Don't set an empty source location. If the function type cannot be constructed, do not construct the function decl either. Adjust. (build_ir_node_from_die): Adjust. When building a function for a DW_TAG_subroutine_type DIE, use the new build_or_get_fn_decl_if_not_suppressed. * src/abg-ir.cc (translation_unit::bind_function_type_life_time): Fix comment. (strip_typedef): Adjust. (qualified_type_def::build_name): Set the prefix name of a the name of a noop qualifier to "noop-qual", just like what is done in the new die_qualified_name function. (struct method_type::priv): New priv type for the method_type class. (method_type::method_type): Take a new 'is_const' parameter. Adjust as the method_type is now pimpl'ed. (method_type::{get_class_type, set_is_const, get_is_const}): Define new member functions. (function_decl::get_pretty_representation_of_declarator): Better detecter of const-ness. (class_decl::insert_member_decl): Better setting of the const-ness. (class_decl::method_decl::method_decl): Adjust. Deduce the const-ness of the method_decl from the const-ness of its method_type. (copy_member_function): Adjust. (set_member_is_static): Do not assume a non-nil scope anymore because member_decl can now be scope-less, at least for a little while. * src/abg-reader.cc (push_decl_to_current_scope): Adjust. (build_function_decl): Style adjustment. Adjust for method_type const-ness changes. (build_function_type): Likewise. Also, support the new "method-class-id" property that flags a function type as being a method type. * src/abg-writer.cc (write_function_decl): Style fixes. (write_function_type): Likewise. Emit a new "method-class-id" property for function type that is actually a method type. That property's value is the id of the class of the method type. * tests/data/test-diff-dwarf-abixml/test0-pr19026-libvtkIOSQL-6.1.so.1.abi: Adjust. * tests/data/test-diff-dwarf/test0-report.txt: Adjust. * tests/data/test-diff-filter/test0-report.txt: Adjust. * tests/data/test-diff-filter/test01-report.txt: Adjust. * tests/data/test-diff-filter/test30-pr18904-rvalueref-report0.txt: Adjust. * tests/data/test-diff-filter/test30-pr18904-rvalueref-report1.txt: Adjust. * tests/data/test-diff-filter/test31-pr18535-libstdc++-report-0.txt: Adjust. * tests/data/test-diff-filter/test31-pr18535-libstdc++-report-1.txt: Adjust. * 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: Adjust. * tests/data/test-diff-pkg/libsigc++-2.0-0c2a_2.4.0-1_amd64--libsigc++-2.0-0v5_2.4.1-1ubuntu2_amd64-report-0.txt: Adjust. * tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-0.txt: Adjust. * tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-1.txt: Adjust. * tests/data/test-read-dwarf/libtest23.so.abi: Adjust. * tests/data/test-read-dwarf/libtest24-drop-fns-2.so.abi: Adjust. * tests/data/test-read-dwarf/libtest24-drop-fns.so.abi: Adjust. * tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: Adjust. * tests/data/test-read-dwarf/test11-pr18828.so.abi: Adjust. * tests/data/test-read-dwarf/test12-pr18844.so.abi: Adjust. * tests/data/test-read-dwarf/test13-pr18894.so.abi: Adjust. * tests/data/test-read-dwarf/test14-pr18893.so.abi: Adjust. * tests/data/test-read-dwarf/test15-pr18892.so.abi: Adjust. * tests/data/test-read-dwarf/test16-pr18904.so.abi: Adjust. * tests/data/test-read-dwarf/test17-pr19027.so.abi: Adjust. * tests/data/test-read-dwarf/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: Adjust. * tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi: Adjust. * tests/data/test-read-dwarf/test20-pr19025-libvtkParallelCore-6.1.so.abi: Adjust. * tests/data/test-read-dwarf/test21-pr19092.so.abi: Adjust. * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: Adjust. * tests/data/test-read-dwarf/test8-qualified-this-pointer.so.abi: Adjust. * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Adjust. 2016-11-01 Dodji Seketeli Setup per-corpus type maps indexed by type names * include/abg-corpus.h (corpus::priv_): Make this public so that functions from outside of the class can access it. These functions are meant to be used only by code that is *inside* libabigail.so, though. * src/abg-corpus-priv.h: New file. * src/abg-corpus.cc: Include the new abg-corpus-priv.h file. (struct regex_t_deleter): Move this to abg-sptr-utils.h. (build_sptr): Move the declaration of this function template specialization to abg-sptr-utils.h and its definition to abg-sptr-utils.cc. (typedef regex_t_sptrs_type, typedef str_var_ptr_map_type) (struct corpus::exported_decls_builder::priv, struct corpus::priv): Move these declarations to the new abg-corpus-priv.h. (maybe_update_types_lookup_map): Define overloads of this (one per kind of type). (lookup_{basic, class, enum, typedef, class_or_typedef, class_typedef_or_enum, qualified, pointer, reference, array, function}_type): Define new functions. * include/abg-ir.h (typedef istring_type_base_wptr_map_type) (typedef istring_type_or_decl_base_sptr_map_type): Declare new typedefs. (class_decl::find_member_function_from_signature): Declare new member function. * src/abg-ir.cc: Include the new abg-corpus-priv.h file. (maybe_update_types_lookup_map): Remove this initial function. There are now new overloads in abg-corpus.cc for it. (scope_decl::{add_member_decl, insert_member_decl}): Adjust. (class_decl::{set_is_declaration_only, find_member_function, add_member_function}): Adjust. (class_decl::find_member_function_from_signature): Define new member function. * include/abg-sptr-utils.h (struct regex_t_deleter): Declare new type. (build_sptr): New build function template specializations. * src/abg-sptr-utils.cc: New file. * src/Makefile.am: Add src/abg-sptr-utils.cc and src/abg-corpus-priv.h to the build system. 2016-11-01 Dodji Seketeli Allow pretty printing function decls for internal purposes * include/abg-ir.h (function_decl::get_pretty_representation_of_declarator): Take an "internal" flag. * src/abg-ir.cc (function_decl::get_pretty_representation_of_declarator): Take an "internal" flag. (function_decl::get_pretty_representation): Pass the "internal" flag to the function function_decl::get_pretty_representation_of_declarator. (function_decl::parameter::get_type_name): Better handle variadic parameter type. (function_decl::parameter::get_type_pretty_representation): Likewise. 2016-11-26 Dodji Seketeli Make bash completion files non-executable * bash-completion/abicompat: Make this be non-executable. * bash-completion/abidiff: Likewise. * bash-completion/abidw: Likewise. * bash-completion/abilint: Likewise. * bash-completion/abinilint: Likewise. * bash-completion/abipkgdiff: Likewise. * bash-completion/abisym: Likewise. * bash-completion/fedabipkgdiff: Likewise. 2016-11-26 Dodji Seketeli A suppressed diff node implies suppressing all equivalent nodes too *class of equivalence* is visited once. This is not only a way to prevent infinite loops while visiting the graph, but also an optimization as it avoids walking two equivalent diff nodes. But then it can happen that we forget to categorize some diff nodes inside a given class of equivalence, even though we categorized some others. This patch makes it so that when a diff node inside a class of equivalence is categorized as SUPPRESSED, the canonical diff node of that class of equivalence is categorized as SUPPRESSED too. That way, to know if a diff node is suppressed, we just need to look at its canonical diff node. While doing this, I noticed that abidiff and abipkgdiff are not dropping private types from libabigail's internal representation, even though the Library now has that capability. The patch fixes that. But then the patch adds a --dont-drop-private-types option to abidiff to avoid dropping those private types from the IR, so that regression tests can make sure that a suppressed diff node implies suppression all equivalent nodes too. * doc/manuals/abidiff.rst b/doc/manuals/abidiff.rst: Document the new --dont-drop-private-types option. * src/abg-comparison.cc (diff::is_filtered_out): If the canonical type was suppressed then the current diff node is filtered out. (suppression_categorization_visitor::visit_{begin,end}): Categorized the canonical node as SUPPRESSED if the current node is suppressed. * tools/abidiff.cc (options::drop_private_types): New data member. (options::options): Initialize it. (display_usage): Add new help string for the new --dont-drop-private-types option. (parse_command_line): Parse the new --dont-drop-private-types option. (set_suppressions): Generate suppression specification from header directories given in parameter and stick them to the read context. * tools/abipkgdiff.cc (compare): Likewise. * tests/data/test-diff-suppr/libtest34-v0.so: New test input. * tests/data/test-diff-suppr/libtest34-v1.so: Likewise. * tests/data/test-diff-suppr/test34-report-0.txt: New reference report. * tests/data/test-diff-suppr/test34-v0.c: Source code for the new test input. * tests/data/test-diff-suppr/test34-v1.c: Likewise. * tests/data/test-diff-suppr/test34-priv-include-dir-v0/test34-priv-include-v0.h: Likewise. * tests/data/test-diff-suppr/test34-priv-include-dir-v1/test34-priv-include-v1.h: Likewise. * tests/data/test-diff-suppr/test34-pub-include-dir-v0/test34-pub-include-v0.h: Likewise. * tests/data/test-diff-suppr/test34-pub-include-dir-v1/test34-pub-include-v1.h: Likewise. * tests/data/Makefile.am: Add new test input material above to source distribution. * tests/test-diff-suppr.cc (in_out_spec): Compare the two new test library provided. Add --dont-drop-private-types to test30*. signed-off-by: Dodji Seketeli 2016-11-26 Dodji Seketeli Forgot to consider libtest33-v{0,1}.so in test-diff-suppr.cc * tests/data/test-diff-suppr/test33-report-0.txt: New refernce report. * tests/test-diff-suppr.cc (in_out_specs): Compare libtest33-v0.so and libtest33-v1.so. 2016-11-24 Dodji Seketeli Bump version number to 1.0.rc7 * configure.ac: 2016-11-24 Dodji Seketeli Update website for 1.0.rc6 * doc/website/mainpage.txt: Update for 1.0.rc6 release 2016-11-23 Dodji Seketeli Update NEWS and ChangeLog for 1.0.rc6 * ChangeLog: Update this automatically using "make update-changelog". * NEWS: update this by editing the output of 'git shortlog libabigail-1.0.rc5..HEAD'. 2016-11-24 Dodji Seketeli Avoid using size_t to get DWARF data * src/abg-dwarf-reader.cc (die_size_in_bits, die_location_expr): Take uint64_t rather than size_t and adjust. (expr_result::const_value_): Make this be int64_t rather than ssize_t. (expr_result::expr_result): Take int64_t rather than ssize_t. (expr_result::const_value): Return int64_t rather than ssize_t. (expr_result::{operator(), operator=, operator+=}): Make these operators return or take int64_t. too. (op_pushes_constant_value, op_manipulates_stack) (op_is_arith_logic, op_is_control_flow) (eval_last_constant_dwarf_sub_expr, die_member_offset) (die_virtual_function_index): Take uint64_t rather than size_t, or int64_t rather than ssize_t. (finish_member_function_reading, build_class_type_and_add_to_ir) (build_union_type_and_add_to_ir): Adjust. 2016-11-24 Dodji Seketeli Fix a compiler warning issued by GCC 6.2.1 * src/abg-dwarf-reader.cc (find_import_unit_point_between_dies): Parameter 5 of find_import_unit_point_between_dies is not of type Dwarf_Off. 2016-11-24 Dodji Seketeli Fix offset type mismatch * src/abg-dwarf-reader.cc (die_member_offset): The last two parameters of die_unsigned_constant_attribute must be of type uint64_t. 2016-11-24 Dodji Seketeli Fix indentation in abg-writer.cc * src/abg-writer.cc (write_union_decl_opening_tag): Fix indentation. 2016-11-23 Dodji Seketeli Support reading data member offset from DW_AT_bit_offset * src/abg-dwarf-reader.cc (die_member_offset): Better comments. Support reading the bit offset also from the DW_AT_bit_offset attribute when it's present. Make sure this always returns a value in bits. (build_class_type_and_add_to_ir): No need to multiply (by 8) the value returned by die_member_offset anymore because it's now in bits directly. * tests/data/test-diff-filter/test30-pr18904-rvalueref-report0.txt: Adjust. * tests/data/test-diff-filter/test30-pr18904-rvalueref-report1.txt: Adjust. * tests/data/test-read-dwarf/test1.abi: Adjust. * tests/data/test-read-dwarf/test11-pr18828.so.abi: Adjust. * tests/data/test-read-dwarf/test12-pr18844.so.abi: Adjust. * tests/data/test-read-dwarf/test13-pr18894.so.abi: Adjust. * tests/data/test-read-dwarf/test14-pr18893.so.abi: Adjust. * tests/data/test-read-dwarf/test15-pr18892.so.abi: Adjust. * tests/data/test-read-dwarf/test16-pr18904.so.abi: Adjust. * tests/data/test-read-dwarf/test17-pr19027.so.abi: Adjust. * tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi: Adjust. * tests/data/test-read-dwarf/test21-pr19092.so.abi: Adjust. * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: Adjust. 2016-11-23 Dodji Seketeli Lexicographically sort union data members in change reports * src/abg-comparison.cc (data_member_comp::operator()): Data members with the same offset are sorted lexicographically, by taking their name into account. * tests/data/test-diff-filter/test30-pr18904-rvalueref-report0.txt: Adjust. * tests/data/test-diff-filter/test30-pr18904-rvalueref-report1.txt: Likewise. 2016-11-23 Dodji Seketeli Better diagnostics when wget is missing * configure.ac: When wget is missing then make the disabling of the building of the fedabipkgdiff tool show up in the configuration summary and emit a notice. 2016-11-15 Dodji Seketeli Support union types * include/abg-fwd.h (class_or_union, union_decl): Forward-declare new types. (is_class_or_union_type, is_union_type): Declare new functions. * include/abg-ir.h (method_type::class_type_): Make this be of class_or_union_wptr type. (method_type::method_type): Make the class_type parameter be of class_or_union_wptr type. (method_type::{g,s}et_class_type): Take or return a class_or_union_sptr. (member_base, method_decl, member_function_template) (member_class_template, member_base::hash) (member_function_template::hash, member_class_template::hash): Take these class types out of the class_decl scope. (is_method_decl): Adjust. (operator==, opertor!=): Adjust overloads for member_function_template_sptr and member_class_template_sptr. (class class_or_union): Declare new type. (class class_decl): Make this class inherit class_or_union class. (class_decl::{add_member_decl, insert_member_decl, remove_member_decl, set_size_in_bits, get_size_in_bits, get_alignment_in_bits, set_alignment_in_bits, get_is_declaration_only, set_is_declaration_only, set_definition_of_declaration, get_definition_of_declaration, get_earlier_declaration, set_earlier_declaration, insert_member_type, add_member_type, remove_member_type, get_member_type, find_member_type, add_data_member, get_data_members, find_data_member, get_non_static_data_members, add_member_function, get_member_functions, find_member_function, add_member_function_template, get_member_function_templates, add_member_class_template, get_member_class_templates): Move these to the parent class class_or_union. (copy_member_function, equals): Add overloads for class_or_union. (struct class_or_union::hash): Declare new type. (class union_decl): Declare new type. (equals, copy_member_function): New overloads for class union_decl type. (ir_node_visitor::visit): Add new overloads for union_decl* and class_or_union*. * src/abg-ir.cc (get_member_function_is_ctor) (set_member_function_is_ctor, get_member_function_is_dtor) (set_member_function_is_dtor, get_member_function_is_const) (set_member_function_is_const, get_member_function_vtable_offset) (set_member_function_vtable_offset) (get_member_function_is_virtual, set_member_function_is_virtual) (maybe_update_types_lookup_map, get_location) (get_method_type_name, is_at_global_scope, is_at_class_scope): Adjust. (is_class_or_union_type, is_union_type): Define new functions. (type_base::get_canonical_type_for, maybe_adjust_canonical_type) (method_type::method_type, method_type::set_class_type) (function_decl::get_pretty_representation) (function_decl::get_first_non_implicit_parm) (function_decl::clone): Adjust. (equals): Adjust the overload for function_type. (struct class_or_union::priv): Define new type. (class::priv::{declaration_, definition_of_declaration_, member_types_, data_members_, non_static_data_members_, member_functions_, mem_fns_map_, member_function_templates_, member_class_templates_, is_declaration_only_}): Move these data member into class_or_union::priv. (class_priv::{mark_as_being_compared, unmark_as_being_compared, comparison_started}): Moved these member functions to class_or_union::priv. (class_or_union::{class_or_union, traverse, ~class_or_union, add_member_decl, remove_member_decl, insert_member_type, add_member_type, get_size_in_bits, remove_member_type, get_alignment_in_bits, set_alignment_in_bits, set_size_in_bits, get_is_declaration_only, set_is_declaration_only, set_definition_of_declaration, get_definition_of_declaration, get_earlier_declaration, set_earlier_declaration, get_member_types, find_member_type, add_data_member, get_data_member, find_data_member, add_member_function, get_member_functions, find_member_function, add_member_function_template, get_member_function_templates, add_member_class_template, get_member_class_templates, has_no_member, insert_member_decl, operator==}): Define new member functions. (class_decl::{add_member_decl, remove_member_decl, insert_member_type, add_member_type, get_size_in_bits, remove_member_type, get_alignment_in_bits, set_alignment_in_bits, set_size_in_bits, get_is_declaration_only, set_is_declaration_only, set_definition_of_declaration, get_earlier_declaration, set_earlier_declaration, get_member_types, find_member_type, add_data_member, get_data_member, find_data_member, add_member_function, get_member_functions, find_member_function, add_member_function_template, get_member_function_templates, add_member_class_template, get_member_class_templates): Move these member functions into class_or_union. (class_decl::{class_decl, get_definition_of_declaration, insert_member_decl, add_member_function, has_no_base_nor_member}): Adjust. (equals, copy_member_function): Define new overloads for class_or_union. (equals): Adjust the overload for class_decl. (method_decl::{method_decl, set_linkage_name, ~method_decl, get_type, set_scope}): Remove from the class_decl scope. (member_base::operator==, member_function_template::operator==): Likewise. (member_function_template::traverse) (member_class_template::operator==) (member_class_template::traverse): Likewise. (operator==, operator!=): Adjust the overlod for member_function_template_sptr. (is_method_decl, fixup_virtual_member_function) (set_member_is_static): Adjust. (virtual_member_function_less_than::operator()): Likewise. (union_decl::{union_decl, get_pretty_representation, operator==, traverse}): Define new member functions. (equals, copy_member_function): Define new overloads for union_decl. (hash_type_or_decl): Adjust. (ir_node_visitor::visit_{begin, end}): Adjust. Add new overloads for class_or_union* and union_decl*. * include/abg-comparison.h (changed_member_function_sptr) (string_member_function_sptr_map): Adjust these typedefs. (class class_or_union_diff): Declare new type. (class_diff): Adjust to make this inherit the new class_or_union_diff type. (class_diff::{get_priv, member_types_changes, data_members_changes, inserted_data_members, deleted_data_members, member_fn_tmpls_changes, member_fn_tmpls_changes, member_class_tmpls_changes}): These member functions got moved into -- and shared with -- class_or_union_diff class. (class union_diff): Declare new type. (typedef union_diff_sptr): New typedef. (compute_diff): New overload for union_diff (is_class_diff, is_union_diff): Declare new functions. * src/abg-comparison.cc (is_class_diff, is_union_diff): Define new functions. (compute_diff_for_types): Support union_decl. (represent): Adjust. (represent_data_member): Do not show offset information for data members of unions as all union data members are at offset 0. (struct class_or_union_diff::priv): New type. (class_or_union_diff::priv::{member_type_has_changed, subtype_changed_dm, member_class_tmpl_has_changed, get_deleted_non_static_data_members_number, get_inserted_non_static_data_members_number, count_filtered_subtype_changed_dm, count_filtered_changed_dm, count_filtered_changed_mem_fns, count_filtered_inserted_mem_fns, count_filtered_deleted_mem_fns}): Define new member functions. (class_or_union_diff::{class_or_union_diff, finish_diff_type, lookup_tables_empty, lookup_tables_empty, ensure_lookup_tables_populated, allocate_priv_data, get_priv, ~class_or_union_diff, first_class_or_union, second_class_or_union, member_types_changes, member_types_changes, data_members_changes, inserted_data_members, deleted_data_members, member_fns_changes, changed_member_fns, member_fns_changes, inserted_member_fns, member_fn_tmpls_changes, member_fn_tmpls_changes, member_class_tmpls_changes, member_class_tmpls_changes, has_changes, has_local_changes, report, chain_into_hierarchy}): Define new member functions. (class_diff::priv::{member_types_changes_, data_members_changes, member_fn_tmpls_changes_, member_class_tmpls_changes_, deleted_member_types_, inserted_member_types_, changed_member_types_, sorted_changed_member_types_, deleted_data_members_, deleted_dm_by_offset_, inserted_data_members_, inserted_dm_by_offset_, subtype_changed_dm_, sorted_subtype_changed_dm_, changed_dm_, sorted_changed_dm_, deleted_member_functions_, inserted_member_functions_, changed_member_functions_, sorted_changed_member_functions_, deleted_member_class_tmpls_, inserted_member_class_tmpls_, changed_member_class_tmpls_, sorted_changed_member_class_tmpls_}): Move these data members into class_or_union_diff::priv. (class_diff::{clear_lookup_tables, lookup_tables_empty, ensure_lookup_tables_populate}): Adjust. (class_diff::allocate_priv_data): Define new function. (class_diff::priv::{count_filtered_changed_mem_fns, count_filtered_inserted_mem_fns, count_filtered_deleted_mem_fns, chain_into_hierarchy, class_diff}): Likewise. (class_diff::{member_types_changes, data_members_changes, inserted_data_members, deleted_data_members, member_fn_tmpls_changes, member_fn_tmpls_changes, member_class_tmpls_changes}): These are deleted as they got moved to class_or_union_diff. (class_diff::report): Adjust. (union_diff::{clear_lookup_tables, lookup_tables_empty, ensure_lookup_tables_populated, allocate_priv_data, union_diff, finish_diff_type, first_union_decl, second_union_decl, get_pretty_representation, report}): Define new functions. (compute_diff): Define an overload for union_decl_sptr. (function_decl_diff::report): Adjust. (corpus_diff::priv::apply_suppressions_to_added_removed_fns_vars): Adjust. (corpus_diff::report): Adjust. * src/abg-hash.cc (member_base::hash::operator) (member_function_template::hash::operator) (member_class_template::hash::operator): Move these out of the class_decl scope. (class_or_union::hash::operator): Define new member function. (class_decl::hash::operator): Adjust. (type_base::dynamic_hash::operator): Support hashing of union_decl. Adjust. * src/abg-suppression.cc (type_suppression::suppresses_diff): Adjust. * src/abg-dwarf-reader.cc (typedef die_class_or_union_map_type): Define new typedef. (read_context::{die_wip_classes_map_, alternate_die_wip_classes_map_, type_unit_die_wip_classes_map_): Make these data member have type die_class_or_union_map_type. (read_context::{lookup_type_from_die_offset, die_wip_classes_map, is_wip_class_die_offset, resolve_declaration_only_classes}): Adjust. (finish_member_function_reading, build_class_type_and_add_to_ir) (build_function_type, build_function_decl, build_reference_type) (type_is_suppressed, build_function_decl) (maybe_canonicalize_type, maybe_set_member_type_access_specifier): Adjust. (build_union_type_and_add_to_ir): Define new static function. (build_ir_node_from_die): Support DW_TAG_union_type DIE tag. * src/abg-reader.cc (handle_element_node): Handle union_decl. (build_function_decl, build_function_decl_if_not_suppressed): Adjust. (build_union_decl_if_not_suppressed, build_union_decl) (handle_union_decl): Define new functions. (build_class_decl): Adjust. * src/abg-writer.cc (record_decl_only_type_as_emitted): Adjust. (write_decl): Adjust. Support writting union_decl type. p (write_class_decl_opening_tag, write_class_decl): Adjust. Call the new write_class_or_union_is_declaration_only. (write_union_decl_opening_tag, write_union_decl): Define new static functions. (write_member_tpe): Support writting union decl. * tests/test-diff-dwarf.cc (in_out_specs): Add new tests for this union type support. * tests/data/test-diff-dwarf/libtest37-union-v0.so: New test input. * tests/data/test-diff-dwarf/libtest37-union-v1.so: Likewise. * tests/data/test-diff-dwarf/libtest38-union-v0.so: Likewise. * tests/data/test-diff-dwarf/libtest38-union-v1.so: Likewise. * tests/data/test-diff-dwarf/libtest39-union-v0.so: Likewise. * tests/data/test-diff-dwarf/libtest39-union-v1.so: Likewise. * tests/data/test-diff-dwarf/test37-union-report-0.txt: Likewise. * tests/data/test-diff-dwarf/test38-union-report-0.txt: Likewise. * tests/data/test-diff-dwarf/test39-union-report-0.txt: Likewise. * tests/data/test-diff-dwarf/test37-union-v0.cc: Source code for new test input. * tests/data/test-diff-dwarf/test37-union-v1.cc: Likewise. * tests/data/test-diff-dwarf/test38-union-v0.cc: Likewise. * tests/data/test-diff-dwarf/test38-union-v1.cc: Likewise. * tests/data/test-diff-dwarf/test39-union-v0.cc: Likewise. * tests/data/test-diff-dwarf/test39-union-v1.cc: Likewise. * tests/data/test-diff-dwarf-abixml/test0-pr19026-libvtkIOSQL-6.1.so.1.abi: Update test reference. * tests/data/test-diff-filter/test30-pr18904-rvalueref-report0.txt: Likewise. * tests/data/test-diff-filter/test30-pr18904-rvalueref-report1.txt: Likewise. * tests/data/test-read-dwarf/libtest23.so.abi: Likewise. * tests/data/test-read-dwarf/libtest24-drop-fns-2.so.abi: Likewise. * tests/data/test-read-dwarf/libtest24-drop-fns.so.abi: Likewise. * tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: Likewise. * tests/data/test-read-dwarf/test11-pr18828.so.abi: Likewise. * tests/data/test-read-dwarf/test12-pr18844.so.abi: Likewise. * tests/data/test-read-dwarf/test13-pr18894.so.abi: Likewise. * tests/data/test-read-dwarf/test14-pr18893.so.abi: Likewise. * tests/data/test-read-dwarf/test15-pr18892.so.abi: Likewise. * tests/data/test-read-dwarf/test16-pr18904.so.abi: Likewise. * tests/data/test-read-dwarf/test17-pr19027.so.abi: Likewise. * tests/data/test-read-dwarf/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: Likewise. * tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi: Likewise. * tests/data/test-read-dwarf/test20-pr19025-libvtkParallelCore-6.1.so.abi: Likewise. * tests/data/test-read-dwarf/test21-pr19092.so.abi: Likewise. * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: Likewise. * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Likewise. 2016-11-10 Dodji Seketeli Support empty properties in INI files * include/abg-ini.h (simple_property::simple_property): Add a new constructor for empty values. (simple_property::has_empty_value): Declare new member function. * src/abg-ini.cc (simple_property::{simple_property, has_empty_value}): Define new member functions. (read_context::read_property): Support reading a property with no value. (write_property_value, write_property): Support writting a property with empty value. 2016-11-10 Dodji Seketeli Rename config::property_vector into config::properties_type * include/abg-ini.h (config::properties_type): Rename the typedef config::property_vector into this. (config::section::{section, get_properties, set_properties}): Adjust. * src/abg-ini.cc (config::section::priv::properties_): Adjust the name of its type. (config::section::{section, get_properties, set_properties, find_property}): Adjust. (write_section): Adjust. * src/abg-suppression.cc (read_function_suppression): Adjust. 2016-11-09 Dodji Seketeli Apply harmless and harmful filters in one pass * include/abg-comp-filter.h (class harmless_harmful_filter): Decalre new class. (typedef harmless_harmful_filter_sptr): Declare new typedef. (class harmless_filter, class harmful_filter): Remove these class declarations. (typedef harmful_filter_sptr, harmless_filter_sptr): Remove these typedefs. * src/abg-comp-filter.cc (categorize_harmless_diff_node) (categorize_harmful_diff_node): Define new static functions. ({harmless, harmful}_filter::{visit, visit_end}): Remove these member functions. (harmless_harmful_filter::{visit, visit_end}): Define new member functions. * src/abg-comparison.cc (diff_context::diff_context): Register the new harmless_harmful_filter, and remove the premier harmless_filter and harmful_filter. # Please enter the commit message for your changes. Lines starting # with '#' will be ignored, and an empty message aborts the commit. # On branch kabidiff-dedup # Changes to be committed: # (use "git reset HEAD ..." to unstage) # # modified: include/abg-comp-filter.h # modified: src/abg-comp-filter.cc # modified: src/abg-comparison.cc # # Untracked files: # (use "git add ..." to include in what will be committed) # # diff.txt # prtests/ # tests/data/test-read-dwarf/libtest23.so.abi.conflict 2016-11-08 Dodji Seketeli Avoid stripping typedefs too much * src/abg-ir.cc (types_are_compatible) (is_compatible_with_class_type): Do not strip typedefs. Just get their leaf types. 2016-11-08 Dodji Seketeli Misc style cleanups in abg-ir.cc * src/abg-ir.cc (equals): In overloads for function_type and class_decl, avoid returning a constant when we can return a variable like in the rest of the code. 2016-11-01 Dodji Seketeli Factorize out string representation of array_type_def::subrange_type * src/abg-ir.cc (array_type_def::subrange_type::{as_string, vector_as_string}): Define methods. (array_type_def::get_subrange_representation): Use the new vector_as_string method. 2016-11-01 Dodji Seketeli Factorize out parsing of integral types * src/abg-ir-priv.h: New file. * src/Makefile.am: Add abg-ir-priv.h to the build system. * src/abg-ir.cc: Include the new abg-ir-priv.h header file. (class_integral_type): Move this type declaration to the new abg-ir-priv.h header. (integral_type::modifiers_type): Make this non-static. (parse_integral_type): This new overload is a factorized out of ... (integral_type::integral_type): ... here. 2016-10-31 Dodji Seketeli Misc style fixes in abg-ir.cc * src/abg-ir.cc (get_function_type_name, get_pretty_representation): Misc style fixes. 2016-10-31 Dodji Seketeli Consider a method_decl as always being a member decl * src/abg-ir.cc (is_member_decl): Consider a method decl as always being a member decl. (is_member_function): Use is_member_decl. 2016-10-31 Dodji Seketeli Cleanup void and variadic parameter type interfaces * include/abg-ir.h (environment::{get_void_type, get_variadic_parameter_type}): Renamed get_void_type_decl and get_variadic_parameter_type_decl to these. (environment::is_void_type): Remove the overload that takes a bare pointer. (environment::is_variadic_parameter_type): Declare new member function. * src/abg-ir.cc (environment::void_type_): Renamed the data member void_type_decl_ into this. (environment::variadic_marker_type_): Renamed the data member variadic_marker_type_decl_ into this. (environment::{get_void_type, get_variadic_parameter_type}): Renamed get_void_type_decl and get_variadic_parameter_type_decl to these. (environment::is_void_type): Take a smart pointer now. (environment::is_variadic_parameter_type): Define new member function. (synthesize_function_type_from_translation_unit): Adjust. (function_decl::parameter::get_pretty_representation): Likewise. * src/abg-comparison.cc (is_diff_of_variadic_parameter_type): Adjust. * src/abg-dwarf-reader.cc (build_function_type) (build_ir_node_for_void_type): Likewise. * src/abg-reader.cc (build_function_parameter) (build_function_decl, build_function_type): Likewise. 2016-10-31 Dodji Seketeli Cleanup some entry points in abg-fwd.h * include/abg-fwd.h (add_decl_to_scope): Pass the scope smart pointer by reference. (is_member_type): pass the type smart pointer by reference. (is_function_decl, is_pointer_type, is_reference_type) (is_qualified_type, is_function_type, is_method_type) (is_array_type): Take a type_or_decl base pointer, rather than either a decl_base or type_base pointer. * include/abg-ir.h (translation_unit::set_corpus): Take a pointer to non-const corpus. (translation_unit::get_corpus): Add a non-const overload. (type_or_decl_base::get_corpus): Likewise. (type_or_decl_base::set_translation_unit): Take a pointer to non-corpus translation_unit. (type_or_decl_base::get_translation_unit): Add a non-const overload. (scope_decl::{add_member_decl, insert_member_decl}): Pass the member smart pointer by reference. (scope_decl::remove_member_decl): Take a non-const smart pointer. (class_decl::add_member_decl): Pass the decl smart pointer by reference. (is_method_decl): Take pointer or reference to type_or_decl_base rather than function_decl. * src/abg-ir.cc (translation_unit::priv::corpus): Make this a pointer to non-const corpus. (translation_unit::set_corpus): Take a pointer to non-const corpus. (translation_unit::get_corpus): Add a non-const overload. (translation_unit::get_global_scope): Adjust. (translation_unit::bind_function_type_life_time): Adjust. (type_or_decl_base::translation_unit): Make this a pointer to non-const translation_unit. (type_or_decl_base::get_corpus): Likewise. (type_or_decl_base::set_translation_unit): Take a pointer to non-corpus translation_unit. (type_or_decl_base::get_translation_unit): Add a non-const overload. (is_member_type): pass the type smart pointer by reference. (scope_decl::{add_member_decl, insert_member_decl}): Take a reference to the member decl smart pointer. Adjust. (class_decl::add_member_decl): Likewise. (scope_decl::remove_member_decl): Take a non-const smart pointer. (add_decl_to_scope): Pass the scope smart pointer by reference. (is_decl, is_function_decl, is_pointer_type, is_reference_type) (is_qualified_type, is_function_type, is_method_type) (is_method_decl, is_array_type): Take a type_or_decl base pointer, rather than either a decl_base or type_base pointer. 2016-10-31 Dodji Seketeli Fix abigail::ir::get_type_scope() * src/abg-ir.cc (get_type_scope): Do not always return nil. 2016-10-27 Dodji Seketeli Bug 20740 Broken check for dwarf_getalt in configure.ac * configure.ac: Add missing spaces around the "=" of a conditional expression. 2016-10-11 Dodji Seketeli Canonicalize function types when reading from DWARF * src/abg-dwarf-reader.cc (build_function_decl): Canonicalize function types. 2016-10-11 Dodji Seketeli Misc cleanups here and there * src/abg-dwarf-reader.cc (canonicalize_types_scheduled): Fix identation. * src/abg-reader.cc (build_class_decl): Use class_decl_sptr rather than shared_ptr. * src/abg-writer.cc (write_class_is_declaration_only) (write_is_struct, write_decl, write_decl_in_scope) (write_type_decl, write_qualified_type_def) (write_pointer_type_def, write_reference_type_def) (write_array_type_def, write_enum_type_decl, write_typedef_decl) (write_elf_symbol, write_var_decl, write_function_decl) (write_member_type_opening_tag, write_member_type) (write_class_decl_opening_tag, write_class_decl): Cleanup parameters to use the right typedef, rather than the long shared_ptr<*> form. Pass the shared pointers by reference as well. 2016-10-10 Dodji Seketeli Cleanup namespace importing in abg-interned-str.h * include/abg-interned-str.h: Inject std::tr1::shared_ptr, std::string and std::ostream inside the abigail namespace. (interned_string::{interned_string, raw, operator==, operator!=, operator<): Adjust. (operator==, operator!=, operator<<, operator+): Adjust. 2016-10-07 Dodji Seketeli Cleanup functions to detect infinite comparison of class_decl * src/abg-ir.cc (class_decl::priv::unmark_as_being_compared): In the overload that takes a pointer to class_decl, re-use the overload that takes a reference. (class_decl::priv::comparison_started): Do not crash if the klass pointer is nil. (equals): In the overload for class_decl&, undef the RESULT macro when it's not used anymore. 2016-10-07 Dodji Seketeli Cleanup class_decl inifite comparison detection * src/abg-ir.cc (environment::priv::classes_being_compared_): Make this use the new interned_string_set_type type. (class_decl::priv::{mark_as_being_compared, comparison_started}): Adjust. 2016-10-10 Dodji Seketeli Apply ODR-based type comparison optimization to function types * src/abg-ir.cc (type_eligible_for_odr_based_comparison): Factorize this out of type_base::get_canonical_type_for. Also, add function types to the set of types to use the ODR-based comparison optimization on. (type_base::get_canonical_type_for): Use the new type_eligible_for_odr_based_comparison function. 2016-10-07 Dodji Seketeli Prevent infinite loops while comparing two function_type * include/abg-ir.h (class environment): Make class function_type be a friend of this class. (class function_type): Make the equality function for function_types be a friend of this class. * src/abg-ir.cc (environment::priv::fn_types_being_compared_): New data member. (function_type::priv::{mark_as_being_compared, unmark_as_being_compared, comparison_started}): Define new member functions. (equals): In the overload for function_types, if any of the the function_type being compared is already being compared, return early saying that the two function_types are equal. This avoids 2016-10-06 Dodji Seketeli Define a new interned_string_set_type typedef * include/abg-interned-str.h (interned_string_set_type): Define a new typedef for unordered_set. 2016-09-23 Dodji Seketeli Update reference output of runtestreaddwarf * tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: Adjust. * tests/data/test-read-dwarf/test12-pr18844.so.abi: Adjust. * tests/data/test-read-dwarf/test17-pr19027.so.abi: Adjust. * tests/data/test-read-dwarf/test20-pr19025-libvtkParallelCore-6.1.so.abi: Adjust. * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Adjust. 2016-09-21 Matthias Klose Fix typo in abipkgdiff * tools/abipkgdiff.cc (extract_deb): Fix typo. 2016-09-12 Dodji Seketeli Better handle fedabipkgdiff dependencies detection * configure.ac: It's only when --enable-fedabipkgdiff is provided that a missing dependency of the fedabipkgdiff program results in a fatal error. Otherwise, building fedabipkgdiff is just disabled. 2016-09-16 Dodji Seketeli Add default suppression specifications for C++ binaries * default.abignore: Add suppressions for non-libstdc++ and non-boost C++ libraries. 2016-09-20 Dodji Seketeli Add default suppression specification for webkitgtk * default.abignore: New suppression specifications for webkitgtk. 2016-09-19 Dodji Seketeli Drop suppressed ABI artifacts from the IR * doc/manuals/abidw.rst: Document the new --suppressions and --headers-dir options off the abidw tool. * doc/manuals/abilint.rst: Document the new --suppressions and --headers-dir options on the abilint tool. * doc/manuals/libabigail-concepts.rst: Document the new "drop" and "name_not_regexp" properties on suppression directives. * include/abg-corpus.h (corpus::corpus): Add a default argument to the path parameter. * src/abg-suppression-priv.h: New private header file. * src/Makefile.am: Add the new abg-suppression-priv.h file to source distribution. * include/abg-suppression.h ({suppression_base, type_suppression, function_suppression, variable_suppression}::priv): Make these public. (suppression_base::{g,s}et_drops_artifact_from_ir): Declare new member functions. (type_suppression::{suppressed_type}): Likewise. (suppression_base::{names,sonames}_of_binaries_match): Remove member functions. (function_suppression::{get_name, set_name, get_name_regex_str, set_name_regex_str}): Renamed get_function_name, set_function_name, get_function_name_regex_str, set_function_name_regex_str into these. ({variable,function}_suppression::{g,s}et_name_not_regex_str): Declare new member functions. * src/abg-suppression.cc: Include the new abg-suppression-priv.h private header. (class suppression_base::priv, class type_suppression::priv, class function_suppression::parameter_spec::priv, class function_suppression::priv, class variable_suppression::priv): Move these types to that new private header. (suppression_base::{g,s}et_drops_artifact_from_ir) (function_suppression::{g,s}et_name_not_regex_str) (variable_suppression::{g,s}et_name_not_regex_str): New member functions. (sonames_of_binaries_match): New static function, taken from suppression_base::sonames_of_binaries_match. (names_of_binaries_match): New static function, taken from suppression_base::names_of_binaries_match. (suppression_matches_type_no_name): New static function. (type_suppression::suppresses_type): Adjust (function_suppression::suppresses_function) (variable_suppression::suppresses_variable): Adjust. Evaluate the new "name_not_regexp" property. (suppression_matches_type_name) (suppression_matches_type_location) (suppression_matches_type_name_or_location) (suppression_matches_function_name) (suppression_matches_function_sym_name) (suppression_matches_variable_name) (suppression_matches_variable_sym_name, suppression_matches_type): New functions. (read_type_suppression): Support the new "drop_artifacts" and "drop" properties. (read_function_suppression, read_variable_suppression): Support the new "drop_artifacts", "drop", and "name_not_regexp" properties. (function_suppression::{g,s}et_name): Renamed {g,s}et_function_name into these. (function_suppression::set_name_not_regex_str): Renamed {g,s}et_name_regex_str into this. (function_suppression::suppresses_function_symbol): Adjust. * include/abg-dwarf-reader.h (add_read_context_suppressions): Declare new function. * src/abg-dwarf-reader.cc: Use the new private abg-suppression-priv.h header file. (read_context::supprs_): New data member. (read_context::get_suppressions): New member function. (read_context::get_die_source): Make this const. (read_context::tu_die_imported_unit_points_map): Add a const overload. (read_context::cur_transl_unit): Renamed current_translation_unit unit into this; (read_context::cur_tu): Remove or rename into cur_transl_unit. (get_scope_for_die, build_translation_unit_and_add_to_ir) (build_enum_type, build_pointer_type_def, build_reference_type) (build_function_type, build_array_type, build_function_decl): Adjust. (read_context::{suppression_can_match, suppression_matches_function_sym_name, suppression_matches_function_name, suppression_matches_variable_sym_name, suppression_matches_variable_name, suppression_matches_type_name_or_location, suppression_matches_type_name}): Add member functions. (die_signed_constant_attribute): Remove this as dead code. (die_location, die_loc_and_name) (find_import_unit_point_between_dies) (find_import_unit_point_before_die, get_parent_die): Make the read_context& parameter be const and adjust as required. (build_var_decl_if_not_suppressed, function_is_suppressed) (variable_is_suppressed, type_is_suppressed): Define new static functions. (add_read_context_suppressions): Define new function. (build_class_type_and_add_to_ir): Do not add suppressed static data members to the IR. (build_ir_node_from_die): Do not add suppressed enum types, class types, variables or functions to the IR. Adjust for the read_context::cur_tu -> read_context::cur_transl_unit rename. * include/abg-reader.h (read_context_sptr): Declare new type. (create_native_xml_read_context, read_corpus_from_input) (add_read_context_suppressions): Declare new functions. * src/abg-reader.cc: Include the new private abg-suppression-priv.h header file. (read_context::m_exported_decls_builder): Renamed m_exported_decls_builder_ into this. (read_context::get_exported_decls_builder): Adjust. (read_context::get_cur_scope): Make this const. (read_location): Take a const read_context and adjust. (read_corpus_from_input): Make this non-static. (build_namespace_decl): Don't abort if trying to add an artifact to the IR doesn't succeed. It might be suppressed now. (read_context::{m_path, m_supprs}): New data members. (read_context::{g,s}et_path): New member functions. (read_context::{get_suppressions, suppression_matches_function_name, suppression_can_match, suppression_matches_function_name, suppression_matches_function_sym_name, suppression_matches_variable_name, suppression_matches_variable_sym_name, suppression_matches_type_name_or_location}): Likewise. (add_read_context_suppressions, create_native_xml_read_context) (read_corpus_from_native_xml): New functions. (build_function_decl_if_not_suppressed, function_is_suppressed) (type_is_suppressed, build_var_decl_if_not_suppressed) (variable_is_suppressed, build_enum_type_decl_if_not_suppressed) (build_class_decl_if_not_suppressed): New static functions. (build_class_decl): Add member types that are being built early, so that their sub-types can be evaluated for suppression. Do not add suppressed static data members or suppressed member functions to the IR. (build_type): Do not add an enum type or a class type to the IR if they are suppressed. (handle_enum_type_decl): Do not add an enum type to the IR if its suppressed. (handle_var_decl): Likewise for a variable decl. (handle_function_decl): Likewise for a function decl. (handle_class_decl): Likewise for a class decl. * src/abg-tools-utils.cc (handle_fts_entry): Drop suppressed ABI from the IR. * tools/abidiff.cc (display_usage): Fix help strings for --headers-dirs{1,2}. (set_suppressions): New static function. (main): Adjust. Release the memory used by read_context early. * tools/abidw.cc (options::{headers_dir, suppression_paths}): (display_usage): New help strings for the new --header-dir and --suppressions options. (parse_command_line): Parse the new --header-dir and --suppressions options. (maybe_check_suppression_files, set_suppressions): New static functions. (main): Use the two new functions above. Free the memory used by the read context before working with the corpus. * tools/abilint.cc (options::suppression_paths): (display_usage): New help strings for the new --header-dir and --suppressions options. (parse_command_line): Parse the new --header-dir and --suppressions options. (maybe_check_suppression_files, set_suppressions): New static functions. (main): Use the two new functions above. Free the memory used by the read context before working with the corpus. * tests/data/test-diff-suppr/test24-soname-suppr-{2,3].txt: Adjust. * tests/data/test-diff-suppr/test29-suppr-6.txt: Likewise. * tests/data/test-diff-suppr/test29-suppr-8.txt: Likewise. * tests/data/test-diff-suppr/libtest31-v{0,1}.so: New test input. * tests/data/test-diff-suppr/libtest31.suppr: Likewise * tests/data/test-diff-suppr/libtest32-v{0,1}.so: Likewise. * tests/data/test-diff-suppr/libtest32-0.suppr: Likewise. * tests/data/test-diff-suppr/libtest33-v{0,1}.so: Likewise. * tests/data/test-diff-suppr/test31-report-{0,1}.txt: Likewise. * tests/data/test-diff-suppr/test31-v{0,1}.cc: Likewise. * tests/data/test-diff-suppr/test32-report-{0,1}.txt: Likewise. * tests/data/test-diff-suppr/test32-v{0,1}.c: Likewise. * tests/data/test-diff-suppr/test33-suppr-1.txt: Likewise. * tests/data/test-diff-suppr/test33-v{0,1}.cc: Likewise. * tests/data/test-diff-suppr/test33-v{0,1}.h: Likewise. * tests/data/test-read-dwarf/libtest24-drop-fns-2.so.abi: Likewise. * tests/data/test-read-dwarf/libtest24-drop-fns.so: Likewise. * tests/data/test-read-dwarf/libtest24-drop-fns.so.abi: Likewise. * tests/data/test-read-dwarf/test24-drop-fns-0.suppr: Likewise. * tests/data/test-read-dwarf/test24-drop-fns.cc: Likewise. * tests/data/test-read-write/test28-drop-std-fns.abignore: Likewise. * tests/data/test-read-write/test28-drop-std-vars.abignore: Likewise. * tests/data/test-read-write/test28-without-std-fns-ref.xml: Likewise. * tests/data/test-read-write/test28-without-std-fns.xml: Likewise. * tests/data/test-read-write/test28-without-std-vars-ref.xml: Likewise. * tests/data/test-read-write/test28-without-std-vars.xml: Likewise. * tests/data/test-read-write/test28.xml: Likewise. * tests/data/Makefile.am: Add the new test artifacts to source distribution. * tests/test-diff-suppr.cc (in_out_spec): Take the new test inputs into account. * tests/test-read-dwarf.cc (Inoutspec::in_suppr_spec_path): New data member. (in_out_spec): Adjust. The new test inputs into account. (set_suppressions): New static function. (handle_in_out_spec): Adjust. * tests/test-read-write.cc (Inoutspec::{in_suppr_spec_path, ref_out_path}): New data members. (in_out_spec): Adjust. Take new test inputs into account. (main): Adjust. 2016-09-19 Dodji Seketeli Pimplify the abigail::ir::scope_decl type * include/abg-ir.h (scope_decl::{priv, priv_sptr}) Declare new types. (scope_decl::priv_): New pimpl data member. (scope_decl::{member_, member_scopes}): Move this as data member of the new scope_decl::priv type in the abg-ir.cc file. (scope_decl::{scope_decl, get_member_decls, get_member_scopes, is_empty}): Make these inline member functions be out-of-line. * src/abg-ir.cc (struct scope_decl::priv): Define new type. (scope_decl::{scope_decl, get_member_decls, get_member_scopes, is_empty}): Define these new member functions here. They were inline in the include/abg-ir.h header files before. (scope_decl::{add_member_decl, insert_member_decl, remove_member_decl}): Adjust. 2016-09-19 Dodji Seketeli Add new helper functions * include/abg-fwd.h (get_location, build_qualified_name): Declare new functions. * include/abg-ir.h (is_method_decl): Declare two new overloads of this function. * src/abg-ir.cc (get_location, build_qualified_name) (is_method_decl): Define these functions declared above. 2016-09-19 Dodji Seketeli Do not emit empty namespaces in abixml * include/abg-ir.h (namespace_decl::is_empty_or_has_empty_sub_namespaces): Declare new function ... * src/abg-ir.cc (namespace_decl::is_empty_or_has_empty_sub_namespaces): ... and define it. * src/abg-writer.cc (write_namespace_decl): Do not write empty namespaces or namespaces containing empty namespaces. * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Adjust. * tests/data/test-read-dwarf/test11-pr18828.so.abi: Adjust. * tests/data/test-read-dwarf/test12-pr18844.so.abi: Adjust. * tests/data/test-read-dwarf/test15-pr18892.so.abi: Adjust. * tests/data/test-read-dwarf/test16-pr18904.so.abi: Adjust. * tests/data/test-read-dwarf/test17-pr19027.so.abi: Adjust. * tests/data/test-read-dwarf/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: Adjust. * tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi: Adjust. * tests/data/test-read-dwarf/test20-pr19025-libvtkParallelCore-6.1.so.abi: Adjust. * tests/data/test-read-dwarf/test21-pr19092.so.abi: Adjust. * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: Adjust. * tests/data/test-read-dwarf/libtest23.so.abi: Adjust. 2016-09-21 Dodji Seketeli Fix misleading indentation issues * tools/abipkgdiff.cc (compare): Likewise. * tools/abisym.cc (main): Fix misleading indentation. 2016-08-30 Dodji Seketeli Bug 20534 - abipkgdiff wrongly displays the name of added binary files * tools/abipkgdiff.cc (compare): Show the name of the added binary, rather than its address. 2016-08-24 Dodji Seketeli Bug 20420 - Wrong ODR-based type comparison optimization on qualified type * src/abg-ir.cc: 2016-08-23 Dodji Seketeli Don't walk diff trees indefinitely when applying suppressions * src/abg-comparison.cc: 2016-07-27 Dodji Seketeli Control symbols exported from libabigail.so * VISIBILITY: New documentation about this visiblity business. * CONTRIBUTING: Update the "contributing guide" to refer to symbol visibility issues. * configure.ac: Define a variable VISIBILITY_FLAGS that is set to the -fvisibility=hidden flag to pass to GCC, when its available. * src/Makefile.am: Add VISIBILITY to source distribution. Also add COMPILING and COMMIT-LOG-GUIDELINES that were missing. * src/Makefile.am: Use the new $(VISIBILITY_FLAGS) when buiding the library. * tests/Makefile.am: Use the new $(VISIBILITY_FLAGS) when buiding tests. * tools/Makefile.am: Use the new $(VISIBILITY_FLAGS) when buiding tools. * src/abg-comp-filter.cc: Enclose inclusion of public headers in ABG_BEGIN_EXPORT_DECLARATIONS and ABG_END_EXPORT_DECLARATIONS to export the symbols of entities declared in there. * src/abg-comparison.cc: Likewise. * src/abg-config.cc: Likewise. * src/abg-corpus.cc: Likewise. * src/abg-diff-utils.cc: Likewise. * src/abg-dwarf-reader.cc: Likewise. * src/abg-hash.cc: Likewise. * src/abg-ini.cc: Likewise. * src/abg-ir.cc: Likewise. * src/abg-libxml-utils.cc: Likewise. * src/abg-libzip-utils.cc: Likewise. * src/abg-reader.cc: Likewise. * src/abg-suppression.cc: Likewise. * src/abg-tools-utils.cc: Likewise. * src/abg-traverse.cc: Likewise. * src/abg-viz-common.cc: Likewise. * src/abg-viz-dot.cc: Likewise. * src/abg-viz-svg.cc: Likewise. * src/abg-workers.cc: Likewise. * src/abg-writer.cc: Likewise. 2016-07-26 Dodji Seketeli Support DW_TAG_type_unit * src/abg-dwarf-reader.cc (TYPE_UNIT_DIE_SOURCE): New enumerator in enum die_source. (read_context::{type_unit_die_decl_map_, type_unit_die_type_map_, type_unit_die_wip_classes_map_, type_unit_die_wip_function_types_map_, type_unit_types_to_canonicalize_, type_units_tu_die_imported_unit_points_map_, type_section_die_parent_map_}): New data members. (read_context::{get_die_source, associate_die_to_decl, lookup_decl_from_die_offset, die_type_map, clear_die_type_maps, die_wip_classes_map, die_wip_function_types_map, types_to_canonicalize, clear_types_to_canonicalize, tu_die_imported_unit_points_map, die_parent_map}): Support TYPE_UNIT_DIE_SOURCE. (get_parent_die, get_scope_for_die): Likewise. (read_context::{lookup_decl_from_type_unit_die_offset, type_section_die_parent_map}): Define new member functions. (read_context::build_die_parent_maps): Build a DIE -> parent map for DIEs coming from the .debug_types section. * tests/data/test-read-dwarf/libtest23.so: New test input. * tests/data/test-read-dwarf/libtest23.so.abi: New reference output. * tests/data/test-read-dwarf/test23-first-tu.cc: Source code of the new binary above. * tests/data/test-read-dwarf/test23-second-tu.cc: Likewise. * tests/data/Makefile.am: Add the new test material above to source distribution. * tests/test-read-dwarf.cc (in_out_specs): Make this test harness execute over the new test input and reference output. 2016-07-26 Dodji Seketeli Misc code cleanup * src/abg-dwarf-reader.cc (build_function_decl): Use the more readable is_class_type rather than a dynamic_cast. 2016-07-26 Dodji Seketeli Generalize DIE source concept in DWARF reader * src/abg-dwarf-reader.cc (enum die_source): Define new enum. (operator++): Define new prefix increment operator for the die_source enum. (imported_unit_point::imported_unit_from_alt_di): Remove this data member. (imported_unit_point::imported_unit_die_source): New data member of type die_source. (read_context::primary_die_parent_map_): Renamed die_parent_map_ data member into this. (read_context::clear_per_corpus_data): Use the new clear_die_type_maps function, not die_type_map. Also use the new clear_types_to_canonicalize overload that takes no parameter. (read_context::{get_die_source, clear_die_type_maps, clear_types_to_canonicalize}): New member functions. (build_ir_node_from_die, die_die_attribute, get_parent_die) (get_scope_for_die, build_namespace_decl_and_add_to_ir) (build_type_decl, build_enum_type) (build_class_type_and_add_to_ir, build_qualified_type) (build_pointer_type_def, build_reference_type) (build_function_type, build_array_type, build_typedef_type) (build_var_decl, build_function_decl): Remove the boolean parameter that was designating the source of the DIE. If necessary, get the source of the DIE from inside the function using the new read_context::get_die_source. (read_debug_info_into_corpus): Adjust. (maybe_canonicalize_type, find_import_unit_point_between_dies) (maybe_canonicalize_type, read_context::{associate_die_to_decl, lookup_decl_from_die_offset, die_type_map, associate_die_to_type, lookup_type_from_die_offset, die_wip_classes_map, die_wip_function_types_map, is_wip_class_die_offset, is_wip_function_type_die_offset, types_to_canonicalize, schedule_type_for_late_canonicalization, canonicalize_types_scheduled, add_late_canonicalized_types_stats, perform_late_type_canonicalizing}): Take a die_source as the source of the DIE, not a boolean. Adjust the code of the function accordingly. (read_context::{tu_die_imported_unit_points_map}): Modified this to make it take a die_source and return the appropriate map depending on the source. (read_context::build_die_parent_relations_under): Turn the non-member static function build_die_parent_relations_under into a member function. (read_context::build_die_parent_maps): Turn the non-member static function build_die_parent_maps into a member function. Make this function build a DIE -> parent map also for type DIEs that are in the .type_units section. 2016-07-25 Dodji Seketeli Cleanup is_class and is_compatible_with_class_type * include/abg-fwd.h (is_class): Remove the overloads that take a decl_base or a type_base. Add one that takes a type_or_decl_base. (is_compatible_with_class_type): Make this take a reference to smart pointer, not just the smart pointer. * src/abg-ir.cc (is_class): Do the same as in the header file. (is_compatible_with_class_type): Likewise. 2016-07-22 Dodji Seketeli Add ABG_ASSERT_NOT_REACHED macro * include/abg-tools-utils.h (ABG_ASSERT_NOT_REACHED): New macro. * src/abg-dwarf-reader.cc (stt_to_elf_symbol_type) (stb_to_elf_symbol_binding, get_elf_class_size_in_bytes) (build_ir_node_from_die): Use the new ABG_ASSERT_NOT_REACHED macro in lieu of just calling abort(). 2016-07-22 Dodji Seketeli Prepare support for symbol visibility control * configure.ac: Detect compiler support for __attribute__((visibility("hidden")) and define the HAS_GCC_VISIBILITY_ATTRIBUTE macro accordingly. Update the configuration report. * src/abg-internal.h: New internal header file that defines macros to be used in the source code to control declaration visibility. * src/Makefile.am: Add abg-internal.h to source distribution. Add src/ to the include search path. 2016-07-06 Chenxiong Qi Make fedabipkgdiff consistent with Libabigail's other tests * configure.ac: Do not require Python dependencies itertools, unittest and StringIO anymore as they are not used anymore. Require new module tempfile now. Generate new executable script tests/mockfedabipkgdiff from tests/mockfedabipkgdiff.in. * doc/manuals/abipkgdiff.rst: Add doc for new option --show-identical-binaries to abipkgdiff * doc/manuals/fedabipkgdiff.rst: Add doc for new options --show-identical-binaries to fedabipkgdiff. * tools/abipkgdiff.cc (options::show_identical_binaries): New data member. (options::options): Initialize new data member. (display_usage): Add a new help string for the new --show-identical-binaries option. (parse_command_line): Parse the newq --show-identical-binaries command line switch. (pthread_routine_compare): When the comparison of two binaries is empty, if --show-identical-binaries was provided, then emit some output saying the comparison did yield the empty set. * tools/fedabipkgdiff (DEFAULT_ABIPKGDIFF): Store the default path to abipkgdiff in this new global variable. Naming this default path is useful because it can then be cleanly overloaded when using mock.patch. (build_path_to_abipkgdiff): Return the new DEFAULT_ABIPKGDIFF global variable. (cmd): Parse the new --show-identical-binaries command line switch. * tests/data/test-diff-pkg/test-dbus-glib-0.80-3.fc12.x86_64-report-0.txt: New reference output. * tests/data/test-fedabipkgdiff/test0-from-fc20-to-fc23-dbus-glib-report-0.txt: Likewise. * tests/data/test-fedabipkgdiff/test1-from-fc20-to-dbus-glib-0.106-1.fc23.x86_64-report-0.txt: Likewise. * tests/data/test-fedabipkgdiff/test2-dbus-glib-0.100.2-2.fc20--dbus-glib-0.106-1.fc23-report-0.txt: Likewise. * tests/data/test-fedabipkgdiff/test3-dbus-glib-0.100.2-2.fc20.i686--dbus-glib-0.106-1.fc23.i686-report-0.txt: Likewise. * tests/mockfedabipkgdiff.in: New uninstalled script template. * tests/runtestfedabipkgdiff.py.in (counter) (temp_file_or_dir_prefix, UtilsTest, RPMTest, LocalRPMTest) (RunAbipkgdiffTest, GetPackageLatestBuildTest, DownloadRPMTest) (BrewListRPMsTest, AssertionHelper, MockGlobalConfig) (BUILT_ABIPKGDIFF, CompareABIFromCommandLineTest): Remove these classes, global variables and functions. (FEDABIPKGDIFF, TEST_SRC_DIR, TEST_BUILD_DIR, INPUT_DIR) (OUTPUT_DIR, FEDABIPKGDIFF_TEST_SPECS): New global variables. (ensure_output_dir_created, run_fedabipkgdiff_tests, main): New functions. * tests/test-diff-pkg.cc (in_out_specs): Add tests/data/test-diff-pkg/test-dbus-glib-0.80-3.fc12.x86_64-report-0.txt to the set of reference outputs to consider. * tests/Makefile.am: Add non-installed script mockfedabipkgdiff to source distribution. Also added tests/data/test-diff-pkg/test-dbus-glib-0.80-3.fc12.x86_64-report-0.txt, tests/data/test-fedabipkgdiff/test0-from-fc20-to-fc23-dbus-glib-report-0.txt, tests/data/test-fedabipkgdiff/test1-from-fc20-to-dbus-glib-0.106-1.fc23.x86_64-report-0.txt, tests/data/test-fedabipkgdiff/test2-dbus-glib-0.100.2-2.fc20--dbus-glib-0.106-1.fc23-report-0.txt and tests/data/test-fedabipkgdiff/test3-dbus-glib-0.100.2-2.fc20.i686--dbus-glib-0.106-1.fc23.i686-report-0.txt to source distribution. 2016-07-13 Dodji Seketeli Fix spurious type size change report for distinct_diff * src/abg-comparison.cc (report_size_and_alignment_changes): Report size change only when the sizes are different. * tests/data/test-diff-filter/test33-report-0.txt: Adjust. 2016-07-13 Dodji Seketeli Bug 20199 - Consider integral type synonyms as being equal * src/abg-ir.cc (class integral_type): New class declaration and definition. (operator|, operator&, operator&=): New non-member bitwise operators for integral_type. (parse_integral_type_modifier, parse_base_integral_type) (parse_integral_type_modifier): New static function definitions. (type_decl::type_decl): Use the parse_integral_type to parse an integral type out of the current type_decl being built and transform the current type name into a canonical form. * tests/data/test-abidiff/test-PR18791-v0.so.abi: Adjust. * tests/data/test-abidiff/test-PR18791-v1.so.abi: Likewise. * tests/data/test-diff-filter/test30-pr18904-rvalueref-report0.txt: Likewise. * tests/data/test-diff-filter/test30-pr18904-rvalueref-report1.txt: Likewise. * tests/data/test-diff-filter/test33-report-0.txt: Likewise. * tests/data/test-diff-filter/test34-report-0.txt: Likewise. * 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: Likewise. * tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: Likewise. * tests/data/test-read-dwarf/test11-pr18828.so.abi: Likewise. * tests/data/test-read-dwarf/test12-pr18844.so.abi: Likewise. * tests/data/test-read-dwarf/test13-pr18894.so.abi: Likewise. * tests/data/test-read-dwarf/test14-pr18893.so.abi: Likewise. * tests/data/test-read-dwarf/test15-pr18892.so.abi: Likewise. * tests/data/test-read-dwarf/test16-pr18904.so.abi: Likewise. * tests/data/test-read-dwarf/test17-pr19027.so.abi: Likewise. * tests/data/test-read-dwarf/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: Likewise. * tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi: Likewise. * tests/data/test-read-dwarf/test20-pr19025-libvtkParallelCore-6.1.so.abi: Likewise. * tests/data/test-read-dwarf/test21-pr19092.so.abi: Likewise. * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: Likewise. * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Likewise. 2016-07-08 Dodji Seketeli Bug 20332 - too many ...'s counted as parameters * src/abg-dwarf-reader.cc (build_function_type): Create a variadic parameter just for the first DW_TAG_unspecified_parameters seen. * tests/data/test-diff-filter/test30-pr18904-rvalueref-report0.txt: Adjust. * tests/data/test-diff-filter/test30-pr18904-rvalueref-report1.txt: Adjust. * tests/data/test-read-dwarf/test16-pr18904.so.abi: Adjust. 2016-07-06 Dodji Seketeli Better recognize qualified void type * include/abg-ir.h (environment::is_void_type): Declare new member function. * src/abg-ir.cc (environment::is_void_type): Define new member function. * src/abg-dwarf-reader.cc (maybe_strip_qualification): Strip const qualifier from const void. * tests/data/test-diff-filter/test34-libjemalloc.so.2-gcc-6.1.0: New test input. * tests/data/test-diff-filter/test34-libjemalloc.so.2-intel-16.0.3: Likewise. * tests/data/test-diff-filter/test34-report-0.txt: New reference output. * tests/data/Makefile.am: Add the new files above to the source distribution. * tests/test-diff-filter.cc (in_out_specs): Compare the two new binaries above. * tests/data/test-diff-filter/test30-pr18904-rvalueref-report0.txt: Adjust. * tests/data/test-diff-filter/test30-pr18904-rvalueref-report1.txt: Adjust. * tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-0.txt: Adjust. * tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-1.txt: Adjust. * tests/data/test-read-dwarf/test1.abi: Adjust. * tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: Adjust. * tests/data/test-read-dwarf/test11-pr18828.so.abi: Adjust. * tests/data/test-read-dwarf/test12-pr18844.so.abi: Adjust. * tests/data/test-read-dwarf/test13-pr18894.so.abi: Adjust. * tests/data/test-read-dwarf/test14-pr18893.so.abi: Adjust. * tests/data/test-read-dwarf/test15-pr18892.so.abi: Adjust. * tests/data/test-read-dwarf/test16-pr18904.so.abi: Adjust. * tests/data/test-read-dwarf/test17-pr19027.so.abi: Adjust. * tests/data/test-read-dwarf/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: Adjust. * tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi: Adjust. * tests/data/test-read-dwarf/test20-pr19025-libvtkParallelCore-6.1.so.abi: Adjust. * tests/data/test-read-dwarf/test21-pr19092.so.abi: Adjust. * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: Adjust. * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Adjust. 2016-07-05 Dodji Seketeli Bug 20194 - Fail to recognize void type represented by DW_TAG_base_type * src/abg-dwarf-reader.cc (build_type_decl): Recognize a DW_TAG_base_type of size zero and of name "void" as a void type. * tests/data/test-diff-filter/test33-libelf.so.0.8.13-gcc: New binary test input. * tests/data/test-diff-filter/test33-libelf.so.0.8.13-intel16.0.3: Likewise. * tests/data/test-diff-filter/test33-report-0.txt: New reference output. * tests/data/Makefile.am: Add the new files above to source distribution. * tests/test-diff-filter.cc (in_out_specs): Make this test harness run over the new test inputs above. 2016-07-04 Dodji Seketeli Add a new overload for is_type_decl * include/abg-fwd.h (is_type_decl): Declare a new overload * src/abg-ir.cc (is_type_decl): Define a new overload. (function_decl::parameter::get_pretty_representation): Adjust. 2016-06-29 Chenxiong Qi Add --abipkgdiff option in manual and bash completion * doc/manuals/fedabipkgdiff.rst: Add description of --abipkgdiff option. Reformat paragraph. * bash-completion/fedabipkgdiff: Add --abipkgdiff 2016-06-29 Chenxiong Qi Add fedabipkgdiff bash completion to dist * bash-completion/Makefile.am: Add fedabipkgdiff * bash-completion/fedabipkgdiff: Change mode to 775 2016-06-29 Chenxiong Qi Update bash completion for fedabipkgdiff * bash-completion/fedabipkgdiff: New bash completion file. 2016-06-29 Dodji Seketeli Bump version number to 1.0.rc6 * configure.ac: Bump version number to 1.0.rc6 2016-06-29 Dodji Seketeli Update web page for 1.0.rc5 * doc/website/mainpage.txt: Update web page. 2016-06-27 Dodji Seketeli Update ChangeLog for 1.0.rc5 * ChangeLog: Update by doing "make update-changelog" in the build directory. 2016-06-27 Dodji Seketeli Update NEWS file in preparation for 1.0.rc5 * NEWS: update with the edited content of the command: git shortlog libabigail-1.0.rc4..HEAD 2016-06-27 Dodji Seketeli Fix python interpreter path for el6 * tests/runtestdefaultsupprs.py.in: Use the python interpreter at /usr/bin/python, not the one at /bin/python. 2016-06-24 Dodji Seketeli Misc cleanup in abg-reader.cc * src/abg-reader.cc (read_context::push_decl_to_current_scope): Pass the decl smart pointer by value. 2016-06-22 Dodji Seketeli Use ODR-based optimization on C/C++ translation unit only * src/abg-ir.cc (strip_typedef): Set the translation unit of the new ABI artifact. (type_base::get_canonical_type_for): Perform the ODR-based optimization only for ABI artifact in C and C++ language translation units. * src/abg-dwarf-reader.cc (build_ir_node_from_die): Assert that the new ABI artifact has its translation unit set. * src/abg-reader.cc (read_context::{push_decl_to_current_scope, push_and_key_type_decl}): Set the translation unit of the current decl, irrespective of if it was added to the current scope or not. Assert that the decl that was newly pushed to the current scope is added to the current translation unit. 2016-06-10 Dodji Seketeli Misc white space and comment cleanups * include/abg-ir.h (typedef type_or_decl_base): Cleanup comment. * src/abg-ir.cc (struct type_or_decl_base::priv): Fix comment. 2016-06-10 Dodji Seketeli Cleanup function_decl::parameter::get_pretty_representation * src/abg-ir.cc (function_decl::parameter::get_pretty_representation): Assert that the environment is always non-nil. Then no needs to check for it being non-nil anymore. Use is_type_decl instead of dynamic_pointer_cast. 2016-06-07 Chenxiong Qi Fix package NVR comparison in fedabipkgdiff * configure.ac: Add new dependency. * tests/runtestfedabipkgdiff.py.in (builds): Add new builds for running tests to test selecting latest build from a package. (packages): Add new package gnutls. (GetPackageLatestBuildTest.{test_get_latest_one, test_cannot_find_a_latest_build_with_invalid_distro}): Use new builds of package gnutls to run tests. * tools/fedabipkgdiff (cmp_nvr): New function used to compare nvrs by Python built-in function sorted. (Brew.listBuilds): Use the new cmp_nvr function. 2016-06-06 Chenxiong Qi Bug 20135 - Make fedabipkgdiff compare ABIs using devel packages * doc/manuals/fedabipkgdiff.rst: Add documentation for the new --no-devel-pkg command line option, as well as for the new default behaviour of taking devel packages into account during ABI comparison. * tools/fedabipkgdiff (PkgInfo): Add new attribute devel_package. (RPM.is_devel): New property to determine if rpm is a development package. (LocalRPM._find_rpm): New method to find a specific rpm. (LocalRPM.find_debuginfo): Use new method _find_rpm to find debuginfo package. (LocalRPM.find_devel): New method to find an associated development package. (Brew.select_rpms_from_a_build): RPMs selector method is changed to select development package also. (abipkgdiff): Construct and run abipkgdiff with and without --devel-pkg[12] options. (magic_construct): Construct PkgInfo with development package. (run_abipkgdiff): Run abipkgdiff against rpms with development packages. (diff_local_rpm_with_latest_rpm_from_koji): Find development package, and call method abipkgdiff with development package. (build_commandline_args_parser): add new option --no-devel-pkg. * tests/runtestfedabipkgdiff.py.in (packages): Add new package nss-util. (builds): Add new builds of nss-utils, nss-util-3.12.6-1.fc14 and nss-util-3.24.0-2.0.fc25. (rpms): Add new associated rpms of the two new builds. (AssertionHelper.assert_functions_changes_summary): New method to match and assert functions changes summary. (AssertionHelper.assert_abi_comparison_result): Changed to support to help assert functions changes summary. (MockGlobalConfig.{no_devel_pkg, check_all_subpackages}): New fake options with default value for running tests. (RPMTest.setUp): add new development package for running test case. (RPMTest.test_is_devel): New test to test is_devel property. (RunAbipkgdiffTest.setUp): Add new development packages for running test case. (RunAbipkgdiffTest.{test_all_success, test_all_failure, test_partial_failure}): Mock global config. (RunAbipkgdiffWithDSOOnlyOptionTest): Removed. (CompareABIFromCommandLineTest.test_compare_with_no_devel_pkg): New test to test fedabipkgdiff with or without --no-devel-pkg option. * tests/data/Makefile.am: Add new rpms. * tests/data/test-fedabipkgdiff/packages/nss-util/3.12.6/1.fc14/ x86_64/nss-util-3.12.6-1.fc14.x86_64.rpm: New rpm for running tests. * tests/data/test-fedabipkgdiff/packages/nss-util/3.12.6/1.fc14/ x86_64/nss-util-debuginfo-3.12.6-1.fc14.x86_64.rpm: New rpm for running tests. * tests/data/test-fedabipkgdiff/packages/nss-util/3.12.6/1.fc14/ x86_64/nss-util-devel-3.12.6-1.fc14.x86_64.rpm: New rpm for running tests. * tests/data/test-fedabipkgdiff/packages/nss-util/3.24.0/2.0.fc25/ x86_64/nss-util-3.24.0-2.0.fc25.x86_64.rpm: New rpm for running tests. * tests/data/test-fedabipkgdiff/packages/nss-util/3.24.0/2.0.fc25/ x86_64/nss-util-debuginfo-3.24.0-2.0.fc25.x86_64.rpm: New rpm for running tests. * tests/data/test-fedabipkgdiff/packages/nss-util/3.24.0/2.0.fc25/ x86_64/nss-util-devel-3.24.0-2.0.fc25.x86_64.rpm: New rpm for running tests. 2016-06-03 Dodji Seketeli Improve python modules detection * configure.ac: Include autoconf-archive/ax_check_python_modules.m4 rather than autoconf-archive/ax_python_module.m4. Use AX_CHECK_PYTHON_MODULES rather than AX_PYTHON_MODULE. * Makefile.am: Add the new file autoconf-archive/ax_check_python_modules.m4 to source distribution and remove the older autoconf-archive/ax_python_module.m4 one. * autoconf-archive/ax_check_python_modules.m4: New file. * autoconf-archive/ax_python_module.m4: Remove. 2016-05-30 Chenxiong Qi Add integration tests for fedabipkgdiff * configure.ac: do not detect shutil module. * tests/runtestfedabipkgdiff.py.in: do not import shutil anymore. (BUILT_ABIPKGDIFF): new global variable to reference the abipkgdiff built from source code, as the new test case' tests require this command directly rather than mocking the global_config. (test_data_dir): convert variable name to uppercase, reference to the test data directory by absolute path instead of relative path. (TEST_TOPDIR): new global variable to use data directory as the topdir passed to fedabpkgdiff to download rpms. (TEST_DOWNLOAD_CACHE_DIR): new global variable referencing a fake download cache directory for tests only. (packages, builds, rpms): new global variables as a fake storage holding packages, builds and rpms. (AssertionHelper): new class helping to assert abipkgdiff result easily. (MockClientSession): new class to mock koji.ClientSession. (MockGlobalConfig.abipkgdiff): set this option to global variable BUILT_ABIPKGDIFF. (MockKojiClientSessin): removed. (mock_get_session): removed. (GetPackageLatestBuildTest.{test_get_latest_one, test_cannot_find_a_latest_build_with_invalid_distro, test_cannot_find_a_latest_build_with_invalid_distro}): mock koji.ClientSession with new class MockClientSession. Remove invalid documentation from docstring. Use new package rather than httpd. (DownloadRPMTest.setUp): remove self.download_dir and use global TEST_DOWNLOAD_CACHE_DIR. (DownloadRPMTest.tearDown): do not remove download cache directory. (DownloadRPMTest.make_remote_file_url): do not omit positional argument specifiers in string format. (DownloadRPMTest.{test_succeed_to_download_a_rpm, test_failed_to_download_a_rpm}): set fake download cache directory to mocked get_download_dir in mock.patch decorator. (BrewListRPMsTest.test_select_specific_rpms): use new MockClientSession to mock koji.ClientSession. Rewrite test by using the new package listed in global variable packages. (RunAbipkgdiffWithDSOOnlyOptionTest.{test_abipkgdiff_with_dso_only, test_abipkgdiff_without_dso_only}): set fake download cache directory to mocked get_download_dir in mock.patch decorator. (CompareABIFromCommandLineTest): new integration test case. * tests/data/test-fedabipkgdiff/packages/dbus-glib/0.100.2/2.fc20/ i686/dbus-glib-0.100.2-2.fc20.i686.rpm: new rpm for running tests. * tests/data/test-fedabipkgdiff/packages/dbus-glib/0.100.2/2.fc20/ i686/dbus-glib-debuginfo-0.100.2-2.fc20.i686.rpm: new rpm for running tests. * tests/data/test-fedabipkgdiff/packages/dbus-glib/0.100.2/2.fc20/ i686/dbus-glib-devel-0.100.2-2.fc20.i686.rpm: new rpm for running tests. * tests/data/test-fedabipkgdiff/packages/dbus-glib/0.100.2/2.fc20/ x86_64/dbus-glib-0.100.2-2.fc20.x86_64.rpm: new rpm for running tests. * tests/data/test-fedabipkgdiff/packages/dbus-glib/0.100.2/2.fc20/ x86_64/dbus-glib-debuginfo-0.100.2-2.fc20.x86_64.rpm: new rpm for running tests. * tests/data/test-fedabipkgdiff/packages/dbus-glib/0.100.2/2.fc20/ x86_64/dbus-glib-devel-0.100.2-2.fc20.x86_64.rpm: new rpm for running tests. * tests/data/test-fedabipkgdiff/packages/dbus-glib/0.106/1.fc23/ i686/dbus-glib-0.106-1.fc23.i686.rpm: new rpm for running tests. * tests/data/test-fedabipkgdiff/packages/dbus-glib/0.106/1.fc23/ i686/dbus-glib-debuginfo-0.106-1.fc23.i686.rpm: new rpm for running tests. * tests/data/test-fedabipkgdiff/packages/dbus-glib/0.106/1.fc23/ i686/dbus-glib-devel-0.106-1.fc23.i686.rpm: new rpm for running tests. * tests/data/test-fedabipkgdiff/packages/dbus-glib/0.106/1.fc23/ x86_64/dbus-glib-0.106-1.fc23.x86_64.rpm: new rpm for running tests. * tests/data/test-fedabipkgdiff/packages/dbus-glib/0.106/1.fc23/ x86_64/dbus-glib-debuginfo-0.106-1.fc23.x86_64.rpm: new rpm for running tests. * tests/data/test-fedabipkgdiff/packages/dbus-glib/0.106/1.fc23/ x86_64/dbus-glib-devel-0.106-1.fc23.x86_64.rpm: new rpm for running tests. * tests/data/Makefile.am: add new rpms. 2016-05-31 Dodji Seketeli Bug 19967 - System-level suppressions for glibc * default.abignore: Add initial suppression specifications for glibc. 2016-05-31 Dodji Seketeli Escape all characters when reading a string in ini files * src/abg-ini.cc (read_context::peek): Take an output parameter to tell the caller when this function escaped the returned character. Added an overload without this new parameter. (read_context::read_string): Accept all characters as part of the string. * tests/data/test-diff-suppr/test7-var-suppr-9.suppr: New test input. * tests/data/test-diff-suppr/test7-var-suppr-report-9.txt: New test reference output. * tests/data/Makefile.am: Add the files above to source distribution. * tests/test-diff-suppr.cc (in_out_spec): Run a new comparison of libtest7-var-suppr-v{0,1}.so this time using the new test7-var-suppr-9.suppr specification that exercices a string with the escaped characters that we were having difficulty with. 2016-05-31 Dodji Seketeli Don't require all version symbol sections to present * src/abg-dwarf-reader.cc (get_symbol_versionning_sections): Allow returning just some of the three version-related section, not necessarily all of them. Adjust comment. (get_version_for_symbol): Be ready to not necessarily having the three version-related sections available. 2016-05-30 Dodji Seketeli Bug 20180 - Support system-wide suppression specifications * doc/manuals/abidiff.rst: Document the default suppression scheme, its interaction with the --supprs option and the new --no-default option. * doc/manuals/abipkgdiff.rst: Likewise. * doc/manuals/fedabipkgdiff.rst: Likewise. * configure.ac: Generate the tests/runtestdefaultsupprs.py file from the new tests/runtestdefaultsupprs.py.in template. * default.abignore: New file. * Makefile.am: Add it to source distribution. * src/Makefile.am: Define the ABIGAIL_ROOT_SYSTEM_LIBDIR preprocessor macro that is set the value of the $libdir autotools macro. * include/abg-tools-utils.h: Update copyright years. (get_system_libdir, get_default_system_suppression_file_path) (get_default_user_suppression_file_path) (load_default_system_suppressions) (load_default_user_suppressions): Declare new functions * src/abg-tools-utils.cc (get_system_libdir) (get_default_system_suppression_file_path) (get_default_user_suppression_file_path) (load_default_system_suppressions) (load_default_user_suppressions): Define new functions. (is_regular_file): Amend this so that it return true for symlinks to regular files too. (is_dir): Amend this so that it returns true for symlinks to directories too. * tools/abidiff.cc (options::no_default_supprs): New data member. (options::options): Initialize the new data member. (display_usage): Display a new help string for the new --no-default-suppression command line option. (parse_command_line): Parse this new command line option. (set_diff_context_from_opts): Load the default suppression specifications, unless --no-default-suppression or --supprs was provided. * tools/abipkgdiff.cc (options::no_default_supprs): New data member. (options::options): Initialize the new data member. (parse_command_line): Parse the new --no-default-suppression command line option. (main): Load the default suppression specifications, unless --no-default-suppression or --supprs was provided. * tools/fedabipkgdiff (abipkgdiff): Add --no-default-suppression to the invocation of abipkgdiff if it was provided on the command line. (build_commandline_args_parser): Parse the new --no-default-suppression command line option. * tests/runtestdefaultsupprs.py.in: New test harness template. * tests/Makefile.am: Add the new runtestdefaultsupprs.py to the set of tests. * tests/data/test-default-supprs/test0-type-suppr-0.suppr: New test input. * tests/data/test-default-supprs/test0-type-suppr-report-0.txt: Likewise. * tests/data/test-default-supprs/test0-type-suppr-v0.o: Likewise. * tests/data/test-default-supprs/test0-type-suppr-v1.o: Likewise. * tests/data/test-default-supprs/dirpkg-1-dir-report-0.txt: Likewise. * tests/data/test-default-supprs/dirpkg-1-dir1: Likewise. * tests/data/test-default-supprs/dirpkg-1-dir2: Likewise. * tests/data/Makefile.am: Add new the new tests input above to Makefile.am. * tests/runtestcanonicalizetypes.sh.in: Pass --no-default-suppression to abidiff invocations. * tests/runtestdefaultsupprs.py.in: Likewise. * tests/test-abidiff-exit.cc: Likewise. * tests/test-diff-dwarf-abixml.cc: Likewise. * tests/test-diff-filter.cc: Likewise. * tests/test-diff-suppr.cc: Likewise. * tools/abidiff.cc: Likewise. 2016-05-30 Dodji Seketeli Add --abipkgdiff option to fedabipkgdiff * tools/fedabipkgdiff (build_path_to_abipkgdiff): Define new function. (abipkgdiff): Invoke the new build_path_to_abipkgdiff() here. (build_commandline_args_parser): Parse the new --abipkgdiff option. 2016-05-28 Dodji Seketeli Better diagnostics when abipkgdiff has an extra argument * tools/abipkgdiff.cc (options::wrong_arg): New data member. (parse_command_line): Set options::wrong_arg to the wrong argument passed. (main): Tell wrong argument case apart, and report it. 2016-05-26 Dodji Seketeli Fix suppr spec wording in abipkgdiff manual * doc/manuals/abipkgdiff.rst: Fix the wording for the --suppr option. 2016-05-26 Dodji Seketeli Update reference to tools in libabigail-concepts manual * doc/manuals/libabigail-concepts.rst: Do not refer just to abidiff when talking about suppression specification. Also refer to abipkgdiff and other tools. 2016-05-30 Dodji Seketeli Fix some wording in the Libabigail overview manual page * doc/manuals/libabigail-overview.rst: Cleanup some confusion about Abigail-the-framework and libabigail-the-library. 2016-05-25 Dodji Seketeli Add test data for tests/runtestfedabipkgdiff.py * tests/data/test-fedabipkgdiff/dbus-glib-0.104-3.fc23.x86_64.rpm: New file. * tests/data/test-fedabipkgdiff/dbus-glib-0.80-3.fc12.x86_64.rpm: Likewise. * tests/data/test-fedabipkgdiff/dbus-glib-debuginfo-0.104-3.fc23.x86_64.rpm: Likewise. * tests/data/test-fedabipkgdiff/dbus-glib-debuginfo-0.80-3.fc12.x86_64.rpm: Likewise. 2016-05-25 Dodji Seketeli Add a 'check-valgrind' target to the top-most Makefile.am * Makefile.am (check-valgrind): Add this new target here. 2016-05-21 Chenxiong Qi Bug 20085 - Add --dso-only option to fedabipkgdiff * tools/fedabipkgdiff: Do not import shlex anymore. (ABIDIFF_OK, ABIDIFF_ERROR, ABIDIFF_USAGE_ERROR) (ABIDIFF_ABI_CHANGE): New global constant variables. (abipkgdiff): Pass the --dso-only option to the abipkgdiff command line tool, if that option was passed to fedabipkgdiff. Build this abipkgdiff command invocation from an array of strings, rather than from formatting a string. This makes us get rid of the shlex module. Fix typo in dry-run logged string. If there was an internal error reported by abipkgdiff, report it to stderr. (build_commandline_args_parser): Parse the --dso-only command line option. * tests/runtestfedabipkgdiff.py.in (fedabipkgdiff_mod): Fix a typo in initializing this global variable. (test_data_dir): New global variable, that is used to reference tests/data/test-fedabipkgdiff/. (RunAbipkgdiffTest.{test_all_success, test_partial_failure}): Fix typo. (Mockglobalconfig.{koji_topdir, dso_only}): New data members. (GetPackageLatestBuildTest.{test_get_latest_one, test_cannot_find_a_latest_build_with_invalid_distro, test_succeed_to_download_a_rpm, test_failed_to_download_a_rpm}): Fix typo. (BrewListRPMsTest.test_select_specific_rpms): Fix typo. (RunAbipkgdiffWithDSOOnlyOptionTest): New test case class. * doc/manuals/fedabipkgdiff.rst: update document for this new --dso-only option. * tests/data/test-fedabipkgdiff/dbus-glib-0.104-3.fc23.x86_64.rpm: New symbolic link to test-diff-pkg/dbus-glib-0.104-3.fc23.x86_64.rpm. * tests/data/test-fedabipkgdiff/dbus-glib-0.80-3.fc12.x86_64.rpm: New symbolic link to test-diff-pkg/dbus-glib-0.80-3.fc12.x86_64.rpm. * tests/data/test-fedabipkgdiff/dbus-glib-debuginfo-0.104-3.fc23.x86_64.rpm: New symbolic link to test-diff-pkg/dbus-glib-debuginfo-0.104-3.fc23.x86_64.rpm. * tests/data/test-fedabipkgdiff/dbus-glib-debuginfo-0.80-3.fc12.x86_64.rpm: New symbolic link to test-diff-pkg/dbus-glib-debuginfo-0.80-3.fc12.x86_64.rpm. * tests/data/Makefile.am: add tests/data/test-fedabipkgdiff so that this data directory and all things within it can be included in tarball. 2016-05-24 Sinny Kumari Change parent directory for keeping extracted packages in abipkgdiff * tools/abipkgdiff.cc (extracted_packages_parent_dir): Change TMPDIR environment variable to XDG_CACHE_HOME and default temporary parent directory to $HOME/.cache/libabigail/ 2016-05-20 Dodji Seketeli Make abi{pkg}diff filter out changes about private types * include/abg-comp-filter.h: Update copyright year. * src/abg-comp-filter.cc (has_virtual_mem_fn_change): Make this static function become exported. (has_virtual_mem_fn_change): Declare new function. * include/abg-suppression.h (suppression_base::{get,set}_is_artificial): Declare new accessors. (type_suppression::get_source_locations_to_keep): Return an unordered set of strings, not a vector. Add a non-const overload. (type_suppression::set_source_locations_to_keep): Set an unordered set of strings, not a vector. * src/abg-suppression.cc (suppression_base::priv::is_artificial_): New data member. (suppression_base::priv::priv): Initialize the new data member. (suppression_base::{get,set}_is_artificial): Define new accessors. (type_suppression::priv::source_locations_to_keep_): Change the vector of strings representing source file names into unordered set of string. (type_suppression::get_source_locations_to_keep): Return an unordered set of strings, not a vector. Define a non-const overload. (type_suppression::set_source_locations_to_keep): Set an unordered set of strings, not a vector. (type_suppression::suppresses_diff): Make this suppress virtual member function diffs if the enclosing type of the changed virtual member is suppressed by the current type_suppression. (read_type_suppression): Adjust to use the fact that the source locations are not stored in an unordered set, not in a vector anymore. Otherwise, using a vector here make things too slow. (type_suppression::suppresses_type): Likewise. Also, If the type we are looking at has no location because it's a true opaque type and if the current suppression is an artificial suppression that is meant to suppress change reports about non-public types, then suppress the type. * include/abg-tools-utils.h (gen_suppr_spec_from_headers): Declare new public function. * src/abg-tools-utils.cc (PRIVATE_TYPES_SUPPR_SPEC_NAME): Define a new constant variable. (handle_fts_entry): Define new static function. (gen_suppr_spec_from_headers): Define new public function. * src/abg-comparison.cc (corpus_diff::priv::apply_suppressions_to_added_removed_fns_vars): If a type suppression suppresses a given class C, make it change added/removed virtual functions whose enclosing type is C. * tools/abidiff.cc (options::{headers_dir1, headers_dir2}): New data members. (display_usage): Add help strings for --headers-dir1 and --headers-dir2. (parse_command_line): Parse the new --headers-dir1 and --headers-dir2 options. (set_diff_context_from_opts): Generate suppression specifications to filter out changes on private types, if --headers-dir1 or --headers-dir2 is given. * tools/abipkgdiff.cc (options::{devel_package1, devel_package2}): New data members. (typedef package_sptr): New typedef. (enum package::kind): New enum. (package::kind_): New data member. This replaces ... (package::is_debug_info_): ... this data member. (package::{devel_package_, private_types_suppressions_}): New data members. (package::package): Adjust. (package::get_kind): Define new member function. This replaces ... (package::is_debug_info): ... this member function overload. (package::set_kind): Define new member functin. It replaces ... (package::is_debug_info): ... this member function overload. (package::{devel_package, private_types_suppressions}): Define new accessors. (package::erase_extraction_directies): Erase the sub-directory where development packages are extracted to. (compare_args::private_types_suppr{1,2}): New data members. (compare_args::compare_args): Adjust. (display_usage): Add help strings for --devel-pkg1/--devel-pkg2. (compare): Make the overload that compares elf files take private types suppressions. Add the private types suppressions to the diff context. (pthread_routine_compare): Adjust the call to compare. (maybe_create_private_types_suppressions): Define new static function. (pthread_routine_extract_pkg_and_map_its_content): If a devel package was specified for the main package then extract it in parallel with the other package extraction. When the extraction is done, create private types suppressions by visiting the directories that contain the header files. (compare): In the overload that compares packages by scheduling comparison of individual elf files that are in the packages, pass in the private type suppressions too. (parse_command_line): Parse the new --devel-pkg{1,2} command line options. (main): Associate the devel package to the main package, if the --devel-pkg{1,2}. * doc/manuals/abidiff.rst: Add documentation about the new --headers-dir1 and --headers-dir2 options. * doc/manuals/abipkgdiff.rst: Likewise, add documentation about the new --devel-pkg1 and --devel-pkg2 libraries. * tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-1.txt: New test reference output. * tests/data/test-diff-pkg/tbb-devel-4.1-9.20130314.fc22.x86_64.rpm: New test input package. * tests/data/test-diff-pkg/tbb-devel-4.3-3.20141204.fc23.x86_64.rpm: Likewise. * tests/test-diff-pkg.cc b/tests/test-diff-pkg.cc (InOutSpec::{first,second}_in_devel_package_path): New data members. (in_out_specs): Adjust. Also, add a new entry describing the new test inputs above. (test_task::perform): When the new test entry contains devel packages, pass them to abipkgdiff using the --devel1 and --devel2 options. * tests/data/test-diff-suppr/test30-include-dir-v0/test30-pub-lib-v0.h: A new test input source code. * tests/data/test-diff-suppr/test30-include-dir-v1/test30-pub-lib-v1.h: Likewise. * tests/data/test-diff-suppr/test30-priv-lib-v0.cc: Likewise. * tests/data/test-diff-suppr/test30-priv-lib-v0.h: Likewise. * tests/data/test-diff-suppr/test30-priv-lib-v1.cc: Likewise. * tests/data/test-diff-suppr/test30-priv-lib-v1.h: Likewise. * tests/data/test-diff-suppr/test30-pub-lib-v0.cc: Likewise. * tests/data/test-diff-suppr/test30-pub-lib-v0.so: Add new test binary input. * tests/data/test-diff-suppr/test30-pub-lib-v1.cc: Add new test input source code. * tests/data/test-diff-suppr/test30-pub-lib-v1.so: Add new test binary input. * tests/data/test-diff-suppr/test30-report-0.txt: Add new test reference output. * tests/data/test-diff-suppr/test30-report-1.txt: Add new test reference output. * tests/test-diff-suppr.cc (InOutSpec::headers_dir{1,2}): New data members. (InOutSpec::abidiff_options): Renamed the bidiff_options data member into this. (in_out_specs): Adjust. Also, added the new test input above to this. (main): Adjust to invoke abidiff with the new --hd1 and --hd2 options if the input specs for the tests has the new InOutSpec::headers_dir{1,2} data member set. Renamed bidiff into abidiff. * tests/data/Makefile.am: Add the new test inputs to the source distribution. 2016-05-24 Dodji Seketeli Fix the number of removed functions in change report * src/abg-suppression.cc (corpus_diff::report): Show the net number of removed functions, not the total number of the removed functions. 2016-05-23 Dodji Seketeli Document how to handle regression tests in CONTRIBUTING * CONTRIBUTING: Add a section about regression tests. * Makefile.am: Add a check-valgrind-recursive target. 2016-05-21 Dodji Seketeli Fix whitespaces in autotools files * configure.ac: Fix some white spaces. * tests/Makefile.am: Likewise. 2016-05-22 Dodji Seketeli Fix white space in abg-comparison.cc * src/abg-comparison.cc (struct diff_context::priv): Fix indentation. 2016-05-21 Dodji Seketeli Fix bash completion configure status * configure.ac: If bash completion is disabled, say so. 2016-05-22 Dodji Seketeli Enhance API doc for diff_context::add_diff * src/abg-comparison.cc (diff_context::add_diff): Enhance the API doc string. 2016-05-20 Dodji Seketeli Add missing API doc strings * src/abg-comparison.cc (diff::diff) (decl_diff_base::decl_diff_base, distinct_diff::distinct_diff) (base_diff::base_diff, scope_diff::scope_diff) (fn_parm_diff::fn_parm_diff) (function_type_diff::function_type_diff) (type_decl_diff::type_decl_diff, typedef_diff::typedef_diff) (translation_unit_diff::translation_unit_diff) (corpus_diff::corpus_diff): Add missing API doc strings. 2016-05-20 Dodji Seketeli Optimize out some shared_ptr use * include/abg-ir.h (pointer_type_def::get_naked_pointed_to_type): Declare new member function. * src/abg-ir.cc (pointer_type_def::priv::naked_pointed_to_type_): New data member. (pointer_type_def::priv::priv): Adjust to initialize the new data member. (pointer_type_def::pointer_type_def): Adjust to use the constructor pointer_type_def::priv::priv to initialize the pointed-to type (including its new naked pointer variant). So we do not have to initialize the priv_->pointed_to_type_ explicitely in the constructor anymore. (pointer_type_def::get_naked_pointed_to_type): Define new data member. (pointer_type_def::get_qualified_name): Use a naked pointer to the pointed-to type, rather than a smart pointer. 2016-05-20 Dodji Seketeli Light optimizations by passing reference to smart pointers around * include/abg-fwd.h (get_type_name): Take a reference to type_sptr. * src/abg-ir.cc (get_type_name): Take a reference to type_sptr. (suppression_base::priv::{get_file_name_regex, get_file_name_not_regex, get_soname_regex, get_soname_not_regex}): Return a reference to regex_t_sptr. 2016-05-20 Dodji Seketeli Minimize number of string::length calculation * src/abg-tools-utils.cc (string_ends_with): Call string::length just once on each instance of string that matters. 2016-05-20 Dodji Seketeli Avoid unnecessary computation of type name in suppression evaluation * src/abg-suppression.cc (type_suppression::suppresses_type): If neither the type suppression "name" or "name_regex" properties where provided in the suppression specification, then do not try to look at the type name. 2016-05-22 Dodji Seketeli Plug leak of diffs of member variables of class type * include/abg-comparison.h (diff_wptr, unordered_diff_sptr_set): New typedefs. (struct diff_sptr_hasher): Define new type. (diff_context::keep_diff_alive): Declare new member function. (diff::children_nodes): Return a vector of diff*, rather than a vector of diff_sptr. * src/abg-comparison.cc (diff_context::priv::live_diffs_): New data member. (diff_context::keep_diff_alive): Define new data member. (diff::priv::children_): Make this be a vector of diff*, rather than a vector of diff_sptr. (diff_less_than_functor::operator()): Add a new overload for diff*. Make the existing overload of diff_sptr use the new one. (diff::children_nodes): Adjust; (diff::append_child_node): Make sure the child node is kept alive. Only add the naked pointer to the child node to the vector of children. (diff::traverse): Adjust. (var_diff::priv::type_diff_): Make this be a weak pointer, rather than a shared pointer. (var_diff::type_diff): The var_diff::priv::type_diff_ data member is now a weak pointer, so make this accessor convert it to a shared pointer. (corpus_diff::priv::children_): Turn this into a vector of diff*, rather than a vector of diff_sptr. (corpus_diff::children_nodes): Adjust. (corpus_diff::append_child_node): Make sure the child node is kept alive. Only add the naked pointer to the child node to the vector of children. (category_propagation_visitor::visit_end): Adjust. (suppression_categorization_visitor::visit_end): Adjust. (redundancy_marking_visitor::{visit_begin, visit_end}): Adjust. 2016-05-20 Dodji Seketeli Speedup diff node child insertion * src/abg-comparison.cc (corpus_diff::append_child_node): Insert the new child at the right point in the vector of children, so that it remains sorted. 2016-05-21 Dodji Seketeli Fix invocation of delete operator in test-read-dwarf.cc * tests/test-read-dwarf.cc (main): Call delete[], not delete. 2016-05-22 Dodji Seketeli Plug leak of debug info handles * configure.ac: Check the presence of dwarf_getalt in libdw. If it's present, define the preprocessor macro LIBDW_HAS_DWARF_GETALT. Update the autoconf configuration summary. * src/abg-dwarf-reader.cc: Add config.h. (find_alt_debug_info_location): Factorize this out of ... (find_alt_debug_info): ... this function. Use dwarf_getalt if present, otherwise, keep using dwfl_standard_find_debuginfo. In the later case, return the file descriptor opened to access the alternate debug info, by parameter, so that the caller can fclose it. (read_context::alt_fd_): New data member. (read_context::read_context): Initialize the new alt_fd_ data member. (read_context::load_debug_info): Store the file descriptor used to access the alternate debug info into the new alt_fd_ data member. (read_context::~read_context): New desctructor. (get_soname_of_elf_file, get_type_of_elf_file): Free the elf handle. (read_context::load_debug_info): Be paranoid in making sure we never override alt_dwarf_. * tests/data/test-alt-dwarf-file/test0-report.txt: Adjust. 2016-05-22 Dodji Seketeli Plug leak of shared private data of class_diff type * include/abg-comparison.h (class_diff::get_priv): Declare new member function. (class_diff::get_priv): Define new member function. (class_diff::{chain_into_hierarchy, base_changes, deleted_bases, inserted_bases, changed_bases, base_changes, member_types_changes, member_types_changes, data_members_changes, inserted_data_members, deleted_data_members, member_fns_changes, changed_member_fns, member_fns_changes, deleted_member_fns, inserted_member_fns, member_fn_tmpls_changes, member_class_tmpls_changes, member_class_tmpls_changes, report}): Rather than accessing class_diff::priv directly, use the new class_diff::get_priv. 2016-05-21 Dodji Seketeli Remove circular ref from class_decl::priv::definition_of_declaration * include/abg-ir.cc (class_decl::get_definition_of_declaration): Return a shared pointer, rather than a reference to a shared pointer. * src/abg-ir.cc (class_decl::priv::definition_of_declaration_): Make this be a weak pointer. (class_decl::get_definition_of_declaration): Likewise. And return the shared pointer built out of the weak pointer we have in there now. 2016-05-21 Dodji Seketeli Plug leak of regex_t in suppression engine * include/abg-sptr-utils.h (build_sptr): Declare an overload that allocates a T* and wraps it into a shared_ptr. (build_sptr): Declare a specialization for regex_t. * src/abg-corpus.cc (build_sptr()): Define the specialization here. * src/abg-suppression.ccp (suppression_base::priv::{get_file_[not]_name_regex, get_soname_[not]_regex}): Use the new build_sptr(). (type_suppression::priv::{get_type_name_regex, get_source_location_to_keep_regex}): Likewise. (function_suppression::parameter_spec::priv::get_type_name_regex): Likewise. (function_suppression::priv::{get_name_regex, get_return_type_regex, get_symbol_name_regex, get_symbol_version_regex}): Likewise. (variable_suppression::priv::{get_name_regex, get_symbol_name_regex, get_symbol_version_regex, get_type_name_regex}): Likewise. 2016-05-18 Dodji Seketeli Plug leak of diff_context_sptr after calling compute_diff * src/abg-comparison.cc (diff::priv::ctxt_): Make this a weak_ptr. (diff::priv::get_context): Convert the weak pointer to the context into a shared_ptr and return it. (diff::priv::is_filtered_out): Adjust to use diff::priv::get_context() to access the context. (diff::context): Likewise. (corpus_diff::priv::ctxt_): Make this a weak_ptr. (corpus_diff::priv::priv): Add a new overload that takes two corpora and a diff context. (corpus_diff::priv::get_context): Convert the weak pointer to the context into a shared_ptr and return it. (corpus_diff::priv::ensure_lookup_tables_populated): Adjust to use the new corpus_diff::priv::get_context to get the context. (variable_is_suppressed): Likewise. (corpus_diff::priv::{apply_suppressions_to_added_removed_fns_vars, apply_filters_and_compute_diff_stats, emit_diff_stats, categorize_redundant_changed_sub_nodes, clear_redundancy_categorization}): Likewise. (corpus_diff::{corpus_diff, context, apply_filters_and_suppressions_before_reporting}): Adjust. * tools/abipkgdiff.cc (compare): Make the overload that compares elf binaries take a diff context output parameter. After the context is created by this function, it's return to the caller, so that it's life time is bound to the scope this function was called from. (pthread_routine_compare): Create a shared pointer to hold a reference on a diff context. Pass that shared pointer by reference to the compare function that compares elf binaries. Rather than storing corpora in the reports_map, (as those corpora would then out-live the diff context and thus create memory corruption issues), emit the report directly into an ostringstream and store that stream in reports_map. (compare): In the overoad that compares packages, rather than trying to get corpora from the report_map, just emit the content of the ostringstream that is now there. 2016-05-22 Dodji Seketeli Fix a read passed-the-end in abg-dwarf-reader.cc * src/abg-dwarf-reader.cc (lookup_symbol_from_gnu_hash_tab): Do not read passed the end of the array. 2016-05-21 Dodji Seketeli Support running "make check-valgrind" * autoconf-archive/ax_valgrind_check.m4: Add new file. Copied it from http://www.gnu.org/software/autoconf-archive/ax_valgrind_check.html. * configure.ac: Include the new ax_valgrind_check.m4 file. Initialize the valgrind checking on tests. Update the configure status. * tests/test-valgrind-suppressions.supp: New valgrind suppression file to silence memcheck leak errors from python. * tests/Makefile.am: Add test-valgrind-suppressions.supp to source distribution. Add check-valgrind-memcheck-recursive target. 2016-05-22 Dodji Seketeli Update the CONTRIBUTING file * CONTRIBUTING: Cleanup. 2016-05-22 Dodji Seketeli Update the COMMIT-LOG-GUIDELINES file * COMMIT-LOG-GUIDELINES: Various enhancements. 2016-05-16 Dodji Seketeli Do not run fedabipkgdiff tests if --enable-fedabipkgdiff is turned off * tests/Makefile.am: Make running runtestfedabipkgdiff be dependent on ENABLE_FEDABIPKGDIFF. 2016-05-13 Chenxiong Qi Fix pep8 error * tools/fedabipkgdiff (build_commandline_args_parser): Fix PEP8 error, line is too long. 2016-05-13 Chenxiong Qi Use consistent string format * tools/fedabipkgdiff (download_rpm): do not omit positional argument specifiers in string format. 2016-05-16 Dodji Seketeli Remove config.h.in from the repository * config.h.in: Remove from repository. 2016-02-09 Chenxiong Qi Bug 19428 - New fedabipkgdiff utility * autoconf-archive/ax_compare_version.m4: New file copied from the autoconf-archive project. * autoconf-archive/ax_prog_python_version.m4: Likewise. * autoconf-archive/ax_python_module.m4: Likewise. * Makefile.am: Add the new files above to the source distribution. * configure.ac: Include the new m4 macros from the autoconf archive. Add a new --enable-fedabipkgdiff option. Update the report at the end of the configure process to show the status of the fedabipkgdiff feature. Add check for prerequisite python modules argparse, glob, logging, os, re, shlex, subprocess, sys, itertools, urlparse, itertools, shutil, unittest, xdg, koji and mock. These are necessary for the unit test of fedabipkgdiff. Generate tests/runtestfedabipkgdiff.py into the build directory, from the tests/runtestfedabipkgdiff.py.in input file. * tools/Makefile.am: Include the fedabipkgdiff to the source distribution and install it if the "fedabipkgdiff" feature is enabled. * tests/Makefile.am: Rename runtestfedabipkgdiff.sh into runtestfedabipkgdiff.py. Add the new runtestfedabipkgdiff.py.in autoconf template file in here. * tests/runtestfedabipkgdiff.py.in: New unit test file. * tools/fedabipkgdiff: New fedabipkgdiff tool. * doc/manuals/fedabipkgdiff.rst: New manual. 2016-05-07 Dodji Seketeli Implement a [suppress_file] suppression directive * doc/manuals/libabigail-concepts.rst: Document the new 'suppress_file' directive. * include/abg-suppression.h (file_suppression): Define new class. (file_suppression_sptr): Define new typedef. (is_file_suppression, file_is_suppressed): Declare new functions. * src/abg-suppression.cc (): (read_file_suppression, is_file_suppression, file_is_suppressed): Define new functions. (file_suppression::{file_suppression, suppresses_file, ~file_suppression}): Define new member functions. * tools/abidiff.cc (main): If a suppression specification suppresses one of the input files, then do not perform the comparison. * tools/abipkgdiff.cc (compare): If a suppression specification suppresses a file that is to be compared, then do not perform the comparison. * tools/abicompat.cc (create_diff_context): New static function. (perform_compat_check_in_normal_mode) (perform_compat_check_in_weak_mode): Adjust to take a context in parameter. Do not create a diff context here anymore, do not load suppression files here either. (main): Use the new create_diff_context to create a diff context and initialize it, including loading suppression specifications. If any suppression specification suppresses a file to load, then do not load perform any compatibility checking. Adjust invocations of perform_compat_check_in_weak_mode and perform_compat_check_in_normal_mode to pass the diff context. * tests/data/test-diff-suppr/test0-type-suppr-3.suppr: New test input. * tests/data/test-diff-suppr/test0-type-suppr-4.suppr: Likewise. * tests/data/test-diff-suppr/test0-type-suppr-report-4.txt: Likewise. * tests/data/test-diff-suppr/test0-type-suppr-5.suppr: Likewise. * tests/data/test-diff-suppr/test0-type-suppr-report-5.txt: Likewise. * tests/data/test-diff-suppr/test0-type-suppr-6.suppr: Likewise. * tests/data/test-diff-suppr/test0-type-suppr-report-6.txt: Likewise. * tests/data/test-diff-suppr/test0-type-suppr-report-7.txt: Likewise. * tests/test-diff-suppr.cc (in_out_specs): Use the new test inputs. * tests/data/test-abicompat/test0-fn-changed-1.suppr: New test input. * tests/data/test-abicompat/test0-fn-changed-report-3.txt: Likewise. * tests/test-abicompat.cc (in_out_specs):: Use the new test inputs. * tests/data/Makefile.am: Add the new test material to source distribution. 2016-05-07 Dodji Seketeli Split suppression engine off of abg-comparison.{cc,h} * include/Makefile.am: Add abg-suppression.h to source distribution. * include/abg-comparison.h: Remove abg-ini.h include directive. (suppression_sptr, suppressions_type): Move these typedefs to abg-fwd.h. (class suppression_base, type_suppression) (type_suppression::insertion_range) (type_suppression::insertion_range::boundary) (type_suppression::insertion_range::integer_boundary) (type_suppression::insertion_range::fn_call_expr_boundary) (function_suppression, function_suppression::parameter_spec) (variable_suppression): Move these type definitions to the new abg-suppression.h. (read_suppressions, is_type_suppression, is_integer_boundary) (is_fn_call_expr_boundary, is_function_suppression) (is_variable_suppression, operator&) (operator|): Move these function declarations to the new abg-suppression.h. (type_suppression, type_suppression_sptr, type_suppression_type) (function_suppression, function_suppression_sptr) (function_suppressions_type, variable_suppression) (variable_suppression_sptr, variable_suppressions_type): Move these forward declaration and typedefs to the new abg-suppression.h. (diff_context::suppressions): Adjust return type to suppr::suppressions_type&. (diff_context::add_suppression): Adjust parameter type to suppr::suppressions_sptr. (diff_context::add_suppressions): Adjust parameter type suppr::suppressions_type&. (is_type_diff, is_decl_diff, is_var_diff, is_function_decl_diff) (is_pointer_diff, is_reference_diff, is_fn_parm_diff) (is_base_diff, is_child_node_of_function_parm_diff) (is_child_node_of_base_diff): Declare these new functions. They were previously static, local to abg-comparison.cc only. Now they need to be exported because they are used by the suppression engine's code that now lives in its one files. * include/abg-fwd.h (suppr::{suppression_base, suppression_sptr, suppressions_type}): Forward declare these here. * include/abg-suppression.h (class suppression_base) (type_suppression, type_suppression::insertion_range) (type_suppression::insertion_range::boundary) (type_suppression::insertion_range::integer_boundary) (type_suppression::insertion_range::fn_call_expr_boundary) (function_suppression, function_suppression::parameter_spec) (variable_suppression): Move these type definitions here, in the namespace suppr. (read_suppressions, is_type_suppression, is_integer_boundary) (is_fn_call_expr_boundary, is_function_suppression) (is_variable_suppression, operator&) (operator|): Move these function decalration here, in the namespace suppr. (type_suppression_sptr, type_suppressions_type) (function_suppression_sptr, function_suppressions_type) (variable_suppression_sptr, variable_suppressions_type): Move these typedefs here, in the namespace suppr. * src/Makefile.am: add src/abg-suppression.cc to source distribution. * src/abg-comparison.cc (is_type_diff, is_decl_diff, is_var_diff) (is_function_decl_diff, is_pointer_diff, is_reference_diff) (is_reference_or_pointer_diff, is_fn_parm_diff, is_base_diff) (is_child_node_of_function_parm_diff, is_child_node_of_base_diff): Export these functions. (*suppression*): Move all the suppression-related definitions to the new abg-suppression.cc. * src/abg-suppression.cc: New file. Contains all the *suppression* definitions from src/abg-comparison.cc, that are put in the suppr namespace. * tools/abicompat.cc: Adjust. * tools/abidiff.cc: Likewise. * tools/abipkgdiff.cc: Likewise. 2016-05-08 Dodji Seketeli Fix indentation for abidiff manual * doc/manuals/abidiff.rst: Fix indentation for the --suppression paragraph. 2016-05-08 Dodji Seketeli Add several shortcuts to options for abicompat * doc/manuals/abicompat.rst: Update documentation. * tools/abicompat.cc (display_usage): Update help strings. (parse_command_line): Add shortcuts --suppr, --appd, --libd1 and --libd2. 2016-05-08 Dodji Seketeli Update copyright year in tools/abicompat.cc * tools/abicompat.cc: Update copyright years to 2016. 2016-05-07 Dodji Seketeli Fix mention of tool's name in abidiff error message * src/abg-tools-utils.cc (emit_prefix): Try to emit the prefix only if the program name was provided. * abidiff.cc (maybe_check_suppression_files): Pass the name of the tool to the check_file function. 2016-05-07 Dodji Seketeli Update copyright year on abg-comparison.h * include/abg-comparison.h: Update copyright year. 2016-05-08 Dodji Seketeli Doc not show classes' inherited members in apidoc * doc/api/libabigail.doxy: Don't show inherited member functions or variables of a given class. 2016-05-08 Dodji Seketeli Fix typo in concept manual * doc/manuals/libabigail-concepts.rst: Do not refer to abidiff specifically for suppressions because several tools use suppressions. 2016-05-08 Dodji Seketeli Fix indentation in concepts manual * doc/manuals/libabigail-concepts.rst: Fix indentation. 2016-05-06 Dodji Seketeli Add some apidoc to dwarf_reader * include/abg-dwarf-reader.h (namespace dwarf_reader): Add apidoc. (enum elf_type): Add an apidoc for each enumerator. * src/abg-dwarf-reader.cc (get_type_of_elf_file): Add an apidoc for the 'type' parameter. 2016-04-28 Dodji Seketeli [abipkgdiff] Show SONAME of removed/added libraries * tools/abipkgdiff.cc (abi_diff::{added,removed}_binaries): Change the type of these data member from vector to vector. (compare): Adjust. Show the soname of added/removed binaries. 2016-04-27 Dodji Seketeli Bug 20015 - support file_name_not_regexp and soname_not_regexp in suppr specs * include/abg-comparison.h (suppression_base::{get,set}_file_name_not_regex_str): Declare new member functions. (suppression_base::{get,set}_soname_not_regex_str): Likewise. (suppression_base::{names,sonames}_of_binaries_match): Likewise. * src/abg-comparison.cc (suppression_base::priv::get_file_name_regex): Fix comment. (suppression_base::priv::get_file_name_not_regex): New member function. (suppression_base::priv::get_soname_regex): Fix comment. (suppression_base::priv::get_soname_not_regex): New member function. (suppression_base::{get,set}_file_name_not_regex_str): Define new member functions. (suppression_base::{get,set}_soname_not_regex_str): Likewise. (suppression_base::{names,sonames}_of_binaries_match): Likewise. These got factorized out of type_suppression::suppresses_type, function_suppression::suppresses_function, function_suppression::suppresses_function_symbol, variable_suppression::suppresses_variable, variable_suppression::suppresses_variable_symbol. (type_suppression::suppresses_type): Use the new suppression_base::{names,sonames}_of_binaries_match. (read_type_suppression): Read the new file_name_not_regexp and soname_not_regexp properties. (function_suppression::{suppresses_function, suppresses_function_symbol}): Use the new suppression_base::{names,sonames}_of_binaries_match. (read_function_suppression): Read the new file_name_not_regexp and soname_not_regexp properties. (variable_suppression::{suppresses_variable, variable_suppression::suppresses_variable_symbol}): Use the new suppression_base::{names,sonames}_of_binaries_match. (read_variable_suppression): Use the new suppression_base::{names,sonames}_of_binaries_match. * doc/manuals/libabigail-concepts.rst: Document the new file_name_not_regexp and soname_not_regexp suppression properties. * tests/data/test-diff-suppr/test24-soname-report-10.txt: New test reference output. * tests/data/test-diff-suppr/test24-soname-report-11.txt: Likewise. * tests/data/test-diff-suppr/test24-soname-report-12.txt: Likewise. * tests/data/test-diff-suppr/test24-soname-report-13.txt: Likewise. * tests/data/test-diff-suppr/test24-soname-report-14.txt: Likewise. * tests/data/test-diff-suppr/test24-soname-report-15.txt: Likewise. * tests/data/test-diff-suppr/test24-soname-report-16.txt: Likewise. * tests/data/test-diff-suppr/test24-soname-report-9.txt: Likewise. * tests/data/test-diff-suppr/test24-soname-suppr-10.txt: New test input. * tests/data/test-diff-suppr/test24-soname-suppr-11.txt: Likewise. * tests/data/test-diff-suppr/test24-soname-suppr-12.txt: Likewise. * tests/data/test-diff-suppr/test24-soname-suppr-13.txt: Likewise. * tests/data/test-diff-suppr/test24-soname-suppr-14.txt: Likewise. * tests/data/test-diff-suppr/test24-soname-suppr-15.txt: Likewise. * tests/data/test-diff-suppr/test24-soname-suppr-16.txt: Likewise. * tests/data/test-diff-suppr/test24-soname-suppr-9.txt: Likewise. * tests/data/test-diff-suppr/test29-soname-report-2.txt: New test reference output. * tests/data/test-diff-suppr/test29-soname-report-3.txt: Likewise. * tests/data/test-diff-suppr/test29-soname-report-4.txt: Likewise. * tests/data/test-diff-suppr/test29-soname-report-5.txt: Likewise. * tests/data/test-diff-suppr/test29-soname-report-6.txt: Likewise. * tests/data/test-diff-suppr/test29-soname-report-7.txt: Likewise. * tests/data/test-diff-suppr/test29-soname-report-8.txt: Likewise. * tests/data/test-diff-suppr/test29-suppr-2.txt: New test input. * tests/data/test-diff-suppr/test29-suppr-3.txt: Likewise. * tests/data/test-diff-suppr/test29-suppr-4.txt: Likewise. * tests/data/test-diff-suppr/test29-suppr-5.txt: Likewise. * tests/data/test-diff-suppr/test29-suppr-6.txt: Likewise. * tests/data/test-diff-suppr/test29-suppr-7.txt: Likewise. * tests/data/test-diff-suppr/test29-suppr-8.txt: Likewise. * tests/data/Makefile.am: Add the new test material to source distribution. * tests/test-diff-suppr.cc (in_out_specs): Make this test harness run over the new test inputs. 2016-04-27 Dodji Seketeli Make API documentation of thread pools visible * include/abg-workers.h: Document the workers namespace, the task, queue and queue::task_done_notify types. * src/abg-workers.cc: Move the documentation of the thread_pool module inside the abigail::worker namespace, so that references to task and queue types (which are also in the abigail::worker namespace) can be resolved in the apidoc. 2016-04-27 Dodji Seketeli Update documentation to require doxygen and python-sphinx for building * COMPILING: Add python-sphinx to the set of required packages to build the documentation. * doc/website/mainpage.txt: Update the website to mention doxygen and python-sphinx for documentation. 2016-04-27 Dodji Seketeli Add doc, info, man and html-doc targets to generate documentation * Makefile.am: Add info, man and html-doc targets to generate documentation in info, man and html formats. If you want to generate them all, then the doc target is the one to be used. * COMPILING: Add documentation for the above. 2016-04-25 Dodji Seketeli Bug 19964 - Cannot load function aliases on ppc64 * src/abg-dwarf-reader.cc (read_context::load_symbol_maps): While filling the ppc64-specific "function-entry-address => symbol" map, if we stumble accross a function-entry-address that belongs to an alias of 'symbol', then assume the alias must have been registered as an alias already, by the platform-agnostic code. Do not try to register the alias again. * tests/data/Makefile.am: Add the new test input binaries to the source distribution. * tests/data/test-diff-dwarf/libtest36-ppc64-aliases-v0.so: New binary test input. * tests/data/test-diff-dwarf/libtest36-ppc64-aliases-v1.so: Likewise. * tests/data/test-diff-dwarf/test36-ppc64-aliases-report-0.txt: New test reference output. * tests/data/test-diff-dwarf/test36-ppc64-aliases-v0.cc: Source code for the new binary test input above. * tests/data/test-diff-dwarf/test36-ppc64-aliases-v1.cc: Likewise. * tests/test-diff-dwarf.cc: Add the new test input to the list of test inputs considered by this test harness. 2016-04-20 Sinny Kumari Bug 19961 - Distinguish between PI executable and shared library * include/abg-dwarf-reader.h (elf_type): Add new enumerator ELF_TYPE_PI_EXEC. * src/abg-dwarf-reader.cc (lookup_data_tag_from_dynamic_segment): New function for data tag lookup in dynamic segment of an elf (elf_file_type): Return ELF_TYPE_PI_EXEC file type for a PI executable. (get_elf_file_type): Change this to take an elf handle. (get_type_of_elf_file): New function that got factorized out of ... (load_dt_soname_and_needed): ... this one. * tools/abipkgdiff.cc (create_maps_of_package_content): Also consider ELF_TYPE_PI_EXEC file type. (compare): Likewise. * tests/test-diff-pkg.cc (in_out_specs): Test case additions * tests/data/Makefile.am: Include test files * tests/data/test-diff-pkg/tarpkg-1-dir1.tar.gz: New test data * tests/data/test-diff-pkg/tarpkg-1-dir2.tar.gz: New test data * tests/data/test-diff-pkg/tarpkg-1-report-0.txt: New test result 2016-04-17 Dodji Seketeli Update website to 1.0.rc4 * doc/website/mainpage.txt: Update tarball reference to 1.0.rc4 2016-04-17 Dodji Seketeli Bump current version number to 1.0.rc5 * configure.ac: Bump current version number to 1.0.rc5 2016-04-17 Dodji Seketeli Add a 'release' target to main Makefile * Makefile.am: Add tarball, upload-release-only, upload-release and release targets. 2016-04-11 Dodji Seketeli Update ChangeLog for 1.0.rc4 * ChangeLog: Update automatically by running "make update-changelog" 2016-04-11 Dodji Seketeli Update NEWS for 1.0.rc4 * NEWS: Update for 1.0.rc4 2016-04-16 Dodji Seketeli Fix typos in the suppression specifications manual * doc/manuals/libabigail-concepts.rst: Fix typos. 2016-04-16 Dodji Seketeli Ease use of soname_regexp/file_name_regexp in suppr specs * doc/manuals/libabigail-concepts.rst: Update the manual to reflect the changes in the suppression_type, suppress_function and suppress_variable directives. * src/abg-comparison.cc (read_type_suppression): Accept that the suppress_type directive contains only file_name_regexp or the soname_regexp property. (read_function_suppression): Likewise for the suppress_function directive. (read_variable_suppression): Likewise for the suppress_variable directive. * tests/data/test-diff-suppr/libtest29-soname-v0.so: New binary test input. * tests/data/test-diff-suppr/libtest29-soname-v1.so: Likewise. * tests/data/test-diff-suppr/test24-soname-report-5.txt: New reference test output. * tests/data/test-diff-suppr/test24-soname-report-6.txt: Likewise. * tests/data/test-diff-suppr/test24-soname-report-7.txt: Likewise. * tests/data/test-diff-suppr/test24-soname-report-8.txt: Likewise. * tests/data/test-diff-suppr/test24-soname-suppr-5.txt: New test suppression file. * tests/data/test-diff-suppr/test24-soname-suppr-6.txt: Likewise. * tests/data/test-diff-suppr/test24-soname-suppr-7.txt: Likewise. * tests/data/test-diff-suppr/test24-soname-suppr-8.txt: Likewise. * tests/data/test-diff-suppr/test29-soname-report-0.txt: New reference test output. * tests/data/test-diff-suppr/test29-soname-report-1.txt: Likewise. * tests/data/test-diff-suppr/test29-soname-v0.cc: Source code for the new binary output above. * tests/data/test-diff-suppr/test29-soname-v1.cc: Likewise. * tests/data/test-diff-suppr/test29-suppr-0.txt: New test suppression file. * tests/data/test-diff-suppr/test29-suppr-1.txt: Likewise. * tests/data/Makefile.am: Add the new test material above to source distribution. * tests/test-diff-suppr.cc (in_out_specs): Make this test harness run over the new test input above. 2016-03-31 Dodji Seketeli Fix comments in tests/test-diff-pkg.cc * tests/test-diff-pkg.cc: Fix the wording of the introductory comments. 2016-03-30 Dodji Seketeli Bug 19885 - Cannot associates a function DIE to a symbol on powerpc64 *from* the address of its entry point. More precisely, on ppc64, the address of a function is the address of a function descriptor. The function descriptor is a set of three 64 bits addresses. The first element of the triplet is the function entry pointer address. So to get the symbol a given function entry point address belongs to, one must get to the function descriptor which contains said function entry point address. And function descriptors are in the ".opd" special section. Unfortunately, Libabigail's ELF/DWARF reader has no knowledge of all this. So it cannot get the symbol of a given function DWARF description. So it considers all functions as having no ELF symbols. So it shows no ABI change pertaining to function sub-types on ppc64. This patch makes Libabigail support function descriptors on ppc64 so it can detect changes on function sub-types there. * src/abg-dwarf-reader.cc (read_context::{opd_section_, fun_entry_addr_sym_map_}): New data members. (read_context::read_context): Initialize the new opd_section_ data member. (read_context::{find_opd_section, lookup_ppc64_elf_fn_entry_pointer_address, fun_entry_addr_sym_map_sptr, fun_entry_addr_sym_map, elf_architecture_is_ppc64, elf_architecture_is_big_endian}): New member functions. (read_context::lookup_elf_fn_symbol_from_address): Adjust to use the new read_context::fun_entry_addr_sym_map() function. (read_context::load_symbol_maps): Populate the function entry addresses -> symbol map, for ppc64 ELFv1. (read_context::load_elf_properties): Renamed read_context::load_remaining_elf_data into this. (read_corpus_from_elf): Load elf properties before trying to load elf symbols information. * tests/data/test-diff-filter/libtest32-struct-change-v0.so: New binary test input, compiled for ppc64le. * tests/data/test-diff-filter/libtest32-struct-change-v1.so: Likewise. * tests/data/test-diff-filter/test32-ppc64le-struct-change-report0.txt: New test reference output. * tests/data/test-diff-filter/test32-ppc64le-struct-change-v0.c: Source code of the new binary test input above. * tests/data/test-diff-filter/test32-ppc64le-struct-change-v1.c: Likewise. * tests/data/Makefile.am: Add the new test material above to source distribution. * tests/test-diff-filter.cc (in_out_spec): Make this test harness run over the new test input binaries above. 2016-03-25 Dodji Seketeli Fix logs in abipkgdiff and add some more * tools/abipkgdiff.cc (compare): Fix logs to make them more readable in a multithreaded context. (create_maps_of_package_content): Likewise. Add logs about the number of elf files found in a given directory. Add logs about skipping files. 2016-03-25 Dodji Seketeli Bug 19867 - abipkgdiff skips symbolic links * include/abg-tools-utils.h (maybe_get_symlink_target_file_path): Declare new function. * src/abg-tools-utils.cc (get_stat): Use lstat here, not stat. Update comment. * tools/abipkgdiff.cc (first_package_tree_walker_callback_fn) (second_package_tree_walker_callback_fn): Follow symbolic links to elf files to get their target paths, and only work with that target path. (maybe_get_symlink_target_file_path): Define new function. * test-diff-pkg/symlink-dir-test1-report0.txt New test material. * test-diff-pkg/symlink-dir-test1/dir1/symlinks/foo.o: Likewise. * test-diff-pkg/symlink-dir-test1/dir1/symlinks/libfoo.so: Likewise. * test-diff-pkg/symlink-dir-test1/dir1/targets/foo.c: Likewise. * test-diff-pkg/symlink-dir-test1/dir1/targets/foo.o: Likewise. * test-diff-pkg/symlink-dir-test1/dir1/targets/libfoo.so: Likewise. * test-diff-pkg/symlink-dir-test1/dir2/symlinks/foo.o: Likewise. * test-diff-pkg/symlink-dir-test1/dir2/symlinks/libfoo.so: Likewise. * test-diff-pkg/symlink-dir-test1/dir2/targets/foo.c: Likewise. * test-diff-pkg/symlink-dir-test1/dir2/targets/foo.o: Likewise. * test-diff-pkg/symlink-dir-test1/dir2/targets/libfoo.so: Likewise. * tests/data/Makefile.am: Add the new test material to source distribution. * tests/test-diff-pkg.cc (in_out_spec): Run this test harness over the new test material above. 2016-03-21 Dodji Seketeli Fix typo on the web page * doc/website/mainpage.txt: Fix typo. 2016-03-18 Roland McGrath Fix typo in configure --enable-deb help text * configure.ac: Fix typo in --enable-deb usage text. 2016-03-18 Dodji Seketeli Bug 19846 - variable decl associated with the wrong debug info section * src/abg-dwarf-reader.cc (build_ir_node_from_die): Associate the decl of the variable to the same debug info file (alternate or not) as the DIE, not as its specification DIE. 2016-03-18 Dodji Seketeli Fix typo in the manual of abidiff * doc/manuals/abidiff.rst: Fix typo. 2016-03-18 Dodji Seketeli Fix typos in comments in src/abg-dwarf-reader.cc * src/abg-dwarf-reader.cc (read_context::{die_type_map, is_wip_class_die_offset, is_wip_function_type_die_offset}): Fix typo in comments. 2016-03-18 Dodji Seketeli Bug 19844 - Cannot try to canonicalize a type that is being constructed * src/abg-dwarf-reader.cc (read_context::{alternate_die_wip_classes_map_, alternate_die_wip_function_types_map_}): New data members. (read_context::lookup_type_from_die_offset): Lookup WIP class and function types too. (read_context::{die_wip_classes_map, die_wip_function_types_map}): Take a flag saying if we should get the map for the alternate debug info section or not. (read_context::{is_wip_class_die_offset, is_wip_function_type_die_offset}): Take a flagy saying if the DIE is in the alternate debug info section or not. (build_class_type_and_add_to_ir, build_function_type) (maybe_canonicalize_type): Adjust. (build_ir_node_from_die): Do not call maybe_canonicalize_type on type DIEs which no type has been constructed for. * tests/data/test-diff-pkg/gtk2-debuginfo-2.24.22-5.el7.i686.rpm: New test input. * tests/data/test-diff-pkg/gtk2-debuginfo-2.24.28-8.el7.i686.rpm: Likewise. * tests/data/test-diff-pkg/gtk2-immodule-xim-2.24.22-5.el7.i686.rpm: Likewise. * tests/data/test-diff-pkg/gtk2-immodule-xim-2.24.28-8.el7.i686.rpm: Likewise. * tests/data/test-diff-pkg/gtk2-immodule-xim-2.24.22-5.el7.i686--gtk2-immodule-xim-2.24.28-8.el7.i686-report-0.txt: New test reference output. * tests/data/Makefile.am: Add the new test material to the source distribution. * tests/test-diff-pkg.cc (in_out_spec): Make this test harness run on the new test input above. 2016-03-16 Dodji Seketeli Fix a typo in include/abg-tools-utils.h * include/abg-tools-utils.h (enum abidiff_status): Fix typo in comment. 2016-03-16 Dodji Seketeli Update copyright dates for the manuals * doc/manuals/conf.py: Update copyright years. 2016-03-16 Dodji Seketeli More docs about ABIDIFF_ABI_INCOMPATIBLE_CHANGE * doc/manuals/abidiff.rst: Explain the kind of changes that flip the ABIDIFF_ABI_INCOMPATIBLE_CHANGE flag. 2016-03-09 Dodji Seketeli Fix typos on the web page * doc/website/mainpage.txt: Fix typos. 2016-03-08 Dodji Seketeli Bump version number to 1.0.rc4 * configure.ac: Bump version number to 1.0.rc4 2016-03-08 Dodji Seketeli Fix potential race condition in test-diff-pkg.cc * tests/test-diff-pkg.cc (in_out_spec): Make the tar format tests output have different names. 2016-03-08 Dodji Seketeli Updated website to point to 1.0.rc3 tarball * doc/website/mainpage.txt: Updated website to point to 1.0.rc3 tarball. 2016-03-08 Dodji Seketeli Update ChangeLog before 1.0.rc3 * ChangeLog: Update for 1.0.rc3 2016-03-08 Dodji Seketeli Update NEWS file for 1.0.rc3 * NEWS: update for 1.0.rc3 2016-03-07 Dodji Seketeli Walk function_type_diff tree in a deterministic way * src/abg-comparison.cc (function_type_diff::priv::{sorted_subtype_changed_parms_, sorted_changed_parms_by_id_}): Add two data members. (function_type_diff::ensure_lookup_tables_populated): Sort the changed parameters here ... (function_type_diff::report): ... not here. (function_type_diff::chain_into_hierarchy): Chain the *sorted* changed parameters. 2016-03-07 Dodji Seketeli Fix reference to test file in Makefile.am * tests/data/Makefile.am: Fix bogus reference to libICE-1.0.6-1.el6.x86_64.rpm--libICE-1.0.9-2.el7.x86_64.rpm-report-0.txt. 2016-03-07 Dodji Seketeli Bug 19780 - abipkgdiff doesn't support parallel execution * tools/abipkgdiff.cc: Update copyright notice. (package::extracted_packages_parent_dir): Use mkdtemp to generate the unique root directory under which packages are extracted. * tests/test-diff-pkg.cc (struct test_task): New type. (main): Use worker threads to run abipkgdiff in parallel, depending on the number of CPUs advertised by the underlying machine. 2016-03-07 Dodji Seketeli Bug 19778 - diff_has_ancestor_filtered_out() loops forever * src/abg-comparison.cc (diff_has_ancestor_filtered_out): Add an overload that takes an additional map of pointer values. Make the older overload call the new one. * tests/data/test-diff-pkg/libICE-1.0.6-1.el6.x86_64.rpm: New test material. * 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: New reference output. * tests/data/test-diff-pkg/libICE-1.0.9-2.el7.x86_64.rpm: New test material. * tests/data/test-diff-pkg/libICE-debuginfo-1.0.6-1.el6.x86_64.rpm: New test material. * tests/data/test-diff-pkg/libICE-debuginfo-1.0.9-2.el7.x86_64.rpm: New test material. * tests/data/Makefile.am: Add the new test material to source distribution. * tests/test-diff-pkg.cc (in_out_specs): Run this test harness over the new tests material above. 2016-03-07 Dodji Seketeli Forgot to add test2-filtered-removed-fns-v{0,1}.o * test2-filtered-removed-fns-v{0,1}.o: Add these test input files. 2016-03-03 Dodji Seketeli Bug 19596 - Suppressed removed symbol changes still considered incompatible * src/abg-comparison.cc (corpus_diff::has_incompatible_changes): Consider the *net* number of removed function and variable symbols. Also, if all function sub-type changes have been suppressed, then no virtual offset change should be considered incompatible. * tests/data/test-abidiff-exit/test1-voffset-change-report1.txt * tests/data/test-abidiff-exit/test1-voffset-change.abignore * tests/data/test-abidiff-exit/test2-filtered-removed-fns-report0.txt * tests/data/test-abidiff-exit/test2-filtered-removed-fns-report1.txt * tests/data/test-abidiff-exit/test2-filtered-removed-fns-v0.c * tests/data/test-abidiff-exit/test2-filtered-removed-fns-v1.c * tests/data/test-abidiff-exit/test2-filtered-removed-fns.abignore * tests/data/Makefile.am: Add the new test material above to source distribution. * tests/test-abidiff-exit.cc (InOutSpec::in_suppr_path): New data member. (in_out_specs): Adjust. Add new test inputs. (main): Adjust. 2016-02-25 Dodji Seketeli Fixup virtual member functions with linkage and no underlying symbol * src/abg-dwarf-reader.cc (die_function_decl_map_type): New typedef. (read_context::die_function_with_no_symbol_map_): New data member. (read_context::die_function_decl_with_no_symbol_map): New accessor. (read_context::fixup_functions_with_no_symbols): New member function. (finish_member_function_reading): Take a read_context. Schedule virtual member functions with linkage and no underlying symbol to be fixed up after all the debug info is read. (build_function_decl): After a virtual member function_decl has been updated, if it has its underlying symbol and was scheduled for fixup, then de-schedule it. (build_class_type_and_add_to_ir, build_ir_node_from_die): Adjust call to finish_member_function_reading. (read_corpus_from_elf): Move the pure ELF (symbol and other mundane information) information reading ... (read_debug_info_into_corpus): ... here. Make it happen *before* actual reading of DWARF information. We need symbol information to be present and fully set before we start reading debug info. This is so that we can know when a virtual member function doesn't need to be fixed up. Also, perform the fixup after the debug information was read. * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: Adjust. 2016-02-25 Dodji Seketeli Add --verbose to abidw * doc/manuals/abidw.rst: Update the manual for the new --verbose option. * tools/abidw.cc (options::do_log): New data member. (options::options): Initialize it. (display_usage): New string for --verbose. (parse_command_line): Parse the --verbose option. (main): Set the the logging option. 2016-02-25 Dodji Seketeli Update copyright information * tools/abidiff.cc: Update copyright info for 2016. * tools/abidw.cc: Likewise. 2016-02-24 Dodji Seketeli Make libabigail link with pthread * src/Makefile.am: Add -pthread to libabigail_la_LDFLAGS. * tools/Makefile.am: Do not use abinilint_LDFLAGS when it should be abinilint_LDADD. This one was fixed by Michi Henning. 2016-02-24 Dodji Seketeli Update mentions to the build dependencies in the doc * COMPILING: Mention elfutils, libtool, autoconf, automake and libtool. * doc/website/mainpage.txt: Mention automake and libtool. Fix a typo. 2016-02-24 Dodji Seketeli Bug 19706 - Core dump from abidiff with suppression * src/abg-comparison.cc (function_suppression::suppresses_function): Make sure a function has a symbol before (de)referencing it. 2016-02-24 Dodji Seketeli Some small speed optimizations * include/abg-ir.h (var_decl::get_naked_type): Declare new member function. * src/abg-ir.cc (var_decl::get_naked_type): Define it. (equals): For the var_decl overload, avoid copying symbol smart pointers. Likewise for variable type smart pointers. (hash_type_or_decl): Avoid accessing canonical type smart pointer. 2016-02-24 Dodji Seketeli Mist style cleanups * include/abg-ir.h: Add missing comments. Space cleanups. Use shorter typedefs rather than long template instantiation names. Use string rather than the longer std::string. * src/abg-ir.cc: Space cleanups. Add missing comments. User shorter typedefs. * src/abg-reader.cc: Likewise. * src/abg-writer.cc: Likewise. 2016-02-24 Dodji Seketeli Implement string interning for Libabigail * include/Makefile.am: Add the new abg-interned-str.h file to source distribution. * include/abg-corpus.h (corpus::corpus): Re-arrange the order of * src/abg-corpus.cc (corpus::exported_decls_builder::priv::get_id): Return interned_string rather than std::string. (corpus::corpus): Re-arrange the order of parameters: take an environment as first parameter. parameters: take an environment as first parameter. * include/abg-dwarf-reader.h (lookup_symbol_from_elf) (lookup_public_function_symbol_from_elf): Likewise. * src/abg-dwarf-reader.cc (lookup_symbol_from_sysv_hash_tab) (lookup_symbol_from_gnu_hash_tab) (lookup_symbol_from_elf_hash_tab, lookup_symbol_from_symtab) (lookup_symbol_from_elf, lookup_public_function_symbol_from_elf) (lookup_public_variable_symbol_from_elf, lookup_symbol_from_elf) (lookup_public_function_symbol_from_elf): Take an environment as first parameter and adjust. (build_translation_unit_and_add_to_ir) (build_namespace_decl_and_add_to_ir, build_type_decl) (build_enum_type, finish_member_function_reading) (build_class_type_and_add_to_ir, build_function_type) (read_debug_info_into_corpus, read_corpus_from_elf): Adjust. * include/abg-fwd.h: Include abg-interned-str.h (get_type_name, get_function_type_name, get_method_type_name): Return a interned_string, rather than a std::string. * include/abg-interned-str.h: New declarations for interned strings and their pool. * include/abg-ir.h (environment::intern): Declare new method. (elf_symbol::{g,s}et_environment): Likewise. (type_or_decl_base::type_or_decl_base): Make the default constructor private. ({translation, type_or_decl_base}::set_environment) (set_environment_for_artifact): Take a const environment*. (elf_symbol::elf_symbol) (elf_symbol::create) (type_or_decl_base::type_or_decl_base) (translation::translation, decl_base::decl_base) (scope_decl::scope_decl, type_base::type_base) (type_decl::type_decl, scope_type_decl::scope_type_decl) (namespace_decl::namespace_decl) (enum_type_decl::enumerator::enumerator) (function_type::function_type, method_type::method_type) (template_decl::template_decl, function_tdecl::function_tdecl) (class_tdecl::class_tdecl, class_decl::class_decl): Take an environment. (type_or_decl_base::operator=) (enum_type_decl::enumerator::get_environment): Declare new method. (decl_base::{peek_qualified_name, peek_temporary_qualified_name, get_qualified_name, get_name, get_qualified_parent_name, get_linkage_name}, qualified_type_def::get_qualified_name) (reference_type_def::get_qualified_name) (array_type_def::get_qualified_name) (enum_type_decl::enumerator::{get_name, get_qualified_name}) ({var,function}_decl::get_id) (function_decl::parameter::{get_type_name, get_name_id}): Return an interned_string, rather than a std::string. (decl_base::{set_qualified_name, set_temporary_qualified_name, get_qualified_name, set_linkage_name}) (qualified_type_def::get_qualified_name) (reference_type_def::get_qualified_name) (array_type_def::get_qualified_name) (function_decl::parameter::get_qualified_name): Take an interned_string, rather than a std::string. (class_decl::member_{class,function}_template::member_{class,function}_template): Adjust. * src/abg-ir.cc (environment_setter::env_): Make this be a pointer to const environment. (environment_setter::visit_begin): Adjust. (interned_string_pool::priv): Define new type. (interned_string_pool::*): Define the method declared in abg-interned-str. h. (operator==, operator!=, operator+): Define operator for interned_string and std::string (operator<<): Define for interned_string. (translation_unit::priv::env_): Make this be a pointer to const environment. (translation_unit::priv::priv): Take a pointer to const environment. (elf_symbol::priv::env_): New data member. (elf_symbol::priv::priv): Adjust. Make an overoad take an environment. (translation_unit::{g,s}et_environment): Adjust. (interned_string_bool_map_type): New typedef. (environment::priv::classes_being_compared_): Make this hastable of string be a hashtable of interned_string. (environment::priv::string_pool_): New data member. (environment::{get_void_type_decl, get_variadic_parameter_type_decl}): Adjust. (type_or_decl_base::priv::env_): Make this be a pointer to const environment. (type_or_decl::base::priv::priv): Adjust. (type_or_decl_base::set_environment) (set_environment_for_artifact): Take a pointer to const environment. (elf_symbol::{g,s}et_environment, environment::intern) (type_or_decl_base::operator=): Define new methods. (decl_base::priv::{name_, qualified_parent_name_, temporary_qualified_name_, qualified_name_, linkage_name_}): Make these data member be of tpe interned_string. (decl_base::priv::priv): Make this take an environment. Adjust. (decl_base::{peek_qualified_name, peek_temporary_qualified_name, get_linkage_name, get_qualified_parent_name, get_name, get_qualified_name}, get_type_name, get_function_type_name) (get_method_type_name, get_node_name) (qualified_type_def::get_qualified_name) (pointer_type_def::get_qualified_name) (array_type_def::get_qualified_name) (enum_type_decl::enumerator::get_qualified_name) (var_decl::get_id, function_decl::get_id) (function_decl::parameter::get_{name_id, type_name}): Return an interned_string. (decl_base::{set_qualified_name, set_temporary_qualified_name}) (qualified_type_def::get_qualified_name) (pointer_type_def::get_qualified_name) (reference_type_def::get_qualified_name) (array_type_def::get_qualified_name) (function_decl::parameter::get_qualified_name): Take an interned_string. (decl_base::{set_name, set_linkage_name}): Intern the std::string passed in parameter. (equals): In the overload for decl_base, adjust for a little speed optimization that is justified by profiling. (pointer_type_def::priv::{internal_qualified_name_, temp_internal_qualified_name_}): Make these data member be interned_string. (enum_type_decl::enumerator::priv::env_): New data member. (enum_type_decl::enumerator::priv::{name_, qualified_name}): Make these data member be of type interned_string. (enum_type_decl::enumerator::get_environment): New method. (enum_type_decl::enumerator::priv::priv) Adjust. (typedef_decl::operator==): Implement a little speed optimization. (var_decl::priv::nake_type_): New data member. (var_decl::priv::id_): Make this data member be of type interned_string. (equals): In the overload for var_decl, function_type, function_decl, adjust for the use of interned_string. (function_decl::priv::id_): Make this be of type interned_string. (scope_decl::{add_member_decl, insert_member_decl}) (lookup_function_type_in_translation_unit) (synthesize_type_from_translation_unit, lookup_node_in_scope) (lookup_type_in_scope, scope_decl::scope_decl) (qualified_type_def::qualified_type_def) (qualified_type_def::get_qualified_name) (pointer_type_def::pointer_type_def) (reference_type_def::reference_type_def) (array_type_def::array_type_def, array_type_def::append_subrange) (array_type_def::get_qualified_name) (enum_type_decl::enum_type_decl) (enum_type_decl::enumerator::get_qualified_name) (enum_type_decl::enumerator::set_name) (typedef_decl::typedef_decl, var_decl::var_decl) (function_type::function_type, method_type::method_type) (function_decl::function_decl) (function_decl::parameter::parameter) (class_decl::priv::comparison_started) (class_decl::add_base_specifier) (class_decl::base_spec::base_spec) (class_decl::method_decl::method_decl) (type_tparameter::type_tparameter) (non_type_tparameter::non_type_tparameter) (template_tparameter::template_tparameter) (type_composition::type_composition) (function_tdecl::function_tdecl, class_tdecl::class_tdecl) (qualified_name_setter::do_update): Adjust. (translation_unit::translation_unit, elf_symbol::elf_symbol) (elf_symbol::create, type_or_decl_base::type_or_decl_base) (decl_base::decl_base, type_base::type_base) (type_decl::type_decl, scope_type_decl::scope_type_decl) (namespace_decl::namespace_decl) (enum_type_decl::enumerator::enumerator, class_decl::class_decl) (template_decl::template_decl, function_tdecl::function_tdecl) (class_tdecl::class_tdecl): Take an environment. * src/abg-comparison.cc (function_suppression::suppresses_function): Adjust. * src/abg-reader.cc (read_translation_unit) (read_corpus_from_input, build_namespace_decl, build_elf_symbol) (build_function_parameter, build_function_decl, build_type_decl) (build_function_type, build_enum_type_decl, build_enum_type_decl) (build_class_decl, build_function_tdecl, build_class_tdecl) (read_corpus_from_native_xml): Likewise. * src/abg-writer.cc (id_manager::m_cur_id): Make this mutable. (id_manager::m_env): New data member. (id_manager::id_manager): Adjust. (id_manager::get_environment): New method. (id_manager::{get_id, get_id_with_prefix}): Return an interned_string. (type_ptr_map): Make this be a hash map of type_base* -> interned_string, rather a type_base* -> string. (write_context::m_env): New data member. (write_context::m_type_id_map): Make this data member be mutable. (write_context::m_emitted_type_id_map): Make this be a hash map of interned_string -> bool, rather than string -> bool. (write_context::write_context): Take an environment and adjust. (write_context::get_environment): New method. (write_context::get_id_manager): New const overload. (write_context::get_id_for_type): Return an interned_string; adjust. (write_context::{record_type_id_as_emitted, record_type_as_referenced}): Adjust. (write_context::type_id_is_emitted): Take an interned_string. (write_context::{type_is_emitted, record_decl_only_type_as_emitted}): Adjust. (write_translation_unit, write_corpus_to_native_xml, dump): Adjust. * tools/abisym.cc (main): Adjust. * tests/data/test-read-write/test22.xml: Adjust. * tests/data/test-read-write/test23.xml: Adjust. * tests/data/test-read-write/test26.xml: Adjust. 2016-02-24 Dodji Seketeli Update copyright notice * include/abg-corpus.h: Update copyright notice. * include/abg-dwarf-reader.h: Likewise. * src/abg-comparison.cc: Likewise. * src/abg-corpus.cc: Likewise. * src/abg-ir.cc: Likewise. 2016-02-23 Dodji Seketeli Fix crash when handling templates with empty patterns * src/abg-ir.cc (function_tdecl::traverse): Do not crash when traversing a template with empty pattern. (class_tdecl::operator==): Do not crash when comparing templates with empty patterns. 2016-02-23 Dodji Seketeli Add missing inequality operators for ABI artifacts * include/abg-ir.h ({translation_unit, elf_symbol::version, context_rel, decl_base, type_base, type_decl, array_type_def::subrange_type, enum_type_def::enumerator, dm_context_rel, template_parameter}::operator!=): Declare. (operator==): Make the overload form translation_unit_sptr, scope_decl_sptr, class_decl::base_spec_sptr, class_decl::member_function_template_sptr, class_decl::member_class_template_sptr take const references. (operator!=): Declare an an overload for the non-member operator != of translation_unit_sptr, elf_symbol_sptr, type_or_decl_base_sptr, type_base_sptr, scope_decl_sptr, type_decl, qualified_type_def_sptr, pointer_type_def_sptr, reference_type_def_sptr, enum_type_decl_sptr, class_decl_sptr, class_decl::base_spec_sptr, class_decl::member_function_template_sptr, class_decl::member_class_template_sptr. * src/abg-ir.cc ({translation_unit, elf_symbol::version, context_rel, decl_base, type_base, type_decl, array_type_def::subrange_type, enum_type_def::enumerator, dm_context_rel, template_parameter}::operator!=): Define. (operator==): Make the overload for translation_unit_sptr, scope_decl_sptr, class_decl::base_spec_sptr, class_decl::member_function_template_sptr, class_decl::member_class_template_sptr take const references. (operator!=): Define an an overload for the non-member operator != of translation_unit_sptr, elf_symbol_sptr, type_or_decl_base_sptr, type_base_sptr, scope_decl_sptr, type_decl, qualified_type_def_sptr, pointer_type_def_sptr, reference_type_def_sptr, enum_type_decl_sptr, class_decl_sptr, class_decl::base_spec_sptr, class_decl::member_function_template_sptr, class_decl::member_class_template_sptr. 2016-02-20 Dodji Seketeli Make the tree pass distcheck again. * tests/data/Makefile.am: Add file test-diff-suppr/test28-add-aliased-function-report-0.txt to source distribution. 2016-02-18 Dodji Seketeli Bug 19658 - Type canonicalization slow for the 2nd binary loaded * include/abg-corpus.h (corpus::{record_canonical_type, lookup_canonical_type}): Declare new member functions. * src/abg-corpus.cc (corpus::priv::canonical_types_): New data member. (corpus::{record_canonical_type, lookup_canonical_type}): Define new member functions. * src/abg-ir.cc (type_base::get_canonical_type_for): Cache the canonical type inside the corpus of the type being canonicalized. Then later when canonicalizing another type, lookup in the cache inside its corpus to see if there is a type with the same name. * tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-0.txt: Adjust. 2016-02-18 Dodji Seketeli Add --verbose option to abidiff * doc/manuals/abidiff.rst: Add documentation for new --verbose option. * include/abg-dwarf-reader.h (set_do_log): Declare new function. * src/abg-dwarf-reader.cc (read_context::do_log_): New data member. (read_context::read_context): Initialize the new data member. (read_context::do_log): Define accessors. (set_do_log): Define new function; (read_context::canonicalize_types_scheduled) (read_debug_info_into_corpus): Add logs. * tools/abidiff.cc (options::do_log): New data member. (options::options): Initialize it. (display_usage): Add an usage string for --verbose. (parse_command_line): Parse the new --verbose option. (main): Set the dwarf reader's context wrt presence of the --verbose option. 2016-02-18 Dodji Seketeli Fix indentation * tools/abipkgdiff.cc (parse_command_line): Fix a wrong indentation. 2016-02-17 Dodji Seketeli Bug 19638 - DWARF reader fails to link clone function to its declaration * include/abg-ir.h (decl_base::set_linkage_name): Make this member function virtual. (class_decl::string_mem_fn_ptr_map_type): Define new member type. (class_decl::find_member_function): Declare new member function. (copy_member_function): Declare new function. Declare it as friend of class_decl. (method_decl::set_linkage_name): Declare an overload for this virtual function. * src/abg-dwarf-reader.cc (build_function_decl): Allow updating of linkage_name even if the linkage_name was already defined. (build_ir_node_from_die): In the case DW_TAG_subprogram, make the lookup of scope of the DIE work even if it has both an abstract origin and a specification (DW_AT_abstract_origin and DW_AT_specification). * src/abg-ir.cc (maybe_adjust_canonical_type): Define new function. (canonicalize): Use it. (function_decl::get_id): Return the linkage name first, if it exist. (class_decl::priv::mem_fns_map_): New data member. (class_decl::find_member_function): Define new member function. (class_decl::method_decl::set_linkage_name): Likewise. (class_decl::add_member_function): Update the new data member class_decl::priv::mem_fns_map_. (copy_member_function): Define new static function. * tests/data/test-abidiff/test-PR18791-report0.txt: Adjust. * tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: Adjust. * tests/data/test-read-dwarf/test12-pr18844.so.abi: Adjust. * tests/data/test-read-dwarf/test16-pr18904.so.abi: Adjust. * tests/data/test-read-dwarf/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: Adjust. * tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi: Adjust. * tests/data/test-read-dwarf/test20-pr19025-libvtkParallelCore-6.1.so.abi: Adjust. * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: Adjust. * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Adjust. 2016-02-17 Dodji Seketeli Add function lookup by linkage name to libabigail::corpus * include/abg-corpus.h (corpus::lookup_functions): Declare new member function. * src/abg-corpus.cc (class corpus::exported_decls_builder::priv): Make class corpus be a friend of this type. (corpus::exported_decls_builder::priv::add_fn_to_id_fns_map): Fix a thinko that was preventing the fn_id -> functions map from ever being filled. Fix this function to make it associate each aliases of a given function to the function, in the hash table. (corpus::lookup_functions): Define new member function. 2016-02-17 Dodji Seketeli Fix style cleanups * include/abg-ir.h (method_type::{method_type, set_class_type, get_type, set_type}): Use type_base_sptr and class_decl_sptr instead of the full non-typedefed name. (method_type):Do some cleanups in the definition of the convenience typedefs. * src/abg-ir.cc (method_type::{method_type, set_class_type, get_type, set_type}): Use type_base_sptr and class_decl_sptr instead of the full non-typedefed name. * src/abg-writer.cc (write_class_decl): Add a comment. 2016-02-13 Dodji Seketeli Bug 19619 - failing to suppress added aliased function reports for C++ * src/abg-comparison.cc (function_suppression::suppresses_function): Make the evaluation of the "name" and "name_regexp" consider the cases of languages in which the function name is the same as the symbol name and the case of languages in which it is not. In the former case, all symbol alias names must be matched. In the latter case, if "name" and "name_regexp" match the function name, the suppression specification is considered to match the report about the function change. Also, use the elf_symbol::is_main_symbol() predicate to test for the symbol being a main symbol, rather than using error-prone pointer equality. * tests/data/test-diff-suppr/test27-add-aliased-function-0.suppr: New test input. * tests/data/test-diff-suppr/test27-add-aliased-function-1.suppr: Likewise. * tests/data/test-diff-suppr/test27-add-aliased-function-2.suppr: Likewise. * tests/data/test-diff-suppr/test27-add-aliased-function-3.suppr: Likewise. * tests/data/test-diff-suppr/test27-add-aliased-function-4.suppr: Likewise. * tests/data/test-diff-suppr/test27-add-aliased-function-report-0.txt: Likewise. * tests/data/test-diff-suppr/test27-add-aliased-function-report-1.txt: Likewise. * tests/data/test-diff-suppr/test27-add-aliased-function-report-2.txt: Likewise. * tests/data/test-diff-suppr/test27-add-aliased-function-report-3.txt: Likewise. * tests/data/test-diff-suppr/test27-add-aliased-function-report-4.txt: Likewise. * tests/data/test-diff-suppr/test27-add-aliased-function-report-5.txt: Likewise. * tests/data/test-diff-suppr/test27-add-aliased-function-v0.cc: Likewise. * tests/data/test-diff-suppr/test27-add-aliased-function-v0.o: Likewise. * tests/data/test-diff-suppr/test27-add-aliased-function-v1.cc: Likewise. * tests/data/test-diff-suppr/test27-add-aliased-function-v1.o: Likewise. * tests/data/test-diff-suppr/test28-add-aliased-function-0.suppr: Likewise. * tests/data/test-diff-suppr/test28-add-aliased-function-1.suppr: Likewise. * tests/data/test-diff-suppr/test28-add-aliased-function-2.suppr: Likewise. * tests/data/test-diff-suppr/test28-add-aliased-function-3.suppr: Likewise. * tests/data/test-diff-suppr/test28-add-aliased-function-4.suppr: Likewise. * tests/data/test-diff-suppr/test28-add-aliased-function-5.suppr: Likewise. * tests/data/test-diff-suppr/test28-add-aliased-function-report-0.txt: Likewise. * tests/data/test-diff-suppr/test28-add-aliased-function-report-1.txt: Likewise. * tests/data/test-diff-suppr/test28-add-aliased-function-report-2.txt: Likewise. * tests/data/test-diff-suppr/test28-add-aliased-function-report-3.txt: Likewise. * tests/data/test-diff-suppr/test28-add-aliased-function-report-4.txt: Likewise. * tests/data/test-diff-suppr/test28-add-aliased-function-report-5.txt: Likewise. * tests/data/test-diff-suppr/test28-add-aliased-function-report-6.txt: Likewise. * tests/data/test-diff-suppr/test28-add-aliased-function-v0.c: Likewise. * tests/data/test-diff-suppr/test28-add-aliased-function-v0.o: Likewise. * tests/data/test-diff-suppr/test28-add-aliased-function-v1.c: Likewise. * tests/data/test-diff-suppr/test28-add-aliased-function-v1.o: Likewise. * tests/data/Makefile.am: Add the new test material above to the source distribution. * tests/test-diff-suppr.cc: Add the new test inputs above to this test harness. 2016-02-12 Dodji Seketeli Emit more informational messages on unrecognized options * tools/abicompat.cc (options::prog_name): New data member. (display_help, perform_compat_check_in_normal_mode) (perform_compat_check_in_weak_mode, main): Prefix error messages with the name of the program. * tools/abidw.cc (options::wrong_option): New data member. (display_help): Prefix error messages with the name of the program.n (parse_command_line): Record the name of the unrecognized option. (main): Tell the name of the unrecognized option. Prefix error messages with the name of the program. * tools/abilint.cc (optionqs::wrong_option): New data member (display_usage): Prefix error messages with the name of the program. (parse_command_line): Record the name of the unrecognized option. (main): Tell the name of the unrecognized option. Prefix error messages with the name of the program. * tools/abipkgdiff.cc (options::{wrong_option, prog_name}): New data members. (package::erase_extraction_directory, display_usage, extract_rpm) (extract_deb, extract_tar) (erase_created_temporary_directories_parent, extract_package) (compare, create_maps_of_package_content): Prefix error messages with the name of the program. (maybe_check_suppression_files): Adjust. (parse_command_line): Record the name of the unrecognized option, and the name of option which lacks an operand. (main): Give the name of the unrecognized option. Prefix error messages with the name of the program. 2016-02-12 Dodji Seketeli Prefix abidiff error message with the 'abidiff' program name * include/abg-tools-utils.h (emit_prefix): Declare new function. (check_file): Add a new parameter with a default value, so that existing code keeps compiling. * src/abg-tools-utils.cc (emit_prefix): Define new function. (check_file): Use the emit_prefix function and give it the program name passed as a new parameter. * tools/abidiff.cc (display_usage, main): Use the new emit_prefix to prefix error messages. 2016-02-11 Dodji Seketeli Bug 19606 - Need better error message for invalid options * tools/abidiff.cc (options::wrong_option): New data member. (parse_command_line): Record the name of the unknown option and of the option which value is missing. 2016-02-11 Dodji Seketeli Add a comment about libabigail needing elfutils 0.159 at least. * configure.ac: Add a comment saying that we require at least elfutils 0.159. 2016-02-11 Dodji Seketeli Talk about mandatory properties in suppress_* directives * doc/manuals/libabigail-concepts.rst: Talk about the mandatory properties for suppress_type, suppress_function and suppress_variable directives. 2016-02-11 Dodji Seketeli Make abipkgdiff check for the presence of suppression spec files * tools/abipkgdiff.cc (maybe_check_suppression_files): Define new static function. (main): Use it. 2016-02-11 Dodji Seketeli Make abipkgdiff return correct exit code on usage error * tools/abipkgdiff.cc (main): Return the correct error code on usage error. 2016-02-11 Dodji Seketeli Bug 19604 - abidiff --suppressions doesn't complain about invalid file name * tools/abidiff.cc (maybe_check_suppression_files): Define new static function. (main): Use it. 2016-02-10 Dodji Seketeli Use proper WIFEXITED and WEXITSTATUS macros to get exit code * tests/test-diff-dwarf-abixml.cc (main): Use WIFEXITED and WEXITSTATUS macros to get the return code of the abidiff program. * tests/test-diff-filter.cc (test_task::perform): Likewise. * tests/test-diff-pkg.cc (main): Likewise. * tests/test-diff-suppr.cc (main): Likewise. 2016-02-10 Dodji Seketeli Bug 19596 - Incorrect exit status for incompatible ABI change * include/abg-comparison.h (enum diff_category): Adjust the comment for enumerator VIRTUAL_MEMBER_CHANGE_CATEGORY; changes of this category are incompatible ABI changes. (corpus_diff::diff_stats::num_func_with_virtual_offset_changes): Declare new accessors. * src/abg-comparison.cc (corpus_diff::diff_stats::priv::num_func_with_virt_offset_changes): New data member. (corpus_diff::diff_stats::priv::priv): Initialize the new data member. (corpus_diff::diff_stats::num_func_with_virtual_offset_changes): Define new accessors. (corpus_diff::priv::apply_filters_and_compute_diff_stats): Use the new accessor to set the number of functions with virtual offset changes onto the stats data structure. (corpus_diff::has_incompatible_changes): Take functions with virtual offset changes into account. * tests/test-abidiff-exit.cc: New test harness to test for exit codes of abidiff. * tests/Makefile.am: Build the new test harness runtestabidiff from the test-abidiff-exit.cc source file. * tests/data/test-abidiff-exit/test1-voffset-change-report0.txt: New reference test output. * tests/data/test-abidiff-exit/test1-voffset-change-v0.cc: New test input source code. * tests/data/test-abidiff-exit/test1-voffset-change-v0.o: New test input. * tests/data/test-abidiff-exit/test1-voffset-change-v1.cc: New test input source code. * tests/data/test-abidiff-exit/test1-voffset-change-v1.o: New test input. * tests/data/Makefile.am: tests/data/Makefile.am: Add the new test inputs above to the source distribution. 2016-02-04 Dodji Seketeli Fix synthesizing of reference type * src/abg-ir.cc (synthesize_type_from_translation_unit): Support synthesizing reference types. * tests/data/test-abicompat/libtest9-fn-changed-v0.so: Add new test input. * tests/data/test-abicompat/libtest9-fn-changed-v1.so: Likewise. * tests/data/test-abicompat/test9-fn-changed-app: Likewise. * tests/data/test-abicompat/test9-fn-changed-app.cc: : Likewise. * tests/data/test-abicompat/test9-fn-changed-report-0.txt: Likewise. * tests/data/test-abicompat/test9-fn-changed-v0.cc: Likewise. * tests/data/test-abicompat/test9-fn-changed-v0.h: Likewise. * tests/data/test-abicompat/test9-fn-changed-v1.cc: Likewise. * tests/data/test-abicompat/test9-fn-changed-v1.h: Likewise. * tests/data/Makefile.am: Add the new material to source distribution. * tests/test-abicompat.cc (in_out_specs): Add the new test inputs to the test harness. 2016-02-03 Dodji Seketeli Fix synthesizing of pointer type * include/abg-ir.h: Update copyright. * src/abg-ir.cc (synthesize_type_from_translation_unit): Support synthesizing pointer types. * tests/data/test-abicompat/libtest8-fn-changed-libapp-v0.so: New test input. * tests/data/test-abicompat/libtest8-fn-changed-libapp-v1.so: Likewise. * tests/data/test-abicompat/test8-fn-changed-app: Likewise. * tests/data/test-abicompat/test8-fn-changed-app.c: Likewise. * tests/data/test-abicompat/test8-fn-changed-libapp-v0.c: Likewise. * tests/data/test-abicompat/test8-fn-changed-libapp-v0.h: Likewise. * tests/data/test-abicompat/test8-fn-changed-libapp-v1.c: Likewise. * tests/data/test-abicompat/test8-fn-changed-libapp-v1.h: Likewise. * tests/data/test-abicompat/test8-fn-changed-report-0.txt: Likewise. * tests/data/Makefile.am: Add the new test input files to source distribution. * tests/test-abicompat.cc (in_out_specs): Add the new test inputs above to the test harness. 2016-01-26 Mark Wielaard Remove defined but not used functions pointed out by GCC6. * src/abg-ir.cc (convert_node_to_decl(decl_base_sptr)): Remove definition. (get_node_name(decl_base_sptr)): Likewise. 2016-01-26 Mark Wielaard Make make more silent. * Makefile.am (AM_MAKEFLAGS): Set --no-print-directory. 2016-01-26 Mark Wielaard Fix GCC6 -Wmisleading-indentation warnings. * src/abg-dwarf-reader.cc (find_import_unit_point_before_die): Properly indent code after if clause. * src/abg-ini.cc (write_property_value): Properly indent return statement after else clause. 2016-01-27 Dodji Seketeli Fix abicompat's handling of library types not used by the application * tools/abicompat.cc (perform_compat_check_in_weak_mode): If the application doesn't use a given type defined and exported by the library, then skip it. 2016-01-27 Dodji Seketeli Do not crash when looking up a type from global scope * src/abg-ir.cc (lookup_type_in_scope): Gently Handle empty access path. 2016-01-25 Dodji Seketeli Comparing aliases of the same symbol must be done by pointer * src/abg-ir.cc (elf_symbol::operator==): Fix thinko and indentation. What was I thinking ... (elf_symbol::add_alias) (compute_aliases_for_elf_symbol): Do not compare aliases using the equality operator, because it considers all aliases of a given symbol as equal. Rather, use elf_symbol::is_main_symbol() to test if an alias is the main symbol alias. * src/abg-comp-filter.cc (function_name_changed_but_not_symbol): Likewise. * src/abg-corpus.cc (corpus::priv::build_unreferenced_symbols_tables): Likewise. * src/abg-writer.cc (write_elf_symbol_aliases): Likewise. 2016-01-21 Dodji Seketeli Bug 19204 - libabigail aborts on DWARF referencing non-existing DIE * src/abg-dwarf-reader.cc (get_parent_die): If we couldn't find the parent of a given DIE, return false, do not abort. Also, assert that if we don't find the parent of a DIE in the main debug info, we don't find it in the alternate debug info either (and vice versa). This is because I'd like to abort on cases where we look for a DIE in the wrong debug info; those cases are likely to be hint that the DWARF reader is doing something wrong which ought to be investigated and fixed. (get_scope_for_die): If we couldn't get the parent of the DIE, then return a nil scope. * tests/data/test-types-stability/pr19204-libtcmalloc.so.4.2.6-xlc: New test binary input. * tests/data/Makefile.am: Add the new binary test input to the source distribution. * tests/test-types-stability.cc (elf_paths): Account for the new binary input. 2016-01-20 Dodji Seketeli Pass parm of elf_symbol::add_alias by reference * include/abg-ir.h (elf_symbol::add_alias): Pass parameter by reference. * src/abg-ir.cc (elf_symbol::add_alias): Likewise. 2016-01-20 Dodji Seketeli Bug 19141 - Libabigail doesn't support common ELF symbols * include/abg-ir.h (elf_symbol::elf_symbol): Take a new flag to say if the symbol is common. (elf_symbol::{is_common_symbol, has_other_common_instances, get_next_common_instance, add_common_instance}): New member functions. * src/abg-ir.cc (elf_symbol::priv::{is_common_, next_common_instance_): New data members. (elf_symbol::priv::priv): Adjust. (elf_symbol::{elf_symbol, create}): Take a new flag to say if the symbol is common. (textually_equals): Adjust to account for symbol common-ness. (elf_symbol::{is_common_symbol, has_other_common_instances, get_next_common_instance, add_common_instance}): Define new member functions. (elf_symbol::add_alias): Drive-by fix; compare symbols using pointer value. Value comparison is not necessary. * src/abg-dwarf-reader.cc (lookup_symbol_from_sysv_hash_tab) (lookup_symbol_from_gnu_hash_tab, lookup_symbol_from_symtab) (read_context::lookup_elf_symbol_from_index): Adjust the creation of the symbol to account for common-ness. (read_context::load_symbol_maps): Recognize instances of a given common symbol and represent them as such. Do not mistake this with symbol aliases. * src/abg-reader.cc (build_elf_symbol): Adjust the creation of the symbol to account for common-ness. * src/abg-writer.cc (write_elf_symbol): Adjust symbol serialization to account common-ness. * tests/data/test-types-stability/pr19141-get5d.o: Add new test binary input. * tests/data/test-types-stability/pr19142-topo.o: Likewise. * tests/data/Makefile.am: Add the new test inputs to source distribution. * tests/test-types-stability.cc (elf_paths): The the new test inputs into account. 2016-01-13 Dodji Seketeli Bug 19434 - invalid character in attribute value * include/abg-tools-utils.h (string_is_ascii_identifier): Declare new function. * src/abg-tools-utils.cc (string_is_ascii_identifier): Define new function. * src/abg-dwarf-reader.cc (build_function_type): Discard parameter name if it's made of non-identifier ascii characters. * tests/data/test-types-stability/pr19434-elf0: New test binary input file. * tests/data/Makefile.am: Add the new test input to source distribution. * tests/test-types-stability.cc: Test the new test input into account. 2016-01-18 Dodji Seketeli Sort the tests run in tests/ by running the slowest ones first * tests/Makefile.am: Sort the tests by running the slowest ones first. 2016-01-15 Dodji Seketeli Use worker threads pattern to speed up some tests * include/Makefile.am: Add the new abg-workers.h to source distribution. * include/abg-workers.h: New file. * src/Makefile.am: Add the new abg-worker.cc to source distribution. * src/abg-workers.cc: New file. * tests/test-utils.cc: Update copyright. Make get_src_dir() and get_build_dir() return a const char*, as opposed to returning a string. Make that const char reside in thread local storage, so that two concurrent threads can safely call these functions in parallel, without any race. * tests/test-utils.h: Make get_src_dir() and get_build_dir() return a const char*, as opposed to returning a string. * tests/test-abicompat.cc: Update copyright. Adjust for get_src_dir() and get_build_dir() change. * tests/test-abidiff.cc: Likewise. * tests/test-alt-dwarf-file.cc: Likewise. * tests/test-core-diff.cc: Likewise. * tests/test-diff-dwarf-abixml.cc: Likewise. * tests/test-diff-dwarf.cc: Likewise. * tests/test-diff-pkg.cc: Likewise. * tests/test-diff-suppr.cc: Likewise. * tests/test-lookup-syms.cc: Likewise. * tests/test-read-dwarf.cc: Likewise. * tests/test-read-write.cc: Likewise. * tests/test-types-stability.cc: Likewise. Use the new task queue type to run these tests in parallel. * tests/test-diff-filter.cc: Likewise. 2016-01-18 Ondrej Oprala Escape the value of the filepath attribute. * src/abg-writer.cc (write_location): Sanitize the filepath with xml::escape_xml_string(). (write_translation_unit): Likewise. (write_corpus_to_native_xml): Likewise. * tests/data/test-types-stability/pr19433-custom0: Add a new test file. * tests/test-types-stability.cc: Add the test file to the test harness. * tests/data/Makefile.am: Add the new test file to the list. 2016-01-09 Dodji Seketeli Make enum values take 64 bits on all platforms * include/abg-ir.h: Include stdint.h for int64_t. (enumerator::enumerator): Take an int64_t value for the value of the enumerator. (enumerator::{s,g}et_value): Take/return an int64_t value. * src/abg-ir.cc (enum_type_decl::enumerator::priv): Store the value in an int64_t. (enumerator::priv::priv): Take a int64_t for the value. (enum_type_decl::enumerator::enumerator): Likewise. (enum_type_decl::enumerator::{s,g}et_value): Take/returnan int64_t value. * src/abg-dwarf-reader.cc (die_unsigned_constant_attribute): Take an uint64_t value. (die_signed_constant_attribute): Take an int64_t value. (die_location, die_size_in_bits, die_access_specifier) (die_virtuality, die_is_virtual, die_is_declared_inline) (build_translation_unit_and_add_to_ir, build_type_decl) (build_enum_type, build_pointer_type_def, build_array_type): Adjust. * src/abg-reader.cc (build_enum_type_decl): Adjust. * src/abg-writer.cc (write_enum_type_decl): Do not cast the result of enumerator::get_value() anymore, it's value is now a int64_t. 2016-01-08 Dodji Seketeli Include missing to abg-dwarf-reader.cc * src/abg-dwarf-reader.cc: Add missing include file. 2016-01-08 Dodji Seketeli Bug 19138 - Failure to relate variables address from DWARF and ELF * include/abg-dwarf-reader.h (elf_type::ELF_TYPE_RELOCATABLE): New enumerator. * src/abg-dwarf-reader.cc (find_section): Factorize this from ... (find_text_section, find_bss_section): ... these. (find_rodata_section, find_data_section, find_data1_section): Define new static functions. (elf_file_type): Move this static function definition up. (read_context::{get_elf_file_type, address_is_in_section, get_data_section_for_variable_address}): New member functions. (read_context::maybe_adjust_fn_sym_address): Adjust comment. Adjust to use the new read_context::get_data_section_for_variable_address(). * tests/data/test-types-stability/pr19138-elf0: New test input binary. * tests/data/Makefile.am: Add the new test input binary to the test suite. * tests/test-types-stability.cc (elf_paths): Take it into account. 2016-01-08 Dodji Seketeli Bump version revision to 1.0.rc3 * configure.ac: Change version_revision to rc3 2016-01-08 Dodji Seketeli Add a release announcement text pattern * release-text-template.txt: New file. 2016-01-08 Dodji Seketeli Upate build instructions on the website * doc/website/mainpage.txt: Add instruction about how to build tarballs. 2016-01-07 Dodji Seketeli Update website link for 1.0.rc2 * doc/website/mainpage.txt: Update tarball link for 1.0.rc2 2016-01-07 Dodji Seketeli Update ChangeLog before 1.0.rc2 * ChangeLog: Update with make update-changelog 2016-01-07 Dodji Seketeli Update NEWS for 1.0.rc2 * NEWS: Update. 2016-01-07 Dodji Seketeli Fix tests/data/Makefile.am glitch * tests/data/Makefile.am: Fix a faulty file path. 2016-01-07 Dodji Seketeli Lexicographically sort added/removed base classes in change report * src/abg-comparison.cc (sort_string_base_diff_sptr_map): Define new static function. (struct base_spec_comp): Define new type. (class_diff::priv::sorted_{deleted,inserted}_bases_): New data members. (class_diff::ensure_lookup_tables_populated): Sort the deleted and inserted base classes. (class_diff::report): Use the sorted set of deleted/inserted base classes in the report. * tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-0.txt: Adjust. 2016-01-06 Dodji Seketeli Fix regression on the support for alternate debug info files * src/abg-dwarf-reader.cc (imported_unit_point::imported_unit_from_alt_di): New data member. (imported_unit_point::imported_unit_point): Adjust. (read_context::alt_tu_die_imported_unit_points_map_): New data member. (read_context::alt_tu_die_imported_unit_points_map): New accessor. (die_die_attribute): Remove the overload which doesn't say if the resulting DIE comes from alternate debug info. (build_die_parent_relations_under): Take a new flag which says if we are building the relations about DIEs in the alternate debug info section or not. Use that flag to know if the imported unit trace we are building is for an alternate debug info file or not. (build_die_parent_maps): Build two different imported unit point trace vectors: one for the main debug info file, and another one for the alternate debug info file. (find_import_unit_point_between_dies): Take a flag that says if the beginning of the search is a DIE in the alternate debug info file or not. Use it to know if we should use the import point trace vectors from alternate debug info or from the main debug info file. When the import point trace vector is empty, return immediatly. (get_parent_die): If the parent DIE is a DW_TAG_partial_unit which hasn't been imported into this TU, then assume the logical parent is the DIE for the current translation unit. * tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-0.txt: Reference test output. * tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64.rpm: New input test rpm. * tests/data/test-diff-pkg/tbb-4.3-3.20141204.fc23.x86_64.rpm: Likewise. * tests/data/test-diff-pkg/tbb-debuginfo-4.1-9.20130314.fc22.x86_64.rpm: Likewise. * tests/data/test-diff-pkg/tbb-debuginfo-4.3-3.20141204.fc23.x86_64.rpm: Likewise. * tests/data/Makefile.am: Add the new test materials to the source distribution. * tests/test-diff-pkg.cc (int_out_specs): Add the new rpms to the list of rpms to test against. 2016-01-06 Dodji Seketeli Bump revision number to 1.0.rc2 * configure.ac: Bump revision number to 1.0.rc2 2016-01-05 Dodji Seketeli Update link to the 1.0.rc1 tarball * doc/website/mainpage.txt: Update the "Getting source code" section. 2016-01-05 Dodji Seketeli Update ChangeLog before 1.0.rc1 * ChangeLog: Update automatically with make update-changelog 2016-01-05 Dodji Seketeli Fix abidw -v * tools/abidw.cc (parse_command_line): Simplify logic. (main): Fix logic. 2016-01-05 Dodji Seketeli Add a NEWS file * NEWS: New file. * Makefile.am: Add NEWS file to source distribution. 2016-01-04 Dodji Seketeli Bug 19355 - Libabigail slow on r300_dri.so * src/abg-dwarf-reader.cc (struct imported_unit_point): Define new type. (operator<(const imported_unit_point&, const imported_unit_point&)): Define less-than operator for new imported_unit_point& type. (imported_unit_points_type, tu_die_imported_unit_points_map_type): New typedefs. (find_lower_bound_in_imported_unit_points): Define new static function. (read_context::tu_die_imported_unit_points_map_): New data member. (read_context::tu_die_imported_unit_points_map): New getter. (die_die_attribute): Define new overload. (build_die_parent_relations_under): Take imported_unit_points_type output parameter and populate it along the way. Remove the overload that takes a read_context as a parameter. (build_primary_die_parent_relations_under) (build_alternate_die_parent_relations_under): Remove. (build_die_parent_maps): Pass an instance of imported_unit_points_type to build_die_parent_relations_under. (find_import_unit_point_between_dies): Rename one overload of find_last_import_unit_point_before_die into this. Adjust to make it find the import point between two offsets. (find_import_unit_point_before_die): Rename the other overload of find_last_import_unit_point_before_die into this. Adjust to use find_import_unit_point_between_dies. (get_parent_die): Adjust to use find_import_unit_point_before_die. 2016-01-04 Dodji Seketeli Support two different variables having the same underlying symbol * src/abg-ir.cc (var_decl::get_id()): Include the name of the variable in the ID. 2016-01-04 Dodji Seketeli Avoid adding the same base class twice * src/abg-dwarf-reader.cc: * src/abg-reader.cc: 2016-01-04 Dodji Seketeli Speed up class_decl::find_base_class * src/abg-ir.cc (class_decl::priv::bases_map_): New data member. (class_decl::add_base_specifier): Add the new base specifier to the new class_decl::priv::bases_map_ data member. (class_decl::find_base_class): Use the new class_decl::priv::bases_map_ data member to speed up finding the base class. 2016-01-04 Dodji Seketeli Make class_decl::base_spec class follow the pimpl pattern * include/abg-ir.h (class_decl::base_spec::priv): Declare new private data type. (class_decl::base_spec::priv_): Declare new pimpl data member. (class_decl::base_spec::{base_class_, offset_in_bits_, is_virtual_}): Remove. (class_decl::base_spec::{get_base_class, get_is_virtual, get_offset_in_bits}): Make these member functions out of line. * src/abg-ir.cc (struct class_decl::base_spec::priv): New type. (class_decl::base_spec::{get_base_class, get_is_virtual, get_offset_in_bits}): Define these functions here. (class_decl::base_spec::base_spec): Adjust because now there is only one pimpl data member to initialize. 2015-11-16 Ondrej Oprala Add the option of printing the file, line and column information about a type being reported. * bash-completion/abicompat: Complete the new "--no-show-locs" option. * bash-completion/abidiff: Likewise. * bash-completion/abidw: Likewise. * bash-completion/abipkgdiff: Likewise. * doc/manuals/abicompat.rst: Mention the new "--no-show-locs" option. * doc/manuals/abidiff.rst: Likewise. * doc/manuals/abidw.rst: Likewise. * doc/manuals/abipkgdiff.rst: Likewise. * include/abg-comparison.h (show_locs): Add declarations. * src/abg-comparison.cc: (diff_context::priv): Add a new switch called "show_locs_" and set its default value to false. (report_loc_info): New function. Outputting the extra information is conditionalized based on the associated diff contexts settings. (show_locs): define a getter/setter for diff_context::priv::show_locs_. ({distinct,pointer,reference,qualified_type,enum,class,scope,fn_parm, typedef,corpus}_diff::report): Call report_loc_info when appropriate. (maybe_report_diff_for_member): Likewise. (represent): Accept a const reference to a diff_context_sptr as a first argument and call report_loc_info on its second argument. * src/abg-dwarf-reader.cc: * tests/data/Makefile.am: Add the new test reference files. * tests/data/test-abicompat/test0-fn-changed-report-2.txt: New test reference output. * tests/data/test-abicompat/test5-fn-changed-report-1.txt: Likewise. * tests/data/test-abicompat/test6-var-changed-report-1.txt: Likewise. * tests/data/test-abicompat/test7-fn-changed-report-2.txt: Likewise. * tests/data/test-diff-filter/test30-pr18904-rvalueref-report1.txt: Likewise. * tests/data/test-diff-filter/test31-pr18535-libstdc++-report-1.txt: Likewise. * tests/data/test-diff-pkg/dirpkg-3-report-2.txt: Likewise. * tests/data/test-diff-suppr/test6-fn-suppr-report-0-1.txt: Likewise. * tests/test-abidiff.cc: Explicitly create a diff context and turn off location emitting. * tests/test-diff-dwarf.cc: Likewise. * tests/test-abicompat.cc: Add --no-show-locs to all existing test arguments. Run a few of the existing tests again, but without this option. * tests/test-diff-filter.cc: Likewise. * tests/test-diff-pkg.cc: Likewise. * tests/test-diff-suppr.cc: Likewise. * tools/abicompat.cc: Handle the new "--no-show-locs" option. * tools/abidiff.cc: Likewise. * tools/abidw.cc: Likewise. * tools/abipkgdiff.cc: Likewise. 2015-11-16 Ondrej Oprala Fix a function doc * src/abg-ir.cc: (location_manager::expand_location): Fix a factual error in the function documentation. 2015-12-11 Dodji Seketeli [PERF] Speedup comparing declaration-only class_decls * src/abg-ir.cc (equals): In the overload for class_decl, avoid calling class_decl::get_is_declaration_only() several times. Avoid copying the qualified name of the class_decl. Also, use the == operator to compare strings, rather than the != one. 2015-12-11 Dodji Seketeli [PERF] Access naked pointers for canonical types and function types * include/abg-ir.h (type_base::get_naked_canonical_type): Declare new accessor. (function_decl::get_naked_canonical_type): Likewise. (function_decl::set_type): Pass a reference to the shared_ptr. * src/abg-ir.cc (type_base::priv::naked_canonical_type): New data member. (type_base::priv::priv): Initialize it. (canonicalize): Set the naked canonicalize type when we set its shared pointer. (type_base::get_naked_canonical_type): Define new accessor. ({pointer_type_def,reference_type_def,function_type,class_decl}::operator==): Use naked canonical pointers rather than the slower shared_ptr to canonical pointers. (function_decl::priv::naked_type_): New data member. (function_decl::priv::priv): Initialize it. (function_decl::get_naked_type): Define new accessor. (function_decl::set_type): Pass a reference to the shared_ptr . (equals): In the overload for function_decl, use the faster naked pointers to the type of the function. 2015-12-11 Dodji Seketeli [PERF] Turn some pimpl pointers into naked pointers * include/abg-ir.h ({decl_base, type_base, function_decl}::priv_) Make this a naked pointer to priv, rather than a shared_ptr. * src/abg-ir.cc (decl_base::~decl_base): Destroy the private data pointer, aka pimpl pointer. (type_base::~type_base): Likewise. (function_decl::~function_decl): Likewise. (class_decl::~class_decl): Likewise. 2015-12-11 Dodji Seketeli [PERF] Pass a bunch of perf-sensitive smart pointers by reference * include/abg-fwd.h (lookup_type_in_corpus, lookup_type_in_scope) (lookup_var_decl_in_scope): Pass the decls smart pointers by reference. * src/abg-ir.cc (lookup_type_in_corpus, lookup_type_in_scope) (lookup_var_decl_in_scope): Pass the decls smart pointers by reference, for performance reasons. 2015-12-10 Dodji Seketeli Bug 19126 - abidw segv on a dwz compressed version of r300_dri.so * include/abg-ir.h (class location_manager): Forward declare it before class location. (location::loc_manager_): New data member. (location::location): Take the location manager in one overload and initialize the new loc_managers_ in all the overloads. (location::get_location_manager): New getter. (location::expand): New member function. (location::*): Add API doc to all entry points. (location_manager::expand_location): Take a const location. (type_or_decl_base::set_corpus): Remove. (type_or_decl_base::{get,set}_translation): New accessors. (decl_base::{decl_base,get_location}): Take or return a reference on location. (scope_decl::scope_decl): Likewise. (type_decl::type_decl): Likewise. (namespace_decl::namespace_decl): Likewise. (qualified_type_def::qualified_type_def): Likewise. (pointer_type_def::pointer_type_def): Likewise. (reference_type_def::reference_type_def): Likewise. (array_type_def::subrange_type::{subrange_type, get_location}): Likewise. (enum_type_decl::enum_type_decl): Likewise. (typedef_decl::typedef_decl): Likewise. (var_decl::var_decl): Likewise. (function_decl::function_decl): Likewise. (function_decl::parameter::parameter): Likewise. (template_decl::template_decl): Likewise. (type_tparameter::type_tparameter): Likewise. (non_type_tparameter::non_type_tparameter): Likewise. (function_tdecl::function_tdecl): Likewise. (class_tdecl::class_tdecl): Likewise. (class_decl::class_decl): Likewise. (class_decl::method_decl::method_decl): Likewise. * src/abg-ir.cc (location::expand_location): Define new member function. (type_or_decl_base::priv::corpus_): Remove. (type_or_decl_base::priv::translation_unit_): New data member. (type_or_decl_base::priv::priv): Adjust. (type_or_decl_base::set_corpus): Remove. (type_or_decl_base::get_corpus): Adjust. (type_or_decl_base::{get,set}_translation_unit): New member functions. (decl_base::priv::priv): Take a reference to location. (decl_base::decl_base): Likewise. (decl_base::get_location): Return a reference to location. (location_manager::create_new_location): Adjust. (location_manager::expand_location): Take a reference to location. (translation_unit::get_global_scope()): Adjust. (translation_unit::bind_function_type_life_time): Likewise. (scope_decl::{add,insert}_member_decl): Adjust. (get_translation_unit): Likewise. (type_decl::type_decl): Take a reference to location. (namespace_decl::namespace_decl): Likewise. (qualified_type_def::qualified_type_def): Likewise. (pointer_type_def::pointer_type_def): Likewise. (reference_type_def::reference_type_def): Likewise. (array_type_def::subrange_type::priv::priv): Likewise. (array_type_def::subrange_type::{subrange_type, get_location}): Likewise. (enum_type_decl::enum_type_decl): Likewise. (typedef_decl::typedef_decl): Likewise. (var_decl::var_decl): Likewise. (function_decl::function_decl): Likewise. (function_decl::parameter::parameter): Likewise. (template_decl::template_decl): Likewise. (type_tparameter::type_tparameter): Likewise. (non_type_tparameter::non_type_tparameter): Likewise. (function_tdecl::function_tdecl): Likewise. (class_tdecl::class_tdecl): Likewise. (class_decl::class_decl): Likewise. (class_decl::method_decl::method_decl): Likewise. * src/abg-writer.cc (write_location): Take a reference to location and adjust. (write_array_type_def, write_function_decl, dump_decl_location): Adjust. 2015-12-08 Dodji Seketeli Fix some white space nits * src/abg-comparison.cc (class_diff::report): Remove a useless horizontal white space. * src/abg-ir.cc (operator==): Add a vertical space. 2015-12-08 Dodji Seketeli Filter out harmless diagnostics glitches due to some ODR violation * src/abg-comp-filter.cc (class_diff_has_harmless_odr_violation_change): New static function. (harmless_filter::visit): Call it. 2015-12-08 Dodji Seketeli Fix internal name for pointers, typedefs and arrays * include/abg-ir.h (pointer_type_def::priv_): New data structure. The type is now pimpled. (typedef_decl::priv_): Likewise. * src/abg-ir.cc (struct pointer_type_def::priv): New struct. (pointer_type_def::pointer_type_def): Adjust. (pointer_type_def::get_pointed_to_type): Likewise. (pointer_type_def::get_qualified_name): Store temporary/internal names into different caches. (array_type_def::priv::{temp_internal_qualified_name_, internal_qualified_name_}): New data members. (get_type_representation): In the overload for array_type_def, take requests for internal names into account. (array_type_def::get_qualified_name): Take requests for internal names into account. Store temporary/internal names into different caches. (typedef_decl::priv): New struct. (typedef_decl::typedef_decl): Adjust. (typedef_decl::get_underlying_type): Likewise. 2015-12-08 Dodji Seketeli Avoid try/catch code paths when that is possible * src/abg-ir.cc (is_type, equals): Do not use try/catch based dynamic_cast. 2015-12-08 Dodji Seketeli Fix comparison in qualified_type_diff::has_changes * src/abg-comparison.cc (qualified_type_diff::has_changes): Make this stupid and simple, now that we have (fast) canonical type based comparison. * include/abg-ir.h (qualified_type_diff::operator==): Add an overload for qualified_type_diff here. (operator==): Likewise. * src/abg-ir.cc (qualified_type_diff::operator==): Define it. (operator==): Likewise. 2015-12-06 Dodji Seketeli Bug 19336 - Better handle redundantly qualified reference types * src/abg-dwarf-reader.cc (maybe_strip_qualification): Do not nuke the qualified type. Rather, just turn the redundant const qualifier into a no-op one. * src/abg-comparison.cc (compute_diff_for_types): Look through no-op qualified types. * include/abg-ir.h (decl_base::{peek,set}_temporary_qualified_name): Declare new accessors. * src/abg-ir.cc (decl_base::priv::temporary_qualified_name_): New data member. (decl_base::{peek,set}_temporary_qualified_name): Define new accessors. (qualified_type_def::priv::{temporary_internal_name_, internal_name}): New data members. (qualified_type_def::build_name): For a no-op qualified type, the internal name (which contains the 'none' qualifier) is different from the non-internal name. (qualified_type_def::get_qualified_name): Handle temporary names and non-temporary names in two different caches. Also handle internal and non-internal names in two different caches. This makes four different caches. (qualified_name_setter::do_update): Do not touch the non-internal, non-temporary qualified name cache if the qualified parent name is empty. * tools/abidw.cc (main): change --check-alternate-debug-info to make it *not* display the name/path to the alternate debug info, when it's found. Rather, only --check-alternate-debug-info-base-name keeps displaying the base name of the alternate debug info. * tests/data/test-alt-dwarf-file/test1-libgromacs-debug-dir/*: New test material. * tests/data/Makefile.am: Add the new test material to the build system. * tests/test-alt-dwarf-file.cc (in_out_specs): Take the new test input into account. * tests/data/test-read-dwarf/test1.abi: Adjust. * tests/data/test-read-dwarf/test7.so.abi: Likewise. * tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: Likewise. * tests/data/test-read-dwarf/test11-pr18828.so.abi: Likewise. * tests/data/test-read-dwarf/test14-pr18893.so.abi: Likewise. * tests/data/test-read-dwarf/test15-pr18892.so.abi: Likewise. * tests/data/test-read-dwarf/test16-pr18904.so.abi: Likewise. * tests/data/test-read-dwarf/test17-pr19027.so.abi: Likewise. * tests/data/test-read-dwarf/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: Likewise. * tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi: Likewise. * tests/data/test-read-dwarf/test20-pr19025-libvtkParallelCore-6.1.so.abi: Likewise. * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: Likewise. 2015-12-06 Dodji Seketeli Do not forget to peel qualified type off when peeling types * include/abg-fwd.h (peel_qualified_type): Declare new function ... * src/abg-ir.cc (peel_qualified_type): ... and define it. (peel_typedef_pointer_or_reference_type): Peel qualified types here too. 2015-12-06 Dodji Seketeli Find more spots where to discriminate internal and non-internal names * src/abg-ir.cc (get_type_name, get_method_type_name) ({typedef_decl,var_decl,function_decl,class_decl}::get_pretty_representation): Propagate the internal-ness to the call to get_qualified_name(). 2015-12-06 Dodji Seketeli Constify is_qualified_type() * include/abg-fwd.h (is_qualified_type): Make this take a const parameter. * src/abg-ir.cc (is_qualified_type): Likewise. 2015-11-28 Dodji Seketeli Add missing new line to abidiff help message * tools/abidiff.cc (display_usage): Add missing new line. 2015-11-26 Dodji Seketeli Do not abort when there is no binary to compare in a package * tests/data/test-diff-pkg/empty-pkg-libvirt-0.9.11.3-1.el7.ppc64.rpm: New input test package. * tests/data/test-diff-pkg/empty-pkg-libvirt-1.2.17-13.el7_2.2.ppc64.rpm: Likewise. * tests/data/test-diff-pkg/empty-pkg-report-0.txt: New test reference output. * data/Makefile.am: Add the new test material above to the build system. * tests/test-diff-pkg.cc (int_out_specs): Add the new test inputs to the set of tests. * tools/abipkgdiff.cc (compare): Do not abort if there is no binary to compare. 2015-11-14 Ondrej Oprala Abidiff: Remove doubled line in help. * tools/abidiff.cc (display_usage): Remove a doubled help message. 2015-11-14 Ondrej Oprala Add bash-completion scripts for the libabigail tools * Makefile.am: include bash-completion/Makefile.am * bash-completion/Makefile.am: New makefile for the bash-completion directory. * bash-completion/abicompat: New completion script. * bash-completion/abidiff: Likewise. * bash-completion/abidw: Likewise. * bash-completion/abilint: Likewise. * bash-completion/abinilint: Likewise. * bash-completion/abipkgdiff: Likewise. * bash-completion/abisym: Likewise. * configure.ac: Check for the bash-completion package. Handle the new --enable-bash-completion[=WHEN] configure option. * manuals/libabigail-tools.rst: Mention the scripts. 2015-11-17 Dodji Seketeli Read enum values in the size_t and write them in ssize_t * include/abg-ir.h (enum_type_def::enumerator::get_value): Return a size_t. * src/abg-ir.cc (enum_type_decl::enumerator::get_value): Likewise. * src/abg-dwarf-reader.cc (die_signed_constant_attribute): #if-out this static function that is not used anymore. (build_enum_type): Read the value of the enumerator using a size_t value. * src/abg-reader.cc (build_enum_type_decl): Read the enum value using a long long int. * src/abg-writer.cc (write_enum_type_decl): Write using a ssize_t. 2015-11-17 Dodji Seketeli Bump version to release candidate 1.0.rc1 * configure.ac: Bump version to release candidate 1.0.rc1 2015-11-17 Dodji Seketeli Do not use designated initializers in abipkgdiff.cc * tools/abipkgdiff.cc (prepare_packages): Do not use designated initializers syntax. 2015-11-16 Dodji Seketeli Update ChangeLog for 1.0.rc0 * ChangeLog: Udpate using make update-changelog 2015-11-16 Dodji Seketeli Fix doxygen configuration file paths in doc/Makefile.am * doc/Makefile.am: There was an extra "/doc" in the path. 2015-11-16 Dodji Seketeli Update ChangeLog file in preparation of 1.0.rc0 release * ChangeLog: Update using make update-changelog. 2015-11-16 Dodji Seketeli Add --version option to several libabigail tools * configure.ac: Set the version revision to "rc0". * doc/manuals/abicompat.rst: Adjust manual for new --version option. * doc/manuals/abidiff.rst: Likewise. * doc/manuals/abidw.rst: Likewise. * doc/manuals/abilint.rst: Likewise. * doc/manuals/abipkgdiff.rst: Likewise. * include/abg-config.h (config::{m_format_minor, m_format_major}): Make these be strings. (config::{get,set}_format_minor_version_number): Make these return strings. (config::{get,set}_format_major_version_number): Make these return or take strings. (abigail_get_library_version): Make this take strings. * src/abg-config.cc (config::config): Adjust. (config::{get,set}_format_major_version_number): Make these return or take strings. (config::{get,set}_format_minor_version_number): Make these return strings. (abigail_get_library_version): Make this take strings. * include/abg-version.h.in: Make the version variables be strings. * src/abg-writer.cc (write_translation_unit): The version numbers are now strings so adjust. * tools/{abicompat,abidiff,abidw,abilint,abipkgdiff,abisym}.cc (options::display_version): New data member. (options::options): Initialize it. (display_usage): Add documentation for new --version option. (parse_command_line): Parse new --version option. (main): Support --version. 2015-11-12 Dodji Seketeli Correctly handle fn DIE with abstract_origin in alt debug info * src/abg-dwarf-reader.cc (build_ir_node_from_die): Consider that the function decl is for a DIE in the alternate debug info file only if the DIE itself comes from the alternate debug info file, not if the specification or the origin of the function comes from the alternate debug info file. * tests/data/test-diff-pkg/qemu-img-rhev-2.3.0-20.el7.ppc64.rpm: New test input rpm. * tests/data/test-diff-pkg/qemu-img-rhev-2.3.0-7.el7.ppc64.rpm: Likewise. * tests/data/test-diff-pkg/qemu-kvm-rhev-debuginfo-2.3.0-20.el7.ppc64.rpm: Likewise. * tests/data/test-diff-pkg/qemu-kvm-rhev-debuginfo-2.3.0-7.el7.ppc64.rpm: Likewise. * tests/data/test-diff-pkg/qemu-img-rhev-2.3.0-7.el7.ppc64--qemu-img-rhev-2.3.0-20.el7.ppc64-report-0.txt: New test reference output. * tests/data/Makefile.am: Add the new test material to the source distribution. * tests/test-diff-pkg.cc (in_out_specs): Use the new test rpm inputs. 2015-11-09 Ondrej Oprala Bug 19081 - abipkgdiff parallelization * doc/manuals/abipkgdiff.rst: Mention the new --no-parallel option. * tools/Makefile.am: Add -pthread to abipkgdiffs link options. * tools/abipkgdiff.cc (elf_file_paths_tls_key): New key for the thread-local vector of ELF filepaths. (reports_map): A map of the path of the first ELF of a compared pair and a corpus representing the difference. (env_map): A map of the corpus difference and a corresponding environment needed to be kept alive until the diff is reported. ({arg,map}_lock): mutexes to control access to the comparison argument list and the {reports,env}_map respectively. (options): Add a new member "parallel" and set it to true in the ctor. (elf_file): Add a new "size" member and set it in the ctor. (package descriptor): Arguments passed to extract_package_set. (compare_args): Arguments passed to the ELF comparison function. (display_usage): Mention the new "--no-parallel" option. (pthread_routine_extract_package): A wrapper function around extract_package to be used in a multi-threaded environment. ({first_second}_package_tree_walker_callback_fn): Add the new ELF file paths to a thread-specific vector. (compare): In an overload of compare, verbose output is updated to always mention the ELF files being compared for each reported stage. Reporting is no longer done in this function, the resulting difference is instead passed back to the calling function for reporting in the main thread, along with a corresponding environment. (pthread_routine_compare): Accept a pointer to a vector of comparison arguments. This function is to be called NTHREAD times and share the vector passed to it with its other invocations. Create the environment for compare() and store its output in a map if there is a difference. (create_maps_of_package_content): Allocate memory for a thread local vector of ELF paths and dispose of it before returning. (pthread_routine_extract_pkg_and_map_its_content): Renamed from extract_package_and_map_its_content. Extract the debuginfo as well as the regular package in this function. Spawn a separate thread for the extraction of the debug package. (pthread_join): A function handling thread joining throughout package extractions. (prepare_packages): Spawn a thread to extract each set of packages. (elf_size_is_greater): New comparison function used to order ELF pairs by size. (compare): In the overload of compare, pass through the ELF path vectors and identify pairs to be diffed. Put them in a vector and sort it by the summed ELF pair size. Spawn comparison threads and safely check for results in the proper order of the ELF pairs. Report any differences ASAP and collect the threads after all the reporting is done, checking their return status. (parse_command_line): Check for the "--no-parallel" option. 2015-11-10 Dodji Seketeli Fix typo in test-diff-dwarf-abixml.cc * tests/test-diff-dwarf-abixml.cc (main): Fix typo. 2015-10-14 Ondrej Oprala Document abipkgdiff's option --no-abignore * doc/manuals/abipkgdiff.rst: Mention the new option. * tools/abipkgdiff.cc: Likewise. 2015-11-09 Dodji Seketeli Avoid canonicalizing function types too early * src/abg-dwarf-reader.cc (die_function_type_map_type): New typedef. * (): (read_context::die_wip_function_types_map_): New data member. (read_context::{die_wip_function_types_map, is_wip_function_type_die_offset}): New methods. (build_function_type): Mark the function being built as "work in progress". (maybe_canonicalize_type): Do not early-canonicalize WIP function types. * src/abg-reader.cc (build_function_type): Mark the function being built as "work in progress". * tests/test-diff-dwarf-abixml.cc: New test harness. * tests/Makefile.am: Add new test harness runtestdiffdwarfabixml to the build system. * tests/data/test-diff-dwarf-abixml/test0-pr19026-libvtkIOSQL-6.1.so.1: New test binary input. * tests/data/test-diff-dwarf-abixml/test0-pr19026-libvtkIOSQL-6.1.so.1.abi: New test input. * tests/data/Makefile.am: Add new test inputs to source distribution. * tests/data/test-read-dwarf/test17-pr19027.so.abi: Adjust. 2015-11-09 Dodji Seketeli Propagate environment property to base specifiers * src/abg-comparison.cc (compute_diff): In the overload for class_decl::base_spec_sptr, assert that the environment of the base classes are equal and that the environment the base class is the same as the environment of the base specifier. * src/abg-ir.cc (add_base_specifier): Propagate the environment of the class to its base specifiers. * tests/data/test-types-stability/pr19026-libvtkIOSQL-6.1.so.1: New test binary input. * tests/data/Makefile.am: Add the new test input to the build system. * tests/test-types-stability.cc (elf_paths): Add new binary to the test harness. 2015-11-09 Dodji Seketeli Misc style fixes * src/abg-comparison.cc (diff_context::mark_diff_as_visited): Add missing space. (corpus_diff::priv::ensure_lookup_tables_populated): Likewise. * src/abg-dwarf-reader.cc (lookup_symbol_from_elf): Likewise. (get_soname_of_elf_file, get_type_of_elf_file): Likewise. * src/abg-ir.cc (var_decl::get_pretty_representation): Likewise. 2015-11-07 Dodji Seketeli Support DW_AT_count DWARF attribute * src/abg-dwarf-reader.cc (get_default_array_lower_bound): Define new static function. (build_array_type): Support the DW_AT_count attribute. * tests/data/test-diff-dwarf/test35-pr19173-libfoo-long-clang.so: New test binary input. * tests/data/test-diff-dwarf/test35-pr19173-libfoo-long-clang2.so: Likewise. * tests/data/test-diff-dwarf/test35-pr19173-libfoo-long-clang-report-0.txt: New test reference output. * tests/data/test-diff-dwarf/test35-pr19173-libfoo-long-gcc.so: New test binary input. * tests/data/test-diff-dwarf/test35-pr19173-libfoo-long-gcc2.so: New test binary input. * tests/data/test-diff-dwarf/test35-pr19173-libfoo-long-gcc-report-0.txt: New test reference output. * tests/data/test-diff-dwarf/test35-pr19173-libfoo-long.c: Source code for the binaries above. * tests/data/Makefile.am: Add the new test material to the build system. * tests/test-diff-dwarf.cc (in_out_specs): Add the new test inputs to the harness. 2015-11-07 Dodji Seketeli Bug 19173 - Abidiff doesn't detect symbol size change in library * include/abg-ir.h (elf_symbol::{elf_symbol, create}): Take a size parameter. (elf_symbol::{get,set}_size): New accessors. * src/abg-ir.cc (elf_symbol::priv::size_): New data member. (elf_symbol::priv::priv): Initialize it. (elf_symbol::{elf_symbol, create}) Take a size parameter. (textually_equals): Compare the size of variable symbols. (elf_symbol::{get, set}_size): New accessors. * src/abg-comparison.cc (maybe_report_diff_for_symbol): New static function. ({function_decl_diff,var_diff}::report): Use it. * src/abg-dwarf-reader.cc (lookup_symbol_from_sysv_hash_tab) (lookup_symbol_from_gnu_hash_tab, lookup_symbol_from_symtab) (read_context::lookup_elf_symbol_from_index): Set the size of the elf symbols' internal representation. * src/abg-reader.cc (build_elf_symbol): Read the size attribute if present. * src/abg-writer.cc (write_elf_symbol): Write the size attribute for variable symbols, if it's not zero. * tests/data/test-diff-dwarf/test34-pr19173-libfoo.so: New test input binary. * tests/data/test-diff-dwarf/test34-pr19173-libfoo2.so: Likewise. * tests/data/test-diff-dwarf/test34-pr19173-libfoo-report-0.txt: New reference test output. * tests/data/Makefile.am: Add the new test input binaries to the build system. * tests/test-diff-dwarf.cc (in_out_specs): Add the new test input above to the test harness. * tests/data/test-diff-dwarf/test9-report.txt: Adjust. * tests/data/test-diff-filter/test30-pr18904-rvalueref-report0.txt: Likewise. * tests/data/test-read-dwarf/test0.abi: Likewise. * tests/data/test-read-dwarf/test1.abi: Likewise. * tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: Likewise. * tests/data/test-read-dwarf/test11-pr18828.so.abi: Likewise. * tests/data/test-read-dwarf/test12-pr18844.so.abi: Likewise. * tests/data/test-read-dwarf/test15-pr18892.so.abi: Likewise. * tests/data/test-read-dwarf/test16-pr18904.so.abi: Likewise. * tests/data/test-read-dwarf/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: Likewise. * tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi: Likewise. * tests/data/test-read-dwarf/test20-pr19025-libvtkParallelCore-6.1.so.abi: Likewise. * tests/data/test-read-dwarf/test21-pr19092.so.abi: Likewise. * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: Likewise. * tests/data/test-read-dwarf/test6.so.abi: Likewise. * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Likewise. 2015-11-07 Dodji Seketeli Add some needed vertical space * src/abg-dwarf-reader.cc (build_array_type): Add a new line after this function. 2015-11-07 Dodji Seketeli Pass a bunch of parameters by reference as they ought to be * include/abg-ir.h (operator==): In the overload for elf_symbol_sptr, pass the parameters by reference. * src/abg-ir.cc (operator==): Do the same at definition site. * src/abg-comparison.cc (maybe_report_diff_for_member): Pass parameters by reference. 2015-11-05 Dodji Seketeli Bug 19139 - DWARF reader doesn't handle garbage in function names * include/abg-tools-utils.h (string_is_ascii): Declare new function ... * src/abg-tools-utils.cc (string_is_ascii): ... and define it. * src/abg-writer.cc (write_function_type): Escape forbidden XML characters in function type names. * src/abg-dwarf-reader.cc (build_function_type): If a parameter name is not ascii, drop it on the floor. * tests/data/test-types-stability/pr19139-DomainNeighborMapInst.o: New test input binary. * tests/data/test-types-stability/pr19202-libmpi_gpfs.so.5.0: Likewise. * tests/data/Makefile.am: Add the new binaries above to the build system. * tests/test-types-stability.cc: New test harness. * tests/Makefile.am: Add the new test harness to the build system. 2015-11-05 Dodji Seketeli Introduce the name abixml in some comments * src/abg-reader.cc: Mention abixml in the comment at the top of the file. * src/abg-writer.cc: Likewise. 2015-10-17 Dodji Seketeli Bug 19026 - Types with same name and different size considered equivalent * src/abg-ir.cc (type_base::get_canonical_type_for): Really compare the size of the type to be canonicalized against the size of the *current* potential canonical type of the same name. 2015-10-17 Dodji Seketeli Add a script to update the reference output of runtestreaddwarf * tests/update-test-read-dwarf-output.py: New helper python program. 2015-10-17 Dodji Seketeli Style fixes in the abixml writer. * src/abg-writer.cc (write_var_decl): Use the var_decl_sptr typedef. (write_class_decl): Indent. 2015-10-17 Dodji Seketeli Fix typo in test-read-dwarf.cc * tests/test-read-dwarf.cc (for test test21-pr19092.so.abi): Fix typo in the output path of that test. 2015-10-17 Dodji Seketeli Adjust regression tests reference output for the current patch set * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so: New test input binary. * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: New test reference output. * tests/data/Makefile.am: Add the new test files above to the source distribution. * tests/test-read-dwarf.cc (in_out_specs): Add the two new test files above to the set of test input files. * tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: Adjust. * tests/data/test-read-dwarf/test12-pr18844.so.abi: Adjust. * tests/data/test-read-dwarf/test13-pr18894.so.abi: Adjust. * tests/data/test-read-dwarf/test14-pr18893.so.abi: Adjust. * tests/data/test-read-dwarf/test15-pr18892.so.abi: Adjust. * tests/data/test-read-dwarf/test16-pr18904.so.abi: Adjust. * tests/data/test-read-dwarf/test17-pr19027.so.abi: Adjust. * tests/data/test-read-dwarf/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: Adjust. * tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi: Adjust. * tests/data/test-read-dwarf/test20-pr19025-libvtkParallelCore-6.1.so.abi: Adjust. * tests/data/test-read-dwarf/test21-pr19092.so.abi: Adjust. * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Adjust. 2015-10-17 Dodji Seketeli Use abidw --abidiff in test-read-dwarf.cc * tests/test-read-dwarf.cc (handle_in_out_spec): Rather than calling abilint on the abixml and abidiff-ing the .so file against its .so.abi, call abidw --abidiff on the .so file and voila. Ok, it does one extra save of abixml, but then that won't hurt. And things are faster now than what they were anyway :-) 2015-10-17 Dodji Seketeli Fix emitting of referenced type in abixml writer * Use of canonical pointers in the hash map of referenced types The abixml writer was using canonical types pointer values to hash referenced types in a map. It was doing so "by hand"; and it was thus messing things up for types without canonical types (like some class declarations) etc. This patch changes that by using the generic solution of abigail::ir::hash_type_or_decl(), which also uses the same canonical pointer type values. For types with no canonical types, that functions knows has to gracefully fallback. At worst, it will just make things slower, not wrong. * Sorting of referenced types The patch also changes the sorting function used for the hash map of referenced types. The previous solution was sorting the pretty representation of types; but then when two types have the same pretty representation (think, typedefs, for instance) then their relative position in the sorted result was random. This causes some stability issues, in that emitting the abixml for the same binary several times can lead to the some types being sorted differently -- they have the same name, but not necessarily the same type *IDs*, as they are different types. The new sorting code handles this better; it also uses the pretty representations of types, when they are equal, it uses the type IDs to tell the types apart. At least this brings stability in the abixml output, for a given binary. * Avoiding duplicating declaration-only types when emitting the context of referenced member types. We don't keep track of declaration-only classes that are emitted. This is because we allow a given class declaration (that carries no definition) to appear several times in a given ABI corpus. So when a referenced type is a class declaration, it always appears as if that referenced type has not been emitted. So when we specifically emit the not-emitted referenced types, it can happen that declaration-only classes can appear a lot of times. This is unnecessary duplication, aka bloat. This patch thus introduces a new hash map that tracks emitted declaration-only classes, so that we can allow duplication of class declarations when they follow what's done in the IR read from DWARF, and disallow that duplication when it's totally artificial and useless. * Better tracking of referenced types We were blatantly forgetting to mark some referenced types as such. So those were missing in some abixml output. This patch fixes the spots where we were forgetting that important information. * Better representation of the scopes of the referenced types that were specifically emitted. The previous code was failing at properly representing the class scope of some referenced types that were specifically emitted, or sometimes, for member types, representing the scope would be so screwed that the (referenced) member type itself wouldn't be emitted at all. This is because I thought that to emit a given member type, just emitting its parent scope would be enough. I thought that would automatically trigger emitting the member type itself. First, that would emit too much information at times; the other members of the scope are not necessarily needed. And second the "duplication detection code" would sometime refuse to emit the scope class, because it has already been emitted earlier! But the incarnation that got emitted didn't have this member type as member, then. Yes, in DWARF, the same class A can be declared several times with different member types in it. The complete representation of A would be a union of all those declarations of A that are seen. This patch addresses this issue by carefully emitting just the information that is needed from the scope of the referenced type. Basically the scope is declared just to declare/define the type we are interested in; period. The abixml reader is now properly geared to re-construct the scope by merging its different parts that are now scattered around, in the ABI corpus. That support is part of this patch set. instance, a member typedef would be emitted with the information of its parent class badly formatted. * src/abg-writer.cc (struct type_ptr_comp_functor): Remove this. (sort_type_ptr_map): Likewise. (write_context::record_type_as_referenced): Do not add the canonical type of the type to record as referenced directly. (write_context::type_is_referenced): Adjust accordingly. (struct write_context::type_ptr_cmp): New comparison functor. (write_context::sort_types): New sorting function. (write_context::{record_decl_only_type_as_emitted, decl_only_type_is_emitted}): New member functions. (write_member_type_opening_tag): Factorize out of ... (write_member_type): ... here. (write_class_decl_opening_tag): Factorize out of ... (write_class_decl): ... here. Now, keep track also of declaration-only classes that are emitted. (write_decl_in_scope): Use the new write_member_type_opening_tag and write_class_decl_opening_tag. Now write class scopes ourselves; they only contain the type declarations that we are emitting. (write_translation_unit): Use the new sorting code to sort the referenced types to emit. Do not emit referenced types that are declaration-only classes that have already been emitted. Handle the fact that emitting the referenced types might make those emitted type *reference* other types too! So handle those new referenced types as such, and emit them too. (write_qualified_type_def, write_typedef_decl, write_var_decl): Do not forget to mark referenced types as such. 2015-10-17 Dodji Seketeli Support updating a class in the abixml reader * include/abg-ir.h (class_decl::{find_base_class, find_member_type, find_data_member}): Declare new member functions .. * src/abg-ir.cc (class_decl::{find_base_class, find_member_type, find_data_member}): ... and define them. * src/abg-reader.cc (build_class_decl): Add the ability to update a class to add new data members, member types and base classes to it, if necessary. 2015-10-17 Dodji Seketeli Don't canonicalize types not added to their context in abixml reader * src/abg-reader.cc (read_context::maybe_canonicalize_type): Assert that a class type that is scheduled for canonicalization must be in a scope. We do this only for classes, for now. The assert here helped to spot (and fix) a lot of places where we were canonicalizing types without scope. (read_context::build_or_get_type_decl): Canonicalize types here, when they are built and (hopefully) added to their scope. There might be cases here where we try to canonicalize types that are not added to their scope. That should bomb in the assert above, at least for class types, for now. We'll then fix the places where the types are created, to make them properly scoped. (build_type_decl, build_qualified_type_decl) (build_pointer_type_def, build_reference_type_def) (build_array_type_def, build_enum_type_decl, build_typedef_decl): Do not try to canonicalize the types early, right when they are created. Canonicalization should happen at the point where (or after) they are added to their scope. (build_class_decl): Likewise. Also, schedule member types for canonicalization once they've been added to their scope. (build_class_tdecl): Schedule the pattern of the class template for canonicalization once it has been added to its scope. I am not sure I should do this, as the pattern is not yet a real type, but I am taking my bet. (build_type_composition): Schedule the composed type for canonicalization once it's been added to its scope. (handle_type_decl, handle_qualified_type_decl) (handle_pointer_type_def, handle_reference_type_def) (handle_function_type, handle_array_type_def) (handle_enum_type_decl, handle_typedef_decl, handle_class_decl): At this point, we should know if the type is to be added to a scope or not. If it's in a scope, then schedule for canonicalization. 2015-10-15 Dodji Seketeli Bug 19092 - abidw aborts on types that violate the ODR * src/abg-ir.cc (type_base::get_canonical_type_for): Look at the size of types with the same name which could be considered ODR-equal, to spot possible violations that would induce a type canonicalization error. * tests/data/test-read-dwarf/test21-pr19092.so: New test input binary. * tests/data/test-read-dwarf/test21-pr19092.so.abi: New reference abixml for the binary above. * tests/data/Makefile.am: Add the new test input above to source distribution. * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Adjust. * tests/data/test-read-dwarf/test12-pr18844.so.abi: Likewise. * tests/data/test-read-dwarf/test20-pr19025-libvtkParallelCore-6.1.so.abi: Likewise. * tests/test-read-dwarf.cc (int_out_specs): Add the two test input above. 2015-10-15 Dodji Seketeli Fix activation of Debian package support * configure.ac: If we cannot activate Debian package support, then report it clearly. 2015-10-15 Dodji Seketeli Misc style cleanup * include/abg-fwd.h: Remove unnecessary declaration of class parameter. * src/abg-ir.cc: Remove trailing space in a comment. * src/abg-reader.cc: Fix a comment. 2015-10-15 Dodji Seketeli Emit statistics about resolved class declarations * src/abg-dwarf-reader.cc (read_context::resolve_declaration_only_classes): Emit statistics about resolved classes and the missed ones. 2015-10-15 Dodji Seketeli Add a missing xml text reader call * src/abg-reader.cc (read_corpus_from_input): Add the necessary call to xmlTextReaderNext call after the xmlTextReaderExpand call. 2015-10-15 Dodji Seketeli Pass some more parameters in reference * include/abg-ir.h (operator==): For the type_base_sptr and decl_base_sptr overloads, pass the parameters by reference. ({var,function}_decl::{set,get}_symbol): Pass the elf_symbol_ptr by reference. * src/abg-ir.cc (operator==): For the type_base_sptr and decl_base_sptr overloads, pass the parameters by reference, now in the definition. ({var,function}_decl::{set,get}_symbol): Pass the elf_symbol_ptr by reference, now in the definition. 2015-10-15 Dodji Seketeli Adjust tests for the patchset * tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: Adjust. * tests/data/test-read-dwarf/test12-pr18844.so.abi: Likewise. * tests/data/test-read-dwarf/test13-pr18894.so.abi: Likewise. * tests/data/test-read-dwarf/test14-pr18893.so.abi: Likewise. * tests/data/test-read-dwarf/test15-pr18892.so.abi: Likewise. * tests/data/test-read-dwarf/test16-pr18904.so.abi: Likewise. * tests/data/test-read-dwarf/test17-pr19027.so.abi: Likewise. * tests/data/test-read-dwarf/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: Likewise. * tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi: Likewise. * tests/data/test-read-dwarf/test20-pr19025-libvtkParallelCore-6.1.so.abi: Likewise. * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Likewise. 2015-10-15 Dodji Seketeli Make abidw --abidiff not show definitely harmless changes * tools/abidw.cc (set_diff_context): New function. (main): Use that new function. Do not show any output for --abidiff if only compatible changes were detected. Also, do not abort if no input binary was giving. 2015-10-15 Dodji Seketeli Allow only one definition of a given type per corpus in abixml * src/abg-writer.cc (write_translation_unit): Do not clear some important per-translation unit maps here. There are needed to keep track of the emitted and referenced types through the entire corpus. Avoid (wrongly) recording function types twice. (write_array_type_def, write_function_decl, write_function_type): Record referenced types. (write_class_decl): Record referenced types, and, allow only declarations to be duplicated in a corpus. 2015-10-15 Dodji Seketeli A series of small speed optimizations here and there * src/abg-comparison.cc (var_diff::has_changes): Just compare the two var_decl. It's (way) faster now than using recursive hashing for that. * src/abg-ir.cc (elf_symbol::does_alias): Get out early if the two main symbols are equal. (equals): In the overload for function_decl, start by comparing types. This can be very fast for functions with different types, as it amounts to a pointer comparison. In the overload for class_decl, avoid a map lookup when it's not necessary. 2015-10-15 Dodji Seketeli Accelerate a slow path in hash_type_or_decl() * include/abg-ir.h (is_function_parameter, is_class_base_spec): Declare new functions. * src/abg-ir.cc (is_function_parameter, is_class_base_spec): Define them. (hash_type_or_decl): Handle hashing of function parameters are class base specifications with the fast path of type hashing. 2015-10-15 Dodji Seketeli Implement fast type lookup in a corpus * include/abg-fwd.h (components_to_type_name): Declare new function. * include/abg-ir.h (string_type_base_wptr_map_type): New typedef. (translation_unit::{get,set}_types): Declare new member functions. * src/abg-ir.cc (translation_unit::priv::types_): New data member. (translation_unit::{get,set}_types): Define these member functions. (maybe_update_types_lookup_map): Define new static function. (components_to_type_name): Define new function. (scope_decl::{add_member_decl, insert_member_decl}): Call the new maybe_update_types_lookup_map. (scope_decl::find_iterator_for_member): Fix logic. (class_decl::set_is_declaration_only): When a class declaration becomes a definition, update the name -> type map maintained in the scope of the class. (lookup_type_in_translation_unit): Use the hash map of qualified name -> types that is now maintained in the translation unit. This is way faster than the previous walking algorithm. * src/abg-dwarf-reader.cc (build_translation_unit_and_add_to_ir): When fixing up global variable declarations that need to be re-added to the translation unit, use the new fast type lookup function. 2015-10-15 Dodji Seketeli Set the corpus of all ABI artifact reads from abixml * src/abg-reader.cc (read_translation_unit): Set the current corpus to the current translation unit being built. 2015-10-14 Dodji Seketeli Make canonicalization non sensitive to struct-ness of subtypes * include/abg-fwd.h (get_type_name, get_function_type_name) (get_method_type_name, get_pretty_representation): Add an "internal" flag to all overoads. * include/abg-ir.h ({type_or_decl_base, decl_base, type_decl, scope_type_decl, qualified_type_def, array_type_def, enum_type_decl, typedef_decl, var_decl, function_decl, function_decl::parameter, function_type, method_type, class_decl}::get_pretty_representation): Add an 'internal' flag. ({decl_base, qualified_type_def, pointer_type_def, reference_type_def, array_type_def, enum_type_decl::enumerator, function_decl::parameter}::get_qualified_name): Likewise. (qualified_type_def::build_name): Likewise. * src/abg-ir.cc ({decl_base, qualified_type_def, pointer_type_def, reference_type_def, array_type_def, enum_type_decl, enum_type_decl::enumerator, function_decl::parameter}::get_qualified_name): Take an "internal" flag. (qualified_type_def::build_name): Likewise. ({decl_base, type_decl, namespace_decl, array_type_def, enum_type_decl, typedef_decl, var_decl, function_type, method_type, function_decl, class_decl}::get_pretty_representation): Likewise. (get_type_name, get_function_type_name, get_method_type_name) (get_pretty_representation): Likewise. (type_base::get_canonical_type_for): Call get_pretty_representation() with the "internal" flag set to "true", to get a pretty representation that is independant from the struct-ness of the subtypes of the type being canonicalized. 2015-10-14 Dodji Seketeli Handle aliased function decls when comparing decls in general * include/abg-ir.h (is_function_decl): Add a const to the reference parameter, making it comply with the definition. * src/abg-ir.cc (equals): In the overload for decl_base, when the two linkage names are different, consider the case of the decls being aliased functions. 2015-10-14 Dodji Seketeli Fix const-ness of a function parameter * include/abg-fwd.h (is_function_decl): Add a const to the parameter to make it comply with the definition in abg-ir.cc. Woops. 2015-10-14 Dodji Seketeli Fix "is-anonymous" abixml property impact on some tests * tests/data/test-abidiff/test-PR18166-libtirpc.so: New file. * tests/data/test-abidiff/test-PR18166-libtirpc.so.abi: Likewise. * tests/data/test-abidiff/test-corpus0-report0.txt: Renamed into tests/data/test-abidiff/test-PR18166-libtirpc.so.report.txt. * tests/data/test-abidiff/test-corpus0-v{0,1}.so.abi: Removed. * tests/data/Makefile.am: Renamed test-corpus0-* files into test-PR18166-libtirpc.so-* files. * tests/test-abidiff.cc (specs): Adjust. 2015-10-14 Dodji Seketeli Do not compare access specs for member types & functions * include/abg-fwd.h (is_function_decl): Declare a new overload. * src/abg-ir.cc (is_function_decl): Define a new overload. (equals): In the overload for decl_base, do not compare access specifiers when comparing member functions and types. * tests/data/test-diff-dwarf/test0-report.txt: Adjust. * tests/data/test-diff-filter/test0-report.txt: Likewise. * tests/data/test-diff-filter/test01-report.txt: Likewise. * tests/data/test-diff-filter/test30-pr18904-rvalueref-report0.txt: Likewise. * tests/data/test-diff-filter/test31-pr18535-libstdc++-report-0.txt: Likewise. * tests/data/test-diff-filter/test4-report.txt: Likewise. 2015-10-14 Dodji Seketeli Fix strip_typedef issues * src/abg-ir.cc (strip_typedef): Do not canonicalize the return type of the method type to typedef-strip. Acknowledge that the return type can be nil. 2015-10-14 Dodji Seketeli Force late canonicalizing of function types read from abixml * src/abg-reader.cc (build_function_type): Late-canonicalize function types. 2015-10-13 Ondrej Oprala Bug 19082 - Recognize suppression spec files * tests/data/Makefile.am: Add new test material to the build system. * tests/data/test-diff-pkg/dirpkg-{0-dir1,{1,2}-dir2}/dir.abignore: A test suppression specification. * tests/data/test-diff-pkg/dirpkg-{2,3}-dir2/.abignore: Likewise. * tests/data/test-diff-pkg/dirpkg-3.suppr: Likewise. * tests/data/test-diff-pkg/dirpkg-{1,2,3}-dir{1,2}/libobj-v0.so: New binary test inputs. * tests/data/test-diff-pkg/dirpkg-{1,2,3}-dir{1,2}/obj-v0.cc: New test source files * tests/data/test-diff-pkg/dirpkg-{1,2,3}-report-{0,1}.txt: New reference outputs * tests/test-diff-pkg.cc: Adjust to run the new tests. * tools/abipkgdiff.cc (prog_options): New static pointer to struct opts. (file_tree_walker_callback_fn): Rename to first_package_tree_walker_callback_fn. (second_package_tree_walker_callback_fn): Check for ELF files just like the previous function but additionally check for files ending with ".abignore", unless disabled from the command line. ({create_maps_of_package,extract_package_and_map_its}_content): Add a callback as a new argument. (main) handle the new "--no-abignore" option, which turns off the search for suppression files within the new package. 2015-10-08 Dodji Seketeli Bug 19024 - Failing to flag underlying type of enums as anonymous * src/abg-dwarf-raeder.cc (build_enum_type): Set the is-anonymous flag on the underlying type of the enum. * tests/data/test-read-dwarf/test0.abi: Adjust. * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Likewise. * tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: Likewise. * tests/data/test-read-dwarf/test11-pr18828.so.abi: Likewise. * tests/data/test-read-dwarf/test12-pr18844.so.abi: Likewise. * tests/data/test-read-dwarf/test13-pr18894.so.abi: Likewise. * tests/data/test-read-dwarf/test14-pr18893.so.abi: Likewise. * tests/data/test-read-dwarf/test15-pr18892.so.abi: Likewise. * tests/data/test-read-dwarf/test16-pr18904.so.abi: Likewise. * tests/data/test-read-dwarf/test17-pr19027.so.abi: Likewise. * tests/data/test-read-dwarf/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: Likewise. * tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi: Likewise. * tests/data/test-read-dwarf/test20-pr19025-libvtkParallelCore-6.1.so.abi: Likewise. 2015-10-08 Dodji Seketeli Bug 19025 - abixml writer forgets to emit some member types * include/abg-fwd.h (is_namespace): Fix prototype. * src/abg-writer.cc (struct type_ptr_comp_functor): New internal type. (sort_type_ptr_map): New static function. (write_context::m_referenced_types_map): Renamed m_referenced_fntypes_map data member into this. (write_context::get_referenced_types): New member function. (write_context::record_type_as_referenced): Renamed record_fntype_as_referenced member function into this. Adjust. (write_context::type_is_referenced): Renamed fntype_is_referenced into this. (write_context::clear_referenced_types_map): Renamed clear_referenced_fntypes_map member function into this. Adjust. (write_decl_in_scope): New static function. (write_translation_unit): Use it here to emit types that are referenced by other types in the TU, but that are not emitted. Adjust. (write_pointer_type_def, write_reference_type_def) (write_typedef_decl): Record the underlying types referenced by the emitted types as being, well, referenced. * tests/data/test-read-dwarf/test20-pr19025-libvtkParallelCore-6.1.so: New test binary input. * tests/data/test-read-dwarf/test20-pr19025-libvtkParallelCore-6.1.so.abi: New reference output of the binary input above. * tests/data/Makefile.am: Add the new test material above to the source distribution. * tests/test-read-dwarf.cc (in_out_spec): Add the new test inputs. * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Adjust. * tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: Likewise. * tests/data/test-read-dwarf/test12-pr18844.so.abi: Likewise. * tests/data/test-read-dwarf/test13-pr18894.so.abi: Likewise. * tests/data/test-read-dwarf/test14-pr18893.so.abi: Likewise. * tests/data/test-read-dwarf/test15-pr18892.so.abi: Likewise. * tests/data/test-read-dwarf/test16-pr18904.so.abi: Likewise. * tests/data/test-read-dwarf/test17-pr19027.so.abi: Likewise. * tests/data/test-read-dwarf/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: Likewise. * tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi: Likewise. 2015-10-06 Ondrej Oprala Parallelize test read-dwarf. * tests/Makefile.am: Link runtestreaddwarf with libpthread. * tests/test-read-dwarf.cc (main) Create worker threads corresponding to the number of CPUs online, add a "--no-parallel" option and move the main loop... (handleInOutSpec) ...here. 2015-10-07 Dodji Seketeli Bug 19023 - Type canonicalization is sensitive to struct-ness * include/abg-ir.h (class_decl::is_struct): Declare a setter for the "is-struct" property. * src/abg-ir.cc (class_decl::is_struct): And define that setter here. (type_base::get_canonical_type_for): Temporarily set the 'is-struct' flag of the class type to 'false' before building its pretty representation. * tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so: New test input binary. * tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi: New test reference output. * tests/data/Makefile.am: Add the new test material above to the source distribution. * tests/test-read-dwarf.cc (in_out_specs): Add the two new test inputs to the list of test inputs to consider. * tests/data/test-read-dwarf/test14-pr18893.so.abi: Adjust. 2015-10-06 Dodji Seketeli Style adjustment in abg-corpus.cc * src/abg-corpus.cc (corpus::exported_decls_builder::id_var_map_): Renamed data member vars_map_ into this. (corpus::exported_decls_builder::id_var_map): Renamed vars_map into this. (corpus::exported_decls_builder::var_id_is_in_id_var_map): Renamed var_is_in_map into this. (corpus::exported_decls_builder::{add_var_to_map, add_var_to_exported, maybe_add_var_to_exported_vars}): Adjust. 2015-10-06 Dodji Seketeli Bug 19037 - Make ABI corpus support several functions with same symbol * include/abg-corpus.h (corpus::exported_decls_builder::str_{fn,var}_ptr_map_type): Remove these typedefs from here as they only used internally in abg-corpus.cc. So we move them there instead. * src/abg-corpus.cc (str_fn_ptrs_map_type): New typedef. (str_var_ptr_map_type): Moved the typedef that was in corpus::exported_decls_builder here. (corpus::exported_decls_builder::id_fns_map_): Rename the fns_ data member into this. Make it have a str_fn_ptrs_map_type as a type. (corpus::exported_decls_builder::id_fns_map): Renamed the fns_map() accessor into this one. (corpus::exported_decls_builder::{fn_id_is_in_id_fns_map, fn_is_in_fns}): New member functions. (corpus::exported_decls_builder::fn_is_in_id_fns_map): Rename fn_is_in_map into this. (corpus::exported_decls_builder::add_fn_to_id_fns_map): Rename add_fn_to_map into this. (corpus::exported_decls_builder::add_fn_to_exported): Adjust. (corpus::exported_decls_builder::maybe_add_fn_to_exported_fns): Adjust. * src/abg-comparison.cc (function_decl_diff::report): Emit reports about function name changes (for a given function ID) only if there are sub-type changes to be reported for the function. In that case, do not forget to emit the sub-type changes after the name changes have been reported. (corpus_diff::priv::ensure_lookup_tables_populated): Several functions of the same ID can be removed or added from/to the corpus. * tests/data/test-read-dwarf/test18-pr19037-libvtkRenderingLIC-6.1.so: New test input binary. * tests/data/test-read-dwarf/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: New test output reference. * tests/data/Makefile.am: Add the new test materials to the source distribution. * tests/test-read-dwarf.cc (in_out_specs): Adjust to add the new test inputs above. 2015-10-05 Ondrej Oprala Do not imply private access when building a struct from ABIXML. * src/abg-reader.cc (read_context): Abort if we run into an unsupported access specifier. (build_class_decl) Default to public access for the children of a struct. 2015-10-05 Ondrej Oprala Fix minor warnings when building documentation. * manuals/abilint.rst: Fix the "Literal block expected" warning. * manuals/abipkgdiff.rst: Fix the "Title underline too short" warning. 2015-10-05 Ondrej Oprala Fix an "Unknown target name" error during make info. * doc/manuals/libabigail-overview.rst: Fix the reference to "ELF symbols". 2015-10-05 Ondrej Oprala Fix a path in doc/Makefile.am * doc/Makefile.am: Prefix the path for DOXY_WEBSITE_SRC_CFG and DOXY_WEBSITE_BLD_{CFG,DIR} with "/doc" to protect it against make clean. 2015-10-04 Dodji Seketeli Misc style cleanups * src/abg-reader.cc (read_is_struct): Fix comment. (build_type_decl): Use type_decl_sptr rather than shared_ptr. (build_type_decl): Use typedef_decl_sptr rather than shared_ptr. 2015-10-04 Dodji Seketeli Use the ODR to speed up type canonicalization * include/abg-fwd.h (class corpus): Forward-declare this. (is_anonymous_type): Declare this new function. * include/abg-ir.h (corpus_sptr, corpus_wptr): Declare these typedefs here too. (translation_unit::{g,s}et_corpus): Declare new member functions. (type_or_decl_base::{g,s}et_corpus): Likewise. * src/abg-ir.cc (translation_unit::priv::corpus): New data member. (translation_unit::priv::priv): Initialize it. (translation_unit::{g,s}et_corpus): Define new accessors. (translation_unit::get_global_scope): Propagate the corpus of the translation unit to its newly created global scope. (translation_unit::bind_function_type_life_time): Propagate the corpus of the translation_unit to the added function type. (type_or_decl_base::priv::corpus_): Add new data member. (type_or_decl_base::priv::priv): Initialize it. (type_or_decl_base::{g,s}et_corpus): Define new accessors. (scope_decl::{add,insert}_member_decl): Propagate the context's corpus to the member added to the context. (decl_base::priv::is_anonymous_): Add new data member. (decl_base::priv::priv): Initialize it. (decl_base::{s,g}et_is_anonymous): Define accessors. (is_anonymous_type): Define a new test function. (decl_base::set_name): Update the "is_anonymous" property. (type_base::get_canonical_type_for): Implement the ODR-based optimization to type canonicalization. * src/abg-corpus.cc (corpus::add): When a translation unit is added to a corpus, set the corpus of the translation unit. * src/abg-dwarf-reader.cc (build_enum_type) (build_class_type_and_add_to_ir): Set the "is_anonymous" flag on anonymous enums and classes. * src/abg-reader.cc (read_is_anonymous): Define new static function. (build_type_decl, build_enum_type, build_class_decl): Call the new read_is_anonymous function and set the "is_anonymous" property on the built type declaration. * src/abg-writer.cc (write_is_anonymous): Define new static function. (write_type_decl, write_enum_type_decl, write_class_decl): Write the "is_anonymous" property. * tests/data/test-diff-filter/test31-pr18535-libstdc++-report-0.txt: Adjust. * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Likewise. * tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: Likewise. * tests/data/test-read-dwarf/test11-pr18828.so.abi: Likewise. * tests/data/test-read-dwarf/test12-pr18844.so.abi: Likewise. * tests/data/test-read-dwarf/test13-pr18894.so.abi: Likewise. * tests/data/test-read-dwarf/test14-pr18893.so.abi: Likewise. * tests/data/test-read-dwarf/test15-pr18892.so.abi: Likewise. * tests/data/test-read-dwarf/test16-pr18904.so.abi: Likewise. * tests/data/test-read-dwarf/test17-pr19027.so.abi: Likewise. 2015-10-04 Dodji Seketeli Late canonicalize all types that reference classes when reading DWARF * include/abg-fwd.h (peel_array_type): Declare new function. * src/abg-ir.cc (peel_array_type): Define it. (peel_typedef_pointer_or_reference_type): Peel arrays too, to get the type of its element. * src/abg-dwarf-reader.cc (maybe_canonicalize_type): If a pointer, reference, array or typedef references a class, then do late-canonicalize this type. 2015-10-04 Dodji Seketeli Fix infinite loop in peel_typedef_pointer_or_reference_type * src/abg-ir.cc (peel_typedef_pointer_or_reference_type): Make sure the variable tested in the condition is the one updated by the loop. 2015-10-02 Dodji Seketeli Try harder to hash_type_or_decl avoid the slow path * src/abg-ir.cc (hash_type_or_decl): When a declaration-only class has a definition, then use the canonical type of that definition as a hash value. If the class no definition, only then, use the slow patfh of computing the recursive progressive hash value of the type. 2015-10-02 Dodji Seketeli Do not use recursive type hashing when writing out function types * src/abg-writer.cc (typedef fn_shared_ptr_map): Remove. (write_context::m_referenced_fntypes_map): Change the type of this into type_ptr_map. (write_context::{record_fntype_as_referenced, fntype_is_referenced}): Use the pointer value of the canonical type of the referenced type as key for the map. 2015-10-02 Dodji Seketeli Prevent build_function_type from not canonicalizing certain types * src/abg-dwarf-reader.cc (build_function_type): Associate the type being built with its DIE, before starting to build the sub-types. The current type is then amended with the sub-types that are built later. (build_ir_node_from_die): In the case for DW_TAG_subroutine_type, do not associate the type to the DIE here, as it's been done in build_function_type. * src/abg-ir.cc (function_type::set_parameters): Adjust the index of the parameters being set to the function: they start at 1, unless the first parameter is artificial, in which case its index starts at zero. This is just like what is done when the function type is constructed directly with the parameters passed as an argument to the constructor. 2015-10-02 Dodji Seketeli Fix detection of changes in pointer diff in the comparison engine * src/abg-comparison.cc (pointer_diff::has_changes): Just comparing the underlying type might not be enough. Let's just compare the pointer itself. Now that we have canonical types, comparing the pointer itself is not slower. 2015-10-02 Dodji Seketeli Do not overly canonicalize types during typedef stripping * src/abg-ir.cc (strip_typedef): Do not canonicalize the stripped type if the input one is not canonicalized. 2015-10-02 Dodji Seketeli Cleanup some IR type comparison operators * include/abg-ir.h (operator==): In the overloads for type_decl, enum and class_decl, turn the shared_ptr parameter into a const reference to the shared_ptr. * src/abg-ir.cc (operator==): Do the same in the definitions. 2015-10-02 Dodji Seketeli Add missing deep equality operator for pointer and reference types * include/abg-ir.h (pointer_type_def::operator==): Add an overload for pointer_type_def. (reference_type_def::operator==) Add an overload for reference_type_def. (operator==): Add an overload for pointer_type_def_sptr and reference_type_def_sptr. * src/abg-ir.cc (pointer_type_def::operator==): Make the overload for type_base& use the overload for decl_base&. Add a new overload for pointer_type_def& and make is use the overload for decl_base& too. (operator==): Add free form overloads for pointer_type_def& and reference_type_def&. (reference_type_def::operator==): Add comments. Add an overload for reference_type_def&. 2015-10-02 Dodji Seketeli constify is_class_type() * include/abg-fwd.h (is_class_type): Take a pointer to const. * src/abg-ir.cc (is_class_type): Adjust. 2015-10-01 Ondrej Oprala Bug 19027 - ABI asymmetry with enums over INT_MAX * src/abg-reader.cc (build_enum_type_decl): Use strtol instead of atoi to parse the values and check for overflow. * tests/data/Makefile.am: Add the new test material to the build system. * tests/data/test-read-dwarf/test17-pr19027.so: New test file. * tests/data/test-read-dwarf/test17-pr19027.so.abi: Likewise. * tests/test-read-dwarf.cc: Adjust to launch the new test. 2015-10-01 Dodji Seketeli Encourage people to use autoreconf -i * COMPILING: Mention autoreconf -i, rather than just autoreconf. 2015-09-23 Ondrej Oprala Bug 17340 - Support pointers and references to functions * include/abg-comparison.h (compute_diff_for_distinct_kinds): Take the first two arguments of type const type_or_decl_base_sptr instead. * include/abg-ir.h (translation_unit::get_function_types): Declare new method. (function_types): Declare new typedef. * src/abg-comparison.cc (compute_diff_for_types): Take the first two arguments of type const type_or_decl_base_sptr instead of a const decl_base_sptr. (try_to_diff): Likewise. (try_to_diff): Likewise. (try_to_diff_distinct_kinds): Likewise. (compute_diff_for_distinct_kinds): Likewise. Also remove a variant accepting arguments of type const type_base_sptr. * src/abg-dwarf-reader.cc (build_class_type_and_add_to_ir): Skip building a pointer if it points to the beginning of a vptr. (build_pointer_type_def): Declare utype_decl of type type_or_decl_base_sptr and adjust assignments to it accordingly. (build_function_type): New function definition. (build_function_decl): Call build_function_type instead of building an ftype manually. (build_ir_node_from_die): Amend case DW_TAG_subroutine_type with appropriate calls to build a function type. * src/abg-ir.cc (translation_unit::get_function_types): New method definition. ({pointer,reference}_type_def::pointer_type_def): Expect that pointed_to might not have an accompanying declaration and set a type's name in this case as well. ({pointer,reference}_type_def::get_qualified_name): Generate a qualified name even if the pointed-to type has no declaration. * src/abg-reader.cc (build_function_type): New function definition. (handle_element_node): Return a type_or_decl_base_sptr instead and try calling handle_function_type in addition to others. (handle_function_type): New function definition that calls build_function_type. (build_type): Try calling build_function_type as well. * src/abg-writer.cc (fn_shared_ptr_map): Declare new typedef. (write_context::{clear_referenced_fntypes_map,fntype_is_referenced, record_fntype_as_referenced}): New member functions. (write_translation_unit): Call the new clear_referenced_fntypes_map. * tests/data/Makefile.am: Add the new test material to the build system. (write_translation_unit): Separately write function types that have been recorded to emit by write_{pointer,reference}_type_def. (write_{pointer,reference}_type_def): Record the type pointed to as a type to be emitted if type == function type. (write_function_type): Write the details of a function type in the abixml format and unmark the type. * tests/data/test-diff-dwarf/test32-fnptr-changes-report-0.txt: New test reference report. * tests/data/test-diff-dwarf/test32-fnptr-changes-v{0,1}.cc: New test source files. * tests/data/test-diff-dwarf/test32-fnptr-changes-v{0,1}.o: New binary test inputs. * tests/data/test-diff-dwarf/test33-fnref-changes-report-0.txt: New test reference report. * tests/data/test-diff-dwarf/test33-fnref-changes-v{0,1}.cc: New test source files. * tests/data/test-diff-dwarf/test33-fnref-changes-v{0,1}.o: New binary test inputs. * tests/data/test-diff-filter/test30-pr18904-rvalueref-report0.txt: Adjust. * tests/data/test-diff-filter/test31-pr18535-libstdc++-report-0.txt: Likewise. * tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: Likewise. * tests/data/test-read-dwarf/test11-pr18828.so.abi: Likewise. * tests/data/test-read-dwarf/test12-pr18844.so.abi: Likewise. * tests/data/test-read-dwarf/test13-pr18894.so.abi: Likewise. * tests/data/test-read-dwarf/test14-pr18893.so.abi: Likewise. * tests/data/test-read-dwarf/test15-pr18892.so.abi: Likewise. * tests/data/test-read-dwarf/test16-pr18904.so.abi: Likewise. * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Likewise. * tests/data/test-read-write/test27.xml: New test source file. * tests/test-diff-dwarf.cc: Adjust to launch the new tests. * tests/test-read-write.cc: Likewise. 2015-09-09 Ondrej Oprala Generalize some dwarf-reader functions to generate and return instances of type_or_decl_base_stpr to be able to propagate types occurring without an accompanying declaration. * src/abg-dwarf-reader.cc (build_ir_node_from_die): Return a type_or_decl_base_sptr instead. (get_scope_for_die): Likewise. (build_class_type_and_add_to_ir): Typecast the assignment from build_ir_node_from_die properly. (build_{qualified,reference,array,typedef}_type): Likewise. (build_pointer_type_def): Likewise. (build_{var,function}_decl): Likewise. 2015-09-29 Ondrej Oprala Move a constructor declaration * include/abg-ir.h (decl_base): Change the decl_base() declaration's visibility to private. 2015-09-24 Dodji Seketeli Bug 18535 - abidiff reports false positive ABI difference for libstdc++ *non-static* data member; a static data member only is not enough to make the class declaration become a definition. * src/abg-dwarf-reader.cc (build_class_type_and_add_to_ir): The presence of a data member shouldn't make a declaration-only class loose its declaration-only-ness; the presence of a enon-static* data member should. * tests/data/test-read-dwarf/test15-pr18892.so.abi: Adjust. * tests/data/test-read-dwarf/test16-pr18904.so.abi: Likewise. * tests/data/test-diff-filter/test31-pr18535-libstdc++-4.8.3.so: New binary test input. * tests/data/test-diff-filter/test31-pr18535-libstdc++-4.9.2.so: Likewise. * tests/data/test-diff-filter/test31-pr18535-libstdc++-report-0.txt: New test reference output. * tests/data/Makefile.am: Add the new test material to the build system. * tests/test-diff-filter.cc (in_out_specs): Add the new test inputs to the set of inputs to consider. 2015-09-21 Dodji Seketeli Remove duplicated runtestreaddwarf test * tests/Makefile.am: Remove one copy of the runtestreaddwarf test that is present twice. 2015-09-21 Dodji Seketeli Add a missing function declaration * include/abg-tools-utils.h (dir_name): Add missing function declaration. 2015-09-21 Dodji Seketeli Remove some dead code in abilint * tools/abilint.cc (options::bidiff): Remove. (options::options): Adjust. (display_usage): Remove usage string for --bidiff (parse_command_line): Remove parsing of un-implemented option --bidiff. 2015-09-21 Dodji Seketeli Add a new --abidiff option to abidw * tools/abidw.cc (options::abidiff): New data member. (options::options): Initialize it. (display_usage): Add a usage string for the new --abidiff option. (parse_command): Parse the new --abidiff options. (main): Save the abi of the input elf in a temporary abixml file; read it back and compare both. 2015-09-21 Dodji Seketeli Misc style fixes * src/abg-hash.cc (class_decl::hash::operator()): Use a temporary variable to ease debugging. * src/abg-reader.cc (read_context::is_wip_type): Make this function const. * src/abg-writer.cc (write_context): Move data members at the top. 2015-09-21 Dodji Seketeli Speed up type canonicalization by avoiding recursive hashing * include/abg-ir.h (canonical_types_map_type): Adjust this typedef to make it point to an unordered_map which the key is now a string and the value is a vector of types. (type_or_decl_base::{get_cached_hash_value, set_cached_hash_value, cached_hash}): Remove these member functions and type. (struct type_base::cached_hash): Remove. * src/abg-ir.cc (struct type_or_decl_base::priv::hash_): Remove. (type_or_decl_base::priv::priv): Adjust. (type_or_decl_base::{g,s}et_cached_hash_value): Remove. (type_base::get_canonical_type_for): For declaration-only classes, look at their definition for the canonical_type. Do not use recursive type hashing anymore. Rather, use the pretty representation string, and hash that. (class_decl::base_spec::get_hash): Do away with hash value caching here. (class_decl::operator==): For decl-only classes, look at their definitions for canonical types. (hash_type_or_decl): Adjust comment. Use the canonical type pointer value for type hash. That's the fast path. Otherwise, if not available, fall back to a slow path which is the recursive type hash we were using before. * src/abg-dwarf-reader.cc (maybe_canonicalize_type): Schedule all classes and typedef to classes for late canonicalization. * src/abg-hash.cc (type_base::dynamic_hash::operator()): There is no hash value cashing anymore. (type_base::cached_hash::operator()): Remove. * src/abg-reader.cc (read_context::get_type): Slight style adjustment. (read_translation_unit_from_file) (read_translation_unit_from_buffer): Do not forget to canonicalize types when reading just one translation unit. (build_type_tparameter, build_template_tparameter): Canonicalize the type. * src/abg-writer.cc (struct type_hasher): New hasher type. (type_ptr_map): Use a deep pointer comparison equal operator functor, and canonical types as type hash values. (write_class_decl): Do not write size and alignment on decl-only classes. Do not record decl-only classes as being emitted. Their definition must be emitted before. * tests/test-read-write.cc (main): Do not do abi testing on translation units (as opposed to doing it on abi corpora) as that code is not wet yet. We need to know how to diff namespaces. * tests/data/test-abidiff/test-PR18791-report0.txt: Adjust. * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Likewise. * tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: Likewise. * tests/data/test-read-dwarf/test12-pr18844.so.abi: Likewise. * tests/data/test-read-dwarf/test13-pr18894.so.abi: Likewise. * tests/data/test-read-dwarf/test14-pr18893.so.abi: Likewise. * tests/data/test-read-dwarf/test15-pr18892.so.abi: Likewise. * tests/data/test-read-dwarf/test16-pr18904.so.abi: Likewise. 2015-09-21 Dodji Seketeli Update qualified name of a decl when it's added to its context * include/abg-ir.h (decl_base::priv_): Make this be public, so that the qualified name updater function can access it. (class class_decl): Make set_member_is_static() a friend function. * src/abg-ir.cc (class ::qualified_name_setter): New tree walking type. (decl_base::get_qualified_parent_name): Do not do any computation here. Just return the pre-computed qualified parent name string. (decl_base::get_qualified_name): Likewise, for qualified name. (scope_decl::{add,insert}_member_decl): Update the qualified name of the newly added member. Set the scope of the member here. It's not going to be set elsewhere, from now on. (add_decl_to_scope): Do not set the scope here anymore. Just call scope_decl::add_member_decl and let it do the work. (insert_decl_into_scope): Likewise, just call scope_decl::insert_member_decl and let it do the work. (class_decl::{add_data_member, add_member_function}): Do not handle details of context setting at this point. Let scope_decl::add_member_decl do it. Adjust the properties of the context relation afterwards. In add_data_member, when a data member changes its static-ness, move the data member into the class_decl::priv::non_static_data_members_ or out of it, as necessary. (class_decl::insert_member_decl): By default, a data member is considered static. (set_member_is_static): Move this definition after the definitions of class_decl, so that this function can see those. Also, when a data member changes its static-ness, move the data member into the class_decl::priv::non_static_data_members_ or out of it, as necessary. (class_decl::add_member_function_template): As we the underlying function template decl to the context, do not do any scope adding for it here. (::qualified_name_setter::{do_update, visit_begin}): Define new member functions. (update_qualified_name): Define new static function. * src/abg-reader.cc (build_class_decl): Make build_function_decl, build_var_decl, build_function_tdecl and build_class_tdecl automatically add the created decl to their context, and then update the properties of the resulting member decl later, just like what we do in the DWARF reader. 2015-09-21 Dodji Seketeli Add new test functions * include/abg-fwd.h (is_function_decl, is_decl, is_namespace) (is_scope_decl): Declare new function overloads. * src/abg-ir.cc (is_function_decl, is_decl, is_namespace) (is_scope_decl): Define them. 2015-09-21 Dodji Seketeli Constify some diff-utils functor operators * include/abg-diff-utils.h (deep_ptr_eq_functor::operator()): Make the overloads be const. 2015-09-16 Dodji Seketeli Support source_location_not_in and source_location_not_regexp suppressions * include/abg-ini.h (enum property_value::value_kind): Add a LIST_PROPERTY_VALUE kind. (class {list_property_value, list_property}): Declare new types. (is_list_property, is_list_property_value): Declare new functions. * src/abg-ini.cc (struct list_property_value::priv): Define new type. (list_property_value::{list_property_value, get_content, set_content, as_string}): Define new member functions. (is_list_property_value): Define new function. (struct list_property::priv): Define new type. (list_property::{list_property, get_value, set_value, handle_escape}): Define new member functions. (is_list_property): Define new function. (read_context::buf_): New data member. (read_context::{peek, get, put_back, good, eof, read_string, read_list_property_value}): New member functions. (read_context::read_next_char): Use the new read_context::{get, good, eof} member function, rather than using the input stream directly. (read_context::{skip_white_spaces, skip_comments, skip_white_spaces_or_comments, read_property_name, read_function_name, read_function_argument, read_function_call_expr, read_property_value, read_tuple_property_value, read_section_name, read_section}): Adjust to use the new member functions of read_context rather than using the input stream directly. (read_context::read_string_property_value): Likewise. Use the new read_context::read_string() method. (read_context::{read, write}_property): Support reading list_property. * include/abg-comparison.h (type_suppression::{get_source_locations_to_keep, set_source_locations_to_keep, set_source_location_to_keep_regex_str, get_source_location_to_keep_regex_str}): Add new member functions. * src/abg-comparison.cc (type_suppression::priv::{source_location_to_keep_, source_location_to_keep_regex_str_, source_location_to_keep_regex_}): Add new data members. (type_suppression::priv::{g,s}et_source_location_to_keep_regex): Define new member functions. (type_suppression::{g,s}et_source_locations_to_keep): Define new member functions. (type_suppression::{g,s}et_source_location_to_keep_regex_str): Likewise. (type_suppression::suppresses_type): Support "source_location_not_regexp" and "source_location_not_in" properties of suppression specifications. (read_type_suppression): Likewise. Also adjust to the fact that ta tuple property value that is a list of strings is not a list property value. * doc/manuals/libabigail-concepts.rst: Add documentation for source_location_not_in and source_location_not_regexp. * tests/data/test-diff-suppr/libtest26-loc-suppr-v{0,1}.so: New binary test inputs. * tests/data/test-diff-suppr/test26-loc-suppr-{0,1,2}.suppr: New suppression specification test inputs. * tests/data/test-diff-suppr/test26-loc-suppr-report-{0,1,2,3}.txt: New test reference reports. * tests/data/test-diff-suppr/test26-loc-suppr-v{0,1}.cc: Source code of the test binary input above. * tests/data/test-diff-suppr/test26-loc-suppr.h: Likewise. * tests/data/Makefile.am: Add the new test material to source distribution. * tests/test-diff-suppr.cc (in_out_specs): Add the new test inputs above. 2015-09-16 Dodji Seketeli Pass simple property data by reference * include/abg-ini.h (simple_property::{simple_property, set_value}): Pass the value shared pointer by reference. * src/abg-ini.cc (simple_property::{simple_property, set_value): Pass the value shared pointer by reference. 2015-09-15 Dodji Seketeli Make string_ends_with() allow long suffixes * src/abg-tools-utils.cc (string_ends_with): Allow suffixes of the same size as the input string. 2015-09-13 Dodji Seketeli Add missing 'break' keyword in e_machine_to_string() * src/abg-dwarf-reader.cc (e_machine_to_string): Add missing 'break' keywords in switch/case statement. 2015-09-09 Dodji Seketeli Fix compilation warnings in abipkgdiff.cc * tools/abipkgdiff.cc (package::erase_extraction_directory) (extract_rpm, extract_deb, extract_tar) (erase_created_temporary_directories_parent): Check the return value of the system() function. (extract_package): Add necessary white space. 2015-09-09 Dodji Seketeli Fix spurious errors in the install-man-and-info-doc target * doc/manuals/Makefile.am (install-man-and-info-doc): Don't check for abidiff.info, that thing doesn't exist. Rather, check for abigail.info. Use gzip -f in case the zipped file exists already. 2015-09-09 Dodji Seketeli Compare qualified name in decl_base comparison operator * src/abg-ir.cc (equals): In the overload for decl_base, compare qualified names, not just names. * tests/data/test-abidiff/test-PR18791-report0.txt: Adjust. 2015-09-08 Dodji Seketeli Fix a stupid typo in function sorting code * src/abg-comparison.cc (function_comp::operator()): Fix a typo preventing the proper sorting of function name when their declarator names are equal. Oops. * tests/data/test-diff-filter/test30-pr18904-rvalueref-report0.txt: Adjust. 2015-09-08 Dodji Seketeli Update manual for abipkgdiff * doc/manuals/abipkgdiff.rst: Say we support tarballs and plain directories. 2015-09-07 Dodji Seketeli Adjust {s,g}et_show_stats() to use a reference * include/abg-dwarf-reader.h ({s,g}et_show_stats): Use a reference to the reader. * tools/abidiff.cc (main): Adjust. * tools/abidw.cc (main): Likewise. 2015-09-07 Dodji Seketeli Use cache type hash values only after type canonicalization is done *when* we request that hash value. If we are computing the hash value of struct list itself, then the temporary value of "struct list" is zero. But then once we are done computing the hash value of "struct list", that value becomes non-zero. Hence, the hash value of a type depends on when that value is computed. But then if we want to cache that hash value and re-use it later, which value should we cache? Definitely not the zero value! So in other words, we can use (and thus cache) the hash value of a given type T only after the hash values of all types which use T have been computed. To satisfy that condition, we decide to use the (cached) hash value of each type only after we've computed all the hash values of all types of the system. So, during type canonicalization, when a type T is canonicalized, this patch stores the hash value of T. But then it's only when all types are canonicalized that the hashing code is allowed to re-use the cached value of types. This fixes the issues of spurious type differences introduced when the same type was read either from DWARF or from abixml. Those differences where introduced by differences in the order of hashing types which sub-types refer to themselves. The patch also updates regression tests accordingly. * src/abg-dwarf-reader.cc (read_debug_info_into_corpus): Before we read debug info and build the IR, set a flag in the environment saying that type canonicalization isn't finished yet. But then, after type canonicalization is done, flip that flag to say that type canonicalization is done. * src/abg-reader.cc (read_corpus_from_input): Likewise. * src/abg-ir.cc (type_base::get_canonical_type_for): Once a type has been canonicalized, cache its hash value. * src/abg-hash.cc (type_base::dynamic_hash::operator()): If type canonicalization has been done and if the type has a cached value, use that one. * tests/data/test-read-dwarf/test2.so.abi: Adjust. * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Likewise. * tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: Likewise. * tests/data/test-read-dwarf/test12-pr18844.so.abi: Likewise. * tests/data/test-read-dwarf/test13-pr18894.so.abi: Likewise. * tests/data/test-read-dwarf/test14-pr18893.so.abi: Likewise. * tests/data/test-read-dwarf/test15-pr18892.so.abi: Likewise. * tests/data/test-read-dwarf/test16-pr18904.so.abi: Likewise. 2015-09-07 Dodji Seketeli Introduce the concept of environment * include/abg-ir.h: Adjust note about memory management. (class environment): Declare new class. (translation_unit::translation_unit): Take an environment in parameter. (translation_unit::{g,s}et_environment): Declare new member functions. (type_or_decl_base::{g,s}et_environment): Likewise. (type_or_decl_base::{get_cached_hash_value, set_cached_hash_value}): Change the name of decl_base::peek_hash_value() and decl_base::set_hash() here into these and move them here. (type_or_decl_base::hashing_started): Move decl_base::hashing_started() here. ({g,s}et_environment_for_artifact): Declare new functions. (class decl_base): Move member functions hashing_started(), peek_hash_value() and set_hash() on to the type_or_decl_base base class. (scope_decl::scope_decl): Initialize the virtual member type_or_decl_base(). (type_decl::{get_void_type_decl, get_variadic_parameter_type_decl}): Remove these static member functions. They are now non-static member functions of the new environment type. * src/abg-ir.cc (class environment_setter): New internal class. (get_canonical_types_map): Remove. This now becomes a member function of the environment type. (class usage_watchdog): Remove. (usage_watchdog_{s,w}ptr): Remove these typedefs. (get_usage_watchdog_wptr, ref_usage_watchdog) (maybe_cleanup_type_system_data): Remove these functions. (translation_unit::priv::usage_watchdog_): Remove data member. (translation_unit::priv::env_): New data member. (translation_unit::priv::priv): Take an environment and initialize the new env_ data member. Do not initialize the removed usage_watchdog_. (translation_unit::translation_unit): Take an environment parameter. (translation_unit::get_global_scope): Set the environment of a new global scope. (translation_unit::{g,s}et_environment): New accessors. (translation_unit::bind_function_type_life_time): Set the environment of the function type. (struct environment::priv): New class. (environment::{environment, ~environment, get_canonical_types_map, get_variadic_parameter_type_decl, canonicalization_is_done}): New member functions. (struct type_or_decl_base::priv): New class. (type_or_decl_base::{type_or_decl_base, hashing_started, get_cached_hash_value, set_cached_hash_value, set_environment, get_environment, traverse}): New member functions. ({s,g}get_environment_for_artifact): New functions. (decl_base::priv::{hash_, hashing_started}): Remove. (decl_base::priv::priv): Adjust. (decl_base::decl_base): In the copy constructor, initialize the virtual base type_or_decl_base. Do not initialize hash_ and hashing_started data member that got removed. (decl_base::{hashing_started, peek_hash_value, set_hash}): Remove member functions. (strip_typedef): Set the environment of the new type which has its typedefs stripped off. Adjust the call to type_or_void(). (scope_decl::{add, insert}_member_decl): Set the environment of the new member decl to the environment of its scope. (synthesize_type_from_translation_unit) (synthesize_function_type_from_translation_unit): Set the environment for the newly synthesized type. Adjust calls to type_or_void(). (type_or_void): Take an environment in parameter. Get the void type from the environment. (get_canonical_types_map): Remove. (type_base::get_canonical_type_for): Get the canonical types map from the environment, not from a global variable. (type_decl::{get_void_type_decl, get_variadic_parameter_type_decl}): Remove. (pointer_type_def::pointer_type_def): Adjust call to type_or_void. (reference_type_def::reference_type_def): Likewise. (function_decl::parameter::get_pretty_representation): Get the variadic parameter type decl from the environment. (class_decl::priv::classes_being_compared_): Remove static data member. (class_decl::priv::{mark_as_being_compared, unmark_as_being_compared, comparison_started): Use the "classes being compared" map from the environment. (class_decl::base_spec::get_hash): Adjust. (keep_type_alive): Get the alive types array from the environment) not from a global variable anymore. (get_next_string): Put the counter in thread-local storage. * src/abg-hash.cc (scope_decl::hash::operator()) (function_decl::hash::operator()): Do not handle caching (here). * include/abg-corpus.h (corpus::{g,s}et_environment): Declare new accessors. * src/abg-corpus.cc (corpus::priv::env): New data member. (corpus::priv::priv): Initialize it. (corpus::corpus): Take an environment in parameter. (corpus::{g,s}et_environment): Define new member functions (corpus::add): Set the environment of the newly added translation unit, if it's not set already set. In any case, assert that the translation unit must use the same environment as the corpus. * include/abg-dwarf-reader.h (create_read_context) (read_corpus_from_elf): Take an environment parameter. ({s,g}et_debug_info_root_path, {s,g}et_environment): Declare new functions. * src/abg-dwarf-reader.cc (read_context::{env_, offline_callbacks_}): New data members. (read_context::read_context): Initialize them. (read_context::clear_per_translation_unit_data): Do not touch the void type declaration, it doesn't belong to the translation unit. (read_context::{env, offline_callbacks}): New accessors. (read_context::{create_default_dwfl}): New member function. (read_context::dwfl_handle): Add a setter overload. ({s,g}et_debug_info_root_path): Define new accessors. (create_default_dwfl, create_dwfl_sptr, create_default_dwfl_sptr): Remove these. (build_translation_unit_and_add_to_ir): Adjust to pass the environment to the newly created translation unit. (build_function_decl): Adjust to pass the environment to the created function and parameter types. Get variadic parameter type node from the current environment, not from a global variable. And do not try to canonicalize function types here. (read_debug_info_into_corpus): Set the environment of the newly created corpus. (build_ir_node_for_void_type): Get the void type node from the current environment, rather than from a global variable. (create_read_context): Take the environment in parameter. Create the default dwarf front end library handle using the new member function of the read context. Set the current environment used by the reader. (read_corpus_from_elf): Take an environment in parameter. Overhaul. This is now simpler. (has_alt_debug_info): Adjust the call to create_read_context() to make it pass an empty environment. * include/abg-fwd.h (class environment): Forward declare. * include/abg-reader.h (read_translation_unit_from_file) (read_translation_unit_from_buffer) (read_translation_unit_from_istream) (read_corpus_from_native_xml): Take an environment in parameter. * src/abg-reader.cc (read_context::m_env): New data member. (read_context::read_context): Initialize it. (read_context::{get_environment, set_environment}): New data member. (read_translation_unit): Set environment of the new translation unit. (read_corpus_from_input): Set the environment of the new corpus. (read_translation_unit_from_file) (read_translation_unit_from_buffer) (read_translation_unit_from_istream, read_corpus_from_native_xml): Take an environment in parameter. (build_function_parameter): Get variadic parameter type from the environment. * src/abg-comparison.cc (compute_diff): Add asserts in all the overloads to ensure that the artifact being compared come from the same environment. * tests/print-diff-tree.cc (main): Create an env for the ABI artifacts to use. * tests/test-abidiff.cc (main): Likewise. * tests/test-diff-dwarf.cc (main): Likewise. * tests/test-ir-walker.cc (main): Likewise. * tests/test-read-dwarf.cc (main): Likewise. * tests/test-read-write.cc (main): Likewise. * tools/abicompat.cc (main): Likewise. * tools/abidiff.cc (main): Likewise. * tools/abidw.cc (main): Likewise. * tools/abilint.cc (main): Likewise. * tools/abipkgdiff.cc (main): Likewise. 2015-09-07 Dodji Seketeli Fix redundant const qualifier stripping * include/abg-ir.h (operator&, operator~): Add overloaded bitwise operators for qualified_type_def::CV. * src/abg-ir.cc (operator&, operator~): Define them. * src/abg-dwarf-reader.cc (maybe_strip_qualification): Fix comment. If there are multiple qualifiers, only strip the const one. (build_ir_node_from_die): Once we've built a qualified type, if the 'const' qualifier is stripped, then add the new (stripped) type to the set of new types. 2015-09-05 Dodji Seketeli Fix wording in README * README: Fix wording. 2015-09-02 Dodji Seketeli Misc style fixes * src/abg-hash.cc (class_decl::hash::operator()): Remove some dead code. * src/abg-ir.cc (equals): In the overload for class_decl, re-indent. 2015-09-02 Dodji Seketeli Re-arrange some regression tests order * tests/Makefile.am: Run runtestreaddwarf and runtestcanonicalizetypes at the beginning. 2015-09-02 Dodji Seketeli Bug 18904 - Fix support for C++ rvalue references * src/abg-comparison.cc (reference_diff::has_changes): Just compare the references, rather than assuming that the change can only be on underlying types. (reference_diff::report): Describe lvalue/rvalue changes for references. * src/abg-ir.cc (reference_type_def::reference_type_def): Properly set the name for an rvalue reference. (equals): For references, compare lvalue-ness too. (reference_type_def::get_qualified_name): Properly set rvalue reference names. * tests/data/test-diff-filter/test30-pr18904-rvalueref-liba.so: New test input. * tests/data/test-diff-filter/test30-pr18904-rvalueref-libb.so: New test input. * tests/data/test-diff-filter/test30-pr18904-rvalueref-report0.txt: New test reference output. * tests/data/Makefile.am: Add the new files to source distribution. * tests/test-diff-filter.cc (in_out_specs): Run the new tests. 2015-09-02 Dodji Seketeli More type degradation fixes (from DWARF to abixml) * include/abg-fwd.h (get_type_scope): Declare new function. * src/abg-hash.cc (var_decl::hash::operator()): Do not cache the hash because that can alter the hash computing of a larger type which embeds a var decl as a member declaration. This is especially true if the var decl indirectly references the larger type. The only way to cache the value of a var decl would be to wait after all canonical types have been computed. We'd then seal all types. After that sealing happens, we can cache var decls starting from the top-level ones. (function_decl::hash::operator()): Likewise. * src/abg-ir.cc (get_type_scope): Define new functions. * src/abg-reader.cc (read_is_declaration_only): Declare this function earlier. (typedef const_types_map_it): Adjust this to make it point to a map of string and vector of types, as opposed to a map to string and type as it was before. (typedef types_map_it): New typedef. (read_context::map_id_and_node): Map a type id to the last xmlNodePtr that represent a *declaration*. That gives more leeway to the declaration resolution code to choose the right definition later. Otherwise, there are cases where the wrong definition. By wrong definition, I mean a definition that is different from the one chosen by the DWARF reading code, for a given declaration. Basically for a given ABI corpus, a type declaration resolve to the first definition seen in the corpus. (read_context::get_all_type_decls): Define new member function. (read_context::types_equal): Use qualified names only if both types have a scope. (read_context::key_type_decl): Now a given ID is associated to *all* the declarations and definition that have that ID. (read_translation_unit_from_input): Make sure the current corpus node points to the right node. (build_class_decl): Resolve class declarations to the first definition seen in the corpus. Key a type decl before reading its members as a reading a member can request the current decl. No need to try and canonicalize a member type, as build_class_decl() does that already. * tests/data/test-read-dwarf/test16-pr18904.so: New test binary input. * tests/data/test-read-dwarf/test16-pr18904.so.abi: New test output reference. * tests/test-read-dwarf.cc: Run the test above. * tests/data/Makefile.am: Add the new test input to source distribution. * tests/data/test-abidiff/test-PR18791-report0.txt: Adjust. * tests/data/test-read-dwarf/test13-pr18894.so.abi: Likewise. * tests/data/test-read-dwarf/test14-pr18893.so.abi: Likewise. * tests/data/test-read-dwarf/test15-pr18892.so.abi: Likewise. 2015-08-30 Dodji Seketeli Bug 18892 - type degradation from DWARF to abixml on