mirror of
git://sourceware.org/git/libabigail.git
synced 2025-04-09 19:21:41 +00:00
rhbz1951526 - SELF CHECK FAILED for 'gimp-2.10'
This is a fix for bug https://bugzilla.redhat.com/show_bug.cgi?id=1951526. Although it's a patch for one bug, it addresses several different issues that cause the observed self comparison failure. As is often the case on this kind of problems, the failure is difficult to reproduce on a synthetic test case so I'll explain the root causes in this commit log. There are 4 different root causes to this problem. As I couldn't come up with a reduced test case for each one of them I am adding the fixes for those 4 issues in this commit, along with a new regression test extracted from the initial bugzilla problem report. So, overall, the symptom we are seeing here is that when we build an IR for the input binary gimp-2.0, save that IR into abixml, and read back that abixml into another IR, comparing the two IR shows changes; it should show no change whatsoever. This is what we call in libabigail jargon a self comparison (or self check) failure. As alluded to in my introduction above, there appear to be 4 different root causes for that self comparison failure. 1/ The first cause has to do with a situation about two anymous enums that are (wrongly) considered different from an ABI point of view. Using the debugging capabilities recently gained by libabigail, I could notice that the two enums are: (gdb) p debug(&l) enum __anonymous_enum__ : unnamed-enum-underlying-type-32 { // size in bits: 32 // translation unit: /usr/src/debug/gimp-2.10.22-2.el9.1.aarch64/app/<artificial>-757de // @: 0x698fb68, @canonical: 0 GIMP_INTERPOLATION_NONE = 0, GIMP_INTERPOLATION_LINEAR = 1, GIMP_INTERPOLATION_CUBIC = 2, GIMP_INTERPOLATION_NOHALO = 3, GIMP_INTERPOLATION_LOHALO = 4, }; $1 = (abigail::ir::decl_base *) 0x698fba0 (gdb) p debug(&r) enum __anonymous_enum__ : unnamed-enum-underlying-type-32 { // size in bits: 32 // translation unit: /usr/src/debug/gimp-2.10.22-2.el9.1.aarch64/app/app.c // @: 0xa6d83e8, @canonical: 0 GIMP_INTERPOLATION_NONE = 0, GIMP_INTERPOLATION_LINEAR = 1, GIMP_INTERPOLATION_CUBIC = 2, GIMP_INTERPOLATION_NOHALO = 3, GIMP_INTERPOLATION_LOHALO = 4, GIMP_INTERPOLATION_LANCZOS = 3, }; $2 = (abigail::ir::decl_base *) 0xa6d8420 (gdb) Note how the second enum has a new enumerator named 'GIMP_INTERPOLATION_LANCZOS', but its value is '3', which is the exact same value of as the one of the existing enumerator GIMP_INTERPOLATION_NOHALO. During type canonicalization of the IR from the input binary, libabigail (wrongly) considers these two enums as being different. This leads to the type 'Gimp*' (or anything type indirectly using any one of the anonymous enums above) coming from one translation unit being considered different from a type 'Gimp*' coming from another translation unit, just because their are not using either one version of the anonymous enum above or the other. This leads to a *LOT* of spurious type changes from the first IR, that are saved into abixml. To fix this first problem, this patch introduces "two modes" of comparing enums. There is a binary-only mode which only looks enumerator values, not enumerator names. And then there is the source-level mode which looks at both enumerator names and values when comparing enums. The former mode is used during type canonicalization. However, when a change is detected between two enums, then the diff-IR built to describe the change is constructed using the later mode. Using the later mode allows to describe precisely things like enumerator insertion/removal by referring to the names of the added/removed enumerators. 2/ The second root cause is that a struct, say, 'struct _GimpImage' from a translation unit is considered different from a 'struct _GimpImage' because the DWARF reader wrongly assign them different sizes. Here is what it looks like in the debugger: (gdb) p debug(&l) struct _GimpImage { // size in bits: 384 // definition point: ../../app/core/gimpimage.h:39:1 // translation unit: /usr/src/debug/gimp-2.10.22-2.el9.1.aarch64/app/<artificial>-757de // @: 0x69b9d10, @canonical: 0 GimpViewable parent_instance;' Gimp* gimp;' GimpImagePrivate* priv;' }; $8 = (abigail::ir::type_base *) 0x69b9d10 (gdb) p debug(&r) struct _GimpImage { // size in bits: 0 // definition point: :0:0 // translation unit: /usr/src/debug/gimp-2.10.22-2.el9.1.aarch64/app/<artificial>-8813f // @: 0x6ac7a50, @canonical: 0 }; Notice how the second 'struct _GimpImage' has a size of zero. This is because when reading the DWARF, we first encounter the DIE for the first' struct _GimpImage' and we properly build a type for it, along with its declaration. Then when we encounter another DIE defining 'struct _GimpImage' again, from a different translation unit, the DWARF reader recognizes that it's a DIE for a declaration of 'struct _GimpImage' and fails to re-use the previous definition for 'struct _GimpImage'. So it wrongly builds declaration-only 'struct _GimpImage' for it, hence the second struct _GimpImage with a zero size. Here again that creates spurious changes (after type canonicalization) in types using struct _GimpImage. And that is a lot of types, including things like 'Gimp*' and the like. The fix for this root cause issue is to change add_or_update_class_type in the DWARF reader to recognize that we are seeing a type declaration for which there was already a definition and return that definition instead of creating a new declaration. 3/ The third root cause is better explained with a "screen shot". Consider these two 'versions' of the same struct _GdkDevice from two different translation units: struct _GdkDevice { // size in bits: 576 // definition point: /usr/include/gtk-2.0/gdk/gdkinput.h:98:1 // translation unit: /usr/src/debug/gimp-2.10.22-2.el9.1.aarch64/app/<artificial>-2d0352 // @: 0x8820530, @canonical: 0 GObject parent_instance;' gchar* name; // uses canonical type '@0x6892980' GdkInputSource source;' GdkInputMode mode;' gboolean has_cursor; // uses canonical type '@0x688dd00' gint num_axes; // uses canonical type '@0x688dd00' GdkDeviceAxis* axes;' gint num_keys; // uses canonical type '@0x688dd00' GdkDeviceKey* keys;' }; $9 = (abigail::ir::type_base *) 0x8820530 (gdb) p debug(&r) struct _GdkDevice { // size in bits: 576 // definition point: /usr/include/gtk-2.0/gdk/gdkinput.h:98:1 // translation unit: /usr/src/debug/gimp-2.10.22-2.el9.1.aarch64/app/<artificial>-1fdb18 // @: 0x7cd71e0, @canonical: 0 GObject parent_instance;' gchar* _g_sealed__name; // uses canonical type '@0x6892980' GdkInputSource _g_sealed__source;' GdkInputMode _g_sealed__mode;' gboolean _g_sealed__has_cursor; // uses canonical type '@0x688dd00' gint _g_sealed__num_axes; // uses canonical type '@0x688dd00' GdkDeviceAxis* _g_sealed__axes;' gint _g_sealed__num_keys; // uses canonical type '@0x688dd00' GdkDeviceKey* _g_sealed__keys;' }; $10 = (abigail::ir::type_base *) 0x7cd71e0 (gdb) Notice how the name of the second data member 'name' was changed to '_g_sealed_name'. A similar scheme happens to several other data member names. The offsets and types of the struct _GdkDevice haven't changed however. So from an ABI standpoint, the two versions of that struct are equal. Libabigail consider them different however. Because that type is used by tons of other types of the binary being analyzed, this leads to lots of spurious canonical type difference that shouldn't be there. These three issues are magnified by the fact that the gimp binary is compiled using "link time optimization". That brings in a lot more opportunities to see these underlying issues that have been there for a long time. 4/ The fourth and last root cause issue. When the abixml writer emits a translation unit (TU), it keeps track of the 'non-emitted referred to type' of the currently emitted translation unit and emits them at the end of each TU. For instance, if the type 'Gimp*' (pointer to Gimp) was emitted, and yet the referred-to type 'Gimp' wasn't emitted, the TU writer makes sure to emit the referred-to 'Gimp' type at the end of the TU. This has been going on for quite some time now. The problem however is that although the non-emitted referred-to type was referred to in this current TU, it might no have been *DEFINED* in this TU. In that case, it should not be emitted in this TU. Otherwise, the TU where that type is defined in the abixml might appear different from where it is defined in the initial binary, leading to self comparison failures down the road. This patch ensures that a non-emitted referred-to type is always emitted in the TU it belongs to. 5/ After doing all this, it appears that we were forgetting to emit some function types that were defined in TUs emitted earlier and yet were being referred-to later. Looking closer, I realized that we should just emit function types seen in a given TU, regardless of the referred-to relation. The problem with that is that function types are special in libabigail because there are two situation in which they are created. Basically, a function type is created by the DWARF DIE DW_TAG_subroutine_type. This is for instance how pointer to functions are represented in DWARF, namely, by a DW_TAG_pointer_type that points to a DW_TAG_subroutine_type. That is represented in the libabigail ir by an instance of the abigail::ir::function_type type. This is represented in abixml as a 'function-type' XML element. But then, libabigail considers that all decls have a type. This applies obviously for variables or data member. Right. But then, libabigail considers that a function is also a decl, which has a type. And the type of a function is a function type, represented by the same abigail::ir::function_type. A practical difference with the former situation is that function decls are *NOT* represented in abixml using a 'function-type' element. Instead a 'function-decl' XML element uses return type and parameter elements to represent the types involved with a function decl. Said otherwise, the former 'function type' concept used to represent the type of functions in the libabigail IR is artificial. This artificial-ness was not explicitly expressed in libabigail. This patch now expresses that artificial-ness for function types. So the abixml writer now just decide to not emit artificial function types, and instead, emit all the non-artificial function types instead. This addresses this last issues by being able to emit all non-artificial function types defined in a given TU, without having to bother with the fact that they are referred-to or not. Together, fixing these 5 problems fixes this reported problem. The changes to the reference test outputs are adjustments needed because of the abixml output indeed changes. * include/abg-ir.h (environment::use_enum_binary_only_equality): Declare accessors. (type_or_decl_base::{s,g}et_is_artificial): Likewise. (decl_base::{s,g}et_is_artificial): Remove accessors. * src/abg-ir.cc (environment::priv::use_enum_binary_only_equality): Define new data member. (environment::priv::use_enum_binary_only_equality): Define accessors. (type_or_decl_base::priv::is_artificial_): Define new data member. It has actually moved here from decl_base::priv::is_artificial_. (type_or_decl_base::priv::priv): Initialize it. (type_or_decl_base::{g,s}et_is_artificial): Define accessors. (decl_base::is_artificial_): Move this to type_or_decl_base::is_artificial_. (maybe_adjust_canonical_type): In a given class of equivalence of function types, if there is one non-artificial function type, then the entire class of equivalence is considered non-artificial; so flag the canonical function type as being non-artificial. (is_enumerator_present_in_enum): Define new static function. (equals): Re-arrange the overload for enums so the order of the enumerators doesn't count in the comparison. Also, two enums with different numbers of enumerators can still be equal, with the right redundancy. In the overload for var_decl, avoid taking into account the names of data members in the comparison. (enum_type_decl::enumerator::operator==): In the binary-level comparison mode, only compare the value of enumerators, not their name. * src/abg-comparison.cc (compute_diff): In the overload for enum_type_decl, if the enums compare different using binary-level comparison, then use source-level comparison to build the diff-IR. * src/abg-dwarf-reader.cc (read_context::compare_before_canonicalisation): Compare enums using binary-level comparison. (add_or_update_class_type): If we are looking at the definition of an existing declaration that has been already defined then use the previous definition, in case we are going to need to update the definition. Also, update the size only if it's needed. (build_function_type): By default, consider the newly built function type as artificial. (build_ir_node_from_die): When looking at a DW_TAG_subroutine_type DIE, consider the built function type as non-artificial. * src/abg-reader.cc (read_context::maybe_check_abixml_canonical_type_stability): Don't consider declaration-only classes in an ODR context because they don't have canonical types. (build_function_decl): Flag the function type of the function as artificial. (build_class_decl): Make sure to reuse class types that were already created. * src/abg-writer.cc (write_translation_unit): Allow emitting empty classes. Make sure referenced types are emitting in the translation unit where they belong. Avoid emitting artificial function types. * tests/data/test-alt-dwarf-file/rhbz1951526/rhbz1951526-report-0.txt: New test reference output. * tests/data/test-alt-dwarf-file/rhbz1951526/usr/bin/gimp-2.10: New reference test binary input. * tests/data/test-alt-dwarf-file/rhbz1951526/usr/lib/debug/.dwz/gimp-2.10.22-2.el9.1.aarch64: Likewise. * tests/data/test-alt-dwarf-file/rhbz1951526/usr/lib/debug/usr/bin/gimp-2.10-2.10.22-2.el9.1.aarch64.debug: Likewise. * tests/data/Makefile.am: Add the new test files to source directory. * tests/test-alt-dwarf-file.cc: Add the new test inputs to this test harness. * tests/data/test-abidiff/test-PR18791-report0.txt: Adjust. * tests/data/test-abidiff/test-enum0-report.txt: Likewise. * tests/data/test-annotate/libtest23.so.abi: Likewise. * tests/data/test-annotate/libtest24-drop-fns-2.so.abi: Likewise. * tests/data/test-annotate/libtest24-drop-fns.so.abi: Likewise. * tests/data/test-annotate/test-anonymous-members-0.o.abi: Likewise. * tests/data/test-annotate/test13-pr18894.so.abi: Likewise. * tests/data/test-annotate/test14-pr18893.so.abi: Likewise. * tests/data/test-annotate/test15-pr18892.so.abi: Likewise. * tests/data/test-annotate/test17-pr19027.so.abi: Likewise. * tests/data/test-annotate/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: Likewise. * tests/data/test-annotate/test19-pr19023-libtcmalloc_and_profiler.so.abi: Likewise. * tests/data/test-annotate/test20-pr19025-libvtkParallelCore-6.1.so.abi: Likewise. * tests/data/test-annotate/test21-pr19092.so.abi: Likewise. * tests/data/test-diff-dwarf-abixml/test0-pr19026-libvtkIOSQL-6.1.so.1.abi: Likewise. * tests/data/test-diff-dwarf/PR25058-liblttng-ctl-report-1.txt: Likewise. * tests/data/test-diff-dwarf/test6-report.txt: Likewise. * tests/data/test-diff-filter/test31-pr18535-libstdc++-report-0.txt: Likewise. * tests/data/test-diff-filter/test31-pr18535-libstdc++-report-1.txt: Likewise. * tests/data/test-diff-filter/test8-report.txt: Likewise. * tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-2.txt: Likewise. * tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-3.txt: Likewise. * tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-0.txt: Likewise. * tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-1.txt: Likewise. * tests/data/test-read-dwarf/PR22015-libboost_iostreams.so.abi: Likewise. * tests/data/test-read-dwarf/PR22122-libftdc.so.abi: Likewise. * tests/data/test-read-dwarf/PR25007-sdhci.ko.abi: Likewise. * tests/data/test-read-dwarf/PR25042-libgdbm-clang-dwarf5.so.6.0.0.abi: Likewise. * tests/data/test-read-dwarf/PR26261/PR26261-exe.abi: Likewise. * tests/data/test-read-dwarf/libtest23.so.abi: Likewise. * tests/data/test-read-dwarf/libtest24-drop-fns-2.so.abi: Likewise. * tests/data/test-read-dwarf/libtest24-drop-fns.so.abi: Likewise. * tests/data/test-read-dwarf/test-libandroid.so.abi: Likewise. * tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: Likewise. * tests/data/test-read-dwarf/test12-pr18844.so.abi: Likewise. * tests/data/test-read-dwarf/test13-pr18894.so.abi: Likewise. * tests/data/test-read-dwarf/test14-pr18893.so.abi: Likewise. * tests/data/test-read-dwarf/test15-pr18892.so.abi: Likewise. * tests/data/test-read-dwarf/test16-pr18904.so.abi: Likewise. * tests/data/test-read-dwarf/test17-pr19027.so.abi: Likewise. * tests/data/test-read-dwarf/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: Likewise. * tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi: Likewise. * tests/data/test-read-dwarf/test20-pr19025-libvtkParallelCore-6.1.so.abi: Likewise. * tests/data/test-read-dwarf/test21-pr19092.so.abi: Likewise. * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: Likewise. * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Likewise. * tests/data/test-read-write/test28-without-std-fns-ref.xml: Likewise. * tests/data/test-read-write/test28-without-std-vars-ref.xml: Likewise. Signed-off-by: Dodji Seketeli <dodji@redhat.com>
This commit is contained in:
parent
ed87d0a29b
commit
1cfbff1b30
include
src
tests
data
Makefile.am
test-alt-dwarf-file.cctest-abidiff
test-alt-dwarf-file/rhbz1951526
test-annotate
libtest23.so.abilibtest24-drop-fns-2.so.abilibtest24-drop-fns.so.abitest-anonymous-members-0.o.abitest13-pr18894.so.abitest14-pr18893.so.abitest15-pr18892.so.abitest17-pr19027.so.abitest18-pr19037-libvtkRenderingLIC-6.1.so.abitest19-pr19023-libtcmalloc_and_profiler.so.abitest20-pr19025-libvtkParallelCore-6.1.so.abitest21-pr19092.so.abi
test-diff-dwarf-abixml
test-diff-dwarf
test-diff-filter
test-diff-pkg
spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-2.txtspice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-3.txttbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-0.txttbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-1.txt
test-read-dwarf
PR22015-libboost_iostreams.so.abiPR22122-libftdc.so.abiPR25007-sdhci.ko.abiPR25042-libgdbm-clang-dwarf5.so.6.0.0.abi
PR26261
libtest23.so.abilibtest24-drop-fns-2.so.abilibtest24-drop-fns.so.abitest-libandroid.so.abitest10-pr18818-gcc.so.abitest12-pr18844.so.abitest13-pr18894.so.abitest14-pr18893.so.abitest15-pr18892.so.abitest16-pr18904.so.abitest17-pr19027.so.abitest18-pr19037-libvtkRenderingLIC-6.1.so.abitest19-pr19023-libtcmalloc_and_profiler.so.abitest20-pr19025-libvtkParallelCore-6.1.so.abitest21-pr19092.so.abitest22-pr19097-libstdc++.so.6.0.17.so.abitest9-pr18818-clang.so.abitest-read-write
@ -182,6 +182,12 @@ public:
|
||||
void
|
||||
decl_only_class_equals_definition(bool f) const;
|
||||
|
||||
bool
|
||||
use_enum_binary_only_equality() const;
|
||||
|
||||
void
|
||||
use_enum_binary_only_equality(bool f) const;
|
||||
|
||||
bool
|
||||
is_void_type(const type_base_sptr&) const;
|
||||
|
||||
@ -1378,6 +1384,12 @@ public:
|
||||
|
||||
virtual ~type_or_decl_base();
|
||||
|
||||
bool
|
||||
get_is_artificial() const;
|
||||
|
||||
void
|
||||
set_is_artificial(bool);
|
||||
|
||||
const environment*
|
||||
get_environment() const;
|
||||
|
||||
@ -1628,12 +1640,6 @@ public:
|
||||
void
|
||||
set_is_anonymous(bool);
|
||||
|
||||
bool
|
||||
get_is_artificial() const;
|
||||
|
||||
void
|
||||
set_is_artificial(bool);
|
||||
|
||||
bool
|
||||
get_has_anonymous_parent() const;
|
||||
|
||||
|
@ -4180,15 +4180,19 @@ compute_diff(const enum_type_decl_sptr first,
|
||||
second->get_underlying_type(),
|
||||
ctxt);
|
||||
enum_diff_sptr d(new enum_diff(first, second, ud, ctxt));
|
||||
|
||||
compute_diff(first->get_enumerators().begin(),
|
||||
first->get_enumerators().end(),
|
||||
second->get_enumerators().begin(),
|
||||
second->get_enumerators().end(),
|
||||
d->priv_->enumerators_changes_);
|
||||
|
||||
d->ensure_lookup_tables_populated();
|
||||
|
||||
bool s = first->get_environment()->use_enum_binary_only_equality();
|
||||
first->get_environment()->use_enum_binary_only_equality(true);
|
||||
if (first != second)
|
||||
{
|
||||
first->get_environment()->use_enum_binary_only_equality(false);
|
||||
compute_diff(first->get_enumerators().begin(),
|
||||
first->get_enumerators().end(),
|
||||
second->get_enumerators().begin(),
|
||||
second->get_enumerators().end(),
|
||||
d->priv_->enumerators_changes_);
|
||||
d->ensure_lookup_tables_populated();
|
||||
}
|
||||
first->get_environment()->use_enum_binary_only_equality(s);
|
||||
ctxt->initialize_canonical_diff(d);
|
||||
|
||||
return d;
|
||||
|
@ -4162,10 +4162,13 @@ public:
|
||||
const environment* e = l->get_environment();
|
||||
ABG_ASSERT(!e->canonicalization_is_done());
|
||||
|
||||
bool s = e->decl_only_class_equals_definition();
|
||||
bool s0 = e->decl_only_class_equals_definition();
|
||||
bool s1 = e->use_enum_binary_only_equality();
|
||||
e->decl_only_class_equals_definition(true);
|
||||
e->use_enum_binary_only_equality(true);
|
||||
bool equal = l == r;
|
||||
e->decl_only_class_equals_definition(s);
|
||||
e->decl_only_class_equals_definition(s0);
|
||||
e->use_enum_binary_only_equality(s1);
|
||||
return equal;
|
||||
}
|
||||
|
||||
@ -12143,6 +12146,9 @@ add_or_update_class_type(read_context& ctxt,
|
||||
if (klass)
|
||||
{
|
||||
res = result = klass;
|
||||
if (has_child && klass->get_is_declaration_only()
|
||||
&& klass->get_definition_of_declaration())
|
||||
res = result = is_class_type(klass->get_definition_of_declaration());
|
||||
if (loc)
|
||||
result->set_location(loc);
|
||||
}
|
||||
@ -12160,7 +12166,7 @@ add_or_update_class_type(read_context& ctxt,
|
||||
ABG_ASSERT(result);
|
||||
}
|
||||
|
||||
if (size)
|
||||
if (size != result->get_size_in_bits())
|
||||
result->set_size_in_bits(size);
|
||||
|
||||
if (klass)
|
||||
@ -13223,6 +13229,8 @@ build_function_type(read_context& ctxt,
|
||||
|
||||
tu->bind_function_type_life_time(result);
|
||||
|
||||
result->set_is_artificial(true);
|
||||
|
||||
{
|
||||
die_function_type_map_type::const_iterator i =
|
||||
ctxt.die_wip_function_types_map(source).
|
||||
@ -14948,6 +14956,7 @@ build_ir_node_from_die(read_context& ctxt,
|
||||
if (f)
|
||||
{
|
||||
result = f;
|
||||
result->set_is_artificial(false);
|
||||
maybe_canonicalize_type(die, ctxt);
|
||||
}
|
||||
}
|
||||
|
269
src/abg-ir.cc
269
src/abg-ir.cc
@ -2887,6 +2887,7 @@ struct environment::priv
|
||||
bool canonicalization_is_done_;
|
||||
bool do_on_the_fly_canonicalization_;
|
||||
bool decl_only_class_equals_definition_;
|
||||
bool use_enum_binary_only_equality_;
|
||||
#ifdef WITH_DEBUG_SELF_COMPARISON
|
||||
bool self_comparison_debug_on_;
|
||||
#endif
|
||||
@ -2894,7 +2895,8 @@ struct environment::priv
|
||||
priv()
|
||||
: canonicalization_is_done_(),
|
||||
do_on_the_fly_canonicalization_(true),
|
||||
decl_only_class_equals_definition_(false)
|
||||
decl_only_class_equals_definition_(false),
|
||||
use_enum_binary_only_equality_(true)
|
||||
#ifdef WITH_DEBUG_SELF_COMPARISON
|
||||
,
|
||||
self_comparison_debug_on_(false)
|
||||
@ -3238,6 +3240,70 @@ void
|
||||
environment::decl_only_class_equals_definition(bool f) const
|
||||
{priv_->decl_only_class_equals_definition_ = f;}
|
||||
|
||||
/// Test if comparing enums is done by looking only at enumerators
|
||||
/// values.
|
||||
///
|
||||
/// For enums, using 'binary-only' equality means looking only at
|
||||
/// values of enumerators (not names of enumerators) when comparing
|
||||
/// enums. This means we are only considering the binary equality of
|
||||
/// enums, not source equality.
|
||||
///
|
||||
/// The two enums below are "binary equal", but not "source-level
|
||||
/// equal":
|
||||
///
|
||||
/// enum foo
|
||||
/// {
|
||||
/// e0 = 0;
|
||||
/// e1 = 1;
|
||||
/// e2 = 2;
|
||||
/// };
|
||||
///
|
||||
/// enum foo
|
||||
/// {
|
||||
/// e0 = 0;
|
||||
/// e1 = 1;
|
||||
/// e2 = 2;
|
||||
/// e_added = 1;
|
||||
/// };
|
||||
///
|
||||
/// @return true iff using 'binary-only' equality for enums
|
||||
/// comparison.
|
||||
bool
|
||||
environment::use_enum_binary_only_equality() const
|
||||
{return priv_->use_enum_binary_only_equality_;}
|
||||
|
||||
/// Setter for the property that determines that comparing enums is
|
||||
/// done by looking only at enumerators values.
|
||||
///
|
||||
/// For enums, using 'binary-only' equality means looking only at
|
||||
/// values of enumerators (not names of enumerators) when comparing
|
||||
/// enums. This means we are only considering the binary equality of
|
||||
/// enums, not source equality.
|
||||
///
|
||||
/// The two enums below are "binary equal", but not "source-level
|
||||
/// equal":
|
||||
///
|
||||
/// enum foo
|
||||
/// {
|
||||
/// e0 = 0;
|
||||
/// e1 = 1;
|
||||
/// e2 = 2;
|
||||
/// };
|
||||
///
|
||||
/// enum foo
|
||||
/// {
|
||||
/// e0 = 0;
|
||||
/// e1 = 1;
|
||||
/// e2 = 2;
|
||||
/// e_added = 1;
|
||||
/// };
|
||||
///
|
||||
/// @param f true iff using 'binary-only' equality for enums
|
||||
/// comparison.
|
||||
void
|
||||
environment::use_enum_binary_only_equality(bool f) const
|
||||
{priv_->use_enum_binary_only_equality_ = f;}
|
||||
|
||||
/// Test if a given type is a void type as defined in the current
|
||||
/// environment.
|
||||
///
|
||||
@ -3530,6 +3596,10 @@ struct type_or_decl_base::priv
|
||||
// location advertised by the original emitter of the artifact
|
||||
// emitter.
|
||||
location artificial_location_;
|
||||
// Flags if the current ABI artifact is artificial (i.e, *NOT*
|
||||
// generated from the initial source code, but rather either
|
||||
// artificially by the compiler or by libabigail itself).
|
||||
bool is_artificial_;
|
||||
|
||||
/// Constructor of the type_or_decl_base::priv private type.
|
||||
///
|
||||
@ -3544,7 +3614,8 @@ struct type_or_decl_base::priv
|
||||
type_or_decl_ptr_(),
|
||||
hashing_started_(),
|
||||
env_(e),
|
||||
translation_unit_()
|
||||
translation_unit_(),
|
||||
is_artificial_()
|
||||
{}
|
||||
|
||||
enum type_or_decl_kind
|
||||
@ -3620,6 +3691,29 @@ type_or_decl_base::type_or_decl_base(const type_or_decl_base& o)
|
||||
type_or_decl_base::~type_or_decl_base()
|
||||
{}
|
||||
|
||||
/// Getter of the flag that says if the artefact is artificial.
|
||||
///
|
||||
/// Being artificial means it was not explicitely mentionned in the
|
||||
/// source code, but was rather artificially created by the compiler
|
||||
/// or libabigail.
|
||||
///
|
||||
/// @return true iff the declaration is artificial.
|
||||
bool
|
||||
type_or_decl_base::get_is_artificial() const
|
||||
{return priv_->is_artificial_;}
|
||||
|
||||
/// Setter of the flag that says if the artefact is artificial.
|
||||
///
|
||||
/// Being artificial means the artefact was not explicitely
|
||||
/// mentionned in the source code, but was rather artificially created
|
||||
/// by the compiler or by libabigail.
|
||||
///
|
||||
/// @param f the new value of the flag that says if the artefact is
|
||||
/// artificial.
|
||||
void
|
||||
type_or_decl_base::set_is_artificial(bool f)
|
||||
{priv_->is_artificial_ = f;}
|
||||
|
||||
/// Getter for the "kind" property of @ref type_or_decl_base type.
|
||||
///
|
||||
/// This property holds the identifier bitmap of the runtime type of
|
||||
@ -3950,7 +4044,6 @@ struct decl_base::priv
|
||||
{
|
||||
bool in_pub_sym_tab_;
|
||||
bool is_anonymous_;
|
||||
bool is_artificial_;
|
||||
bool has_anonymous_parent_;
|
||||
location location_;
|
||||
context_rel *context_;
|
||||
@ -3982,7 +4075,6 @@ struct decl_base::priv
|
||||
priv()
|
||||
: in_pub_sym_tab_(false),
|
||||
is_anonymous_(true),
|
||||
is_artificial_(false),
|
||||
has_anonymous_parent_(false),
|
||||
context_(),
|
||||
visibility_(VISIBILITY_DEFAULT),
|
||||
@ -4288,28 +4380,6 @@ void
|
||||
decl_base::set_is_anonymous(bool f)
|
||||
{priv_->is_anonymous_ = f;}
|
||||
|
||||
/// Getter of the flag that says if the declaration is artificial.
|
||||
///
|
||||
/// Being artificial means the parameter was not explicitely
|
||||
/// mentionned in the source code, but was rather artificially created
|
||||
/// by the compiler.
|
||||
///
|
||||
/// @return true iff the declaration is artificial.
|
||||
bool
|
||||
decl_base::get_is_artificial() const
|
||||
{return priv_->is_artificial_;}
|
||||
|
||||
/// Setter of the flag that says if the declaration is artificial.
|
||||
///
|
||||
/// Being artificial means the parameter was not explicitely
|
||||
/// mentionned in the source code, but was rather artificially created
|
||||
/// by the compiler.
|
||||
///
|
||||
/// @param f the new value of the flag that says if the declaration is
|
||||
/// artificial.
|
||||
void
|
||||
decl_base::set_is_artificial(bool f)
|
||||
{priv_->is_artificial_ = f;}
|
||||
|
||||
/// Get the "has_anonymous_parent" flag of the current declaration.
|
||||
///
|
||||
@ -13421,6 +13491,15 @@ maybe_adjust_canonical_type(const type_base_sptr& canonical,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// If an artificial function type equals a non-artfificial one in
|
||||
// the system, then the canonical type of both should be deemed
|
||||
// non-artificial. This is important because only non-artificial
|
||||
// canonical function types are emitted out into abixml, so if don't
|
||||
// do this we risk missing to emit some function types.
|
||||
if (is_function_type(type))
|
||||
if (type->get_is_artificial() != canonical->get_is_artificial())
|
||||
canonical->set_is_artificial(false);
|
||||
}
|
||||
|
||||
/// Compute the canonical type of a given type.
|
||||
@ -16172,9 +16251,15 @@ struct array_type_def::priv
|
||||
interned_string internal_qualified_name_;
|
||||
|
||||
priv(type_base_sptr t)
|
||||
: element_type_(t) {}
|
||||
: element_type_(t)
|
||||
{}
|
||||
|
||||
priv(type_base_sptr t, subranges_type subs)
|
||||
: element_type_(t), subranges_(subs) {}
|
||||
: element_type_(t), subranges_(subs)
|
||||
{}
|
||||
|
||||
priv()
|
||||
{}
|
||||
};
|
||||
|
||||
/// Constructor for the type array_type_def
|
||||
@ -16779,6 +16864,26 @@ enum_has_non_name_change(const enum_type_decl& l,
|
||||
return result;
|
||||
}
|
||||
|
||||
/// Test if a given enumerator is found present in an enum.
|
||||
///
|
||||
/// This is a subroutine of the equals function for enums.
|
||||
///
|
||||
/// @param enr the enumerator to consider.
|
||||
///
|
||||
/// @param enom the enum to consider.
|
||||
///
|
||||
/// @return true iff the enumerator @p enr is present in the enum @p
|
||||
/// enom.
|
||||
static bool
|
||||
is_enumerator_present_in_enum(const enum_type_decl::enumerator &enr,
|
||||
const enum_type_decl &enom)
|
||||
{
|
||||
for (const auto &e : enom.get_enumerators())
|
||||
if (e == enr)
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
/// Compares two instances of @ref enum_type_decl.
|
||||
///
|
||||
/// If the two intances are different, set a bitfield to give some
|
||||
@ -16811,31 +16916,6 @@ equals(const enum_type_decl& l, const enum_type_decl& r, change_kind* k)
|
||||
ABG_RETURN_FALSE;
|
||||
}
|
||||
|
||||
enum_type_decl::enumerators::const_iterator i, j;
|
||||
for (i = l.get_enumerators().begin(), j = r.get_enumerators().begin();
|
||||
i != l.get_enumerators().end() && j != r.get_enumerators().end();
|
||||
++i, ++j)
|
||||
if (*i != *j)
|
||||
{
|
||||
result = false;
|
||||
if (k)
|
||||
{
|
||||
*k |= LOCAL_TYPE_CHANGE_KIND;
|
||||
break;
|
||||
}
|
||||
else
|
||||
ABG_RETURN_FALSE;
|
||||
}
|
||||
|
||||
if (i != l.get_enumerators().end() || j != r.get_enumerators().end())
|
||||
{
|
||||
result = false;
|
||||
if (k)
|
||||
*k |= LOCAL_TYPE_CHANGE_KIND;
|
||||
else
|
||||
ABG_RETURN_FALSE;
|
||||
}
|
||||
|
||||
if (!(l.decl_base::operator==(r) && l.type_base::operator==(r)))
|
||||
{
|
||||
result = false;
|
||||
@ -16850,7 +16930,63 @@ equals(const enum_type_decl& l, const enum_type_decl& r, change_kind* k)
|
||||
ABG_RETURN_FALSE;
|
||||
}
|
||||
|
||||
return result;
|
||||
// Now compare the enumerators. Note that the order of declaration
|
||||
// of enumerators should not matter in the comparison.
|
||||
//
|
||||
// Also if the value of
|
||||
// abigail::ir::environment::use_enum_binary_only_equality() is
|
||||
// true, then enumerators are compared by considering their value
|
||||
// only. Their name is not taken into account.
|
||||
//
|
||||
// In that case, note that the two enums below are considered equal:
|
||||
//
|
||||
// enum foo
|
||||
// {
|
||||
// e0 = 0;
|
||||
// e1 = 1;
|
||||
// e2 = 2;
|
||||
// };
|
||||
//
|
||||
// enum foo
|
||||
// {
|
||||
// e0 = 0;
|
||||
// e1 = 1;
|
||||
// e2 = 2;
|
||||
// e_added = 1;
|
||||
// };
|
||||
//
|
||||
// These two enums are considered different if
|
||||
// environment::use_enum_binary_only_equality() return false.
|
||||
//
|
||||
// So enumerators comparison should accomodate these conditions.
|
||||
|
||||
for(const auto &e : l.get_enumerators())
|
||||
if (!is_enumerator_present_in_enum(e, r))
|
||||
{
|
||||
result = false;
|
||||
if (k)
|
||||
{
|
||||
*k |= LOCAL_TYPE_CHANGE_KIND;
|
||||
break;
|
||||
}
|
||||
else
|
||||
ABG_RETURN_FALSE;
|
||||
}
|
||||
|
||||
for(const auto &e : r.get_enumerators())
|
||||
if (!is_enumerator_present_in_enum(e, l))
|
||||
{
|
||||
result = false;
|
||||
if (k)
|
||||
{
|
||||
*k |= LOCAL_TYPE_CHANGE_KIND;
|
||||
break;
|
||||
}
|
||||
else
|
||||
ABG_RETURN_FALSE;
|
||||
}
|
||||
|
||||
ABG_RETURN(result);
|
||||
}
|
||||
|
||||
/// Equality operator.
|
||||
@ -16984,15 +17120,28 @@ enum_type_decl::enumerator::operator=(const enumerator& o)
|
||||
}
|
||||
/// Equality operator
|
||||
///
|
||||
/// @param other the enumerator to compare to the current instance of
|
||||
/// enum_type_decl::enumerator.
|
||||
/// When environment::use_enum_binary_only_equality() is true, this
|
||||
/// equality operator only cares about the value of the enumerator.
|
||||
/// It doesn't take the name of the enumerator into account. This is
|
||||
/// the ABI-oriented default equality operator.
|
||||
///
|
||||
/// When the environment::use_enum_binary_only_equality() is false
|
||||
/// however, then this equality operator also takes the name of the
|
||||
/// enumerator into account as well as the value.
|
||||
///
|
||||
/// @param other the enumerator to compare to the current
|
||||
/// instance of enum_type_decl::enumerator.
|
||||
///
|
||||
/// @return true if @p other equals the current instance of
|
||||
/// enum_type_decl::enumerator.
|
||||
bool
|
||||
enum_type_decl::enumerator::operator==(const enumerator& other) const
|
||||
{return (get_name() == other.get_name()
|
||||
&& get_value() == other.get_value());}
|
||||
{
|
||||
bool names_equal = true;
|
||||
if (!get_environment()->use_enum_binary_only_equality())
|
||||
names_equal = (get_name() == other.get_name());
|
||||
return names_equal && (get_value() == other.get_value());
|
||||
}
|
||||
|
||||
/// Inequality operator.
|
||||
///
|
||||
@ -17569,12 +17718,12 @@ equals(const var_decl& l, const var_decl& r, change_kind* k)
|
||||
}
|
||||
bool symbols_are_equal = (s0 && s1 && result);
|
||||
|
||||
if (symbols_are_equal)
|
||||
if (symbols_are_equal || (is_data_member(l) && is_data_member(r)))
|
||||
{
|
||||
// The variables have underlying elf symbols that are equal, so
|
||||
// now, let's compare the decl_base part of the variables w/o
|
||||
// considering their decl names.
|
||||
const interned_string &n1 = l.get_name(), &n2 = r.get_name();
|
||||
const interned_string n1 = l.get_name(), n2 = r.get_name();
|
||||
const_cast<var_decl&>(l).set_name("");
|
||||
const_cast<var_decl&>(r).set_name("");
|
||||
bool decl_bases_different = !l.decl_base::operator==(r);
|
||||
|
@ -820,6 +820,12 @@ public:
|
||||
|| m_env->get_type_id_canonical_type_map().empty())
|
||||
return ;
|
||||
|
||||
if (class_decl_sptr c = is_class_type(t))
|
||||
if (odr_is_relevant(*c) && c->get_is_declaration_only())
|
||||
// Declaration-only classes don't have canonical types in
|
||||
// environments where ODR is relevant (like in C++).
|
||||
return;
|
||||
|
||||
// Let's get the type-id of this type as recorded in the
|
||||
// originating abixml file.
|
||||
string type_id =
|
||||
@ -3300,6 +3306,8 @@ build_function_decl(read_context& ctxt,
|
||||
|
||||
ABG_ASSERT(fn_type);
|
||||
|
||||
fn_type->set_is_artificial(true);
|
||||
|
||||
function_decl_sptr fn_decl(as_method_decl
|
||||
? new method_decl (name, fn_type,
|
||||
declared_inline, loc,
|
||||
@ -4565,9 +4573,17 @@ build_class_decl(read_context& ctxt,
|
||||
naming_typedef_id = xml::unescape_xml_string(CHAR_STR(s));
|
||||
|
||||
ABG_ASSERT(!id.empty());
|
||||
|
||||
if (type_base_sptr t = ctxt.get_type_decl(id))
|
||||
{
|
||||
class_decl_sptr result = is_class_type(t);
|
||||
ABG_ASSERT(result);
|
||||
return result;
|
||||
}
|
||||
|
||||
class_decl_sptr previous_definition, previous_declaration;
|
||||
const vector<type_base_sptr> *types_ptr = 0;
|
||||
if (!is_anonymous)
|
||||
if (!is_anonymous && !previous_definition)
|
||||
types_ptr = ctxt.get_all_type_decls(id);
|
||||
if (types_ptr)
|
||||
{
|
||||
|
@ -2278,11 +2278,12 @@ write_translation_unit(write_context& ctxt,
|
||||
{
|
||||
if (type_base_sptr t = is_type(*i))
|
||||
{
|
||||
// Emit non-empty classes that are declaration-only. Those
|
||||
// beasts are class that only contain member types.
|
||||
// Emit declaration-only classes that are needed. Some of
|
||||
// these classes can be empty. Those beasts can be classes
|
||||
// that only contain member types. They can also be classes
|
||||
// considered "opaque".
|
||||
if (class_decl_sptr class_type = is_class_type(t))
|
||||
if (class_type->get_is_declaration_only()
|
||||
&& !class_type->is_empty()
|
||||
&& !ctxt.type_is_emitted(class_type))
|
||||
write_type(class_type, ctxt,
|
||||
indent + c.get_xml_element_indent());
|
||||
@ -2309,7 +2310,11 @@ write_translation_unit(write_context& ctxt,
|
||||
i != ctxt.get_referenced_types().end();
|
||||
++i)
|
||||
if (!ctxt.type_is_emitted(*i)
|
||||
&& !ctxt.decl_only_type_is_emitted(*i))
|
||||
&& !ctxt.decl_only_type_is_emitted(*i)
|
||||
// Ensure that the referenced type is emitted in the
|
||||
// translation that it belongs to.
|
||||
&& ((*i)->get_translation_unit()->get_absolute_path()
|
||||
== tu.get_absolute_path()))
|
||||
referenced_types_to_emit.insert(*i);
|
||||
|
||||
for (fn_type_ptr_set_type::const_iterator i =
|
||||
@ -2317,7 +2322,11 @@ write_translation_unit(write_context& ctxt,
|
||||
i != ctxt.get_referenced_function_types().end();
|
||||
++i)
|
||||
if (!ctxt.type_is_emitted(*i)
|
||||
&& !ctxt.decl_only_type_is_emitted(*i))
|
||||
&& !ctxt.decl_only_type_is_emitted(*i)
|
||||
// Ensure that the referenced type is emitted in the
|
||||
// translation that it belongs to.
|
||||
&& ((*i)->get_translation_unit()->get_absolute_path()
|
||||
== tu.get_absolute_path()))
|
||||
// A referenced type that was not emitted at all must be
|
||||
// emitted now.
|
||||
referenced_types_to_emit.insert(*i);
|
||||
@ -2327,7 +2336,11 @@ write_translation_unit(write_context& ctxt,
|
||||
i != ctxt.get_referenced_non_canonical_types().end();
|
||||
++i)
|
||||
if (!ctxt.type_is_emitted(*i)
|
||||
&& !ctxt.decl_only_type_is_emitted(*i))
|
||||
&& !ctxt.decl_only_type_is_emitted(*i)
|
||||
// Ensure that the referenced type is emitted in the
|
||||
// translation that it belongs to.
|
||||
&& ((*i)->get_translation_unit()->get_absolute_path()
|
||||
== tu.get_absolute_path()))
|
||||
// A referenced type that was not emitted at all must be
|
||||
// emitted now.
|
||||
referenced_types_to_emit.insert(*i);
|
||||
@ -2342,11 +2355,6 @@ write_translation_unit(write_context& ctxt,
|
||||
ctxt.sort_types(referenced_types_to_emit,
|
||||
sorted_referenced_types);
|
||||
|
||||
// Clear the types recorded as referenced by the process of
|
||||
// emitting the types out. New types are going to be referenced
|
||||
// the process of emitting the types below.
|
||||
ctxt.clear_referenced_types();
|
||||
|
||||
// Now, emit the referenced decls in a sorted order.
|
||||
for (vector<type_base*>::const_iterator i =
|
||||
sorted_referenced_types.begin();
|
||||
@ -2388,7 +2396,11 @@ write_translation_unit(write_context& ctxt,
|
||||
i != ctxt.get_referenced_types().end();
|
||||
++i)
|
||||
if (!ctxt.type_is_emitted(*i)
|
||||
&& !ctxt.decl_only_type_is_emitted(*i))
|
||||
&& !ctxt.decl_only_type_is_emitted(*i)
|
||||
// Ensure that the referenced type is emitted in the
|
||||
// translation that it belongs to.
|
||||
&& ((*i)->get_translation_unit()->get_absolute_path()
|
||||
== tu.get_absolute_path()))
|
||||
// A referenced type that was not emitted at all must be
|
||||
// emitted now.
|
||||
referenced_types_to_emit.insert(*i);
|
||||
@ -2398,7 +2410,11 @@ write_translation_unit(write_context& ctxt,
|
||||
i != ctxt.get_referenced_non_canonical_types().end();
|
||||
++i)
|
||||
if (!ctxt.type_is_emitted(*i)
|
||||
&& !ctxt.decl_only_type_is_emitted(*i))
|
||||
&& !ctxt.decl_only_type_is_emitted(*i)
|
||||
// Ensure that the referenced type is emitted in the
|
||||
// translation that it belongs to.
|
||||
&& ((*i)->get_translation_unit()->get_absolute_path()
|
||||
== tu.get_absolute_path()))
|
||||
// A referenced type that was not emitted at all must be
|
||||
// emitted now.
|
||||
referenced_types_to_emit.insert(*i);
|
||||
@ -2416,17 +2432,16 @@ write_translation_unit(write_context& ctxt,
|
||||
{
|
||||
function_type_sptr fn_type = is_function_type(*i);
|
||||
|
||||
if (!ctxt.type_is_referenced(fn_type) || ctxt.type_is_emitted(fn_type))
|
||||
// This function type is either not referenced by any emitted
|
||||
// pointer or reference type, or has already been emitted, so skip it.
|
||||
if (fn_type->get_is_artificial() || ctxt.type_is_emitted(fn_type))
|
||||
// This function type is either already emitted or it's
|
||||
// artificial (i.e, artificially created just to represent the
|
||||
// conceptual type of a function), so skip it.
|
||||
continue;
|
||||
|
||||
ABG_ASSERT(fn_type);
|
||||
write_function_type(fn_type, ctxt, indent + c.get_xml_element_indent());
|
||||
}
|
||||
|
||||
ctxt.clear_referenced_types();
|
||||
|
||||
do_indent(o, indent);
|
||||
o << "</abi-instr>\n";
|
||||
|
||||
@ -4447,6 +4462,8 @@ write_corpus(write_context& ctxt,
|
||||
do_indent_to_level(ctxt, indent, 0);
|
||||
out << "</abi-corpus>\n";
|
||||
|
||||
ctxt.clear_referenced_types();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -1563,6 +1563,10 @@ test-alt-dwarf-file/test1-libgromacs-debug-dir/.build-id/45/0c27b7c158eecb67822a
|
||||
test-alt-dwarf-file/test1-libgromacs-debug-dir/.build-id/7c/85cee9a5a59e7d0a866386b47c1674da5d201f.debug \
|
||||
test-alt-dwarf-file/test1-libgromacs-debug-dir/.dwz/gromacs-5.0.6-4.fc22.x86_64 \
|
||||
test-alt-dwarf-file/test1-libgromacs-debug-dir/usr/lib64/libgromacs_d.so.0.0.0.debug \
|
||||
test-alt-dwarf-file/rhbz1951526/rhbz1951526-report-0.txt \
|
||||
test-alt-dwarf-file/rhbz1951526/usr/bin/gimp-2.10 \
|
||||
test-alt-dwarf-file/rhbz1951526/usr/lib/debug/.dwz/gimp-2.10.22-2.el9.1.aarch64 \
|
||||
test-alt-dwarf-file/rhbz1951526/usr/lib/debug/usr/bin/gimp-2.10-2.10.22-2.el9.1.aarch64.debug \
|
||||
\
|
||||
test-abicompat/libtest0-fn-changed-libapp-v0.so \
|
||||
test-abicompat/libtest0-fn-changed-libapp-v1.so \
|
||||
|
@ -1,4 +1,4 @@
|
||||
Functions changes summary: 1 Removed, 60 Changed, 1 Added functions
|
||||
Functions changes summary: 1 Removed, 35 Changed, 1 Added functions
|
||||
Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
|
||||
|
||||
1 Removed function:
|
||||
@ -9,7 +9,7 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
|
||||
|
||||
[A] 'method void std::__cxx11::_List_base<sigc::slot_base, std::allocator<sigc::slot_base> >::_M_clear()'
|
||||
|
||||
60 functions with some indirect sub-type change:
|
||||
35 functions with some indirect sub-type change:
|
||||
|
||||
[C] 'method bool sigc::connection::block(bool)' has some indirect sub-type changes:
|
||||
implicit parameter 0 of type 'sigc::connection*' has sub-type changes:
|
||||
@ -193,26 +193,6 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
|
||||
implicit parameter 0 of type 'sigc::internal::signal_impl*' has sub-type changes:
|
||||
pointed to type 'struct sigc::internal::signal_impl' changed, as reported earlier
|
||||
|
||||
[C] 'method void sigc::internal::slot_rep::disconnect()' has some indirect sub-type changes:
|
||||
implicit parameter 0 of type 'sigc::internal::slot_rep*' has sub-type changes:
|
||||
pointed to type 'struct sigc::internal::slot_rep' changed, as reported earlier
|
||||
|
||||
[C] 'method void sigc::internal::trackable_callback_list::add_callback(void*)' has some indirect sub-type changes:
|
||||
implicit parameter 0 of type 'sigc::internal::trackable_callback_list*' has sub-type changes:
|
||||
pointed to type 'struct sigc::internal::trackable_callback_list' changed, as reported earlier
|
||||
|
||||
[C] 'method void sigc::internal::trackable_callback_list::clear()' has some indirect sub-type changes:
|
||||
implicit parameter 0 of type 'sigc::internal::trackable_callback_list*' has sub-type changes:
|
||||
pointed to type 'struct sigc::internal::trackable_callback_list' changed, as reported earlier
|
||||
|
||||
[C] 'method void sigc::internal::trackable_callback_list::remove_callback(void*)' has some indirect sub-type changes:
|
||||
implicit parameter 0 of type 'sigc::internal::trackable_callback_list*' has sub-type changes:
|
||||
pointed to type 'struct sigc::internal::trackable_callback_list' changed, as reported earlier
|
||||
|
||||
[C] 'method sigc::internal::trackable_callback_list::~trackable_callback_list(int)' has some indirect sub-type changes:
|
||||
implicit parameter 0 of type 'sigc::internal::trackable_callback_list*' has sub-type changes:
|
||||
pointed to type 'struct sigc::internal::trackable_callback_list' changed, as reported earlier
|
||||
|
||||
[C] 'method void sigc::signal_base::block(bool)' has some indirect sub-type changes:
|
||||
implicit parameter 0 of type 'sigc::signal_base*' has sub-type changes:
|
||||
in pointed to type 'struct sigc::signal_base':
|
||||
@ -301,110 +281,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
|
||||
implicit parameter 0 of type 'sigc::signal_base*' has sub-type changes:
|
||||
pointed to type 'struct sigc::signal_base' changed, as reported earlier
|
||||
|
||||
[C] 'method void sigc::slot_base::add_destroy_notify_callback(void*)' has some indirect sub-type changes:
|
||||
implicit parameter 0 of type 'const sigc::slot_base*' has sub-type changes:
|
||||
in pointed to type 'const sigc::slot_base':
|
||||
unqualified underlying type 'class sigc::slot_base' changed, as reported earlier
|
||||
|
||||
[C] 'method bool sigc::slot_base::block(bool)' has some indirect sub-type changes:
|
||||
implicit parameter 0 of type 'sigc::slot_base*' has sub-type changes:
|
||||
pointed to type 'class sigc::slot_base' changed, as reported earlier
|
||||
|
||||
[C] 'method void sigc::slot_base::disconnect()' has some indirect sub-type changes:
|
||||
implicit parameter 0 of type 'sigc::slot_base*' has sub-type changes:
|
||||
pointed to type 'class sigc::slot_base' changed, as reported earlier
|
||||
|
||||
[C] 'method bool sigc::slot_base::operator bool()' has some indirect sub-type changes:
|
||||
implicit parameter 0 of type 'const sigc::slot_base*' has sub-type changes:
|
||||
in pointed to type 'const sigc::slot_base':
|
||||
unqualified underlying type 'class sigc::slot_base' changed, as reported earlier
|
||||
|
||||
[C] 'method sigc::slot_base& sigc::slot_base::operator=(const sigc::slot_base&)' has some indirect sub-type changes:
|
||||
return type changed:
|
||||
referenced type 'class sigc::slot_base' changed, as reported earlier
|
||||
implicit parameter 0 of type 'sigc::slot_base*' has sub-type changes:
|
||||
pointed to type 'class sigc::slot_base' changed, as reported earlier
|
||||
parameter 1 of type 'const sigc::slot_base&' has sub-type changes:
|
||||
in referenced type 'const sigc::slot_base':
|
||||
unqualified underlying type 'class sigc::slot_base' changed, as reported earlier
|
||||
|
||||
[C] 'method void sigc::slot_base::remove_destroy_notify_callback(void*)' has some indirect sub-type changes:
|
||||
implicit parameter 0 of type 'const sigc::slot_base*' has sub-type changes:
|
||||
in pointed to type 'const sigc::slot_base':
|
||||
unqualified underlying type 'class sigc::slot_base' changed, as reported earlier
|
||||
|
||||
[C] 'method void sigc::slot_base::set_parent(void*)' has some indirect sub-type changes:
|
||||
implicit parameter 0 of type 'const sigc::slot_base*' has sub-type changes:
|
||||
in pointed to type 'const sigc::slot_base':
|
||||
unqualified underlying type 'class sigc::slot_base' changed, as reported earlier
|
||||
|
||||
[C] 'method sigc::slot_base::slot_base(sigc::slot_base::rep_type*)' has some indirect sub-type changes:
|
||||
implicit parameter 0 of type 'sigc::slot_base*' has sub-type changes:
|
||||
pointed to type 'class sigc::slot_base' changed, as reported earlier
|
||||
parameter 1 of type 'sigc::slot_base::rep_type*' has sub-type changes:
|
||||
pointed to type 'typedef sigc::slot_base::rep_type' changed, as reported earlier
|
||||
|
||||
[C] 'method sigc::slot_base::slot_base()' has some indirect sub-type changes:
|
||||
implicit parameter 0 of type 'sigc::slot_base*' has sub-type changes:
|
||||
pointed to type 'class sigc::slot_base' changed, as reported earlier
|
||||
|
||||
[C] 'method sigc::slot_base::slot_base(const sigc::slot_base&)' has some indirect sub-type changes:
|
||||
implicit parameter 0 of type 'sigc::slot_base*' has sub-type changes:
|
||||
pointed to type 'class sigc::slot_base' changed, as reported earlier
|
||||
parameter 1 of type 'const sigc::slot_base&' has sub-type changes:
|
||||
in referenced type 'const sigc::slot_base':
|
||||
unqualified underlying type 'class sigc::slot_base' changed, as reported earlier
|
||||
|
||||
[C] 'method bool sigc::slot_base::unblock()' has some indirect sub-type changes:
|
||||
implicit parameter 0 of type 'sigc::slot_base*' has sub-type changes:
|
||||
pointed to type 'class sigc::slot_base' changed, as reported earlier
|
||||
|
||||
[C] 'method sigc::slot_base::~slot_base(int)' has some indirect sub-type changes:
|
||||
implicit parameter 0 of type 'sigc::slot_base*' has sub-type changes:
|
||||
pointed to type 'class sigc::slot_base' changed, as reported earlier
|
||||
|
||||
[C] 'method void sigc::trackable::add_destroy_notify_callback(void*)' has some indirect sub-type changes:
|
||||
implicit parameter 0 of type 'const sigc::trackable*' has sub-type changes:
|
||||
in pointed to type 'const sigc::trackable':
|
||||
unqualified underlying type 'struct sigc::trackable' changed, as reported earlier
|
||||
|
||||
[C] 'method sigc::internal::trackable_callback_list* sigc::trackable::callback_list()' has some indirect sub-type changes:
|
||||
return type changed:
|
||||
pointed to type 'struct sigc::internal::trackable_callback_list' changed, as reported earlier
|
||||
implicit parameter 0 of type 'const sigc::trackable*' has sub-type changes:
|
||||
in pointed to type 'const sigc::trackable':
|
||||
unqualified underlying type 'struct sigc::trackable' changed, as reported earlier
|
||||
|
||||
[C] 'method void sigc::trackable::notify_callbacks()' has some indirect sub-type changes:
|
||||
implicit parameter 0 of type 'sigc::trackable*' has sub-type changes:
|
||||
pointed to type 'struct sigc::trackable' changed, as reported earlier
|
||||
|
||||
[C] 'method sigc::trackable& sigc::trackable::operator=(const sigc::trackable&)' has some indirect sub-type changes:
|
||||
return type changed:
|
||||
referenced type 'struct sigc::trackable' changed, as reported earlier
|
||||
implicit parameter 0 of type 'sigc::trackable*' has sub-type changes:
|
||||
pointed to type 'struct sigc::trackable' changed, as reported earlier
|
||||
parameter 1 of type 'const sigc::trackable&' has sub-type changes:
|
||||
in referenced type 'const sigc::trackable':
|
||||
unqualified underlying type 'struct sigc::trackable' changed, as reported earlier
|
||||
|
||||
[C] 'method void sigc::trackable::remove_destroy_notify_callback(void*)' has some indirect sub-type changes:
|
||||
implicit parameter 0 of type 'const sigc::trackable*' has sub-type changes:
|
||||
in pointed to type 'const sigc::trackable':
|
||||
unqualified underlying type 'struct sigc::trackable' changed, as reported earlier
|
||||
|
||||
[C] 'method sigc::trackable::trackable(const sigc::trackable&)' has some indirect sub-type changes:
|
||||
implicit parameter 0 of type 'sigc::trackable*' has sub-type changes:
|
||||
pointed to type 'struct sigc::trackable' changed, as reported earlier
|
||||
parameter 1 of type 'const sigc::trackable&' has sub-type changes:
|
||||
in referenced type 'const sigc::trackable':
|
||||
unqualified underlying type 'struct sigc::trackable' changed, as reported earlier
|
||||
|
||||
[C] 'method sigc::trackable::trackable()' has some indirect sub-type changes:
|
||||
implicit parameter 0 of type 'sigc::trackable*' has sub-type changes:
|
||||
pointed to type 'struct sigc::trackable' changed, as reported earlier
|
||||
|
||||
[C] 'method sigc::trackable::~trackable(int)' has some indirect sub-type changes:
|
||||
implicit parameter 0 of type 'sigc::trackable*' has sub-type changes:
|
||||
pointed to type 'struct sigc::trackable' changed, as reported earlier
|
||||
|
||||
|
@ -1,11 +0,0 @@
|
||||
1 changed type:
|
||||
'enum E' changed:
|
||||
type size hasn't changed
|
||||
1 enumerator deletion:
|
||||
'E::e2' value '1'
|
||||
1 enumerator insertion:
|
||||
'E::e1' value '1'
|
||||
1 changed declaration:
|
||||
'function void foo(E)' was changed to 'function void foo(E)':
|
||||
parameter 1 of type 'enum E' has sub-type changes:
|
||||
enum type 'enum E' changed, as reported earlier
|
BIN
tests/data/test-alt-dwarf-file/rhbz1951526/usr/bin/gimp-2.10
Executable file
BIN
tests/data/test-alt-dwarf-file/rhbz1951526/usr/bin/gimp-2.10
Executable file
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -230,6 +230,8 @@
|
||||
<pointer-type-def type-id='type-id-20' size-in-bits='64' id='type-id-75'/>
|
||||
<!-- wchar_t** -->
|
||||
<pointer-type-def type-id='type-id-75' size-in-bits='64' id='type-id-76'/>
|
||||
<!-- struct _IO_FILE -->
|
||||
<class-decl name='_IO_FILE' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-22'/>
|
||||
<!-- class allocator<char> -->
|
||||
<class-decl name='allocator<char>' visibility='default' is-declaration-only='yes' id='type-id-40'>
|
||||
<member-type access='public'>
|
||||
@ -1195,8 +1197,6 @@
|
||||
<!-- typedef wint_t -->
|
||||
<return type-id='type-id-34'/>
|
||||
</function-decl>
|
||||
<!-- struct _IO_FILE -->
|
||||
<class-decl name='_IO_FILE' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-22'/>
|
||||
</abi-instr>
|
||||
<abi-instr address-size='64' path='test23-second-tu.cc' comp-dir-path='/home/dodji/git/libabigail/PR20369/tests/data/test-read-dwarf' language='LANG_C_plus_plus'>
|
||||
<!-- void emit(std::string&, std::string&) -->
|
||||
|
@ -381,6 +381,8 @@
|
||||
<pointer-type-def type-id='type-id-22' size-in-bits='64' id='type-id-101'/>
|
||||
<!-- wchar_t** -->
|
||||
<pointer-type-def type-id='type-id-101' size-in-bits='64' id='type-id-102'/>
|
||||
<!-- struct _IO_FILE -->
|
||||
<class-decl name='_IO_FILE' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-27'/>
|
||||
<!-- namespace std -->
|
||||
<namespace-decl name='std'>
|
||||
<!-- class std::allocator<char> -->
|
||||
@ -1247,7 +1249,5 @@
|
||||
<!-- typedef wint_t -->
|
||||
<return type-id='type-id-39'/>
|
||||
</function-decl>
|
||||
<!-- struct _IO_FILE -->
|
||||
<class-decl name='_IO_FILE' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-27'/>
|
||||
</abi-instr>
|
||||
</abi-corpus>
|
||||
|
@ -381,6 +381,8 @@
|
||||
<pointer-type-def type-id='type-id-22' size-in-bits='64' id='type-id-101'/>
|
||||
<!-- wchar_t** -->
|
||||
<pointer-type-def type-id='type-id-101' size-in-bits='64' id='type-id-102'/>
|
||||
<!-- struct _IO_FILE -->
|
||||
<class-decl name='_IO_FILE' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-27'/>
|
||||
<!-- namespace std -->
|
||||
<namespace-decl name='std'>
|
||||
<!-- class std::allocator<char> -->
|
||||
@ -1247,7 +1249,5 @@
|
||||
<!-- typedef wint_t -->
|
||||
<return type-id='type-id-39'/>
|
||||
</function-decl>
|
||||
<!-- struct _IO_FILE -->
|
||||
<class-decl name='_IO_FILE' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-27'/>
|
||||
</abi-instr>
|
||||
</abi-corpus>
|
||||
|
@ -53,25 +53,9 @@
|
||||
<enumerator name='two' value='1'/>
|
||||
</enum-decl>
|
||||
</member-type>
|
||||
<member-type access='public'>
|
||||
<!-- enum S::__anonymous_enum__1 -->
|
||||
<enum-decl name='__anonymous_enum__1' is-anonymous='yes' filepath='/home/dodji/git/libabigail/fixes/tests/data/test-annotate/test-anonymous-members-0.cc' line='20' column='1' id='type-id-12'>
|
||||
<underlying-type type-id='type-id-4'/>
|
||||
<enumerator name='three' value='0'/>
|
||||
<enumerator name='four' value='1'/>
|
||||
</enum-decl>
|
||||
</member-type>
|
||||
<member-type access='public'>
|
||||
<!-- enum S::__anonymous_enum__2 -->
|
||||
<enum-decl name='__anonymous_enum__2' is-anonymous='yes' filepath='/home/dodji/git/libabigail/fixes/tests/data/test-annotate/test-anonymous-members-0.cc' line='22' column='1' id='type-id-13'>
|
||||
<underlying-type type-id='type-id-4'/>
|
||||
<enumerator name='five' value='0'/>
|
||||
<enumerator name='six' value='1'/>
|
||||
</enum-decl>
|
||||
</member-type>
|
||||
<member-type access='public'>
|
||||
<!-- union {int a; char b;} -->
|
||||
<union-decl name='__anonymous_union__' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='/home/dodji/git/libabigail/fixes/tests/data/test-annotate/test-anonymous-members-0.cc' line='24' column='1' id='type-id-14'>
|
||||
<union-decl name='__anonymous_union__' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='/home/dodji/git/libabigail/fixes/tests/data/test-annotate/test-anonymous-members-0.cc' line='24' column='1' id='type-id-12'>
|
||||
<data-member access='public'>
|
||||
<!-- int a -->
|
||||
<var-decl name='a' type-id='type-id-3' visibility='default' filepath='/home/dodji/git/libabigail/fixes/tests/data/test-annotate/test-anonymous-members-0.cc' line='24' column='1'/>
|
||||
@ -84,7 +68,7 @@
|
||||
</member-type>
|
||||
<member-type access='public'>
|
||||
<!-- union {unsigned int c; double d;} -->
|
||||
<union-decl name='__anonymous_union__1' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='/home/dodji/git/libabigail/fixes/tests/data/test-annotate/test-anonymous-members-0.cc' line='26' column='1' id='type-id-15'>
|
||||
<union-decl name='__anonymous_union__1' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='/home/dodji/git/libabigail/fixes/tests/data/test-annotate/test-anonymous-members-0.cc' line='26' column='1' id='type-id-13'>
|
||||
<data-member access='public'>
|
||||
<!-- unsigned int c -->
|
||||
<var-decl name='c' type-id='type-id-5' visibility='default' filepath='/home/dodji/git/libabigail/fixes/tests/data/test-annotate/test-anonymous-members-0.cc' line='26' column='1'/>
|
||||
@ -113,29 +97,29 @@
|
||||
</data-member>
|
||||
<data-member access='public' layout-offset-in-bits='96'>
|
||||
<!-- S::__anonymous_enum__1 S::e2 -->
|
||||
<var-decl name='e2' type-id='type-id-12' visibility='default' filepath='/home/dodji/git/libabigail/fixes/tests/data/test-annotate/test-anonymous-members-0.cc' line='20' column='1'/>
|
||||
<var-decl name='e2' type-id='type-id-11' visibility='default' filepath='/home/dodji/git/libabigail/fixes/tests/data/test-annotate/test-anonymous-members-0.cc' line='20' column='1'/>
|
||||
</data-member>
|
||||
<data-member access='public' layout-offset-in-bits='128'>
|
||||
<!-- S::__anonymous_enum__2 S::e3 -->
|
||||
<var-decl name='e3' type-id='type-id-13' visibility='default' filepath='/home/dodji/git/libabigail/fixes/tests/data/test-annotate/test-anonymous-members-0.cc' line='22' column='1'/>
|
||||
<var-decl name='e3' type-id='type-id-11' visibility='default' filepath='/home/dodji/git/libabigail/fixes/tests/data/test-annotate/test-anonymous-members-0.cc' line='22' column='1'/>
|
||||
</data-member>
|
||||
<data-member access='public' layout-offset-in-bits='160'>
|
||||
<!-- union {int a; char b;} -->
|
||||
<var-decl name='' type-id='type-id-14' visibility='default'/>
|
||||
<var-decl name='' type-id='type-id-12' visibility='default'/>
|
||||
</data-member>
|
||||
<data-member access='public' layout-offset-in-bits='192'>
|
||||
<!-- union {unsigned int c; double d;} -->
|
||||
<var-decl name='' type-id='type-id-15' visibility='default'/>
|
||||
<var-decl name='' type-id='type-id-13' visibility='default'/>
|
||||
</data-member>
|
||||
</class-decl>
|
||||
<!-- S& -->
|
||||
<qualified-type-def type-id='type-id-16' id='type-id-17'/>
|
||||
<qualified-type-def type-id='type-id-14' id='type-id-15'/>
|
||||
<!-- S& -->
|
||||
<reference-type-def kind='lvalue' type-id='type-id-7' size-in-bits='64' id='type-id-16'/>
|
||||
<reference-type-def kind='lvalue' type-id='type-id-7' size-in-bits='64' id='type-id-14'/>
|
||||
<!-- void foo(S&) -->
|
||||
<function-decl name='foo' mangled-name='_Z3fooR1S' filepath='/home/dodji/git/libabigail/fixes/tests/data/test-annotate/test-anonymous-members-0.cc' line='30' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_Z3fooR1S'>
|
||||
<!-- parameter of type 'S&' -->
|
||||
<parameter type-id='type-id-17'/>
|
||||
<parameter type-id='type-id-15'/>
|
||||
<!-- void -->
|
||||
<return type-id='type-id-6'/>
|
||||
</function-decl>
|
||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -474,21 +474,7 @@ Variables changes summary: 0 Removed, 0 Changed, 3 Added variables
|
||||
pointed to type 'struct filter_node' changed, as being reported
|
||||
type of 'struct {op_type type; filter_node* lchild; filter_node* rchild;} op' changed:
|
||||
type size hasn't changed
|
||||
3 data member changes:
|
||||
type of 'op_type type' changed:
|
||||
type size hasn't changed
|
||||
5 enumerator deletions:
|
||||
'op_type::AST_OP_RSHIFT' value '6'
|
||||
'op_type::AST_OP_LSHIFT' value '7'
|
||||
'op_type::AST_OP_BIN_AND' value '10'
|
||||
'op_type::AST_OP_BIN_OR' value '11'
|
||||
'op_type::AST_OP_BIN_XOR' value '12'
|
||||
5 enumerator insertions:
|
||||
'op_type::AST_OP_BIT_RSHIFT' value '6'
|
||||
'op_type::AST_OP_BIT_LSHIFT' value '7'
|
||||
'op_type::AST_OP_BIT_AND' value '10'
|
||||
'op_type::AST_OP_BIT_OR' value '11'
|
||||
'op_type::AST_OP_BIT_XOR' value '12'
|
||||
2 data member changes:
|
||||
type of 'filter_node* lchild' changed:
|
||||
pointed to type 'struct filter_node' changed, as being reported
|
||||
type of 'filter_node* rchild' changed:
|
||||
@ -500,13 +486,7 @@ Variables changes summary: 0 Removed, 0 Changed, 3 Added variables
|
||||
pointed to type 'struct filter_node' changed, as being reported
|
||||
type of 'struct {unary_op_type type; filter_node* child;} unary_op' changed:
|
||||
type size hasn't changed
|
||||
2 data member changes:
|
||||
type of 'unary_op_type type' changed:
|
||||
type size hasn't changed
|
||||
1 enumerator deletion:
|
||||
'unary_op_type::AST_UNARY_BIN_NOT' value '4'
|
||||
1 enumerator insertion:
|
||||
'unary_op_type::AST_UNARY_BIT_NOT' value '4'
|
||||
1 data member change:
|
||||
type of 'filter_node* child' changed:
|
||||
pointed to type 'struct filter_node' changed, as being reported
|
||||
'cds_list_head allocated_nodes' offset changed from 576 to 640 (in bits) (by +64 bits)
|
||||
|
@ -1,12 +0,0 @@
|
||||
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 void foo(S0&)' has some indirect sub-type changes:
|
||||
parameter 1 of type 'S0&' has sub-type changes:
|
||||
in referenced type 'struct S0':
|
||||
type size hasn't changed
|
||||
1 data member change:
|
||||
name of 'S0::m2' changed to 'S0::m12'
|
||||
|
@ -1,4 +1,4 @@
|
||||
Functions changes summary: 0 Removed, 11 Changed (200 filtered out), 13 Added functions
|
||||
Functions changes summary: 0 Removed, 9 Changed (63 filtered out), 13 Added functions
|
||||
Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
|
||||
Function symbols changes summary: 0 Removed, 0 Added function symbol not referenced by debug info
|
||||
Variable symbols changes summary: 0 Removed, 6 Added variable symbols not referenced by debug info
|
||||
@ -25,7 +25,7 @@ Variable symbols changes summary: 0 Removed, 6 Added variable symbols not refere
|
||||
[A] 'function std::unexpected_handler std::get_unexpected()'
|
||||
[A] 'method std::regex_error::regex_error(std::regex_constants::error_type)'
|
||||
|
||||
11 functions with some indirect sub-type change:
|
||||
9 functions with some indirect sub-type change:
|
||||
|
||||
[C] 'function __cxxabiv1::__cxa_dependent_exception* __cxxabiv1::__cxa_allocate_dependent_exception()' has some indirect sub-type changes:
|
||||
return type changed:
|
||||
@ -44,7 +44,6 @@ Variable symbols changes summary: 0 Removed, 6 Added variable symbols not refere
|
||||
[C] 'method virtual std::__future_base::_Async_state_common::~_Async_state_common(int)' has some indirect sub-type changes:
|
||||
implicit parameter 0 of type 'std::__future_base::_Async_state_common*' has sub-type changes:
|
||||
in pointed to type 'class std::__future_base::_Async_state_common':
|
||||
type size hasn't changed
|
||||
1 base class change:
|
||||
'class std::__future_base::_State_base' changed:
|
||||
type size hasn't changed
|
||||
@ -78,24 +77,6 @@ Variable symbols changes summary: 0 Removed, 6 Added variable symbols not refere
|
||||
1 enumerator deletion:
|
||||
'std::regex_constants::error_type::_S_error_last' value '13'
|
||||
|
||||
[C] 'method void std::basic_filebuf<wchar_t, std::char_traits<wchar_t> >::_M_allocate_internal_buffer()' has some indirect sub-type changes:
|
||||
implicit parameter 0 of type 'std::basic_filebuf<wchar_t, std::char_traits<wchar_t> >* const' has sub-type changes:
|
||||
in unqualified underlying type 'std::basic_filebuf<wchar_t, std::char_traits<wchar_t> >*':
|
||||
in pointed to type 'class std::basic_filebuf<wchar_t, std::char_traits<wchar_t> >':
|
||||
type size hasn't changed
|
||||
no member function changes (14 filtered);
|
||||
1 data member change:
|
||||
type of 'const std::basic_filebuf<wchar_t, std::char_traits<wchar_t> >::__codecvt_type* _M_codecvt' changed:
|
||||
in pointed to type 'const std::basic_filebuf<wchar_t, std::char_traits<wchar_t> >::__codecvt_type':
|
||||
in unqualified underlying type 'typedef std::basic_filebuf<wchar_t, std::char_traits<wchar_t> >::__codecvt_type':
|
||||
underlying type 'class std::codecvt<wchar_t, char, __mbstate_t>' changed:
|
||||
type size hasn't changed
|
||||
no base class change (1 filtered);
|
||||
2 member function insertions:
|
||||
'method virtual std::codecvt_base::result std::codecvt<wchar_t, char, __mbstate_t>::do_in(std::codecvt<wchar_t, char, __mbstate_t>::state_type&, const std::codecvt<wchar_t, char, __mbstate_t>::extern_type*, const std::codecvt<wchar_t, char, __mbstate_t>::extern_type*, const std::codecvt<wchar_t, char, __mbstate_t>::extern_type*&, std::codecvt<wchar_t, char, __mbstate_t>::intern_type*, std::codecvt<wchar_t, char, __mbstate_t>::intern_type*, std::codecvt<wchar_t, char, __mbstate_t>::intern_type*&) const', virtual at voffset 4/8
|
||||
'method virtual std::codecvt_base::result std::codecvt<wchar_t, char, __mbstate_t>::do_out(std::codecvt<wchar_t, char, __mbstate_t>::state_type&, const std::codecvt<wchar_t, char, __mbstate_t>::intern_type*, const std::codecvt<wchar_t, char, __mbstate_t>::intern_type*, const std::codecvt<wchar_t, char, __mbstate_t>::intern_type*&, std::codecvt<wchar_t, char, __mbstate_t>::extern_type*, std::codecvt<wchar_t, char, __mbstate_t>::extern_type*, std::codecvt<wchar_t, char, __mbstate_t>::extern_type*&) const', virtual at voffset 2/8
|
||||
no member function changes (10 filtered);
|
||||
|
||||
[C] 'method void* std::basic_fstream<char, std::char_traits<char> >::close(int, void**)' has some indirect sub-type changes:
|
||||
return type changed:
|
||||
entity changed from 'void*' to 'void'
|
||||
@ -138,17 +119,6 @@ Variable symbols changes summary: 0 Removed, 6 Added variable symbols not refere
|
||||
parameter 1 of type 'int' was removed
|
||||
parameter 2 of type 'void**' was removed
|
||||
|
||||
[C] 'method std::codecvt_byname<wchar_t, char, __mbstate_t>* std::codecvt_byname<wchar_t, char, __mbstate_t>::codecvt_byname(const char*, std::size_t)' has some indirect sub-type changes:
|
||||
Please note that the symbol of this function is _ZNSt14codecvt_bynameIwc11__mbstate_tEC2EPKcj@@GLIBCXX_3.4
|
||||
and it aliases symbol: _ZNSt14codecvt_bynameIwc11__mbstate_tEC1EPKcj@@GLIBCXX_3.4
|
||||
implicit parameter 0 of type 'std::codecvt_byname<wchar_t, char, __mbstate_t>*' has sub-type changes:
|
||||
in pointed to type 'class std::codecvt_byname<wchar_t, char, __mbstate_t>':
|
||||
type size hasn't changed
|
||||
1 base class change:
|
||||
'class std::codecvt<wchar_t, char, __mbstate_t>' changed:
|
||||
details were reported earlier
|
||||
no member function changes (3 filtered);
|
||||
|
||||
6 Added variable symbols not referenced by debug info:
|
||||
|
||||
[A] _ZTISt16bad_array_length@@CXXABI_1.3.8
|
||||
|
@ -1,4 +1,4 @@
|
||||
Functions changes summary: 0 Removed, 11 Changed (200 filtered out), 13 Added functions
|
||||
Functions changes summary: 0 Removed, 9 Changed (63 filtered out), 13 Added functions
|
||||
Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
|
||||
Function symbols changes summary: 0 Removed, 0 Added function symbol not referenced by debug info
|
||||
Variable symbols changes summary: 0 Removed, 6 Added variable symbols not referenced by debug info
|
||||
@ -25,7 +25,7 @@ Variable symbols changes summary: 0 Removed, 6 Added variable symbols not refere
|
||||
[A] 'function std::unexpected_handler std::get_unexpected()'
|
||||
[A] 'method std::regex_error::regex_error(std::regex_constants::error_type)'
|
||||
|
||||
11 functions with some indirect sub-type change:
|
||||
9 functions with some indirect sub-type change:
|
||||
|
||||
[C] 'function __cxxabiv1::__cxa_dependent_exception* __cxxabiv1::__cxa_allocate_dependent_exception()' at eh_alloc.cc:158:1 has some indirect sub-type changes:
|
||||
return type changed:
|
||||
@ -44,7 +44,6 @@ Variable symbols changes summary: 0 Removed, 6 Added variable symbols not refere
|
||||
[C] 'method virtual std::__future_base::_Async_state_common::~_Async_state_common(int)' at compatibility-thread-c++0x.cc:117:1 has some indirect sub-type changes:
|
||||
implicit parameter 0 of type 'std::__future_base::_Async_state_common*' has sub-type changes:
|
||||
in pointed to type 'class std::__future_base::_Async_state_common' at compatibility-thread-c++0x.cc:106:1:
|
||||
type size hasn't changed
|
||||
1 base class change:
|
||||
'class std::__future_base::_State_base' at future:306:1 changed:
|
||||
type size hasn't changed
|
||||
@ -78,24 +77,6 @@ Variable symbols changes summary: 0 Removed, 6 Added variable symbols not refere
|
||||
1 enumerator deletion:
|
||||
'std::regex_constants::error_type::_S_error_last' value '13'
|
||||
|
||||
[C] 'method void std::basic_filebuf<wchar_t, std::char_traits<wchar_t> >::_M_allocate_internal_buffer()' at fstream.tcc:47:1 has some indirect sub-type changes:
|
||||
implicit parameter 0 of type 'std::basic_filebuf<wchar_t, std::char_traits<wchar_t> >* const' has sub-type changes:
|
||||
in unqualified underlying type 'std::basic_filebuf<wchar_t, std::char_traits<wchar_t> >*':
|
||||
in pointed to type 'class std::basic_filebuf<wchar_t, std::char_traits<wchar_t> >' at fstream:72:1:
|
||||
type size hasn't changed
|
||||
no member function changes (14 filtered);
|
||||
1 data member change:
|
||||
type of 'const std::basic_filebuf<wchar_t, std::char_traits<wchar_t> >::__codecvt_type* _M_codecvt' changed:
|
||||
in pointed to type 'const std::basic_filebuf<wchar_t, std::char_traits<wchar_t> >::__codecvt_type':
|
||||
in unqualified underlying type 'typedef std::basic_filebuf<wchar_t, std::char_traits<wchar_t> >::__codecvt_type' at fstream:86:1:
|
||||
underlying type 'class std::codecvt<wchar_t, char, __mbstate_t>' at codecvt.h:398:1 changed:
|
||||
type size hasn't changed
|
||||
no base class change (1 filtered);
|
||||
2 member function insertions:
|
||||
'method virtual std::codecvt_base::result std::codecvt<wchar_t, char, __mbstate_t>::do_in(std::codecvt<wchar_t, char, __mbstate_t>::state_type&, const std::codecvt<wchar_t, char, __mbstate_t>::extern_type*, const std::codecvt<wchar_t, char, __mbstate_t>::extern_type*, const std::codecvt<wchar_t, char, __mbstate_t>::extern_type*&, std::codecvt<wchar_t, char, __mbstate_t>::intern_type*, std::codecvt<wchar_t, char, __mbstate_t>::intern_type*, std::codecvt<wchar_t, char, __mbstate_t>::intern_type*&) const' at codecvt_members.cc:118:1, virtual at voffset 4/8
|
||||
'method virtual std::codecvt_base::result std::codecvt<wchar_t, char, __mbstate_t>::do_out(std::codecvt<wchar_t, char, __mbstate_t>::state_type&, const std::codecvt<wchar_t, char, __mbstate_t>::intern_type*, const std::codecvt<wchar_t, char, __mbstate_t>::intern_type*, const std::codecvt<wchar_t, char, __mbstate_t>::intern_type*&, std::codecvt<wchar_t, char, __mbstate_t>::extern_type*, std::codecvt<wchar_t, char, __mbstate_t>::extern_type*, std::codecvt<wchar_t, char, __mbstate_t>::extern_type*&) const' at codecvt_members.cc:43:1, virtual at voffset 2/8
|
||||
no member function changes (10 filtered);
|
||||
|
||||
[C] 'method void* std::basic_fstream<char, std::char_traits<char> >::close(int, void**)' at fstream:929:1 has some indirect sub-type changes:
|
||||
return type changed:
|
||||
entity changed from 'void*' to 'void'
|
||||
@ -138,17 +119,6 @@ Variable symbols changes summary: 0 Removed, 6 Added variable symbols not refere
|
||||
parameter 1 of type 'int' was removed
|
||||
parameter 2 of type 'void**' was removed
|
||||
|
||||
[C] 'method std::codecvt_byname<wchar_t, char, __mbstate_t>* std::codecvt_byname<wchar_t, char, __mbstate_t>::codecvt_byname(const char*, std::size_t)' at codecvt.h:462:1 has some indirect sub-type changes:
|
||||
Please note that the symbol of this function is _ZNSt14codecvt_bynameIwc11__mbstate_tEC2EPKcj@@GLIBCXX_3.4
|
||||
and it aliases symbol: _ZNSt14codecvt_bynameIwc11__mbstate_tEC1EPKcj@@GLIBCXX_3.4
|
||||
implicit parameter 0 of type 'std::codecvt_byname<wchar_t, char, __mbstate_t>*' has sub-type changes:
|
||||
in pointed to type 'class std::codecvt_byname<wchar_t, char, __mbstate_t>' at codecvt.h:458:1:
|
||||
type size hasn't changed
|
||||
1 base class change:
|
||||
'class std::codecvt<wchar_t, char, __mbstate_t>' at codecvt.h:398:1 changed:
|
||||
details were reported earlier
|
||||
no member function changes (3 filtered);
|
||||
|
||||
6 Added variable symbols not referenced by debug info:
|
||||
|
||||
[A] _ZTISt16bad_array_length@@CXXABI_1.3.8
|
||||
|
@ -1,3 +0,0 @@
|
||||
Functions changes summary: 0 Removed, 0 Changed (1 filtered out), 0 Added function
|
||||
Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
|
||||
|
@ -621,7 +621,7 @@
|
||||
in pointed to type 'typedef SpiceServer' at spice-server.h:38:1:
|
||||
underlying type 'struct RedsState' at reds-private.h:127:1 changed:
|
||||
type size hasn't changed
|
||||
5 data member changes (1 filtered):
|
||||
6 data member changes:
|
||||
type of 'SpiceWatch* listen_watch' changed:
|
||||
pointed to type 'typedef SpiceWatch' changed at spice.h:61:1, as reported earlier
|
||||
type of 'SpiceWatch* secure_listen_watch' changed:
|
||||
@ -629,7 +629,7 @@
|
||||
type of 'VDIPortState agent_state' changed:
|
||||
underlying type 'struct VDIPortState' at reds-private.h:46:1 changed:
|
||||
type size hasn't changed
|
||||
2 data member changes (3 filtered):
|
||||
5 data member changes:
|
||||
type of 'SpiceCharDeviceState* base' changed:
|
||||
in pointed to type 'typedef SpiceCharDeviceState' at spice-char.h:34:1:
|
||||
underlying type 'struct SpiceCharDeviceState' at char_device.c:47:1 changed:
|
||||
@ -794,7 +794,7 @@
|
||||
in pointed to type 'typedef SndChannel' at snd_worker.c:74:1:
|
||||
underlying type 'struct SndChannel' at snd_worker.c:89:1 changed:
|
||||
type size hasn't changed
|
||||
6 data member changes (1 filtered):
|
||||
7 data member changes:
|
||||
type of 'RedsStream* stream' changed:
|
||||
pointed to type 'typedef RedsStream' changed at red_channel.h:134:1, as reported earlier
|
||||
type of 'SndWorker* worker' changed:
|
||||
|
@ -1,6 +1,6 @@
|
||||
================ changes of 'libspice-server.so.1.8.0'===============
|
||||
Leaf changes summary: 10 artifacts changed (13 filtered out)
|
||||
Changed leaf types summary: 1 (13 filtered out) leaf types changed
|
||||
Leaf changes summary: 10 artifacts changed (10 filtered out)
|
||||
Changed leaf types summary: 1 (10 filtered out) leaf types changed
|
||||
Removed/Changed/Added functions summary: 1 Removed, 0 Changed, 8 Added functions
|
||||
Removed/Changed/Added variables summary: 0 Removed, 0 Changed, 0 Added variable
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
================ changes of 'libtbb.so.2'===============
|
||||
Functions changes summary: 0 Removed, 18 Changed (92 filtered out), 17 Added functions
|
||||
Functions changes summary: 0 Removed, 18 Changed (101 filtered out), 17 Added functions
|
||||
Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
|
||||
Function symbols changes summary: 0 Removed, 0 Added function symbol not referenced by debug info
|
||||
Variable symbols changes summary: 3 Removed, 0 Added variable symbols not referenced by debug info
|
||||
@ -57,117 +57,11 @@
|
||||
type size hasn't changed
|
||||
1 data member insertion:
|
||||
'tbb::internal::cpu_ctl_env_space my_cpu_ctl_env', at offset 896 (in bits) at task.h:380:1
|
||||
2 data member changes (1 filtered):
|
||||
1 data member changes (1 filtered):
|
||||
type of 'char _leading_padding[80]' changed:
|
||||
type name changed from 'char[80]' to 'char[72]'
|
||||
array type size changed from 640 to 576
|
||||
array type subrange 1 changed length from 80 to 72
|
||||
type of 'tbb::internal::generic_scheduler* my_owner' changed:
|
||||
in pointed to type 'class tbb::internal::generic_scheduler' at scheduler.h:110:1:
|
||||
type size changed from 3136 to 3072 (in bits)
|
||||
1 base class change:
|
||||
'struct tbb::internal::scheduler_state' at scheduler.h:73:1 changed:
|
||||
type size changed from 576 to 704 (in bits)
|
||||
2 data member insertions:
|
||||
'volatile intptr_t* my_ref_top_priority', at offset 576 (in bits) at scheduler.h:96:1
|
||||
'volatile uintptr_t* my_ref_reload_epoch', at offset 640 (in bits) at scheduler.h:99:1
|
||||
2 data member changes (1 filtered):
|
||||
type of 'tbb::internal::arena* my_arena' changed:
|
||||
in pointed to type 'class tbb::internal::arena' at arena.h:160:1:
|
||||
type size hasn't changed
|
||||
1 base class deletion:
|
||||
struct tbb::internal::padded<tbb::internal::arena_base> at tbb_stddef.h:261:1
|
||||
1 base class insertion:
|
||||
struct tbb::internal::padded<tbb::internal::arena_base, 128ul> at tbb_stddef.h:251:1
|
||||
1 data member change:
|
||||
type of 'tbb::internal::arena_slot my_slots[1]' changed:
|
||||
array element type 'struct tbb::internal::arena_slot' changed:
|
||||
type size hasn't changed
|
||||
2 base class deletions:
|
||||
struct tbb::internal::padded<tbb::internal::arena_slot_line1> at tbb_stddef.h:261:1
|
||||
struct tbb::internal::padded<tbb::internal::arena_slot_line2> at tbb_stddef.h:261:1
|
||||
2 base class insertions:
|
||||
struct tbb::internal::padded<tbb::internal::arena_slot_line1, 128ul> at tbb_stddef.h:251:1
|
||||
struct tbb::internal::padded<tbb::internal::arena_slot_line2, 128ul> at tbb_stddef.h:251:1
|
||||
type size hasn't changed
|
||||
type of 'tbb::internal::mail_inbox my_inbox' changed:
|
||||
type size hasn't changed
|
||||
1 data member change:
|
||||
type of 'tbb::internal::mail_outbox* my_putter' changed:
|
||||
in pointed to type 'class tbb::internal::mail_outbox' at mailbox.h:103:1:
|
||||
type size hasn't changed
|
||||
1 base class deletion:
|
||||
class tbb::internal::unpadded_mail_outbox at mailbox.h:97:1
|
||||
1 base class insertion:
|
||||
struct tbb::internal::padded<tbb::internal::unpadded_mail_outbox, 128ul> at tbb_stddef.h:251:1
|
||||
1 data member deletion:
|
||||
'char pad[104]', at offset 136 (in bits) at mailbox.h:114:1
|
||||
1 member function deletion:
|
||||
'method virtual tbb::task* tbb::internal::generic_scheduler::receive_or_steal_task(tbb::internal::reference_count&, bool)' at scheduler.h:391:1, virtual at voffset 7/7
|
||||
1 member function insertion:
|
||||
'method virtual tbb::task* tbb::internal::generic_scheduler::receive_or_steal_task(tbb::internal::reference_count&)' at scheduler.h:362:1, virtual at voffset 7/7
|
||||
no member function changes (4 filtered);
|
||||
3 data member deletions:
|
||||
'unsigned int hint_for_push', at offset 896 (in bits) at scheduler.h:171:1
|
||||
'volatile intptr_t* my_ref_top_priority', at offset 2560 (in bits) at scheduler.h:433:1
|
||||
'volatile uintptr_t* my_ref_reload_epoch', at offset 2752 (in bits) at scheduler.h:443:1
|
||||
18 data member changes:
|
||||
'uintptr_t my_stealing_threshold' offset changed from 704 to 832 (in bits) (by +128 bits)
|
||||
type of 'tbb::internal::market* my_market' changed:
|
||||
in pointed to type 'class tbb::internal::market' at market.h:49:1:
|
||||
type size changed from 1664 to 1728 (in bits)
|
||||
no member function changes (8 filtered);
|
||||
1 data member insertion:
|
||||
'bool join_workers', at offset 384 (in bits) at market.h:88:1
|
||||
7 data member changes:
|
||||
type of 'tbb::internal::market::arenas_list_mutex_type my_arenas_list_mutex' changed:
|
||||
underlying type 'typedef tbb::internal::scheduler_mutex_type' at scheduler_common.h:123:1 changed:
|
||||
typedef name changed from tbb::internal::scheduler_mutex_type to tbb::spin_rw_mutex at spin_rw_mutex.h:38:1
|
||||
underlying type 'class tbb::spin_mutex' at spin_mutex.h:47:1 changed:
|
||||
type name changed from 'tbb::spin_mutex' to 'tbb::spin_rw_mutex_v3'
|
||||
type size changed from 8 to 64 (in bits)
|
||||
1 base class insertion:
|
||||
class tbb::internal::mutex_copy_deprecated_and_disabled at tbb_stddef.h:334:1
|
||||
1 data member change:
|
||||
type of '__TBB_atomic_flag flag' changed:
|
||||
typedef name changed from __TBB_atomic_flag to tbb::spin_rw_mutex_v3::state_t at spin_rw_mutex.h:214:1
|
||||
underlying type 'typedef __TBB_Flag' at tbb_machine.h:875:1 changed:
|
||||
typedef name changed from __TBB_Flag to intptr_t at stdint.h:119:1
|
||||
underlying type 'unsigned char' changed:
|
||||
type name changed from 'unsigned char' to 'long int'
|
||||
type size changed from 8 to 64 (in bits)
|
||||
and name of 'tbb::spin_mutex::flag' changed to 'tbb::spin_rw_mutex_v3::state' at spin_rw_mutex.h:224:1
|
||||
'intptr_t my_global_top_priority' offset changed from 384 to 448 (in bits) (by +64 bits)
|
||||
'intptr_t my_global_bottom_priority' offset changed from 448 to 512 (in bits) (by +64 bits)
|
||||
'uintptr_t my_global_reload_epoch' offset changed from 512 to 576 (in bits) (by +64 bits)
|
||||
type of 'tbb::internal::market::priority_level_info my_priority_levels[3]' changed:
|
||||
array element type 'struct tbb::internal::market::priority_level_info' changed:
|
||||
type size hasn't changed
|
||||
1 data member change:
|
||||
type of 'tbb::internal::intrusive_list_base<tbb::internal::intrusive_list<tbb::internal::arena>, tbb::internal::arena>::iterator next_arena' changed:
|
||||
entity changed from 'class tbb::internal::intrusive_list_base<tbb::internal::intrusive_list<tbb::internal::arena>, tbb::internal::arena>::iterator' to 'tbb::internal::arena*'
|
||||
type size hasn't changed
|
||||
type size hasn't changed
|
||||
and offset changed from 576 to 640 (in bits) (by +64 bits)
|
||||
'uintptr_t my_arenas_aba_epoch' offset changed from 1536 to 1600 (in bits) (by +64 bits)
|
||||
'tbb::internal::generic_scheduler* my_workers[1]' offset changed from 1600 to 1664 (in bits) (by +64 bits)
|
||||
and offset changed from 768 to 896 (in bits) (by +128 bits)
|
||||
'tbb::internal::FastRandom my_random' offset changed from 832 to 960 (in bits) (by +128 bits)
|
||||
'tbb::task* my_free_list' offset changed from 960 to 1024 (in bits) (by +64 bits)
|
||||
'tbb::task* my_dummy_task' offset changed from 1024 to 1088 (in bits) (by +64 bits)
|
||||
'long int my_ref_count' offset changed from 1088 to 1152 (in bits) (by +64 bits)
|
||||
'bool my_auto_initialized' offset changed from 1152 to 1216 (in bits) (by +64 bits)
|
||||
'intptr_t my_small_task_count' offset changed from 1216 to 1280 (in bits) (by +64 bits)
|
||||
'tbb::task* my_return_list' offset changed from 1280 to 1344 (in bits) (by +64 bits)
|
||||
'char _padding1[112]' offset changed from 1344 to 1408 (in bits) (by +64 bits)
|
||||
'tbb::internal::context_list_node_t my_context_list_head' offset changed from 2240 to 2304 (in bits) (by +64 bits)
|
||||
'tbb::spin_mutex my_context_list_mutex' offset changed from 2368 to 2432 (in bits) (by +64 bits)
|
||||
'uintptr_t my_context_state_propagation_epoch' offset changed from 2432 to 2496 (in bits) (by +64 bits)
|
||||
'tbb::atomic<long unsigned int> my_local_ctx_list_update' offset changed from 2496 to 2560 (in bits) (by +64 bits)
|
||||
'uintptr_t my_local_reload_epoch' offset changed from 2816 to 2752 (in bits) (by -64 bits)
|
||||
'volatile bool my_pool_reshuffling_pending' offset changed from 2880 to 2816 (in bits) (by -64 bits)
|
||||
'tbb::atomic<long unsigned int> my_nonlocal_ctx_list_update' offset changed from 2944 to 2880 (in bits) (by -64 bits)
|
||||
'__cilk_tbb_unwatch_thunk my_cilk_unwatch_thunk' offset changed from 3008 to 2944 (in bits) (by -64 bits)
|
||||
|
||||
[C] 'method void tbb::internal::concurrent_queue_base::internal_pop(void*)' at concurrent_queue_v2.cpp:240:1 has some indirect sub-type changes:
|
||||
implicit parameter 0 of type 'tbb::internal::concurrent_queue_base* const' has sub-type changes:
|
||||
|
@ -1,5 +1,5 @@
|
||||
================ changes of 'libtbb.so.2'===============
|
||||
Functions changes summary: 0 Removed, 16 Changed (94 filtered out), 17 Added functions
|
||||
Functions changes summary: 0 Removed, 16 Changed (103 filtered out), 17 Added functions
|
||||
Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
|
||||
Function symbols changes summary: 0 Removed, 0 Added function symbol not referenced by debug info
|
||||
Variable symbols changes summary: 3 Removed, 0 Added variable symbols not referenced by debug info
|
||||
@ -38,7 +38,7 @@
|
||||
type size hasn't changed
|
||||
1 data member insertion:
|
||||
'tbb::internal::cpu_ctl_env_space my_cpu_ctl_env', at offset 896 (in bits) at task.h:380:1
|
||||
1 data member changes (2 filtered):
|
||||
1 data member changes (1 filtered):
|
||||
type of 'char _leading_padding[80]' changed:
|
||||
type name changed from 'char[80]' to 'char[72]'
|
||||
array type size changed from 640 to 576
|
||||
|
@ -421,6 +421,10 @@
|
||||
<qualified-type-def type-id='type-id-246' restrict='yes' id='type-id-247'/>
|
||||
<pointer-type-def type-id='type-id-246' size-in-bits='64' id='type-id-248'/>
|
||||
<qualified-type-def type-id='type-id-248' restrict='yes' id='type-id-249'/>
|
||||
<class-decl name='_IO_FILE' size-in-bits='1728' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-25'/>
|
||||
<class-decl name='lconv' size-in-bits='768' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-233'/>
|
||||
<class-decl name='__anonymous_struct__2' size-in-bits='128' is-struct='yes' is-anonymous='yes' naming-typedef-id='type-id-22' visibility='default' is-declaration-only='yes' id='type-id-21'/>
|
||||
<class-decl name='__anonymous_struct__3' size-in-bits='64' is-struct='yes' is-anonymous='yes' naming-typedef-id='type-id-30' visibility='default' is-declaration-only='yes' id='type-id-29'/>
|
||||
<namespace-decl name='std'>
|
||||
<enum-decl name='_Ios_Openmode' filepath='/usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/c++/5.4.0/bits/ios_base.h' line='111' column='1' id='type-id-250'>
|
||||
<underlying-type type-id='type-id-16'/>
|
||||
@ -3492,17 +3496,6 @@
|
||||
</namespace-decl>
|
||||
</namespace-decl>
|
||||
</namespace-decl>
|
||||
<pointer-type-def type-id='type-id-285' size-in-bits='64' id='type-id-286'/>
|
||||
<pointer-type-def type-id='type-id-299' size-in-bits='64' id='type-id-305'/>
|
||||
<pointer-type-def type-id='type-id-307' size-in-bits='64' id='type-id-308'/>
|
||||
<class-decl name='_IO_FILE' size-in-bits='1728' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-25'/>
|
||||
<class-decl name='lconv' size-in-bits='768' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-233'/>
|
||||
<class-decl name='__anonymous_struct__2' size-in-bits='128' is-struct='yes' is-anonymous='yes' naming-typedef-id='type-id-22' visibility='default' is-declaration-only='yes' id='type-id-21'/>
|
||||
<class-decl name='__anonymous_struct__3' size-in-bits='64' is-struct='yes' is-anonymous='yes' naming-typedef-id='type-id-30' visibility='default' is-declaration-only='yes' id='type-id-29'/>
|
||||
<reference-type-def kind='lvalue' type-id='type-id-311' size-in-bits='64' id='type-id-287'/>
|
||||
<reference-type-def kind='lvalue' type-id='type-id-312' size-in-bits='64' id='type-id-306'/>
|
||||
<qualified-type-def type-id='type-id-301' const='yes' id='type-id-304'/>
|
||||
<reference-type-def kind='lvalue' type-id='type-id-313' size-in-bits='64' id='type-id-309'/>
|
||||
<function-type size-in-bits='64' id='type-id-231'>
|
||||
<parameter type-id='type-id-8'/>
|
||||
<parameter type-id='type-id-8'/>
|
||||
@ -3511,23 +3504,20 @@
|
||||
<function-type size-in-bits='64' id='type-id-243'>
|
||||
<return type-id='type-id-19'/>
|
||||
</function-type>
|
||||
<qualified-type-def type-id='type-id-285' const='yes' id='type-id-311'/>
|
||||
<qualified-type-def type-id='type-id-299' const='yes' id='type-id-312'/>
|
||||
<qualified-type-def type-id='type-id-307' const='yes' id='type-id-313'/>
|
||||
</abi-instr>
|
||||
<abi-instr address-size='64' path='src/third_party/boost-1.60.0/libs/iostreams/src/mapped_file.cpp' comp-dir-path='/home/andrew/Documents/10gen/dev/src/mongodb' language='LANG_C_plus_plus'>
|
||||
<reference-type-def kind='lvalue' type-id='type-id-285' size-in-bits='64' id='type-id-314'/>
|
||||
<reference-type-def kind='lvalue' type-id='type-id-285' size-in-bits='64' id='type-id-311'/>
|
||||
<pointer-type-def type-id='type-id-285' size-in-bits='64' id='type-id-286'/>
|
||||
<pointer-type-def type-id='type-id-299' size-in-bits='64' id='type-id-305'/>
|
||||
<pointer-type-def type-id='type-id-307' size-in-bits='64' id='type-id-308'/>
|
||||
<reference-type-def kind='lvalue' type-id='type-id-108' size-in-bits='64' id='type-id-315'/>
|
||||
<qualified-type-def type-id='type-id-285' const='yes' id='type-id-311'/>
|
||||
<reference-type-def kind='lvalue' type-id='type-id-311' size-in-bits='64' id='type-id-287'/>
|
||||
<qualified-type-def type-id='type-id-299' const='yes' id='type-id-312'/>
|
||||
<reference-type-def kind='lvalue' type-id='type-id-312' size-in-bits='64' id='type-id-306'/>
|
||||
<pointer-type-def type-id='type-id-312' size-in-bits='64' id='type-id-316'/>
|
||||
<reference-type-def kind='lvalue' type-id='type-id-108' size-in-bits='64' id='type-id-312'/>
|
||||
<qualified-type-def type-id='type-id-285' const='yes' id='type-id-313'/>
|
||||
<reference-type-def kind='lvalue' type-id='type-id-313' size-in-bits='64' id='type-id-287'/>
|
||||
<qualified-type-def type-id='type-id-299' const='yes' id='type-id-314'/>
|
||||
<reference-type-def kind='lvalue' type-id='type-id-314' size-in-bits='64' id='type-id-306'/>
|
||||
<pointer-type-def type-id='type-id-314' size-in-bits='64' id='type-id-315'/>
|
||||
<qualified-type-def type-id='type-id-301' const='yes' id='type-id-304'/>
|
||||
<qualified-type-def type-id='type-id-307' const='yes' id='type-id-313'/>
|
||||
<reference-type-def kind='lvalue' type-id='type-id-313' size-in-bits='64' id='type-id-309'/>
|
||||
<qualified-type-def type-id='type-id-307' const='yes' id='type-id-316'/>
|
||||
<reference-type-def kind='lvalue' type-id='type-id-316' size-in-bits='64' id='type-id-309'/>
|
||||
</abi-instr>
|
||||
</abi-corpus>
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -9908,6 +9908,103 @@
|
||||
<pointer-type-def type-id='type-id-134' size-in-bits='64' id='type-id-275'/>
|
||||
<pointer-type-def type-id='type-id-135' size-in-bits='64' id='type-id-1554'/>
|
||||
<pointer-type-def type-id='type-id-137' size-in-bits='64' id='type-id-1144'/>
|
||||
<class-decl name='anon_vma' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-41'/>
|
||||
<class-decl name='assoc_array_ptr' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-42'/>
|
||||
<class-decl name='audit_context' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-43'/>
|
||||
<class-decl name='autogroup' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-44'/>
|
||||
<class-decl name='backing_dev_info' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-45'/>
|
||||
<class-decl name='bdi_writeback' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-46'/>
|
||||
<class-decl name='bio_list' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-47'/>
|
||||
<class-decl name='blk_plug' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-48'/>
|
||||
<class-decl name='capture_control' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-49'/>
|
||||
<class-decl name='cdev' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-50'/>
|
||||
<class-decl name='cfs_rq' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-51'/>
|
||||
<class-decl name='cgroup_namespace' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-52'/>
|
||||
<class-decl name='cma' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-53'/>
|
||||
<class-decl name='compat_robust_list_head' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-54'/>
|
||||
<class-decl name='css_set' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-55'/>
|
||||
<class-decl name='dev_pin_info' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-56'/>
|
||||
<class-decl name='dev_pm_qos' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-57'/>
|
||||
<class-decl name='device_private' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-58'/>
|
||||
<class-decl name='dma_coherent_mem' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-59'/>
|
||||
<class-decl name='driver_private' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-60'/>
|
||||
<class-decl name='export_operations' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-61'/>
|
||||
<class-decl name='files_struct' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-62'/>
|
||||
<class-decl name='fs_context' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-63'/>
|
||||
<class-decl name='fs_parameter_description' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-64'/>
|
||||
<class-decl name='fs_struct' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-65'/>
|
||||
<class-decl name='fscrypt_info' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-66'/>
|
||||
<class-decl name='fscrypt_operations' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-67'/>
|
||||
<class-decl name='fsnotify_mark_connector' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-68'/>
|
||||
<class-decl name='ftrace_ret_stack' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-69'/>
|
||||
<class-decl name='futex_pi_state' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-70'/>
|
||||
<class-decl name='gendisk' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-71'/>
|
||||
<class-decl name='hd_struct' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-72'/>
|
||||
<class-decl name='iommu_fwspec' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-73'/>
|
||||
<class-decl name='iommu_group' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-74'/>
|
||||
<class-decl name='iommu_ops' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-75'/>
|
||||
<class-decl name='iommu_param' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-76'/>
|
||||
<class-decl name='iov_iter' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-77'/>
|
||||
<class-decl name='ipc_namespace' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-78'/>
|
||||
<class-decl name='irq_domain' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-79'/>
|
||||
<class-decl name='kernfs_iattrs' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-80'/>
|
||||
<class-decl name='kernfs_open_node' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-81'/>
|
||||
<class-decl name='key_type' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-82'/>
|
||||
<class-decl name='key_user' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-83'/>
|
||||
<class-decl name='kioctx_table' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-84'/>
|
||||
<class-decl name='kmem_cache' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-85'/>
|
||||
<class-decl name='kstatfs' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-86'/>
|
||||
<class-decl name='linux_binfmt' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-87'/>
|
||||
<class-decl name='mem_cgroup' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-88'/>
|
||||
<class-decl name='mmc_bus_ops' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-89'/>
|
||||
<class-decl name='mmc_pwrseq' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-90'/>
|
||||
<class-decl name='mnt_namespace' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-91'/>
|
||||
<class-decl name='module_notes_attrs' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-92'/>
|
||||
<class-decl name='module_param_attrs' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-93'/>
|
||||
<class-decl name='module_sect_attrs' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-94'/>
|
||||
<class-decl name='mtd_info' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-95'/>
|
||||
<class-decl name='nameidata' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-96'/>
|
||||
<class-decl name='net' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-97'/>
|
||||
<class-decl name='nfs4_lock_state' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-98'/>
|
||||
<class-decl name='nlm_lockowner' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-99'/>
|
||||
<class-decl name='perf_event' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-100'/>
|
||||
<class-decl name='perf_event_context' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-101'/>
|
||||
<class-decl name='pipe_inode_info' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-102'/>
|
||||
<class-decl name='poll_table_struct' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-103'/>
|
||||
<class-decl name='pollfd' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-104'/>
|
||||
<class-decl name='posix_acl' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-105'/>
|
||||
<class-decl name='proc_ns_operations' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-106'/>
|
||||
<class-decl name='rcu_node' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-107'/>
|
||||
<class-decl name='reclaim_state' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-108'/>
|
||||
<class-decl name='regulator' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-109'/>
|
||||
<class-decl name='request_queue' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-110'/>
|
||||
<class-decl name='robust_list_head' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-111'/>
|
||||
<class-decl name='rt_mutex_waiter' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-112'/>
|
||||
<class-decl name='rt_rq' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-113'/>
|
||||
<class-decl name='sched_class' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-114'/>
|
||||
<class-decl name='sdio_func' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-115'/>
|
||||
<class-decl name='sdio_func_tuple' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-116'/>
|
||||
<class-decl name='seccomp_filter' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-117'/>
|
||||
<class-decl name='seq_file' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-118'/>
|
||||
<class-decl name='sock' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-119'/>
|
||||
<class-decl name='subsys_private' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-120'/>
|
||||
<class-decl name='swap_info_struct' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-121'/>
|
||||
<class-decl name='task_group' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-122'/>
|
||||
<class-decl name='taskstats' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-123'/>
|
||||
<class-decl name='trace_eval_map' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-124'/>
|
||||
<class-decl name='trace_event_call' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-125'/>
|
||||
<class-decl name='tty_audit_buf' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-126'/>
|
||||
<class-decl name='tty_struct' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-127'/>
|
||||
<class-decl name='ucounts' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-128'/>
|
||||
<class-decl name='uprobe' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-129'/>
|
||||
<class-decl name='user_namespace' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-130'/>
|
||||
<class-decl name='uts_namespace' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-131'/>
|
||||
<class-decl name='vfsmount' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-132'/>
|
||||
<class-decl name='wake_irq' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-133'/>
|
||||
<class-decl name='workqueue_struct' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-134'/>
|
||||
<class-decl name='writeback_control' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-135'/>
|
||||
<class-decl name='xattr_handler' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-136'/>
|
||||
<class-decl name='xol_area' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-137'/>
|
||||
<function-decl name='sdhci_dumpregs' mangled-name='sdhci_dumpregs' filepath='/ws/android/kernel/aosp/common-mainline/common/drivers/mmc/host/sdhci.c' line='53' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sdhci_dumpregs'>
|
||||
<parameter type-id='type-id-1425' name='host' filepath='/ws/android/kernel/aosp/common-mainline/common/drivers/mmc/host/sdhci.c' line='53' column='1'/>
|
||||
<return type-id='type-id-224'/>
|
||||
@ -11479,6 +11576,46 @@
|
||||
</function-type>
|
||||
</abi-instr>
|
||||
<abi-instr address-size='64' path='drivers/mmc/host/sdhci.mod.c' comp-dir-path='/ws/android/kernel/aosp/common-mainline/out/android-mainline/common' language='LANG_C89'>
|
||||
<class-decl name='anon_vma' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-41'/>
|
||||
<class-decl name='audit_context' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-43'/>
|
||||
<class-decl name='backing_dev_info' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-45'/>
|
||||
<class-decl name='bio_list' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-47'/>
|
||||
<class-decl name='blk_plug' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-48'/>
|
||||
<class-decl name='capture_control' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-49'/>
|
||||
<class-decl name='cfs_rq' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-51'/>
|
||||
<class-decl name='files_struct' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-62'/>
|
||||
<class-decl name='fs_struct' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-65'/>
|
||||
<class-decl name='ftrace_ret_stack' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-69'/>
|
||||
<class-decl name='kernfs_iattrs' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-80'/>
|
||||
<class-decl name='kernfs_open_node' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-81'/>
|
||||
<class-decl name='kioctx_table' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-84'/>
|
||||
<class-decl name='kmem_cache' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-85'/>
|
||||
<class-decl name='linux_binfmt' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-87'/>
|
||||
<class-decl name='mem_cgroup' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-88'/>
|
||||
<class-decl name='module_notes_attrs' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-92'/>
|
||||
<class-decl name='module_param_attrs' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-93'/>
|
||||
<class-decl name='module_sect_attrs' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-94'/>
|
||||
<class-decl name='nameidata' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-96'/>
|
||||
<class-decl name='perf_event' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-100'/>
|
||||
<class-decl name='pipe_inode_info' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-102'/>
|
||||
<class-decl name='poll_table_struct' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-103'/>
|
||||
<class-decl name='pollfd' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-104'/>
|
||||
<class-decl name='rcu_node' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-107'/>
|
||||
<class-decl name='reclaim_state' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-108'/>
|
||||
<class-decl name='request_queue' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-110'/>
|
||||
<class-decl name='rt_mutex_waiter' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-112'/>
|
||||
<class-decl name='rt_rq' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-113'/>
|
||||
<class-decl name='sched_class' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-114'/>
|
||||
<class-decl name='seccomp_filter' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-117'/>
|
||||
<class-decl name='seq_file' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-118'/>
|
||||
<class-decl name='sock' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-119'/>
|
||||
<class-decl name='task_group' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-122'/>
|
||||
<class-decl name='trace_eval_map' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-124'/>
|
||||
<class-decl name='trace_event_call' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-125'/>
|
||||
<class-decl name='uprobe' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-129'/>
|
||||
<class-decl name='user_namespace' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-130'/>
|
||||
<class-decl name='workqueue_struct' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-134'/>
|
||||
<class-decl name='xol_area' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-137'/>
|
||||
<var-decl name='__this_module' type-id='type-id-887' mangled-name='__this_module' visibility='default' filepath='/ws/android/kernel/aosp/common-mainline/out/android-mainline/common/drivers/mmc/host/sdhci.mod.c' line='11' column='1' elf-symbol-id='__this_module'/>
|
||||
</abi-instr>
|
||||
</abi-corpus>
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -30,10 +30,6 @@
|
||||
<parameter type-id='type-id-3' name='argv' filepath='/home/dodji/git/libabigail/patches/tests/data/test-read-dwarf/PR26261/PR26261-main.c' line='27' column='1'/>
|
||||
<return type-id='type-id-5'/>
|
||||
</function-decl>
|
||||
<type-decl name='char' size-in-bits='8' id='type-id-1'/>
|
||||
<type-decl name='int' size-in-bits='32' id='type-id-5'/>
|
||||
<type-decl name='void' id='type-id-6'/>
|
||||
<pointer-type-def type-id='type-id-7' size-in-bits='64' id='type-id-4'/>
|
||||
<function-type size-in-bits='64' id='type-id-7'>
|
||||
<parameter type-id='type-id-5'/>
|
||||
<parameter type-id='type-id-5'/>
|
||||
|
@ -139,6 +139,7 @@
|
||||
<pointer-type-def type-id='type-id-19' size-in-bits='64' id='type-id-5'/>
|
||||
<pointer-type-def type-id='type-id-20' size-in-bits='64' id='type-id-75'/>
|
||||
<pointer-type-def type-id='type-id-75' size-in-bits='64' id='type-id-76'/>
|
||||
<class-decl name='_IO_FILE' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-22'/>
|
||||
<class-decl name='allocator<char>' visibility='default' is-declaration-only='yes' id='type-id-40'>
|
||||
<member-type access='public'>
|
||||
<typedef-decl name='size_type' type-id='type-id-78' filepath='/usr/include/c++/4.8.2/bits/allocator.h' line='95' column='1' id='type-id-77'/>
|
||||
@ -728,7 +729,6 @@
|
||||
<parameter type-id='type-id-32'/>
|
||||
<return type-id='type-id-34'/>
|
||||
</function-decl>
|
||||
<class-decl name='_IO_FILE' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-22'/>
|
||||
</abi-instr>
|
||||
<abi-instr address-size='64' path='test23-second-tu.cc' comp-dir-path='/home/dodji/git/libabigail/PR20369/tests/data/test-read-dwarf' language='LANG_C_plus_plus'>
|
||||
<function-decl name='emit' mangled-name='_Z4emitRSsS_' filepath='/home/dodji/git/libabigail/PR20369/tests/data/test-read-dwarf/test23-second-tu.cc' line='13' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_Z4emitRSsS_'>
|
||||
|
@ -241,6 +241,7 @@
|
||||
<pointer-type-def type-id='type-id-21' size-in-bits='64' id='type-id-8'/>
|
||||
<pointer-type-def type-id='type-id-22' size-in-bits='64' id='type-id-101'/>
|
||||
<pointer-type-def type-id='type-id-101' size-in-bits='64' id='type-id-102'/>
|
||||
<class-decl name='_IO_FILE' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-27'/>
|
||||
<namespace-decl name='std'>
|
||||
<class-decl name='allocator<char>' size-in-bits='8' visibility='default' filepath='/usr/include/c++/5.3.1/bits/allocator.h' line='92' column='1' id='type-id-57'>
|
||||
<base-class access='public' layout-offset-in-bits='0' type-id='type-id-41'/>
|
||||
@ -767,6 +768,5 @@
|
||||
<parameter type-id='type-id-37'/>
|
||||
<return type-id='type-id-39'/>
|
||||
</function-decl>
|
||||
<class-decl name='_IO_FILE' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-27'/>
|
||||
</abi-instr>
|
||||
</abi-corpus>
|
||||
|
@ -226,6 +226,7 @@
|
||||
<pointer-type-def type-id='type-id-21' size-in-bits='64' id='type-id-8'/>
|
||||
<pointer-type-def type-id='type-id-22' size-in-bits='64' id='type-id-84'/>
|
||||
<pointer-type-def type-id='type-id-84' size-in-bits='64' id='type-id-85'/>
|
||||
<class-decl name='_IO_FILE' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-27'/>
|
||||
<namespace-decl name='std'>
|
||||
<class-decl name='allocator<char>' size-in-bits='8' visibility='default' filepath='/usr/include/c++/5.3.1/bits/allocator.h' line='92' column='1' id='type-id-86'>
|
||||
<base-class access='public' layout-offset-in-bits='0' type-id='type-id-41'/>
|
||||
@ -746,6 +747,5 @@
|
||||
<parameter type-id='type-id-37'/>
|
||||
<return type-id='type-id-39'/>
|
||||
</function-decl>
|
||||
<class-decl name='_IO_FILE' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-27'/>
|
||||
</abi-instr>
|
||||
</abi-corpus>
|
||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -478,6 +478,7 @@
|
||||
<parameter type-id='type-id-4'/>
|
||||
<return type-id='type-id-10'/>
|
||||
</function-decl>
|
||||
<class-decl name='_IO_FILE' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-11'/>
|
||||
<function-decl name='fgetwc' filepath='/usr/include/wchar.h' line='745' column='1' visibility='default' binding='global' size-in-bits='64'>
|
||||
<parameter type-id='type-id-33'/>
|
||||
<return type-id='type-id-10'/>
|
||||
@ -830,6 +831,5 @@
|
||||
<return type-id='type-id-91'/>
|
||||
</function-decl>
|
||||
<var-decl name='__dso_handle' type-id='type-id-19' visibility='default'/>
|
||||
<class-decl name='_IO_FILE' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-11'/>
|
||||
</abi-instr>
|
||||
</abi-corpus>
|
||||
|
@ -387,6 +387,7 @@
|
||||
<parameter type-id='type-id-4'/>
|
||||
<return type-id='type-id-10'/>
|
||||
</function-decl>
|
||||
<class-decl name='_IO_FILE' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-11'/>
|
||||
<function-decl name='fgetwc' filepath='/usr/include/wchar.h' line='745' column='1' visibility='default' binding='global' size-in-bits='64'>
|
||||
<parameter type-id='type-id-33'/>
|
||||
<return type-id='type-id-10'/>
|
||||
@ -739,6 +740,5 @@
|
||||
<return type-id='type-id-91'/>
|
||||
</function-decl>
|
||||
<var-decl name='__dso_handle' type-id='type-id-19' visibility='default'/>
|
||||
<class-decl name='_IO_FILE' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-11'/>
|
||||
</abi-instr>
|
||||
</abi-corpus>
|
||||
|
@ -51,6 +51,13 @@ InOutSpec in_out_specs[] =
|
||||
"data/test-alt-dwarf-file/test1-report-0.txt",
|
||||
"output/test-alt-dwarf-file/test1-report-0.txt"
|
||||
},
|
||||
{
|
||||
"data/test-alt-dwarf-file/rhbz1951526/usr/bin/gimp-2.10",
|
||||
"data/test-alt-dwarf-file/rhbz1951526/usr/lib/debug",
|
||||
"--abidiff",
|
||||
"data/test-alt-dwarf-file/rhbz1951526/rhbz1951526-report-0.txt",
|
||||
"output/test-alt-dwarf-file/rhbz1951526/rhbz1951526-report-0.txt"
|
||||
},
|
||||
|
||||
// This should always be the last entry
|
||||
{NULL, NULL, NULL, NULL, NULL}
|
||||
|
Loading…
Reference in New Issue
Block a user