From deaceac18ec9bf035e4a7e803125daa212eea8f4 Mon Sep 17 00:00:00 2001 From: Dodji Seketeli Date: Mon, 16 Nov 2015 12:55:54 +0100 Subject: [PATCH] Update ChangeLog file in preparation of 1.0.rc0 release * ChangeLog: Update using make update-changelog. Signed-off-by: Dodji Seketeli --- ChangeLog | 3804 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 3804 insertions(+) diff --git a/ChangeLog b/ChangeLog index 07e7bd1a..83cb0c7a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,3807 @@ +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 libtsan.so + * src/abg-reader.cc (read_context::maybe_canonicalize_type): Late + canonicalize enum types. + (build_enum_type_decl): Read the linkage name of the enum type. + * src/abg-writer.cc (write_enum_type_decl): Emit the linkage name + of the enum type. + * tests/data/test-read-dwarf/test15-pr18892.so: New binary test + input. + * tests/data/test-read-dwarf/test15-pr18892.so.abi: New test + output reference. + * tests/data/Makefile.am: Add the new test inputs above to source + distribution. + * tests/test-read-dwarf.cc (in_out_specs): Run the two tests above. + +2015-08-30 Dodji Seketeli + + Bug 18893 - type degradation from dwarf to abixml on libGLU.so + * src/abg-dwarf-reader.cc (build_class_type_and_add_to_ir): Do not + consider that virtual member functions disqualify a class from + being declaration-only. + * src/abg-hash.cc (var_decl::hash::operator()): Do not cache the + result of hashing before we are done building the type of the + var_decl. + (function_decl::hash::operator()): Likewise, do not cache the + result of hashing before we are done building the type of the + function_decl. + * src/abg-reader.cc (build_class_decl): Build the link between a + class declaration and its definition. If there are several + definitions of a class in the corpus, keep just one. + * src/abg-writer.cc (write_class_is_declaration_only): Emit the + link between a class declaration and its definition. + (write_class_decl): Emit a class declaration even if it has a + definition. The definition is going to be emitted + separately. + * tests/data/test-read-dwarf/test14-pr18893.so: New binary test + input. + * tests/data/test-read-dwarf/test14-pr18893.so.abi: New test + reference output. + * tests/data/Makefile.am: Add the new test input files to source + distribution. + * tests/test-read-dwarf.cc (in_out_specs): Run the new tests. + * 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/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. + +2015-08-30 Dodji Seketeli + + Use common canonicalization oracle when reading class type from dwarf + * src/abg-dwarf-reader.cc (build_ir_node_from_die): + (maybe_canonicalize_type): Move the specific logic that was in + build_ir_node_from_die (for class types) here. + +2015-08-30 Dodji Seketeli + + Fix crash in file type guessing + * src/abg-tools-utils.cc (string_ends_with): Handle the case where + the string suffix is longer than the string itself. + +2015-08-29 Dodji Seketeli + + Bug 18894 - Fix representation of enumerators in abixml format + * include/abg-ir.h (enum_type_decl::enumerator::get_value()): + Change the type of this from size_t to ssize_t. + * src/abg-ir.cc (enum_type_decl::enumerator::get_value): Do the + same on the definition side. + (non_canonicalized_subtype_detector::visit_begin): If a type + refers to itself, late canonicalize it to have a similar hashing + result as what the abixml reader does. + * src/abg-reader.cc (build_enum_type_decl): Use ssize_t to read + the value of enumerators. + * tests/data/test-read-dwarf/test13-pr18894.so.abi: New test input. + * tests/data/Makefile.am: Add the new test inputs above to source + distribution. + * tests/test-read-dwarf.cc (in_out_specs): Add 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/test11-pr18828.so.abi: Likewise. + * tests/data/test-read-dwarf/test12-pr18844.so.abi: Likewise. + +2015-08-29 Dodji Seketeli + + Detect vtable changes from member function changes + * include/abg-ir.h (class_decl::{has_virtual_base, has_vtable}): + Declare new member functions. + * src/abg-comp-filter.cc (has_virtual_mem_fn_change): New overload + for function_decl_diff. + (has_virtual_mem_fn_change): In the overload for diff*, support + virtual member function changes detection for function_decl_diff*. + * src/abg-comparison.cc (function_decl_diff::report): Detect and + report changes to a vtable by looking a changes that can happen to + a given member function. + (corpus_diff::report): Detect and report changes to vtables by + looking at changes change to member functions. + * tests/data/test-diff-dwarf/test29-vtable-changes-report-0.txt: + New text input. + * tests/data/test-diff-dwarf/test29-vtable-changes-v{0,1}.cc: Source + code of new test input binaries. + * tests/data/test-diff-dwarf/test29-vtable-changes-v{0,1}.o: New + test input binaries. + * tests/data/test-diff-dwarf/test30-vtable-changes-report-0.txt: + New text input. + * tests/data/test-diff-dwarf/test30-vtable-changes-v{0,1}.cc: New + test input. + * tests/data/test-diff-dwarf/test30-vtable-changes-v{0,1}.o: New + test input binaries. + * tests/data/test-diff-dwarf/test31-vtable-changes-report-0.txt: + New test input. + * tests/data/test-diff-dwarf/test31-vtable-changes-v{0,1}.cc: + Source code of new test input binary. + * tests/data/test-diff-dwarf/test31-vtable-changes-v{0,1}.o: New + test input binary. + * tests/data/Makefile.am: Add the new test input files above to + source distribution. + * tests/test-diff-dwarf.cc (in_out_specs): Consume the new test + inputs above. + +2015-08-29 Dodji Seketeli + + Do not hash or compare virtual member functions as par of classes + * src/abg-ir.cc (equals): When comparing two classes, do not + compare their virtual member functions. + * src/abg-hash.cc (class_decl::hash::operator()): Do not hash + virtual member functions when hashing a class. + * tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: Adjust. + +2015-08-29 Dodji Seketeli + + Misc style fixes + * src/abg-ir.cc (qualified_type_def::get_qualified_name): Fix + typos in comments. + (class_decl::member_class_template::operator==): Add comments. + (operator==): Add comment for the overload of + class_decl::member_class_template_sptr. + (function_tdecl::operator==): Add comments. + +2015-08-29 Dodji Seketeli + + Adjust many reference output for the non-regression test suite + * tests/data/test-abidiff/test-enum0-report.txt: Adjust. + * tests/data/test-abidiff/test-enum1-report.txt: Adjust. + * tests/data/test-abidiff/test-qual-type0-report.txt: Adjust. + * tests/data/test-abidiff/test-struct0-report.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/test9-pr18818-clang.so.abi: Adjust. + * tests/data/test-read-write/test17.xml: Adjust. + +2015-08-29 Dodji Seketeli + + Make test-read-dwarf.cc and test-read-write.cc abidiff the ABIs + * tests/test-read-dwarf.cc (main): Use abidiff to compare the + input elf file with the XML emitted. That should yield the empty + set. + * tests/test-read-write.cc (main): Likewise, use abidiff to + compare the input abixml file with the one that is emitted. + +2015-08-29 Dodji Seketeli + + Add a new --noout option to abidw + * tools/abidw.cc (options::noout): New data member. + (options::options): Initialize it. + (display_usage): Add a usage string for the new option. + (parse_command_line): Parse the new option. + (main): If --noout is provided, do not emit the XML form. + * doc/manuals/abidw.rst: Document the new option. + +2015-08-29 Dodji Seketeli + + Add a --no-architecture option to abidiff + * tools/abidiff.cc (options::no_arch): New data member. + (options::options): Initialize it. + (display_usage): Display a help string for the new options. + (parse_command_line): Parse the new options. + (main): If --no-architecture is provided, set the corpus + architecture to "". + * doc/manuals/abidiff.rst: Document the new options. + +2015-08-29 Dodji Seketeli + + Read abixml as a whole file and fix lots discrepancies with dwarf + * src/abg-reader.cc (class read_context): Move data member at + the top of the class like what is done elsewhere in the code + base. + (read_context::m_corp_node): New data member. + (read_context::read_context): Initialize it. + (read_context::{get,set}_corpus_node): New accessors. + (read_context::map_id_and_node): Accept that a node id previously + defined is defined again. In that case we just remember the first + mapping id -> xml-node. That seems to work for now. + (read_context::get_translation_unit): Fix the logic. + (read_context::m_wip_types_map): Rename + read_context::m_wip_classes_map into this. + (read_context::clear_wip_types_map): Rename + read_context::clear_wip_classes into this. + (read_context::mark_type_as_wip): Rename + read_context::mark_class_as_wip into this. + (read_context::unmark_type_as_wip): Rename + read_context::unmark_type_as_wip into this. + (read_context::is_wip_type): Rename read_context::is_wip_class + into this. + (read_context::types_equal): New member function. + (read_context::clear_per_translation_unit_data): Do not clear + anything anymore as the previous data that were per-tu are now + per-corpus. + (read_context::clear_per_corpus_data): Clear here the previous + data that were per-tu. + (read_context::maybe_canonicalize_type): Add a new force_delay + flag that forces the type to be late-canonicalized. Also force + late-canonicalize references, pointers, qualified-type and typedef + because they must be canonicalized once they've been added to + their context; but then this function might be called too early, + before they are added to their context. + (read_context::type_id_new_in_translation_unit): Remove this + member function. + (read_translation_unit_from_input): Be able to either use the + xmlTextReader interface, or get the current 'abi-instr' xml + element node. If using the xmlTextReader interface, use it to + move to the 'abi-instr' node, expand it and then use that. In + either case, call read_translation_unit() with the 'abi-instr' xml + element node. + (read_translation_unit): Take an 'abi-instr' XML element in + argument now, use that to read the translation unit, as opposed to + using the xmlTextReader interface we where using before to walk + the sub-tree of the abi-instr xml node. + (read_context::get_scope_for_node): If the scope is a new + translation unit, then build the new translation unit. + (read_symbol_db_from_input): Take the function and variable symbol + data bases, and read the current xml element node (do not use the + xmlTextReader interface anymore) to populate the function and + variable symbols. + (read_elf_needed_from_input): Do not use the xmlTextReader + interface anymore. Rather, use the current xml element node, look + for the 'elf-needed' xml element node and use it to populate the + set of elf dependencies. + (read_corpus_from_input): Rework to expand the contents of the + corpus node and use the result, rather than just exclusively + relying on the xmlTextReader interface. + (build_function_parameter): Build a proper IR node for variadic + parameters. Build function type node *after* having built all the + parameters IR, so that parameter indexing is the same as what is + done in the DWARF reader. Also, if the function is not being + added to its context yet, then delay the canonicalizing of its + type, just like what is done by the DWARF reader. + (build_qualified_type_decl, build_pointer_type_def) + (build_reference_type_def, build_enum_type_decl, build_type_decl): + Adjust. Do not enforce anymore that the ID of this type be new in + the current TU. Delay canonicalizing if the type is not being + added to its context. For typedefs, use an adapted way of + checking the consistency of the underlying type. + (build_array_type_def): Do not enforce anymore that the ID of this + type be new in the current TU. Support the fact that the array + might not have any DW_AT_byte_size attribute. Force late + canonicalizing if the array is not being added to its context. + (build_class_decl): Adjust. Reuse the + read_context::maybe_canonicalize_type() function rather than + trying to determine locally when to canonicalize. + (build_template_tparameter): Adjust + +2015-08-29 Dodji Seketeli + + Fix handling of class declaration during DWARF reading + *virtual* member functions, data members, base classes or a + DW_AT_byte_size as being conditions for being defined. + * src/abg-dwarf-reader.cc (read_context::decl_only_classes_map_): + Remove this data member. + (read_context::{declaration_only_classes_to_force_defined, + schedule_declaration_only_class_for_forced_resolution}): Remove + these member functions. + (read_context::resolve_declaration_only_classes): Do not force + resolution of class declaration. + (build_class_type_and_add_to_ir): Do not schedule classes for + forced-resolution when they are used as base classes. The + presence of a member function is not enough to make the class be + defined. It needs to be a virtual member function. + +2015-08-28 Dodji Seketeli + + Fix important hashing issues + * src/abg-hash.cc (class_decl::hash::operator()): Do not force + base classes to have definitions anymore. GCC and Clang (at + least) some time emits debug info in which the definition of some + base classes are missing, especially when those base classes have + vtables. In that case, the definition of the class might it's in + the binary where the vtable is emitted, which might not be the + binary we are looking at. So let's relax the assertion we had + here for base classes. For hashing virtual member functions, + directly walk the virtual member functions by looking at + class_decl::get_virtual_mem_fns() rather than walking all + member functions and looking for the virtual ones. This is a + speed optimization but it also helps during debugging. + +2015-08-28 Dodji Seketeli + + Fix template comparison operators + * include/abg-ir.h (function_tdecl::operator==): Introduce a new + virtual member operator that takes a function_tdecl&. + * src/abg-ir.cc + (class_decl::member_function_template::operator==): Avoid the + static cast in the overload for member_base. In the overload for + member_class_template, avoid infinite recursion. + (function_tdecl::operator==): In the overload for decl_base, do + not do the real work here in the overload for decl_base Rather, + the real work is done in the new overload for function_tdecl, and + all other overloads call that one. + +2015-08-28 Dodji Seketeli + + Use size/alignment of class definition when requested on declaration + * include/abg-ir.h (type_base::{set_size_in_bits, + set_alignment_in_bits}): Make these member functions virtual. + (class_decl::{set_size_in_bits, get_size_in_bits, + get_alignment_in_bits, set_alignment_in_bits}): Declare these + virtual member functions. + * src/abg-ir.cc (class_decl::{set_size_in_bits, get_size_in_bits, + get_alignment_in_bits, set_alignment_in_bits}): Define these + virtual functions. + +2015-08-28 Dodji Seketeli + + Fix type lookup algorithm + * src/abg-ir.cc (find_next_delim_in_cplus_type): Define new static + function. + (fqn_to_components): Use the new function above to break up a + fully qualified name into components, rather than the too simple + string::find_first_of() we were using previously. + (lookup_node_in_scope): If the found type (class) is a + declaration-only and if it has a definition, then return it. + +2015-08-26 Dodji Seketeli + + Make decl hashing always take qualified name into account + * src/abg-hash.cc (decl_base::hash::operator()(const decl_base&)): + Always hash the qualified name of the decl. + +2015-08-26 Dodji Seketeli + + Accept base classes which types are compatible with class type + * include/abg-fwd.h (is_compatible_with_class_type): Declare a new + overload. + * src/abg-dwarf-reader.cc (build_class_type_and_add_to_ir): Rather + than requiring that base classes be of class type, just require + that they be compatible with class types. + * src/abg-ir.cc (is_compatible_with_class_type): Define a new + overload. + +2015-08-26 Dodji Seketeli + + Harden function_decl::get_pretty_representation() + * src/abg-ir.cc (function_decl::get_pretty_representation): Make + sure the function type is a member function before calling + get_member_function_is_{virtual,ctor,dtor,const}. + +2015-08-25 Dodji Seketeli + + Don't cache type qualified name before canonicalization + * src/abg-ir.cc (decl_base::{get_qualified_parent_name, + get_qualified_name}): Use the qualified name cache only if the + type is fully built, i.e, when its canonical type is present. + (qualified_type_def::get_qualified_name): Likewise. + (pointer_type_def::get_qualified_name): Likewise. + (reference_type_def::get_qualified_name): Likewise. + (array_type_def::get_qualified_name): Likewise. + +2015-08-22 Dodji Seketeli + + Misc style cleanups + * configure.ac: Fix some spelling typos. + * src/abg-tools-utils.cc (guess_file_type): Fix indentation. + * tests/test-diff-pkg.cc (int_out_specs): Add some vertical spaces + for better legibility. + * tools/abidiff.cc (main): Add a missing space. + * tools/abipkgdiff.cc (extract_deb): Fix a typo in the comment. + +2015-08-22 Dodji Seketeli + + Make abipkgdiff compare tar archives containing binaries + * config.h.in (WITH_TAR): New configuration preprocessor macro. + * configure.ac: Add a new --enable-tar option. It's turned on + automatically if the tar program is found in the PATH. Adjust the + build configuration report to add the tar archive support. + * include/abg-tools-utils.h (string_ends_with): Declare new + function. + (enum file_type): Add a new FILE_TYPE_TAR enumerator. + * src/abg-tools-utils.cc (string_ends_with): Define new function. + (operator<<(ostream&, file_type)): Serialize the new FILE_TYPE_TAR + enumerator. + (guess_file_type): Detect UStar format file by reading its magic + number. Detect compressed tar files based on the file path + extension. + * tools/abipkgdiff.cc (extract_tar): Define new function. + (extract_package): Handle tar packages. + (main): Handle tar archives. + * tools/abidiff.cc (main): Handle the new FILE_TYPE_TAR + enumerator. + * tools/abilint.cc (main): Likewise. + * tests/data/test-diff-pkg/tarpkg-0-dir{1,2}.ta{,r,.bz2, gz}: New + test input tarballs. + * tests/data/test-diff-pkg/tarpkg-0-report-0.txt: New test output + reference. + * tests/data/Makefile.am: Add the new test data file above to + source distribution. + * tests/test-diff-pkg.cc (in_out_specs): Add new tests cases. + +2015-08-22 Dodji Seketeli + + Misc style fixes in abipkgdiff + * include/abg-tools-utils.h (enum file_type): Fix the comment for + for the FILE_TYPE_DEB enumerator. + * tools/abipkgdiff.cc (main): Fix the style of the conditions. + Also, fix the text emitted. + +2015-08-22 Dodji Seketeli + + Make abipkgdiff compare directories containing binaries + * include/abg-tools-utils.h (enum file_type): Add a new + FILE_TYPE_DIR enumerator. + * src/abg-tools-utils.cc (operator<<(ostream&, file_type)): + Support serialization of the new FILE_TYPE_DIR enumerator. + (guess_file_type): Detect that the path given is a directory. + * tools/abipkgdiff.cc (package::package): If the package is a + directory, then set its extracted directory path to the path of + the directory. + (package::erase_extraction_directory): Do not erase the extraction + directory if the package is a directory provided by the user. + (extract_package): If the package is a directory provided by the + user, then there is nothing to extract. + (main): If the first package is a directory, then the second one + should be a directory as well. + * tools/abidiff.cc (main): Support directories as input. + * tools/abilint.cc (main): Likewise. + * tests/data/test-diff-pkg/dirpkg-0-dir{1,2}/libobj-v0.so: New + binary test inputs. + * test/data/test-diff-pkg/dirpkg-0-report-0.txt: New input test + file. + * tests/data/test-diff-pkg/dirpkg-1-dir{1,2}/obj-v0.cc: Source + code of the binary test inputs above. + * tests/data/Makefile.am: Add the new files above to the source + distribution. + * tests/test-diff-pkg.cc (in_out_specs): Add the new test input + files above to the set of tests this harness has to run over. + +2015-08-22 Dodji Seketeli + + [dwarf reader] Support reference types without explicit DW_AT_byte_size + * src/abg-dwarf-reader.cc (build_reference_type): If the type DIE + has no DW_AT_byte_size, assume the type size is the translation + unit's address size. + * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Adjust. + * tests/data/test-read-dwarf/test12-pr18844.so.abi: Adjust. + +2015-08-21 Dodji Seketeli + + [dwarf reader] Support pointer types without explicit DW_AT_byte_size + * abg-dwarf-reader.cc (build_pointer_type_def): If the type DIE + has no DW_AT_byte_size, assume the type size is the translation + unit's address size. + * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Adjust. + * tests/data/test-read-dwarf/test12-pr18844.so.abi: Adjust. + +2015-08-21 Dodji Seketeli + + make abipkgdiff compile with GCC 4.4.7 + * tools/abipkgdiff.cc (package::extracted_packages_parent_dir): + The string holding the dir name is no more __thread, as this won't + compile with GCC 4.4.7 + +2015-08-21 Dodji Seketeli + + Misc style fixes + * src/abg-dwarf-reader.cc (read_context::die_type_map): Fix typo + in the comment. + * src/abg-ir.cc (peel_typedef_type): Fix typo in the comment. + * src/abg-reader.cc + (read_context::perform_late_type_canonicalizing): Fix a type in + the comment. + +2015-08-21 Dodji Seketeli + + Make get_pretty_representation work on method types + * include/abg-fwd.h (is_method_type): Declare new overloads for + naked pointers. + (get_method_type_name): Declare new functions. + (get_pretty_representation): Declare new overloads for + method_type. + * src/abg-ir.cc (get_function_type_name): If the function type is + a method type, handle it as such. + (get_method_type_name): Define new functions. + (get_pretty_representation): If the function type is a method + type, handle it as such. + (get_pretty_representation): Define new overloads for method_type + and pointer/reference to method_type. + (is_method_type): Add overloads for naked pointers. + +2015-08-21 Dodji Seketeli + + Hash a class declaration the same as its definition + * src/abg-hash.cc (class_decl::hash::operator()(const class_decl&)): + If the class declaration has a definition, hash its definition + instead. Otherwise, if the class declaration has no definition, + just return a zero hash, like what we were doing before. + * src/abg-reader.cc (read_context::maybe_canonicalize_type): Do + not early canonicalize method types because most of the time, when + this function is called, the method hasn't been added to its + parent class yet. So wait until late before canonicalizing. + * src/abg-writer.cc (write_class_is_declaration_only): Do not emit + the "is-declaration-only" property if the declaration has a + definition. + (write_class_decl): If the class declaration has a definition, + emit the definition instead. + * 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/test9-pr18818-clang.so.abi: Likewise. + * tests/data/test-read-write/test18.xml: Likewise. + * tests/data/test-read-write/test20.xml: Likewise. + * tests/data/test-read-write/test21.xml: Likewise. + +2015-08-20 Dodji Seketeli + + Add a --stats to abidiff and abidw + * include/abg-dwarf-reader.h (get_show_stats) + (set_show_stats): New accessors for a new "show_stats" property of + the dwarf reader context. + * src/abg-dwarf-reader.cc: Include iostream to use std::cerr. + (dwarf_reader::show_stats_): New data member. + (dwarf_reader::dwarf_reader): Initialize it. + (dwarf_reader::show_stats) + (get_show_stats) + (set_show_stats): Define new accessors. + (dwarf_reader::die_type_map): Add const overload to this accessor. + (dwarf_reader::lookup_type_from_die_offset): Make this accessor + const. + (dwarf_reader::add_late_canonicalized_types_stats): New member + function. + (dwarf_reader::perform_late_type_canonicalizing): Emit the + statistics about late-canonicalized types if the user asked for + it. + * tools/abidiff.cc (options::show_stats): New data member. + (options::options): Initialize it. + (display_usage): Document it. + (parse_command_line): Parse the new --stats option. + (main): Create a dwarf reader context, set the show_stats to it + and then use that context to read the corpora before diffing them. + * tools/abidw.cc (options::show_stats): New data member. + (options::options): Initialize it. + (display_usage): Document it. + (parse_command_line): Parse the new --stats option. + (main): Set the show_stats to the dwarf reader context before + using it. + * doc/manuals/abidiff.rst: Update the manual. + * doc/manuals/abidw.rst: Update the manual. + +2015-08-19 Dodji Seketeli + + Canonicalize all types that got scheduled for late canonicalization + * src/abg-dwarf-reader.cc + (read_context::canonicalize_types_scheduled): Canonicalize all + types scheduled for late canonicalization. + * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Adjust. + * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Adjust. + +2015-08-19 Dodji Seketeli + + Propagate canonical type of a class definition to its declaration + * src/abg-ir.cc: (canonicalize): Propagate the canonical type of + the type definition to its declaration. + (class_decl::set_definition_of_declaration): Likewise. + +2015-08-19 Dodji Seketeli + + Make type_has_non_canonicalized_subtype() tighter + * include/abg-fwd.h (is_typedef, is_pointer_type) + (is_reference_type): Declare new overloads. + (peel_typedef_type): Renamed get_typedef_underlying_type into + this. + (peel_pointer_type, peel_reference_type) + (peel_typedef_pointer_or_reference_type): Declare new functions. + * src/abg-ir.cc (peel_typedef_type): Renamed + get_typedef_underlying_type into this. + (is_typedef, is_pointer_type, is_reference_type): Define new + overloads. + (peel_pointer_type, peel_reference_type) + (peel_typedef_pointer_or_reference_type): Define new functions. + (non_canonicalized_subtype_detector::has_non_canonical_type_): + Make the type of this data member be a type_base*, not a bool. + This is so that we can return the first non-canonicalized subtype + of the type we are looking at. + (non_canonicalized_subtype_detector::non_canonicalized_subtype_detector): + Adjust the data member initialization. + (non_canonicalized_subtype_detector::visit_begin): Add an overload + for function_decl*, to avoid looking into non-virtual member + functions. + In the overload for type_base*, peel typedefs, pointers and + reference of each sub-type that has no canonical type, to see if + refers to the type we are actually walking. If yes, then keep + going. + (type_has_non_canonicalized_subtype): Return the non-canonicalized + sub-type found. + * src/abg-comparison.cc (type_suppression::suppresses_diff): + Adjust for the get_typedef_underlying_type -> peel_typedef_type + renaming. + +2015-08-19 Dodji Seketeli + + Make decl_base::get_qualified_name() work when decl context changes + * include/abg-ir.h (class decl_base): Make class scope_decl a + friend of decl_base. + (type_base::priv_): Make this protected, rather than private. + * src/abg-ir.cc (scope_decl::add_member_decl) + (scope_decl::insert_member_decl): Reset the cache of the result of + decl_base::get_qualified_name(). + * tests/data/test-abidiff/test-PR18791-report0.txt: Adjust. + +2015-08-18 Dodji Seketeli + + Bug 18844 - assert failure in abidw at abg-dwarf-reader.cc:6537 + * src/abg-dwarf-reader.cc (build_class_type_and_add_to_ir): + Schedule declaration-only class resolution before the class + appears as usable as to other types being built. + * tests/data/test-read-dwarf/test12-pr18844.so: Add a new binary + test input. + * tests/data/test-read-dwarf/test12-pr18844.so.abi: The reference + ABI XML output for the binary above. + * tests/data/Makefile.am: Add the new test inputs above to the + source distribution. + * tests/test-read-dwarf.cc (in_out_specs): Add the new test inputs + above to the set of input this test harness has to run over. + +2015-08-18 Dodji Seketeli + + Fix a little glitch in the test suite + * test-read-dwarf.cc (in_out_specs): Emit the output of the test11 + to output/test-read-dwarf/test11-pr18828.so.abi, not + output/test-read-dwarf/test10-pr18828.so.abi. + +2015-08-18 Dodji Seketeli + + Escape XML property names that were not escaped before + * src/abg-writer.cc (write_namespace_decl, write_typedef_decl) + (write_var_decl): Escape the XML characters that are forbidden in + XML properties, and that are emitted as value of the 'name' + property. + +2015-08-15 Dodji Seketeli + + Bug 18828 - Handle force-resolving of multiple declarations-only of the same type + * src/abg-dwarf-reader.cc + (read_context::resolve_declaration_only_classes): Accept that a + class that needs to be force-resolved might have been declared + several times. In that case, some instances of that + declaration-only class might have already been resolved (or + completed). + * tests/data/test-read-dwarf/test11-pr18828.so: New binary input. + It comes from bug https://sourceware.org/bugzilla/show_bug.cgi?id=18828. + * tests/data/test-read-dwarf/test11-pr18828.so.abi: The reference + output for the binary above. + * tests/data/Makefile.am: Add the test input files above to source + distribution. + * tests/test-read-dwarf.cc (in_out_specs): Add the test inputs + above to the set of input this test harness has to run over. + +2015-08-15 Dodji Seketeli + + Avoid declaring a type several times in the same TU in the XML format + * src/abg-writer.cc (write_context::{record_type_id_as_emitted, + record_type_as_emitted, type_id_is_emitted, type_is_emitted, + clear_emitted_types_map}): New member functions. + (write_context::m_emitted_type_id_map): New data member. + (write_translation_unit): Clear the per-translation unit map of + emitted types. Do not emit a type that has already been emitted + in this translation unit. + (write_namespace_decl): Do not emit a type that has already been + emitted in this translation unit. + (write_type_decl, write_qualified_type_def) + (write_pointer_type_def, write_reference_type_def) + (write_array_type_def, write_typedef_decl, write_class_decl) + (write_type_tparameter, write_template_tparameter): Record the + type we've just written as having been written out. + * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Adjust as + duplicated declarations got removed. + +2015-08-14 Dodji Seketeli + + Misc style fixes in the XMLABI writer + * src/abg-writer.cc (write_context): Align data members. + (write_translation_unit): Remove useless horizontal white spaces. + (write_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_class_decl) + (write_type_tparameter): Use the *_sptr typedefs rather than the + longer form of shared_ptr in function signatures. + (write_enum_type_decl): In this function in particular, indent a + line properly. + +2015-08-14 Dodji Seketeli + + Fix typos in abipkgdiff + * tools/abipkgdiff.cc (display_usage): s/pompare/compare. Give a + better help message for --help. + (extract_rpm): Insert a space after the path of the package being + extracted, when emitting a verbose message. + +2015-08-14 Dodji Seketeli + + Install the manpage for abipkgdiff + * doc/manuals/Makefile.am (section1_manpages): Add abipkgdiff.1 to + the set of manpages to be install into section 1. + +2015-08-12 Dodji Seketeli + + Bug 18818 - abidw aborts on a class with a non-complete base class + * src/abg-dwarf-reader.cc + (read_context::decl_only_classes_to_force_defined_map_): New data + member. + (read_context::declaration_only_classes_to_force_defined): New + accessors. + (read_context::schedule_declaration_only_class_for_forced_resolution): + New member function. + (build_class_type_and_add_to_ir): If a base class is a + declaration-only class then mark it as needing to be force-defined + *if* it's still not defined at the end of the abi corpus loading. + (read_context::resolve_declaration_only_classes): If + declaration-only classes that need to force-defined are present + and not defined (when we reach the end of the ABI corpus) then + force-define them as empty classes. + * tests/data/test-read-dwarf/test10-pr18818-gcc.so: New test + binary input file. This comes from a user binary submitted to bug + https://sourceware.org/bugzilla/show_bug.cgi?id=18818. The + original URL to the binary is + https://sourceware.org/bugzilla/attachment.cgi?id=8518. + * tests/data/test-read-dwarf/test9-pr18818-clang.so: New binary + input file. This comes from the same bug report as above. The + original URL to the binary is + https://sourceware.org/bugzilla/attachment.cgi?id=8511. + * tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: New + reference output file. + * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Likewise. + * tests/data/Makefile.am: Add the new files above to the source + distribution. + * tests/test-read-dwarf.cc (in_out_specs): Add the test inputs + above the set of tests input this harness has to run over. + +2015-08-14 Dodji Seketeli + + Update the abipkgdiff manual to say that .deb files are now supported + * doc/manuals/abipkgdiff.rst: Say that .deb fiel are now supported + by abipkgdiff. + +2015-08-14 Dodji Seketeli + + Update comment about the supported formats in abipkgdiff + * tools/abipkgdiff.cc: Now that .deb packages are supported, say + it. + +2015-08-14 Dodji Seketeli + + Make the support of RPM and DEB package formats conditional + * config.h.in: Define WITH_DEB and WITH_RPM pre-processor macros. + * configure.ac: Add --enable-{rpm,deb} switches. Check for + rpm2cpio and cpio programs, unless --disable-rpm was provided. If + they are found and if --enable-rpm=auto was provided, then + consider that --enable-rpm=yes was provided. In that case, set + the WITH_RPM macro to 1. Otherwise, undefine that macro. + Similarly, check for dpkg unless --disable-deb was provided. If + it's found and if --enable-deb=auto was provided, consider that + --enable-deb=yes was provided. In that case, set the WITH_DEB + macro to 1. Otherwise, undefine that macro. Define the + ENABLE_RPM and ENABLE_DEB conditional automake variables, if the + rpm resp. deb support is enabled. Emit a notice about the rpm and + deb features being enabled or not, at the end of the configure + process. + * tests/test-diff-pkg.cc: Include the config.h header. + (in_out_spec): Guard rpm tests by the WITH_RPM macro. Similarly, + guard deb tests by the WITH_DEB macro. + * tools/abipkgdiff.cc: Include the config.h header. + (extract_rpm): Guard this function definition with the WITH_RPM + macro. + (extract_deb): Guard this function definition with the WITH_DEB + macro. + (extract_package): Guard the handling of rpm packages with the + WITH_RPM macro and the handling of deb package with the WITH_DEB + macro. If a package not-support package format is encountered, + emit an appropriate error message and error out. + +2015-08-07 Matthias Klose + + Add support for .deb files to abipkgdiff + * include/abg-tools-utils.h (file_type): Add FILE_TYPE_DEB. + * tools/abipkgdiff.cc (extract_deb): New. + (extract_package, main): Handle FILE_TYPE_DEB. + * src/abg-tools-utils.cc (operator<<): Handle FILE_TYPE_DEB. + (guess_file_type): Detect FILE_TYPE_DEB. + * tools/abidiff.cc (main): Handle FILE_TYPE_DEB. + * tools/abilint.cc (main): Handle FILE_TYPE_DEB. + * tests/data/test-diff-pkg/libsigc++-2.0-0c2a-dbgsym_2.4.0-1_amd64.ddeb: + Input debian debug info package; to be compared by the test + harness runtestdiffpkg. + * tests/data/test-diff-pkg/libsigc++-2.0-0c2a_2.4.0-1_amd64.deb: + Input debian package; to be compared by the test harness + runtestdiffpkg. + * tests/data/test-diff-pkg/libsigc++-2.0-0v5-dbgsym_2.4.1-1ubuntu2_amd64.ddeb: + Input debug info package + * tests/data/test-diff-pkg/libsigc++-2.0-0v5_2.4.1-1ubuntu2_amd64.deb: + Input debian package; to be compared by the test harness + runtestdiffpkg. + * 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: + Reference output for the comparison of the packages above. + * tests/data/Makefile.am: Add the new files above to the source distribution. + * tests/test-diff-pkg.cc (in_out_specs): Add the input packages + above to the set of files to be compared by this test harness. + +2015-08-14 Dodji Seketeli + + Add configure check for rm and mkdir used by abipkgdiff + * configure.ac: Add configure checks for rm and mkdir used by + abipkgdiff. + +2015-08-14 Dodji Seketeli + + Fix a comment in configure.ac + * configure.ac: Fix a comment. + +2015-08-14 Dodji Seketeli + + Do not remove api and website source files by accident + * doc/Makefile.am: Do not remove the entirety of the build dir of + doxygen for the apidoc and the website as these can be also the + source dirs. Rather, remove that is under the html/ sub-directory + of the build dir, as this is always generated by doxygen. + +2015-08-13 Dodji Seketeli + + Add an abipkgdiff --fail-no-dbg command line option + * tools/abipkgdiff.cc (options::fail_if_no_debug_info): New data + member. + (options::options): Initialize it. + (display_usage): Document it. + (compare): If the user asked for it, fail if the we couldn't file + the debug info for the corpus files being compared. + +2015-08-13 Dodji Seketeli + + Add -h and -d option shortcuts to abidw + * tools/abidw.cc (display_usage): Added a documentation string. + (parse_command_line): Parse the new -h and -d shortcuts. + * doc/manuals/abidw.rst: Update the manual. + +2015-08-13 Dodji Seketeli + + Add a -h option shortcut to abidiff + * tools/abidiff.cc (display_usage): Add documentation for the new + switch. + (parse_command_line): Parse the -h option. + * doc/manuals/abidiff.rst: Update the manual. + +2015-08-13 Dodji Seketeli + + Add a -h shortcup to abipkgdiff --help + * tools/abipkgdiff.cc (display_usage): Document the -h shortcut. + (parse_command_line): Parse the -h shortcut to --help. + +2015-08-09 Dodji Seketeli + + Bug 18791 - libabigail fails to read the output of abidw + * src/abg-reader.cc (read_context::get_scope_for_node): Take an + access_specifier output parameter to set the access specifier of + the current node in its scope. Update the function to set the + access_specifier. + (read_context::build_or_get_type_decl): Adjust to set the access + specifier of the type we are building, in case it's a member type. + * tests/data/test-abidiff/test-PR18791-v{0,1}.so.abi: New test input files. + * tests/data/test-abidiff/test-PR18791-report0.txt: New test + output reference. + * tests/data/Makefile.am: Add the new test material to the source + distribution. + * tests/test-abidiff.cc (specs): Add the new test inputs to the set of + input files this test harness has to run over. + +2015-08-09 Dodji Seketeli + + Fix a thinko in language support de-serialization + * src/abg-ir.cc (string_to_translation_unit_language): Fix + thinko. What was I thinking ... + +2015-08-06 Dodji Seketeli + + Add --no-added-syms to abipkgdiff + * tools/abipkgdiff.cc (options::show_added_syms): New data member. + (options::options): Initialize it. + (parse_command_line): Parse the new --no-added-syms option and set + the options::show_added_syms flag accordingly. + (display_usage): Add a help string for the new option. + (set_diff_context_from_opts): Set the diff context according to + the state of the new options::show_added_syms flag. + * doc/manuals/abipkgdiff.rst: Add manual entry for the new + --no-added-syms options. + * tests/data/test-diff-pkg/test-rpm-report-5.txt: New test + reference input file. + * tests/data/Makefile.am: Add the new file above to source + distribution. + * tests/test-diff-pkg.cc (InOutSpec::prog_options): New data + member. + (in_out_specs): Adjust. Add a new input to run the test again + with --no-added-syms. + (main): Adjust to pass the program options contained in + InOutSpec::prog_options to abipkgdiff. + fixup! Add --no-added-syms to abipkgdiff + +2015-08-06 Dodji Seketeli + + Update diff stats when added symbols are removed from change report + * include/abg-comparison.h (diff_context_wptr) + (corpus_diff::diff_stats_sptr): New typedefs. + (corpus_diff::diff_stats::diff_stats): Make this constructor take + a diff_context_sptr. Make the default constructor private. + * src/abg-comparison.cc (corpus_diff::diff_stats::priv::ctxt_): + New data member. This is a weak pointer to a diff_context. + (corpus_diff::diff_stats::priv::priv): Take a diff_context_sptr + and initialize the weak pointer ctxt_ to it. + (corpus_diff::diff_stats::priv::ctxt): New accessor to the + diff_context hold by the diff_stats. + (corpus_diff::diff_stats::{num_removed_func_filtered_out, + num_added_func_filtered_out, num_removed_vars_filtered_out, + num_added_vars_filtered_out, num_removed_func_syms_filtered_out, + num_added_func_syms_filtered_out, + num_removed_var_syms_filtered_out, + num_added_var_syms_filtered_out}): If the user asked for the added + [or removed] variables/functions/symbols to be ignored, the + accessors for the number of filtered added/removed variables/functions/symbols + return the total number of added/removed + variables/functions/symbols; that is, say that *all* added/removed + variables/functions/symbols got filtered out. + (corpus_diff::priv::diff_stats_): Turn this data member into a + [shared] pointer to diff_stats. + (corpus_diff::priv::filters_and_suppr_applied_): Remove this data + member. Now that diff_stats_ is a pointer, we don't need this + boolean anymore. + (corpus_diff::apply_filters_and_suppressions_before_reporting): + Adjust to the fact that filters_and_suppr_applied_ is gone, and + that diff_stats_ is now a pointer. + (corpus_diff::report): Control un-referenced added symbols + reporting with + diff_context::show_added_symbols_unreferenced_by_debug_info() + +2015-07-31 Dodji Seketeli + + Make applying supp specs through pointer access look through typedefs + * include/abg-comparison.h (type_suppression::suppresses_type): + Declare new member function. + (get_typedef_diff_underlying_type_diff): Declare new function. + * include/abg-fwd.h (get_typedef_underlying_type): Likewise. + * src/abg-comparison.cc (type_suppression::suppresses_type): + Define new member function. + (get_typedef_diff_underlying_type_diff): Define new function. + (type_suppression::suppresses_diff): After looking through the + different kind of access methods, use the new + type_suppression::suppresses_type(), rather than doing lots of + stuff ourselves here. But then, if the suppression doesn't apply + to the subjects of the diff, look through typedefs and try to + apply the suppression again. + * src/abg-ir.cc (get_typedef_underlying_type): Define new + function. + * tests/data/test-diff-suppr/libtest25-typedef-v{0,1}.so: New + binary test input files. + * tests/data/test-diff-suppr/test25-typedef-v{0,1}.c: Source code + for the binary test input files above. + * tests/data/test-diff-suppr/test25-typedef-report-{0, 1}.txt: New test + input files. + * tests/data/test-diff-suppr/test25-typedef-suppr-0.txt: New test + input file. + * tests/data/Makefile.am: Add the new test material to the source + distribution. + * tests/test-diff-suppr.cc (in_out_specs): Add the test inputs + above to the set of test inputs this harness has to run over. + +2015-07-24 Dodji Seketeli + + Make abipkgdiff erase the *parent* directory of temporary files + * tools/abipkgdiff.cc + (erase_created_temporary_directories_parent): New static function. + (compare): After comparison, erase the temporary parent directory + as well. + +2015-07-24 Dodji Seketeli + + Make the name of the removed variable section be consistent + * src/abg-comparison.cc (corpus_diff::report): Introduce the + section of removed variables with the string "Removed variable", + rather than with the string "Deleted variable". + * tests/data/test-abicompat/test2-var-removed-report-0.txt: Adjust. + * tests/data/test-diff-suppr/test18-suppr-removed-var-report-0.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-5.txt: Likewise. + +2015-07-24 Dodji Seketeli + + Consider default symbol versions when computing added/removed fns/vars + * include/abg-corpus.h (corpus::{lookup_function_symbol, + lookup_variable_symbol}): Take a elf_symbol::version object, + rather than a string representing the version. Add an overload + that takes an elf_symbol. + * src/abg-corpus.cc (find_symbol_by_version): New static function. + (corpus::{lookup_function_symbol, lookup_variable_symbol}): Take a + elf_symbol::version object, rather than a string representing the + version. Add an overload that takes an elf_symbol. If the looked + up symbol has no version and if the corpus contains a symbol with + the same name and with a default version, then return that latter + symbol if the corpus doesn't contain a symbol with the same name + and empty version. + * src/abg-comparison.cc + (class_diff::ensure_lookup_tables_populated): Adjust. + (corpus_diff::priv::ensure_lookup_tables_populated): Before + deciding that a symbol has been added, if the symbol has a default + version, make sure no symbol with the same name and without + version was present in the former corpus. Similarly, before + deciding that a symbol has been removed, if the symbol has no + version, make sure the latter corpus has no symbol with the same + name and with a default version. + * tests/data/test-diff-dwarf/test12-report.txt: Adjust. The + function should not be considered as added, because its symbol + (and version) was already present in the former DSO. + +2015-07-24 Dodji Seketeli + + Fix a thinko in removed variables detection + * src/abg-comparison.cc + (corpus_diff::priv::ensure_lookup_tables_populated): Once we have + computed a set of potentially deleted variables that turned out to + contain variables that were actually *NOT* deleted, really take + these into account by removing these false positives from the set + of deleted *variables*. We were trying to delete these from the + set deleted *functions*; woops, I guess this was a copy & paste + error. + +2015-07-24 Dodji Seketeli + + Fix logic of type_has_non_canonicalized_subtype() + * src/abg-ir.cc (type_has_non_canonicalized_subtype): Once the + type has been traversed, just test if the visitor has accumulated + the 'has_non_canonical_type' property. + +2015-07-24 Dodji Seketeli + + Fix style issues + * include/abg-ir.h (struct ir_node_visitor): Fix the wording of + the comment of this type. + * src/abg-dwarf-reader.cc (build_ir_node_from_die): Fix the + filling of the text of the comment of the code that chooses to + perform early canonicalizing. + +2015-07-24 Dodji Seketeli + + Adding member type doesn't reset declaration-only-ness of a class + * src/abg-dwarf-reader.cc (build_class_type_and_add_to_ir): + Adding a new member type shouldn't remove the + declaration-only-ness of the class. + +2015-07-22 Dodji Seketeli + + Extract all packages for a given run of abipkgdiff under the same temp dir + * tools/abipkgdiff.cc (package::{}): Make the + data members be private. Make their names end with an underscore. + (package::extracted_package_parent_dir_path): Remove. + (package::extracted_package_dir_path): Rename into + package::extracted_dir_path_. + (package::extracted_packages_parent_dir): New static member + function, accessor. + (package::package): Adjust to the new names of the data members. + Call the new package::extracted_package_parent_dir() static member + function to initial the package::extracted_dir_path_ data member. + (package::{path, extracted_dir_path, type, is_debug, + path_elf_file_sptr_map, debug_info_package}): New accessors for + the data members. + (package::{erase_extraction_directory, + erase_extraction_directories}): Adjust. + (erase_created_temporary_directories) + (create_maps_of_package_content) + (extract_package_and_map_its_content, prepare_packages, compare) + (main): Adjust. + +2015-07-22 Dodji Seketeli + + Add a --keep-tmp-files option to abipkgidff + * tools/abipkgdiff.cc (options::keep_tmp_files): New data member. + (options::options): Initialize it. + (display_usage): Display a usage string for the new + --keep-tmp-files option. + (parse_command_line): Parse the new --keep-tmp-files option. + (compare): Do not erase temporary directories if the users asked so. + * doc/manuals/abipkgdiff.rst: Document the new --keep-tmp-files + options. + +2015-07-21 Dodji Seketeli + + Show linkage names in abipkgdiff output + * doc/manuals/abipkgdiff.rst: Document the new --no-linkage-name + options. + * tools/abipkgdiff.cc (options::show_linkage_names): New data + member. + (options::options): Initialize it. + (display_usage): Display a usage string for --no-linkage-name. + (parse_command_line): Parse the --no-linkage-name option. + (set_diff_context_from_opts): Set the diff context accordingly. + * tests/data/test-diff-pkg/test-rpm-report-0.txt: Adjust. + +2015-07-21 Dodji Seketeli + + Add --no-added-binaries to abipkgdiff + * tools/abipkgdiff.cc (options::show_added_binaries): New data + member. + (options::options): Initialize it. + (display_usage): Add a help string for --no-added-binaries. + (parse_command_line): Parse the new --no-added-binaries option. + (compare): Do not show added binaries if the user doesn't want to. + * doc/manuals/abipkgdiff.rst: Document the new --no-added-binaries + option. + +2015-07-21 Dodji Seketeli + + make abipkgdiff return a proper exit code + * tools/abipkgdiff.cc (compare): Return an instance + abigail::tools_utils::abidiff_status, just like what we do in + abidiff. + * doc/manuals/abipkgdiff.rst: Document the new exit code. + +2015-07-21 Dodji Seketeli + + Fix logic of determining if changes happened in abidiff + * tools/abidiff.cc (main): Simplify the logic when determining if + the comparison between two corpora yields worthwhile changes. + +2015-07-21 Dodji Seketeli + + Add a new corpus_diff::has_net_changes() entry point + * include/abg-comparison.h (corpus_diff::has_net_changes): Declare + new member function. + * src/abg-comparison.cc (corpus_diff::has_net_changes): Define it. + +2015-07-20 Dodji Seketeli + + Fix type synthesis to fix abicompat weak mode + * include/abg-fwd.h + (synthesize_type_from_translation_unit): Declare new function. + (synthesize_function_type_from_translation_unit): Make the + translation_unit parameter non-const because the function needs to + bind the life time of the synthesized function to the life time of + the translation unit. Make this function be a friend of + abigail::ir::translation_unit. + (synthesize_function_type_from_translation_unit): + * src/abg-ir.cc (translation_unit::priv::synthesized_types_): New + data member. + (synthesize_type_from_translation_unit): Define new function. + (synthesize_function_type_from_translation_unit): Make the + translation_unit parameter non-const. If the return is void, then + take that in account carefuly. Rather than just looking up the + type of parameters and return value, synthesize them too, + especially when they are qualified types. Bind the life time of + the synthesized function type to the lifetime of the translation + unit. + * tests/data/test-abicompat/test7-fn-changed-report-1.txt: New + test reference output. + * tests/test-abicompat.cc (in_out_spec): Run the harness on the + exisiting test7-fn-changed-app and libtest7-fn-changed-libapp-v1 + but in weak mode this time. + +2015-07-20 Dodji Seketeli + + Clean up the output of abicompat weak mode + * tools/abicompat.cc (perform_compat_check_in_weak_mode): Remove + disgracious vertical spaces in the wording. + * tests/data/test-abicompat/test5-fn-changed-report-0.txt: Adjust. + * tests/data/test-abicompat/test6-var-changed-report-0.txt: Adjust. + +2015-07-20 Sinny Kumari + + Display --suppressions|--suppr option in help usage + * tools/abipkgdiff.cc (display_usage): Print + --suppressions|--suppr option in help usage + +2015-07-20 Dodji Seketeli + + Fix computing the set of exported functions and varible symbols + * src/abg-ir.cc (elf_symbol::get_name_and_version_from_id): Always + set the version and name of the symbol. + * src/abg-corpus.cc + (corpus::exported_decls_builder::{keep_wrt_id_of_fns_to_keep, + keep_wrt_id_of_vars_to_keep}): Reset the symbol name *and* version + before passing it. This is redundant with the fix in + elf_symbol::get_name_and_version_from_id() that always set the + symbol name and version now, but I felt it makes it easier to + understand the fix overall. + * tests/data/test-abicompat/libtest7-fn-changed-libapp-v{0,1}.so: + New test input binaries. + * tests/data/test-abicompat/test7-fn-changed-app: Likewise. + * tests/data/test-abicompat/test7-fn-changed-{app, libapp-v0, + libapp-v1}.c: Source code of the binary test inputs above. + * * tests/data/test-abicompat/test7-fn-changed-{libapp-v0, + libapp-v1}.h: Likewise. + * tests/data/test-abicompat/test7-fn-changed-report-0.txt: Test + input. + * tests/data/Makefile.am: Add the new test material above to + source distribution. + * tests/test-abicompat.cc (int_out_specs): Add the test inputs + above to the set of inputs this test harness has to run over. + +2015-07-20 Dodji Seketeli + + Fix the wording of description of abipkgdiff.cc again + * tools/abipkgdiff.cc: Fix the wording again. + +2015-07-20 Dodji Seketeli + + Remove use of tmpnam from abilint + * include/abg-tools-utils.h (abigail::tools_utils::temp_file): + Declare new type. + (abigail::tools_utils::temp_file_sptr): New typedef. + * src/abg-tools-utils.cc (temp_file::priv): Define new type. + (temp_file::{temp_file, is_good, get_path, get_stream, create}): + Define new member functions. + * tools/abilint.cc (main): Do not use tmpnam anymore. Use the new + abigail::tools_utils::temp_file type instead. + +2015-07-20 Dodji Seketeli + + Try to avoid a race condition when abipkgdiff extracts packages. + * include/abg-tools-utils.h (get_random_number) + (get_random_number_as_string): Declare new functions. + * src/abg-tools-utils.cc (get_random_number) + (get_random_number_as_string): Define them. + * tools/abipkgdiff.cc + (package::extracted_package_parent_dir_path): New data member. + (package::package): Initialize + package::extracted_package_parent_dir_path to + /, with randomname being a random number + represented as a string. + (extract_rpm): Make sure to create a hierarchy of directories, not + just a directory. + +2015-07-19 Dodji Seketeli + + Fix the wording of the description of the abipkgdiff.cc file + * tools/abipkgdiff.cc: Fix the wording of the description. + +2015-07-19 Dodji Seketeli + + Fix the --suppressions manual doc for abidiff + * doc/manuals/abidiff.rst: Talk about the --suppr shortcut of the + --suppressions option. + +2015-07-19 Dodji Seketeli + + On changed fn, show symbol info when name is different from linkage name in C + * include/abg-ir.h (translation_unit::language): New enum type. + (translation_unit::{get_language, set_language}): Declare new + accessors. + (translation_unit_language_to_string) + (string_to_translation_unit_language, is_c_language) + (is_cplus_plus_language): Declare new functions. + * src/abg-ir.cc (translation_unit::priv::language_): New data + member. + (translation_unit::priv::language_): Initialize it. + (translation_unit::{set_language, get_language}): Define new + member functions. + (translation_unit_language_to_string) + (string_to_translation_unit_language, is_c_language) + (is_cplus_plus_language): Define new functions. + * src/abg-dwarf-reader.cc (dwarf_language_to_tu_language): New + static function. + (build_translation_unit_and_add_to_ir): Read the language of the + translation unit. + * src/abg-comparison.cc (corpus_diff::report): When reporting a + change in a function sub-type, if we are in C language translation + unit, if the function name is different from its linkage name, + even if the symbol doesn't have any alias, show symbol + information. + * src/abg-reader.cc (read_translation_unit_from_input): Read the + 'language' property of the translation unit, if present. + * src/abg-writer.cc (write_translation_unit): Write the 'language' + property to the translation unit, if present. + * tests/data/test-read-dwarf/test0.abi: Adjust for the new + 'language' property of the 'abi-instr' element. + * tests/data/test-read-dwarf/test1.abi: Likewise. + * tests/data/test-read-dwarf/test2.so.abi: Likewise. + * tests/data/test-read-dwarf/test3.so.abi: Likewise. + * tests/data/test-read-dwarf/test4.so.abi: Likewise. + * tests/data/test-read-dwarf/test5.o.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. + +2015-07-19 Dodji Seketeli + + Add --suppressions to abipkgdiff + * tools/abipkgdiff.cc (options::suppressions): New data member. + (set_diff_context_from_opts): Set the suppression specifications + provided by the user to the diff context. + (parse_command_line): Parse the --suppressions and --suppr command + line options. + * doc/manuals/abipkgdiff.rst: Document the --suppressions and + --suppr options. + +2015-07-18 Dodji Seketeli + + Support file_name_regexp and soname_regexp in supp-specs + * include/abg-comparison.h (suppression_base::priv_): Make this + pimpl member protected. + (suppression_base::set_file_name_regex_str) + (get_file_name_regex_str, get_soname_regex_str) + (set_soname_regex_str): Declare new accessors. + (function_suppression::{suppresses_function, + suppresses_function_symbol}): Take a diff_context_sptr. + (variable_suppression::{suppresses_variable, + suppresses_variable_symbol}): Take a diff_context_sptr. + * src/abg-comparison.cc + (suppression_base::priv::{file_name_regex_str_, file_name_regex_, + soname_regex_str_, soname_regex_}): Define new data members. + (suppression_base::priv::get_file_name_regex_str) + (get_soname_regex_str): Define new member functions. + (suppression_base::set_file_name_regex_str) + (get_file_name_regex_str, get_soname_regex_str) + (set_soname_regex_str): Define new accessors. + (type_suppression::suppresses_diff): Evaluate file_name_regexp and + soname_regexp. + (read_type_suppression): Fix the reading of the "label" property. + Read the file_name_regexp and soname_regexp properties. + (function_suppression::{suppresses_function, + suppresses_function_symbol): Take a diff_context_sptr parameter. + Evaluate file_name_regexp and soname_regexp properties. + (function_suppression::suppresses_diff): Adjust for the api change + of function_suppression::suppresses_function(). + (read_function_suppression): Read the file_name_regexp and + soname_regexp properties. + (variable_suppression::suppresses_variable): Take a + diff_context_sptr parameter and evaluate file_name_regexp and + soname_regexp properties. + (variable_suppression::suppresses_variable_symbol): Likewise. + (variable_suppression::suppresses_diff): Adjust for the api change + of variable_suppression::suppresses_variable(). + (read_variable_suppression): Read the file_name_regexp and + soname_regexp properties. + (function_is_suppressed, variable_is_suppressed): Take a + diff_context_sptr parameter. + (corpus_diff::priv::apply_suppressions_to_added_removed_fns_vars): + Adjust. + * doc/manuals/libabigail-concepts.rst: Document file_name_regexp + and soname_regexp in the manual. + * tests/data/test-diff-suppr/libtest24-soname-v{0,1}.so: New test + binary input files. + * tests/data/test-diff-suppr/test24-soname-report-{0,4}.txt: New + test input files. + * tests/data/test-diff-suppr/test24-soname-suppr-{0,4}.txt: + Likewise. + * tests/data/test-diff-suppr/test24-soname-v{0,1}.cc: Source code + of the binary test input files above. + * tests/data/Makefile.am: Add the new test material above to + source distribution. + * tests/test-diff-suppr.cc (in_out_spec): Add the new test inputs + to the set of tests this harness has to run over. + +2015-07-18 Dodji Seketeli + + Fix possible crash in suppression evaluation + * src/abg-comparison.cc (type_suppression::suppresses_diff): When + evaluating the reach_kind property, do not crash on diff nodes + that are pointer_diff or reference_diff to something else but a + type diff. + +2015-07-17 Dodji Seketeli + + Fix '--' being rendered as '-' in html manuals + * doc/manuals/abicompat.rst: Quote options as verbatim. + * doc/manuals/abidiff.rst: Likewise. + * doc/manuals/abidw.rst: Likewise. + * doc/manuals/abilint.rst: Likewise. + * doc/manuals/abipkgdiff.rst: Likewise. + +2015-07-17 Dodji Seketeli + + Fix the --verbose option + * tools/abipkgdiff.cc (compare): In the elf_file overload, do not + emit an error message when a binary could not be analyzed unless + --verbose was provided. + +2015-07-16 Dodji Seketeli + + Cleanup the output for added/removed binaries + * tools/abipkgdiff.cc (compare): In the overload for packages, + indent the content of the "Removed binaries" and "Added binaries" + paragraphs. + +2015-07-16 Dodji Seketeli + + Avoid redundant diff report messages by default. + * tools/abipkgdiff.cc (options::show_redundant_changes): New data + member. + (options::options): Initialize it. + (display_usage): Add a help string for the --redundant command + Line option. + (set_diff_context_from_opts): New static function. + (compare): Take the options variable. Set the diff context from + the options, especially if we should show redundant changes or + not. Use that diff context when comparing ABIs. + (parse_command_line): Parse the new --redundant command line + switch. + * doc/manuals/abipkgdiff.rst: Document the new --redundant option. + +2015-07-16 Dodji Seketeli + + Support comparing only shared libraries + * tools/abipkgdiff.cc (options::compare_dso_only): New data + member. + (options::options): Initialize it. + (display_usage): Display a little help string for it. + (create_maps_of_package_content): Take the option variable. Do + not compare non-dso files if the --dso-only option was provided. + (extract_package_and_map_its_content, prepare_packages, compare): + Take the option variable. + (parse_command_line): Parse the new --dso-only option. + * doc/manuals/abipkgdiff.rst: Add documentation for the new + --dso-only option. + +2015-07-15 Dodji Seketeli + + Comment functions and types of abipkgdiff + * src/abg-dwarf-reader.cc (get_soname_of_elf_file): Better wording + of the apidoc of this function. + * tools/abipkgdiff.cc (verbose, elf_file_paths): Add apidoc for + these global variables. + (struct options, ): Add apidoc for these types. + (options::{erase_extraction_directory, + erase_extraction_directories}, display_usage, extract_rpm) + (erase_created_temporary_directories, extract_package) + (file_tree_walker_callback_fn, compare) + (create_maps_of_package_content) + (extract_package_and_map_its_content, prepare_packages, compare) + (parse_command_line): Add apidoc for these functions. + +2015-07-16 Sinny Kumari + + Add regression tests for abipkgdiff tool + * tests/Makefile.am: Build new runtestdiffpkg regression test + * tests/data/Makefile.am: Add new test files to source + * tests/data/test-diff-pkg/dbus-glib-0.104-3.fc23.x86_64.rpm: + Test data for abipkgdiff tool + * tests/data/test-diff-pkg/dbus-glib-0.80-3.fc12.x86_64.rpm: Likewise + * tests/data/test-diff-pkg/dbus-glib-debuginfo-0.104-3.fc23.x86_64.rpm: + Likewise + * tests/data/test-diff-pkg/dbus-glib-debuginfo-0.80-3.fc12.x86_64.rpm: + Likewise + * tests/data/test-diff-pkg/test-rpm-report-0.txt: Expected test output + * 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-diff-pkg/test-rpm-report-4.txt: Likewise + * tests/test-diff-pkg.cc: New file + +2015-07-15 Dodji Seketeli + + Add a manual for abipkgidiff + * doc/manuals/abipkgdiff.rst: New manual file. + * doc/manuals/libabigail-tools.rst: Refer to the manual for + abipkgdiff. + * doc/manuals/Makefile.am: Add the new manual file to source + distribution. + * doc/manuals/conf.py: Add the manual for abipkgdiff to section 1. + +2015-07-15 Dodji Seketeli + + Comment functions and types of abipkgdiff + * src/abg-dwarf-reader.cc (get_soname_of_elf_file): Better wording + of the apidoc of this function. + * tools/abipkgdiff.cc (verbose, elf_file_paths): Add apidoc for + these global variables. + (struct options, ): Add apidoc for these types. + (options::{erase_extraction_directory, + erase_extraction_directories}, display_usage, extract_rpm) + (erase_created_temporary_directories, extract_package) + (file_tree_walker_callback_fn, compare) + (create_maps_of_package_content) + (extract_package_and_map_its_content, prepare_packages, compare) + (parse_command_line): Add apidoc for these functions. + +2015-07-15 Dodji Seketeli + + Various style fixes + * abipkgdiff.cc (get_soname_of_elf_file): Fix spacing. + * tools/abipkgdiff.cc (elf_file_paths): Make this global variable + static. + (extract_rpm): Rename parameter pkg_path name into package_path. + +2015-07-15 Dodji Seketeli + + Remove the last direct fiddling with ELF from abipkgdiff.cc + * abg-dwarf-reader.h (enum elf_type): Move this declaration here + from abipkgdiff.cc to here. + (get_type_of_elf_file): Declare this new function. + (get_soname_from_elf): Change this to take a path to the elf file + rather than a Elf* handler. So now to use this, the user doesn't + have to get her hand dirty with elfutils. + * src/abg-dwarf-reader.cc (get_soname_from_elf): Change this to + take a path to the elf file rather than a Elf* handler. + (elf_file_type): Move this static function here, from + abipkgdiff.cc. + (get_type_of_elf_file): New function. This has been factorized + out of create_maps_of_package_content() in abipkgdiff.cc. + * tools/abipkgdiff.cc (class elf_file): Changed struct elf_file + into this. Make the default constructor private. + (elf_file::elf_file): Change the constructor to just take the path + to the elf_file. The base name, soname and elf file type are now + computed from the path file, in the constructor. This makes + instantiation much much easier from the point of view of the user + of the type. + (struct abi_diff): Renamed struct abi_changes into this. + (abi_diff::has_changes): Define new member function. + (abi_diffs): Remove this global variable. + (package::package): Remove the elf file type from the set of + parameters of this constructor. Rather, compute that elf file + type from the path to the elf file, in the constructor. Again, + this eases the use of the type. + (elf_file_type): Remove this from here, as it got moved to + abg-dwarf-reader.cc. + (compare): In the elf_file overload, return true if the comparison + yields ABI changes. + (create_maps_of_package_content): Do not fiddle with elfutils + stuff here. Rather, just instantiate elf_file and the analyzing + of the file magically happens. + (compare): Make the package overload take an abi_diff as output + parameter, rather than populating a global variable in return. + (compare): Add an other overload for package that doesn't take the + abi_diff as output parameter and write it in terms of the previous + one. + (main): Adjust as the instantiation of package is now simpler. + +2015-07-08 Dodji Seketeli + + Add a --verbose option to abipkgdiff + * tools/abipkgdiff.cc (verbose): Add a new global variable. + (package::erase_extraction_directory, extract_rpm, compare) + (create_maps_of_package_content): Emit verbose information. + (parse_command_line): Parse the --verbose option. + +2015-07-08 Dodji Seketeli + + Use the library to implement ABI comparison in abipkgdiff + * tools/abipkgdiff.cc (compare): In the overload for elf_file, use + abigail::comparison::compute_diff() to compare the ABI of two + corpora. The corpora themselves is read using + abigail::dwarf_reader::read_corpus_from_elf(). This cleans up the + output of the tool because nothing is emitted to standard output + if the two ABI corpora compares equal. + +2015-07-08 Dodji Seketeli + + Fix several string passing issues in abipkgdiff.cc + * tools/abipkgdiff.cc (elf_file::elf_file): Pass the strings by + reference. Also, change the order of the parameters; all the + strings are passed first, then the elf_type is passed last. + (package::package): Likewise, pass the strings by reference, not + by value. + (create_maps_of_package_content): Adjust for the change in + parameters order of elf_file::elf_file. + +2015-07-08 Dodji Seketeli + + Only try to compare DSOs or executable binaries in abipkgdiff + * tools/abipkgdiff.cc (compare): In the overload for packages, + only compare binaries that are DSO or executable. + +2015-07-08 Dodji Seketeli + + Avoid flushing the output stream in abipkgdiff.cc + * tools/abipkgdiff.cc (extract_package) + (create_maps_of_package_content, compare, main): Avoid flushing + the output stream arbitrarily. + +2015-07-08 Sinny Kumari + + Move get_soname() function to abg-dwarf-reader.h/cc + * include/abg-dwarf-reader.h (get_soname_from_elf): Declare + new function + * src/abg-dwarf-reader.cc (get_soname_from_elf): Define new + function + * tools/abipkgdiff.cc (get_soname): Remove function + (pkg_diff): Call get_soname_from_elf() instead of get_soname() + +2015-07-07 Dodji Seketeli + + Important organizational changes in abipkgdiff.cc + * Avoid using shortened names when the line is not too long. + * Use shared_ptr when possible. + * When a function parameter is not meant to be nil, do not pass it + as a pointer; rather, pass it as a reference. + * Avoid doing things that can "fail" in a destructor; e.g, spawning + a process. Also, it's not common practise to cleanup a resource in a + type destructor, when that resource has not been created in one of the + member functions of the type. It eases maintenance when resource + creation and cleanup is performed at the same logical level. + * tools/abipkgdiff.cc (option::package{1,2}): Rename + option::pkg{1,2} into this, to increase legibility. + (option::debug_package{1,2}): Likewise, rename + option::debug_pkg{1,2} into this. + (elf_file::~elf_file): Do not "delete this" in a destructor. This + leads to double free. It's when someone invokes the "delete" + operator on a pointer to the object that the destructor of the + object is executed automatically; so if in the destructor the + delete operator is called again, bad things are going to happen. + As the destructor is now empty, remove it altogether. + (elf_file_sptr): New typedef for shared_ptr. + (package::path): Rename package::pkg_path into this, for better + legibility. + (package::extracted_package_dir_path): Rename + package::extracted_pkg_dir_path into this. + (package::type): Rename package::pkg_type into this. + (package::is_debug_info): Rename package::is_debuginfo_pkg into + this. + (package::path_elf_file_sptr_map): Rename + package::dir_elf_files_map into this because this is a map of + path -> elf_file_sptr. Also, now the value of the map element is + a elf_file_sptr, no more an elf_file*. + (package::debug_info_package): Rename package::debuginfo_pkg into + this. + (package::package): Adjust for the changes above. + (package::{erase_extraction_directory, + erase_extraction_directories}): New member functions. + (elf_file_paths): Renamed dir_elf_files_path into this. + (erase_created_temporary_directories) + (create_maps_of_package_content) + (extract_package_and_map_its_content, prepare_packages): New + static functions. + (get_soname, elf_file_type, extract_rpm): Make this static. + (extract_package): Take a const package& rather than a + package_sptr to express that the function really expects a non-nil + object by reference (not by copy) and that the object won't be + modified. Using a reference removes the possibility that the + pointer could be nil, causing crashes in the code where + parameter->something was used. Now only parameter.something can + be used, so no crash possible there. This is more solid code. + (file_tree_walker_callback_fn): Rename callback() into this. It + makes the code more legible and kind of 'self-documented'. At + least you get the hint that this is a callback function for some + file tree walking (ftw) function. Adjust for the relevant names + renaming above. + (compare): Rename compute_abidiff into this; again, this increases + legibility; at least at the point of use of this function. Rename + compare_package() into a an overload of compare() as well. + compare_package() used to take a vector of packages. It was hard + to guess by reading the signature of the function, which element + of the vector is expected to be the first vector of the + comparison, which one is to be the second, etc. Now, this + function takes two packages, named first_package and + second_package. That is more "typed"; that is, the signature is + more meaningful. Greater legibility, hopefully. And in the body + of the function, the debug information packages are now accessed + using the package::debug_info_package data member. Again, this is + less surprising, I believe. Also, explicitly erase the temporary + files that were created during this comparison. All this + simplifies the logic of this function, hopefully. + (parse_command_line): Make this static. Add new --d1 and --d2 + command line switches that are shortcuts of --debug-info-pkg1 and + --debug-info-pkg2. Adjust this function for the relevant name + changes above. Make lines be shorter than 80 characters. + (main): Do not create any vector of parameters anymore as the + compare_packages() function don't take any vector of parameter + anymore. Just instantiate first_package and second_package now. + Adjust for the relevant name changes above. This hopefully + simplifies the logic of this function. + +2015-07-06 Dodji Seketeli + + Wording fixes in abipkgdiff.cc + * tools/abipkgdiff.cc (extract_package): Renamed extract_pkg into + this because shortening 'package' into 'pkg' provides no + legibility improvement. + (compare_packages): Renamed pkg_diff() into this, so that the name + of the function starts with a verb, and the shortened 'pkg' word + is renamed back to the 'package' word. This way, the code almost + reads like normal English sentences with verbs and complement, + thus enhancing legibility and easing latter maintenance. + (main): Adjust for the changes above. + +2015-07-06 Dodji Seketeli + + Re-indent tools/abipkgdiff.cc + * tools/abipkgdiff.cc: Re-indent the file properly and fix some + white spacing here and there. + +2015-07-06 Dodji Seketeli + + Some slight typo and wording fixes in abipkgdiff + * tools/abipkgdiff.cc (display_usage): Fixed the typo in + 'bi-pacakge.' Also, refer to 'package', not to 'bi-package' that + is surprising to the user at first. + (compute_abidiff): Shorten the size of the introductory line. + +2015-07-03 Dodji Seketeli + + Remove names of unused variables in callback() + * tools/abipkgdiff.cc (callback): Remove the name of parameters st + and flag. + +2015-07-03 Dodji Seketeli + + Remove useless const from the declaration of extract_rpm() + * tools/abipkgdiff.cc (extract_rpm): Remove useless const qualifier. + +2015-07-03 Dodji Seketeli + + End all branches of get_soname() finish with a return statement + * tools/abipkgdiff.cc (get_soname): Have just one return statement + at the end of this function. + +2015-07-03 Dodji Seketeli + + Fix abipkgdiff compilation issues + * tools/abipkgdiff.cc (elf_file::elf_file): Initialize data member + in the same order as they were declared. + (package::package): Likewise. + +2015-06-19 Sinny Kumari + + Exclude processing symlink, display removed/added binaries between two packages + * tools/abipkgdiff.cc (abi_changes): Declare new struct + (callback): Exclude symbloic link file for durther processing + (compute_abidiff): Consider SONAME if exists as key in map instead + of binary name, else binary as key. Also, print if removed/added + binaries exist between packages + +2015-06-09 Sinny Kumari + + Stdout ABI changes if same binary found in both package + * tools/abipkgdiff.cc (compute_abidiff): New function + tools/abipkgdiff.cc (pkg_diff): Iterate through list of binaries + in both package directory and call compute_diff function if + same binary found in both file. + tools/abipkgdiff.cc (main): Also consider debug-info directories + avilable in debu-info packages. + +2015-06-02 Sinny Kumari + + Save ELF files, their type and SONAME if exist for extracted packages + * tools/abipkgdiff.cc (elf_type): Declare new enum + (elf_file): Declare new struct + (package): Add member variable dir_elf_files_map + (get_soname): Define new function + (elf_file_type): Define new function + (extract_rpm): Iterate over extracted directory files + and filter ELF binary files along with their information + like name, soname, elf_type and save in dir_elf_files_map + +2015-05-26 Sinny Kumari + + Extract packages(RPMs) into temporary directories for further processing + * tools/abipkgdiff.cc (struct package): Declare new struct + (package_sptr): Declare shared_ptr for struct package + (extract_rpm): Define new fuction to extract rpm package + (extract_pkg): Define new function to extract pacakge + (pkg_diff): Define new function to get ABI diff between + two packages + (main): Create new object of type pacakge for each binary + and debuginfo pacakge passed in commandline options + +2015-05-21 Sinny Kumari + + Guess RPM file type + * include/abg-tools-utils.h (file_type): Added member + FILE_TYPE_RPM and FILE_TYPE_SRPM + (operator<<): New function declaration. + * src/abg-tools-utils.cc (file_type): Detect RPM and + SRPM file type + (operator<<): New function definition + * tools/abidiff.cc (main): Check for RPM and SRPM + file type as well. + * tools/abilint.cci (main): Check for RPM and SRPM file + type as well. + * tools/abipkgdiff.cc (main): Check whether input files + to abipkgdiff are valid RPM files or not. + +2015-05-19 Sinny Kumari + + Initial skeleton of abipkgdiff tool + * tools/Makefile.am: Include abipkgdiff.cc in compilation and + generate abipkgdiff binary. + * tools/abipkgdiff.cc: New file + +2015-07-16 Dodji Seketeli + + Support reading binaries that do not have a symbol table + * src/abg-dwarf-reader.cc + (read_context::find_symbol_table_section): Allow returning a nil + pointer to symbol table. + (read_context::lookup_elf_symbol_from_index): Return an empty elf + symbol if we got a nil pointer to symbol table. + (read_context::load_symbol_maps): If no symbol table is found then + consider that the symbol maps loading failed. + +2015-07-16 Dodji Seketeli + + Remove extra vertical spaces from diff report + * src/abg-comparison.cc (class_diff::report): Do not emit new line + unless the diff is to be reported. + * tests/data/test-diff-filter/test25-cyclic-type-report-0.txt: Adjust. + * tests/data/test-diff-filter/test26-qualified-redundant-node-report-0.txt: Adjust. + * tests/data/test-diff-filter/test27-redundant-and-filtered-children-nodes-report-1.txt: + : Adjust. + +2015-07-09 Dodji Seketeli + + Allow null types in type comparison again + * src/abg-comparison.cc (compute_diff): In the overload of + type_base_sptr accept nil types. + +2015-07-08 Dodji Seketeli + + Handle the life time of the map of canonical types + * include/abg-ir.h (type_base::canonical_types_map_type): Move + this typedef into abg-ir.cc and out of the type_base namespace. + (type_base::get_canonical_types_map): Likewise. + * src/abg-ir.cc (canonical_types_map_type): New typedef that got + moved here from type_base::canonical_types_map_type. + (get_canonical_types_map): Likewise got moved here from + type_base::get_canonical_types_map. Made static in the process. + (class usage_watchdog): New type. + (usage_watchdog_sptr, usage_watchdog_wptr): New typedefs. + (get_usage_watchdog, get_usage_watchdog_wptr, ref_usage_watchdog) + (maybe_cleanup_type_system_data): New static functions. + (translation_unit::priv::usage_watchdog_): Add new data member. + (translation_unit::priv::priv): Get a reference on the usage + watchdog. + (translation_unit::priv::~priv): If the usage watchdog says that + the type system is not used, then cleanup the global data + logically owned by the type system. + * include/abg-dwarf-reader.h (read_corpus_from_elf): Make this + return a corpus and set the status by reference using a parameter. + * src/abg-dwarf-reader.cc (read_corpus_from_elf): Implement the + above. + * include/abg-reader.h (read_translation_unit_from_file) + (read_translation_unit_from_buffer) + (read_translation_unit_from_istream): Remove the overloads that do + not return a translation_unit_sptr and that pass it as a + parameter. Only keep the overloads that return a + translation_unit_sptr, forcing users of the API to own a proper + reference on the resulting translation_unit pointer. That is + important to handle the life time of the global data of the type + system that need to be cleared when the last translation unit is + de-allocated. + * src/abg-reader.cc (read_translation_unit_from_input): Make this + return a translation_unit_sptr. + (read_translation_unit_from_file) + (read_translation_unit_from_buffer) + (read_translation_unit_from_istream): Remove the overloads that do + not return a translation_unit_sptr and that pass it as a + parameter. Only keep the overloads that return a + translation_unit_sptr. + (read_to_translation_unit): Make this return a + translation_unit_sptr. + * tests/print-diff-tree.cc (main): Adjust. + * 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. + +2015-07-08 Dodji Seketeli + + Add --d{1,2} shortcut options for --debug-info-dir{1,2} in abidiff + * tools/abidiff.cc (display_usage): Add the --d{1,2} to the help + strings. + (parse_command_line): Parse the new --d1 and --d2 options. + +2015-07-08 Dodji Seketeli + + Factorize incompatible and subtype changes detection + * include/abg-comparison.h (corpus_diff::{has_incompatible_changes, + has_net_subtype_changes}): Declare new member functions. + * src/abg-comparison.cc (corpus_diff::{has_incompatible_changes, + has_net_subtype_changes}): Define them. + * abidiff.cc (main): Use the new member functions above. + +2015-07-09 Dodji Seketeli + + Adjust some tests for output changes + * tests/data/test-abidiff/test-struct1-report.txt: Adjust. + * 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-filter/test2-report.txt: Likewise. + * tests/data/test-diff-filter/test26-qualified-redundant-node-report-0.txt: Likewise. + * 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. + +2015-07-06 Dodji Seketeli + + Fix missing newlines in diff report + * src/abg-comparison.cc (class_diff::report): The overload of + represent() for instances of var_decl does not emit new lines. So + the caller must ensure a new line is emitted. + +2015-07-02 Dodji Seketeli + + Support filtering out just one alias of a function + * include/abg-comparison.h (function_suppression::{get, + set}_allow_other_aliases): Declare new member functions. + * src/abg-comparison.cc + (function_suppression::priv::allow_other_aliases_): New data + member. + (function_suppression::priv::priv): Initialize it to 'true'. + (function_suppression::{get, set}_allow_other_aliases): Define new + member functions. + (read_function_suppression): Parse the new "allow_other_aliases" + property. + (function_suppression::suppresses_function): Update to evaluate + the new 'allow_other_aliases' property when there is a property to + match against some a symbol name of the function. + (corpus_diff::report): Fix the printing of function aliases when + printing sub-type changes to properly emit the plural of the word + 'symbol' when the function has several aliases. + * include/abg-ir.h (elf_symbol::get_number_of_aliases): Declare + new member function. + * src/abg-ir.cc (elf_symbol::get_number_of_aliases): Define new + member function. + * doc/manuals/libabigail-concepts.rst: Update manual. + * tests/data/test-diff-dwarf/test5-report.txt: Adjust. + * tests/data/test-diff-suppr/libtest23-alias-filter-v0.so: New + test input. + * tests/data/test-diff-suppr/libtest23-alias-filter-v1.so: Likewise. + * tests/data/test-diff-suppr/test23-alias-filter-0.suppr: Likewise. + * tests/data/test-diff-suppr/test23-alias-filter-1.suppr: Likewise. + * tests/data/test-diff-suppr/test23-alias-filter-2.suppr: Likewise. + * tests/data/test-diff-suppr/test23-alias-filter-3.suppr: 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-1.txt: Likewise. + * tests/data/test-diff-suppr/test23-alias-filter-report-2.txt: Likewise. + * tests/data/test-diff-suppr/test23-alias-filter-report-3.txt: Likewise. + * tests/data/test-diff-suppr/test23-alias-filter-report-4.txt: Likewise. + * tests/data/test-diff-suppr/test23-alias-filter-report-5.txt: Likewise. + * tests/data/test-diff-suppr/test23-alias-filter-v0.c: Likewise. + * tests/data/test-diff-suppr/test23-alias-filter-v1.c: Likewise. + * tests/data/test-diff-suppr/test23-alias-filter-version-script: Likewise. + * tests/data/Makefile.am: Add the new test stuff to source + distribution. + * tests/test-diff-suppr.cc (in_out_spec): Add the tests inputs + above to the list of input to run over. + +2015-07-01 Dodji Seketeli + + Complete apidoc + * src/abg-ir.cc (elf_symbol::get_aliases_id_string): Finish the + incomplete apidoc for this member function. + +2015-07-01 Dodji Seketeli + + Show aliases of functions with changed sub-types + * include/abg-ir.h (elf_symbol::get_aliases_id_string): Declare + new overload. + * src/abg-ir.cc (elf_symbol::get_aliases_id_string): Define new + overload. + * src/abg-comparison.cc (corpus_diff::report): For functions with + sub-type changes report their aliases. Do not do this if the + function is a constructor or destructor because these almost + always have aliases, at least with GCC and the developer most + certainly has not done anything special for that; she would thus + be uselessly surprised by that remote implementation detail. + * tests/data/test-diff-dwarf/test5-report.txt: Adjust test. + +2015-06-25 Dodji Seketeli + + Update ChangeLog file + * ChangeLog: Update automatically using 'make update-changelog'. + 2015-06-23 Dodji Seketeli Misc typo fixes