2014-11-20 10:26:30 +00:00
|
|
|
|
|
|
|
EXTRA_DIST = \
|
|
|
|
test-read-write/test0.xml \
|
|
|
|
test-read-write/test1.xml \
|
|
|
|
test-read-write/test2.xml \
|
|
|
|
test-read-write/test3.xml \
|
|
|
|
test-read-write/test4.xml \
|
|
|
|
test-read-write/test5.xml \
|
|
|
|
test-read-write/test6.xml \
|
|
|
|
test-read-write/test7.xml \
|
|
|
|
test-read-write/test8.xml \
|
|
|
|
test-read-write/test9.xml \
|
|
|
|
test-read-write/test10.xml \
|
|
|
|
test-read-write/test11.xml \
|
|
|
|
test-read-write/test12.xml \
|
|
|
|
test-read-write/test13.xml \
|
|
|
|
test-read-write/test14.xml \
|
|
|
|
test-read-write/test15.xml \
|
|
|
|
test-read-write/test16.xml \
|
|
|
|
test-read-write/test17.xml \
|
|
|
|
test-read-write/test18.xml \
|
|
|
|
test-read-write/test19.xml \
|
|
|
|
test-read-write/test20.xml \
|
|
|
|
test-read-write/test21.xml \
|
|
|
|
test-read-write/test22.xml \
|
|
|
|
test-read-write/test23.xml \
|
|
|
|
test-read-write/test24.xml \
|
|
|
|
test-read-write/test25.xml \
|
2014-12-07 16:05:38 +00:00
|
|
|
test-read-write/test26.xml \
|
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<class_decl>): 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.
Signed-off-by: Ondrej Oprala <ooprala@redhat.com>
2015-09-23 06:44:00 +00:00
|
|
|
test-read-write/test27.xml \
|
2014-11-20 10:26:30 +00:00
|
|
|
\
|
|
|
|
test-write-read-archive/test0.xml \
|
|
|
|
test-write-read-archive/test1.xml \
|
|
|
|
test-write-read-archive/test2.xml \
|
|
|
|
test-write-read-archive/test3.xml \
|
|
|
|
test-write-read-archive/test4.xml \
|
|
|
|
\
|
|
|
|
test-core-diff/report0.txt \
|
|
|
|
test-core-diff/report1.txt \
|
|
|
|
test-core-diff/report2.txt \
|
|
|
|
test-core-diff/report3.txt \
|
|
|
|
test-core-diff/report4.txt \
|
|
|
|
test-core-diff/report5.txt \
|
|
|
|
test-core-diff/report6.txt \
|
|
|
|
test-core-diff/report7.txt \
|
|
|
|
test-core-diff/report8.txt \
|
|
|
|
test-core-diff/report9.txt \
|
|
|
|
test-core-diff/report10.txt \
|
|
|
|
test-core-diff/report11.txt \
|
|
|
|
test-core-diff/report12.txt \
|
|
|
|
test-core-diff/report13.txt \
|
|
|
|
\
|
|
|
|
test-abidiff/test-enum0-v0.cc.bi \
|
|
|
|
test-abidiff/test-enum0-v1.cc.bi \
|
|
|
|
test-abidiff/test-enum0-report.txt \
|
|
|
|
test-abidiff/test-enum1-v0.cc.bi \
|
|
|
|
test-abidiff/test-enum1-v1.cc.bi \
|
|
|
|
test-abidiff/test-enum1-report.txt \
|
|
|
|
test-abidiff/test-qual-type0-v0.cc.bi \
|
|
|
|
test-abidiff/test-qual-type0-v1.cc.bi \
|
|
|
|
test-abidiff/test-qual-type0-report.txt \
|
|
|
|
test-abidiff/test-struct0-v0.cc.bi \
|
|
|
|
test-abidiff/test-struct0-v1.cc.bi \
|
|
|
|
test-abidiff/test-struct0-report.txt \
|
|
|
|
test-abidiff/test-struct1-v0.cc.bi \
|
|
|
|
test-abidiff/test-struct1-v1.cc.bi \
|
|
|
|
test-abidiff/test-struct1-report.txt \
|
|
|
|
test-abidiff/test-var0-v0.cc.bi \
|
|
|
|
test-abidiff/test-var0-v1.cc.bi \
|
18166 - Abidiff fails with internal on Libtirpc ABI in XML format
It turns out the support for reading the native libabigail XML format
is falling short since the work on (late) type canonicalizing.
The type ID -> XML node map is wrongly considered as being per corpus
data while it should be per translation unit data; type IDs are unique
only for a given translation unit.
The code to walk a XML sub-tree to perform the ID -> node mapping is
wrongly walking all the XML node *after* the sub-tree node too; that
is, it walks the entire corpus file starting from the XML sub-tree
node it's given. It should only walk the sub-tree it's given.
These two issues normally solve the crash reported here. But then
there are other related issues too.
The native XML format reader doesn't populate the set of exported
declarations for the current corpus it's building.
This patch addresses all these issues and makes tests/test-abidiff.cc
supports corpus files for a new regression test.
* src/abg-reader.cc (read_context::m_exported_decls_builder_): New
data member.
(read_context::read_context): Initialize it.
(read_context::{type_is_from_translation_unit,
get_exported_decls_builder, set_exported_decls_builder,
maybe_add_fn_to_exported_decls, maybe_add_fn_to_exported_decls,
type_id_new_in_translation_unit}): New member functions.
(read_context::clear_per_translation_unit_data): Clear id->xml
node map here ...
(read_context::clear_per_corpus_data): ... not here.
(read_context::walk_xml_node_to_map_type_ids): Only walk the
sub-tree we are asked to walk.
(read_translation_unit_from_input): Cleanup.
(read_corpus_from_input): Wire populating of exported declarations
of the current corpus.
(build_function_decl, build_var_decl): Populate exported
declarations of the current corpus here.
(build_type_decl, build_qualified_type_decl)
(build_pointer_type_def, build_reference_type_def)
(build_array_type_def, build_enum_type_decl, build_type_decl)
(build_template_tparameter): Adjust assert on ID to make sure
it's the first type it's being defined in the current translation
unit.
* tests/data/test-abidiff/test-corpus0-report0.txt: New test
reference output.
* tests/data/test-abidiff/test-corpus0-v{0,1}.so.abi: New test
input.
* tests/test-abidiff.cc (specs): Add the test inputs above to the
list of inputs over which to run the test harness.
(main): Support reading corpora too, as this test harness was
reading just translation units before.
(tests/data/Makefile.am): Add test material above to source
distribution.
Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2015-03-30 07:50:44 +00:00
|
|
|
test-abidiff/test-var0-report.txt \
|
2015-10-14 12:52:08 +00:00
|
|
|
test-abidiff/test-PR18166-libtirpc.so \
|
|
|
|
test-abidiff/test-PR18166-libtirpc.so.abi \
|
|
|
|
test-abidiff/test-PR18166-libtirpc.so.report.txt \
|
2015-08-09 00:11:17 +00:00
|
|
|
test-abidiff/test-PR18791-report0.txt \
|
|
|
|
test-abidiff/test-PR18791-v0.so.abi \
|
|
|
|
test-abidiff/test-PR18791-v1.so.abi \
|
2014-11-20 10:26:30 +00:00
|
|
|
\
|
|
|
|
test-diff-dwarf/test0-v0.cc \
|
|
|
|
test-diff-dwarf/test0-v0.o \
|
|
|
|
test-diff-dwarf/test0-v1.cc \
|
|
|
|
test-diff-dwarf/test0-v1.o \
|
|
|
|
test-diff-dwarf/test0-report.txt \
|
|
|
|
test-diff-dwarf/test1-v0.cc \
|
|
|
|
test-diff-dwarf/test1-v0.o \
|
|
|
|
test-diff-dwarf/test1-v1.cc \
|
|
|
|
test-diff-dwarf/test1-v1.o \
|
|
|
|
test-diff-dwarf/test1-report.txt \
|
|
|
|
test-diff-dwarf/test2-v0.cc \
|
|
|
|
test-diff-dwarf/test2-v0.o \
|
|
|
|
test-diff-dwarf/test2-v1.cc \
|
|
|
|
test-diff-dwarf/test2-v1.o \
|
|
|
|
test-diff-dwarf/test2-report.txt \
|
|
|
|
test-diff-dwarf/test3-v0.cc \
|
|
|
|
test-diff-dwarf/test3-v0.o \
|
|
|
|
test-diff-dwarf/test3-v1.cc \
|
|
|
|
test-diff-dwarf/test3-v1.o \
|
|
|
|
test-diff-dwarf/test3-report.txt \
|
|
|
|
test-diff-dwarf/test4-v0.cc \
|
|
|
|
test-diff-dwarf/test4-v0.o \
|
|
|
|
test-diff-dwarf/test4-v1.cc \
|
|
|
|
test-diff-dwarf/test4-v1.o \
|
|
|
|
test-diff-dwarf/test4-report.txt \
|
|
|
|
test-diff-dwarf/test5-v0.cc \
|
|
|
|
test-diff-dwarf/test5-v0.o \
|
|
|
|
test-diff-dwarf/test5-v1.cc \
|
|
|
|
test-diff-dwarf/test5-v1.o \
|
|
|
|
test-diff-dwarf/test5-report.txt \
|
|
|
|
test-diff-dwarf/test6-v0.cc \
|
|
|
|
test-diff-dwarf/test6-v0.o \
|
|
|
|
test-diff-dwarf/test6-v1.cc \
|
|
|
|
test-diff-dwarf/test6-v1.o \
|
|
|
|
test-diff-dwarf/test6-report.txt \
|
|
|
|
test-diff-dwarf/test7-v0.cc \
|
|
|
|
test-diff-dwarf/test7-v0.o \
|
|
|
|
test-diff-dwarf/test7-v1.cc \
|
|
|
|
test-diff-dwarf/test7-v1.o \
|
|
|
|
test-diff-dwarf/test7-report.txt \
|
|
|
|
test-diff-dwarf/test8-v0.cc \
|
|
|
|
test-diff-dwarf/test8-v0.o \
|
|
|
|
test-diff-dwarf/test8-v1.cc \
|
|
|
|
test-diff-dwarf/test8-v1.o \
|
|
|
|
test-diff-dwarf/test8-report.txt \
|
|
|
|
test-diff-dwarf/test9-v0.cc \
|
|
|
|
test-diff-dwarf/libtest9-v0.so \
|
|
|
|
test-diff-dwarf/test9-v1.cc \
|
|
|
|
test-diff-dwarf/libtest9-v1.so \
|
|
|
|
test-diff-dwarf/test9-report.txt \
|
|
|
|
test-diff-dwarf/test10-v0.cc \
|
|
|
|
test-diff-dwarf/test10-v0.o \
|
|
|
|
test-diff-dwarf/test10-v1.cc \
|
|
|
|
test-diff-dwarf/test10-v1.o \
|
|
|
|
test-diff-dwarf/test10-report.txt \
|
|
|
|
test-diff-dwarf/test11-v0.cc \
|
|
|
|
test-diff-dwarf/test11-v0.o \
|
|
|
|
test-diff-dwarf/test11-v1.cc \
|
|
|
|
test-diff-dwarf/test11-v1.o \
|
|
|
|
test-diff-dwarf/test11-report.txt \
|
|
|
|
test-diff-dwarf/test12-v0.c \
|
|
|
|
test-diff-dwarf/libtest12-v0.so \
|
|
|
|
test-diff-dwarf/test12-v1.c \
|
|
|
|
test-diff-dwarf/libtest12-v1.so \
|
|
|
|
test-diff-dwarf/test12-version-script \
|
|
|
|
test-diff-dwarf/test12-report.txt \
|
|
|
|
test-diff-dwarf/test13-v0.cc \
|
|
|
|
test-diff-dwarf/test13-v0.o \
|
|
|
|
test-diff-dwarf/test13-v1.cc \
|
|
|
|
test-diff-dwarf/test13-v1.o \
|
|
|
|
test-diff-dwarf/test13-report.txt \
|
|
|
|
test-diff-dwarf/test14-inline-v0.cc \
|
|
|
|
test-diff-dwarf/test14-inline-v0.o \
|
|
|
|
test-diff-dwarf/test14-inline-v1.cc \
|
|
|
|
test-diff-dwarf/test14-inline-v1.o \
|
|
|
|
test-diff-dwarf/test14-inline-report.txt \
|
|
|
|
test-diff-dwarf/test15-enum-v0.cc \
|
|
|
|
test-diff-dwarf/test15-enum-v0.o \
|
|
|
|
test-diff-dwarf/test15-enum-v1.cc \
|
|
|
|
test-diff-dwarf/test15-enum-v1.o \
|
|
|
|
test-diff-dwarf/test15-enum-report.txt \
|
|
|
|
test-diff-dwarf/test16-syms-only-v0.o \
|
|
|
|
test-diff-dwarf/test16-syms-only-v1.o \
|
|
|
|
test-diff-dwarf/test16-syms-only-v0.cc \
|
|
|
|
test-diff-dwarf/test16-syms-only-v1.cc \
|
|
|
|
test-diff-dwarf/test16-syms-only-report.txt \
|
|
|
|
test-diff-dwarf/test17-non-refed-syms-v0.o \
|
|
|
|
test-diff-dwarf/test17-non-refed-syms-v1.o \
|
2014-12-07 22:34:21 +00:00
|
|
|
test-diff-dwarf/test17-non-refed-syms-report-0.txt \
|
2014-11-20 10:26:30 +00:00
|
|
|
test-diff-dwarf/test17-non-refed-syms-v0.cc \
|
|
|
|
test-diff-dwarf/test17-non-refed-syms-v1.cc \
|
|
|
|
test-diff-dwarf/libtest18-alias-sym-v0.so \
|
|
|
|
test-diff-dwarf/libtest18-alias-sym-v1.so \
|
|
|
|
test-diff-dwarf/test18-alias-sym-report-0.txt \
|
|
|
|
test-diff-dwarf/test18-alias-sym-v0.cc \
|
|
|
|
test-diff-dwarf/test18-alias-sym-v1.cc \
|
|
|
|
test-diff-dwarf/test18-alias-sym-version-script \
|
Support reading and comparing soname from ELF files
Libabigail's DWARF reader doesn't read the DT_SONAME tag from the
.dynamic section. The abigail::corpus type doesn't have a property
for that tag either. And the comparison engine doesn't take that tag
in when comparing corpora.
This patch modifies the DWARF reader to read the DT_SONAME and
DT_NEEDED tags from the .dynamic section. The value of DT_SONAME tag
is then saved in the new corpus property accessed by the new
abigail::corpus::get_soname() accessor. The comparison engine has
also been modified to compare the sonames of two corpora being
compared. Note that the value of the DT_NEEDED elf tag is saved in a
new corpus property that is accessed via the new
abigail::corpus::get_needed() getter. This property is not used yet.
This patch also adds a unit test for this new feature.
* include/abg-corpus.h (corpus::{get_needed, set_needed,
get_soname, set_soname}): Declare new accessors.
* src/abg-corpus.cc (corpus::priv::{needed, soname}): New data
members.
(corpus::{get_needed, set_needed, get_soname, set_soname}): Define
new accessors.
(corpus::is_empty): Take dt_needed and dt_soname in account in
computing empty-ness.
* src/abg-dwarf-reader.cc (read_context::{dt_needed_,
dt_soname_}): New data members.
(read_context::{dt_needed, dt_soname}): New accessors.
(read_context::load_dt_soname_and_needed): New member function.
(read_corpus_from_elf): Call the new
read_context::load_dt_soname_and_needed() to read the dt_soname
and dt_needed tags. Set them to the corpus.
* include/abg-comparison.h (diff_context::show_soname_change):
Declare new accessors.
* src/abg-comparison.cc (diff_context::priv::show_soname_change_):
New data member.
(diff_context::priv::priv): Initialize the new data member
diff_context::priv::show_soname_change_.
(diff_context::show_soname_change): Define new accessors.
(corpus_diff::priv::sonames_equal_): New data member.
(corpus_diff::priv::priv): Initialize the new data member
corpus_diff::priv::sonames_equal_.
(corpus_diff::length): Take the new priv_->sonames_equals_ data
member in account.
(corpus_diff::{report, priv::emit_diff_stats}): If the sonames
changed and we are allowed to report it, then report it.
(compute_diff): In the variant for corpus_diff, do not forget to
compare the sonames.
* src/abg-reader.cc (build_needed, read_elf_needed_from_input):
Define new static functions.
(read_corpus_from_input): Read the 'soname' attribute from the
'abi-corpus' xml element node.
* src/abg-writer.cc (write_elf_needed): Define new static
function.
(write_corpus_to_native_xml): Write a new 'elf-needed' xml element
node that contains one xml 'dependency' element node per
dependency to emit. This uses the new write_elf_needed() function
above.
* tests/data/test-diff-dwarf/libtest19-soname-v0.so: New test
input data.
* tests/data/test-diff-dwarf/libtest19-soname-v1.so: Likewise.
* tests/data/test-diff-dwarf/test19-soname-report-0.txt: Likewise.
* tests/data/test-diff-dwarf/test19-soname-v0.c: Source code of
the first binary above.
* tests/data/test-diff-dwarf/test19-soname-v1.c: Source code of
the second binary above.
* tests/test-diff-dwarf.cc (in_out_specs): Add the test input
above to the list of test input to run this harness on.
* tests/data/Makefile.am: Add the new test input data above.
* tests/data/test-read-dwarf/test{0,1}.abi: Adjust.
* tests/data/test-read-dwarf/test{2,3,4,6,}.so.abi: Adjust.
Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2014-12-07 20:01:20 +00:00
|
|
|
test-diff-dwarf/libtest19-soname-v0.so \
|
|
|
|
test-diff-dwarf/libtest19-soname-v1.so \
|
|
|
|
test-diff-dwarf/test19-soname-report-0.txt \
|
|
|
|
test-diff-dwarf/test19-soname-v0.cc \
|
|
|
|
test-diff-dwarf/test19-soname-v1.cc \
|
2014-12-09 11:37:23 +00:00
|
|
|
test-diff-dwarf/libtest20-add-fn-parm-v0.so \
|
|
|
|
test-diff-dwarf/libtest20-add-fn-parm-v1.so \
|
|
|
|
test-diff-dwarf/test20-add-fn-parm-report-0.txt \
|
|
|
|
test-diff-dwarf/test20-add-fn-parm-v0.c \
|
|
|
|
test-diff-dwarf/test20-add-fn-parm-v1.c \
|
Un-share diff nodes in the comparison IR
Until now, the diff nodes of the comparison IR were shared. That is,
two diffs about the same subjects were represented by the same diff
node that would appear twice in the tree.
This was preventing us from spotting e.g, the first occurrence of a
diff node that would later (in the tree) turn to be redundant because
all redundant diff nodes are represented by the same diff node
pointer.
This patch now makes each diff node be different, as far of pointer
comparison is concerned. But it introduces the concept of canonical
diff node to ease the comparison between two diff nodes. Two diff
nodes that are equal have the same canonical diff node.
With this facility, it's now possible to tell the difference between
diff nodes that are (structurally) equal. It's not possible to say
things like "this is the first or second occurrence of the redundant
diff node foo'.
* include/abg-ir.h: Prefix the doc string with "///", rather than
writing it inside a /**/ comment.
* include/abg-comparison.h (function_decl_diff)
(function_decl_diff_sptr, fn_parm_diff, fn_parm_diff_sptr)
(var_diff_sptr, base_diff, class_diff, class_diff_sptr): Move
these class & typedef decls to the top of the file.
(string_changed_base_map, string_changed_parm_map)
(unsigned_changed_parm_map, changed_function_ptr)
(string_changed_function_ptr_map): Remove these typedefs.
(string_base_diff_sptr_map, string_fn_parm_diff_sptr_map)
(unsigned_fn_parm_diff_sptr_map, string_var_diff_sptr_map)
(unsigned_var_diff_sptr_map, string_function_decl_diff_sptr_map)
(string_var_diff_ptr_map): New typedefs.
(diff_context::{has_diff_for,add_diff}): Make these member
functions private.
(diff_context::{set_canonical_diff_for,
set_or_get_canonical_diff_for}): Declare new private member
functions.
(diff_context::{get_canonical_diff_for,
initialize_canonical_diff}): New public member functions.
(diff_context::maybe_apply_filters): Set the default value of the
'traverse_nodes_once' parameter to false.
(compute_diff): Make the overload for class_decl_sptr friend of
the diff_context class.
(class diff): Make the diff_context class a friend of this one.
(diff::set_canonical_diff): Declare new private member function.
(diff::get_canonical_diff): Declare new public member function.
(diff::children_nodes): Make this return a vector<diff_sptr>, rather
than a vector<diff*>.
(diff::append_child_node): Make this take a diff_sptr rather than
a diff*.
(class fn_parm_diff): Declare new type.
(compute_diff): Declare new overload for the new
function_decl::parameter_sptr.
(function_decl_diff::subtype_changed_parms): Return a
string_fn_parm_diff_sptr_map rather than a string_changed_parm.
(function_decl_diff::children_nodes): Return a vector<diff_sptr>.
(function_decl_diff::append_child_node): Take a diff_sptr.
(function_decl_diff::changed_functions): Return a
string_function_decl_diff_sptr_map.
(function_decl_diff::changed_variables): Return a
string_var_diff_sptr.
(class function_decl::parameter): Make this a pimpled class.
Also, make it inherit decl_base.
(equals): New overload for function_decl::parameter.
(struct function_decl::parameter::hash): Declare this.
(ir_node_visitor::visit): Declare new overload for
function_decl::parameter.
* src/abg-comparison.cc: Add doc-string about the internal
representation of the comparison engine and also about the concept
of canonical diff of the comparison engine.
(RETURN_IF_BEING_REPORTED_OR_WAS_REPORTED_EARLIER)
(RETURN_IF_BEING_REPORTED_OR_WAS_REPORTED_EARLIER2)
(RETURN_IF_BEING_REPORTED_OR_WAS_REPORTED_EARLIER3): Consider the
canonical diff when trying to know if the current node was
reported earlier.
(diff_context::priv::canonical_diffs): New data member.
(diff_context::{get_canonical_diff_for, set_canonical_diff_for,
set_or_get_canonical_diff_for, initialize_canonical_diff}): Define
new member functions.
(diff_context::{diff_has_been_traversed, mark_diff_as_traversed):
Consider canonical diff for these tests and actions.
(diff::priv::children_): Change the type of this to
vector<diff_sptr>.
(diff::canonical_diff_): New data member.
(diff::diff): Initialize the diff::canonical_diff_ data member.
(diff::begin_traversing): Mark the canonical diff node too.
(diff::is_traversing): Consider the canonical diff node in this
test.
(diff::end_traversing): Make the canonical diff node too. Also
mark the current node as having been traversed.
(diff::children_nodes): Return a vector<diff_sptr> type.
(diff::{get_canonical_diff, set_canonical_diff}): Define new
member functions.
(diff::append_child_node): Take a diff_sptr type parameter.
(diff::{reported_once, currently_reporting}): Flag the canonical
diff node too. And consider the canonical diff node when checking
the flag.
(diff::traverse): No need to mark the node as being traversed
because the diff::end_traversing() function does it now. Adjust
the code because diff::children_nodes() now returns
vector<diff_sptr>.
({distinct_diff, var_diff, pointer_diff, array_diff,
reference_diff, qualified_type_diff, enum_diff, class_diff,
base_diff, scope_diff, function_decl_diff, typedef_diff,
corpus_diff}::chain_into_hierarchy): Adjust to the new type that
diff::append_child_node() takes. Also, take into account that the
diff nodes are now un-shared.
(compute_diff_for_distinct_kinds, compute_diff_for_types)
(compute_diff): Do not share diff nodes anymore. Initialize the
canonical diff node for the new created node.
(represent): Take a var_diff_sptr rather than two var_decl_sptr.
Adjust. Also take in account the fact that diff nodes are not
shared anymore, and that they do have canonical diffs.
(var_diff::type_diff): Make the computation of the type_diff of
the var_diff be lazy. This avoids infinite (recursive) creation
of diff nodes when a class diff node has a sub-type of data member
that is a class diff node too.
(var_diff::report): Detect redundant reporting of this kind of
diff node.
(class_diff::priv::changed_bases_): Change the type of this to
string_base_diff_sptr_map.
(class_diff::priv::subtype_changed_dm_): Change the type of this
to string_var_diff_sptr_map.
(class_diff::priv::changed_dm_): Change the type of this to
unsigned_var_diff_sptr_map.
(class_diff::priv::{count_filtered_subtype_changed_dm,
count_filtered_bases}): Do not take a diff_context_sptr anymore.
(class_diff::ensure_lookup_tables_populated): changed_bases_
subtype_changed_dm_ and changed_dm_ are now *NOT* shared diff
nodes anymore.
(class_diff::priv::base_has_changed): Adjust.
(class_diff::priv::subtype_changed_dm): Adjust.
(class_diff::priv::count_filtered_bases): Adjust as changed_bases_
is now a map of un-shared diff nodes.
(class_diff::priv::count_filtered_subtype_changed_dm): Adjust as
subtype_changed_dm_ is now a map of un-shared diff nodes.
(class_diff::priv::{count_filtered_changed_mem_fns,
count_filtered_inserted_mem_fns, count_filtered_deleted_mem_fns,
}): Adjust for change of the default parameter value of
diff_context::maybe_apply_filters().
(class_diff::~class_diff): New destructor.
(class_diff::changed_bases): Return a string_base_diff_sptr_map&
type.
(class_diff::{inserted_data_members, deleted_data_members,
changed_member_fns}): Add doc strings.
(struct changed_data_member_comp): Remove.
(struct var_diff_comp): New comparison functor.
(sort_changed_data_members): Remove.
(sort_var_diffs): Define new sorting function.
(class_diff::report): Adjust.
(fn_parm_diff::*): Define member types and functions of the new
fn_parm_diff type.
(function_decl_diff::priv::{subtype_changed_parms_,
changed_parms_by_id_}): Make these take a map of fn_parm_diff_sptr
nodes.
(function_decl_diff::ensure_lookup_tables_populated): Adjust to
the fact that priv_->subtype_changed_parms_ and
priv_->priv_->changed_parms_by_id_ now are maps of un-shared
fn_parm_diff_sptr nodes.
(function_decl_diff::subtype_changed_parms): Adjust.
(struct changed_parm_comp): Remove.
(struct fn_parm_diff_comp): New comparison functor.
(sort_changed_parm_map): Remove.
(sort_string_fn_parm_diff_sptr_map): New sorting function.
(function_decl_diff::report): Adjust.
(corpus_diff::priv::children_): Change the type of this to
vector<diff_sptr>.
(corpus_diff::priv::changed_fns_): Changed the type of this to
string_function_decl_diff_sptr_map.
(corpus_diff::priv::changed_vars_): Changed the type of this to
string_var_diff_sptr_map.
(corpus_diff::priv::ensure_lookup_tables_populated): Adjust.
(corpus_diff::priv::apply_filters_and_compute_diff_stats}):
Adjust. Do not need to clear redundancy categorization anymore
because the diff nodes are not shared anymore.
(corpus_diff::priv::categorize_redundant_changed_sub_nodes):
Adjust.
(corpus_diff::priv::clear_redundancy_categorization): Adjust.
(corpus_diff::changed_variables): Adjust.
(struct changed_function_ptr_comp): Remove.
(struct function_decl_diff_comp): New comparison functor.
(sort_string_changed_function_ptr_map): Remove.
(sort_string_function_decl_diff_sptr_map): Define new sorting
function.
(struct changed_vars_comp): Remove.
(struct var_diff_sptr_comp): New comparison functor.
(sort_changed_vars): Remove.
(sort_string_var_diff_sptr_map): Define new sorting function.
(corpus_diff::report): Adjust.
(corpus_diff::traverse): Adjust.
({category_propagation_visitor,
suppression_categorization_visitor}::visit_end): Adjust.
(clear_redundancy_categorization): Adjust.
* src/abg-hash.cc (function_decl::parameter::hash::operator):
Adjust.
* src/abg-ir.cc (struct function_decl::parameter::priv): Define
here as part of pimpl-ifying the function_decl::parameter type.
(function_decl::parameter::*): Define here the member functions as
part of pimpl-ifying the function_decl::parameter type.
(equals): Define the overload for function_decl::parameter here
too.
(ir_node_visitor::visit(function_decl::parameter*)): Define this.
* tests/data/test-abicompat/test0-fn-changed-report-0.txt: Adjust.
* tests/data/test-diff-suppr/test5-fn-suppr-report-0.txt: Adjust.
* tests/data/test-diff-dwarf/libtest21-redundant-fn-v0.so: New
test input data.
* tests/data/test-diff-dwarf/libtest21-redundant-fn-v1.so:
Likewise.
* tests/data/test-diff-dwarf/test21-redundant-fn-v0.cc: Source
code for test input binary above.
* tests/data/test-diff-dwarf/test21-redundant-fn-v1.cc: Likewise.
* tests/data/test-diff-dwarf/test21-redundant-fn-report-0.txt: New
test input data.
* tests/data/test-diff-dwarf/libtest22-changed-parm-c-v0.so: New
test input data.
* tests/data/test-diff-dwarf/libtest22-changed-parm-c-v1.so:
Likewise.
* tests/data/test-diff-dwarf/test22-changed-parm-c-v0.c: Source
code for test input binary above.
* tests/data/test-diff-dwarf/test22-changed-parm-c-v1.c: Likewise.
* tests/test-diff-dwarf.cc (in_out_spec): Add the new test input
data to the vector the test inputs to run this harness over.
* tests/data/test-diff-suppr/test8-redundant-fn-report-0.txt: New
test input data.
* tests/data/test-diff-suppr/test8-redundant-fn-report-1.txt:
Likewise.
* tests/data/test-diff-suppr/libtest8-redundant-fn-v0.so: New test
input binary.
* tests/data/test-diff-suppr/libtest8-redundant-fn-v1.so: Likewise.
* tests/data/test-diff-suppr/test8-redundant-fn-v0.cc: Source code
code for binary test input above.
* tests/data/test-diff-suppr/test8-redundant-fn-v1.cc: Likewise.
* tests/data/test-diff-suppr/test9-changed-parm-c-report-0.txt:
New test input data.
* tests/data/test-diff-suppr/test9-changed-parm-c-report-1.txt:
Likewise.
* tests/data/test-diff-suppr/libtest9-changed-parm-c-v0.so: New
test input binary.
* tests/data/test-diff-suppr/libtest9-changed-parm-c-v1.so: New
test input binary.
* tests/data/test-diff-suppr/test9-changed-parm-c-v0.c: Source
code for binary test input above.
* tests/data/test-diff-suppr/test9-changed-parm-c-v1.c: Likewise.
* tests/test-diff-suppr.cc (in_out_specs): Add the new test input
data to the vector the test inputs to run this harness over.
* tests/data/Makefile.am: Add the new files to the source
distribution.
Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2014-12-26 12:22:16 +00:00
|
|
|
test-diff-dwarf/libtest21-redundant-fn-v0.so \
|
|
|
|
test-diff-dwarf/libtest21-redundant-fn-v1.so \
|
|
|
|
test-diff-dwarf/test21-redundant-fn-report-0.txt \
|
|
|
|
test-diff-dwarf/test21-redundant-fn-v0.cc \
|
|
|
|
test-diff-dwarf/test21-redundant-fn-v1.cc \
|
|
|
|
test-diff-dwarf/libtest22-changed-parm-c-v0.so \
|
|
|
|
test-diff-dwarf/libtest22-changed-parm-c-v1.so \
|
|
|
|
test-diff-dwarf/test22-changed-parm-c-report-0.txt \
|
|
|
|
test-diff-dwarf/test22-changed-parm-c-v0.c \
|
|
|
|
test-diff-dwarf/test22-changed-parm-c-v1.c \
|
2015-01-07 12:45:53 +00:00
|
|
|
test-diff-dwarf/libtest-23-diff-arch-v0-32.so \
|
|
|
|
test-diff-dwarf/libtest-23-diff-arch-v0-64.so \
|
|
|
|
test-diff-dwarf/test-23-diff-arch-report-0.txt \
|
|
|
|
test-diff-dwarf/test-23-diff-arch-v0.cc \
|
2015-04-15 13:03:59 +00:00
|
|
|
test-diff-dwarf/libtest24-added-fn-parms-v0.so \
|
|
|
|
test-diff-dwarf/libtest24-added-fn-parms-v1.so \
|
|
|
|
test-diff-dwarf/test24-added-fn-parms-report-0.txt \
|
|
|
|
test-diff-dwarf/test24-added-fn-parms-v0.c \
|
|
|
|
test-diff-dwarf/test24-added-fn-parms-v1.c \
|
|
|
|
test-diff-dwarf/libtest25-removed-fn-parms-v0.so \
|
|
|
|
test-diff-dwarf/libtest25-removed-fn-parms-v1.so \
|
|
|
|
test-diff-dwarf/test25-removed-fn-parms-report-0.txt \
|
|
|
|
test-diff-dwarf/test25-removed-fn-parms-v0.c \
|
|
|
|
test-diff-dwarf/test25-removed-fn-parms-v1.c \
|
2015-05-05 08:05:45 +00:00
|
|
|
test-diff-dwarf/libtest26-added-parms-before-variadic-v0.so \
|
|
|
|
test-diff-dwarf/libtest26-added-parms-before-variadic-v1.so \
|
|
|
|
test-diff-dwarf/test26-added-parms-before-variadic-report.txt \
|
|
|
|
test-diff-dwarf/test26-added-parms-before-variadic-v0.c \
|
|
|
|
test-diff-dwarf/test26-added-parms-before-variadic-v1.c \
|
2015-06-02 10:26:11 +00:00
|
|
|
test-diff-dwarf/test27-local-base-diff-v0.o \
|
|
|
|
test-diff-dwarf/test27-local-base-diff-v1.o \
|
|
|
|
test-diff-dwarf/test27-local-base-diff-v0.cc \
|
|
|
|
test-diff-dwarf/test27-local-base-diff-v1.cc \
|
|
|
|
test-diff-dwarf/test27-local-base-diff-report.txt \
|
2015-06-04 07:22:02 +00:00
|
|
|
test-diff-dwarf/test28-vtable-changes-report-0.txt \
|
|
|
|
test-diff-dwarf/test28-vtable-changes-v0.o \
|
|
|
|
test-diff-dwarf/test28-vtable-changes-v1.o \
|
|
|
|
test-diff-dwarf/test28-vtable-changes-v0.cc \
|
|
|
|
test-diff-dwarf/test28-vtable-changes-v1.cc \
|
Detect vtable changes from member function changes
This patch adds vtable changes detection based on the detection of
virtual member function changes. That is, when a member function
changes, if that member function is virtual, then infer if the change
implies changes to the vtable of the containing class.
Before that patch, we were doing the vtable change detection when we
were comparing two classes; we were then comparing their virtual
member functions. But as for a given class all its virtual member
functions are not necessarily emitted in the DWARF debug info (only
the virtual member functions that are used in a given translation unit
are emitted in that translation unit) it's not reliable to compare
virtual member functions as part of comparing a given class. We thus
decided some patches ago to stop comparing virtual member functions
when we compare two classes.
So with this patch now, we still detect changes to the vtable and emit
an appropriate message to the user.
* 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.
Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2015-08-29 13:59:14 +00:00
|
|
|
test-diff-dwarf/test29-vtable-changes-report-0.txt \
|
|
|
|
test-diff-dwarf/test29-vtable-changes-v0.cc \
|
|
|
|
test-diff-dwarf/test29-vtable-changes-v0.o \
|
|
|
|
test-diff-dwarf/test29-vtable-changes-v1.cc \
|
|
|
|
test-diff-dwarf/test29-vtable-changes-v1.o \
|
|
|
|
test-diff-dwarf/test30-vtable-changes-report-0.txt \
|
|
|
|
test-diff-dwarf/test30-vtable-changes-v0.cc \
|
|
|
|
test-diff-dwarf/test30-vtable-changes-v0.o \
|
|
|
|
test-diff-dwarf/test30-vtable-changes-v1.cc \
|
|
|
|
test-diff-dwarf/test30-vtable-changes-v1.o \
|
|
|
|
test-diff-dwarf/test31-vtable-changes-report-0.txt \
|
|
|
|
test-diff-dwarf/test31-vtable-changes-v0.cc \
|
|
|
|
test-diff-dwarf/test31-vtable-changes-v0.o \
|
|
|
|
test-diff-dwarf/test31-vtable-changes-v1.cc \
|
|
|
|
test-diff-dwarf/test31-vtable-changes-v1.o \
|
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<class_decl>): 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.
Signed-off-by: Ondrej Oprala <ooprala@redhat.com>
2015-09-23 06:44:00 +00:00
|
|
|
test-diff-dwarf/test32-fnptr-changes-report-0.txt \
|
|
|
|
test-diff-dwarf/test32-fnptr-changes-v0.cc \
|
|
|
|
test-diff-dwarf/test32-fnptr-changes-v0.o \
|
|
|
|
test-diff-dwarf/test32-fnptr-changes-v1.cc \
|
|
|
|
test-diff-dwarf/test32-fnptr-changes-v1.o \
|
|
|
|
test-diff-dwarf/test33-fnref-changes-report-0.txt \
|
|
|
|
test-diff-dwarf/test33-fnref-changes-v0.cc \
|
|
|
|
test-diff-dwarf/test33-fnref-changes-v0.o \
|
|
|
|
test-diff-dwarf/test33-fnref-changes-v1.cc \
|
|
|
|
test-diff-dwarf/test33-fnref-changes-v1.o \
|
2014-11-20 10:26:30 +00:00
|
|
|
\
|
|
|
|
test-read-dwarf/test0 \
|
|
|
|
test-read-dwarf/test0.abi \
|
|
|
|
test-read-dwarf/test0.cc \
|
|
|
|
test-read-dwarf/test1 \
|
|
|
|
test-read-dwarf/test1.abi \
|
|
|
|
test-read-dwarf/test1.cc \
|
|
|
|
test-read-dwarf/test2.h \
|
|
|
|
test-read-dwarf/test2-0.cc \
|
|
|
|
test-read-dwarf/test2-1.cc \
|
|
|
|
test-read-dwarf/test2.so \
|
|
|
|
test-read-dwarf/test2.so.abi \
|
|
|
|
test-read-dwarf/test3.c \
|
|
|
|
test-read-dwarf/test3.so \
|
|
|
|
test-read-dwarf/test3.so.abi \
|
|
|
|
test-read-dwarf/test4.c \
|
|
|
|
test-read-dwarf/test4.so \
|
|
|
|
test-read-dwarf/test4.so.abi \
|
|
|
|
test-read-dwarf/test5.cc \
|
|
|
|
test-read-dwarf/test5.o \
|
|
|
|
test-read-dwarf/test5.o.abi \
|
|
|
|
test-read-dwarf/test6.cc \
|
|
|
|
test-read-dwarf/test6.so \
|
|
|
|
test-read-dwarf/test6.so.abi \
|
|
|
|
test-read-dwarf/test7.cc \
|
|
|
|
test-read-dwarf/test7.so \
|
|
|
|
test-read-dwarf/test7.so.abi \
|
|
|
|
test-read-dwarf/test8-qualified-this-pointer.cc \
|
|
|
|
test-read-dwarf/test8-qualified-this-pointer.so \
|
|
|
|
test-read-dwarf/test8-qualified-this-pointer.so.abi \
|
2015-08-12 21:55:18 +00:00
|
|
|
test-read-dwarf/test9-pr18818-clang.so \
|
|
|
|
test-read-dwarf/test10-pr18818-gcc.so \
|
|
|
|
test-read-dwarf/test9-pr18818-clang.so.abi \
|
|
|
|
test-read-dwarf/test10-pr18818-gcc.so.abi \
|
2015-08-14 22:10:26 +00:00
|
|
|
test-read-dwarf/test11-pr18828.so \
|
|
|
|
test-read-dwarf/test11-pr18828.so.abi \
|
2015-08-18 10:33:57 +00:00
|
|
|
test-read-dwarf/test12-pr18844.so \
|
|
|
|
test-read-dwarf/test12-pr18844.so.abi \
|
2015-08-29 15:17:48 +00:00
|
|
|
test-read-dwarf/test13-pr18894.so \
|
|
|
|
test-read-dwarf/test13-pr18894.so.abi \
|
2015-08-30 14:19:50 +00:00
|
|
|
test-read-dwarf/test14-pr18893.so \
|
|
|
|
test-read-dwarf/test14-pr18893.so.abi \
|
2015-08-30 15:56:19 +00:00
|
|
|
test-read-dwarf/test15-pr18892.so \
|
|
|
|
test-read-dwarf/test15-pr18892.so.abi \
|
2015-09-02 11:41:34 +00:00
|
|
|
test-read-dwarf/test16-pr18904.so \
|
|
|
|
test-read-dwarf/test16-pr18904.so.abi \
|
2015-10-01 09:06:15 +00:00
|
|
|
test-read-dwarf/test17-pr19027.so \
|
|
|
|
test-read-dwarf/test17-pr19027.so.abi \
|
2015-10-06 10:01:20 +00:00
|
|
|
test-read-dwarf/test18-pr19037-libvtkRenderingLIC-6.1.so \
|
|
|
|
test-read-dwarf/test18-pr19037-libvtkRenderingLIC-6.1.so.abi \
|
2015-10-06 22:08:46 +00:00
|
|
|
test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so \
|
|
|
|
test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi \
|
Bug 19025 - abixml writer forgets to emit some member types
When a member type (a type that is a member of a class) M is
referenced by some types emitted by abixml, but the context of M (the
class type which M is a member of) is not itself referenced by any ABI
artifact, then abixml forgets to emit the context of M and thus M
itself.
With this patch, when the abixml writer has emitted almost all ABI
artifacts for the current translation unit, it looks for types that
have been referenced by the emitted ABI artifacts, but that haven't
been emitted themselves.
It then emits those referenced-but-not-emitted types, and makes sure
their contexts are emitted as well.
* 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.
Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2015-10-08 10:57:04 +00:00
|
|
|
test-read-dwarf/test20-pr19025-libvtkParallelCore-6.1.so \
|
|
|
|
test-read-dwarf/test20-pr19025-libvtkParallelCore-6.1.so.abi \
|
2015-10-15 14:06:35 +00:00
|
|
|
test-read-dwarf/test21-pr19092.so \
|
|
|
|
test-read-dwarf/test21-pr19092.so.abi \
|
2015-10-17 13:03:41 +00:00
|
|
|
test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so \
|
|
|
|
test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi \
|
Bug 19139 - DWARF reader doesn't handle garbage in function names
In this bug, the DWARF debug info of the binary (generated by Intel's
ICC compiler) has interesting constructs like:
[ 6b5a0] subprogram
decl_line (data2) 787
decl_column (data1) 15
decl_file (data1) 46
declaration (flag)
accessibility (data1) public (1)
type (ref4) [ 6b56a]
prototyped (flag)
name (string) "ldiv"
MIPS_linkage_name (string) "ldiv"
[ 6b5b6] formal_parameter
type (ref4) [ 5f2aa]
name (string) "$Ë2"
[ 6b5bf] formal_parameter
type (ref4) [ 5f2aa]
name (string) "$Ë3"
Note the strings that make up the name of the formal parameters of the
function, near the end:
[ 6b5b6] formal_parameter
type (ref4) [ 5f2aa]
name (string) "$Ë2"
[ 6b5bf] formal_parameter
type (ref4) [ 5f2aa]
name (string) "$Ë3"
The strings "$Ë2" and $Ë3" (which are the names of the
parameters of the function) are garbage.
Libabigail's DWARF reader naively uses those strings as names for the
function parameters, in the type of the function.
Then, the abixml writer emits an XML document, with these strings as
property values, representing the name of the type of the function.
And of course, the XML later chokes when it tries to read that XML
document, saying that the property is not valid UTF-8.
This patch addresses the issue by dropping those garbage names on the
floor, for function type names. In that context, any string that is
not made of ASCII characters is considered as being garbage, for now.
The patch, in the abixml writer, also escapes function parameters
names so that they don't contain characters that are not allowed in
XML. The abixml reader already handles the un-escaping of the names
it reads, so I think there is nothing to do there.
Ultimately, I guess I should get the unicode value of the characters
of that string, encode the string into UTF-8 and use the result as the
name for the parameter. That would mean using UTF-8 strings for
function parameter names, and, for all declarations names. But that
is too much for worfk too little gain for now. The great majority of
the binaries we are dealing with are still using ASCII for declaration
names.
The patch also introduces a new test harness that runs "abidw
--abidiff" on a bunch of input binaries. This harness runs over the
binaries that were submitted in this bug report.
* 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.
Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2015-11-05 15:01:56 +00:00
|
|
|
test-types-stability/pr19139-DomainNeighborMapInst.o \
|
|
|
|
test-types-stability/pr19202-libmpi_gpfs.so.5.0 \
|
2014-11-20 10:26:30 +00:00
|
|
|
\
|
|
|
|
test-diff-filter/test0-v0.cc \
|
|
|
|
test-diff-filter/test0-v1.cc \
|
|
|
|
test-diff-filter/test0-v0.o \
|
|
|
|
test-diff-filter/test0-v1.o \
|
|
|
|
test-diff-filter/test0-report.txt \
|
|
|
|
test-diff-filter/test01-report.txt \
|
|
|
|
test-diff-filter/test1-v0.cc \
|
|
|
|
test-diff-filter/test1-v1.cc \
|
|
|
|
test-diff-filter/test1-v0.o \
|
|
|
|
test-diff-filter/test1-v1.o \
|
|
|
|
test-diff-filter/test1-report.txt \
|
|
|
|
test-diff-filter/test2-v0.cc \
|
|
|
|
test-diff-filter/test2-v1.cc \
|
|
|
|
test-diff-filter/test2-v0.o \
|
|
|
|
test-diff-filter/test2-v1.o \
|
|
|
|
test-diff-filter/test2-report.txt \
|
|
|
|
test-diff-filter/test3-v0.cc \
|
|
|
|
test-diff-filter/test3-v1.cc \
|
|
|
|
test-diff-filter/test3-v0.o \
|
|
|
|
test-diff-filter/test3-v1.o \
|
|
|
|
test-diff-filter/test3-report.txt \
|
|
|
|
test-diff-filter/test4-v0.cc \
|
|
|
|
test-diff-filter/test4-v1.cc \
|
|
|
|
test-diff-filter/test4-v0.o \
|
|
|
|
test-diff-filter/test4-v1.o \
|
|
|
|
test-diff-filter/test4-report.txt \
|
|
|
|
test-diff-filter/test5-v0.cc \
|
|
|
|
test-diff-filter/test5-v1.cc \
|
|
|
|
test-diff-filter/test5-v0.o \
|
|
|
|
test-diff-filter/test5-v1.o \
|
|
|
|
test-diff-filter/test5-report.txt \
|
|
|
|
test-diff-filter/test6-v0.cc \
|
|
|
|
test-diff-filter/test6-v1.cc \
|
|
|
|
test-diff-filter/test6-v0.o \
|
|
|
|
test-diff-filter/test6-v1.o \
|
|
|
|
test-diff-filter/test6-report.txt \
|
|
|
|
test-diff-filter/test7-v0.cc \
|
|
|
|
test-diff-filter/test7-v1.cc \
|
|
|
|
test-diff-filter/test7-v0.o \
|
|
|
|
test-diff-filter/test7-v1.o \
|
|
|
|
test-diff-filter/test7-report.txt \
|
|
|
|
test-diff-filter/test8-v0.cc \
|
|
|
|
test-diff-filter/test8-v1.cc \
|
|
|
|
test-diff-filter/test8-v0.o \
|
|
|
|
test-diff-filter/test8-v1.o \
|
|
|
|
test-diff-filter/test8-report.txt \
|
|
|
|
test-diff-filter/test9-v0.cc \
|
|
|
|
test-diff-filter/test9-v1.cc \
|
|
|
|
test-diff-filter/test9-v0.o \
|
|
|
|
test-diff-filter/test9-v1.o \
|
|
|
|
test-diff-filter/test9-report.txt \
|
|
|
|
test-diff-filter/test10-v0.cc \
|
|
|
|
test-diff-filter/test10-v1.cc \
|
|
|
|
test-diff-filter/test10-v0.o \
|
|
|
|
test-diff-filter/test10-v1.o \
|
|
|
|
test-diff-filter/test10-report.txt \
|
|
|
|
test-diff-filter/test11-v0.cc \
|
|
|
|
test-diff-filter/test11-v1.cc \
|
|
|
|
test-diff-filter/test11-v0.o \
|
|
|
|
test-diff-filter/test11-v1.o \
|
|
|
|
test-diff-filter/test11-report.txt \
|
|
|
|
test-diff-filter/test12-v0.cc \
|
|
|
|
test-diff-filter/test12-v1.cc \
|
|
|
|
test-diff-filter/test12-v0.o \
|
|
|
|
test-diff-filter/test12-v1.o \
|
|
|
|
test-diff-filter/test12-report.txt \
|
|
|
|
test-diff-filter/test13-v0.cc \
|
|
|
|
test-diff-filter/test13-v1.cc \
|
|
|
|
test-diff-filter/test13-v0.o \
|
|
|
|
test-diff-filter/test13-v1.o \
|
|
|
|
test-diff-filter/test13-report.txt \
|
|
|
|
test-diff-filter/test14-v0.cc \
|
|
|
|
test-diff-filter/test14-v1.cc \
|
|
|
|
test-diff-filter/test14-v0.o \
|
|
|
|
test-diff-filter/test14-v1.o \
|
|
|
|
test-diff-filter/test14-0-report.txt \
|
|
|
|
test-diff-filter/test14-1-report.txt \
|
|
|
|
test-diff-filter/test15-v0.cc \
|
|
|
|
test-diff-filter/test15-v1.cc \
|
|
|
|
test-diff-filter/test15-v0.o \
|
|
|
|
test-diff-filter/test15-v1.o \
|
|
|
|
test-diff-filter/test15-0-report.txt \
|
|
|
|
test-diff-filter/test15-1-report.txt \
|
|
|
|
test-diff-filter/test16-v0.cc \
|
|
|
|
test-diff-filter/test16-v1.cc \
|
|
|
|
test-diff-filter/test16-v0.o \
|
|
|
|
test-diff-filter/test16-v1.o \
|
Recognize cyclic diff tree nodes as being redundant
Okay I need to introduce some vocabulary here. Suppose we have the
version 1 of a library named library-v1.so which source code is:
struct S
{
int m0;
struct S* m2;
};
int
foo(struct S* ptr)
{
return ptr;
}
And now suppose we have a version 2 of that library named
library-v2.so which source code is modified so that a new data member
is inserted into struct S:
struct S
{
int m0;
char m1; /* <--- a new data member is inserted here. */
struct S* m2;
};
int
foo(struct S* ptr)
{
return ptr;
}
struct S is said to be a cyclic type because it contains a (data)
member which type refers to struct S itself, namely, the type of the
data member S::m2 is struct S*, which refers to struct S.
So, by analogy, the diff node tree that represents the changes of
struct S is also said to be cyclic, for similar reasons: the diff
node of the change of S::m2 refers to the diff node of the change of
the type of S::m2, namely the diff node of struct S*, which refers to
the diff node for the change of struct S itself.
Now let's talk about redundancy. When walking the diff node tree of
struct S in a depth-first manner, at some point, we look at the diff
node for the data member S::m2, and we end up looking at the diff node
of its type which is the diff node for struct S*; we keep walking and
eventually we look the diff node of the change of the underlying type
of struct S, which is the diff node of struct S, and hah! that is a
redundant node because it's the first node that we visited when
visiting the diff node of ... struct S! So the diff tree node for
the change of struct S is not only a cyclic node, it's a redundant
diff node as well, and its second occurrence is located at the point
of appearance of data member S::m2. Hence the wording "cyclic
redundant diff tree node". There! We have our vocabulary all set now.
This patch enhances the code of the comparison engine so that a cyclic
diff tree node is marked as redundant from the point of its second
occurrence, onward.
First the patch separates the notion of visiting a diff node from the
notion of traversing it. Now traversing a diff node means visiting it
and visiting its children nodes. So one can visit a node without
traversing it, but one can not traverse a node without visiting it.
So, when walking diff node trees, we need to avoid ending up in
infinite loop in presence of cyclic nodes. This is why re-traversing
a node that is already being traversed is forbidden by this patch, but
visiting a node that is being visited is allowed. Before this patch,
the notions of visiting and traversing were conflated in one and were
not very clear; and one couldn't visit a node that was currently being
visited. As a result, in presence of a cyclic node, its redundant
nature wasn't being recognized, and so the diff tree node was not
being flagged as being redundant. Diff reports were then cluttered by
redundant references to changes involving cyclic types.
* include/abg-comparison.h (enum visiting_kind): Rename
enumerator DO_NOT_MARK_VISITED_NODES_AS_TRAVERSED into
DO_NOT_MARK_VISITED_NODES_AS_VISITED.
(diff_context::diff_has_been_visited): Rename
diff_context::diff_has_been_traversed into this.
(diff_context::mark_diff_as_visited): Rename
diff_context::mark_diff_as_traversed into this.
(diff_context::forget_visited_diffs): Rename
diff_context::forget_traversed_diffs into this.
(diff_context::forbid_visiting_a_node_twice): Rename
diff_context::forbid_traversing_a_node_twice into this.
(diff_context::visiting_a_node_twice_is_forbidden): Rename
diff_context::traversing_a_node_twice_is_forbidden into this.
(diff::is_traversing): Move this from protected to public.
* src/abg-comparison.cc (diff_context::priv::visited_diff_nodes_):
Rename diff_context::priv::traversed_diff_nodes_ into this.
(diff_context::priv::forbid_visiting_a_node_twice_): Rename
diff_context::priv::forbid_traversing_a_node_twice_ into this.
(diff_context::priv::priv): Adjust.
(diff_context::diff_has_been_visited): Rename
diff_context::diff_has_been_traversed into this. Adjust.
(diff_context::mark_diff_as_visited): Rename
diff_context::mark_diff_as_traversed into this. Adjust.
(diff_context::forget_visited_diffs): Rename
diff_context::forget_traversed_diffs into this. Adjust.
(diff_context::forbid_visiting_a_node_twice): Rename
diff_context::forbid_traversing_a_node_twice into this.
(diff_context::visiting_a_node_twice_is_forbidden): Rename
diff_context::traversing_a_node_twice_is_forbidden into this.
(diff_context::maybe_apply_filters): Adjust.
(diff::end_traversing): Remove the 'mark_as_traversed' parameter
of this. Remove the visited-marking code.
(diff::traverse): This is the crux of the changes of this patch.
Avoid traversing a node that is being traversed, but one can visit
a node being visited. Also, traversing a node means visiting it
and visiting its children nodes.
(diff::is_filtered_out): Simplify logic for filtering redundant
code. Basically all nodes that are redundant are filtered. All
the complicated logic that was due when diff nodes were shared is
not relevant anymore.
(corpus_diff::priv::categorize_redundant_changed_sub_nodes)
(propagate_categories, apply_suppressions)
(diff_node_printer::diff_node_printer, print_diff_tree)
(categorize_redundant_changed_sub_nodes)
(clear_redundancy_categorization)
(clear_redundancy_categorization): Adjust.
(redundancy_marking_visitor::visit_begin): Adjust. Also, if the
current diff node is already being traversed (that's a clyclic
node) then mark it as redundant.
* src/abg-comp-filter.cc (apply_filter): Adjust.
* tests/data/test-diff-filter/test16-report-2.txt: New test input data.
* tests/data/test-diff-filter/libtest25-cyclic-type-v{0,1}.so: New
test input binaries.
* tests/data/test-diff-filter/test25-cyclic-type-v{0,1}.cc: Source
code for the test input binaries.
* tests/data/test-diff-filter/test25-cyclic-type-report-0.txt: New
test input data.
* tests/data/test-diff-filter/test25-cyclic-type-report-1.txt:
Likewise.
* tests/test-diff-filter.cc (in_out_specs): Add the new test
inputs above to the list of test input data over which to run this
test harness.
* tests/data/Makefile.am: Add the new test files above to source
distribution.
* tests/data/test-diff-filter/test16-report.txt: Adjust.
* tests/data/test-diff-filter/test17-0-report.txt: Likewise.
Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2015-01-24 19:51:16 +00:00
|
|
|
test-diff-filter/test16-report.txt \
|
|
|
|
test-diff-filter/test16-report-2.txt \
|
2014-11-20 10:26:30 +00:00
|
|
|
test-diff-filter/test17-v0.cc \
|
|
|
|
test-diff-filter/test17-v1.cc \
|
|
|
|
test-diff-filter/test17-v0.o \
|
|
|
|
test-diff-filter/test17-v1.o \
|
|
|
|
test-diff-filter/test17-0-report.txt \
|
|
|
|
test-diff-filter/test17-1-report.txt \
|
|
|
|
test-diff-filter/test18-v0.cc \
|
|
|
|
test-diff-filter/test18-v1.cc \
|
|
|
|
test-diff-filter/test18-v0.o \
|
|
|
|
test-diff-filter/test18-v1.o \
|
|
|
|
test-diff-filter/test18-report.txt \
|
|
|
|
test-diff-filter/test19-enum-v0.cc \
|
|
|
|
test-diff-filter/test19-enum-v1.cc \
|
|
|
|
test-diff-filter/test19-enum-v0.o \
|
|
|
|
test-diff-filter/test19-enum-v1.o \
|
|
|
|
test-diff-filter/test19-enum-report-0.txt \
|
|
|
|
test-diff-filter/test19-enum-report-1.txt \
|
|
|
|
test-diff-filter/test20-inline-v0.cc \
|
|
|
|
test-diff-filter/test20-inline-v1.cc \
|
|
|
|
test-diff-filter/test20-inline-v0.o \
|
|
|
|
test-diff-filter/test20-inline-v1.o \
|
|
|
|
test-diff-filter/test20-inline-report-0.txt \
|
|
|
|
test-diff-filter/test20-inline-report-1.txt \
|
Make determining of compatible types complete
Until now, two types that are different were considered compatible if
one type is a typedef of the other. This is useful because two
different types, if compatible, are not ABI-incompatible. This patch
extends the concept of compatible types to types which might have
sub-types that are typedefs of each others, including function types.
Note implementing this required that I fixed various other things left
and right. Like style fixes, crash avoiding fixes, etc.
* include/abg-fwd.h (is_reference_type, is_function_type)
(is_method_type): Declare new predicates.
* include/abg-ir.h (class qualified_type_def): Pimpl this class.
(qualified_type_def::qualified_type_def): Use the convenience
type_base_sptr typedef.
(qualified_type_def::{get_cv_quals, set_cv_quals}): Use the
qualified_type_def::CV type rather than char.
(qualified_type_def::get_underlying_type): Use the convenience
type_base_sptr typedef.
(pointer_type_def::pointer_type_def): Likewise.
(function_decl::parameter::parameter): Add a new constructor.
* src/abg-ir.cc (is_reference_type, is_function_type)
(is_method_type): Define new predicates.
(class qualified_type_def::priv): Define this new private type,
for the purpose of Pimpl-ifying the qualified_type_def class.
(qualified_type_def::{qualified_type_def, build_name,
get_cv_quals_string_prefix, get_underlying_type}): Adjust for the
purpose of Pimpl-ifying the qualified_type_def class.
(equals): In the qualified_type_def, reference_type_def overloads,
trust the fact that we have operator== overload for the
type_base_sptr. This avoids crashes for when the (possible)
underlying type is null.
(pointer_type_def::operator==): Likewise.
(strip_typedef): Make this recursively strip
typedefs from sub-types.
(types_are_compatible): Handle null types.
(qualified_type_def::{get_cv_quals, set_cv_quals}): Handle
qualified_type_def::CV rather than char.
(pointer_type_def::pointer_type_def): Use the convenience
type_base_sptr typedef.
* include/abg-comparison.h (distinct_diff::compatible_child_diff):
Declare new member function.
* src/abg-comparison.cc (distinct_diff::compatible_child_diff):
Define new member function.
(distinct_diff::chain_into_hierarchy):
Chain the compatible child diff node that might be present.
(distinct_diff::report): Now when a distinct diff carries a
compatible change, mention it in the report.
* src/abg-comp-filter.cc (is_compatible_change): A compatible
change can now involve types that are not typedefs. Only their
sub-types need to be involved with typedef-ness.
* tests/data/test-diff-dwarf/test{2,4,5}-report.txt: Adjust.
* tests/data/test-diff-filter/libtest21-compatible-vars-v0.so: New
test data input.
* tests/data/test-diff-filter/libtest21-compatible-vars-v1.so: Likewise.
* tests/data/test-diff-filter/test21-compatible-vars-report-0.txt Likewise.
* tests/data/test-diff-filter/test21-compatible-vars-report-1.txt Likewise.
* tests/data/test-diff-filter/test21-compatible-vars-v0.cc: Source
code for the first data input binary above.
* tests/data/test-diff-filter/test21-compatible-vars-v1.cc: Source
code for the second data input binary above.
* tests/data/test-diff-filter/libtest22-compatible-fns-v0.so: New
test data input.
* tests/data/test-diff-filter/libtest22-compatible-fns-v1.so Likewise.
* tests/data/test-diff-filter/test22-compatible-fns-report-0.txt:
New test data input.
* tests/data/test-diff-filter/test22-compatible-fns-report-1.txt: Likewise.
* tests/data/test-diff-filter/test22-compatible-fns-v0.c: Source
code for the first test data input binary above.
* tests/data/test-diff-filter/test22-compatible-fns-v1.c: Source
code for the second test data input binary above.
* tests/data/Makefile.am: Add the new test input data to source
distribution.
* tests/test-diff-filter.cc (in_out_specs): Add the new test data
input above to the list of test data this harness has to be run
over.
Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2014-12-10 06:25:01 +00:00
|
|
|
test-diff-filter/libtest21-compatible-vars-v0.so \
|
|
|
|
test-diff-filter/libtest21-compatible-vars-v1.so \
|
|
|
|
test-diff-filter/test21-compatible-vars-report-0.txt \
|
|
|
|
test-diff-filter/test21-compatible-vars-report-1.txt \
|
|
|
|
test-diff-filter/test21-compatible-vars-v0.cc \
|
|
|
|
test-diff-filter/test21-compatible-vars-v1.cc \
|
|
|
|
test-diff-filter/libtest22-compatible-fns-v0.so \
|
|
|
|
test-diff-filter/libtest22-compatible-fns-v1.so \
|
|
|
|
test-diff-filter/test22-compatible-fns-report-0.txt \
|
|
|
|
test-diff-filter/test22-compatible-fns-report-1.txt \
|
|
|
|
test-diff-filter/test22-compatible-fns-v0.c \
|
|
|
|
test-diff-filter/test22-compatible-fns-v1.c \
|
Temporarily disable redundant diff report elimination
So, this is all about problem report
https://sourceware.org/bugzilla/show_bug.cgi?id=17693.
When redundant diff node reporting is enabled and when a diff node
appears twice in a diff tree, we detect that and the second occurrence
of the diff node is flagged as being redundant. Later at diff tree
node reporting time, the redundant diff node is not reported.
The problem is that diff nodes are canonicalized. That is, when the
same change is present twice in a diff, the same diff node is going to
be present twice. So flagging the second occurrence as being
redundant amounts as flagging the first occurrence as being redundant
too! So at reporting time, the diff tree visitor that walks the diff
tree nodes will avoid reporting the two occurrences of diff tree nodes
altogether. This is what happens in the example of the bug above. I
am reproducing the example here for convenience:
So suppose we have a first version of a library named lib-v0.so which
is made of this C code:
int add(int a, int b)
{
}
Then suppose that code was changed in a subsequent version of the
library named lib-v1.so, leading to the following code:
int add(float a, float b)
{
}
So, the diff tree node for the 'add' function is going to have several
child diff tree nodes, among which, one that carries the change for
the first parameter (int a becoming float a) and the one carrying the
change for the second parameter (int b becoming float b).
The diff tree node for the second parameter is going to be same diff
tree node as the one for the first parameter because what counts is
the change in the *type* of the parameter. Thus, the diff tree node
for the second parameter is going to be marked as being redundant; and
so is the first parameter.
So abidiff lib-v0.so lib-v1.so yields:
Functions changes summary: 0 Removed, 0 Changed (1 filtered out), 0 Added
function
Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
You can see that even the function 'add' is not mentioned in the
report. This is because it has also been considered as being
redundant because of a phenomenon named 'propagation'. The
redundant-ness of the children nodes of the diff tree node of the
'add' function is propagated to the diff tree node of the add function
itself because that add function diff tree node has no child but
redundant diff children nodes. This categorization behaviour is
correct.
What is not correct is that only the second child node of the add
function diff tree node should have been marked redundant.
I am going to tackle this issue a bit later. For now, I am
temporarily disabling redundancy categorization for diff tree nodes by
default. Hence this patch.
With this patch, abidiff lib-v0.so lib-v1.so yields:
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 int add(int, int)' has some indirect sub-type changes:
parameter 0 of type 'int' changed:
name changed from 'int' to 'float'
parameter 1 of type 'int' changed:
name changed from 'int' to 'float'
Note how the change on the second parameter appears equal to the
change on the first.
* src/abg-comparison.cc
(diff_context::priv::priv): Show redundant changes by default.
(categorize_redundancy): Do not categorize redundancy if the
diff_context says that we shouldn't.
* tools/abicompat.cc (options::show_redundant): New data member.
(options::options): Initialize to true.
(display_usage): Add new help string for new --no-redundant and
--redundant options.
(parse_command_line): Parse new --no-redundant and --redundant
command line options.
(main): Initialize the diff context with respect to the
options::show_redundant property.
* tools/abidiff.cc (options::options): Initialize the
show_redundant_changes data member to true.
(display_usage): Show new help string for the new --no-redundant
command line option.
(parse_command_line): Parse the new --no-redundant command line
option.
* tests/data/test-diff-filter/libtest23-redundant-fn-parm-change-v0.so:
New test data input.
* tests/data/test-diff-filter/libtest23-redundant-fn-parm-change-v1.so:
Likewise.
* tests/data/test-diff-filter/test23-redundant-fn-parm-change-report-0.txt:
Likewise.
* tests/data/test-diff-filter/test23-redundant-fn-parm-change-v0.c:
Source code for the first binary above.
* tests/data/test-diff-filter/test23-redundant-fn-parm-change-v1.c:
Source code for the second binary above.
* tests/data/Makefile.am: Add the new test data input to source
distribution.
* tests/test-abicompat.cc (in_out_specs): Add --no-redundant to
abicompat when we don't want it to show redundant diff reports.
* test-diff-filter.cc (in_out_specs): Likewise for abidiff.
* test-diff-suppr.cc (in_out_specs): Likewise.
Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2014-12-10 17:24:41 +00:00
|
|
|
test-diff-filter/libtest23-redundant-fn-parm-change-v0.so \
|
|
|
|
test-diff-filter/libtest23-redundant-fn-parm-change-v1.so \
|
|
|
|
test-diff-filter/test23-redundant-fn-parm-change-report-0.txt \
|
|
|
|
test-diff-filter/test23-redundant-fn-parm-change-v0.c \
|
|
|
|
test-diff-filter/test23-redundant-fn-parm-change-v1.c \
|
2014-12-12 13:30:31 +00:00
|
|
|
test-diff-filter/libtest24-compatible-vars-v0.so \
|
|
|
|
test-diff-filter/libtest24-compatible-vars-v1.so \
|
|
|
|
test-diff-filter/test24-compatible-vars-report-0.txt \
|
|
|
|
test-diff-filter/test24-compatible-vars-report-1.txt \
|
|
|
|
test-diff-filter/test24-compatible-vars-v0.c \
|
|
|
|
test-diff-filter/test24-compatible-vars-v1.c \
|
Recognize cyclic diff tree nodes as being redundant
Okay I need to introduce some vocabulary here. Suppose we have the
version 1 of a library named library-v1.so which source code is:
struct S
{
int m0;
struct S* m2;
};
int
foo(struct S* ptr)
{
return ptr;
}
And now suppose we have a version 2 of that library named
library-v2.so which source code is modified so that a new data member
is inserted into struct S:
struct S
{
int m0;
char m1; /* <--- a new data member is inserted here. */
struct S* m2;
};
int
foo(struct S* ptr)
{
return ptr;
}
struct S is said to be a cyclic type because it contains a (data)
member which type refers to struct S itself, namely, the type of the
data member S::m2 is struct S*, which refers to struct S.
So, by analogy, the diff node tree that represents the changes of
struct S is also said to be cyclic, for similar reasons: the diff
node of the change of S::m2 refers to the diff node of the change of
the type of S::m2, namely the diff node of struct S*, which refers to
the diff node for the change of struct S itself.
Now let's talk about redundancy. When walking the diff node tree of
struct S in a depth-first manner, at some point, we look at the diff
node for the data member S::m2, and we end up looking at the diff node
of its type which is the diff node for struct S*; we keep walking and
eventually we look the diff node of the change of the underlying type
of struct S, which is the diff node of struct S, and hah! that is a
redundant node because it's the first node that we visited when
visiting the diff node of ... struct S! So the diff tree node for
the change of struct S is not only a cyclic node, it's a redundant
diff node as well, and its second occurrence is located at the point
of appearance of data member S::m2. Hence the wording "cyclic
redundant diff tree node". There! We have our vocabulary all set now.
This patch enhances the code of the comparison engine so that a cyclic
diff tree node is marked as redundant from the point of its second
occurrence, onward.
First the patch separates the notion of visiting a diff node from the
notion of traversing it. Now traversing a diff node means visiting it
and visiting its children nodes. So one can visit a node without
traversing it, but one can not traverse a node without visiting it.
So, when walking diff node trees, we need to avoid ending up in
infinite loop in presence of cyclic nodes. This is why re-traversing
a node that is already being traversed is forbidden by this patch, but
visiting a node that is being visited is allowed. Before this patch,
the notions of visiting and traversing were conflated in one and were
not very clear; and one couldn't visit a node that was currently being
visited. As a result, in presence of a cyclic node, its redundant
nature wasn't being recognized, and so the diff tree node was not
being flagged as being redundant. Diff reports were then cluttered by
redundant references to changes involving cyclic types.
* include/abg-comparison.h (enum visiting_kind): Rename
enumerator DO_NOT_MARK_VISITED_NODES_AS_TRAVERSED into
DO_NOT_MARK_VISITED_NODES_AS_VISITED.
(diff_context::diff_has_been_visited): Rename
diff_context::diff_has_been_traversed into this.
(diff_context::mark_diff_as_visited): Rename
diff_context::mark_diff_as_traversed into this.
(diff_context::forget_visited_diffs): Rename
diff_context::forget_traversed_diffs into this.
(diff_context::forbid_visiting_a_node_twice): Rename
diff_context::forbid_traversing_a_node_twice into this.
(diff_context::visiting_a_node_twice_is_forbidden): Rename
diff_context::traversing_a_node_twice_is_forbidden into this.
(diff::is_traversing): Move this from protected to public.
* src/abg-comparison.cc (diff_context::priv::visited_diff_nodes_):
Rename diff_context::priv::traversed_diff_nodes_ into this.
(diff_context::priv::forbid_visiting_a_node_twice_): Rename
diff_context::priv::forbid_traversing_a_node_twice_ into this.
(diff_context::priv::priv): Adjust.
(diff_context::diff_has_been_visited): Rename
diff_context::diff_has_been_traversed into this. Adjust.
(diff_context::mark_diff_as_visited): Rename
diff_context::mark_diff_as_traversed into this. Adjust.
(diff_context::forget_visited_diffs): Rename
diff_context::forget_traversed_diffs into this. Adjust.
(diff_context::forbid_visiting_a_node_twice): Rename
diff_context::forbid_traversing_a_node_twice into this.
(diff_context::visiting_a_node_twice_is_forbidden): Rename
diff_context::traversing_a_node_twice_is_forbidden into this.
(diff_context::maybe_apply_filters): Adjust.
(diff::end_traversing): Remove the 'mark_as_traversed' parameter
of this. Remove the visited-marking code.
(diff::traverse): This is the crux of the changes of this patch.
Avoid traversing a node that is being traversed, but one can visit
a node being visited. Also, traversing a node means visiting it
and visiting its children nodes.
(diff::is_filtered_out): Simplify logic for filtering redundant
code. Basically all nodes that are redundant are filtered. All
the complicated logic that was due when diff nodes were shared is
not relevant anymore.
(corpus_diff::priv::categorize_redundant_changed_sub_nodes)
(propagate_categories, apply_suppressions)
(diff_node_printer::diff_node_printer, print_diff_tree)
(categorize_redundant_changed_sub_nodes)
(clear_redundancy_categorization)
(clear_redundancy_categorization): Adjust.
(redundancy_marking_visitor::visit_begin): Adjust. Also, if the
current diff node is already being traversed (that's a clyclic
node) then mark it as redundant.
* src/abg-comp-filter.cc (apply_filter): Adjust.
* tests/data/test-diff-filter/test16-report-2.txt: New test input data.
* tests/data/test-diff-filter/libtest25-cyclic-type-v{0,1}.so: New
test input binaries.
* tests/data/test-diff-filter/test25-cyclic-type-v{0,1}.cc: Source
code for the test input binaries.
* tests/data/test-diff-filter/test25-cyclic-type-report-0.txt: New
test input data.
* tests/data/test-diff-filter/test25-cyclic-type-report-1.txt:
Likewise.
* tests/test-diff-filter.cc (in_out_specs): Add the new test
inputs above to the list of test input data over which to run this
test harness.
* tests/data/Makefile.am: Add the new test files above to source
distribution.
* tests/data/test-diff-filter/test16-report.txt: Adjust.
* tests/data/test-diff-filter/test17-0-report.txt: Likewise.
Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2015-01-24 19:51:16 +00:00
|
|
|
test-diff-filter/libtest25-cyclic-type-v0.so \
|
|
|
|
test-diff-filter/libtest25-cyclic-type-v1.so \
|
|
|
|
test-diff-filter/test25-cyclic-type-report-0.txt \
|
|
|
|
test-diff-filter/test25-cyclic-type-report-1.txt \
|
|
|
|
test-diff-filter/test25-cyclic-type-v0.cc \
|
|
|
|
test-diff-filter/test25-cyclic-type-v1.cc \
|
Fix chaining of descendant node of qualified type diff node
While looking at the abidiff report emitted for two versions of the
TBB library, I noticed that some diff nodes were not marked as
redundant as they should be. As a result, they were being reported as
having "been reported earlier", which seems to be an acceptable cruft
to me especially now that the comparison IR can do proper redundancy
detection and marking.
I tracked that down and it's because the child node of a
qualified_type_diff is just the underlying type diff node, whereas
during reporting, we report about the leaf underlying type diff node,
which can be different from the just the underlying type diff node
because the later is always non-qualified.
The fix is to make the child node of qualified_type_diff be the leaf
underlying type diff node, so that diff tree walking (for the purpose
of redundancy detection) and reporting are all looking at the same
tree.
* include/abg-comparison.h
(qualified_type_diff::leaf_underlying_type_diff): Declare new
accessor.
* src/abg-comparison.cc (get_leaf_type): Forward declare this
static function.
(qualified_type_diff::priv::leaf_underlying_type_diff): Define new
data member.
(qualified_type_diff::leaf_underlying_type_diff): Define this new
accessor.
(qualified_type_diff::chain_into_hierarchy): Call
leaf_underlying_type_diff() here rather than
underlying_type_diff().
(qualified_type_diff::report): Use leaf_underlying_type_diff()
rather than re-computing the diff between the two leaf underlying
type diff nodes.
* libtest26-qualified-redundant-node-v{0,1}.so: New binary test
input files.
* tests/data/test-diff-filter/test26-qualified-redundant-node-v{0,1}.cc:
Source code for the binary test inputs above.
* tests/test-diff-filter.cc (int_out_spec): Add the new test input
to the vector of test input data over which to run this test
harness.
* tests/data/test-diff-filter/test26-qualified-redundant-node-report-{0,1.txt:
New test input file.
* tests/data/Makefile.am: Add the new test input data to the
source distribution.
Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2015-01-26 10:38:08 +00:00
|
|
|
test-diff-filter/libtest26-qualified-redundant-node-v0.so \
|
|
|
|
test-diff-filter/libtest26-qualified-redundant-node-v1.so \
|
|
|
|
test-diff-filter/test26-qualified-redundant-node-report-0.txt \
|
|
|
|
test-diff-filter/test26-qualified-redundant-node-report-1.txt \
|
|
|
|
test-diff-filter/test26-qualified-redundant-node-v0.cc \
|
|
|
|
test-diff-filter/test26-qualified-redundant-node-v1.cc \
|
2015-03-13 12:30:01 +00:00
|
|
|
test-diff-filter/libtest27-redundant-and-filtered-children-nodes-v0.so \
|
|
|
|
test-diff-filter/libtest27-redundant-and-filtered-children-nodes-v1.so \
|
|
|
|
test-diff-filter/test27-redundant-and-filtered-children-nodes-report-0.txt \
|
|
|
|
test-diff-filter/test27-redundant-and-filtered-children-nodes-report-1.txt \
|
|
|
|
test-diff-filter/test27-redundant-and-filtered-children-nodes-report-2.txt \
|
|
|
|
test-diff-filter/test27-redundant-and-filtered-children-nodes-v0.cc \
|
|
|
|
test-diff-filter/test27-redundant-and-filtered-children-nodes-v1.cc \
|
Fix redundancy propagation on node with filtered local changes
Until now, if a diff node N has a local change, even if all of its
children nodes are redundant, N is not considered as being redundant.
This is an issue if the local changes of N are filtered out; in that
case, N should be considered redundant.
This patch fixes that. It introduces a second category bitmap on the
diff node that stores the categorization of the diff node that does
*NOT* take in account the categories inherited from its children
nodes. That way, it's possible to know if the *local changes* of a
given node have been filtered out.
* include/abg-comparison.h (diff::{get_local_category,
add_to_local_category, add_to_local_and_inherited_categories,
remove_from_local_category, set_local_category,
is_filtered_out_wrt_non_inherited_categories,
has_local_changes_to_be_reported}): Declare new member functions.
* src/abg-comp-filter.cc ({harmless, harmful}_filter::{visit,
visit_end}): Update local category too.
* src/abg-comparison.cc (diff::priv::local_category_): Add new
data member.
(diff::priv::priv): Initialize it.
(diff::priv::is_filtered_out): Add new member function. This is
factorized out of diff::is_filtered_out().
(diff::is_filtered_out): Re-write in terms of
diff::priv::is_filtered_out().
(diff::{get_local_category, add_to_local_category,
add_to_local_and_inherited_categories, remove_from_local_category,
set_local_category, is_filtered_out_wrt_non_inherited_categories,
has_local_changes_to_be_reported}): Define new member functions.
(suppression_categorization_visitor::visit_begin): Update local
categories too.
(redundancy_marking_visitor::visit_end): If all of the children
nodes of the a diff node N are redundant and if N has filtered-out
local changes, then N is redundant too.
* tests/data/test-diff-filter/libtest28-redundant-and-filtered-children-nodes-v{1,2}.so:
New binary test inputs.
* tests/data/test-diff-filter/test28-redundant-and-filtered-children-nodes-v{0,1}.cc:
Source code for the binary test inputs above.
* tests/data/test-diff-filter/test28-redundant-and-filtered-children-nodes-report-{0,1}.txt:
New test output references.
* tests/test-diff-filter.cc (in_out_specs): Add the test inputs
above to the set of inputs this test harness has to run over.
* tests/data/Makefile.am: Add the test materials above to the
source distribution.
Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2015-03-18 17:01:48 +00:00
|
|
|
test-diff-filter/libtest28-redundant-and-filtered-children-nodes-v0.so \
|
|
|
|
test-diff-filter/libtest28-redundant-and-filtered-children-nodes-v1.so \
|
|
|
|
test-diff-filter/test28-redundant-and-filtered-children-nodes-report-0.txt \
|
|
|
|
test-diff-filter/test28-redundant-and-filtered-children-nodes-report-1.txt \
|
|
|
|
test-diff-filter/test28-redundant-and-filtered-children-nodes-v0.cc \
|
|
|
|
test-diff-filter/test28-redundant-and-filtered-children-nodes-v1.cc \
|
Fix redundancy marking for change of types used directly
If a type T is used directly (i.e, not through a pointer or reference)
as a function parameter or as a base class, a change in T should never
be marked as redundant in that context. Otherwise, the change in that
context might be filtered out, possibly hiding real ABI incompatible
changes.
This patch implements this policy.
Also, it turned out in some circumstances, we where marking the first
visited diff node of a given class of equivalence of nodes as being
redundant, while we should only mark the *subsequently* visited nodes
of that class of equivalence as visited. The patch also fixes that.
* include/abg-comparison.h (pointer_map): Make this be a map of
{size_t, size_t} pairs, rather than {size_t, bool}, so that each
pointer in the map can be associated to another one.
(diff_context::diff_has_been_visited): Return the pointer to the
first diff node of the equivalence class that has been visited.
* src/abg-comparison.cc (is_pointer_diff, is_reference_diff)
(is_reference_or_pointer_diff, is_fn_parm_diff, is_base_diff)
(is_child_node_of_function_parm_diff, is_child_node_of_base_diff):
Define new static functions.
(diff_context::diff_has_been_visited): Return the pointer to the
first diff node of the equivalence class that has been visited.
(diff_context::mark_diff_as_visited): Save the pointer to the
first diff node of a given class of equivalence that has been
visited.
(redundancy_marking_visitor::visit_begin): If a diff node is a
child node of a function parameter diff or base diff node and if
it's not a pointer or reference diff node, then do not mark it as
redundant. Also, make sure to not mark the first diff node of a
given class of equivalence that has been visited, as redundant;
only the other subsequent nodes should be marked redundant; we
were hitting this case because of an optimization that makes
equivalent class diff nodes to share their private (pimpl) data.
* tests/data/test-diff-filter/test29-finer-redundancy-marking-v{0,1}.o:
New test input binaries.
* tests/data/test-diff-filter/test29-finer-redundancy-marking-v{0,1}.cc:
Source code of the new test input binaries above.
* tests/data/test-diff-filter/test29-finer-redundancy-marking-report-0.txt:
New test input.
* tests/data/Makefile.am: Add the new test material above to the
source distribution.
* tests/test-diff-filter.cc (in_out_specs): Make this test harness
run over the additional test input above.
* tests/data/test-diff-suppr/test5-fn-suppr-report-0.txt: Adjust.
Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2015-06-03 08:44:07 +00:00
|
|
|
test-diff-filter/test29-finer-redundancy-marking-report-0.txt \
|
|
|
|
test-diff-filter/test29-finer-redundancy-marking-v0.o \
|
|
|
|
test-diff-filter/test29-finer-redundancy-marking-v1.cc \
|
|
|
|
test-diff-filter/test29-finer-redundancy-marking-v0.cc \
|
|
|
|
test-diff-filter/test29-finer-redundancy-marking-v1.o \
|
2015-09-02 12:28:41 +00:00
|
|
|
test-diff-filter/test30-pr18904-rvalueref-liba.so \
|
|
|
|
test-diff-filter/test30-pr18904-rvalueref-libb.so \
|
|
|
|
test-diff-filter/test30-pr18904-rvalueref-report0.txt \
|
2015-09-24 09:00:12 +00:00
|
|
|
test-diff-filter/test31-pr18535-libstdc++-4.8.3.so \
|
|
|
|
test-diff-filter/test31-pr18535-libstdc++-4.9.2.so \
|
|
|
|
test-diff-filter/test31-pr18535-libstdc++-report-0.txt \
|
2014-11-20 10:26:30 +00:00
|
|
|
\
|
|
|
|
test-diff-suppr/test0-type-suppr-v0.cc \
|
|
|
|
test-diff-suppr/test0-type-suppr-v1.cc \
|
|
|
|
test-diff-suppr/test0-type-suppr-v0.o \
|
|
|
|
test-diff-suppr/test0-type-suppr-v1.o \
|
|
|
|
test-diff-suppr/test0-type-suppr-0.suppr \
|
|
|
|
test-diff-suppr/test0-type-suppr-1.suppr \
|
|
|
|
test-diff-suppr/test0-type-suppr-2.suppr \
|
|
|
|
test-diff-suppr/test0-type-suppr-report-0.txt \
|
|
|
|
test-diff-suppr/test0-type-suppr-report-1.txt \
|
|
|
|
test-diff-suppr/test0-type-suppr-report-2.txt \
|
|
|
|
test-diff-suppr/test0-type-suppr-report-3.txt \
|
|
|
|
test-diff-suppr/test1-typedef-suppr.h \
|
|
|
|
test-diff-suppr/test1-typedef-suppr-v0.c \
|
|
|
|
test-diff-suppr/test1-typedef-suppr-v1.c \
|
|
|
|
test-diff-suppr/test1-typedef-suppr-v0.o \
|
|
|
|
test-diff-suppr/test1-typedef-suppr-v1.o \
|
|
|
|
test-diff-suppr/test1-typedef-suppr-0.suppr \
|
|
|
|
test-diff-suppr/test1-typedef-suppr-1.suppr \
|
|
|
|
test-diff-suppr/test1-typedef-suppr-report-0.txt \
|
|
|
|
test-diff-suppr/test1-typedef-suppr-report-1.txt \
|
|
|
|
test-diff-suppr/test1-typedef-suppr-report-2.txt \
|
|
|
|
test-diff-suppr/test2-struct-suppr-0.suppr \
|
|
|
|
test-diff-suppr/test2-struct-suppr-1.suppr \
|
|
|
|
test-diff-suppr/test2-struct-suppr-report-0.txt \
|
|
|
|
test-diff-suppr/test2-struct-suppr-report-1.txt \
|
|
|
|
test-diff-suppr/test2-struct-suppr-v0.cc \
|
|
|
|
test-diff-suppr/test2-struct-suppr-v1.cc \
|
|
|
|
test-diff-suppr/test2-struct-suppr-v0.o \
|
|
|
|
test-diff-suppr/test2-struct-suppr-v1.o \
|
|
|
|
test-diff-suppr/test3-struct-suppr-0.suppr \
|
|
|
|
test-diff-suppr/test3-struct-suppr-1.suppr \
|
|
|
|
test-diff-suppr/test3-struct-suppr-report-0.txt \
|
|
|
|
test-diff-suppr/test3-struct-suppr-report-1.txt \
|
|
|
|
test-diff-suppr/test3-struct-suppr-report-2.txt \
|
|
|
|
test-diff-suppr/test3-struct-suppr-v0.cc \
|
|
|
|
test-diff-suppr/test3-struct-suppr-v0.o \
|
|
|
|
test-diff-suppr/test3-struct-suppr-v1.cc \
|
|
|
|
test-diff-suppr/test3-struct-suppr-v1.o \
|
|
|
|
test-diff-suppr/libtest4-local-suppr-v0.so \
|
|
|
|
test-diff-suppr/libtest4-local-suppr-v1.so \
|
|
|
|
test-diff-suppr/test4-local-suppr-0.suppr \
|
|
|
|
test-diff-suppr/test4-local-suppr-report-0.txt \
|
|
|
|
test-diff-suppr/test4-local-suppr-report-1.txt \
|
|
|
|
test-diff-suppr/test4-local-suppr-v0.c \
|
|
|
|
test-diff-suppr/test4-local-suppr-v0.h \
|
|
|
|
test-diff-suppr/test4-local-suppr-v1.c \
|
|
|
|
test-diff-suppr/test4-local-suppr-v1.h \
|
|
|
|
test-diff-suppr/libtest5-fn-suppr-v0.so \
|
|
|
|
test-diff-suppr/libtest5-fn-suppr-v1.so \
|
|
|
|
test-diff-suppr/test5-fn-suppr-0.suppr \
|
|
|
|
test-diff-suppr/test5-fn-suppr-1.suppr \
|
|
|
|
test-diff-suppr/test5-fn-suppr-2.suppr \
|
|
|
|
test-diff-suppr/test5-fn-suppr-3.suppr \
|
|
|
|
test-diff-suppr/test5-fn-suppr-4.suppr \
|
|
|
|
test-diff-suppr/test5-fn-suppr-report-0.txt \
|
|
|
|
test-diff-suppr/test5-fn-suppr-report-1.txt \
|
|
|
|
test-diff-suppr/test5-fn-suppr-report-2.txt \
|
|
|
|
test-diff-suppr/test5-fn-suppr-report-3.txt \
|
|
|
|
test-diff-suppr/test5-fn-suppr-report-4.txt \
|
|
|
|
test-diff-suppr/test5-fn-suppr-report-5.txt \
|
|
|
|
test-diff-suppr/test5-fn-suppr-v0.cc \
|
|
|
|
test-diff-suppr/test5-fn-suppr-v1.cc \
|
|
|
|
test-diff-suppr/libtest6-fn-suppr-v0.so \
|
|
|
|
test-diff-suppr/libtest6-fn-suppr-v1.so \
|
|
|
|
test-diff-suppr/test6-fn-suppr-0.suppr \
|
|
|
|
test-diff-suppr/test6-fn-suppr-1.suppr \
|
|
|
|
test-diff-suppr/test6-fn-suppr-2.suppr \
|
|
|
|
test-diff-suppr/test6-fn-suppr-3.suppr \
|
|
|
|
test-diff-suppr/test6-fn-suppr-report-0.txt \
|
|
|
|
test-diff-suppr/test6-fn-suppr-report-1.txt \
|
|
|
|
test-diff-suppr/test6-fn-suppr-report-2.txt \
|
|
|
|
test-diff-suppr/test6-fn-suppr-report-3.txt \
|
|
|
|
test-diff-suppr/test6-fn-suppr-report-4.txt \
|
|
|
|
test-diff-suppr/test6-fn-suppr-v0.cc \
|
|
|
|
test-diff-suppr/test6-fn-suppr-v1.cc \
|
|
|
|
test-diff-suppr/test6-fn-suppr-version-script \
|
|
|
|
test-diff-suppr/libtest7-var-suppr-v0.so \
|
|
|
|
test-diff-suppr/libtest7-var-suppr-v1.so \
|
|
|
|
test-diff-suppr/test7-var-suppr-v0.cc \
|
|
|
|
test-diff-suppr/test7-var-suppr-v1.cc \
|
|
|
|
test-diff-suppr/test7-var-suppr-1.suppr \
|
|
|
|
test-diff-suppr/test7-var-suppr-2.suppr \
|
|
|
|
test-diff-suppr/test7-var-suppr-3.suppr \
|
|
|
|
test-diff-suppr/test7-var-suppr-4.suppr \
|
|
|
|
test-diff-suppr/test7-var-suppr-5.suppr \
|
|
|
|
test-diff-suppr/test7-var-suppr-6.suppr \
|
|
|
|
test-diff-suppr/test7-var-suppr-7.suppr \
|
|
|
|
test-diff-suppr/test7-var-suppr-8.suppr \
|
|
|
|
test-diff-suppr/test7-var-suppr-report-0.txt \
|
|
|
|
test-diff-suppr/test7-var-suppr-report-1.txt \
|
|
|
|
test-diff-suppr/test7-var-suppr-report-2.txt \
|
|
|
|
test-diff-suppr/test7-var-suppr-report-3.txt \
|
|
|
|
test-diff-suppr/test7-var-suppr-report-4.txt \
|
|
|
|
test-diff-suppr/test7-var-suppr-report-5.txt \
|
|
|
|
test-diff-suppr/test7-var-suppr-report-6.txt \
|
|
|
|
test-diff-suppr/test7-var-suppr-report-7.txt \
|
|
|
|
test-diff-suppr/test7-var-suppr-report-8.txt \
|
|
|
|
test-diff-suppr/test7-var-suppr-version-script \
|
Un-share diff nodes in the comparison IR
Until now, the diff nodes of the comparison IR were shared. That is,
two diffs about the same subjects were represented by the same diff
node that would appear twice in the tree.
This was preventing us from spotting e.g, the first occurrence of a
diff node that would later (in the tree) turn to be redundant because
all redundant diff nodes are represented by the same diff node
pointer.
This patch now makes each diff node be different, as far of pointer
comparison is concerned. But it introduces the concept of canonical
diff node to ease the comparison between two diff nodes. Two diff
nodes that are equal have the same canonical diff node.
With this facility, it's now possible to tell the difference between
diff nodes that are (structurally) equal. It's not possible to say
things like "this is the first or second occurrence of the redundant
diff node foo'.
* include/abg-ir.h: Prefix the doc string with "///", rather than
writing it inside a /**/ comment.
* include/abg-comparison.h (function_decl_diff)
(function_decl_diff_sptr, fn_parm_diff, fn_parm_diff_sptr)
(var_diff_sptr, base_diff, class_diff, class_diff_sptr): Move
these class & typedef decls to the top of the file.
(string_changed_base_map, string_changed_parm_map)
(unsigned_changed_parm_map, changed_function_ptr)
(string_changed_function_ptr_map): Remove these typedefs.
(string_base_diff_sptr_map, string_fn_parm_diff_sptr_map)
(unsigned_fn_parm_diff_sptr_map, string_var_diff_sptr_map)
(unsigned_var_diff_sptr_map, string_function_decl_diff_sptr_map)
(string_var_diff_ptr_map): New typedefs.
(diff_context::{has_diff_for,add_diff}): Make these member
functions private.
(diff_context::{set_canonical_diff_for,
set_or_get_canonical_diff_for}): Declare new private member
functions.
(diff_context::{get_canonical_diff_for,
initialize_canonical_diff}): New public member functions.
(diff_context::maybe_apply_filters): Set the default value of the
'traverse_nodes_once' parameter to false.
(compute_diff): Make the overload for class_decl_sptr friend of
the diff_context class.
(class diff): Make the diff_context class a friend of this one.
(diff::set_canonical_diff): Declare new private member function.
(diff::get_canonical_diff): Declare new public member function.
(diff::children_nodes): Make this return a vector<diff_sptr>, rather
than a vector<diff*>.
(diff::append_child_node): Make this take a diff_sptr rather than
a diff*.
(class fn_parm_diff): Declare new type.
(compute_diff): Declare new overload for the new
function_decl::parameter_sptr.
(function_decl_diff::subtype_changed_parms): Return a
string_fn_parm_diff_sptr_map rather than a string_changed_parm.
(function_decl_diff::children_nodes): Return a vector<diff_sptr>.
(function_decl_diff::append_child_node): Take a diff_sptr.
(function_decl_diff::changed_functions): Return a
string_function_decl_diff_sptr_map.
(function_decl_diff::changed_variables): Return a
string_var_diff_sptr.
(class function_decl::parameter): Make this a pimpled class.
Also, make it inherit decl_base.
(equals): New overload for function_decl::parameter.
(struct function_decl::parameter::hash): Declare this.
(ir_node_visitor::visit): Declare new overload for
function_decl::parameter.
* src/abg-comparison.cc: Add doc-string about the internal
representation of the comparison engine and also about the concept
of canonical diff of the comparison engine.
(RETURN_IF_BEING_REPORTED_OR_WAS_REPORTED_EARLIER)
(RETURN_IF_BEING_REPORTED_OR_WAS_REPORTED_EARLIER2)
(RETURN_IF_BEING_REPORTED_OR_WAS_REPORTED_EARLIER3): Consider the
canonical diff when trying to know if the current node was
reported earlier.
(diff_context::priv::canonical_diffs): New data member.
(diff_context::{get_canonical_diff_for, set_canonical_diff_for,
set_or_get_canonical_diff_for, initialize_canonical_diff}): Define
new member functions.
(diff_context::{diff_has_been_traversed, mark_diff_as_traversed):
Consider canonical diff for these tests and actions.
(diff::priv::children_): Change the type of this to
vector<diff_sptr>.
(diff::canonical_diff_): New data member.
(diff::diff): Initialize the diff::canonical_diff_ data member.
(diff::begin_traversing): Mark the canonical diff node too.
(diff::is_traversing): Consider the canonical diff node in this
test.
(diff::end_traversing): Make the canonical diff node too. Also
mark the current node as having been traversed.
(diff::children_nodes): Return a vector<diff_sptr> type.
(diff::{get_canonical_diff, set_canonical_diff}): Define new
member functions.
(diff::append_child_node): Take a diff_sptr type parameter.
(diff::{reported_once, currently_reporting}): Flag the canonical
diff node too. And consider the canonical diff node when checking
the flag.
(diff::traverse): No need to mark the node as being traversed
because the diff::end_traversing() function does it now. Adjust
the code because diff::children_nodes() now returns
vector<diff_sptr>.
({distinct_diff, var_diff, pointer_diff, array_diff,
reference_diff, qualified_type_diff, enum_diff, class_diff,
base_diff, scope_diff, function_decl_diff, typedef_diff,
corpus_diff}::chain_into_hierarchy): Adjust to the new type that
diff::append_child_node() takes. Also, take into account that the
diff nodes are now un-shared.
(compute_diff_for_distinct_kinds, compute_diff_for_types)
(compute_diff): Do not share diff nodes anymore. Initialize the
canonical diff node for the new created node.
(represent): Take a var_diff_sptr rather than two var_decl_sptr.
Adjust. Also take in account the fact that diff nodes are not
shared anymore, and that they do have canonical diffs.
(var_diff::type_diff): Make the computation of the type_diff of
the var_diff be lazy. This avoids infinite (recursive) creation
of diff nodes when a class diff node has a sub-type of data member
that is a class diff node too.
(var_diff::report): Detect redundant reporting of this kind of
diff node.
(class_diff::priv::changed_bases_): Change the type of this to
string_base_diff_sptr_map.
(class_diff::priv::subtype_changed_dm_): Change the type of this
to string_var_diff_sptr_map.
(class_diff::priv::changed_dm_): Change the type of this to
unsigned_var_diff_sptr_map.
(class_diff::priv::{count_filtered_subtype_changed_dm,
count_filtered_bases}): Do not take a diff_context_sptr anymore.
(class_diff::ensure_lookup_tables_populated): changed_bases_
subtype_changed_dm_ and changed_dm_ are now *NOT* shared diff
nodes anymore.
(class_diff::priv::base_has_changed): Adjust.
(class_diff::priv::subtype_changed_dm): Adjust.
(class_diff::priv::count_filtered_bases): Adjust as changed_bases_
is now a map of un-shared diff nodes.
(class_diff::priv::count_filtered_subtype_changed_dm): Adjust as
subtype_changed_dm_ is now a map of un-shared diff nodes.
(class_diff::priv::{count_filtered_changed_mem_fns,
count_filtered_inserted_mem_fns, count_filtered_deleted_mem_fns,
}): Adjust for change of the default parameter value of
diff_context::maybe_apply_filters().
(class_diff::~class_diff): New destructor.
(class_diff::changed_bases): Return a string_base_diff_sptr_map&
type.
(class_diff::{inserted_data_members, deleted_data_members,
changed_member_fns}): Add doc strings.
(struct changed_data_member_comp): Remove.
(struct var_diff_comp): New comparison functor.
(sort_changed_data_members): Remove.
(sort_var_diffs): Define new sorting function.
(class_diff::report): Adjust.
(fn_parm_diff::*): Define member types and functions of the new
fn_parm_diff type.
(function_decl_diff::priv::{subtype_changed_parms_,
changed_parms_by_id_}): Make these take a map of fn_parm_diff_sptr
nodes.
(function_decl_diff::ensure_lookup_tables_populated): Adjust to
the fact that priv_->subtype_changed_parms_ and
priv_->priv_->changed_parms_by_id_ now are maps of un-shared
fn_parm_diff_sptr nodes.
(function_decl_diff::subtype_changed_parms): Adjust.
(struct changed_parm_comp): Remove.
(struct fn_parm_diff_comp): New comparison functor.
(sort_changed_parm_map): Remove.
(sort_string_fn_parm_diff_sptr_map): New sorting function.
(function_decl_diff::report): Adjust.
(corpus_diff::priv::children_): Change the type of this to
vector<diff_sptr>.
(corpus_diff::priv::changed_fns_): Changed the type of this to
string_function_decl_diff_sptr_map.
(corpus_diff::priv::changed_vars_): Changed the type of this to
string_var_diff_sptr_map.
(corpus_diff::priv::ensure_lookup_tables_populated): Adjust.
(corpus_diff::priv::apply_filters_and_compute_diff_stats}):
Adjust. Do not need to clear redundancy categorization anymore
because the diff nodes are not shared anymore.
(corpus_diff::priv::categorize_redundant_changed_sub_nodes):
Adjust.
(corpus_diff::priv::clear_redundancy_categorization): Adjust.
(corpus_diff::changed_variables): Adjust.
(struct changed_function_ptr_comp): Remove.
(struct function_decl_diff_comp): New comparison functor.
(sort_string_changed_function_ptr_map): Remove.
(sort_string_function_decl_diff_sptr_map): Define new sorting
function.
(struct changed_vars_comp): Remove.
(struct var_diff_sptr_comp): New comparison functor.
(sort_changed_vars): Remove.
(sort_string_var_diff_sptr_map): Define new sorting function.
(corpus_diff::report): Adjust.
(corpus_diff::traverse): Adjust.
({category_propagation_visitor,
suppression_categorization_visitor}::visit_end): Adjust.
(clear_redundancy_categorization): Adjust.
* src/abg-hash.cc (function_decl::parameter::hash::operator):
Adjust.
* src/abg-ir.cc (struct function_decl::parameter::priv): Define
here as part of pimpl-ifying the function_decl::parameter type.
(function_decl::parameter::*): Define here the member functions as
part of pimpl-ifying the function_decl::parameter type.
(equals): Define the overload for function_decl::parameter here
too.
(ir_node_visitor::visit(function_decl::parameter*)): Define this.
* tests/data/test-abicompat/test0-fn-changed-report-0.txt: Adjust.
* tests/data/test-diff-suppr/test5-fn-suppr-report-0.txt: Adjust.
* tests/data/test-diff-dwarf/libtest21-redundant-fn-v0.so: New
test input data.
* tests/data/test-diff-dwarf/libtest21-redundant-fn-v1.so:
Likewise.
* tests/data/test-diff-dwarf/test21-redundant-fn-v0.cc: Source
code for test input binary above.
* tests/data/test-diff-dwarf/test21-redundant-fn-v1.cc: Likewise.
* tests/data/test-diff-dwarf/test21-redundant-fn-report-0.txt: New
test input data.
* tests/data/test-diff-dwarf/libtest22-changed-parm-c-v0.so: New
test input data.
* tests/data/test-diff-dwarf/libtest22-changed-parm-c-v1.so:
Likewise.
* tests/data/test-diff-dwarf/test22-changed-parm-c-v0.c: Source
code for test input binary above.
* tests/data/test-diff-dwarf/test22-changed-parm-c-v1.c: Likewise.
* tests/test-diff-dwarf.cc (in_out_spec): Add the new test input
data to the vector the test inputs to run this harness over.
* tests/data/test-diff-suppr/test8-redundant-fn-report-0.txt: New
test input data.
* tests/data/test-diff-suppr/test8-redundant-fn-report-1.txt:
Likewise.
* tests/data/test-diff-suppr/libtest8-redundant-fn-v0.so: New test
input binary.
* tests/data/test-diff-suppr/libtest8-redundant-fn-v1.so: Likewise.
* tests/data/test-diff-suppr/test8-redundant-fn-v0.cc: Source code
code for binary test input above.
* tests/data/test-diff-suppr/test8-redundant-fn-v1.cc: Likewise.
* tests/data/test-diff-suppr/test9-changed-parm-c-report-0.txt:
New test input data.
* tests/data/test-diff-suppr/test9-changed-parm-c-report-1.txt:
Likewise.
* tests/data/test-diff-suppr/libtest9-changed-parm-c-v0.so: New
test input binary.
* tests/data/test-diff-suppr/libtest9-changed-parm-c-v1.so: New
test input binary.
* tests/data/test-diff-suppr/test9-changed-parm-c-v0.c: Source
code for binary test input above.
* tests/data/test-diff-suppr/test9-changed-parm-c-v1.c: Likewise.
* tests/test-diff-suppr.cc (in_out_specs): Add the new test input
data to the vector the test inputs to run this harness over.
* tests/data/Makefile.am: Add the new files to the source
distribution.
Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2014-12-26 12:22:16 +00:00
|
|
|
test-diff-suppr/libtest8-redundant-fn-v0.so \
|
|
|
|
test-diff-suppr/libtest8-redundant-fn-v1.so \
|
|
|
|
test-diff-suppr/test8-redundant-fn-report-0.txt \
|
|
|
|
test-diff-suppr/test8-redundant-fn-report-1.txt \
|
|
|
|
test-diff-suppr/test8-redundant-fn-v0.cc \
|
|
|
|
test-diff-suppr/test8-redundant-fn-v1.cc \
|
|
|
|
test-diff-suppr/libtest9-changed-parm-c-v0.so \
|
|
|
|
test-diff-suppr/libtest9-changed-parm-c-v1.so \
|
|
|
|
test-diff-suppr/test9-changed-parm-c-report-0.txt \
|
|
|
|
test-diff-suppr/test9-changed-parm-c-report-1.txt \
|
|
|
|
test-diff-suppr/test9-changed-parm-c-v0.c \
|
|
|
|
test-diff-suppr/test9-changed-parm-c-v1.c \
|
2014-12-26 13:46:27 +00:00
|
|
|
test-diff-suppr/libtest10-changed-parm-c-v0.so \
|
|
|
|
test-diff-suppr/libtest10-changed-parm-c-v1.so \
|
|
|
|
test-diff-suppr/test10-changed-parm-c-report-0.txt \
|
|
|
|
test-diff-suppr/test10-changed-parm-c-v0.c \
|
|
|
|
test-diff-suppr/test10-changed-parm-c-v1.c \
|
Support specifying data member insertion in suppressions
This patch is for supporting this kind of things:
[suppress_type]
name = S
has_data_member_inserted_between = {8, end}
or:
[suppress_type]
name = S
has_data_members_inserted_between = {{8, 31}, {64, end}}
or:
[suppress_type]
name = S
has_data_members_inserted_at = offset_after(member0)
How cool is that, heh?
Anyway, to do this, the patch adds support for tuple values (i.e,
lists of values) in INI files.
Then on top of that the patch adds support for the specific
has_data_member_inserted_between, has_data_members_inserted_between
and has_data_members_inserted_at properties.
* include/abg-comparison.h (type_suppression::insertion_range):
Declare new type.
(type_suppression::insertion_ranges): Declare new typedef.
(type_suppression::{s,g}et_data_member_insertion_ranges): Declare
new member functions.
(is_integer_boundary, is_fn_call_expr_boundary): Declare new
functions.
(type_suppression::insertion_range::{boundary, integer_boundary,
fn_call_expr_boundary}): Define new types.
* src/abg-comparison.cc:
(struct type_suppression::insertion_range::priv): New type.
(type_suppression::insertion_range::{insertion_range, begin,
end}): Define new member functions.
(type_suppression::priv::insertion_ranges_): Add data member.
(type_suppression::{s,g}et_data_member_insertion_ranges): Define
new member functions.
(type_suppression::insertion_range::boundary::priv): Define new
type.
(type_suppression::insertion_range::boundary::{boundary,
~boundary}): Define new member functions.
(type_suppression::insertion_range::integer_boundary::priv):
Define new type.
(type_suppression::insertion_range::integer_boundary::{integer_boundary,
as_integer, operator int, ~integer_boundary}): Define member
functions.
(type_suppression::insertion_range::fn_call_expr_boundary::priv):
Define new type.
(type_suppression::insertion_range::fn_call_expr_boundary::{fn_call_expr_boundary,
as_function_call_expr, operator ini::function_call_expr_sptr}):
Define new member functions.
(type_suppression::insertion_range::{create_integer_boundary,
type_suppression::insertion_range::create_fn_call_expr_boundary,
type_suppression::insertion_range::eval_boundary}): Define new
member functions.
(is_integer_boundary, is_fn_call_expr_boundary): Define new
functions.
(read_type_suppression, read_function_suppression)
(read_variable_suppression): Support the new kinds of
property-related types. Aslo, in read_type_suppression, support
the new properties has_data_member_inserted_at,
has_data_member_inserted_between and
has_data_members_inserted_between.
(type_suppression::suppresses_diff): If we are looking at a type
diff node that has inserted data members, evaluate the insertion
ranges of the current type_suppression and see if they match the
inserted data members.
* include/abg-ini.h (property, simple_property, property_value)
(string_property_value, tuple_property_value, function_call_expr):
Declare new types.
(property_sptr, property_value_sptr, string_property_value_sptr)
(tuple_property_value_sptr): Declare new typedefs.
(is_string_property_value, is_tuple_property_value)
(is_simple_property, is_tuple_property, read_function_call_expr):
Declare new functions.
* src/abg-ini.cc (char_is_white_space, char_is_comment_start)
(char_is_delimiter, char_is_property_value_char)
(char_is_section_name_char, char_is_property_name_char)
(char_is_comment_start, char_is_white_space)
(remove_trailing_white_spaces, is_string_property_value)
(is_tuple_property_value, is_simple_property, is_tuple_property)
(write_property_value, char_is_function_name_char)
(char_is_function_argument_char): Define new functions.
(property::priv, tuple_property_value::priv)
(simple_property::priv, tuple_property::priv): Define new types.
(property::{property, get_name, set_name, ~property}): Define new
member functions.
(struct property_value::priv): Define new type.
(property_value::{property_value, get_kind, operator const
string&(), ~property_value}): Define new member functions.
(struct string_property_value::priv): Define new type.
(string_property_value::{string_property_value, set_content,
as_string, operator string()}, ~string_property_value): Define new
member functions.
(tuple_property_value::{tuple_property_value, get_value_items,
~tuple_property_value, as_string}): Likewise.
(simple_property::{simple_property, get_value, set_value,
~simple_property}): Likewise.
(tuple_property::{tuple_property, set_value, get_value}):
Likewise.
(config::section::find_property): Adjust return type.
(read_context::{char_is_delimiter, char_is_property_value_char,
char_is_section_name_char, char_is_property_name_char,
char_is_comment_start, char_is_white_space}): Remove these from
here as they got moved them to be non-member functions above.
(read_context::read_property_value): Return a property_value_sptr
and do not take any parameter anymore.
(read_context::{read_string_property_value,
read_tuple_property_value, read_function_name,
read_function_argument, read_function_call_expr}): Define new
member functions.
(read_context::read_property): Adjust return type. Also, change to read
the different new kinds of properties values.
(function_call_expr::priv): Define new type.
(function_call_expr::{function_call_expr, get_name,
get_arguments}): New member functions.
(read_context::read_section): Adjust.
(write_property, write_section): Adjust.
* tests/data/test-diff-suppr/libtest{11,12}-add-data-member-v{0,1}.so:
New test input binaries.
* tests/data/test-diff-suppr/test{11,12}-add-data-member-{0,1}.suppr:
New input suppression files.
* tests/data/test-diff-suppr/test11-add-data-member-{2,3,4}.suppr:
Add new test input files.
* tests/data/test-diff-suppr/test{11,12}-add-data-member-report-{0,1}.txt:
New reference output files.
* tests/data/test-diff-suppr/test12-add-data-member-report-2.txt:
Likewise.
* tests/data/test-diff-suppr/test{11,12}-add-data-member-v{0,1}.cc:
Source code for the new binaries above.
* tests/test-diff-suppr.cc (in_out_specs): Add new test inputs.
* tests/data/Makefile.am: Add the new test related files above to
source distribution.
* doc/manuals/libabigail-concepts.rst: Document the new properties
has_data_member_inserted_at, has_data_member_inserted_between and
has_data_members_inserted_between.
Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2015-04-22 18:40:57 +00:00
|
|
|
test-diff-suppr/libtest11-add-data-member-v0.so \
|
|
|
|
test-diff-suppr/libtest11-add-data-member-v1.so \
|
|
|
|
test-diff-suppr/test11-add-data-member-0.suppr \
|
|
|
|
test-diff-suppr/test11-add-data-member-1.suppr \
|
|
|
|
test-diff-suppr/test11-add-data-member-2.suppr \
|
|
|
|
test-diff-suppr/test11-add-data-member-3.suppr \
|
|
|
|
test-diff-suppr/test11-add-data-member-4.suppr \
|
|
|
|
test-diff-suppr/test11-add-data-member-report-0.txt \
|
|
|
|
test-diff-suppr/test11-add-data-member-report-1.txt \
|
|
|
|
test-diff-suppr/test11-add-data-member-v0.cc \
|
|
|
|
test-diff-suppr/test11-add-data-member-v1.cc \
|
|
|
|
test-diff-suppr/libtest12-add-data-member-v0.so \
|
|
|
|
test-diff-suppr/libtest12-add-data-member-v1.so \
|
|
|
|
test-diff-suppr/test12-add-data-member-0.suppr \
|
|
|
|
test-diff-suppr/test12-add-data-member-1.suppr \
|
|
|
|
test-diff-suppr/test12-add-data-member-report-0.txt \
|
|
|
|
test-diff-suppr/test12-add-data-member-report-1.txt \
|
|
|
|
test-diff-suppr/test12-add-data-member-report-2.txt \
|
|
|
|
test-diff-suppr/test12-add-data-member-v0.cc \
|
|
|
|
test-diff-suppr/test12-add-data-member-v1.cc \
|
Support new 'accessed_through' suppression property
It turned out it's important to be able to suppress changes about
types that are reachable from a function parameter only through e.g, a
pointer or a reference, so that only changes types that are reachable
directly from a function parameter are emitted.
This patch adds that feature.
While doing this, I noticed this: Suppose a diff node D2 is marked as
being redundant with a diff node D1 seen previously. So only D1 is
reported; D2 is not, because it's been filtered out, because it's
redundant with D1. But then suppose D1 is filtered out, due to a
suppression specification. At that point, D2 should not be marked
redundant anymore, and should be reported.
Of course, the code before this patch was wrongly filtering D2 *and*
D1 out. So this patch fixes that.
* include/abg-comparison.h (enum type_suppression::reach_kind):
Define new enum.
(type_suppression::{get_consider_reach_kind,
set_consider_reach_kind, get_reach_kind,
mark_last_diff_visited_per_class_of_equivalence,
clear_last_diffs_visited_per_class_of_equivalence,
get_last_visited_diff_of_class_of_equivalence}): Declare new
member functions.
* src/abg-comparison.cc (diff_has_ancestor_filtered_out)
(read_suppression_reach_kind): Define static function.
(type_suppression::priv::{consider_reach_kind_, reach_kind_}):
Define new data members.
(type_suppression::priv::priv): Take a new reach_kind parameter.
(type_suppression::type_suppression): Adjust to new prototype of
priv constructor.
(type_suppression::{get_consider_reach_kind,
set_consider_reach_kind, get_reach_kind, set_reach_kind}): Define
new member functions.
(type_suppression::suppresses_diff): Interpret the result of
type_suppression::get_reach_kind() to determine if the suppression
specification suppresses a given diff node.
(read_type_suppression): Support reading the content of the
"accessed_through" property.
(diff_context::priv::last_visited_diff_node_): New data member.
(diff_context::{mark_last_diff_visited_per_class_of_equivalence,
clear_last_diffs_visited_per_class_of_equivalence,
get_last_visited_diff_of_class_of_equivalence}): Define new data
members.
(redundancy_marking_visitor::visit_begin): So if the current diff
node has already been visited, but if the previously visited node
has been filtered out, then do not mark this node as being
redundant. And mark the current diff node as being the last
visited one in its class of equivalence.
(categorize_redundancy): Clear the map of diff nodes visited per
class of equivalence.
* doc/manuals/libabigail-concepts.rst: Document the new
'accessed_through' property.
* tests/data/test-diff-suppr/test13-suppr-through-pointer-0.suppr:
New test input data.
* tests/data/test-diff-suppr/test13-suppr-through-pointer-report-{0,1}.txt:
Likewise.
* tests/data/test-diff-suppr/libtest13-suppr-through-pointer-v{0,1}.so:
New test input binaries.
* tests/data/test-diff-suppr/test13-suppr-through-pointer-v{0,1}.cc:
Source code of the test input binaries above.
* tests/data/test-diff-suppr/test14-suppr-non-redundant-0.suppr:
New test input data.
* tests/data/test-diff-suppr/test14-suppr-non-redundant-report-0.txt:
Likewise.
* tests/data/test-diff-suppr/test14-suppr-non-redundant-v{0,1}.o:
New test input binaries.
* tests/data/test-diff-suppr/test14-suppr-non-redundant-v{0,1}.cc:
Source code of the binaries above.
Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2015-06-03 17:02:13 +00:00
|
|
|
test-diff-suppr/libtest13-suppr-through-pointer-v0.so \
|
|
|
|
test-diff-suppr/libtest13-suppr-through-pointer-v1.so \
|
|
|
|
test-diff-suppr/test13-suppr-through-pointer-0.suppr \
|
|
|
|
test-diff-suppr/test13-suppr-through-pointer-report-0.txt \
|
|
|
|
test-diff-suppr/test13-suppr-through-pointer-report-1.txt \
|
|
|
|
test-diff-suppr/test13-suppr-through-pointer-v0.cc \
|
|
|
|
test-diff-suppr/test13-suppr-through-pointer-v1.cc \
|
|
|
|
test-diff-suppr/test14-suppr-non-redundant-v0.o \
|
|
|
|
test-diff-suppr/test14-suppr-non-redundant-v1.o \
|
|
|
|
test-diff-suppr/test14-suppr-non-redundant-0.suppr \
|
|
|
|
test-diff-suppr/test14-suppr-non-redundant-report-0.txt \
|
|
|
|
test-diff-suppr/test14-suppr-non-redundant-report-1.txt \
|
|
|
|
test-diff-suppr/test14-suppr-non-redundant-v0.cc \
|
|
|
|
test-diff-suppr/test14-suppr-non-redundant-v1.cc \
|
Apply suppression specifications to added and removed functions and variables
Until now, specifications for suppressing change reports were applied
only to functions and variables that have sub-type changes. Change
reports about function and variables that were added or removed could
not be suppressed.
This patch makes suppression specifications to apply to added and
removed functions and variables too. They can also apply to function
and variable symbols that are not referenced by any debug info.
The patch also fixes some typo and formatting glitches and updates
some existing tests accordingly.
* include/abg-comparison.h (is_type_suppression)
(is_function_suppression): Declare new functions.
({function, variable}_suppression::change_kind): Declare new enum.
(function_suppression::{parse_change_kind, get_change_kind,
set_change_kind, suppresses_function,
suppresses_function_symbol}): Declare new member functions.
(variable_suppression::{parse_change_kind, get_change_kind,
set_change_kind, suppresses_variable, suppresses_variable,
suppresses_variable_symbol}): Declare new member functions.
(operator{&,|}): Declare new operators for
function_suppression::change_kind and
variable_suppression::change_kind enums.
(corpus_diff::diff_stats::{num_removed_func_filtered_out,
net_num_func_removed, num_added_func_filtered_out,
net_num_func_added, num_removed_vars_filtered_out,
net_num_vars_removed, num_added_vars_filtered_out,
net_num_vars_added, num_removed_func_syms_filtered_out,
num_added_func_syms_filtered_out, net_num_removed_func_syms,
net_num_added_func_syms, num_added_var_syms_filtered_out,
num_removed_vars_filtered_out, net_num_removed_var_syms,
net_num_added_var_syms}): Declare new member functions.
(corpus_diff::diff_stats::num_changed_vars_filtered_out): Renamed
corpus_diff::diff_stats::num_vars_filtered_out into this.
(corpus_diff::diff_stats::num_changed_func_filtered_out): Renamed
corpus_diff::diff_stats::num_func_filtered_out into this.
* src/abg-comparison.cc (is_type_suppression)
(is_function_suppression): Define new
function.
(function_suppression::priv::change_kind): New data member.
(function_suppression::priv): Initialize it.
(function_suppression::{parse_change_kind, get_change_kind,
set_change_kind, suppresses_function,
suppresses_function_symbol}): Define new member functions.
(operator{&,|}): Define new operators for the new
function_suppression::change_kind enum.
(function_suppression::suppresses_diff): Re-write this in terms of
the new function_suppression::suppresses_function() function.
(read_function_suppression): Support reading the new "change_kind"
property.
(variable_suppression::priv::change_kind_): New data member.
(variable_suppression::priv::priv): Initialize it.
(variable_suppression::{parse_change_kind, get_change_kind,
set_change_kind, suppresses_variable,
suppresses_variable_symbol}): Define new member functions.
(is_variable_suppression): Define new function.
(operator{&,|}): Define new operators for
variable_suppression::change_kind enum.
(variable_suppression::suppresses_diff): Re-write in terms of the
new variable_suppression::suppresses_variable function.
(read_variable_suppression): Support reading the new "change_kind"
property.
(corpus_diff::diff_stats::priv::{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}): New data members.
(corpus_diff::diff_stats::priv::num_changed_func_filtered_out):
Renamed the data member num_func_filtered_out into this.
(corpus_diff::diff_stats::priv::num_changed_vars_filtered_out):
Renamed data member num_vars_filtered_out into this.
(corpus_diff::diff_stats::priv::priv): Initialize the new data
members.
(corpus_diff::diff_stats::{num_removed_func_filtered_out,
num_removed_func_filtered_out, net_num_func_removed,
net_num_func_added, num_added_func_filtered_out,
net_num_func_added, num_removed_vars_filtered_out,
num_removed_vars_filtered_out, net_num_vars_removed,
num_added_vars_filtered_out, net_num_vars_added,
num_removed_func_syms_filtered_out,
num_added_func_syms_filtered_out, net_num_removed_func_syms,
net_num_added_func_syms, num_added_var_syms_filtered_out,
num_removed_vars_filtered_out, net_num_removed_var_syms,
net_num_added_var_syms}): Define new member functions.
(corpus_diff::diff_stats::num_changed_func_filtered_out): Renamed
corpus_diff::diff_stats::num_func_filtered_out into this.
(corpus_diff::diff_stats::num_changed_vars_filtered_out): Renamed
corpus_diff::diff_stats::num_vars_filtered_out into this.
(corpus_diff::diff_stats::{net_num_func_changed,
net_num_vars_changed}): Adjust.
(corpus_diff::priv::{suppressed_deleted_fns_,
suppressed_added_fns_, suppressed_deleted_vars_,
suppressed_added_vars_, suppressed_added_unrefed_fn_syms_,
suppressed_deleted_unrefed_fn_syms_,
suppressed_added_unrefed_var_syms_,
suppressed_deleted_unrefed_fn_syms_}): New data members.
(corpus_diff::priv::{apply_suppressions_to_added_removed_fns_vars,
deleted_function_is_suppressed, added_function_is_suppressed,
deleted_variable_is_suppressed, added_variable_is_suppressed,
added_unrefed_fn_sym_is_suppressed,
deleted_unrefed_fn_sym_is_suppressed,
added_unrefed_var_sym_is_suppressed,
deleted_unrefed_var_sym_is_suppressed}): Define member functions.
(function_is_suppressed, variable_is_suppressed): Define new
functions.
(corpus_diff::priv::apply_filters_and_compute_diff_stats): Compute
stats for filtered added or removed functions, variables and their
symbols.
(corpus_diff::priv::emit_diff_stats): Emit diff stats for filtered
added or removed functions, variables and symbols.
(corpus_diff::report): Support suppressed reports about added or
removed functions, variables and symbols. Fixed a typo that was
in there for a while. Note that that fix requires updating some
regression tests, and the part of this patch that touches
regression tests does that.
(apply_suppressions): In the overload for corpus_diff, apply the
suppression to added or removed functions and variables.
* doc/manuals/libabigail-concepts.rst: Update this manual to
reflect the changes above. Also, perform an extensive cleanup of
the manual to introduce more section titles to make it easier to
navigate the document using the table of content.
* tests/data/test-abicompat/test2-var-removed-report-0.txt:
Adjust.
* tests/data/test-diff-dwarf/test0-report.txt: Likewise.
* tests/data/test-diff-dwarf/test12-report.txt: Likewise.
* tests/data/test-diff-dwarf/test18-alias-sym-report-0.txt:
Likewise.
* tests/data/test-diff-dwarf/test19-soname-report-0.txt: Likewise.
* tests/data/test-diff-dwarf/test7-report.txt: Likewise.
* tests/data/test-diff-dwarf/test8-report.txt: Likewise.
* tests/data/test-diff-dwarf/test9-report.txt: Likewise.
* tests/data/test-diff-dwarf/test16-syms-only-report.txt: Likewise.
* tests/data/test-diff-dwarf/test17-non-refed-syms-report-0.txt:
Likewise.
* tests/data/test-diff-dwarf/test28-vtable-changes-report-0.txt:
Likewise.
* tests/data/test-diff-filter/test0-report.txt: Likewise.
* tests/data/test-diff-filter/test01-report.txt: Likewise.
* tests/data/test-diff-filter/test13-report.txt: Likewise.
* test-diff-suppr/test15-suppr-added-fn-v0.o: Add new test
material.
* tests/data/test-diff-filter/test15-0-report.txt: Likewise.
* tests/data/test-diff-filter/test2-report.txt: Likewise.
* tests/data/test-diff-filter/test21-compatible-vars-report-0.txt:
Likewise.
* tests/data/test-diff-filter/test24-compatible-vars-report-1.txt:
Likewise.
* test-diff-suppr/test15-suppr-added-fn-v1.o: Likewise.
* test-diff-suppr/test15-suppr-added-fn-0.suppr: Likewise.
* test-diff-suppr/test15-suppr-added-fn-1.suppr: Likewise.
* test-diff-suppr/test15-suppr-added-fn-2.suppr: Likewise.
* test-diff-suppr/test15-suppr-added-fn-3.suppr: Likewise.
* test-diff-suppr/test15-suppr-added-fn-4.suppr: Likewise.
* test-diff-suppr/test15-suppr-added-fn-report-0.txt: Likewise.
* test-diff-suppr/test15-suppr-added-fn-report-1.txt: Likewise.
* test-diff-suppr/test15-suppr-added-fn-report-2.txt: Likewise.
* test-diff-suppr/test15-suppr-added-fn-report-3.txt: Likewise.
* test-diff-suppr/test15-suppr-added-fn-report-4.txt: Likewise.
* test-diff-suppr/test15-suppr-added-fn-report-5.txt: Likewise.
* test-diff-suppr/test15-suppr-added-fn-v0.cc: Likewise.
* test-diff-suppr/test15-suppr-added-fn-v1.cc: Likewise.
* test-diff-suppr/test16-suppr-removed-fn-v0.o: Likewise.
* test-diff-suppr/test16-suppr-removed-fn-v1.o: Likewise.
* test-diff-suppr/test16-suppr-removed-fn-0.suppr: Likewise.
* test-diff-suppr/test16-suppr-removed-fn-1.suppr: Likewise.
* test-diff-suppr/test16-suppr-removed-fn-2.suppr: Likewise.
* test-diff-suppr/test16-suppr-removed-fn-3.suppr: Likewise.
* test-diff-suppr/test16-suppr-removed-fn-4.suppr: Likewise.
* test-diff-suppr/test16-suppr-removed-fn-report-0.txt: Likewise.
* test-diff-suppr/test16-suppr-removed-fn-report-1.txt: Likewise.
* test-diff-suppr/test16-suppr-removed-fn-report-2.txt: Likewise.
* test-diff-suppr/test16-suppr-removed-fn-report-3.txt: Likewise.
* test-diff-suppr/test16-suppr-removed-fn-report-4.txt: Likewise.
* test-diff-suppr/test16-suppr-removed-fn-report-5.txt: Likewise.
* test-diff-suppr/test16-suppr-removed-fn-v0.cc: Likewise.
* test-diff-suppr/test16-suppr-removed-fn-v1.cc: Likewise.
* test-diff-suppr/test17-suppr-added-var-v0.o: Likewise.
* test-diff-suppr/test17-suppr-added-var-v1.o: Likewise.
* test-diff-suppr/test17-suppr-added-var-0.suppr: Likewise.
* test-diff-suppr/test17-suppr-added-var-1.suppr: Likewise.
* test-diff-suppr/test17-suppr-added-var-2.suppr: Likewise.
* test-diff-suppr/test17-suppr-added-var-3.suppr: Likewise.
* test-diff-suppr/test17-suppr-added-var-4.suppr: Likewise.
* test-diff-suppr/test17-suppr-added-var-report-0.txt: Likewise.
* test-diff-suppr/test17-suppr-added-var-report-1.txt: Likewise.
* test-diff-suppr/test17-suppr-added-var-report-2.txt: Likewise.
* test-diff-suppr/test17-suppr-added-var-report-3.txt: Likewise.
* test-diff-suppr/test17-suppr-added-var-report-4.txt: Likewise.
* test-diff-suppr/test17-suppr-added-var-report-5.txt: Likewise.
* test-diff-suppr/test17-suppr-added-var-v0.cc: Likewise.
* test-diff-suppr/test17-suppr-added-var-v1.cc: Likewise.
* test-diff-suppr/test18-suppr-removed-var-v0.o: Likewise.
* test-diff-suppr/test18-suppr-removed-var-v1.o: Likewise.
* test-diff-suppr/test18-suppr-removed-var-0.suppr: Likewise.
* test-diff-suppr/test18-suppr-removed-var-1.suppr: Likewise.
* test-diff-suppr/test18-suppr-removed-var-2.suppr: Likewise.
* test-diff-suppr/test18-suppr-removed-var-3.suppr: Likewise.
* test-diff-suppr/test18-suppr-removed-var-4.suppr: Likewise.
* test-diff-suppr/test18-suppr-removed-var-report-0.txt: Likewise.
* test-diff-suppr/test18-suppr-removed-var-report-1.txt: Likewise.
* test-diff-suppr/test18-suppr-removed-var-report-2.txt: Likewise.
* test-diff-suppr/test18-suppr-removed-var-report-3.txt: Likewise.
* test-diff-suppr/test18-suppr-removed-var-report-4.txt: Likewise.
* test-diff-suppr/test18-suppr-removed-var-report-5.txt: Likewise.
* test-diff-suppr/test18-suppr-removed-var-v0.cc: Likewise.
* test-diff-suppr/test18-suppr-removed-var-v1.cc: Likewise.
* tests/data/test-diff-suppr/test19-suppr-added-fn-sym-v0.o: New
test input.
* tests/data/test-diff-suppr/test19-suppr-added-fn-sym-v1.o:
Likewise.
* tests/data/test-diff-suppr/test19-suppr-added-fn-sym-0.suppr:
Likewise.
* tests/data/test-diff-suppr/test19-suppr-added-fn-sym-1.suppr:
Likewise.
* tests/data/test-diff-suppr/test19-suppr-added-fn-sym-2.suppr:
Likewise.
* tests/data/test-diff-suppr/test19-suppr-added-fn-sym-3.suppr:
Likewise.
* tests/data/test-diff-suppr/test19-suppr-added-fn-sym-4.suppr:
Likewise.
* tests/data/test-diff-suppr/test19-suppr-added-fn-sym-report-0.txt:
Likewise.
* tests/data/test-diff-suppr/test19-suppr-added-fn-sym-report-1.txt:
Likewise.
* tests/data/test-diff-suppr/test19-suppr-added-fn-sym-report-2.txt:
Likewise.
* tests/data/test-diff-suppr/test19-suppr-added-fn-sym-report-3.txt:
Likewise.
* tests/data/test-diff-suppr/test19-suppr-added-fn-sym-report-4.txt:
Likewise.
* tests/data/test-diff-suppr/test19-suppr-added-fn-sym-report-5.txt:
Likewise.
* tests/data/test-diff-suppr/test19-suppr-added-fn-sym-v0.cc:
Likewise.
* tests/data/test-diff-suppr/test19-suppr-added-fn-sym-v1.cc:
Likewise.
* tests/data/test-diff-suppr/test20-suppr-removed-fn-sym-v0.o:
Likewise.
* tests/data/test-diff-suppr/test20-suppr-removed-fn-sym-v1.o:
Likewise.
* tests/data/test-diff-suppr/test20-suppr-removed-fn-sym-0.suppr:
Likewise.
* tests/data/test-diff-suppr/test20-suppr-removed-fn-sym-1.suppr:
Likewise.
* tests/data/test-diff-suppr/test20-suppr-removed-fn-sym-2.suppr:
Likewise.
* tests/data/test-diff-suppr/test20-suppr-removed-fn-sym-3.suppr:
Likewise.
* tests/data/test-diff-suppr/test20-suppr-removed-fn-sym-4.suppr:
Likewise.
* tests/data/test-diff-suppr/test20-suppr-removed-fn-sym-report-0.txt:
Likewise.
* tests/data/test-diff-suppr/test20-suppr-removed-fn-sym-report-1.txt:
Likewise.
* tests/data/test-diff-suppr/test20-suppr-removed-fn-sym-report-2.txt:
Likewise.
* tests/data/test-diff-suppr/test20-suppr-removed-fn-sym-report-3.txt:
Likewise.
* tests/data/test-diff-suppr/test20-suppr-removed-fn-sym-report-4.txt:
Likewise.
* tests/data/test-diff-suppr/test20-suppr-removed-fn-sym-report-5.txt:
Likewise.
* tests/data/test-diff-suppr/test20-suppr-removed-fn-sym-v0.cc:
Likewise.
* tests/data/test-diff-suppr/test20-suppr-removed-fn-sym-v1.cc:
Likewise.
* tests/data/test-diff-suppr/test21-suppr-added-var-sym-v0.o:
Likewise.
* tests/data/test-diff-suppr/test21-suppr-added-var-sym-v1.o:
Likewise.
* tests/data/test-diff-suppr/test21-suppr-added-var-sym-0.suppr:
Likewise.
* tests/data/test-diff-suppr/test21-suppr-added-var-sym-1.suppr:
Likewise.
* tests/data/test-diff-suppr/test21-suppr-added-var-sym-2.suppr:
Likewise.
* tests/data/test-diff-suppr/test21-suppr-added-var-sym-3.suppr:
Likewise.
* tests/data/test-diff-suppr/test21-suppr-added-var-sym-4.suppr:
Likewise.
* tests/data/test-diff-suppr/test21-suppr-added-var-sym-report-0.txt:
Likewise.
* tests/data/test-diff-suppr/test21-suppr-added-var-sym-report-1.txt:
Likewise.
* tests/data/test-diff-suppr/test21-suppr-added-var-sym-report-2.txt:
Likewise.
* tests/data/test-diff-suppr/test21-suppr-added-var-sym-report-3.txt:
Likewise.
* tests/data/test-diff-suppr/test21-suppr-added-var-sym-report-4.txt:
Likewise.
* tests/data/test-diff-suppr/test21-suppr-added-var-sym-report-5.txt:
Likewise.
* tests/data/test-diff-suppr/test21-suppr-added-var-sym-v0.cc:
Likewise.
* tests/data/test-diff-suppr/test21-suppr-added-var-sym-v1.cc:
Likewise.
* tests/data/test-diff-suppr/test22-suppr-removed-var-sym-v0.o:
Likewise.
* tests/data/test-diff-suppr/test22-suppr-removed-var-sym-v1.o:
Likewise.
* tests/data/test-diff-suppr/test22-suppr-removed-var-sym-0.suppr:
Likewise.
* tests/data/test-diff-suppr/test22-suppr-removed-var-sym-1.suppr:
Likewise.
* tests/data/test-diff-suppr/test22-suppr-removed-var-sym-2.suppr:
Likewise.
* tests/data/test-diff-suppr/test22-suppr-removed-var-sym-3.suppr:
Likewise.
* tests/data/test-diff-suppr/test22-suppr-removed-var-sym-4.suppr:
Likewise.
* tests/data/test-diff-suppr/test22-suppr-removed-var-sym-report-0.txt:
Likewise.
* tests/data/test-diff-suppr/test22-suppr-removed-var-sym-report-1.txt:
Likewise.
* tests/data/test-diff-suppr/test22-suppr-removed-var-sym-report-2.txt:
Likewise.
* tests/data/test-diff-suppr/test22-suppr-removed-var-sym-report-3.txt:
Likewise.
* tests/data/test-diff-suppr/test22-suppr-removed-var-sym-report-4.txt:
Likewise.
* tests/data/test-diff-suppr/test22-suppr-removed-var-sym-report-5.txt:
Likewise.
* tests/data/test-diff-suppr/test22-suppr-removed-var-sym-v0.cc:
Likewise.
* tests/data/test-diff-suppr/test22-suppr-removed-var-sym-v1.cc:
Likewise.
* tests/data/Makefile.am: Add the new test materials above to source
distribution.
* tests/test-diff-suppr.cc (in_out_specs): Add the new tests
material above to the list of test inputs this harness has to run
over.
Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2015-06-22 09:13:17 +00:00
|
|
|
test-diff-suppr/test15-suppr-added-fn-v0.o \
|
|
|
|
test-diff-suppr/test15-suppr-added-fn-v1.o \
|
|
|
|
test-diff-suppr/test15-suppr-added-fn-0.suppr \
|
|
|
|
test-diff-suppr/test15-suppr-added-fn-1.suppr \
|
|
|
|
test-diff-suppr/test15-suppr-added-fn-2.suppr \
|
|
|
|
test-diff-suppr/test15-suppr-added-fn-3.suppr \
|
|
|
|
test-diff-suppr/test15-suppr-added-fn-4.suppr \
|
|
|
|
test-diff-suppr/test15-suppr-added-fn-report-0.txt \
|
|
|
|
test-diff-suppr/test15-suppr-added-fn-report-1.txt \
|
|
|
|
test-diff-suppr/test15-suppr-added-fn-report-2.txt \
|
|
|
|
test-diff-suppr/test15-suppr-added-fn-report-3.txt \
|
|
|
|
test-diff-suppr/test15-suppr-added-fn-report-4.txt \
|
|
|
|
test-diff-suppr/test15-suppr-added-fn-report-5.txt \
|
|
|
|
test-diff-suppr/test15-suppr-added-fn-v0.cc \
|
|
|
|
test-diff-suppr/test15-suppr-added-fn-v1.cc \
|
|
|
|
test-diff-suppr/test16-suppr-removed-fn-v0.o \
|
|
|
|
test-diff-suppr/test16-suppr-removed-fn-v1.o \
|
|
|
|
test-diff-suppr/test16-suppr-removed-fn-0.suppr \
|
|
|
|
test-diff-suppr/test16-suppr-removed-fn-1.suppr \
|
|
|
|
test-diff-suppr/test16-suppr-removed-fn-2.suppr \
|
|
|
|
test-diff-suppr/test16-suppr-removed-fn-3.suppr \
|
|
|
|
test-diff-suppr/test16-suppr-removed-fn-4.suppr \
|
|
|
|
test-diff-suppr/test16-suppr-removed-fn-report-0.txt \
|
|
|
|
test-diff-suppr/test16-suppr-removed-fn-report-1.txt \
|
|
|
|
test-diff-suppr/test16-suppr-removed-fn-report-2.txt \
|
|
|
|
test-diff-suppr/test16-suppr-removed-fn-report-3.txt \
|
|
|
|
test-diff-suppr/test16-suppr-removed-fn-report-4.txt \
|
|
|
|
test-diff-suppr/test16-suppr-removed-fn-report-5.txt \
|
|
|
|
test-diff-suppr/test16-suppr-removed-fn-v0.cc \
|
|
|
|
test-diff-suppr/test16-suppr-removed-fn-v1.cc \
|
|
|
|
test-diff-suppr/test17-suppr-added-var-v0.o \
|
|
|
|
test-diff-suppr/test17-suppr-added-var-v1.o \
|
|
|
|
test-diff-suppr/test17-suppr-added-var-0.suppr \
|
|
|
|
test-diff-suppr/test17-suppr-added-var-1.suppr \
|
|
|
|
test-diff-suppr/test17-suppr-added-var-2.suppr \
|
|
|
|
test-diff-suppr/test17-suppr-added-var-3.suppr \
|
|
|
|
test-diff-suppr/test17-suppr-added-var-4.suppr \
|
|
|
|
test-diff-suppr/test17-suppr-added-var-report-0.txt \
|
|
|
|
test-diff-suppr/test17-suppr-added-var-report-1.txt \
|
|
|
|
test-diff-suppr/test17-suppr-added-var-report-2.txt \
|
|
|
|
test-diff-suppr/test17-suppr-added-var-report-3.txt \
|
|
|
|
test-diff-suppr/test17-suppr-added-var-report-4.txt \
|
|
|
|
test-diff-suppr/test17-suppr-added-var-report-5.txt \
|
|
|
|
test-diff-suppr/test17-suppr-added-var-v0.cc \
|
|
|
|
test-diff-suppr/test17-suppr-added-var-v1.cc \
|
|
|
|
test-diff-suppr/test18-suppr-removed-var-v0.o \
|
|
|
|
test-diff-suppr/test18-suppr-removed-var-v1.o \
|
|
|
|
test-diff-suppr/test18-suppr-removed-var-0.suppr \
|
|
|
|
test-diff-suppr/test18-suppr-removed-var-1.suppr \
|
|
|
|
test-diff-suppr/test18-suppr-removed-var-2.suppr \
|
|
|
|
test-diff-suppr/test18-suppr-removed-var-3.suppr \
|
|
|
|
test-diff-suppr/test18-suppr-removed-var-4.suppr \
|
|
|
|
test-diff-suppr/test18-suppr-removed-var-report-0.txt \
|
|
|
|
test-diff-suppr/test18-suppr-removed-var-report-1.txt \
|
|
|
|
test-diff-suppr/test18-suppr-removed-var-report-2.txt \
|
|
|
|
test-diff-suppr/test18-suppr-removed-var-report-3.txt \
|
|
|
|
test-diff-suppr/test18-suppr-removed-var-report-4.txt \
|
|
|
|
test-diff-suppr/test18-suppr-removed-var-report-5.txt \
|
|
|
|
test-diff-suppr/test18-suppr-removed-var-v0.cc \
|
|
|
|
test-diff-suppr/test18-suppr-removed-var-v1.cc \
|
|
|
|
test-diff-suppr/test19-suppr-added-fn-sym-v0.o \
|
|
|
|
test-diff-suppr/test19-suppr-added-fn-sym-v1.o \
|
|
|
|
test-diff-suppr/test19-suppr-added-fn-sym-0.suppr \
|
|
|
|
test-diff-suppr/test19-suppr-added-fn-sym-1.suppr \
|
|
|
|
test-diff-suppr/test19-suppr-added-fn-sym-2.suppr \
|
|
|
|
test-diff-suppr/test19-suppr-added-fn-sym-3.suppr \
|
|
|
|
test-diff-suppr/test19-suppr-added-fn-sym-4.suppr \
|
|
|
|
test-diff-suppr/test19-suppr-added-fn-sym-report-0.txt \
|
|
|
|
test-diff-suppr/test19-suppr-added-fn-sym-report-1.txt \
|
|
|
|
test-diff-suppr/test19-suppr-added-fn-sym-report-2.txt \
|
|
|
|
test-diff-suppr/test19-suppr-added-fn-sym-report-3.txt \
|
|
|
|
test-diff-suppr/test19-suppr-added-fn-sym-report-4.txt \
|
|
|
|
test-diff-suppr/test19-suppr-added-fn-sym-report-5.txt \
|
|
|
|
test-diff-suppr/test19-suppr-added-fn-sym-v0.cc \
|
|
|
|
test-diff-suppr/test19-suppr-added-fn-sym-v1.cc \
|
|
|
|
test-diff-suppr/test20-suppr-removed-fn-sym-v0.o \
|
|
|
|
test-diff-suppr/test20-suppr-removed-fn-sym-v1.o \
|
|
|
|
test-diff-suppr/test20-suppr-removed-fn-sym-0.suppr \
|
|
|
|
test-diff-suppr/test20-suppr-removed-fn-sym-1.suppr \
|
|
|
|
test-diff-suppr/test20-suppr-removed-fn-sym-2.suppr \
|
|
|
|
test-diff-suppr/test20-suppr-removed-fn-sym-3.suppr \
|
|
|
|
test-diff-suppr/test20-suppr-removed-fn-sym-4.suppr \
|
|
|
|
test-diff-suppr/test20-suppr-removed-fn-sym-report-0.txt \
|
|
|
|
test-diff-suppr/test20-suppr-removed-fn-sym-report-1.txt \
|
|
|
|
test-diff-suppr/test20-suppr-removed-fn-sym-report-2.txt \
|
|
|
|
test-diff-suppr/test20-suppr-removed-fn-sym-report-3.txt \
|
|
|
|
test-diff-suppr/test20-suppr-removed-fn-sym-report-4.txt \
|
|
|
|
test-diff-suppr/test20-suppr-removed-fn-sym-report-5.txt \
|
|
|
|
test-diff-suppr/test20-suppr-removed-fn-sym-v0.cc \
|
|
|
|
test-diff-suppr/test20-suppr-removed-fn-sym-v1.cc \
|
|
|
|
test-diff-suppr/test21-suppr-added-var-sym-v0.o \
|
|
|
|
test-diff-suppr/test21-suppr-added-var-sym-v1.o \
|
|
|
|
test-diff-suppr/test21-suppr-added-var-sym-0.suppr \
|
|
|
|
test-diff-suppr/test21-suppr-added-var-sym-1.suppr \
|
|
|
|
test-diff-suppr/test21-suppr-added-var-sym-2.suppr \
|
|
|
|
test-diff-suppr/test21-suppr-added-var-sym-3.suppr \
|
|
|
|
test-diff-suppr/test21-suppr-added-var-sym-4.suppr \
|
|
|
|
test-diff-suppr/test21-suppr-added-var-sym-report-0.txt \
|
|
|
|
test-diff-suppr/test21-suppr-added-var-sym-report-1.txt \
|
|
|
|
test-diff-suppr/test21-suppr-added-var-sym-report-2.txt \
|
|
|
|
test-diff-suppr/test21-suppr-added-var-sym-report-3.txt \
|
|
|
|
test-diff-suppr/test21-suppr-added-var-sym-report-4.txt \
|
|
|
|
test-diff-suppr/test21-suppr-added-var-sym-report-5.txt \
|
|
|
|
test-diff-suppr/test21-suppr-added-var-sym-v0.cc \
|
|
|
|
test-diff-suppr/test21-suppr-added-var-sym-v1.cc \
|
|
|
|
test-diff-suppr/test22-suppr-removed-var-sym-v0.o \
|
|
|
|
test-diff-suppr/test22-suppr-removed-var-sym-v1.o \
|
|
|
|
test-diff-suppr/test22-suppr-removed-var-sym-0.suppr \
|
|
|
|
test-diff-suppr/test22-suppr-removed-var-sym-1.suppr \
|
|
|
|
test-diff-suppr/test22-suppr-removed-var-sym-2.suppr \
|
|
|
|
test-diff-suppr/test22-suppr-removed-var-sym-3.suppr \
|
|
|
|
test-diff-suppr/test22-suppr-removed-var-sym-4.suppr \
|
|
|
|
test-diff-suppr/test22-suppr-removed-var-sym-report-0.txt \
|
|
|
|
test-diff-suppr/test22-suppr-removed-var-sym-report-1.txt \
|
|
|
|
test-diff-suppr/test22-suppr-removed-var-sym-report-2.txt \
|
|
|
|
test-diff-suppr/test22-suppr-removed-var-sym-report-3.txt \
|
|
|
|
test-diff-suppr/test22-suppr-removed-var-sym-report-4.txt \
|
|
|
|
test-diff-suppr/test22-suppr-removed-var-sym-report-5.txt \
|
|
|
|
test-diff-suppr/test22-suppr-removed-var-sym-v0.cc \
|
|
|
|
test-diff-suppr/test22-suppr-removed-var-sym-v1.cc \
|
2015-07-02 10:57:04 +00:00
|
|
|
test-diff-suppr/libtest23-alias-filter-v0.so \
|
|
|
|
test-diff-suppr/libtest23-alias-filter-v1.so \
|
|
|
|
test-diff-suppr/test23-alias-filter-0.suppr \
|
|
|
|
test-diff-suppr/test23-alias-filter-1.suppr \
|
|
|
|
test-diff-suppr/test23-alias-filter-2.suppr \
|
|
|
|
test-diff-suppr/test23-alias-filter-3.suppr \
|
|
|
|
test-diff-suppr/test23-alias-filter-4.suppr \
|
|
|
|
test-diff-suppr/test23-alias-filter-report-0.txt \
|
|
|
|
test-diff-suppr/test23-alias-filter-report-1.txt \
|
|
|
|
test-diff-suppr/test23-alias-filter-report-2.txt \
|
|
|
|
test-diff-suppr/test23-alias-filter-report-3.txt \
|
|
|
|
test-diff-suppr/test23-alias-filter-report-4.txt \
|
|
|
|
test-diff-suppr/test23-alias-filter-report-5.txt \
|
|
|
|
test-diff-suppr/test23-alias-filter-v0.c \
|
|
|
|
test-diff-suppr/test23-alias-filter-v1.c \
|
|
|
|
test-diff-suppr/test23-alias-filter-version-script \
|
Support file_name_regexp and soname_regexp in supp-specs
With this patch it's now possible to express the soname or name of the binary
file that contains the ABI artifacts the suppression specifications
should apply to.
* 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.
Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2015-07-18 13:09:06 +00:00
|
|
|
test-diff-suppr/libtest24-soname-v0.so \
|
|
|
|
test-diff-suppr/libtest24-soname-v1.so \
|
|
|
|
test-diff-suppr/test24-soname-report-0.txt \
|
|
|
|
test-diff-suppr/test24-soname-report-1.txt \
|
|
|
|
test-diff-suppr/test24-soname-report-2.txt \
|
|
|
|
test-diff-suppr/test24-soname-report-3.txt \
|
|
|
|
test-diff-suppr/test24-soname-report-4.txt \
|
|
|
|
test-diff-suppr/test24-soname-suppr-0.txt \
|
|
|
|
test-diff-suppr/test24-soname-suppr-1.txt \
|
|
|
|
test-diff-suppr/test24-soname-suppr-2.txt \
|
|
|
|
test-diff-suppr/test24-soname-suppr-3.txt \
|
|
|
|
test-diff-suppr/test24-soname-suppr-4.txt \
|
|
|
|
test-diff-suppr/test24-soname-v0.cc \
|
|
|
|
test-diff-suppr/test24-soname-v1.cc \
|
Make applying supp specs through pointer access look through typedefs
Consider the declaration of the exported function bar() below:
struct _OpaqueType {int member;};
typedef struct _OpaqueType Type;
void bar(Type*);
Once the *definition of struct _OpaqueType and bar() are compiled into
a shared library, if a layout change happens to struct _OpaqueType,
then abidiff rightfully reports that bar() is impacted by the layout
change to struct _OpaqueType.
But then, the following suppression specification won't silence the
ABI change report:
[suppress_type]
name = _OpaqueType
type_kind = struct
accessed_through = pointer
This is because strictly speaking, it's not struct _OpaqueType that is
accessed through a pointer, from function bar(); it's the type 'Type',
(which is a typedef of struct _OpaqueType) that is accessed though a
pointer.
But then, as 'Type' and 'struct _OpaqueType' are the same type (modulo
the typedef), this behaviour is not super useful. It would be more
interesting if the suppression specification could silence the ABI
change report.
And this is what this patch does.
* 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.
Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2015-07-31 10:58:08 +00:00
|
|
|
test-diff-suppr/libtest25-typedef-v0.so \
|
|
|
|
test-diff-suppr/libtest25-typedef-v1.so \
|
|
|
|
test-diff-suppr/test25-typedef-suppr-0.txt \
|
|
|
|
test-diff-suppr/test25-typedef-report-0.txt \
|
|
|
|
test-diff-suppr/test25-typedef-report-1.txt\
|
|
|
|
test-diff-suppr/test25-typedef-v0.c \
|
|
|
|
test-diff-suppr/test25-typedef-v1.c \
|
Support source_location_not_in and source_location_not_regexp suppressions
This patch adds support for properties source_location_not_in and
source_location_not_regexp in the [suppress_type] section of
suppression specifications. So the suppression specification:
[suppress_type]
source_location_not_in = foo1.h, foo2.h bar1.h bar2.h
suppresses ABI change reports about types that are *NOT* defined in
files foo{1,2}.h and bar{1,2}.h. The intended use of this construct is to
constrain abi change reports to types that are part of the API of a
given shared library. The API of the library is supposed to be
defined in foo.h and bar.h only.
Similarly, the suppression specification:
[suppress_type]
source_location_not_regexp = (foo|bar){1,2}\\.h
suppresses ABI change reports about types that are not defined in the
same set of files foo1.h, foo2.h, bar1.h and bar2.h.
* 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.
Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2015-09-16 09:37:22 +00:00
|
|
|
test-diff-suppr/libtest26-loc-suppr-v0.so \
|
|
|
|
test-diff-suppr/libtest26-loc-suppr-v1.so \
|
|
|
|
test-diff-suppr/test26-loc-suppr-0.suppr \
|
|
|
|
test-diff-suppr/test26-loc-suppr-1.suppr \
|
|
|
|
test-diff-suppr/test26-loc-suppr-2.suppr \
|
|
|
|
test-diff-suppr/test26-loc-suppr-report-0.txt \
|
|
|
|
test-diff-suppr/test26-loc-suppr-report-1.txt \
|
|
|
|
test-diff-suppr/test26-loc-suppr-report-2.txt \
|
|
|
|
test-diff-suppr/test26-loc-suppr-report-3.txt \
|
|
|
|
test-diff-suppr/test26-loc-suppr-v0.cc \
|
|
|
|
test-diff-suppr/test26-loc-suppr-v1.cc \
|
|
|
|
test-diff-suppr/test26-loc-suppr.h \
|
2014-11-20 10:26:30 +00:00
|
|
|
\
|
Support specifying data member insertion in suppressions
This patch is for supporting this kind of things:
[suppress_type]
name = S
has_data_member_inserted_between = {8, end}
or:
[suppress_type]
name = S
has_data_members_inserted_between = {{8, 31}, {64, end}}
or:
[suppress_type]
name = S
has_data_members_inserted_at = offset_after(member0)
How cool is that, heh?
Anyway, to do this, the patch adds support for tuple values (i.e,
lists of values) in INI files.
Then on top of that the patch adds support for the specific
has_data_member_inserted_between, has_data_members_inserted_between
and has_data_members_inserted_at properties.
* include/abg-comparison.h (type_suppression::insertion_range):
Declare new type.
(type_suppression::insertion_ranges): Declare new typedef.
(type_suppression::{s,g}et_data_member_insertion_ranges): Declare
new member functions.
(is_integer_boundary, is_fn_call_expr_boundary): Declare new
functions.
(type_suppression::insertion_range::{boundary, integer_boundary,
fn_call_expr_boundary}): Define new types.
* src/abg-comparison.cc:
(struct type_suppression::insertion_range::priv): New type.
(type_suppression::insertion_range::{insertion_range, begin,
end}): Define new member functions.
(type_suppression::priv::insertion_ranges_): Add data member.
(type_suppression::{s,g}et_data_member_insertion_ranges): Define
new member functions.
(type_suppression::insertion_range::boundary::priv): Define new
type.
(type_suppression::insertion_range::boundary::{boundary,
~boundary}): Define new member functions.
(type_suppression::insertion_range::integer_boundary::priv):
Define new type.
(type_suppression::insertion_range::integer_boundary::{integer_boundary,
as_integer, operator int, ~integer_boundary}): Define member
functions.
(type_suppression::insertion_range::fn_call_expr_boundary::priv):
Define new type.
(type_suppression::insertion_range::fn_call_expr_boundary::{fn_call_expr_boundary,
as_function_call_expr, operator ini::function_call_expr_sptr}):
Define new member functions.
(type_suppression::insertion_range::{create_integer_boundary,
type_suppression::insertion_range::create_fn_call_expr_boundary,
type_suppression::insertion_range::eval_boundary}): Define new
member functions.
(is_integer_boundary, is_fn_call_expr_boundary): Define new
functions.
(read_type_suppression, read_function_suppression)
(read_variable_suppression): Support the new kinds of
property-related types. Aslo, in read_type_suppression, support
the new properties has_data_member_inserted_at,
has_data_member_inserted_between and
has_data_members_inserted_between.
(type_suppression::suppresses_diff): If we are looking at a type
diff node that has inserted data members, evaluate the insertion
ranges of the current type_suppression and see if they match the
inserted data members.
* include/abg-ini.h (property, simple_property, property_value)
(string_property_value, tuple_property_value, function_call_expr):
Declare new types.
(property_sptr, property_value_sptr, string_property_value_sptr)
(tuple_property_value_sptr): Declare new typedefs.
(is_string_property_value, is_tuple_property_value)
(is_simple_property, is_tuple_property, read_function_call_expr):
Declare new functions.
* src/abg-ini.cc (char_is_white_space, char_is_comment_start)
(char_is_delimiter, char_is_property_value_char)
(char_is_section_name_char, char_is_property_name_char)
(char_is_comment_start, char_is_white_space)
(remove_trailing_white_spaces, is_string_property_value)
(is_tuple_property_value, is_simple_property, is_tuple_property)
(write_property_value, char_is_function_name_char)
(char_is_function_argument_char): Define new functions.
(property::priv, tuple_property_value::priv)
(simple_property::priv, tuple_property::priv): Define new types.
(property::{property, get_name, set_name, ~property}): Define new
member functions.
(struct property_value::priv): Define new type.
(property_value::{property_value, get_kind, operator const
string&(), ~property_value}): Define new member functions.
(struct string_property_value::priv): Define new type.
(string_property_value::{string_property_value, set_content,
as_string, operator string()}, ~string_property_value): Define new
member functions.
(tuple_property_value::{tuple_property_value, get_value_items,
~tuple_property_value, as_string}): Likewise.
(simple_property::{simple_property, get_value, set_value,
~simple_property}): Likewise.
(tuple_property::{tuple_property, set_value, get_value}):
Likewise.
(config::section::find_property): Adjust return type.
(read_context::{char_is_delimiter, char_is_property_value_char,
char_is_section_name_char, char_is_property_name_char,
char_is_comment_start, char_is_white_space}): Remove these from
here as they got moved them to be non-member functions above.
(read_context::read_property_value): Return a property_value_sptr
and do not take any parameter anymore.
(read_context::{read_string_property_value,
read_tuple_property_value, read_function_name,
read_function_argument, read_function_call_expr}): Define new
member functions.
(read_context::read_property): Adjust return type. Also, change to read
the different new kinds of properties values.
(function_call_expr::priv): Define new type.
(function_call_expr::{function_call_expr, get_name,
get_arguments}): New member functions.
(read_context::read_section): Adjust.
(write_property, write_section): Adjust.
* tests/data/test-diff-suppr/libtest{11,12}-add-data-member-v{0,1}.so:
New test input binaries.
* tests/data/test-diff-suppr/test{11,12}-add-data-member-{0,1}.suppr:
New input suppression files.
* tests/data/test-diff-suppr/test11-add-data-member-{2,3,4}.suppr:
Add new test input files.
* tests/data/test-diff-suppr/test{11,12}-add-data-member-report-{0,1}.txt:
New reference output files.
* tests/data/test-diff-suppr/test12-add-data-member-report-2.txt:
Likewise.
* tests/data/test-diff-suppr/test{11,12}-add-data-member-v{0,1}.cc:
Source code for the new binaries above.
* tests/test-diff-suppr.cc (in_out_specs): Add new test inputs.
* tests/data/Makefile.am: Add the new test related files above to
source distribution.
* doc/manuals/libabigail-concepts.rst: Document the new properties
has_data_member_inserted_at, has_data_member_inserted_between and
has_data_members_inserted_between.
Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2015-04-22 18:40:57 +00:00
|
|
|
test-lookup-syms/test0.cc \
|
|
|
|
test-lookup-syms/test0.o \
|
|
|
|
test-lookup-syms/test0-report.txt \
|
|
|
|
test-lookup-syms/test01-report.txt \
|
|
|
|
test-lookup-syms/test02-report.txt \
|
|
|
|
test-lookup-syms/test1.c \
|
2014-11-20 10:26:30 +00:00
|
|
|
test-lookup-syms/test1.version-script \
|
Support specifying data member insertion in suppressions
This patch is for supporting this kind of things:
[suppress_type]
name = S
has_data_member_inserted_between = {8, end}
or:
[suppress_type]
name = S
has_data_members_inserted_between = {{8, 31}, {64, end}}
or:
[suppress_type]
name = S
has_data_members_inserted_at = offset_after(member0)
How cool is that, heh?
Anyway, to do this, the patch adds support for tuple values (i.e,
lists of values) in INI files.
Then on top of that the patch adds support for the specific
has_data_member_inserted_between, has_data_members_inserted_between
and has_data_members_inserted_at properties.
* include/abg-comparison.h (type_suppression::insertion_range):
Declare new type.
(type_suppression::insertion_ranges): Declare new typedef.
(type_suppression::{s,g}et_data_member_insertion_ranges): Declare
new member functions.
(is_integer_boundary, is_fn_call_expr_boundary): Declare new
functions.
(type_suppression::insertion_range::{boundary, integer_boundary,
fn_call_expr_boundary}): Define new types.
* src/abg-comparison.cc:
(struct type_suppression::insertion_range::priv): New type.
(type_suppression::insertion_range::{insertion_range, begin,
end}): Define new member functions.
(type_suppression::priv::insertion_ranges_): Add data member.
(type_suppression::{s,g}et_data_member_insertion_ranges): Define
new member functions.
(type_suppression::insertion_range::boundary::priv): Define new
type.
(type_suppression::insertion_range::boundary::{boundary,
~boundary}): Define new member functions.
(type_suppression::insertion_range::integer_boundary::priv):
Define new type.
(type_suppression::insertion_range::integer_boundary::{integer_boundary,
as_integer, operator int, ~integer_boundary}): Define member
functions.
(type_suppression::insertion_range::fn_call_expr_boundary::priv):
Define new type.
(type_suppression::insertion_range::fn_call_expr_boundary::{fn_call_expr_boundary,
as_function_call_expr, operator ini::function_call_expr_sptr}):
Define new member functions.
(type_suppression::insertion_range::{create_integer_boundary,
type_suppression::insertion_range::create_fn_call_expr_boundary,
type_suppression::insertion_range::eval_boundary}): Define new
member functions.
(is_integer_boundary, is_fn_call_expr_boundary): Define new
functions.
(read_type_suppression, read_function_suppression)
(read_variable_suppression): Support the new kinds of
property-related types. Aslo, in read_type_suppression, support
the new properties has_data_member_inserted_at,
has_data_member_inserted_between and
has_data_members_inserted_between.
(type_suppression::suppresses_diff): If we are looking at a type
diff node that has inserted data members, evaluate the insertion
ranges of the current type_suppression and see if they match the
inserted data members.
* include/abg-ini.h (property, simple_property, property_value)
(string_property_value, tuple_property_value, function_call_expr):
Declare new types.
(property_sptr, property_value_sptr, string_property_value_sptr)
(tuple_property_value_sptr): Declare new typedefs.
(is_string_property_value, is_tuple_property_value)
(is_simple_property, is_tuple_property, read_function_call_expr):
Declare new functions.
* src/abg-ini.cc (char_is_white_space, char_is_comment_start)
(char_is_delimiter, char_is_property_value_char)
(char_is_section_name_char, char_is_property_name_char)
(char_is_comment_start, char_is_white_space)
(remove_trailing_white_spaces, is_string_property_value)
(is_tuple_property_value, is_simple_property, is_tuple_property)
(write_property_value, char_is_function_name_char)
(char_is_function_argument_char): Define new functions.
(property::priv, tuple_property_value::priv)
(simple_property::priv, tuple_property::priv): Define new types.
(property::{property, get_name, set_name, ~property}): Define new
member functions.
(struct property_value::priv): Define new type.
(property_value::{property_value, get_kind, operator const
string&(), ~property_value}): Define new member functions.
(struct string_property_value::priv): Define new type.
(string_property_value::{string_property_value, set_content,
as_string, operator string()}, ~string_property_value): Define new
member functions.
(tuple_property_value::{tuple_property_value, get_value_items,
~tuple_property_value, as_string}): Likewise.
(simple_property::{simple_property, get_value, set_value,
~simple_property}): Likewise.
(tuple_property::{tuple_property, set_value, get_value}):
Likewise.
(config::section::find_property): Adjust return type.
(read_context::{char_is_delimiter, char_is_property_value_char,
char_is_section_name_char, char_is_property_name_char,
char_is_comment_start, char_is_white_space}): Remove these from
here as they got moved them to be non-member functions above.
(read_context::read_property_value): Return a property_value_sptr
and do not take any parameter anymore.
(read_context::{read_string_property_value,
read_tuple_property_value, read_function_name,
read_function_argument, read_function_call_expr}): Define new
member functions.
(read_context::read_property): Adjust return type. Also, change to read
the different new kinds of properties values.
(function_call_expr::priv): Define new type.
(function_call_expr::{function_call_expr, get_name,
get_arguments}): New member functions.
(read_context::read_section): Adjust.
(write_property, write_section): Adjust.
* tests/data/test-diff-suppr/libtest{11,12}-add-data-member-v{0,1}.so:
New test input binaries.
* tests/data/test-diff-suppr/test{11,12}-add-data-member-{0,1}.suppr:
New input suppression files.
* tests/data/test-diff-suppr/test11-add-data-member-{2,3,4}.suppr:
Add new test input files.
* tests/data/test-diff-suppr/test{11,12}-add-data-member-report-{0,1}.txt:
New reference output files.
* tests/data/test-diff-suppr/test12-add-data-member-report-2.txt:
Likewise.
* tests/data/test-diff-suppr/test{11,12}-add-data-member-v{0,1}.cc:
Source code for the new binaries above.
* tests/test-diff-suppr.cc (in_out_specs): Add new test inputs.
* tests/data/Makefile.am: Add the new test related files above to
source distribution.
* doc/manuals/libabigail-concepts.rst: Document the new properties
has_data_member_inserted_at, has_data_member_inserted_between and
has_data_members_inserted_between.
Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2015-04-22 18:40:57 +00:00
|
|
|
test-lookup-syms/test1.so \
|
2014-11-20 10:26:30 +00:00
|
|
|
test-lookup-syms/test1-1-report.txt \
|
|
|
|
test-lookup-syms/test1-2-report.txt \
|
|
|
|
test-lookup-syms/test1-3-report.txt \
|
|
|
|
\
|
|
|
|
test-alt-dwarf-file/test0.cc \
|
|
|
|
test-alt-dwarf-file/libtest0.so \
|
|
|
|
test-alt-dwarf-file/test0-common.cc \
|
|
|
|
test-alt-dwarf-file/libtest0-common.so \
|
|
|
|
test-alt-dwarf-file/test0-report.txt \
|
|
|
|
test-alt-dwarf-file/test0-debug-dir/test0-common-dwz.debug \
|
Initial implementation of the abicompat tool
Given an application A that links to a shared library L of version V
denoted L(V) and a subsequent version of that library denoted L(V+P),
the 'abicompat' tool tells the user if L(V+P) is still ABI compatible
with L(V+P). And if it is not, abicompat gives a reports that shows
the differences between L(V) and L(V+P) that makes L(V+P)
ABI-incompatible with A.
The source code of this tool is in the tools/abicompat.cc source
file. To support this new tool, this commit changes the comparison
engine to optionally avoid showing added symbols that were not
referenced by any debug info. It changes the ABI corpus type to allow
the specification of a list of variables and functions symbols to keep
(and drop all other functions and variables which have other symbols
on the floor even before starting to compare the two libraries).
This is how the abicompat tool itself works. It basically compares
L(V) and L(V+P) but it only looks at their exported functions and
variables which symbols are undefined in application A. If the list
of exported and defined variables and functions of L(V) whose symbols
are undefined in A equals that of L(V+P) (including the sub-types of
these variables and functions) A is still compatible with L(V+P).
Otherwise, they might not be compatible depending on the kind of
differences that are found.
* include/abg-comparison.h
(diff_context::show_added_symbols_unreferenced_by_debug_info):
Declare new accessors.
(corpus_diff::{deleted_variables,
deleted_unrefed_function_symbols,
deleted_unrefed_variable_symbols,
apply_filters_and_suppressions_before_reporting}): Declare new
methods.
(corpus_diff::diff_stats): Declare this new type. Actually this
was previously corpus_diff::priv::diff_stats, which was a hidden
internal type.. We are moving it here, in the external API so
that client code can have more information about changes
statistics. Change all the previously publicly accessible data
members into accessor functions.
* src/abg-comparison.cc (class corpus_diff::diff_stats::priv): New
type.
(diff_context::priv::show_added_syms_unreferenced_by_di_): New
data member.
(diff_context::priv::priv): Adjust.
(diff_context::show_added_symbols_unreferenced_by_debug_info):
Define this new method.
(corpus_diff::priv::emit_diff_stats): Do not show the diff stat
if the only changes is added function or variables symbols and if
we were instructed to not show added symbols.
(corpus_diff::priv::{diff_stats_, filters_and_suppr_applied_}):
New data members.
(corpus_diff::priv::priv): Initialize the
filters_and_suppr_applied_ data member.
(corpus_diff::priv::diff_stats): Move this type to
corpus_diff::diff_stats.
(corpus_diff::priv::{apply_filters_and_compute_diff_stats,
emit_diff_stats}): Adjust.
(corpus_diff::apply_filters_and_suppressions_before_reporting):
Define new member function.
(corpus_diff::report): Use the new
apply_filters_and_suppressions_before_reporting() function, rather
than applying the filters and suppressions by ourselves. Also
adjust to the use the accessors of the new corpus_diff::diff_stats
type.
(corpus_diff::{deleted_variables,
deleted_unrefed_function_symbols,
deleted_unrefed_variable_symbols}): Define new accessors.
(corpus_diff::diff_stats::{diff_stats, num_func_removed,
num_func_added, num_func_changed, num_func_filtered_out,
net_num_func_changed, num_vars_removed, num_vars_added,
num_vars_changed, num_vars_filtered_out, net_num_vars_changed,
num_func_sym_removed, num_func_syms_added, num_var_syms_removed,
num_var_syms_added}): Define new member functions.
* include/abg-corpus.h (corpus::{get_sym_ids_of_fns_to_keep,
get_sym_ids_of_vars_to_keep}): Declare new methods.
* src/abg-corpus.cc (corpus::priv::{sym_id_fns_to_keep,
sym_id_vars_to_keep}): Added data members.
(symtab_build_visitor_type::{unrefed_fun_symbols,
unrefed_var_symbols, sym_id_fns_to_keep, sym_id_vars_to_keep}):
Added new data members.
(symtab_build_visitor_type::symtab_build_visitor_type): Take two
additional parameters for the function and variable symbol ids to
keep.
(symtab_build_visitor_type::add_fn_to_wip_fns): Take the function
symbols to keep in account when building the exported symbol
table.
(symtab_build_visitor_type::add_var_to_wip_vars): Likewise, take
the variable symbols to keep in account when building the exported
symbol table.
(corpus::priv::build_public_decl_table): Adjust the initialization
of the visitor that walks the ABI artifacts to build the exported
symbol table to know take a list of function/variable symbols to
keep.
(corpus::priv::build_unreferenced_symbols_tables): Ensure that the
public table of functions/variables is built before doing the work
of this function. Also, if a list of variable/function symbols to
keep is given, drop all symbols that are not in that list on the
floor.
(corpus::{get_sym_ids_of_fns_to_keep,
get_sym_ids_of_vars_to_keep}): Define new accessors.
* tools/abicompat.cc: New abicompat tool.
* doc/manuals/abicompat.rst: New documentation source for
abicompat.
* doc/manuals/libabigail-tools.rst: Add an entry for the abicompat
doc.
* tests/test-abicompat.cc: New test harness for the 'abicompat'
tool.
* tests/Makefile.am: Build the runtestabicompat test harness and
add it to the list of tests harnesses that are run by make check.
* tests/data/test-abicompat/libtest0-fn-changed-libapp-v0.so: New
test input.
* tests/data/test-abicompat/libtest0-fn-changed-libapp-v1.so: Likewise.
* tests/data/test-abicompat/test0-fn-changed-app: Likewise.
* tests/data/test-abicompat/test0-fn-changed-0.suppr: Likewise
* tests/data/test-abicompat/test0-fn-changed-report-0.txt: Likewise.
* tests/data/test-abicompat/test0-fn-changed-report-1.txt: Likewise.
* tests/data/test-abicompat/test0-fn-changed-app.cc: Likewise.
* tests/data/test-abicompat/test0-fn-changed-libapp.h: Likewise.
* tests/data/test-abicompat/test0-fn-changed-libapp-v0.cc: Likewise.
* tests/data/test-abicompat/test0-fn-changed-libapp-v1.cc: Likewise.
* tests/data/test-abicompat/libtest1-fn-removed-v0.so: Likewise.
* tests/data/test-abicompat/libtest1-fn-removed-v1.so: Likewise.
* tests/data/test-abicompat/test1-fn-removed-app: Likewise.
* tests/data/test-abicompat/test1-fn-removed-app.cc: Likewise.
* tests/data/test-abicompat/test1-fn-removed-report-0.txt: Likewise.
* tests/data/test-abicompat/test1-fn-removed-v0.cc: Likewise.
* tests/data/test-abicompat/test1-fn-removed-v1.cc: Likewise.
* tests/data/test-abicompat/libtest2-var-removed-v0.so: Likewise.
* tests/data/test-abicompat/libtest2-var-removed-v1.so: Likewise.
* tests/data/test-abicompat/test2-var-removed-app: Likewise.
* tests/data/test-abicompat/test2-var-removed-app.cc: Likewise.
* tests/data/test-abicompat/test2-var-removed-report-0.txt: Likewise.
* tests/data/test-abicompat/test2-var-removed-v0.cc: Likewise.
* tests/data/test-abicompat/test2-var-removed-v1.cc: Likewise.
* tests/data/test-abicompat/libtest3-fn-removed-v0.so: Likewise.
* tests/data/test-abicompat/libtest3-fn-removed-v1.so: Likewise.
* tests/data/test-abicompat/test3-fn-removed-app: Likewise.
* tests/data/test-abicompat/test3-fn-removed-app.cc: Likewise.
* tests/data/test-abicompat/test3-fn-removed-report-0.txt: Likewise.
* tests/data/test-abicompat/test3-fn-removed-v0.cc: Likewise.
* tests/data/test-abicompat/test3-fn-removed-v1.cc: Likewise.
* tests/data/test-abicompat/test3-fn-removed-version-script-0 Likewise.:
* tests/data/test-abicompat/test3-fn-removed-version-script-1: Likewise.
* tests/data/Makefile.am: Add the new test inputs above to the
source distribution.
Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2014-11-30 17:18:55 +00:00
|
|
|
test-alt-dwarf-file/test0-debug-dir/.build-id/16/7088580c513b439c9ed95fe6a8b29496495f26.debug \
|
|
|
|
\
|
|
|
|
test-abicompat/libtest0-fn-changed-libapp-v0.so \
|
|
|
|
test-abicompat/libtest0-fn-changed-libapp-v1.so \
|
|
|
|
test-abicompat/test0-fn-changed-app \
|
|
|
|
test-abicompat/test0-fn-changed-0.suppr \
|
|
|
|
test-abicompat/test0-fn-changed-app.cc \
|
|
|
|
test-abicompat/test0-fn-changed-report-0.txt \
|
|
|
|
test-abicompat/test0-fn-changed-report-1.txt \
|
|
|
|
test-abicompat/test0-fn-changed-libapp.h \
|
|
|
|
test-abicompat/test0-fn-changed-libapp-v0.cc \
|
|
|
|
test-abicompat/test0-fn-changed-libapp-v1.cc \
|
|
|
|
test-abicompat/libtest1-fn-removed-v0.so \
|
|
|
|
test-abicompat/libtest1-fn-removed-v1.so \
|
|
|
|
test-abicompat/test1-fn-removed-app \
|
|
|
|
test-abicompat/test1-fn-removed-app.cc \
|
|
|
|
test-abicompat/test1-fn-removed-report-0.txt \
|
|
|
|
test-abicompat/test1-fn-removed-v0.cc \
|
|
|
|
test-abicompat/test1-fn-removed-v1.cc \
|
|
|
|
test-abicompat/libtest2-var-removed-v0.so \
|
|
|
|
test-abicompat/libtest2-var-removed-v1.so \
|
|
|
|
test-abicompat/test2-var-removed-app \
|
|
|
|
test-abicompat/test2-var-removed-app.cc \
|
|
|
|
test-abicompat/test2-var-removed-report-0.txt \
|
|
|
|
test-abicompat/test2-var-removed-v0.cc \
|
|
|
|
test-abicompat/test2-var-removed-v1.cc \
|
|
|
|
test-abicompat/libtest3-fn-removed-v0.so \
|
|
|
|
test-abicompat/libtest3-fn-removed-v1.so \
|
|
|
|
test-abicompat/test3-fn-removed-app \
|
|
|
|
test-abicompat/test3-fn-removed-app.cc \
|
|
|
|
test-abicompat/test3-fn-removed-report-0.txt \
|
|
|
|
test-abicompat/test3-fn-removed-v0.cc \
|
|
|
|
test-abicompat/test3-fn-removed-v1.cc \
|
|
|
|
test-abicompat/test3-fn-removed-version-script-0 \
|
2014-12-08 12:36:01 +00:00
|
|
|
test-abicompat/test3-fn-removed-version-script-1 \
|
|
|
|
test-abicompat/libtest4-soname-changed-v0.so \
|
|
|
|
test-abicompat/libtest4-soname-changed-v1.so \
|
|
|
|
test-abicompat/test4-soname-changed-app \
|
|
|
|
test-abicompat/test4-soname-changed-app.cc \
|
|
|
|
test-abicompat/test4-soname-changed-v0.cc \
|
|
|
|
test-abicompat/test4-soname-changed-v1.cc \
|
Add support for abicompat weak mode
This patch implements the weak mode of abicompat. In this mode, just
the application and the new version of the library are provided. The
types of functions and variables of the library that are consumed by
the application are compared to the types of the functions and
variables expected by the application. The goal is to check if the
types of the declarations consumed by the application and provided by
the library are compatible with what the application expects.
The abicompat first gets the set of symbols undefined in the
application and exported by the library. It then builds the set of
declarations exported by the library that have those symbols. We call
these the set of declarations of the library that are consumed by the
application.
Note that the debug information for the application does not contain
the declarations of the functions/variables whose symbols are
undefined. So we can not just read them to compare them to
declarations exported by the library.
But the *types* of the variables and the *sub-types* of the functions
whose symbols are undefined in the application are present in the
debug information of the application.
So in the weak mode, abicompat compare the *types* of the declarations
consumed by the application as expected by the application (described
by the debug information of the application) with the types of the
declarations exported by the library.
To do this a number of changes were necessary.
The patch builds a representation of all the types found in the
application's debug info. Before that, only the types that are
reachable from exported declarations were represented.
The abidw tool got a new --load-all-types to test this new ability of
loading all types.
The patch also adds support for looking a type, not by name, but by
its internal representation.
In the comparison engine, function_type_diff is introduced to
represent changes between two function types. For this, a new class
type_or_decl_base has been introduced in the IR. It's now the base
class for both decl_base and type_base. And abigail::comparison::diff
now takes two pointers of type_or_decl, not decl_base anymore. So
function_type_diff can take two function_type now; not that a
function_type has no declaration so it doesn't inherit decl_base. A
bunch of changes got made just to adjust to this modification.
A number of fixes were made too, to make this work, like adding
missing comparison operators, removing asserts that too strong, etc..
The patch also adjust the test suite as well as the documentation.
* include/abg-fwd.h (class type_or_decl_base): Forward declare
this.
(is_decl, is_type, is_function_type, get_name, get_type_name)
(get_function_type_name, get_pretty_representation)
(lookup_function_type_in_corpus, lookup_type_in_translation_unit)
(lookup_function_type_in_translation_unit)
(synthesize_function_type_from_translation_unit)
(hash_type_or_decl): New function declarations.
* src/abg-corpus.cc (lookup_type_in_corpus)
(lookup_function_type_in_corpus): Define new functions.
* include/abg-ir.h
(translation_unit::lookup_function_type_in_translation_unit):
Declare new friend function.
(class type_or_decl_base): Declare this.
(operator==(const type_or_decl_base&, const type_or_decl_base&)):
Declare new operator.
(operator==(const type_or_decl_base_sptr&, const
type_or_decl_base_sptr&)): Likewise.
(class {decl_base, type_base}): Make these class inherit
type_or_decl_base.
(decl_base::get_member_scopes): New const overload.
(bool operator==(const function_decl::parameter_sptr&,
const function_decl::parameter_sptr&)): New operator.
(function_type::get_parameters): Remove the non-const overload.
(function_type::get_pretty_representation): Declare new member
function.
(method_type::get_pretty_representation): Likewise.
* src/abg-ir.cc (bool operator==(const type_or_decl_base&, const
type_or_decl_base&)): Define new equality operator.
(bool operator==(const type_or_decl_base_sptr&, const
type_or_decl_base_sptr&)): Likewise.
(strip_typedef): Do not expect canonicalized types anymore. Now
the system accepts (and expects) canonicalized types in certain
cases. For instance, non-complete types and aggregated types that
contain non-complete sub-types.
(get_name, get_function_type_name, get_type_name)
(get_pretty_representation, is_decl, is_type, is_function_type)
(lookup_function_type_in_translation_unit)
(synthesize_function_type_from_translation_unit)
(lookup_type_in_scope, lookup_type_in_translation_unit): Define
new functions or new overloads.
(bool operator==(const function_decl::parameter_sptr&,
const function_decl::parameter_sptr& r)): Define
new operator.
(function_type::get_parameters): Remove non-const overload.
(function_type::get_pretty_representation): Define new function.
(function_type::traverse): Adjust.
(method_type::get_pretty_representation): Likewise.
(function_decl::get_pretty_representation): Avoid emitting the
type of cdtors.
(hash_type_or_decl): Define new function.
* include/abg-dwarf-reader.h (create_read_context)
(read_corpus_from_elf): Take a new 'read_all_types' flag.
* src/abg-dwarf-reader.cc (read_context::load_all_types_): New
flag.
(read_context::read_context): Initialize it.
(read_context::canonical_types_scheduled): If some types still
have non-canonicalized sub-types, then do not canonicalize them.
(read_context::load_all_types): New member functions.
(build_function_decl): Do not represent void return type like
empty type anymore, rather, represent it like a void type node.
(build_ir_node_from_die): When asked, load all types
including those that are not reachable from an exported
declaration.
(create_read_context, read_corpus_from_elf): Take a new
'load_all_types' flag and honour it.
* src/abg-reader.cc (read_context::type_is_from_translation_unit):
Support looking up function types in the current translation unit,
now that we now how to lookup function types.
* include/abg-comparison.h (diff_context::{has_diff_for, add_diff,
set_canonical_diff_for, set_or_get_canonical_diff_for,
get_canonical_diff_for}): Make these take instances of
type_or_decl_base_sptr, instead of decl_base_sptr.
(diff::diff): Likewise.
(diff::{first_subject, second_subject}): Make these return
type_or_decl_base_sptr instead of decl_base_sptr.
(type_diff_base::type_diff_base): Make these take instances of
type_or_decl_base_sptr instead of decl_base_sptr.
(distinct_diff::distinct_diff): Likewise.
(distinct_diff::{first, second}): Make these return
type_or_decl_base_sptr instead of decl_base_sptr.
(distinct_diff::entities_are_of_distinct_kinds): Make these take
instances of type_or_decl_base_sptr instead of decl_base_sptr.
(class function_type_diff): Create this new type. It's a
factorization of the function_decl_diff type.
* src/abg-comparison.cc ():
* src/abg-comp-filter.cc ({harmless, harmful}_filter::visit):
Adjust as diff::{first,second}_subject() now returns a
type_or_decl_base_sptr, no more a decl_base_sptr.
(decls_type, decls_diff_map_type): Remove these typedefs and replace it with ...
(types_or_decls_type, types_or_decls_diff_map_type): ... these.
(struct {decls_hash, decls_equals): Remove these type sand replace them with ...
(struct {types_or_decls_hash, types_or_decls_equals}): ... these.
({type_suppression, variable_suppression}::suppresses_diff):
Adjust.
(diff_context::priv::decls_diff_map): Replace this with ...
(diff_context::priv::types_or_decls_diff_map): ... this.
(diff_context::{has_diff_for, add_diff, get_canonical_diff_for,
set_canonical_diff_for, set_or_get_canonical_diff_for}): Take
type_or_decl_base_sptr instead of decl_base_sptr.
(diff::priv::{first, second}_subject): Make the type of these be
type_or_decl_base_sptr, no more decl_base_sptr.
(diff::priv::priv): Adjust for the subjects of the diff being of
type type_or_decl_sptr now, no more decl_base_sptr.
(diff_less_than_functor::operator()(const diff_sptr, const
diff_sptr) const): Adjust.
(diff::diff): djust for the subjects of the diff being of type
type_or_decl_sptr now, no more decl_base_sptr.
(diff::{first,second}_subject): Make the type of these be
type_or_decl_base_sptr, no more decl_base_sptr.
(report_size_and_alignment_changes): Likewise.
(type_diff_base::type_diff_base): Make the type of this be
type_or_decl_base_sptr instead of type_base_sptr.
(distinct_diff::distinct_diff): Make this take instances of
type_or_decl_base_sptr instead of decl_base_sptr.
(distinct_diff::{first, second, entities_are_of_distinct_kinds}):
Likewise.
(distinct_diff::has_changes): Simplify logic.
(distinct_diff::report): Adjust.
(compute_diff_for_types): Add an additional case to support the
new function_type.
(report_size_and_alignment_changes): Make this take instances of
type_or_decl_base_sptr instead of decl_base_sptr.
(class_diff::priv::member_type_has_changed): Return an instance of
type_or_decl_base_sptr rather than a decl_base_sptr.
(class_diff::report): Adjust.
(diff_comp::operator()(const diff&, diff&) const): Adjust.
(enum function_decl_diff::priv::Flags): Remove.
(function_decl_diff::priv::{first_fn_flags_, second_fn_flags_,
fn_flags_changes_}): Remove.
(function_decl_diff::priv::{fn_is_declared_inline_to_flag,
fn_binding_to_flag}): Remove.
(function_decl_diff::{deleted_parameter_at,
inserted_parameter_at}): Remove.
(function_decl_diff::ensure_lookup_tables_populated): Empty this.
(function_decl_diff::chain_into_hierarchy): Adjust.
(function_decl_diff::function_decl_diff): This now only takes the
subjects. It's body is now empty.
(function_decl_diff::{return_type_diff, subtype_changed_parms,
removed_parms, added_parms, type_diff}): Remove these member
functions.
(function_decl_diff::type_diff): Define new member function.
(function_decl_diff::report): Simplify logic by using the
reporting of the child type diff node.
(compute_diff): Likewise, in the overload for function_decl_sptr
simplify logic by using the child type diff object.
(function_type_diff::priv): Define new type.
(function_type_diff::{function_type_diff,
ensure_lookup_tables_populated, deleted_parameter_at,
inserted_parameter_at, finish_diff_type, first_function_type,
second_function_type, return_type_diff, subtype_changed_parms,
removed_parms, added_parms, get_pretty_representation,
has_changes, has_local_changes, report, chain_into_hierarchy}):
Define new functions.
(compute_diff): Define new overload for function_type_sptr.
* tools/abicompat.cc (options::weak_mode): New data member.
(options::options): Initialize it.
(enum abicompat_status): New enum
(abicompat_status operator|(abicompat_status, abicompat_status))
(abicompat_status& operator|=(abicompat_status &, abicompat_status))
(abicompat_status operator&(abicompat_status, abicompat_status)):
New operators to manipulate the abicompat_status enum.
(display_usage): Add help string for the new --weak-mode option.
(parse_command_line): Add the new --weak-mode command line
argument. If the tool is called with just the application and one
library then assume that we are in the weak mode.
(perform_compat_check_in_normal_mode): Define new function, factorized
from what was in the main function.
(perform_compat_check_in_weak_mode): Define new function.
(struct {fn,var}_change): Define new types.
(main): Use perform_compat_check_in_weak_mode() and
perform_compat_check_in_normal_mode().
* tools/abidiff.cc (main): Adjust.
* tools/abidw.cc: (options::load_all_types): Add new data member.
(options::options): Initialize it.
(display_usage): New help string for --load-all-types.
(parse_command_line): Support the new --load-all-types option.
(main): Adjust and honour the --load-all-types option.
* tools/abilint.cc (main): Adjust.
* doc/manuals/abicompat.rst: Update documentation for the new weak
mode. Also provide stuff that was missing from the examples
provided.
* doc/manuals/abidw.rst: Update documentation for the new
--load-all-types option.
* tests/print-diff-tree.cc (main): Adjust.
* tests/test-diff-dwarf.cc (main): Likewise.
* tests/test-read-dwarf.cc (main): Likewise.
* tests/data/test-abicompat/test0-fn-changed-app: Recompile this.
* tests/data/test-abicompat/libtest5-fn-changed-libapp-v{0,1}.so:
New new test input binaries
* tests/data/test-abicompat/test5-fn-changed-app: Likewise.
* tests/data/test-abicompat/test6-var-changed-app: Likewise.
* tests/data/test-abicompat/libtest6-var-changed-libapp-v{0,1}.so:
Likewise.
* tests/data/test-abicompat/test5-fn-changed-report-0.txt:
Reference output for one test above.
* tests/data/test-abicompat/test6-var-changed-report-0.txt:
Likewise.
* tests/data/test-abicompat/test5-fn-changed-app.cc: Source file
for a binary above.
* tests/data/test-abicompat/test5-fn-changed-libapp-v{0,1}.{h,cc}:
Likewise.
* tests/data/test-abicompat/test6-var-changed-libapp-v{0,1}.{cc,h}:
Likewise.
* tests/data/test-abicompat/test6-var-changed-app.cc: Likewise.
* tests/data/Makefile.am: Add the test related files above to the
source distribution.
* tests/test-abicompat.cc (in_out_spec): Add the new test input
above to the list of inputs to feed to this test harness.
(main): Support taking just the app and one library.
* tests/data/test-read-dwarf/test{0, 1, 2.so, 3.so, 5.o,
8-qualified-this-pointer.so,}.abi: Adjust for void type being
really emitted now, as opposed to just being an empty type.
Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2015-04-01 10:13:38 +00:00
|
|
|
test-abicompat/test4-soname-changed-report-0.txt \
|
|
|
|
test-abicompat/libtest5-fn-changed-libapp-v0.so \
|
|
|
|
test-abicompat/libtest5-fn-changed-libapp-v1.so \
|
|
|
|
test-abicompat/test5-fn-changed-app \
|
|
|
|
test-abicompat/test5-fn-changed-app.cc \
|
|
|
|
test-abicompat/test5-fn-changed-libapp-v0.cc \
|
|
|
|
test-abicompat/test5-fn-changed-libapp-v1.cc \
|
|
|
|
test-abicompat/test5-fn-changed-report-0.txt \
|
|
|
|
test-abicompat/libtest6-var-changed-libapp-v0.so \
|
|
|
|
test-abicompat/libtest6-var-changed-libapp-v1.so \
|
|
|
|
test-abicompat/test6-var-changed-app \
|
|
|
|
test-abicompat/test6-var-changed-app.cc \
|
|
|
|
test-abicompat/test6-var-changed-libapp-v0.cc \
|
|
|
|
test-abicompat/test6-var-changed-libapp-v1.cc \
|
2015-07-16 09:05:04 +00:00
|
|
|
test-abicompat/test6-var-changed-report-0.txt \
|
2015-07-20 10:31:03 +00:00
|
|
|
test-abicompat/libtest7-fn-changed-libapp-v0.so \
|
|
|
|
test-abicompat/libtest7-fn-changed-libapp-v1.so \
|
|
|
|
test-abicompat/test7-fn-changed-app \
|
|
|
|
test-abicompat/test7-fn-changed-app.c \
|
|
|
|
test-abicompat/test7-fn-changed-libapp-v0.c \
|
|
|
|
test-abicompat/test7-fn-changed-libapp-v0.h \
|
|
|
|
test-abicompat/test7-fn-changed-libapp-v1.c \
|
|
|
|
test-abicompat/test7-fn-changed-libapp-v1.h \
|
|
|
|
test-abicompat/test7-fn-changed-report-0.txt \
|
2015-07-20 14:14:01 +00:00
|
|
|
test-abicompat/test7-fn-changed-report-1.txt \
|
2015-07-16 09:05:04 +00:00
|
|
|
\
|
|
|
|
test-diff-pkg/dbus-glib-0.104-3.fc23.x86_64.rpm \
|
|
|
|
test-diff-pkg/dbus-glib-0.80-3.fc12.x86_64.rpm \
|
|
|
|
test-diff-pkg/dbus-glib-debuginfo-0.104-3.fc23.x86_64.rpm \
|
|
|
|
test-diff-pkg/dbus-glib-debuginfo-0.80-3.fc12.x86_64.rpm \
|
|
|
|
test-diff-pkg/test-rpm-report-0.txt \
|
|
|
|
test-diff-pkg/test-rpm-report-1.txt \
|
|
|
|
test-diff-pkg/test-rpm-report-2.txt \
|
|
|
|
test-diff-pkg/test-rpm-report-3.txt \
|
2015-08-06 11:56:48 +00:00
|
|
|
test-diff-pkg/test-rpm-report-4.txt \
|
2015-08-07 08:48:17 +00:00
|
|
|
test-diff-pkg/test-rpm-report-5.txt \
|
|
|
|
test-diff-pkg/libsigc++-2.0-0c2a-dbgsym_2.4.0-1_amd64.ddeb \
|
|
|
|
test-diff-pkg/libsigc++-2.0-0c2a_2.4.0-1_amd64--libsigc++-2.0-0v5_2.4.1-1ubuntu2_amd64-report-0.txt \
|
|
|
|
test-diff-pkg/libsigc++-2.0-0c2a_2.4.0-1_amd64.deb \
|
|
|
|
test-diff-pkg/libsigc++-2.0-0v5-dbgsym_2.4.1-1ubuntu2_amd64.ddeb \
|
2015-08-22 09:44:08 +00:00
|
|
|
test-diff-pkg/libsigc++-2.0-0v5_2.4.1-1ubuntu2_amd64.deb \
|
Bug 19082 - Recognize suppression spec files
When abipkgdiff is invoked on a set of packages, the newer (second) one is also
inspected for files matching the pattern '*.abignore', whose contents are read
and interpreted as suppression specifications.
* 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.
Signed-off-by: Ondrej Oprala <ooprala@redhat.com>
2015-10-13 07:19:47 +00:00
|
|
|
test-diff-pkg/dirpkg-0-dir1/dir.abignore \
|
2015-08-22 09:44:08 +00:00
|
|
|
test-diff-pkg/dirpkg-0-dir1/libobj-v0.so \
|
|
|
|
test-diff-pkg/dirpkg-0-dir1/obj-v0.cc \
|
Bug 19082 - Recognize suppression spec files
When abipkgdiff is invoked on a set of packages, the newer (second) one is also
inspected for files matching the pattern '*.abignore', whose contents are read
and interpreted as suppression specifications.
* 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.
Signed-off-by: Ondrej Oprala <ooprala@redhat.com>
2015-10-13 07:19:47 +00:00
|
|
|
test-diff-pkg/dirpkg-0-dir2/libobj-v0.so \
|
Make abipkgdiff compare tar archives containing binaries
This patch adds support for comparing the ABI of binaries contained in
a tar archive.
If the archive is compressed with gzip, bzip2, lzip, lzma or xz, then
abipkgdiff recognizes the usual relevant file extensions and lets the
GNU tar program handle the decompression.
If the archive is not compressed, abipkgdiff recognizes the UStar
(Uniform Standard Tape ARchive) format, even if the archive file name
doesn't end with the .tar extension, and lets the GNU tar program
handle the extraction. If the file ends up with the .tar extension
anyway (even if it's not in the UStar format, abipkgdiff lets the GNU
tar program handle its extraction.
* 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.
Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2015-08-22 11:59:18 +00:00
|
|
|
test-diff-pkg/dirpkg-0-dir2/obj-v0.cc \
|
Bug 19082 - Recognize suppression spec files
When abipkgdiff is invoked on a set of packages, the newer (second) one is also
inspected for files matching the pattern '*.abignore', whose contents are read
and interpreted as suppression specifications.
* 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.
Signed-off-by: Ondrej Oprala <ooprala@redhat.com>
2015-10-13 07:19:47 +00:00
|
|
|
test-diff-pkg/dirpkg-0-report-0.txt \
|
|
|
|
test-diff-pkg/dirpkg-1-dir1/libobj-v0.so \
|
|
|
|
test-diff-pkg/dirpkg-1-dir1/obj-v0.cc \
|
|
|
|
test-diff-pkg/dirpkg-1-dir2/dir.abignore \
|
|
|
|
test-diff-pkg/dirpkg-1-dir2/libobj-v0.so \
|
|
|
|
test-diff-pkg/dirpkg-1-dir2/obj-v0.cc \
|
|
|
|
test-diff-pkg/dirpkg-1-report-0.txt \
|
|
|
|
test-diff-pkg/dirpkg-1-report-1.txt \
|
|
|
|
test-diff-pkg/dirpkg-2-dir1/libobj-v0.so \
|
|
|
|
test-diff-pkg/dirpkg-2-dir1/obj-v0.cc \
|
|
|
|
test-diff-pkg/dirpkg-2-dir2/.abignore \
|
|
|
|
test-diff-pkg/dirpkg-2-dir2/dir.abignore \
|
|
|
|
test-diff-pkg/dirpkg-2-dir2/libobj-v0.so \
|
|
|
|
test-diff-pkg/dirpkg-2-dir2/obj-v0.cc \
|
|
|
|
test-diff-pkg/dirpkg-2-report-0.txt \
|
|
|
|
test-diff-pkg/dirpkg-2-report-1.txt \
|
|
|
|
test-diff-pkg/dirpkg-3-dir1/libobj-v0.so \
|
|
|
|
test-diff-pkg/dirpkg-3-dir1/obj-v0.cc \
|
|
|
|
test-diff-pkg/dirpkg-3-dir2/.abignore \
|
|
|
|
test-diff-pkg/dirpkg-3-dir2/libobj-v0.so \
|
|
|
|
test-diff-pkg/dirpkg-3-dir2/obj-v0.cc \
|
|
|
|
test-diff-pkg/dirpkg-3-report-0.txt \
|
|
|
|
test-diff-pkg/dirpkg-3-report-1.txt \
|
|
|
|
test-diff-pkg/dirpkg-3.suppr \
|
Make abipkgdiff compare tar archives containing binaries
This patch adds support for comparing the ABI of binaries contained in
a tar archive.
If the archive is compressed with gzip, bzip2, lzip, lzma or xz, then
abipkgdiff recognizes the usual relevant file extensions and lets the
GNU tar program handle the decompression.
If the archive is not compressed, abipkgdiff recognizes the UStar
(Uniform Standard Tape ARchive) format, even if the archive file name
doesn't end with the .tar extension, and lets the GNU tar program
handle the extraction. If the file ends up with the .tar extension
anyway (even if it's not in the UStar format, abipkgdiff lets the GNU
tar program handle its extraction.
* 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.
Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2015-08-22 11:59:18 +00:00
|
|
|
test-diff-pkg/tarpkg-0-dir1.tar \
|
|
|
|
test-diff-pkg/tarpkg-0-dir1.ta \
|
|
|
|
test-diff-pkg/tarpkg-0-dir1.tar.bz2 \
|
|
|
|
test-diff-pkg/tarpkg-0-dir1.tar.gz \
|
|
|
|
test-diff-pkg/tarpkg-0-dir2.tar \
|
|
|
|
test-diff-pkg/tarpkg-0-dir2.ta \
|
|
|
|
test-diff-pkg/tarpkg-0-dir2.tar.bz2 \
|
|
|
|
test-diff-pkg/tarpkg-0-dir2.tar.gz \
|
|
|
|
test-diff-pkg/tarpkg-0-report-0.txt
|