From 9affad3d2314de1bacbabae453a7261cc02feac4 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Fri, 3 May 2013 11:28:49 +0200 Subject: [PATCH] libdw: dwarf_getsrclines don't set end_sequence when there are no lines. Some CUs might only have a file list, but no actual source lines in their statement list. Only set end_sequence at the end of the source lines list if there are actually lines. Signed-off-by: Mark Wielaard --- libdw/ChangeLog | 5 +++++ libdw/dwarf_getsrclines.c | 3 ++- tests/ChangeLog | 6 ++++++ tests/Makefile.am | 3 ++- tests/run-get-lines.sh | 31 +++++++++++++++++++++++++++++-- tests/testfilenolines.bz2 | Bin 0 -> 2855 bytes 6 files changed, 44 insertions(+), 4 deletions(-) create mode 100755 tests/testfilenolines.bz2 diff --git a/libdw/ChangeLog b/libdw/ChangeLog index ef9b3acdd..59b6c63af 100644 --- a/libdw/ChangeLog +++ b/libdw/ChangeLog @@ -1,3 +1,8 @@ +2013-05-03 Mark Wielaard + + * dwarf_getsrclines.c (dwarf_getsrclines): Only set end_sequence + when nlinelist > 0. + 2013-04-28 Jan Kratochvil * libdw.map (ELFUTILS_0.156): New. diff --git a/libdw/dwarf_getsrclines.c b/libdw/dwarf_getsrclines.c index 5a58b7831..fa4dd18c0 100644 --- a/libdw/dwarf_getsrclines.c +++ b/libdw/dwarf_getsrclines.c @@ -715,7 +715,8 @@ dwarf_getsrclines (Dwarf_Die *cudie, Dwarf_Lines **lines, size_t *nlines) /* Make sure the highest address for the CU is marked as end_sequence. This is required by the DWARF spec, but some compilers forget and dwfl_module_getsrc depends on it. */ - cu->lines->info[nlinelist - 1].end_sequence = 1; + if (nlinelist > 0) + cu->lines->info[nlinelist - 1].end_sequence = 1; /* Success. */ res = 0; diff --git a/tests/ChangeLog b/tests/ChangeLog index 4003851f5..6df580a7f 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,3 +1,9 @@ +2013-05-03 Mark Wielaard + + * testfilenolines.bz2: New test file. + * Makefile.am (EXTRA_DIST): Add testfilenolines.bz2. + * run-get-lines.sh: Run testrun_compare on testfilenolines. + 2013-04-30 Jan Kratochvil * dwfl-report-elf-align.c: Use false add_p_vaddr for dwfl_report_elf. diff --git a/tests/Makefile.am b/tests/Makefile.am index 4b5770359..6327edbb1 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -198,7 +198,8 @@ EXTRA_DIST = run-arextract.sh run-arsymtest.sh \ testfile69.core.bz2 testfile69.so.bz2 \ testfile70.core.bz2 testfile70.exec.bz2 \ run-dwfllines.sh run-dwfl-report-elf-align.sh \ - testfile-dwfl-report-elf-align-shlib.so.bz2 + testfile-dwfl-report-elf-align-shlib.so.bz2 \ + testfilenolines if USE_VALGRIND valgrind_cmd='valgrind -q --trace-children=yes --error-exitcode=1 --run-libc-freeres=no' diff --git a/tests/run-get-lines.sh b/tests/run-get-lines.sh index 5a220cab7..fb48c77d9 100755 --- a/tests/run-get-lines.sh +++ b/tests/run-get-lines.sh @@ -1,5 +1,5 @@ #! /bin/sh -# Copyright (C) 1999, 2000, 2002, 2004, 2005 Red Hat, Inc. +# Copyright (C) 1999, 2000, 2002, 2004, 2005, 2013 Red Hat, Inc. # This file is part of elfutils. # Written by Ulrich Drepper , 1999. # @@ -18,7 +18,7 @@ . $srcdir/test-subr.sh -testfiles testfile testfile2 +testfiles testfile testfile2 testfilenolines testrun_compare ${abs_builddir}/get-lines testfile testfile2 <<\EOF cuhl = 11, o = 0, asz = 4, osz = 4, ncu = 191 @@ -61,4 +61,31 @@ cuhl = 11, o = 267, asz = 4, osz = 4, ncu = 2680 10000514: /shoggoth/drepper/m.c:8:0: is_stmt:yes, end_seq:yes, bb:no, prologue:no, epilogue:no EOF +# - lines.c +# int ft; +# +# int +# main (int argc, char **argv) +# { +# return ft - 42; +# } +# +# - nolines.c +# int ft = 42; +# +# gcc -g -c lines.c +# gcc -g -c nolines.c +# gcc -g -o testfilenolines lines.o nolines.o + +testrun_compare ${abs_builddir}/get-lines testfilenolines <<\EOF +cuhl = 11, o = 0, asz = 8, osz = 4, ncu = 169 + 4 lines +400474: /home/mark/src/tests/lines.c:5:0: is_stmt:yes, end_seq:no, bb:no, prologue:no, epilogue:no +40047f: /home/mark/src/tests/lines.c:6:0: is_stmt:yes, end_seq:no, bb:no, prologue:no, epilogue:no +400488: /home/mark/src/tests/lines.c:7:0: is_stmt:yes, end_seq:no, bb:no, prologue:no, epilogue:no +40048a: /home/mark/src/tests/lines.c:7:0: is_stmt:yes, end_seq:yes, bb:no, prologue:no, epilogue:no +cuhl = 11, o = 125, asz = 8, osz = 4, ncu = 243 + 0 lines +EOF + exit 0 diff --git a/tests/testfilenolines.bz2 b/tests/testfilenolines.bz2 new file mode 100755 index 0000000000000000000000000000000000000000..23cd7223a8e257c2ec1c58d92fcf56c67804b331 GIT binary patch literal 2855 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 FZ$Mh?5)J?W literal 0 Hc-jL100001 -- 2.47.2