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 <m...@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 <m...@klomp.org> + + * libdw_visit_scopes.c (walk_children): Don't recurse into imported + DW_TAG_compile_units. + 2020-05-08 Mark Wielaard <m...@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 <m...@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 <m...@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