public inbox for libabigail@sourceware.org
 help / color / mirror / Atom feed
* [PATCH] dwarf-reader: Fix DIE origin handling & scope getting
@ 2024-03-01 17:27 Dodji Seketeli
  0 siblings, 0 replies; only message in thread
From: Dodji Seketeli @ 2024-03-01 17:27 UTC (permalink / raw)
  To: libabigail; +Cc: dodji

[-- Attachment #1: Type: text/plain, Size: 11355 bytes --]

Hello,

While looking at something else, I noticed that a number of times the
code to create the IR for function-decl was adding the function to the
wrong scope, especially for DIEs that had a chain of
DW_AT_abstract_origin *and* DW_AT_specification attributes.

Suppose we are looking at a DIE D that has a DW_AT_abstract_origin
attribute pointing to a DIE D'.  D' itself has a DW_AT_specification
that points to D''.  The scope of the function should be represented
by the scope DIE of D'', not the scope DIE of D'.  Unfortunately
build_ir_node_from_die was sometimes using the scope of D'.

This patch fixes that by introducing a new die_origin_die function
that returns the ultimate origin of a DIE.  In the case above, the
ultimate origin of D is D''.  die_origin_die is thus used by
get_scope_die and get_scope_for_die to get the correct scope of a DIE.
The code of build_ir_node_from_die that handles DW_TAG_subprogram DIEs
is thus simplified as get_scope_for_die now does the heavy lifting of
handling DW_AT_abstract_origin and DW_AT_specification.

The result is a simpler and easier to maintain build_ir_node_from_die
and hopefully a more correct one.  A lot of the ABIXML and the type
denomination in change reports of the test suite have been updated to
reflect the more accurate representation.

	* src/abg-dwarf-reader.cc (die_origin_die): New static function.
	(get_scope_die, get_scope_for_die): Use the new die_origin_die
	above.
	(build_ir_node_from_die): Don't handle DW_AT_abstract_origin and
	DW_AT_specification here.  In general, do not handle getting the
	scope.  Rather, just rely on get_scope_for_die.
	* tests/data/test-annotate/libtest24-drop-fns-2.so.abi: Adjust.
	* tests/data/test-annotate/libtest24-drop-fns.so.abi: Likewise.
	* tests/data/test-annotate/test1.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/test2.so.abi: Likewise.
	* tests/data/test-annotate/test20-pr19025-libvtkParallelCore-6.1.so.abi:
	Likewise.
	* tests/data/test-annotate/test6.so.abi: Likewise.
	* tests/data/test-annotate/test8-qualified-this-pointer.so.abi:
	Likewise.
	* tests/data/test-diff-dwarf-abixml/test0-pr19026-libvtkIOSQL-6.1.so.1.abi:
	Likewise.
	* tests/data/test-diff-dwarf/test0-report.txt: Likewise.
	* tests/data/test-diff-dwarf/test28-vtable-changes-report-0.txt:
	Likewise.
	* tests/data/test-diff-dwarf/test29-vtable-changes-report-0.txt:
	Likewise.
	* tests/data/test-diff-dwarf/test30-vtable-changes-report-0.txt:
	Likewise.
	* tests/data/test-diff-dwarf/test31-vtable-changes-report-0.txt:
	Likewise.
	* tests/data/test-diff-dwarf/test36-ppc64-aliases-report-0.txt:
	Likewise.
	* tests/data/test-diff-dwarf/test41-PR20476-hidden-report-0.txt:
	Likewise.
	* tests/data/test-diff-dwarf/test42-PR21296-clanggcc-report0.txt:
	Likewise.
	* tests/data/test-diff-dwarf/test5-report.txt: Likewise.
	* tests/data/test-diff-dwarf/test8-report.txt: Likewise.
	* tests/data/test-diff-filter/test0-report.txt: Likewise.
	* tests/data/test-diff-filter/test01-report.txt: Likewise.
	* tests/data/test-diff-filter/test10-report.txt: Likewise.
	* tests/data/test-diff-filter/test13-report.txt: Likewise.
	* tests/data/test-diff-filter/test2-report.txt: Likewise.
	* tests/data/test-diff-filter/test28-redundant-and-filtered-children-nodes-report-1.txt:
	Likewise.
	* tests/data/test-diff-filter/test30-pr18904-rvalueref-report0.txt:
	Likewise.
	* tests/data/test-diff-filter/test30-pr18904-rvalueref-report1.txt:
	Likewise.
	* tests/data/test-diff-filter/test30-pr18904-rvalueref-report2.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/test35-pr18754-no-added-syms-report-0.txt:
	Likewise.
	* tests/data/test-diff-filter/test35-pr18754-no-added-syms-report-1.txt:
	Likewise.
	* tests/data/test-diff-filter/test41-report-0.txt: Likewise.
	* tests/data/test-diff-filter/test9-report.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-diff-suppr/test24-soname-report-1.txt: Likewise.
	* tests/data/test-diff-suppr/test24-soname-report-10.txt:
	Likewise.
	* tests/data/test-diff-suppr/test24-soname-report-12.txt:
	Likewise.
	* tests/data/test-diff-suppr/test24-soname-report-14.txt:
	Likewise.
	* tests/data/test-diff-suppr/test24-soname-report-16.txt:
	Likewise.
	* tests/data/test-diff-suppr/test24-soname-report-4.txt: Likewise.
	* tests/data/test-diff-suppr/test31-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/libtest24-drop-fns-2.so.abi:
	Likewise.
	* tests/data/test-read-dwarf/libtest24-drop-fns.so.abi: Likewise.
	* tests/data/test-read-dwarf/test-libaaudio.so.abi: Likewise.
	* tests/data/test-read-dwarf/test-libandroid.so.abi: Likewise.
	* tests/data/test-read-dwarf/test1.abi: Likewise.
	* tests/data/test-read-dwarf/test1.hash.abi: Likewise.
	* tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: Likewise.
	* tests/data/test-read-dwarf/test11-pr18828.so.abi: Likewise.
	* tests/data/test-read-dwarf/test12-pr18844.so.abi: Likewise.
	* tests/data/test-read-dwarf/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/test2.so.abi: Likewise.
	* tests/data/test-read-dwarf/test2.so.hash.abi: Likewise.
	* tests/data/test-read-dwarf/test20-pr19025-libvtkParallelCore-6.1.so.abi:
	Likewise.
	* tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi:
	Likewise.
	* tests/data/test-read-dwarf/test6.so.abi: Likewise.
	* tests/data/test-read-dwarf/test6.so.hash.abi: Likewise.
	* tests/data/test-read-dwarf/test8-qualified-this-pointer.so.abi:
	Likewise.
	* tests/data/test-read-dwarf/test8-qualified-this-pointer.so.hash.abi:
	Likewise.
	* tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Likewise.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
Applying to the master branch
---
 src/abg-dwarf-reader.cc                       |   241 +-
 .../test-annotate/libtest24-drop-fns-2.so.abi |     2 +-
 .../test-annotate/libtest24-drop-fns.so.abi   |     2 +-
 tests/data/test-annotate/test1.abi            |    70 +-
 .../data/test-annotate/test14-pr18893.so.abi  | 16746 ++---
 .../data/test-annotate/test15-pr18892.so.abi  | 17626 ++---
 .../data/test-annotate/test17-pr19027.so.abi  | 29685 ++++----
 ...st18-pr19037-libvtkRenderingLIC-6.1.so.abi | 20078 ++---
 ...19-pr19023-libtcmalloc_and_profiler.so.abi | 25278 +++----
 tests/data/test-annotate/test2.so.abi         |    46 +-
 ...st20-pr19025-libvtkParallelCore-6.1.so.abi | 23861 +++---
 tests/data/test-annotate/test6.so.abi         |     8 +-
 .../test8-qualified-this-pointer.so.abi       |    10 +-
 .../test0-pr19026-libvtkIOSQL-6.1.so.1.abi    | 16663 ++---
 tests/data/test-diff-dwarf/test0-report.txt   |    32 +-
 .../test28-vtable-changes-report-0.txt        |     7 +-
 .../test29-vtable-changes-report-0.txt        |    28 +-
 .../test30-vtable-changes-report-0.txt        |    28 +-
 .../test31-vtable-changes-report-0.txt        |    28 +-
 .../test36-ppc64-aliases-report-0.txt         |    23 +-
 .../test41-PR20476-hidden-report-0.txt        |    58 +-
 .../test42-PR21296-clanggcc-report0.txt       |     9 +-
 tests/data/test-diff-dwarf/test5-report.txt   |    11 +-
 tests/data/test-diff-dwarf/test8-report.txt   |    38 +-
 tests/data/test-diff-filter/test0-report.txt  |    36 +-
 tests/data/test-diff-filter/test01-report.txt |    36 +-
 tests/data/test-diff-filter/test10-report.txt |    11 +-
 tests/data/test-diff-filter/test13-report.txt |    23 +-
 tests/data/test-diff-filter/test2-report.txt  |    11 +-
 ...t-and-filtered-children-nodes-report-1.txt |    10 +-
 .../test30-pr18904-rvalueref-report0.txt      |   338 +-
 .../test30-pr18904-rvalueref-report1.txt      |   344 +-
 .../test30-pr18904-rvalueref-report2.txt      |   344 +-
 .../test31-pr18535-libstdc++-report-0.txt     |     8 +-
 .../test31-pr18535-libstdc++-report-1.txt     |     8 +-
 .../test35-pr18754-no-added-syms-report-0.txt |   236 +-
 .../test35-pr18754-no-added-syms-report-1.txt |     6 +-
 .../data/test-diff-filter/test41-report-0.txt |    89 +-
 tests/data/test-diff-filter/test9-report.txt  |    11 +-
 ...bb-4.3-3.20141204.fc23.x86_64-report-0.txt |   377 +-
 ...bb-4.3-3.20141204.fc23.x86_64-report-1.txt |   123 +-
 .../test24-soname-report-1.txt                |    13 +-
 .../test24-soname-report-10.txt               |    13 +-
 .../test24-soname-report-12.txt               |    13 +-
 .../test24-soname-report-14.txt               |    13 +-
 .../test24-soname-report-16.txt               |    13 +-
 .../test24-soname-report-4.txt                |    13 +-
 .../data/test-diff-suppr/test31-report-1.txt  |    11 +-
 .../PR22015-libboost_iostreams.so.abi         |   799 +-
 .../test-read-dwarf/PR22122-libftdc.so.abi    | 17805 +----
 .../libtest24-drop-fns-2.so.abi               |     2 +-
 .../test-read-dwarf/libtest24-drop-fns.so.abi |     2 +-
 .../test-read-dwarf/test-libaaudio.so.abi     |   275 +-
 .../test-read-dwarf/test-libandroid.so.abi    |  4865 +-
 tests/data/test-read-dwarf/test1.abi          |    39 +-
 tests/data/test-read-dwarf/test1.hash.abi     |    33 +-
 .../test-read-dwarf/test10-pr18818-gcc.so.abi |  5890 +-
 .../test-read-dwarf/test11-pr18828.so.abi     | 11886 +--
 .../test-read-dwarf/test12-pr18844.so.abi     | 24007 +++---
 .../test-read-dwarf/test14-pr18893.so.abi     | 10915 ++-
 .../test-read-dwarf/test15-pr18892.so.abi     | 14972 ++--
 .../test-read-dwarf/test16-pr18904.so.abi     | 16930 ++---
 .../test-read-dwarf/test17-pr19027.so.abi     | 21639 +++---
 ...st18-pr19037-libvtkRenderingLIC-6.1.so.abi | 15336 ++--
 ...19-pr19023-libtcmalloc_and_profiler.so.abi | 20204 +++--
 tests/data/test-read-dwarf/test2.so.abi       |    34 +-
 tests/data/test-read-dwarf/test2.so.hash.abi  |    22 +-
 ...st20-pr19025-libvtkParallelCore-6.1.so.abi | 18624 +++--
 .../test22-pr19097-libstdc++.so.6.0.17.so.abi | 61103 ++++++++--------
 tests/data/test-read-dwarf/test6.so.abi       |     5 +-
 tests/data/test-read-dwarf/test6.so.hash.abi  |     3 +-
 .../test8-qualified-this-pointer.so.abi       |     7 +-
 .../test8-qualified-this-pointer.so.hash.abi  |     5 +-
 .../test9-pr18818-clang.so.abi                |   850 +-
 74 files changed, 180983 insertions(+), 217947 deletions(-)

This file is quite big, so I am attaching it in gzipped form.


[-- Attachment #2: 0008-dwarf-reader-Fix-DIE-origin-handling-scope-getting.patch.gz --]
[-- Type: application/gzip, Size: 2830583 bytes --]

[-- Attachment #3: Type: text/plain, Size: 14 bytes --]



-- 
		Dodji

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2024-03-01 17:28 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-03-01 17:27 [PATCH] dwarf-reader: Fix DIE origin handling & scope getting Dodji Seketeli

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).