Commit Graph

1720 Commits

Author SHA1 Message Date
Dodji Seketeli
9485822670 Properly add the new rust tests to EXTRA_DIST
* tests/data/Makefile.am: Add the new rust tests to
           EXTRA_DIST.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2019-01-24 13:48:26 +01:00
Dodji Seketeli
4d40cc9986 Conditionalize the Rust support regression test
* tests/test-diff-dwarf.cc: Run the rust support regression test
	only if we support Rust on the platform.
	* tests/test-utils.h: Include config.h.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2019-01-24 11:06:57 +01:00
Dodji Seketeli
6e9b2ae423 Fix a typo in the recent Rust support and update regression tests
* configure.ac: Fix the typo HAS_LANG_Rust into HAS_DW_LANG_Rust.
	* tests/data/test-diff-dwarf/test46-readme.txt: Add new file to
	the test suite.
	* tests/data/test-diff-dwarf/test46-rust-libone.so: Likewise.
	* tests/data/test-diff-dwarf/test46-rust-libtwo.so: Likewise.
	* tests/data/test-diff-dwarf/test46-rust-report-0.txt: Likewise.
	* tests/test-diff-dwarf.cc (in_out_specs): Update the tests array
	to compare the two new binaries included above.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2019-01-24 10:35:05 +01:00
Dodji Seketeli
ffec27fb38 Overhaul detection the DW_LANG_* enumerators from dwarf.h
elfutils regularly adds new members to the anonymous DWARF language
encodings enum which contains the DW_LANG_* enumerators, from the
dwarf.h header file.

If we want libabigail to keep compiling with older versions of
elfutils, we need to detect the absence of a given DW_LANG_*
enumerator and avoid using it in that case.

Until now, we were doing #ifdef DW_LANG_* for that purpose.  But then
the DW_LANG_* are *enumerators*, not preprocessor macros.  So that
preprocessor macro.

This patch detects the presence of each of the "newer" DW_LANG_*
enumerator using autoconf.  And for each DW_LANG_xxx enumerator that
is present, autoconf defines the HAVE_DW_LANG_xxx_enumerator macro.
Libabigail source code can thus do #ifdef HAVE_DW_LANG_xxx_enumerator
to guard the use of DW_LANG_xxx.

Tested with the Rust binaries from
https://gitlab.gnome.org/federico/abi-rust.

	* configure.ac: Detect the presence of DW_LANG_{UPC, D, Python,
	Go, C11, C_plus_plus_03, C_plus_plus_11, C_plus_plus_14,
	Mips_Assembler, Rust} and define the corresponding
	HAVE_DW_LANG_*_enumerator macro accordingly.
	* include/abg-ir.h (LANG_C_plus_plus_03): Define this new
	enumerator in the translation_unit::language enum.
	* src/abg-dwarf-reader.cc (dwarf_language_to_tu_language): Use the
	new HAVE_DW_LANG_*_enumerator macros.
	(get_default_array_lower_bound): Support the
	translation_unit::LANG_C_plus_plus_03 enumerator.
	* src/abg-ir.cc (is_cplus_plus_language): Support the
	translation_unit::LANG_C_plus_plus_03 enumerator.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2019-01-18 11:39:37 +01:00
Dodji Seketeli
932579b480 Fix a thinko
* src/abg-dwarf-reader.cc (dwarf_language_to_tu_language): Fix a
	thinko in the detection of the support of the DW_LANG_Rust enumerator.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2019-01-18 10:40:31 +01:00
Mark Wielaard
2366dca947 Conditionalize the use of DW_LANG_C_plus_plus_03 and DW_LANG_Rust
Older elfutils (pre-0.170) don't define these constants in dwarf.h so
don't use them in that case.

	* include/abg-ir.h (LANG_C_plus_plus_03): Add this new language
	enum to "enum translation_unit::language".
	* src/abg-dwarf-reader.cc (dwarf_language_to_tu_language): Do not
	use DW_LANG_Rust or DW_LANG_C_plus_plus_03 if these are not
	defined.
	(get_default_array_lower_bound): Handle the new
	translation_unit::LANG_C_plus_plus_03 enumerator.

Signed-off-by: Mark Wielaard <mark@klomp.org>
Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2019-01-17 14:26:58 +01:00
Dodji Seketeli
7caaaa9f3d Support some new DWARF language encoding for C and C++
* src/abg-dwarf-reader.cc (dwarf_language_to_tu_language): Support
	new DW_LANG_{C11, C_plus_plus_03, C_plus_plus_11, C_plus_plus_14}
	enumerators.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2019-01-17 10:06:02 +01:00
Dodji Seketeli
70f7c63a76 Add (very) basic support for Rust
I tested this on the binaries generated from this project:
https://gitlab.gnome.org/federico/abi-rust and I got this:

    $ tools/abidiff libone.so libtwo.so
    Functions changes summary: 0 Removed, 1 Changed, 0 Added function
    Variables changes summary: 0 Removed, 0 Changed, 0 Added variable

    1 function with some indirect sub-type change:

      [C]'function one::Foo one::foo(u32)' at lib.rs:8:1 has some indirect sub-type changes:
	'function one::Foo one::foo(u32) {foo}' now becomes 'function two::Foo two::foo(u32, u32) {foo}'
	return type changed:
	  type name changed from 'one::Foo' to 'two::Foo'
	  type size changed from 32 to 64 (in bits)
	  1 data member insertion:
	    'u32 two::Foo::b', at offset 32 (in bits)
	  no data member change (1 filtered);
	parameter 2 of type 'u32' was added

	* include/abg-ir.h (LANG_Rust): Add this new enumerator to the
	"enum language" enum.
	* src/abg-dwarf-reader.cc (dwarf_language_to_tu_language): Handle
	the Rust language.
	(get_default_array_lower_bound): Likewise.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2019-01-17 09:58:36 +01:00
Dodji Seketeli
717fd0a460 Separate public types of first binary from those of the second
In abidiff when the user uses --headers-dir{1,2}, she implicitly
indicates the public types of the first and the second binary.  That
means that any type that is defined in a file that is not located
under the directory tree designated by --headers-dir{1,2} is
considered private and any change involving those private types will
be suppressed.

In practice, what happens is that libabigail constructs a suppression
specification which suppress all types that are defined in files that
are not under the directories located by --headers-dir{1,2}.

abidiff has a problem, though.  It uses the same private type
suppressions (derived from --headers-dir1 and --headers-dir2) when
looking at the first binary *and* the second binary.  It should rather
only use the private type suppression specifications derived from
--headers-dir1 when looking at the first binary, and use the private
type suppression specifications derived from --headers-dir2 when
looking at the second binary.

This problem leads to some false positives like the one reported at
https://gitlab.gnome.org/GNOME/pango/issues/343#note_397761.

This patch fixes this issue by using the private type suppression
specifications derived from --headers-dir1 only when looking at the
first binary, and using the private type suppression specifications
derived from --headers-dir2 only when looking at the second binary.

	* include/abg-dwarf-reader.h (read_context_get_path): Declare new
	function.
	* include/abg-reader.h (read_context_get_path): Likewise.
	* src/abg-dwarf-reader.cc (read_context_get_path): Define new function.
	* src/abg-reader.cc (read_context_get_path): Likewise.
	* tools/abidiff.cc (set_suppressions): Set the suppression
	specification derived from the --headers-dir1 option only for the first
	binary, and similarly, from the --headers-dir2 option only for the
	second binary.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2019-01-16 12:27:45 +01:00
Dodji Seketeli
ad8732316a Bug 23044 - Assertions with side effects
There are lots of spots in libabigail's source code where the argument
of the assert() call does have side effects.  This is a problem
because when the code is compiled with the NDEBUG macro defined, the
assert call does nothing, so the side effects of its argument are then
suppressed, changing the behaviour of the program.

To handle this issue, this patch introduces the ABG_ASSERT macro which
is a wrapper around the assert call that enable the use of side
effects in its argument.  The patch now uses that ABG_ASSERT macro
instead of using the assert call directly.

The patch also makes it so that the configure option accepts the
--disable-assert option so that the user can build libabigail with the
NDEBUG macro defined.

Tested by running the testsuite with and without the --disable-assert
option to configure.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2019-01-09 18:36:56 +01:00
Dodji Seketeli
047342467c Update copyright for 2019
* include/abg-comp-filter.h: Update copyright for 2019
	* include/abg-comparison.h: Update copyright for 2019
	* include/abg-config.h: Update copyright for 2019
	* include/abg-corpus.h: Update copyright for 2019
	* include/abg-diff-utils.h: Update copyright for 2019
	* include/abg-dwarf-reader.h: Update copyright for 2019
	* include/abg-fwd.h: Update copyright for 2019
	* include/abg-hash.h: Update copyright for 2019
	* include/abg-ini.h: Update copyright for 2019
	* include/abg-interned-str.h: Update copyright for 2019
	* include/abg-ir.h: Update copyright for 2019
	* include/abg-libxml-utils.h: Update copyright for 2019
	* include/abg-libzip-utils.h: Update copyright for 2019
	* include/abg-reader.h: Update copyright for 2019
	* include/abg-reporter.h: Update copyright for 2019
	* include/abg-sptr-utils.h: Update copyright for 2019
	* include/abg-suppression.h: Update copyright for 2019
	* include/abg-tools-utils.h: Update copyright for 2019
	* include/abg-traverse.h: Update copyright for 2019
	* include/abg-viz-common.h: Update copyright for 2019
	* include/abg-viz-dot.h: Update copyright for 2019
	* include/abg-viz-svg.h: Update copyright for 2019
	* include/abg-workers.h: Update copyright for 2019
	* include/abg-writer.h: Update copyright for 2019
	* src/abg-comp-filter.cc: Update copyright for 2019
	* src/abg-comparison-priv.h: Update copyright for 2019
	* src/abg-comparison.cc: Update copyright for 2019
	* src/abg-config.cc: Update copyright for 2019
	* src/abg-corpus-priv.h: Update copyright for 2019
	* src/abg-corpus.cc: Update copyright for 2019
	* src/abg-default-reporter.cc: Update copyright for 2019
	* src/abg-diff-utils.cc: Update copyright for 2019
	* src/abg-dwarf-reader.cc: Update copyright for 2019
	* src/abg-hash.cc: Update copyright for 2019
	* src/abg-ini.cc: Update copyright for 2019
	* src/abg-internal.h: Update copyright for 2019
	* src/abg-ir-priv.h: Update copyright for 2019
	* src/abg-ir.cc: Update copyright for 2019
	* src/abg-leaf-reporter.cc: Update copyright for 2019
	* src/abg-libxml-utils.cc: Update copyright for 2019
	* src/abg-libzip-utils.cc: Update copyright for 2019
	* src/abg-reader.cc: Update copyright for 2019
	* src/abg-reporter-priv.cc: Update copyright for 2019
	* src/abg-reporter-priv.h: Update copyright for 2019
	* src/abg-sptr-utils.cc: Update copyright for 2019
	* src/abg-suppression-priv.h: Update copyright for 2019
	* src/abg-suppression.cc: Update copyright for 2019
	* src/abg-tools-utils.cc: Update copyright for 2019
	* src/abg-traverse.cc: Update copyright for 2019
	* src/abg-viz-common.cc: Update copyright for 2019
	* src/abg-viz-dot.cc: Update copyright for 2019
	* src/abg-viz-svg.cc: Update copyright for 2019
	* src/abg-workers.cc: Update copyright for 2019
	* src/abg-writer.cc: Update copyright for 2019
	* tests/print-diff-tree.cc: Update copyright for 2019
	* tests/test-abicompat.cc: Update copyright for 2019
	* tests/test-abidiff-exit.cc: Update copyright for 2019
	* tests/test-abidiff.cc: Update copyright for 2019
	* tests/test-alt-dwarf-file.cc: Update copyright for 2019
	* tests/test-core-diff.cc: Update copyright for 2019
	* tests/test-diff-dwarf-abixml.cc: Update copyright for 2019
	* tests/test-diff-dwarf.cc: Update copyright for 2019
	* tests/test-diff-filter.cc: Update copyright for 2019
	* tests/test-diff-pkg.cc: Update copyright for 2019
	* tests/test-diff-suppr.cc: Update copyright for 2019
	* tests/test-diff2.cc: Update copyright for 2019
	* tests/test-ini.cc: Update copyright for 2019
	* tests/test-ir-walker.cc: Update copyright for 2019
	* tests/test-lookup-syms.cc: Update copyright for 2019
	* tests/test-read-dwarf.cc: Update copyright for 2019
	* tests/test-read-write.cc: Update copyright for 2019
	* tests/test-types-stability.cc: Update copyright for 2019
	* tests/test-utils.cc: Update copyright for 2019
	* tests/test-utils.h: Update copyright for 2019
	* tests/test-write-read-archive.cc: Update copyright for 2019
	* tools/abiar.cc: Update copyright for 2019
	* tools/abicompat.cc: Update copyright for 2019
	* tools/abidiff.cc: Update copyright for 2019
	* tools/abidw.cc: Update copyright for 2019
	* tools/abilint.cc: Update copyright for 2019
	* tools/abipkgdiff.cc: Update copyright for 2019
	* tools/abisym.cc: Update copyright for 2019
	* tools/binilint.cc: Update copyright for 2019
	* tools/kmidiff.cc: Update copyright for 2019
	* update-copyright.sh: Update new year to 2019

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2019-01-07 14:54:47 +01:00
Xiao Jia via libabigail
e993ccb64b Some documentation fixes
* COMPILING: Add the pkg-config dependency.
	* doc/manuals/kmidiff.rst: Replace the redundant --full-impact
	documentation with the proper --impacted-interfaces one.

Signed-off-by: Xiao Jia <xiaoj@google.com>
Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2018-12-07 11:21:50 +01:00
Dodji Seketeli
2c6ecfad6f Add basic support for Fortran binaries
Apparently, the only DWARF TAG that we needed to support to allow the
analysis of Fortran binaries is DW_TAG_string_type, at least for now.

The only place where we need to handle the DW_TAG_string_type is in
the DIE canonicalizer.  Basically, with this patch we now consider all
the DW_TAG_string_type DIEs as being equal.  This seems good enough for
ABIs purpose, unless proven otherwise.

Note that this fixes PR23492 and PR23905.

	* src/abg-dwarf-reader.cc (die_pretty_print_type): Support
	DW_TAG_string_type DIEs.  They all have the same representation
	for now.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2018-11-29 14:39:04 +01:00
Dodji Seketeli
8fee729a34 Some light style change in abidiff.cc
* tools/abidiff.cc (adjust_diff_context_for_kmidiff): Take a
	reference to diff_context rather than a pointer.
	(main): Adjust.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2018-11-08 18:15:28 +01:00
Dodji Seketeli
61cc36b014 Add a --fail-no-debug-info to abidiff
Add an option to make abidiff to fail if doesn't find debug info.
Without this option, abidiff keeps going and works with only ELF
information, as it can't get the debug info.

	* doc/manuals/abidiff.rst: Document the new --fail-no-debug-info
	option.
	* tools/abidiff.cc (options::fail_no_debug_info): Define new data
	member.
	(display_usage): Provide a help string for the new
	--fail-no-debug-info option.
	(parse_command_line): Parse the new option.
	(main): If --fail-no-debug-info and no debug info was found, or
	not alternate debuginfo file was found, bail out.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2018-11-08 09:04:53 +01:00
Dodji Seketeli
3c0701d59d Support having several debuginfo search dirs for a binary
There are use cases where the split debuginfo file of a given binary
is under a given root directory and that the split debuginfo file
itself depends on an alternate debuginfo file that is under another
unrelated root directory.

In that case, the dwarf reader must be able to look for the debuginfo
files under several unrelated root directories.  The tools abidiff and
abidw must thus support having several occurences of the option
--debug-info-dir1 (or --debug-info-dir2) meaning that the debuginfo
files for the binary must be looked for under several root
directories.

This is what this patch does.

	* doc/manuals/abidiff.rst: Adjust doc for the
	--debug-info-dir{1,2} that can now be provided several times.
	* include/abg-dwarf-reader.h ({create, reset}_read_context)
	(read_corpus_from_elf): Take a vector of debug info root dirs.
	* include/abg-tools-utils.h (trim_leading_string)
	(find_file_under_dir, make_path_absolute_to_be_freed)
	(convert_char_stars_to_char_star_stars): Declare new functions.
	* src/abg-dwarf-reader.cc (find_alt_debug_info_link): Renamed
	find_alt_debug_info_location into this.
	(find_alt_debug_info_path): Define new static function.
	(find_alt_debug_info): Take a vector of debug info root dirs.  Use
	the new find_alt_debug_info_path to look into the debug info root
	dirs for the alt debug info.
	(read_context::debug_info_root_paths_): Define new data member.
	(read_context::read_context): Take a vector of debug info root
	dirs and initialize the new read_context::debug_info_root_paths_.
	(read_context::{initialize, create_default_dwfl}): Take a vector
	of debug info root dirs and adjust.
	(read_context::{add_debug_info_root_paths,
	add_debug_info_root_path, find_alt_debug_info}): Define new member
	functions.
	(read_context::load_debug_info): Look into the debug info roots
	for split debug info files.
	(create_read_context, read_corpus_from_elf): Take a vector of
	debug info root dirs and adjust.
	(has_alt_debug_info): Adjust.
	* src/abg-tools-utils.cc (trim_leading_string)
	(make_path_absolute_to_be_freed, find_file_under_dir)
	(convert_char_stars_to_char_star_stars): Define new functions.
	(entry_of_file_with_name): Define new static function.
	(build_corpus_group_from_kernel_dist_under): Adjust.
	* tests/print-diff-tree.cc (main): Adjust.
	* tests/test-diff-dwarf.cc (main): Adjust.
	* tests/test-ir-walker.cc (main): Adjust.
	* tests/test-read-dwarf.cc (main): Adjust.
	* tools/abicompat.cc (main): Adjust.
	* tools/abidiff.cc (options::di_root_paths{1,2}): Changed
	di_root_path{1,2} into this, change their types into vectors of
	allocated char*.
	(options::prepared_di_root_paths{1,2}): Define new data members.
	(options::~options): Define new destructor.
	(parse_command_line): Adjust.
	(prepare_di_root_paths): Define new static function.
	(handle_error): Remove arguments input_file_name,
	debug_info_dir{1,2}.  Now just take an instance of options
	instead.  Adjust.
	(main): Adjust.
	* tools/abidw.cc (options::dir_root_paths): Renamed dir_root_path
	into this and make it be a vector of allocated char*.
	(options::prepared_di_root_paths): Define new data member.
	(options::~options): Free the allocated char* in
	options::dir_root_paths.
	(parse_command_line): Support several --debug-info-dir.
	(load_corpus_and_write_abixml): Adjust.
	(prepare_di_root_paths): Define static function.
	(main): Adjust.
	* tools/abilint.cc (main): Adjust.
	* tools/abipkgdiff.cc (compare): Adjust.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2018-11-08 09:03:32 +01:00
Dodji Seketeli
6b036291b8 Update website for 1.5
* doc/website/mainpage.txt: Update website for 1.5

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2018-10-26 16:54:51 +02:00
Dodji Seketeli
640f0356d4 Bump version number to 1.6
* configure.ac: Bump version number to 1.6

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2018-10-26 15:09:08 +02:00
Dodji Seketeli
95dc7de0fe Update ChangeLog for 1.5
* ChangeLog: Update automatically by calling make
	update-changelog.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2018-10-26 11:32:56 +02:00
Dodji Seketeli
de0e36e584 Update NEWS file for 1.5
* NEWS: Update for 1.5

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2018-10-26 11:32:56 +02:00
Dodji Seketeli
635cf36afa Bug rhbz1638554 - assertion failed in is_mostly_distinct_diff
* src/abg-comp-filter.cc (is_mostly_distinct_diff): Handle the
	case of the type diff of the function parameter diff being a
	distinct diff.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2018-10-18 15:52:12 +02:00
Dodji Seketeli
0851bcac04 Define UINT64_MAX when it's not defined
It looks like GCC 4.4.x does not define UINT64_MAX so define it for
those platforms.

	* src/abg-dwarf-reader.cc: Define UINT64_MAX when it's not defined.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2018-10-17 10:41:35 +02:00
Dodji Seketeli
18e4697e05 Better support array with unknown upper bound
It can happen that arrays are described in DWARF with an unknown upper
bound.  In those cases, if the array is the type of a global variable,
the ELF object corresponding to that global variable should have a
size.  It's that ELF object size that should be taken into account
when comparing versions of that global variable and its type.

This patch fixes issues in the detection and representation of array
subranges with unknown size so that we behave like presented above.

	* include/abg-comparison.h
	(BENIGN_INFINITE_ARRAY_CHANGE_CATEGORY): A new enumerator in the
	diff_category enum.
	(EVERYTHING_CATEGORY): Adjust.
	* src/abg-comparison.cc (get_default_harmless_categories_bitmap):
	Adjust.
	(operator<<(ostream& o, diff_category)): Likewise.
	* include/abg-ir.h (array_type_def::subrange_type::is_infinite):
	Declare new member function.
	* src/abg-ir.cc (array_type_def::subrange_type::priv::infinite_):
	New data member.
	(array_type_def::subrange_type::priv::priv): Initialize it.
	(array_type_def::subrange_type::get_length): Better support
	unknown sized subrange.
	(array_type_def::subrange_type::is_infinite): Define new member
	function.
	* src/abg-comp-filter.cc (has_benign_infinite_array_change):
	Define new static function.
	(categorize_harmless_diff_node): Use the new
	has_benign_infinite_array_change above.
	* src/abg-dwarf-reader.cc (build_subrange_type): Better recognize a
	subrange type with unknown upper bound.  Represent that with the
	new array_type_def::subrange_type::is_infinite member property.
	* src/abg-reader.cc (build_subrange_type): Likewise.
	* tests/data/test-abidiff/test-PR18166-libtirpc.so.abi: Adjust.
	* tests/data/test-annotate/libtest23.so.abi: Likewise.
	* tests/data/test-annotate/libtest24-drop-fns-2.so.abi: Likewise.
	* tests/data/test-annotate/libtest24-drop-fns.so.abi: Likewise.
	* tests/data/test-annotate/test14-pr18893.so.abi: Likewise.
	* tests/data/test-annotate/test19-pr19023-libtcmalloc_and_profiler.so.abi:
	Likewise.
	* tests/data/test-annotate/test7.so.abi: Likewise.
	* tests/data/test-read-dwarf/libtest23.so.abi: Likewise.
	* tests/data/test-read-dwarf/libtest24-drop-fns-2.so.abi: Likewise.
	* tests/data/test-read-dwarf/libtest24-drop-fns.so.abi: Likewise.
	* tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: Likewise.
	* tests/data/test-read-dwarf/test11-pr18828.so.abi: Likewise.
	* tests/data/test-read-dwarf/test14-pr18893.so.abi: Likewise.
	* tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi: Likewise.
	* tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: Likewise.
	* tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Likewise.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2018-10-16 18:00:22 +02:00
Dodji Seketeli
6372f804bf Add default suppression specification for the libvirt project
* default.abignore: Suppress changes on functions with symbol
	version LIBVIRT_PRIVATE in libvirt.so.* shared objects.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2018-10-11 10:59:54 +02:00
Dodji Seketeli
0fcc76c3a8 Add default suppression specification for the krb5 project
* default.abignore: Ignore changes about functions starting with
	krb5int_.*.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2018-10-11 10:53:45 +02:00
Dodji Seketeli
691d289816 Misc comment fix
* src/abg-suppression.cc (type_suppression::suppresses_diff): Fix
	comment.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2018-10-03 11:43:19 +02:00
Dodji Seketeli
caa100603e Bug 23708 - categorize void* to pointer change as harmless
Changing a void* pointer into another pointer of the same size is a
change that is harmless in terms of data layout.

This commit thus categorizes such a change as harmless.

	* include/abg-comparison.h (VOID_PTR_TO_PTR_CHANGE_CATEGORY): New
	enumerator in the diff_category enum.  Also, adjust the
	EVERYTHING_CATEGORY enumerator.
	* include/abg-fwd.h (is_void_pointer_type): Declare new function.
	* src/abg-comp-filter.cc (has_void_ptr_to_ptr_change): Define new
	static function and ...
	(categorize_harmless_diff_node): ... use it here.
	* src/abg-comparison.cc (get_default_harmless_categories_bitmap):
	Add the new abigail::comparison::VOID_PTR_TO_PTR_CHANGE_CATEGORY
	category in here.
	(operator<<(ostream& o, diff_category c)): Add support for the new
	VOID_PTR_TO_PTR_CHANGE_CATEGORY.
	* src/abg-ir.cc	(is_void_pointer_type): Define new function.
	* tests/data/Makefile.am: Add the new test material below to source distribution.
	* tests/data/test-diff-filter/test47-filter-void-ptr-change-report-0.txt:
	New test reference output.
	* tests/data/test-diff-filter/test47-filter-void-ptr-change-v{0,1}.c:
	Source code of the new binary test input below.
	* tests/data/test-diff-filter/test47-filter-void-ptr-change-v{0,1}.o:
	New binary test input.
	* tests/test-diff-filter.cc: Add the test input/output above to
	test harness.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2018-10-03 11:42:47 +02:00
Dodji Seketeli
a16e97596b Categorize CV qualifier changes on fn return types as harmless
This partially fixes PR23700.

A change in the CV qualifiers of a function return value type should
be categorized as harmless.  And this is what this patch does.

	* include/abg-comparison.h (FN_RETURN_TYPE_CV_CHANGE_CATEGORY):
	New enumerator for diff_category.
	(EVERYTHING_CATEGORY): Update.
	* src/abg-comp-filter.cc (type_diff_has_cv_qual_change_only):
	Factorize this function out of ...
	(has_fn_parm_type_cv_qual_change): ... this one.
	(has_fn_return_type_cv_qual_change): Define new static function.
	(categorize_harmless_diff_node): Use the new
	has_fn_return_type_cv_qual_change.
	* src/abg-comparison.cc (get_default_harmless_categories_bitmap):
	Adjust to add the new FN_RETURN_TYPE_CV_CHANGE_CATEGORY category.
	(operator<<(ostream& o, diff_category c)): Support the new
	FN_RETURN_TYPE_CV_CHANGE_CATEGORY.
	* tests/data/Makefile.am: Add the new test material below to
	source distribution.
	* tests/data/test-diff-filter/test46-fn-return-qual-change-report-0.txt:
	New reference output for the new input test.
	* tests/data/test-diff-filter/test46-fn-return-qual-change-v{0,1}.c:
	New source code for the new binary test input.
	* tests/data/test-diff-filter/test46-fn-return-qual-change-v{0,1}.o:
	New binary test input files.
	* tests/test-diff-filter.cc: Add the new test input above to test
	harness.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2018-10-02 14:02:22 +02:00
Dodji Seketeli
60daf958ae Fix propagation of private type suppression category
This is a partial fix of PR23700.

Conceptually, there are two kinds of type suppression specifications:

1/ a generic user-provided suppression specification that is meant to
suppress changes on types specified by the user

2/ a private type suppression specification that is automatically
generated from the path to public header files provided by the user.

Technically, one difference between 1 and 2 lays in the way we
propagate categories of changes matched by those suppression
specifications.

If a class type change of category SUPPRESSED_CATEGORY is referenced
in a typedef change, then the typedef change is also considered to be
of category SUPPRESSED_CATEGORY.  In other words, the
SUPPRESSED_CATEGORY category is propagated to the typedef change.
That means that if a change to a class type is suppressed, a (changed)
typedef to that class is considered to be suppressed too.

But then that is not true if the class type was changed because it's
private.  In that, a typedef to that class can be *public*, because
the said typedef is defined in a public header.  In that case the
typedef change should *NOT* be considered suppressed just because the
class type change was suppressed.

The problem we have here is that we don't make any difference between
1/ and 2/.  So we need to introduce different propagation rules for 1/
and 2/.

So this patch introduces a new PRIVATE_TYPE_CATEGORY category for
types suppression specification that are automatically generated for
private types.  That new category has its own propagation rule which
is basically "no propagation"; every type must be matched by the
private type suppression specification to be considered as private.

	* include/abg-comp-filter.h (has_harmful_name_change): Declare new
	function overloads.
	* include/abg-comparison.h (PRIVATE_TYPE_CATEGORY): New enumerator
	for diff_category;
	(EVERYTHING_CATEGORY): Adjust this enumerator in diff_category;
	(is_suppressed): Take an output parameter to say if the
	suppression is a private type suppression.
	* include/abg-suppression.h (is_private_type_suppr_spec): Take a
	const reference parameter and add an overload for a shared
	pointer.
	* src/abg-comp-filter.cc (has_harmful_name_change): Define new
	function.
	* src/abg-comparison-priv.h (diff::priv::is_filtered_out): Diffs
	of category PRIVATE_TYPE_CATEGORY are also considered filtered
	out.
	* src/abg-comparison.cc (diff::is_filtered_out): Adjust to account
	for canonical diffs of category PRIVATE_TYPE_CATEGORY.
	(diff::is_suppressed): Add an overload that takes a
	is_private_type output parameter.  Re-write the old overload in
	terms of the new one.
	(operator<<(ostream& o, diff_category c)): Handle
	PRIVATE_TYPE_CATEGORY.
	(category_propagation_visitor::visit_end):  Do not propagate
	PRIVATE_TYPE_CATEGORY here. Do not propagate
	HARMLESS_DECL_NAME_CHANGE_CATEGORY either, when the class does
	have a harmful decl name change.
	(suppression_categorization_visitor::visit_begin): Set the new
	PRIVATE_TYPE_CATEGORY category but do not propagate it.
	(suppression_categorization_visitor::visit_end): Add some
	comments.
	* src/abg-default-reporter.cc (default_reporter::report): Avoid
	reporting typedef underlying types that are in the
	PRIVATE_TYPE_CATEGORY category.
	* src/abg-suppression.cc (type_suppression::suppresses_diff): Do
	not peel typedefs if we are a private type suppression.
	(is_private_type_suppr_spec): Take a const reference.
	* tests/data/Makefile.am: Add the new test material below to
	source distribution.
	* tests/test-diff-suppr.cc: Use new test binary input.
	* tests/data/test-diff-filter/test7-report.txt: Adjust.
	* tests/data/test-diff-suppr/test39-opaque-type-report-0.txt: New
	test reference output.
	* tests/data/test-diff-suppr/test39-opaque-type-v{0,1}.c: Source
	code of new test binary input.
	* tests/data/test-diff-suppr/test39-opaque-type-v{0,1}.o: New test
	binary input.
	* tests/data/test-diff-suppr/test39-public-headers-dir/test39-header-v{0,1}.h:
	Source code of new test binary input.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2018-10-01 16:14:50 +02:00
Dodji Seketeli
342ce8d25c PR23641 - confusion when a type definition DIE is matched by a supprspec and its decl DIEs aren't
This is a followup of the patch with commit hash 90b4e76.

It turns out that in some cases, when we see a suppressed private
class definition, we haven't *previously* seen any declaration-only
instance of it.  So we cannot use any pre-existing declaration-only
instance as an opaque type for the private type that is suppressed.

In that case, this patch creates (and uses) a declaration-only
instance for the suppressed private type definition.

	* src/abg-dwarf-reader.cc (get_opaque_version_of_type): If no
	pre-existing opaque version was found, a new one is created and
	returned.  Take a needed "where_offset" parameter.
	(build_ir_node_from_die): Adjust the call to
	get_opaque_version_of_type.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2018-09-25 13:07:44 +02:00
Dodji Seketeli
90b4e7676c PR23641 - Type definition DIE matched by a supprspec but not its decl
Suppose we have two versions of a library which are almost identical.
Suppose the difference between the two binaries is a slight difference of
ordering in how the linker put together what the DWARF describes.

Then, while processing the debug info of the first library, libabigail
first comes across the forward declaration of a type T.  Suppose that
declaration is not matched by any private type suppression
specification.  Libabigail is going to keep the declaration of T and
build an internal representation (IR) for it.  It's also going to
build an IR for types and decls using T like "T*" or "T* var".

Now suppose that while processing the debug info of the second
library, libabigail first comes across the *definition* of T --
because in this second library, that definition comes first.  Suppose
that the definition is matched by a private type suppression
specification, unlike the declaration in the first library.  In this
case, T is going to be dropped, and no IR is going to be built for it.
If other types or decl like 'T*' or 'T *var" refer to this
*definition* of T, they will be dropped too.

We'll end up with those two libraries that are identical (modulo the
order in which libabigail sees type declarations and their
definitions) and are considered different when a suppression
specification makes us drop T: the second library appears to
libabigail as if T was removed from it.

This is the problem addressed by this patch.

When the definition of a type T is suppressed because it's considered
private then we look if there was a forward declaration for it
elsewhere, that is not matched by the private type suppression
specification.  If we encountered such a type declaration then it
means that declaration is in effect an "opaque" version of T.  So
rather than just dropping T altogether, we keep (and build an IR) for
its opaque version only.  And we drop the definition of T.

This seems to fix the issue.

I can't seem to reproduce the slight re-ordering of DIEs descriptions that
uncover the issue so I'll rely on integration tests to catch future
regressions on this issue, rather than on unit tests.  Sigh.

	* include/abg-tools-utils.h (PRIVATE_TYPES_SUPPR_SPEC_NAME):
	Remove this extern constant definition.
	* src/abg-dwarf-reader.cc (type_is_suppressed): Add an overload
	that takes an additional type_is_private output parameter.
	(get_opaque_version_of_type): New static function.
	(build_ir_node_from_die): For class types, get the opaque version
	for suppressed private types rather than dropping them altogether.
	* src/abg-reader.cc (type_is_suppressed): Adjust.
	* src/abg-suppression-priv.h (type_is_suppressed): Add an overload
	that takes a type_is_private output parameter.
	* include/abg-suppression.h (get_private_types_suppr_spec_label)
	(is_private_type_suppr_spec): Declare new functions.
	* src/abg-suppression.cc
	(get_private_types_suppr_spec_label, is_private_type_suppr_spec):
	Define new functions.
	(suppression_matches_type_name_or_location): Use the new
	get_private_types_suppr_spec_label rather than a global extern
	variable.
	* src/abg-tools-utils.cc (handle_fts_entry): Adjust to use the new
	get_private_types_suppr_spec_label.
	(gen_suppr_spec_from_headers): Handle the case or an empty headers
	root dir.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2018-09-21 17:56:48 +02:00
Dodji Seketeli
af73844b97 Add option to avoid walking abigail::ir nodes twice
When the ir_traversable_base::traverse() walks the IR graph, it
happens that it can visit a type node that was already visited before.
For instance, it visits the 'struct S' once and later, as part of its
visit of struct S*, it can visit struct S again.

There are use cases where we want the walker to avoid visiting a given
type node again.  This patch adds the option to do so.

Basically the ir_node_visitor class can now be configured to tell the
walker to avoid re-visiting a node.

The test-ir-walker.cc example is amended to avoid re-visiting type nodes
as well.

	* include/abg-ir.h (struct ir_node_visitor): Make this be a class.
	Add a private data member to it, following the 'pimpl' idiom.
	(ir_node_visitor::{allow_visiting_already_visited_type_node,
	mark_type_node_as_visited, forget_visited_type_nodes,
	type_node_has_been_visited}): Declare new member functions.
	* src/abg-ir.cc ({type_base, type_decl, scope_type_decl,
	qualified_type_decl, pointer_type_def, reference_type_def,
	array_type_def, enum_type_decl, typedef_decl, class_or_union,
	class_decl, union_decl}::traverse): Avoid re-visiting the type
	node if the visitor was configured as such.
	(struct ir_node_visitor::priv): Define new struct.
	(ir_node_visitor::{allow_visiting_already_visited_type_node,
	mark_type_node_as_visited, forget_visited_type_nodes,
	type_node_has_been_visited}): Define new member functions.
	* tests/test-ir-walker.cc
	(name_printing_visitor::name_printing_visitor): Avoid visiting a
	type node twice.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2018-09-03 13:32:06 +02:00
Dodji Seketeli
b3db63b696 Fix apidoc of dwarf_reader::get_soname_of_elf_file
It turned out the first parameter of
abigail::dwarf_reader::get_soname_of_elf_file was not documented.
Fixed thus.

	* src/abg-dwarf-reader.cc (get_soname_of_elf_file): Document the
	first parameter.  Remove bogus documentation of the previous 'elf'
	parameter.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2018-08-31 09:31:41 +02:00
Dodji Seketeli
98f972dc1d Bug 23533 - Accept '=' in ini property values
It appears that it's not possible to write a suppression specification
like the below at the moment:

  [suppress_file]
  label = Libabigail can't handle libgfortran.so (https://sourceware.org/bugzilla/show_bug.cgi?id=23492)
  file_name_regexp = libgfortran\\.so.*

This is because the ini parser won't accept the '=' character in the
URL as a valid character for ini property values.

So the entire [suppress_file] section is ignored by the suppression
specification engine.

This patch fixes that by making the equal character valid in property
values.

	* src/abg-ini.cc (char_is_delimiter): Take a new include_equal
	flag to control is the equal character should be considered as a
	delimiter or not.
	(char_is_property_value_char): Accept the equal character as a
	valid property value character.
	* tests/Makefile.am: Build a new runtestini test from the new
	tests/test-ini.cc source file.
	* tests/data/Makefile.am: Add the two new test inputs below to
	source distribution.
	* tests/data/test-ini/test01-equal-in-property-string.{abignore,
	abignore.expected}: New test inputs.
	* tests/test-ini.cc: New test harness.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2018-08-30 10:54:33 +02:00
Dodji Seketeli
a6e6532352 Make test-ir-walker work on ELF binaries directly
The tests/test-ir-walker.cc example was working on abixml files
resulting from abidw.  This commit changes that to make it work on
ELF input files directly.  The commit also adds some comments to make
it easier to understand the concepts.

	* test-ir-walker.cc (main): Load an ABI corpus from an elf file
	and walk its translation units.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2018-08-06 10:28:06 +02:00
Dodji Seketeli
4b2dac6274 Allow use of python even when fedabipkgdiff is disabled
It turns out that when we disable fedabipkgdiff, we also disable
detection of python and the setting of the proper environment
variables that are expected by some makefiles down the road.  The
leads to the runtestdefaultsupprs.py test to be blocked at runtime
because the environement variable PYTHON is not defined.  This patch
fixes that.

	* configure.ac: Detect the presence and version of python even
	when fedabipkgdiff is disabled.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2018-07-17 12:33:10 +02:00
Dodji Seketeli
5eb6d692ac Bump version number to 1.5
* configure.ac: Bump version number to 1.5

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2018-07-16 09:33:28 +02:00
Dodji Seketeli
db14d71c03 Update ChangeLog for 1.4 release
* ChangeLog: Update this using make update-changelog

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2018-07-13 16:38:47 +02:00
Dodji Seketeli
9ebe40b322 Update NEWS file for 1.4 release
* NEWS: Added 1.4 entries

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2018-07-13 16:38:47 +02:00
Dodji Seketeli
42fe5aa2c8 Properly add test materials for test-diff-suppr/test38-char-class-in-ini*
While adding test materials for
test-diff-suppr/test38-char-class-in-ini* to source distribution, I
got the paths wrong.  Fixing thus.

	* tests/data/Makefile.am: Add proper path for
	test-diff-suppr/test38-char-class-in-ini*.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2018-07-13 10:13:09 +02:00
Dodji Seketeli
1478d9cc1c Allow square brackets in ini property values
Sometimes, one wants to be able to write suppression specifications
like:

    [suppress_function]
     filename_regexp = ^test38-char-class-in-ini-v[[:digit:]].*
     symbol_name_regexp = bar
     change_kind = added-function

without having to escape the square brackets in the regexp.  Normally,
one has to escape the '[' and the ']' because these characters are
used to define ini section names (e.g, [suppress_function]).

This patch allows the presence of the square bracket characters in a
property value, making the suppression specification above valid.

	* src/abg-ini.cc (char_is_delimiter): Possibly disallow square
	bracket characters into the set of delimiters.
	* tests/data/test-diff-suppr/test38-char-class-in-ini-report-0.txt:
	New reference output.
	* tests/data/test-diff-suppr/test38-char-class-in-ini-v{0,1}.c:
	Source code new test binaries.
	* tests/data/test-diff-suppr/test38-char-class-in-ini-v{0,1}.o:
	New test binaries.
	* tests/data/test-diff-suppr/test38-char-class-in-ini.abignore:
	New test abi suppression file.
	* tests/data/Makefile.am: Add the new test materials above to
	source distribution.
	* tests/test-diff-suppr.cc: Add the test materials above to the
	set of tests to run.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2018-07-12 13:47:08 +02:00
Dodji Seketeli
df72389155 Fix race between runtestdefaultsupprs{py3.sh,.py}
runtestdefaultsupprspy3.sh just runs runtestdefaultsupprs.py using
python3.  So when both run in parallel, it can happen that they step
on their toes as they emit content into some files.

This patch commits makes it so that runtestdefaultsupprspy3.sh is
executed only if we are in the python3 mode, otherwise we just run
runtestdefaultsupprs.py, fixing the occasional failure that we see on
either runtestdefaultsupprs.py or runtestdefaultsupprspy3.sh.

	* tests/Makefile.am: Run runtestdefaultsupprspy3.sh if we are in
	python3 mode otherwise run runtestdefaultsupprs.py.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2018-07-10 14:08:19 +02:00
Dodji Seketeli
6bd149124e Ensure die_function_type_is_method_type returns a class type die
When die_function_type_is_method returns true, it meanins that the
function die it's looking at is a member function.  In that case,
die_function_type_is_method must also return the class of which the
function is a member.  It appears that there are cases where this
die_function_type_is_method returns a *typedef* DIE (to a class DIE),
rather than a class DIE.

This results in the assertion violation below when loading the file
/usr/lib/libreoffice/program/libanalysislo.so from, e.g, the
libreoffice-calc-5.3.6.1-10.el7.i686 package:

    /home/dodji/git/libabigail/master/src/abg-dwarf-reader.cc:13846: abigail::ir::function_type_sptr abigail::dwarf_reader::build_function_type(abigail::dwarf_reader::read_context&, Dwarf_Die*, abigail::ir::class_or_union_sptr, size_t): Assertion `klass_type' failed.

This patch fixes that by peeling off the potential typedefs that might
be there.

	* src/abg-dwarf-reader.cc (die_peel_typedef): Define new static
	function.
	(die_function_type_is_method_type): Use the function above to peel
	the class die from potential typedefs wrapping it.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2018-06-29 13:06:57 +02:00
Dodji Seketeli
99f656cf66 Misc style adjustements
* include/abg-suppression.h
	(function_suppression::ADDED_FUNCTION_CHANGE_KIND): Fix the
	comment of this enumerator.
	(suppresses_variable): Cleanup parameter name.
	* src/abg-comparison.cc: Remove useless horizontal space.
	* src/abg-suppression.cc
	(variable_suppression::suppresses_variable): Fix typo.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2018-06-28 13:04:47 +02:00
Dodji Seketeli
9cc3ab5655 Initial basic support of union type in suppression specifications
* src/abg-suppression.cc (suppression_matches_type_no_name):
	Support union types.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2018-06-28 13:04:47 +02:00
Dodji Seketeli
215b7eb4fe Filter out changes like type to const type
For too long now changes to parameter types like "const char*" to
"char*" have been reported by libabigail by default.  Those are not
really meaningful ABI changes, at least not in C.  This patch makes
filters out those changes by default.

	* include/abg-comparison.h (FN_PARM_TYPE_CV_CHANGE_CATEGORY): Add
	this new enumerator to the diff_category enum.  Also, OR this to
	the value of the EVERYTHING_CATEGORY enumerator.
	* src/abg-comp-filter.cc (has_fn_parm_type_top_cv_qual_change):
	Rename has_fn_parm_type_cv_qual_change into this.
	(has_fn_parm_type_cv_qual_change): New function.
	(categorize_harmless_diff_node): Categorize cv qual changes as
	being of category FN_PARM_TYPE_CV_CHANGE_CATEGORY.
	* src/abg-comparison.cc (get_default_harmless_categories_bitmap):
	Add FN_PARM_TYPE_CV_CHANGE_CATEGORY to the default harmless
	categories.
	* tests/data/test-diff-pkg/libICE-1.0.6-1.el6.x86_64.rpm--libICE-1.0.9-2.el7.x86_64.rpm-report-0.txt: Adjust.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2018-06-28 13:04:47 +02:00
Dodji Seketeli
ef9d20c97c Fix redundancy detection through fn ptr and typedef paths
When analyzing the libfreetype.so binary, it appears that
libabigail's diff node redundancy marking pass is failing to detect a
redundant diff node in cases were the node is recursively referencing
itself through a path that involves function type and typedef diff
nodes.

So it is only at reporting time that we'd detect that the node is
redundant so we emit messages like "this change was reported
earlier".  But When the earlier change in question is suppressed due
to, e.g, a suppression specification resulting from the user providing
abidiff with the --headers-dir{1,2} command line option, then the
change report becomes confusing, at best.

The right behaviour is to detect the node is redundant and mark it as
such, so that the reporting pass can avoid reporting it altogether.

This is what this patch does.

This patch changes the output of the runtestdiffpkg regression test.
To update the reference output, we need an additional patch to handle
a separate (but somewhat related) issue.  That is going to be done in
the subsequent commit which title is:

	    "Filter out changes like type to const type"

	* include/abg-comparison.h
	(is_function_type_diff_with_local_changes)
	(is_reference_or_pointer_diff_to_non_basic_distinct_types)
	(peel_typedef_diff): Declare new functions.
	* src/abg-comparison.cc
	(is_function_type_diff_with_local_changes)
	(is_reference_or_ptr_diff_to_non_basic_nor_distinct_types)
	(peel_typedef_diff): Define new functions.
	(is_reference_or_pointer_diff): Peel typedefs before operating.
	(redundancy_marking_visitor::visit_begin): Only sibbling parameter
	diff node that carry basic type changes (or distinct type changes)
	are *not* marked as redundant.  All other kinds of sibbling
	parameter diff nodes are markes redundant.  Also, rather than
	never marking function type diffs as redundant by fear of missing
	local changes on these, just avoid marking function type diff
	nodes with local changes.  It's possible to be that precise now
	that we can detect that a diff node carries local changes.
	* tests/data/test-diff-suppr/test37-opaque-type-v{0,1}.o: New
	binary tests input.
	* tests/data/test-diff-suppr/test37-opaque-type-v{0,1}.c: Source
	code of the binary tests input above.
	* tests/data/test-diff-suppr/test37-opaque-type-header-dir/test37-opaque-type-header-v{0,1}.h:
	Headers of the binary tests input above.
	* tests/data/test-diff-suppr/test37-opaque-type-report-0.txt:
	Reference output for this new test.
	* tests/data/Makefile.am: Add the new test material above to
	source distribution.
	* tests/test-diff-suppr.cc (in_out_specs): Add the new test input
	above to the test harness.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2018-06-28 13:03:51 +02:00
Dodji Seketeli
672af90736 Fix indentation of help string in abipkgdiff
* tools/abipkgdiff.cc (display_usage): Fix indentation of help
	string.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2018-06-08 05:14:23 +02:00
Dodji Seketeli
4ce7f69dac Identify a function using its symbol name and version
When a function symbol S has several versions and several different
functions with different names have those different versions of S as
underlying symbols, libabigail could mistakenly take one function for
another.  This is because there are cases where libabigail identifies
the function using its symbol name without taking the version name
into account.

This patch fixes that.

	* src/abg-default-reporter.cc (default_reporter::report): In C,
	tell the user about the underlying function symbol name only if
	said symbol name is different from the name of the function.
	* src/abg-ir.cc (function_decl::get_id): If the function has an
	underlying symbol, use the symbol name and version as the function
	ID.  But if the function symbol has an alias then use the linkage
	name as the ID.
	* tests/data/test-diff-pkg/elfutils-debuginfo-0.170-4.el7.x86_64.rpm:
	New binary test input.
	* tests/data/test-diff-pkg/elfutils-debuginfo-0.171-1.el7.x86_64.rpm: Likewise.
	* tests/data/test-diff-pkg/elfutils-devel-0.170-4.el7.x86_64.rpm: Likewise.
	* tests/data/test-diff-pkg/elfutils-devel-0.171-1.el7.x86_64.rpm: Likewise.
	* tests/data/test-diff-pkg/elfutils-libs-0.170-4.el7.x86_64.rpm: Likewise.
	* tests/data/test-diff-pkg/elfutils-libs-0.171-1.el7.x86_64.rpm: Likewise.
	* tests/data/test-diff-pkg/elfutils-libs-0.170-4.el7.x86_64-multiple-sym-vers-report-0.txt:
	New reference test output.
	* tests/data/Makefile.am: Add the new test material above to
	source distribution.
	* tests/test-diff-pkg.cc (in_out_specs): Integrate the new test
	inputs above into the harness.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2018-06-08 05:12:24 +02:00
Dodji Seketeli
c3feaad81e Bump version to 1.4
* configure.ac: Bump version to 1.4

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2018-06-06 14:07:17 +02:00