2013-08-27 11:38:10 +00:00
|
|
|
h=$(abs_srcdir)
|
|
|
|
|
2014-08-31 08:34:11 +00:00
|
|
|
if ENABLE_ZIP_ARCHIVE
|
|
|
|
ZIP_ARCHIVE_TESTS = runtestwritereadarchive runtestdot
|
|
|
|
else
|
|
|
|
ZIP_ARCHIVE_TESTS =
|
|
|
|
endif
|
|
|
|
|
2013-10-03 00:05:53 +00:00
|
|
|
TESTS= \
|
|
|
|
runtestreadwrite \
|
2014-08-31 08:34:11 +00:00
|
|
|
${ZIP_ARCHIVE_TESTS} \
|
2014-01-07 14:34:42 +00:00
|
|
|
runtestreaddwarf \
|
2014-04-21 15:43:15 +00:00
|
|
|
runtestlookupsyms \
|
Support alternate debug info sections
ABGBZ#17193
* include/abg-dwarf-reader.h (class read_context)
(typedef read_context_sptr, create_read_context)
(has_alt_debug_info): Declare these.
(read_corpus_from_elf): Declare new overload.
* src/abg-dwarf-reader.cc (find_alt_debug_info)
(is_die_attribute_resolved_through_gnu_ref_alt)
(build_primary_die_parent_relations_under)
(build_alternate_die_parent_relations_under):
Define new static functions.
(read_context::{alt_dwarf_,
alt_debug_info_path_, alternate_die_decl_map_,
alternate_die_parent_map_}): New data members.
(read_context::{alt_dwarf, alt_debug_info_path,
alternate_die_decl_map, associate_die_to_decl_primary,
associate_die_to_decl_alternate, associate_die_to_decl,
lookup_decl_from_die_offset_primary,
lookup_decl_from_die_offset_alternate,
lookup_decl_from_die_offset, alternate_die_parent_map}): New
member functions.
(read_context::load_debug_info): Painfully Get a handle on the
alternate debug info section too. We shouldn't have to do all
this work; we could use the new dwarf_getalt() function from
libdw, but we cannot as we want to support supports that predate
that api. When a version of elfutils gets released with that api
though, we should conditionally use that instead.
(build_ir_node_from_die, get_parent_die, get_scope_for_die)
(build_namespace_decl_and_add_to_ir)
(build_class_type_and_add_to_ir, build_qualified_type)
(build_pointer_type_def, build_reference_type, build_typedef_type)
(build_var_decl, build_function_decl): Take a new parameter that
tells if the input DIE is from alternate debug info. Adjust their
code accordingly.
(die_die_attribute): Take a new output parameter that tells if the
resolved DIE is from alternate debug info. Also take a new
parameter that tells if the input DIE is from alternate debug info
sections.
(build_die_parent_relations_under): Take the DIE -> parent map to
act upon. Also, add a new overload that takes a flag saying if
the DIE is from alternate debug info or not, and act upon that.
(build_die_parent_maps): Renamed build_die_parent_map into this
and make it build DIE -> parent DIE relationship for the alternate
debug info file as well.
(find_last_import_unit_point_before_die, ): Adjust to use the
information about if the relevant DIEs are in alternate debug info
or not.
(build_translation_unit_and_add_to_ir): Clear the alternate DIE ->
decl map, that is per TU just as the primary DIE -> decl map.
Adjust to use the information about if the relevant DIEs are in
alternate debug info or not.
(read_debug_info_into_corpus): Build the two DIE -> DIE parent
maps (one for the primary debug info and one for the alternate
debug info).
(create_read_context, has_alt_debug_info): Define new public entry
points.
(read_corpus_from_elf): New entry point overload that takes a
read_context.
* tools/bidw.cc (options::{check_alt_debug_info_path,
show_base_name_alt_debug_info_path}): New data members.
(display_usage): Update for the two new options
--check-alternate-debug-info and
check-alternate-debug-info-base-name.
(parse_command_line): Parse the two options above.
(main) Handle the two new options above.
* tests/Makefile.am: Build the new runtestaltdwarf test. Add the
new data/test-alt-dwarf-file/* files to the build system.
* tests/test-alt-dwarf-file.cc: New test driver.
* tests/data/test-alt-dwarf-file/test0-common.cc: New test input
files.
* tests/data/test-alt-dwarf-file/libtest0-common.so: Likewise.
* tests/data/test-alt-dwarf-file/test0.cc: Likewise.
* tests/data/test-alt-dwarf-file/libtest0.so: Likewise.
* tests/data/test-alt-dwarf-file/test0.h: Likewise.
* tests/data/test-alt-dwarf-file/test0-common-dwz.debug: Likewise.
* tests/data/test-alt-dwarf-file/test0-debug-dir/.build-id/16/7088580c513b439c9ed95fe6a8b29496495f26.debug:
Likewise.
* tests/data/test-alt-dwarf-file/test0-debug-dir/test0-common-dwz.debug:
Likewise.
* tests/data/test-read-dwarf/test1.abi: Adjust. bidw doesn't emit
an abstract constructor/destructor anymore. It emits just the
functions matching the cdtor symbols found in the binary.
* tests/data/test-read-dwarf/test2.so.abi: Likewise.
Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2014-08-15 16:11:49 +00:00
|
|
|
runtestaltdwarf \
|
2013-10-03 00:05:53 +00:00
|
|
|
runtestcorediff \
|
2014-09-26 08:58:16 +00:00
|
|
|
runtestabidiff \
|
2014-03-21 14:15:02 +00:00
|
|
|
runtestdiffdwarf \
|
2014-03-29 05:44:13 +00:00
|
|
|
runtestdifffilter \
|
2014-08-31 08:34:11 +00:00
|
|
|
runtestsvg
|
|
|
|
|
2013-03-21 22:42:41 +00:00
|
|
|
|
Implement generic diff tree walking and port categorization over it
* include/abg-comp-filter.h (apply_filter): Declare new overload
that takes a corpus_diff_sptr ...
* src/abg-comp-filter.cc (apply_filter): ... and define it. On
the existing overload for diff_sptr, make sure to traverse all
diff nodes, even those that have already been traversed.
* include/abg-comparison.h (enum diff_category): Remove
NOT_REDUNDANT_CATEGORY, add REDUNDANT_CATEGORY.
(operator&=, +operator<<): Declare new operators for enum diff_category.
(diff_context::{forbid_traversing_a_node_twice,
traversing_a_node_twice_is_forbidden):
(diff_context::categorizing_redundancy): Remove this declaration.
(diff_context::maybe_apply_filters): Declare a new overload that
takes a corpus_diff_sptr. And a take a new flag that says if it
should visit all nodes including those that have already been
visited.
(diff::priv_): Make this data member protected.
(diff::{begin_traversing, is_traversing, end_traversing,
finish_diff_type, children_nodes, append_child_node,
get_pretty_representation, chain_into_hierarchy, traverse}):
Declare new member functions.
(distinct_diff::{finish_diff_type, get_pretty_representation,
chain_into_hierarchy}): Likewise.
(distinct_diff::traverse): Remove.
(pointer_diff::pointer_diff): Take the underlying type diff in
parameter.
(pointer_diff::{finish_diff_type, get_pretty_representation,
chain_into_hierarchy}): Declare new member functions.
(pointer_diff::traverse): Remove.
(reference_type_def::reference_type_def): Take the underlying type
diff in parameter.
({array_type_def, reference_type_def}::{finish_diff_type,
get_pretty_representation, chain_into_hierarchy}): Declare new
member functions.
({array_type_diff, reference_type_def}::traverse): Remove.
(qualified_type_diff::qualified_type_diff): Take the underlying
type diff in parameter.
({enum_diff, qualified_type_diff, class_diff}::{finish_diff_type,
get_pretty_representation, chain_into_hierarchy}): Declare new
member functions.
({enum_diff, qualified_type_diff, class_diff}::traverse): Remove.
(is_class_diff): Declare new function.
(base_diff::base_diff): Take the underlying type diff in
parameter.
({scope_diff, base_diff}::{finish_diff_type, get_pretty_representation,
chain_into_hierarchy}): Declare new member functions.
({scope_diff, base_diff}::traverse): Remove.
(function_decl_diff::function_decl_diff): Take the return type
diff as parameter.
({function_decl_diff, type_decl_diff}::{finish_diff_type,
get_pretty_representation, chain_into_hierarchy}): Declare new
member functions.
({function_decl_diff, type_decl_diff}::traverse): Remove.
(typedef_diff::typedef_diff): Take the underlying type diff as
parameter.
(typedef::{finish_diff_type, get_pretty_representation,
chain_into_hierarchy}): Declare new member functions.
({typedef, translation_unit_diff}::traverse): Remove member
function.
(corpus_diff::{finish_diff_type, children_nodes,
append_child_node, changed_variables, get_pretty_representation,
chain_into_hierarchy}): Declare new member functions.
(class diff_node_visitor::{visit_begin, visit_end}): Declare new
member functions.
(propagate_categories, print_diff_tree, categorizing_redundancy)
(clear_redundancy_categorization, apply_filters): New functions
and function overloads.
* src/abg-comparison.cc (TRY_PRE_VISIT, TRY_PRE_VISIT_CLASS_DIFF)
(TRY_POST_VISIT, TRY_POST_VISIT_CLASS_DIFF)
(CATEGORIZE_REDUNDANCY_FROM_CHILD_NODE)
(UPDATE_REDUNDANCY_CATEGORIZATION_FROM_NODE_SUBTREE)
(TRAVERSE_DIFF_NODE_AND_PROPAGATE_CATEGORY)
(TRAVERSE_MEM_DIFF_NODE_AND_PROPAGATE_CATEGORY)
(TRAVERSE_MEM_FN_DIFF_NODE_AND_PROPAGATE_CATEGORY)
(ENSURE_DIFF_NODE_TRAVERSED_ONCE)
(ENSURE_MEM_DIFF_NODE_TRAVERSED_ONCE): Remove these macros.
Hurrah.
(diff_context::priv::categorizing_redundancy_): Remove.
(diff_context::priv::forbid_traversing_a_node_twice_): Add new
data member.
(diff_context::priv::priv): Adjust.
(diff_context::{forbid_traversing_a_node_twice,
traversing_a_node_twice_is_forbidden}): Define new member
functions.
(diff_context::maybe_apply_filters): Once filters are applied (and
categories are set to the relevant diff tree nodes, run a pass
over the diff tree to propagate the categories to the relevant
diff tree parent nodes. Add an overload for corpus_diff_sptr.
(diff_context::categorizing_redundancy): Remove member function.
(diff_context::maybe_apply_filters): Define a new overload for
corpus_diff_sptr
(struct diff::priv::{finished_, traversing_, children_,
pretty_representation_}): New data members.
(diff::priv::priv): Adjust.
(diff::{begin_traversing, is_traversing, end_traversing,
finish_diff_type, children_nodes, append_child_node, traverse,
set_category, get_pretty_representation, chain_into_hierarchy}):
Define new member functions.
(diff::is_filtered_out): Do not refer to NOT_REDUNDANT_CATEGORY
anymore. Rather, use the new REDUNDANT_CATEGORY.
({distinct_diff, var_diff, pointer_diff, array_diff,
reference_diff, qualified_type_diff, enum_diff, class_diff,
base_diff, scope_diff, function_decl_diff, type_decl_diff,
typedef_diff}::{get_pretty_representation, chain_into_hierarchy,
finish_diff_type}): Define new member functions.
({distinct_diff, var_diff, pointer_diff, array_diff,
reference_diff, qualified_type_diff, enum_diff, class_diff,
base_diff, scope_diff, function_decl_diff, type_decl_diff,
typedef_diff, translation_unit_diff}::traverse): Remove member
functions.
(operator&=, operator<<): Define new operators for diff_category.
({function_decl_diff, typedef_diff}::priv::priv): Add a new
constructor.
(pointer_diff::{priv::priv, pointer_diff})
(reference_diff::{priv::priv, reference_diff})
(qualified_type_diff::{priv::priv, qualified_type_diff})
(enum_diff::{priv::priv, enum_diff}, base_diff::{priv::priv,
base_diff}, function_decl_diff::function_decl_diff): Take the
underlying type diff in parameter.
(compute_diff): Adjust the pointer_diff, reference_diff,
qualified_type_diff, base_diff, function_decl_diff overloads.
(class_diff::priv::{count_filtered_bases,
count_filtered_subtype_changed_dm, count_filtered_changed_dm,
count_filtered_changed_mem_fns, count_filtered_inserted_mem_fns,
count_filtered_deleted_mem_fns}): Adjust for the call to
diff_context::maybe_apply_filters.
(corpus_diff::priv::{finished_, pretty_representation_}): New data
member.
(corpus_diff::priv::priv): New constructor.
(corpus_diff::priv::clear_redundancy_categorization): Define new
member function.
(corpus_diff::priv::apply_filters_and_compute_diff_stats):
Adjust for call to diff_context::maybe_apply_filters. Also, call
clear_redundancy_categorization at the end.
(corpus_diff::priv::categorize_redundant_changed_sub_nodes):
Revisit logic.
(corpus_diff::{chain_into_hierarchy, finish_diff_type,
children_nodes, append_child_node, changed_variables,
get_pretty_representation}): Define new member functions.
(corpus_diff::report): Categorize redundancy for every top level
function/variable diff.
(corpus_diff::traverse): Adjust to the new traversing interface.
(diff_node_visitor::{visit_begin, visit_end}): Define new member
functions.
(struct category_propagation_visitor, struct diff_node_printer)
(struct redundancy_marking_visitor, struct
redundancy_clearing_visitor): New diff tree node visitors.
(propagate_categories, print_diff_tree, categorize_redundancy)
(clear_redundancy_categorization, apply_filters): Define new
functions.
* tests/Makefile.am: Add the new tests/print-diff-tree.cc to the
source distribution. Build it into a tests/printdifftree binary.
* tools/abidiff.cc (print_diff_tree): Add debugging functions to
call from within the debugger. By default, this function and its
overloads are not compiled.
Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2014-10-10 11:15:40 +00:00
|
|
|
noinst_PROGRAMS= $(TESTS) testirwalker testdiff2 printdifftree
|
2013-03-21 22:42:41 +00:00
|
|
|
|
|
|
|
noinst_LTLIBRARIES = libtestutils.la
|
|
|
|
|
2013-08-27 13:18:59 +00:00
|
|
|
libtestutils_la_SOURCES= \
|
|
|
|
test-utils.h \
|
2013-05-03 13:28:10 +00:00
|
|
|
test-utils.cc
|
2013-03-21 22:42:41 +00:00
|
|
|
|
2013-08-29 15:08:47 +00:00
|
|
|
libtestutils_la_LIBADD=$(top_builddir)/tools/libtoolsutils.la
|
|
|
|
libtestutils_la_DEPENDENCIES=$(top_builddir)/tools/libtoolsutils.la
|
|
|
|
|
2013-03-21 22:42:41 +00:00
|
|
|
libtestutils_la_CXXFLAGS= \
|
2013-08-29 15:08:47 +00:00
|
|
|
-DABIGAIL_SRC_DIR=\"${abs_top_srcdir}\" \
|
|
|
|
-DABIGAIL_BUILD_DIR=\"${abs_top_builddir}\"
|
2013-03-21 22:42:41 +00:00
|
|
|
|
2014-06-23 12:23:04 +00:00
|
|
|
runtestreadwrite_SOURCES=test-read-write.cc
|
2013-10-03 00:05:53 +00:00
|
|
|
runtestreadwrite_LDADD=libtestutils.la $(top_builddir)/src/libabigail.la
|
2013-03-21 22:42:41 +00:00
|
|
|
|
2014-06-23 12:23:04 +00:00
|
|
|
runtestwritereadarchive_SOURCES=test-write-read-archive.cc
|
2013-08-29 15:08:47 +00:00
|
|
|
runtestwritereadarchive_LDADD= libtestutils.la $(top_builddir)/src/libabigail.la $(top_builddir)/tools/libtoolsutils.la
|
2013-08-27 13:18:59 +00:00
|
|
|
|
2014-06-23 12:23:04 +00:00
|
|
|
runtestreaddwarf_SOURCES=test-read-dwarf.cc
|
2014-01-07 14:34:42 +00:00
|
|
|
runtestreaddwarf_LDADD=libtestutils.la $(top_builddir)/src/libabigail.la
|
|
|
|
|
2014-06-23 12:23:04 +00:00
|
|
|
runtestlookupsyms_SOURCES=test-lookup-syms.cc
|
2014-04-21 15:43:15 +00:00
|
|
|
runtestlookupsyms_LDADD=libtestutils.la $(top_builddir)/src/libabigail.la
|
|
|
|
|
Support alternate debug info sections
ABGBZ#17193
* include/abg-dwarf-reader.h (class read_context)
(typedef read_context_sptr, create_read_context)
(has_alt_debug_info): Declare these.
(read_corpus_from_elf): Declare new overload.
* src/abg-dwarf-reader.cc (find_alt_debug_info)
(is_die_attribute_resolved_through_gnu_ref_alt)
(build_primary_die_parent_relations_under)
(build_alternate_die_parent_relations_under):
Define new static functions.
(read_context::{alt_dwarf_,
alt_debug_info_path_, alternate_die_decl_map_,
alternate_die_parent_map_}): New data members.
(read_context::{alt_dwarf, alt_debug_info_path,
alternate_die_decl_map, associate_die_to_decl_primary,
associate_die_to_decl_alternate, associate_die_to_decl,
lookup_decl_from_die_offset_primary,
lookup_decl_from_die_offset_alternate,
lookup_decl_from_die_offset, alternate_die_parent_map}): New
member functions.
(read_context::load_debug_info): Painfully Get a handle on the
alternate debug info section too. We shouldn't have to do all
this work; we could use the new dwarf_getalt() function from
libdw, but we cannot as we want to support supports that predate
that api. When a version of elfutils gets released with that api
though, we should conditionally use that instead.
(build_ir_node_from_die, get_parent_die, get_scope_for_die)
(build_namespace_decl_and_add_to_ir)
(build_class_type_and_add_to_ir, build_qualified_type)
(build_pointer_type_def, build_reference_type, build_typedef_type)
(build_var_decl, build_function_decl): Take a new parameter that
tells if the input DIE is from alternate debug info. Adjust their
code accordingly.
(die_die_attribute): Take a new output parameter that tells if the
resolved DIE is from alternate debug info. Also take a new
parameter that tells if the input DIE is from alternate debug info
sections.
(build_die_parent_relations_under): Take the DIE -> parent map to
act upon. Also, add a new overload that takes a flag saying if
the DIE is from alternate debug info or not, and act upon that.
(build_die_parent_maps): Renamed build_die_parent_map into this
and make it build DIE -> parent DIE relationship for the alternate
debug info file as well.
(find_last_import_unit_point_before_die, ): Adjust to use the
information about if the relevant DIEs are in alternate debug info
or not.
(build_translation_unit_and_add_to_ir): Clear the alternate DIE ->
decl map, that is per TU just as the primary DIE -> decl map.
Adjust to use the information about if the relevant DIEs are in
alternate debug info or not.
(read_debug_info_into_corpus): Build the two DIE -> DIE parent
maps (one for the primary debug info and one for the alternate
debug info).
(create_read_context, has_alt_debug_info): Define new public entry
points.
(read_corpus_from_elf): New entry point overload that takes a
read_context.
* tools/bidw.cc (options::{check_alt_debug_info_path,
show_base_name_alt_debug_info_path}): New data members.
(display_usage): Update for the two new options
--check-alternate-debug-info and
check-alternate-debug-info-base-name.
(parse_command_line): Parse the two options above.
(main) Handle the two new options above.
* tests/Makefile.am: Build the new runtestaltdwarf test. Add the
new data/test-alt-dwarf-file/* files to the build system.
* tests/test-alt-dwarf-file.cc: New test driver.
* tests/data/test-alt-dwarf-file/test0-common.cc: New test input
files.
* tests/data/test-alt-dwarf-file/libtest0-common.so: Likewise.
* tests/data/test-alt-dwarf-file/test0.cc: Likewise.
* tests/data/test-alt-dwarf-file/libtest0.so: Likewise.
* tests/data/test-alt-dwarf-file/test0.h: Likewise.
* tests/data/test-alt-dwarf-file/test0-common-dwz.debug: Likewise.
* tests/data/test-alt-dwarf-file/test0-debug-dir/.build-id/16/7088580c513b439c9ed95fe6a8b29496495f26.debug:
Likewise.
* tests/data/test-alt-dwarf-file/test0-debug-dir/test0-common-dwz.debug:
Likewise.
* tests/data/test-read-dwarf/test1.abi: Adjust. bidw doesn't emit
an abstract constructor/destructor anymore. It emits just the
functions matching the cdtor symbols found in the binary.
* tests/data/test-read-dwarf/test2.so.abi: Likewise.
Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2014-08-15 16:11:49 +00:00
|
|
|
runtestaltdwarf_SOURCES=test-alt-dwarf-file.cc
|
|
|
|
runtestaltdwarf_LDADD=libtestutils.la $(top_builddir)/src/libabigail.la
|
|
|
|
|
2014-06-23 12:23:04 +00:00
|
|
|
runtestcorediff_SOURCES=test-core-diff.cc
|
2013-10-03 00:05:53 +00:00
|
|
|
runtestcorediff_LDADD=libtestutils.la $(top_builddir)/src/libabigail.la
|
|
|
|
|
2014-09-26 08:58:16 +00:00
|
|
|
runtestabidiff_SOURCES = test-abidiff.cc
|
|
|
|
runtestabidiff_LDADD = libtestutils.la $(top_builddir)/src/libabigail.la
|
2013-11-29 12:49:50 +00:00
|
|
|
|
2014-06-23 12:23:04 +00:00
|
|
|
runtestdiffdwarf_SOURCES = test-diff-dwarf.cc
|
2014-03-21 14:15:02 +00:00
|
|
|
runtestdiffdwarf_LDADD = libtestutils.la $(top_builddir)/src/libabigail.la
|
|
|
|
|
2014-06-23 12:23:04 +00:00
|
|
|
runtestdifffilter_SOURCES = test-diff-filter.cc
|
2014-03-29 05:44:13 +00:00
|
|
|
runtestdifffilter_LDADD = libtestutils.la $(top_builddir)/src/libabigail.la
|
|
|
|
|
2014-06-23 12:23:04 +00:00
|
|
|
runtestsvg_SOURCES=test-svg.cc
|
2013-05-28 08:22:08 +00:00
|
|
|
runtestsvg_LDADD=$(top_builddir)/src/libabigail.la
|
|
|
|
|
2014-06-23 12:23:04 +00:00
|
|
|
runtestdot_SOURCES=test-dot.cc
|
2013-07-02 01:08:18 +00:00
|
|
|
runtestdot_LDADD=$(top_builddir)/src/libabigail.la
|
|
|
|
|
2014-06-23 12:23:04 +00:00
|
|
|
testirwalker_SOURCES=test-ir-walker.cc
|
2014-03-21 08:32:14 +00:00
|
|
|
testirwalker_LDADD=$(top_builddir)/src/libabigail.la
|
Implement a translation unit traversal API
* include/libabigail/abg-ir.h (struct ir_node_visitor, struct
traversable): New interfaces.
(translation_unit, scope_decl, type_decl, qualified_type_def)
(pointer_type_def, reference_type_def, enum_type_decl)
(typedef_decl, var_decl, function_decl, data_member)
(member_function, member_function_template)
(member_class_template): Implement the traversable interface,
overload the traversable::traverse pure virtual function.
* src/abg-ir.cc ({translation_unit, scope_decl, type_decl,
namespace_decl, qualified_type_def, pointer_type_def,
reference_type_def, enum_type_decl, typedef_decl, var_decl,
function_decl, class_decl::member_function, class_decl,
class_decl::data_member, class_decl::member_function_template,
class_decl::member_class_template, function_template_decl,
class_template_decl, }::traverse): Implement traversal.
(ir_node_visitor::visit): New method, overloaded for the types
above, which implement the traversable interface.
* tests/test-walker.cc: New test case program to showcase how to
use the new traversal API.
* tests/makefile.am: Add test-walker.cc to the build system.
2013-07-20 10:30:04 +00:00
|
|
|
|
2014-06-23 12:23:04 +00:00
|
|
|
testdiff2_SOURCES=test-diff2.cc
|
2013-10-02 21:52:58 +00:00
|
|
|
testdiff2_LDADD=$(top_builddir)/src/libabigail.la
|
|
|
|
|
Implement generic diff tree walking and port categorization over it
* include/abg-comp-filter.h (apply_filter): Declare new overload
that takes a corpus_diff_sptr ...
* src/abg-comp-filter.cc (apply_filter): ... and define it. On
the existing overload for diff_sptr, make sure to traverse all
diff nodes, even those that have already been traversed.
* include/abg-comparison.h (enum diff_category): Remove
NOT_REDUNDANT_CATEGORY, add REDUNDANT_CATEGORY.
(operator&=, +operator<<): Declare new operators for enum diff_category.
(diff_context::{forbid_traversing_a_node_twice,
traversing_a_node_twice_is_forbidden):
(diff_context::categorizing_redundancy): Remove this declaration.
(diff_context::maybe_apply_filters): Declare a new overload that
takes a corpus_diff_sptr. And a take a new flag that says if it
should visit all nodes including those that have already been
visited.
(diff::priv_): Make this data member protected.
(diff::{begin_traversing, is_traversing, end_traversing,
finish_diff_type, children_nodes, append_child_node,
get_pretty_representation, chain_into_hierarchy, traverse}):
Declare new member functions.
(distinct_diff::{finish_diff_type, get_pretty_representation,
chain_into_hierarchy}): Likewise.
(distinct_diff::traverse): Remove.
(pointer_diff::pointer_diff): Take the underlying type diff in
parameter.
(pointer_diff::{finish_diff_type, get_pretty_representation,
chain_into_hierarchy}): Declare new member functions.
(pointer_diff::traverse): Remove.
(reference_type_def::reference_type_def): Take the underlying type
diff in parameter.
({array_type_def, reference_type_def}::{finish_diff_type,
get_pretty_representation, chain_into_hierarchy}): Declare new
member functions.
({array_type_diff, reference_type_def}::traverse): Remove.
(qualified_type_diff::qualified_type_diff): Take the underlying
type diff in parameter.
({enum_diff, qualified_type_diff, class_diff}::{finish_diff_type,
get_pretty_representation, chain_into_hierarchy}): Declare new
member functions.
({enum_diff, qualified_type_diff, class_diff}::traverse): Remove.
(is_class_diff): Declare new function.
(base_diff::base_diff): Take the underlying type diff in
parameter.
({scope_diff, base_diff}::{finish_diff_type, get_pretty_representation,
chain_into_hierarchy}): Declare new member functions.
({scope_diff, base_diff}::traverse): Remove.
(function_decl_diff::function_decl_diff): Take the return type
diff as parameter.
({function_decl_diff, type_decl_diff}::{finish_diff_type,
get_pretty_representation, chain_into_hierarchy}): Declare new
member functions.
({function_decl_diff, type_decl_diff}::traverse): Remove.
(typedef_diff::typedef_diff): Take the underlying type diff as
parameter.
(typedef::{finish_diff_type, get_pretty_representation,
chain_into_hierarchy}): Declare new member functions.
({typedef, translation_unit_diff}::traverse): Remove member
function.
(corpus_diff::{finish_diff_type, children_nodes,
append_child_node, changed_variables, get_pretty_representation,
chain_into_hierarchy}): Declare new member functions.
(class diff_node_visitor::{visit_begin, visit_end}): Declare new
member functions.
(propagate_categories, print_diff_tree, categorizing_redundancy)
(clear_redundancy_categorization, apply_filters): New functions
and function overloads.
* src/abg-comparison.cc (TRY_PRE_VISIT, TRY_PRE_VISIT_CLASS_DIFF)
(TRY_POST_VISIT, TRY_POST_VISIT_CLASS_DIFF)
(CATEGORIZE_REDUNDANCY_FROM_CHILD_NODE)
(UPDATE_REDUNDANCY_CATEGORIZATION_FROM_NODE_SUBTREE)
(TRAVERSE_DIFF_NODE_AND_PROPAGATE_CATEGORY)
(TRAVERSE_MEM_DIFF_NODE_AND_PROPAGATE_CATEGORY)
(TRAVERSE_MEM_FN_DIFF_NODE_AND_PROPAGATE_CATEGORY)
(ENSURE_DIFF_NODE_TRAVERSED_ONCE)
(ENSURE_MEM_DIFF_NODE_TRAVERSED_ONCE): Remove these macros.
Hurrah.
(diff_context::priv::categorizing_redundancy_): Remove.
(diff_context::priv::forbid_traversing_a_node_twice_): Add new
data member.
(diff_context::priv::priv): Adjust.
(diff_context::{forbid_traversing_a_node_twice,
traversing_a_node_twice_is_forbidden}): Define new member
functions.
(diff_context::maybe_apply_filters): Once filters are applied (and
categories are set to the relevant diff tree nodes, run a pass
over the diff tree to propagate the categories to the relevant
diff tree parent nodes. Add an overload for corpus_diff_sptr.
(diff_context::categorizing_redundancy): Remove member function.
(diff_context::maybe_apply_filters): Define a new overload for
corpus_diff_sptr
(struct diff::priv::{finished_, traversing_, children_,
pretty_representation_}): New data members.
(diff::priv::priv): Adjust.
(diff::{begin_traversing, is_traversing, end_traversing,
finish_diff_type, children_nodes, append_child_node, traverse,
set_category, get_pretty_representation, chain_into_hierarchy}):
Define new member functions.
(diff::is_filtered_out): Do not refer to NOT_REDUNDANT_CATEGORY
anymore. Rather, use the new REDUNDANT_CATEGORY.
({distinct_diff, var_diff, pointer_diff, array_diff,
reference_diff, qualified_type_diff, enum_diff, class_diff,
base_diff, scope_diff, function_decl_diff, type_decl_diff,
typedef_diff}::{get_pretty_representation, chain_into_hierarchy,
finish_diff_type}): Define new member functions.
({distinct_diff, var_diff, pointer_diff, array_diff,
reference_diff, qualified_type_diff, enum_diff, class_diff,
base_diff, scope_diff, function_decl_diff, type_decl_diff,
typedef_diff, translation_unit_diff}::traverse): Remove member
functions.
(operator&=, operator<<): Define new operators for diff_category.
({function_decl_diff, typedef_diff}::priv::priv): Add a new
constructor.
(pointer_diff::{priv::priv, pointer_diff})
(reference_diff::{priv::priv, reference_diff})
(qualified_type_diff::{priv::priv, qualified_type_diff})
(enum_diff::{priv::priv, enum_diff}, base_diff::{priv::priv,
base_diff}, function_decl_diff::function_decl_diff): Take the
underlying type diff in parameter.
(compute_diff): Adjust the pointer_diff, reference_diff,
qualified_type_diff, base_diff, function_decl_diff overloads.
(class_diff::priv::{count_filtered_bases,
count_filtered_subtype_changed_dm, count_filtered_changed_dm,
count_filtered_changed_mem_fns, count_filtered_inserted_mem_fns,
count_filtered_deleted_mem_fns}): Adjust for the call to
diff_context::maybe_apply_filters.
(corpus_diff::priv::{finished_, pretty_representation_}): New data
member.
(corpus_diff::priv::priv): New constructor.
(corpus_diff::priv::clear_redundancy_categorization): Define new
member function.
(corpus_diff::priv::apply_filters_and_compute_diff_stats):
Adjust for call to diff_context::maybe_apply_filters. Also, call
clear_redundancy_categorization at the end.
(corpus_diff::priv::categorize_redundant_changed_sub_nodes):
Revisit logic.
(corpus_diff::{chain_into_hierarchy, finish_diff_type,
children_nodes, append_child_node, changed_variables,
get_pretty_representation}): Define new member functions.
(corpus_diff::report): Categorize redundancy for every top level
function/variable diff.
(corpus_diff::traverse): Adjust to the new traversing interface.
(diff_node_visitor::{visit_begin, visit_end}): Define new member
functions.
(struct category_propagation_visitor, struct diff_node_printer)
(struct redundancy_marking_visitor, struct
redundancy_clearing_visitor): New diff tree node visitors.
(propagate_categories, print_diff_tree, categorize_redundancy)
(clear_redundancy_categorization, apply_filters): Define new
functions.
* tests/Makefile.am: Add the new tests/print-diff-tree.cc to the
source distribution. Build it into a tests/printdifftree binary.
* tools/abidiff.cc (print_diff_tree): Add debugging functions to
call from within the debugger. By default, this function and its
overloads are not compiled.
Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2014-10-10 11:15:40 +00:00
|
|
|
printdifftree_SOURCES = print-diff-tree.cc
|
|
|
|
printdifftree_LDADD = $(top_builddir)/src/libabigail.la
|
|
|
|
|
2013-08-29 15:08:47 +00:00
|
|
|
AM_CPPFLAGS=-I${abs_top_srcdir}/include \
|
|
|
|
-I${abs_top_builddir}/include -I${abs_top_srcdir}/tools
|
2013-05-28 08:22:08 +00:00
|
|
|
AM_CXXFLAGS="-std=gnu++11"
|
2013-03-21 22:42:41 +00:00
|
|
|
|
2013-08-29 15:08:47 +00:00
|
|
|
EXTRA_DIST= \
|
2013-05-03 13:28:10 +00:00
|
|
|
data/test-read-write/test0.xml \
|
|
|
|
data/test-read-write/test1.xml \
|
|
|
|
data/test-read-write/test2.xml \
|
|
|
|
data/test-read-write/test3.xml \
|
|
|
|
data/test-read-write/test4.xml \
|
|
|
|
data/test-read-write/test5.xml \
|
|
|
|
data/test-read-write/test6.xml \
|
|
|
|
data/test-read-write/test7.xml \
|
|
|
|
data/test-read-write/test8.xml \
|
|
|
|
data/test-read-write/test9.xml \
|
|
|
|
data/test-read-write/test10.xml \
|
|
|
|
data/test-read-write/test11.xml \
|
|
|
|
data/test-read-write/test12.xml \
|
|
|
|
data/test-read-write/test13.xml \
|
|
|
|
data/test-read-write/test14.xml \
|
|
|
|
data/test-read-write/test15.xml \
|
2013-08-27 13:18:59 +00:00
|
|
|
data/test-read-write/test16.xml \
|
2013-11-29 12:37:58 +00:00
|
|
|
data/test-read-write/test17.xml \
|
|
|
|
data/test-read-write/test18.xml \
|
|
|
|
data/test-read-write/test19.xml \
|
|
|
|
data/test-read-write/test20.xml \
|
|
|
|
data/test-read-write/test21.xml \
|
Support C and C++ array type.
* include/abg-comparison.h (array_diff): Declare new class.
(array_diff_sptr): Shared pointer to type array_diff.
(compute_diff): Overload the function to take type
array_diff_sptr as the first two arguments.
* include/abg-fwd.h (array_type_def): Declare new class.
(subrange_type): Likewise.
(is_array_def): Declare new function.
* include/abg-ir.h (array_type_def_sptr): Shared pointer
to type array_type_def.
(array_type_def): Declare new class.
(ir_node_visitor::visit): Declare a new virtual function
taking a pointer to type array_type_def as an argument.
* src/abg-comparison.cc (compute_diff_for_types): Add
try_to_diff for two instances of type array_type_def.
(array_diff::priv): declare struct for holding private members
of type array_diff.
(array_diff::array_diff): Define constructor.
(array_diff::{first,second}_array):Define new
member functions.
(array_diff::element_type_diff): Likewise.
(array_diff::{length,report,traverse}): Likewise.
(compute_diff): Define function overloaded in
include/abg-comparison.h.
* src/abg-dwarf-reader.cc (build_array_type): Define new
function. Handle DW_TAG_array_type and DW_TAG_subrange type.
(build_ir_node_from_die): Amend case DW_TAG_array_type with
a call to build_array_type.
* src/abg-hash.cc (array_type_def::hash): Declare new struct.
(type_base::dynamic_hash::operator()): Attempt to dynamic_cast
the argument to type array_type_def as well.
(array_type_def::hash): Declare new struct.
* src/abg-ir.cc (array_type_def::array_type_def): Define
constructors.
(array_type_def::priv): declare struct for holding private members
of type array_type_def.
(array_type_def::operator==(const decl_base&):
Define new operator.
(array_type_def::operator==(const type_base&):
Likewise.
(array_type_def::append_subrange{,s}): Define
new functions.
(array_type_def::{set,get}_size_in_bits): Likewise.
(array_type_def::get_dimension_count): Likewise.
(array_type_def::get_qualified_name): Likewise.
(array_type_def::get_pretty_representation): Likewise.
(array_type_def::get_subrange_representation): Likewise.
(array_type_def::traverse): Likewise.
(array_type_def::get_{element_type,location,subranges}): Likewise.
(array_type_def::is_infinite): Likewise.
(array_type_def::~array_type_def): Define destructor.
(ir_node_visitor::visit): Define function, taking
pointer to array_type_def as an argument.
* src/abg-reader.cc (map_id_and_node): Check if node
is an array.
(is_array_def): Check if object is an array.
(handle_element_node): Handle array_type_def as well.
(build_subrange_type): Define new function.
(build_array_type_def): Likewise.
(build_type): Build type array_type_def as well.
(build_type_composition): Likewise.
(handle_array_type_def): Define new function.
* src/abg-writer.cc: (write_decl): Output arrays
as well.
(write_member_type): Likewise.
(write_type_composition): Likewise.
(write_array_type_def): Define new function.
* tests/data/test-diff-dwarf/test{10,11}-v{0,1}.{cc,o}: New test source
files
* tests/data/test-diff-dwarf/test{10,11}-report.txt: Likewise.
* tests/data/test-diff-dwarf/test10-report.txt: New test input.
* tests/data/test-read-dwarf/test7.cc: New test source
file.
* tests/data/test-read-dwarf/test7.so: New input binary
to read.
* tests/data/test-read-dwarf/test7.so.abi: New reference
test to compare against.
* tests/data/test-read-write/test25.xml: New test source
file.
* tests/test-diff-dwarf.cc: Adjust to launch the new test.
* tests/test-read-dwarf.cc: Likewise.
* tests/test-read-write.cc: Likewise.
* test/Makefile.am: Add the new test inputs to the source
distribution.
Signed-off-by: Ondrej Oprala <ooprala@redhat.com>
Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2014-08-18 09:56:43 +00:00
|
|
|
data/test-read-write/test22.xml \
|
|
|
|
data/test-read-write/test23.xml \
|
|
|
|
data/test-read-write/test24.xml \
|
|
|
|
data/test-read-write/test25.xml \
|
2013-08-27 13:18:59 +00:00
|
|
|
\
|
|
|
|
data/test-write-read-archive/test0.xml \
|
|
|
|
data/test-write-read-archive/test1.xml \
|
|
|
|
data/test-write-read-archive/test2.xml \
|
|
|
|
data/test-write-read-archive/test3.xml \
|
2013-11-29 12:49:50 +00:00
|
|
|
data/test-write-read-archive/test4.xml \
|
|
|
|
\
|
2014-09-26 08:58:16 +00:00
|
|
|
data/test-abidiff/test-enum0-v0.cc.bi \
|
|
|
|
data/test-abidiff/test-enum0-v1.cc.bi \
|
|
|
|
data/test-abidiff/test-enum0-report.txt \
|
|
|
|
data/test-abidiff/test-enum1-v0.cc.bi \
|
|
|
|
data/test-abidiff/test-enum1-v1.cc.bi \
|
|
|
|
data/test-abidiff/test-enum1-report.txt \
|
|
|
|
data/test-abidiff/test-qual-type0-v0.cc.bi \
|
|
|
|
data/test-abidiff/test-qual-type0-v1.cc.bi \
|
|
|
|
data/test-abidiff/test-qual-type0-report.txt \
|
|
|
|
data/test-abidiff/test-struct0-v0.cc.bi \
|
|
|
|
data/test-abidiff/test-struct0-v1.cc.bi \
|
|
|
|
data/test-abidiff/test-struct0-report.txt \
|
|
|
|
data/test-abidiff/test-struct1-v0.cc.bi \
|
|
|
|
data/test-abidiff/test-struct1-v1.cc.bi \
|
|
|
|
data/test-abidiff/test-struct1-report.txt \
|
|
|
|
data/test-abidiff/test-var0-v0.cc.bi \
|
|
|
|
data/test-abidiff/test-var0-v1.cc.bi \
|
|
|
|
data/test-abidiff/test-var0-report.txt \
|
2014-01-07 14:34:42 +00:00
|
|
|
\
|
2014-03-21 14:15:02 +00:00
|
|
|
data/test-diff-dwarf/test0-v0.cc \
|
|
|
|
data/test-diff-dwarf/test0-v0.o \
|
|
|
|
data/test-diff-dwarf/test0-v1.cc \
|
|
|
|
data/test-diff-dwarf/test0-v1.o \
|
|
|
|
data/test-diff-dwarf/test0-report.txt \
|
2014-03-29 08:04:01 +00:00
|
|
|
data/test-diff-dwarf/test1-v0.cc \
|
|
|
|
data/test-diff-dwarf/test1-v0.o \
|
|
|
|
data/test-diff-dwarf/test1-v1.cc \
|
|
|
|
data/test-diff-dwarf/test1-v1.o \
|
|
|
|
data/test-diff-dwarf/test1-report.txt \
|
2014-04-01 10:38:51 +00:00
|
|
|
data/test-diff-dwarf/test2-v0.cc \
|
|
|
|
data/test-diff-dwarf/test2-v0.o \
|
|
|
|
data/test-diff-dwarf/test2-v1.cc \
|
|
|
|
data/test-diff-dwarf/test2-v1.o \
|
|
|
|
data/test-diff-dwarf/test2-report.txt \
|
2014-04-05 09:59:16 +00:00
|
|
|
data/test-diff-dwarf/test3-v0.cc \
|
|
|
|
data/test-diff-dwarf/test3-v0.o \
|
|
|
|
data/test-diff-dwarf/test3-v1.cc \
|
|
|
|
data/test-diff-dwarf/test3-v1.o \
|
|
|
|
data/test-diff-dwarf/test3-report.txt \
|
|
|
|
data/test-diff-dwarf/test4-v0.cc \
|
|
|
|
data/test-diff-dwarf/test4-v0.o \
|
|
|
|
data/test-diff-dwarf/test4-v1.cc \
|
|
|
|
data/test-diff-dwarf/test4-v1.o \
|
|
|
|
data/test-diff-dwarf/test4-report.txt \
|
2014-04-16 15:14:48 +00:00
|
|
|
data/test-diff-dwarf/test5-v0.cc \
|
|
|
|
data/test-diff-dwarf/test5-v0.o \
|
|
|
|
data/test-diff-dwarf/test5-v1.cc \
|
|
|
|
data/test-diff-dwarf/test5-v1.o \
|
|
|
|
data/test-diff-dwarf/test5-report.txt \
|
|
|
|
data/test-diff-dwarf/test6-v0.cc \
|
|
|
|
data/test-diff-dwarf/test6-v0.o \
|
|
|
|
data/test-diff-dwarf/test6-v1.cc \
|
|
|
|
data/test-diff-dwarf/test6-v1.o \
|
|
|
|
data/test-diff-dwarf/test6-report.txt \
|
|
|
|
data/test-diff-dwarf/test7-v0.cc \
|
|
|
|
data/test-diff-dwarf/test7-v0.o \
|
|
|
|
data/test-diff-dwarf/test7-v1.cc \
|
|
|
|
data/test-diff-dwarf/test7-v1.o \
|
|
|
|
data/test-diff-dwarf/test7-report.txt \
|
2014-04-17 13:26:38 +00:00
|
|
|
data/test-diff-dwarf/test8-v0.cc \
|
|
|
|
data/test-diff-dwarf/test8-v0.o \
|
|
|
|
data/test-diff-dwarf/test8-v1.cc \
|
|
|
|
data/test-diff-dwarf/test8-v1.o \
|
|
|
|
data/test-diff-dwarf/test8-report.txt \
|
2014-08-19 09:08:36 +00:00
|
|
|
data/test-diff-dwarf/test9-v0.cc \
|
|
|
|
data/test-diff-dwarf/libtest9-v0.so \
|
|
|
|
data/test-diff-dwarf/test9-v1.cc \
|
|
|
|
data/test-diff-dwarf/libtest9-v1.so \
|
|
|
|
data/test-diff-dwarf/test9-report.txt \
|
Support C and C++ array type.
* include/abg-comparison.h (array_diff): Declare new class.
(array_diff_sptr): Shared pointer to type array_diff.
(compute_diff): Overload the function to take type
array_diff_sptr as the first two arguments.
* include/abg-fwd.h (array_type_def): Declare new class.
(subrange_type): Likewise.
(is_array_def): Declare new function.
* include/abg-ir.h (array_type_def_sptr): Shared pointer
to type array_type_def.
(array_type_def): Declare new class.
(ir_node_visitor::visit): Declare a new virtual function
taking a pointer to type array_type_def as an argument.
* src/abg-comparison.cc (compute_diff_for_types): Add
try_to_diff for two instances of type array_type_def.
(array_diff::priv): declare struct for holding private members
of type array_diff.
(array_diff::array_diff): Define constructor.
(array_diff::{first,second}_array):Define new
member functions.
(array_diff::element_type_diff): Likewise.
(array_diff::{length,report,traverse}): Likewise.
(compute_diff): Define function overloaded in
include/abg-comparison.h.
* src/abg-dwarf-reader.cc (build_array_type): Define new
function. Handle DW_TAG_array_type and DW_TAG_subrange type.
(build_ir_node_from_die): Amend case DW_TAG_array_type with
a call to build_array_type.
* src/abg-hash.cc (array_type_def::hash): Declare new struct.
(type_base::dynamic_hash::operator()): Attempt to dynamic_cast
the argument to type array_type_def as well.
(array_type_def::hash): Declare new struct.
* src/abg-ir.cc (array_type_def::array_type_def): Define
constructors.
(array_type_def::priv): declare struct for holding private members
of type array_type_def.
(array_type_def::operator==(const decl_base&):
Define new operator.
(array_type_def::operator==(const type_base&):
Likewise.
(array_type_def::append_subrange{,s}): Define
new functions.
(array_type_def::{set,get}_size_in_bits): Likewise.
(array_type_def::get_dimension_count): Likewise.
(array_type_def::get_qualified_name): Likewise.
(array_type_def::get_pretty_representation): Likewise.
(array_type_def::get_subrange_representation): Likewise.
(array_type_def::traverse): Likewise.
(array_type_def::get_{element_type,location,subranges}): Likewise.
(array_type_def::is_infinite): Likewise.
(array_type_def::~array_type_def): Define destructor.
(ir_node_visitor::visit): Define function, taking
pointer to array_type_def as an argument.
* src/abg-reader.cc (map_id_and_node): Check if node
is an array.
(is_array_def): Check if object is an array.
(handle_element_node): Handle array_type_def as well.
(build_subrange_type): Define new function.
(build_array_type_def): Likewise.
(build_type): Build type array_type_def as well.
(build_type_composition): Likewise.
(handle_array_type_def): Define new function.
* src/abg-writer.cc: (write_decl): Output arrays
as well.
(write_member_type): Likewise.
(write_type_composition): Likewise.
(write_array_type_def): Define new function.
* tests/data/test-diff-dwarf/test{10,11}-v{0,1}.{cc,o}: New test source
files
* tests/data/test-diff-dwarf/test{10,11}-report.txt: Likewise.
* tests/data/test-diff-dwarf/test10-report.txt: New test input.
* tests/data/test-read-dwarf/test7.cc: New test source
file.
* tests/data/test-read-dwarf/test7.so: New input binary
to read.
* tests/data/test-read-dwarf/test7.so.abi: New reference
test to compare against.
* tests/data/test-read-write/test25.xml: New test source
file.
* tests/test-diff-dwarf.cc: Adjust to launch the new test.
* tests/test-read-dwarf.cc: Likewise.
* tests/test-read-write.cc: Likewise.
* test/Makefile.am: Add the new test inputs to the source
distribution.
Signed-off-by: Ondrej Oprala <ooprala@redhat.com>
Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2014-08-18 09:56:43 +00:00
|
|
|
data/test-diff-dwarf/test10-v0.cc \
|
|
|
|
data/test-diff-dwarf/test10-v0.o \
|
|
|
|
data/test-diff-dwarf/test10-v1.cc \
|
|
|
|
data/test-diff-dwarf/test10-v1.o \
|
|
|
|
data/test-diff-dwarf/test10-report.txt \
|
|
|
|
data/test-diff-dwarf/test11-v0.cc \
|
|
|
|
data/test-diff-dwarf/test11-v0.o \
|
|
|
|
data/test-diff-dwarf/test11-v1.cc \
|
|
|
|
data/test-diff-dwarf/test11-v1.o \
|
|
|
|
data/test-diff-dwarf/test11-report.txt \
|
2014-08-25 21:06:18 +00:00
|
|
|
data/test-diff-dwarf/test12-v0.c \
|
|
|
|
data/test-diff-dwarf/libtest12-v0.so \
|
|
|
|
data/test-diff-dwarf/test12-v1.c \
|
|
|
|
data/test-diff-dwarf/libtest12-v1.so \
|
|
|
|
data/test-diff-dwarf/test12-version-script \
|
|
|
|
data/test-diff-dwarf/test12-report.txt \
|
2014-09-03 06:46:58 +00:00
|
|
|
data/test-diff-dwarf/test13-v0.cc \
|
|
|
|
data/test-diff-dwarf/test13-v0.o \
|
|
|
|
data/test-diff-dwarf/test13-v1.cc \
|
|
|
|
data/test-diff-dwarf/test13-v1.o \
|
|
|
|
data/test-diff-dwarf/test13-report.txt \
|
2014-09-16 12:53:30 +00:00
|
|
|
data/test-diff-dwarf/test14-inline-v0.cc \
|
|
|
|
data/test-diff-dwarf/test14-inline-v0.o \
|
|
|
|
data/test-diff-dwarf/test14-inline-v1.cc \
|
|
|
|
data/test-diff-dwarf/test14-inline-v1.o \
|
|
|
|
data/test-diff-dwarf/test14-inline-report.txt \
|
2014-09-16 11:40:35 +00:00
|
|
|
data/test-diff-dwarf/test15-enum-v0.cc \
|
|
|
|
data/test-diff-dwarf/test15-enum-v0.o \
|
|
|
|
data/test-diff-dwarf/test15-enum-v1.cc \
|
|
|
|
data/test-diff-dwarf/test15-enum-v1.o \
|
|
|
|
data/test-diff-dwarf/test15-enum-report.txt \
|
2014-03-21 14:15:02 +00:00
|
|
|
\
|
2014-01-07 14:34:42 +00:00
|
|
|
data/test-read-dwarf/test0 \
|
|
|
|
data/test-read-dwarf/test0.abi \
|
|
|
|
data/test-read-dwarf/test0.cc \
|
|
|
|
data/test-read-dwarf/test1 \
|
|
|
|
data/test-read-dwarf/test1.abi \
|
2014-03-29 05:44:13 +00:00
|
|
|
data/test-read-dwarf/test1.cc \
|
2014-05-19 19:35:56 +00:00
|
|
|
tests/data/test-read-dwarf/test2.h \
|
|
|
|
tests/data/test-read-dwarf/test2-0.cc \
|
|
|
|
tests/data/test-read-dwarf/test2-1.cc \
|
|
|
|
tests/data/test-read-dwarf/test2.so \
|
|
|
|
tests/data/test-read-dwarf/test2.so.abi \
|
2014-06-19 06:43:54 +00:00
|
|
|
tests/data/test-read-dwarf/test3.c \
|
|
|
|
tests/data/test-read-dwarf/test3.so \
|
2014-06-23 15:24:54 +00:00
|
|
|
tests/data/test-read-dwarf/test4.c \
|
|
|
|
tests/data/test-read-dwarf/test4.so \
|
|
|
|
tests/data/test-read-dwarf/test5.cc \
|
|
|
|
tests/data/test-read-dwarf/test5.so \
|
2014-07-01 11:57:00 +00:00
|
|
|
tests/data/test-read-dwarf/test6.cc \
|
|
|
|
tests/data/test-read-dwarf/test6.so \
|
2014-03-29 05:44:13 +00:00
|
|
|
\
|
|
|
|
data/test-diff-filter/test0-v0.cc \
|
|
|
|
data/test-diff-filter/test0-v1.cc \
|
|
|
|
data/test-diff-filter/test0-v0.o \
|
|
|
|
data/test-diff-filter/test0-v1.o \
|
2014-03-31 11:07:04 +00:00
|
|
|
data/test-diff-filter/test0-report.txt \
|
|
|
|
data/test-diff-filter/test1-v0.cc \
|
|
|
|
data/test-diff-filter/test1-v1.cc \
|
|
|
|
data/test-diff-filter/test1-v0.o \
|
|
|
|
data/test-diff-filter/test1-v1.o \
|
2014-04-01 13:50:04 +00:00
|
|
|
data/test-diff-filter/test1-report.txt \
|
|
|
|
data/test-diff-filter/test2-v0.cc \
|
|
|
|
data/test-diff-filter/test2-v1.cc \
|
|
|
|
data/test-diff-filter/test2-v0.o \
|
|
|
|
data/test-diff-filter/test2-v1.o \
|
2014-04-05 09:59:16 +00:00
|
|
|
data/test-diff-filter/test2-report.txt \
|
|
|
|
data/test-diff-filter/test3-v0.cc \
|
|
|
|
data/test-diff-filter/test3-v1.cc \
|
|
|
|
data/test-diff-filter/test3-v0.o \
|
|
|
|
data/test-diff-filter/test3-v1.o \
|
|
|
|
data/test-diff-filter/test3-report.txt \
|
|
|
|
data/test-diff-filter/test4-v0.cc \
|
|
|
|
data/test-diff-filter/test4-v1.cc \
|
|
|
|
data/test-diff-filter/test4-v0.o \
|
|
|
|
data/test-diff-filter/test4-v1.o \
|
|
|
|
data/test-diff-filter/test4-report.txt \
|
|
|
|
data/test-diff-filter/test5-v0.cc \
|
|
|
|
data/test-diff-filter/test5-v1.cc \
|
|
|
|
data/test-diff-filter/test5-v0.o \
|
|
|
|
data/test-diff-filter/test5-v1.o \
|
2014-04-06 13:59:38 +00:00
|
|
|
data/test-diff-filter/test5-report.txt \
|
|
|
|
data/test-diff-filter/test6-v0.cc \
|
|
|
|
data/test-diff-filter/test6-v1.cc \
|
|
|
|
data/test-diff-filter/test6-v0.o \
|
|
|
|
data/test-diff-filter/test6-v1.o \
|
|
|
|
data/test-diff-filter/test6-report.txt \
|
|
|
|
data/test-diff-filter/test7-v0.cc \
|
|
|
|
data/test-diff-filter/test7-v1.cc \
|
|
|
|
data/test-diff-filter/test7-v0.o \
|
|
|
|
data/test-diff-filter/test7-v1.o \
|
2014-04-16 15:14:48 +00:00
|
|
|
data/test-diff-filter/test7-report.txt \
|
|
|
|
data/test-diff-filter/test8-v0.cc \
|
|
|
|
data/test-diff-filter/test8-v1.cc \
|
|
|
|
data/test-diff-filter/test8-v0.o \
|
|
|
|
data/test-diff-filter/test8-v1.o \
|
|
|
|
data/test-diff-filter/test8-report.txt \
|
|
|
|
data/test-diff-filter/test9-v0.cc \
|
|
|
|
data/test-diff-filter/test9-v1.cc \
|
|
|
|
data/test-diff-filter/test9-v0.o \
|
|
|
|
data/test-diff-filter/test9-v1.o \
|
|
|
|
data/test-diff-filter/test9-report.txt \
|
|
|
|
data/test-diff-filter/test10-v0.cc \
|
|
|
|
data/test-diff-filter/test10-v1.cc \
|
|
|
|
data/test-diff-filter/test10-v0.o \
|
|
|
|
data/test-diff-filter/test10-v1.o \
|
|
|
|
data/test-diff-filter/test10-report.txt \
|
|
|
|
data/test-diff-filter/test11-v0.cc \
|
|
|
|
data/test-diff-filter/test11-v1.cc \
|
|
|
|
data/test-diff-filter/test11-v0.o \
|
|
|
|
data/test-diff-filter/test11-v1.o \
|
2014-04-17 09:18:21 +00:00
|
|
|
data/test-diff-filter/test11-report.txt \
|
|
|
|
data/test-diff-filter/test12-v0.cc \
|
|
|
|
data/test-diff-filter/test12-v1.cc \
|
|
|
|
data/test-diff-filter/test12-v0.o \
|
|
|
|
data/test-diff-filter/test12-v1.o \
|
2014-04-17 13:26:38 +00:00
|
|
|
data/test-diff-filter/test12-report.txt \
|
|
|
|
data/test-diff-filter/test13-v0.cc \
|
|
|
|
data/test-diff-filter/test13-v1.cc \
|
|
|
|
data/test-diff-filter/test13-v0.o \
|
|
|
|
data/test-diff-filter/test13-v1.o \
|
2014-04-21 15:43:15 +00:00
|
|
|
data/test-diff-filter/test13-report.txt \
|
2014-06-23 10:05:20 +00:00
|
|
|
data/test-diff-filter/test14-v0.cc \
|
|
|
|
data/test-diff-filter/test14-v1.cc \
|
|
|
|
data/test-diff-filter/test14-v0.o \
|
|
|
|
data/test-diff-filter/test14-v1.o \
|
|
|
|
data/test-diff-filter/test14-0-report.txt \
|
|
|
|
data/test-diff-filter/test14-1-report.txt \
|
|
|
|
data/test-diff-filter/test15-v0.cc \
|
|
|
|
data/test-diff-filter/test15-v1.cc \
|
|
|
|
data/test-diff-filter/test15-v0.o \
|
|
|
|
data/test-diff-filter/test15-v1.o \
|
|
|
|
data/test-diff-filter/test15-0-report.txt \
|
|
|
|
data/test-diff-filter/test15-1-report.txt \
|
2014-08-28 14:12:16 +00:00
|
|
|
data/test-diff-filter/test16-v0.cc \
|
|
|
|
data/test-diff-filter/test16-v1.cc \
|
|
|
|
data/test-diff-filter/test16-v0.o \
|
|
|
|
data/test-diff-filter/test16-v1.o \
|
|
|
|
data/test-diff-filter/test16-report.txt \
|
|
|
|
data/test-diff-filter/test17-v0.cc \
|
|
|
|
data/test-diff-filter/test17-v1.cc \
|
|
|
|
data/test-diff-filter/test17-v0.o \
|
|
|
|
data/test-diff-filter/test17-v1.o \
|
|
|
|
data/test-diff-filter/test17-0-report.txt \
|
|
|
|
data/test-diff-filter/test17-1-report.txt \
|
2014-09-02 22:13:46 +00:00
|
|
|
data/test-diff-filter/test18-v0.cc \
|
|
|
|
data/test-diff-filter/test18-v1.cc \
|
|
|
|
data/test-diff-filter/test18-v0.o \
|
|
|
|
data/test-diff-filter/test18-v1.o \
|
|
|
|
data/test-diff-filter/test18-report.txt \
|
2014-09-16 11:40:35 +00:00
|
|
|
data/test-diff-filter/test19-v0.cc \
|
|
|
|
data/test-diff-filter/test19-v1.cc \
|
|
|
|
data/test-diff-filter/test19-v0.o \
|
|
|
|
data/test-diff-filter/test19-v1.o \
|
|
|
|
data/test-diff-filter/test19-report-0.txt \
|
|
|
|
data/test-diff-filter/test19-report-1.txt \
|
2014-09-16 12:53:30 +00:00
|
|
|
data/test-diff-filter/test20-inline-v0.cc \
|
|
|
|
data/test-diff-filter/test20-inline-v1.cc \
|
|
|
|
data/test-diff-filter/test20-inline-v0.o \
|
|
|
|
data/test-diff-filter/test20-inline-v1.o \
|
|
|
|
data/test-diff-filter/test20-inline-report-0.txt \
|
|
|
|
data/test-diff-filter/test20-inline-report-1.txt \
|
2014-04-21 15:43:15 +00:00
|
|
|
\
|
|
|
|
data/test-lookup-syms/test0.cc \
|
|
|
|
data/test-lookup-syms/test0.o \
|
|
|
|
data/test-lookup-syms/test0-report.txt \
|
|
|
|
data/test-lookup-syms/test01-report.txt \
|
Initial support for elf symbol (versionning) during decl comparison
* include/abg-fwd.h (get_linkage_name): Remove.
* include/abg-dwarf-reader.h (enum symbol_type)
(enum symbol_binding): Move these into abg-ir.h.
(lookup_symbol_from_elf, lookup_public_function_symbol_from_elf):
Adjust.
* src/abg-dwarf-reader.cc (eval_last_constant_dwarf_sub_expr):
Declare this before using it.
(die_address_attribute, die_location_address)
(stt_to_elf_symbol_type, stb_to_elf_symbol_binding)
(find_hash_table_section_index, find_symbol_table_section)
(find_symbol_table_section_index, find_text_section)
(find_bss_section, compare_symbol_name)
(get_symbol_versionning_sections get_version_for_symbol)
(lookup_symbol_from_sysv_hash_tab)
(lookup_symbol_from_gnu_hash_tab, get_elf_class_size_in_bytes)
(bloom_word_at, setup_gnu_ht, lookup_symbol_from_elf_hash_tab)
(lookup_symbol_from_symtab, maybe_adjust_fn_sym_address)
(maybe_adjust_var_sym_address): New static functions.
(enum hash_table_kind): New enum.
(struct gnu_ht): New struct.
(read_context::var_decls_to_add_): Renamed var_decls_to_add into
this.
(read_context::{fun, var}_sym_addr_sym_index_map_): New member.
(read_context::{lookup_symbol_from_elf,
lookup_elf_symbol_from_index, lookup_elf_fn_symbol_from_address,
lookup_elf_var_symbol_from_address, fun_sym_addr_sym_index_map,
var_sym_addr_sym_index_map, load_symbol_addr_to_index_maps,
get_function_address, get_variable_address}): New member
functions.
(read_context::lookup_public_{variable,
function}_symbol_from_elf): Adjust.
(op_pushes_constant_value): Fix a bug here.
(lookup_symbol_from_elf): Adjust. Support cases where there is no
elf hash table, e.g, for relocatable files.
(lookup_public_function_symbol_from_elf)
(lookup_public_variable_symbol_from_elf): Adjust.
(build_var_decl): Allow updating the var_decl to associate it with
its underlying symbol. In that case, if the linkage name is not
set, set it to the symbol name.
(build_function_decl): Likewise for function_decl.
(operator<<(std::ostream&, symbol_type)):
(operator<<(std::ostream&, symbol_binding)): Move these do
abg-ir.cc.
* include/abg-ir.h (class elf_symbol): Declare new class. Move
enum symbol_binding and enum symbol_type (from abg-dwarf-reader.h) to
elf_symbol::binding and elf_symbol::type here.
(operator<<(std::ostream&, elf_symbol::type))
(operator<<(std::ostream&, elf_symbol::binding))
(operator==(const elf_symbol_sptr, const elf_symbol_sptr)): New
operators.
(class elf_symbol::version): Declare new class.
(class var_decl): Make this pimpl, and add ...
(var_decl::{g,s}et_symbol): ... new member functions.
(class function_decl): Likewise, make this pimpl and add ...
(function_decl::{g,s}et_symbol): ... new member functions.
* src/abg-ir.cc (struct elf_symbol, elf_symbol::priv): New
types.
(elf_symbol::*): Lots of new members and member functions.
(operator==(const elf_symbol_sptr, const elf_symbol_sptr)): New.
(operator<<(std::ostream&, elf_symbol::type)): New.
(operator<<(std::ostream&, elf_symbol::binding)): New.
(elf_symbol::version::priv): New type.
(elf_symbol::version::*): Lots of member functions.
(get_linkage_name): Removed.
(var_decl::priv): New type. Pimplify the thing.
(var_decl::{s,g}et_symbol): New.
(var_decl::operator==): Take symbols in account in the comparison.
(function_decl::priv): New type.
(function_decl::*): Pimplify.
(function_decl::{s,g}et_symbol): New.
(function_decl::operator==): Take symbols in account in the
comparison.
* include/abg-comparison.h (diff_context::show_linkage_name): New
member function.
* src/abg-comparison.cc (diff_context::priv::show_linkage_name_):
New member.
(diff_context::priv::priv): Initialize it.
(diff_context::show_linkage_names): New member function.
(corpus_diff::report): If the user used --show-linkage-names,
display the linkage name after the name of the functions. Add
missing "'" in the some spots.
* tools/bidiff.cc (options.show_linkage_names): New member.
(display_usage, parse_command_line): Support --linkage-names.
* tools/bisym.cc (show_help): Add '\n' at the end of help string
for --demangle. Add --no-absolute-path option.
(parse_command_line): Support --no-absolute-path.
(main): Adjust for symbol (versionning) support. Consider that
the program successfully completed even when the symbol wasn't
found. Support --no-absolute-path.
* tests/data/test-lookup-syms/test0-report.txt: New.
* tests/data/test-lookup-syms/test01-report.txt: New.
* tests/data/test-lookup-syms/test02-report.txt: New.
* tests/data/test-read-dwarf/test0.abi: Adjust.
* tests/data/test-read-dwarf/test1.abi: Adjust.
* tests/data/test-diff-dwarf/test7-report.txt: Adjust.
* tests/data/test-diff-filter/test10-report.txt: Adjust.
* tests/data/test-diff-filter/test12-report.txt: Adjust.
* tests/data/test-lookup-syms/test1-[123]-report.txt: New.
* tests/data/test-lookup-syms/test1.c: New.
* tests/data/test-lookup-syms/test1.version-script: New.
* tests/test-lookup-syms.cc: Adjust for new tests.
* test/Makefile.am: Adjust makefile.
Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2014-05-08 09:31:57 +00:00
|
|
|
data/test-lookup-syms/test02-report.txt \
|
|
|
|
data/test-lookup-syms/test1.c \
|
|
|
|
data/test-lookup-syms/test1.version-script \
|
|
|
|
data/test-lookup-syms/test1.so \
|
|
|
|
data/test-lookup-syms/test1-1-report.txt \
|
|
|
|
data/test-lookup-syms/test1-2-report.txt \
|
Support alternate debug info sections
ABGBZ#17193
* include/abg-dwarf-reader.h (class read_context)
(typedef read_context_sptr, create_read_context)
(has_alt_debug_info): Declare these.
(read_corpus_from_elf): Declare new overload.
* src/abg-dwarf-reader.cc (find_alt_debug_info)
(is_die_attribute_resolved_through_gnu_ref_alt)
(build_primary_die_parent_relations_under)
(build_alternate_die_parent_relations_under):
Define new static functions.
(read_context::{alt_dwarf_,
alt_debug_info_path_, alternate_die_decl_map_,
alternate_die_parent_map_}): New data members.
(read_context::{alt_dwarf, alt_debug_info_path,
alternate_die_decl_map, associate_die_to_decl_primary,
associate_die_to_decl_alternate, associate_die_to_decl,
lookup_decl_from_die_offset_primary,
lookup_decl_from_die_offset_alternate,
lookup_decl_from_die_offset, alternate_die_parent_map}): New
member functions.
(read_context::load_debug_info): Painfully Get a handle on the
alternate debug info section too. We shouldn't have to do all
this work; we could use the new dwarf_getalt() function from
libdw, but we cannot as we want to support supports that predate
that api. When a version of elfutils gets released with that api
though, we should conditionally use that instead.
(build_ir_node_from_die, get_parent_die, get_scope_for_die)
(build_namespace_decl_and_add_to_ir)
(build_class_type_and_add_to_ir, build_qualified_type)
(build_pointer_type_def, build_reference_type, build_typedef_type)
(build_var_decl, build_function_decl): Take a new parameter that
tells if the input DIE is from alternate debug info. Adjust their
code accordingly.
(die_die_attribute): Take a new output parameter that tells if the
resolved DIE is from alternate debug info. Also take a new
parameter that tells if the input DIE is from alternate debug info
sections.
(build_die_parent_relations_under): Take the DIE -> parent map to
act upon. Also, add a new overload that takes a flag saying if
the DIE is from alternate debug info or not, and act upon that.
(build_die_parent_maps): Renamed build_die_parent_map into this
and make it build DIE -> parent DIE relationship for the alternate
debug info file as well.
(find_last_import_unit_point_before_die, ): Adjust to use the
information about if the relevant DIEs are in alternate debug info
or not.
(build_translation_unit_and_add_to_ir): Clear the alternate DIE ->
decl map, that is per TU just as the primary DIE -> decl map.
Adjust to use the information about if the relevant DIEs are in
alternate debug info or not.
(read_debug_info_into_corpus): Build the two DIE -> DIE parent
maps (one for the primary debug info and one for the alternate
debug info).
(create_read_context, has_alt_debug_info): Define new public entry
points.
(read_corpus_from_elf): New entry point overload that takes a
read_context.
* tools/bidw.cc (options::{check_alt_debug_info_path,
show_base_name_alt_debug_info_path}): New data members.
(display_usage): Update for the two new options
--check-alternate-debug-info and
check-alternate-debug-info-base-name.
(parse_command_line): Parse the two options above.
(main) Handle the two new options above.
* tests/Makefile.am: Build the new runtestaltdwarf test. Add the
new data/test-alt-dwarf-file/* files to the build system.
* tests/test-alt-dwarf-file.cc: New test driver.
* tests/data/test-alt-dwarf-file/test0-common.cc: New test input
files.
* tests/data/test-alt-dwarf-file/libtest0-common.so: Likewise.
* tests/data/test-alt-dwarf-file/test0.cc: Likewise.
* tests/data/test-alt-dwarf-file/libtest0.so: Likewise.
* tests/data/test-alt-dwarf-file/test0.h: Likewise.
* tests/data/test-alt-dwarf-file/test0-common-dwz.debug: Likewise.
* tests/data/test-alt-dwarf-file/test0-debug-dir/.build-id/16/7088580c513b439c9ed95fe6a8b29496495f26.debug:
Likewise.
* tests/data/test-alt-dwarf-file/test0-debug-dir/test0-common-dwz.debug:
Likewise.
* tests/data/test-read-dwarf/test1.abi: Adjust. bidw doesn't emit
an abstract constructor/destructor anymore. It emits just the
functions matching the cdtor symbols found in the binary.
* tests/data/test-read-dwarf/test2.so.abi: Likewise.
Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2014-08-15 16:11:49 +00:00
|
|
|
data/test-lookup-syms/test1-3-report.txt \
|
|
|
|
\
|
|
|
|
data/test-alt-dwarf-file/test0.cc \
|
|
|
|
data/test-alt-dwarf-file/libtest0.so \
|
|
|
|
data/test-alt-dwarf-file/test0-common.cc \
|
|
|
|
data/test-alt-dwarf-file/libtest0-common.so \
|
|
|
|
data/test-alt-dwarf-file/test0-report.txt \
|
|
|
|
data/test-alt-dwarf-file/test0-debug-dir/test0-common-dwz.debug \
|
|
|
|
data/test-alt-dwarf-file/test0-debug-dir/.build-id/16/7088580c513b439c9ed95fe6a8b29496495f26.debug
|
|
|
|
|
2013-05-03 13:28:10 +00:00
|
|
|
|
|
|
|
clean-local: clean-local-check
|
|
|
|
.PHONY: clean-local-check
|
|
|
|
|
|
|
|
clean-local-check:
|
2013-07-03 05:32:21 +00:00
|
|
|
-rm -rf ${builddir}/output *.svg *.gv
|