public inbox for elfutils@sourceware.org
 help / color / mirror / Atom feed
* [PATCH 1/2] libdw: Use correct CU to resolve file names in dwarf_decl_file.
@ 2020-05-08 16:50 Mark Wielaard
  2020-05-08 16:50 ` [PATCH 2/2] libdw: Skip imported compiler_units in libdw_visit_scopes walking DIE tree Mark Wielaard
  2020-05-12 19:07 ` [PATCH 1/2] libdw: Use correct CU to resolve file names in dwarf_decl_file Mark Wielaard
  0 siblings, 2 replies; 4+ messages in thread
From: Mark Wielaard @ 2020-05-08 16:50 UTC (permalink / raw)
  To: elfutils-devel; +Cc: Mark Wielaard

dwarf_decl_file uses dwarf_attr_integrate to get the DW_AT_decl_file
attribute. This means the attribute might come from a different DIE
in a different CU. If so, we need to use the CU associated with the
attribute, not the original DIE, to resolve the file name.

Also add a bit more documentation to dwarf_attr_integrate explaining
that the attribute returned might come from a different CU (and even
different Dwarf).

Signed-off-by: Mark Wielaard <mark@klomp.org>
---
 libdw/ChangeLog              |   7 +++++
 libdw/dwarf_decl_file.c      |   2 +-
 libdw/dwarf_ranges.c         |   5 ++++
 libdw/libdw.h                |   9 +++++-
 tests/ChangeLog              |   6 ++++
 tests/Makefile.am            |   1 +
 tests/run-allfcts.sh         |  52 +++++++++++++++++++++++++++++++++++
 tests/testfile-lto-gcc10.bz2 | Bin 0 -> 4319 bytes
 8 files changed, 80 insertions(+), 2 deletions(-)
 create mode 100755 tests/testfile-lto-gcc10.bz2

diff --git a/libdw/ChangeLog b/libdw/ChangeLog
index 75fc8f06..34def10d 100644
--- a/libdw/ChangeLog
+++ b/libdw/ChangeLog
@@ -1,3 +1,10 @@
+2020-05-08  Mark Wielaard  <mark@klomp.org>
+
+	* dwarf_decl_file.c (dwarf_decl_file): Use attr CU instead of DIE
+	CU to resolve file name.
+	* dwarf_ranges.c(dwarf_ranges): Document which CU we use when.
+	* libdw.h (dwarf_attr_integrate): Extend documentation.
+
 2020-04-25  Mark Wielaard  <mark@klomp.org>
 
 	* libdw_alloc.c (__libdw_alloc_tail): Call Dwarf oom_handler()
diff --git a/libdw/dwarf_decl_file.c b/libdw/dwarf_decl_file.c
index 5657132f..d4aa0a18 100644
--- a/libdw/dwarf_decl_file.c
+++ b/libdw/dwarf_decl_file.c
@@ -55,7 +55,7 @@ dwarf_decl_file (Dwarf_Die *die)
     }
 
   /* Get the array of source files for the CU.  */
-  struct Dwarf_CU *cu = die->cu;
+  struct Dwarf_CU *cu = attr_mem.cu;
   if (cu->lines == NULL)
     {
       Dwarf_Lines *lines;
diff --git a/libdw/dwarf_ranges.c b/libdw/dwarf_ranges.c
index f67d8a5a..520f9ffe 100644
--- a/libdw/dwarf_ranges.c
+++ b/libdw/dwarf_ranges.c
@@ -506,6 +506,11 @@ dwarf_ranges (Dwarf_Die *die, ptrdiff_t offset, Dwarf_Addr *basep,
       Dwarf_Attribute attr_mem;
       Dwarf_Attribute *attr = INTUSE(dwarf_attr) (die, DW_AT_ranges,
 						  &attr_mem);
+      /* Note that above we use dwarf_attr, not dwarf_attr_integrate.
+	 The only case where the ranges can come from another DIE
+	 attribute are the split CU case. In that case we also have a
+	 different CU to check against. But that is already set up
+	 above using __libdw_find_split_unit.  */
       if (attr == NULL
 	  && is_cudie (die)
 	  && die->cu->unit_type == DW_UT_split_compile)
diff --git a/libdw/libdw.h b/libdw/libdw.h
index e20961be..1a4e15a1 100644
--- a/libdw/libdw.h
+++ b/libdw/libdw.h
@@ -474,7 +474,14 @@ extern Dwarf_Attribute *dwarf_attr (Dwarf_Die *die, unsigned int search_name,
 extern int dwarf_hasattr (Dwarf_Die *die, unsigned int search_name);
 
 /* These are the same as dwarf_attr and dwarf_hasattr, respectively,
-   but they resolve an indirect attribute through DW_AT_abstract_origin.  */
+   but they resolve an indirect attribute through
+   DW_AT_abstract_origin, DW_AT_specification or, if the DIE is a
+   top-level split CU, the skeleton DIE.  Note that the attribute
+   might come from a DIE in a different CU (possibly from a different
+   Dwarf file).  In that case all attribute information needs to be
+   resolved through the CU associated with the returned
+   Dwarf_Attribute.  The dwarf_form functions already do this
+   automatically.  */
 extern Dwarf_Attribute *dwarf_attr_integrate (Dwarf_Die *die,
 					      unsigned int search_name,
 					      Dwarf_Attribute *result)
diff --git a/tests/ChangeLog b/tests/ChangeLog
index 301b0fb6..b59ebc9f 100644
--- a/tests/ChangeLog
+++ b/tests/ChangeLog
@@ -1,3 +1,9 @@
+2020-05-05  Mark Wielaard  <mark@klomp.org>
+
+	* testfile-lto-gcc10.bz2: New test file.
+	* Makefile.am (EXTRA_DIST): Add testfile-lto-gcc10.bz2.
+	* run-allfcts.sh: Add testfile-lto-gcc10 test.
+
 2020-04-17  Mark Wielaard  <mark@klomp.org>
 
 	* test-subr.sh (testrun_on_self_obj): New function.
diff --git a/tests/Makefile.am b/tests/Makefile.am
index d173d547..2fed12e1 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -218,6 +218,7 @@ EXTRA_DIST = run-arextract.sh run-arsymtest.sh run-ar.sh \
 	     testfile9.bz2 testfile10.bz2 testfile11.bz2 testfile12.bz2 \
 	     testfile13.bz2 run-strip-test3.sh run-allfcts.sh \
 	     testfile_class_func.bz2 testfile_nested_funcs.bz2 \
+	     testfile-lto-gcc10.bz2 \
 	     run-line2addr.sh run-elflint-test.sh testfile14.bz2 \
 	     run-strip-test4.sh run-strip-test5.sh run-strip-test6.sh \
 	     run-strip-test7.sh run-strip-test8.sh run-strip-groups.sh \
diff --git a/tests/run-allfcts.sh b/tests/run-allfcts.sh
index 6eaf13c8..f8c1ce78 100755
--- a/tests/run-allfcts.sh
+++ b/tests/run-allfcts.sh
@@ -91,4 +91,56 @@ testrun_compare ${abs_builddir}/allfcts testfile_nested_funcs testfile_class_fun
 /home/mark/src/tests/nested/class_func.cxx:13:main
 EOF
 
+# = testfile-lto.h =
+# struct t
+# {
+#   int *p;
+#   int c;
+# };
+#
+# extern int foo (int i, struct t *t);
+
+# = testfile-lto-func.c =
+# #include "testfile-lto.h"
+#
+# int
+# foo (int i, struct t *t)
+# {
+#   int j, res = 0;
+#   for (j = 0; j < i && j < t->c; j++)
+#     res += t->p[j];
+#
+#   return res;
+# }
+
+# = testfile-lto-main.c =
+# #include "testfile-lto.h"
+#
+# static struct t g;
+#
+# int
+# main (int argc, char **argv)
+# {
+#   int i;
+#   int j[argc];
+#   g.c = argc;
+#   g.p = j;
+#   for (i = 0; i < argc; i++)
+#     j[i] = (int) argv[i][0];
+#   return foo (3, &g);
+# }
+
+# Using gcc (GCC) 10.0.1 20200430 (Red Hat 10.0.1-0.13)
+# gcc -g -O2 -flto -c testfile-lto-func.c
+# gcc -g -O2 -flto -c testfile-lto-main.c
+# gcc -g -O2 -flto -o testfile-lto-gcc10 testfile-lto-func.o testfile-lto-main.o
+
+testfiles testfile-lto-gcc10
+
+testrun_compare ${abs_builddir}/allfcts testfile-lto-gcc10 <<\EOF
+/home/mark/src/tests/testfile-lto-main.c:6:main
+/home/mark/src/tests/testfile-lto-func.c:4:foo
+/home/mark/src/tests/testfile-lto-main.c:6:main
+EOF
+
 exit 0
diff --git a/tests/testfile-lto-gcc10.bz2 b/tests/testfile-lto-gcc10.bz2
new file mode 100755
index 0000000000000000000000000000000000000000..e8ef621f2ef7da5c6d65caa4b66e625ec324454c
GIT binary patch
literal 4319
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

literal 0
HcmV?d00001

-- 
2.18.4


^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH 2/2] libdw: Skip imported compiler_units in libdw_visit_scopes walking DIE tree
  2020-05-08 16:50 [PATCH 1/2] libdw: Use correct CU to resolve file names in dwarf_decl_file Mark Wielaard
@ 2020-05-08 16:50 ` Mark Wielaard
  2020-05-12 19:07   ` Mark Wielaard
  2020-05-12 19:07 ` [PATCH 1/2] libdw: Use correct CU to resolve file names in dwarf_decl_file Mark Wielaard
  1 sibling, 1 reply; 4+ messages in thread
From: Mark Wielaard @ 2020-05-08 16:50 UTC (permalink / raw)
  To: elfutils-devel; +Cc: Mark Wielaard

Some gcc -flto versions imported other top-level compile units,
skip those. Otherwise we'll visit various DIE trees multiple times.

Note in the testcase that with newer GCC versions function foo is
fully inlined and does appear only once (as declared, but not as
separate subprogram).

Signed-off-by: Mark Wielaard <mark@klomp.org>
---
 libdw/ChangeLog             |   5 +++++
 libdw/libdw_visit_scopes.c  |   6 +++++-
 tests/ChangeLog             |   9 +++++++++
 tests/Makefile.am           |   1 +
 tests/run-allfcts.sh        |  27 +++++++++++++++++++++++++++
 tests/testfile-lto-gcc8.bz2 | Bin 0 -> 3686 bytes
 tests/testfile-lto-gcc9.bz2 | Bin 0 -> 3809 bytes
 7 files changed, 47 insertions(+), 1 deletion(-)
 create mode 100755 tests/testfile-lto-gcc8.bz2
 create mode 100755 tests/testfile-lto-gcc9.bz2

diff --git a/libdw/ChangeLog b/libdw/ChangeLog
index 34def10d..c75b0958 100644
--- a/libdw/ChangeLog
+++ b/libdw/ChangeLog
@@ -1,3 +1,8 @@
+2020-05-08  Mark Wielaard  <mark@klomp.org>
+
+	* libdw_visit_scopes.c (walk_children): Don't recurse into imported
+	DW_TAG_compile_units.
+
 2020-05-08  Mark Wielaard  <mark@klomp.org>
 
 	* dwarf_decl_file.c (dwarf_decl_file): Use attr CU instead of DIE
diff --git a/libdw/libdw_visit_scopes.c b/libdw/libdw_visit_scopes.c
index eb892e10..7dfa5f6b 100644
--- a/libdw/libdw_visit_scopes.c
+++ b/libdw/libdw_visit_scopes.c
@@ -125,8 +125,12 @@ walk_children (struct walk_children_state *state)
 	  Dwarf_Attribute *attr = INTUSE(dwarf_attr) (&state->child.die,
 						      DW_AT_import,
 						      &attr_mem);
+	  /* Some gcc -flto versions imported other top-level compile units,
+	     skip those.  */
 	  if (INTUSE(dwarf_formref_die) (attr, &state->child.die) != NULL
-	      && INTUSE(dwarf_child) (&state->child.die, &state->child.die) == 0)
+	      && INTUSE(dwarf_tag) (&state->child.die) != DW_TAG_compile_unit
+	      && (INTUSE(dwarf_child) (&state->child.die, &state->child.die)
+		  == 0))
 	    {
 	      /* Checks the given DIE hasn't been imported yet
 	         to prevent cycles.  */
diff --git a/tests/ChangeLog b/tests/ChangeLog
index b59ebc9f..4e9ae020 100644
--- a/tests/ChangeLog
+++ b/tests/ChangeLog
@@ -1,3 +1,12 @@
+2020-05-05  Mark Wielaard  <mark@klomp.org>
+
+	* testfile-lto-gcc8.bz2: New test file.
+	* testfile-lto-gcc9.bz2: Likewise.
+	* Makefile.am (EXTRA_DIST): Add testfile-lto-gcc8.bz2 and
+	testfile-lto-gcc9.bz2.
+	* run-allfcts.sh: Add testfile-lto-gcc9 and testfile-lto-gcc8
+	tests.
+
 2020-05-05  Mark Wielaard  <mark@klomp.org>
 
 	* testfile-lto-gcc10.bz2: New test file.
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 2fed12e1..a7ad07d0 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -219,6 +219,7 @@ EXTRA_DIST = run-arextract.sh run-arsymtest.sh run-ar.sh \
 	     testfile13.bz2 run-strip-test3.sh run-allfcts.sh \
 	     testfile_class_func.bz2 testfile_nested_funcs.bz2 \
 	     testfile-lto-gcc10.bz2 \
+	     testfile-lto-gcc9.bz2 testfile-lto-gcc8.bz2 \
 	     run-line2addr.sh run-elflint-test.sh testfile14.bz2 \
 	     run-strip-test4.sh run-strip-test5.sh run-strip-test6.sh \
 	     run-strip-test7.sh run-strip-test8.sh run-strip-groups.sh \
diff --git a/tests/run-allfcts.sh b/tests/run-allfcts.sh
index f8c1ce78..9c0a55d8 100755
--- a/tests/run-allfcts.sh
+++ b/tests/run-allfcts.sh
@@ -143,4 +143,31 @@ testrun_compare ${abs_builddir}/allfcts testfile-lto-gcc10 <<\EOF
 /home/mark/src/tests/testfile-lto-main.c:6:main
 EOF
 
+# Using gcc (GCC) 8.3.1 20190311 (Red Hat 8.3.1-3)
+# gcc -g -O2 -flto -c testfile-lto-func.c
+# gcc -g -O2 -flto -c testfile-lto-main.c
+# gcc -g -O2 -flto -o testfile-lto-gcc8 testfile-lto-func.o testfile-lto-main.o
+
+testfiles testfile-lto-gcc8
+
+testrun_compare ${abs_builddir}/allfcts testfile-lto-gcc8 <<\EOF
+/home/mark/src/tests/testfile-lto-func.c:4:foo
+/home/mark/src/tests/testfile-lto-main.c:6:main
+/home/mark/src/tests/testfile-lto-main.c:6:main
+/home/mark/src/tests/testfile-lto-func.c:4:foo
+EOF
+
+# gcc (GCC) 9.1.1 20190605 (Red Hat 9.1.1-2)
+# gcc -g -O2 -flto -c testfile-lto-func.c
+# gcc -g -O2 -flto -c testfile-lto-main.c
+# gcc -g -O2 -flto -o testfile-lto-gcc9 testfile-lto-func.o testfile-lto-main.o
+
+testfiles testfile-lto-gcc9
+
+testrun_compare ${abs_builddir}/allfcts testfile-lto-gcc9 <<\EOF
+/home/mark/src/tests/testfile-lto-main.c:6:main
+/home/mark/src/tests/testfile-lto-func.c:4:foo
+/home/mark/src/tests/testfile-lto-main.c:6:main
+EOF
+
 exit 0
diff --git a/tests/testfile-lto-gcc8.bz2 b/tests/testfile-lto-gcc8.bz2
new file mode 100755
index 0000000000000000000000000000000000000000..cf744d9ec8c97e938fe48df7a9faf46039d84a7d
GIT binary patch
literal 3686
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
E!06nU82|tP

literal 0
HcmV?d00001

diff --git a/tests/testfile-lto-gcc9.bz2 b/tests/testfile-lto-gcc9.bz2
new file mode 100755
index 0000000000000000000000000000000000000000..df503618846cd717656caff52d373c1bbbd044f4
GIT binary patch
literal 3809
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
XCks103%?%p-}t+dDZ+$;W;Ld$)@bze

literal 0
HcmV?d00001

-- 
2.18.4


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH 1/2] libdw: Use correct CU to resolve file names in dwarf_decl_file.
  2020-05-08 16:50 [PATCH 1/2] libdw: Use correct CU to resolve file names in dwarf_decl_file Mark Wielaard
  2020-05-08 16:50 ` [PATCH 2/2] libdw: Skip imported compiler_units in libdw_visit_scopes walking DIE tree Mark Wielaard
@ 2020-05-12 19:07 ` Mark Wielaard
  1 sibling, 0 replies; 4+ messages in thread
From: Mark Wielaard @ 2020-05-12 19:07 UTC (permalink / raw)
  To: elfutils-devel

On Fri, 2020-05-08 at 18:50 +0200, Mark Wielaard wrote:
> dwarf_decl_file uses dwarf_attr_integrate to get the DW_AT_decl_file
> attribute. This means the attribute might come from a different DIE
> in a different CU. If so, we need to use the CU associated with the
> attribute, not the original DIE, to resolve the file name.
> 
> Also add a bit more documentation to dwarf_attr_integrate explaining
> that the attribute returned might come from a different CU (and even
> different Dwarf).

Pushed to master.

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH 2/2] libdw: Skip imported compiler_units in libdw_visit_scopes walking DIE tree
  2020-05-08 16:50 ` [PATCH 2/2] libdw: Skip imported compiler_units in libdw_visit_scopes walking DIE tree Mark Wielaard
@ 2020-05-12 19:07   ` Mark Wielaard
  0 siblings, 0 replies; 4+ messages in thread
From: Mark Wielaard @ 2020-05-12 19:07 UTC (permalink / raw)
  To: elfutils-devel

On Fri, 2020-05-08 at 18:50 +0200, Mark Wielaard wrote:
> Some gcc -flto versions imported other top-level compile units,
> skip those. Otherwise we'll visit various DIE trees multiple times.
> 
> Note in the testcase that with newer GCC versions function foo is
> fully inlined and does appear only once (as declared, but not as
> separate subprogram).

Pushed to master.

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2020-05-12 19:07 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-05-08 16:50 [PATCH 1/2] libdw: Use correct CU to resolve file names in dwarf_decl_file Mark Wielaard
2020-05-08 16:50 ` [PATCH 2/2] libdw: Skip imported compiler_units in libdw_visit_scopes walking DIE tree Mark Wielaard
2020-05-12 19:07   ` Mark Wielaard
2020-05-12 19:07 ` [PATCH 1/2] libdw: Use correct CU to resolve file names in dwarf_decl_file Mark Wielaard

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).