From a8493c12a707390fb8307fe60fe83e1aed960f89 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Fri, 8 May 2020 12:18:41 +0200 Subject: [PATCH] libdw: Skip imported compiler_units in libdw_visit_scopes walking DIE tree 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 --- 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 34def10d5..c75b09587 100644 --- a/libdw/ChangeLog +++ b/libdw/ChangeLog @@ -1,3 +1,8 @@ +2020-05-08 Mark Wielaard + + * libdw_visit_scopes.c (walk_children): Don't recurse into imported + DW_TAG_compile_units. + 2020-05-08 Mark Wielaard * 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 eb892e10a..7dfa5f6b8 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 b59ebc9fe..4e9ae020b 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,3 +1,12 @@ +2020-05-05 Mark Wielaard + + * 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 * testfile-lto-gcc10.bz2: New test file. diff --git a/tests/Makefile.am b/tests/Makefile.am index 2fed12e12..a7ad07d0d 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 f8c1ce78a..9c0a55d86 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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 XCks103%?%p-}t+dDZ+$;W;Ld$)@bze literal 0 Hc-jL100001 -- 2.47.3