diff options
author | Mark Wielaard <mjw@redhat.com> | 2013-05-03 11:28:49 +0200 |
---|---|---|
committer | Mark Wielaard <mjw@redhat.com> | 2013-05-05 22:15:13 +0200 |
commit | 9affad3d2314de1bacbabae453a7261cc02feac4 (patch) | |
tree | 7fef6e5b20e0fc12e3116a79685ab36184a7b1f5 | |
parent | 904aec2c2f62b729a536c2259274fdd440b0d923 (diff) | |
download | elfutils-9affad3d2314de1bacbabae453a7261cc02feac4.tar.gz |
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 <mjw@redhat.com>
-rw-r--r-- | libdw/ChangeLog | 5 | ||||
-rw-r--r-- | libdw/dwarf_getsrclines.c | 3 | ||||
-rw-r--r-- | tests/ChangeLog | 6 | ||||
-rw-r--r-- | tests/Makefile.am | 3 | ||||
-rwxr-xr-x | tests/run-get-lines.sh | 31 | ||||
-rwxr-xr-x | tests/testfilenolines.bz2 | bin | 0 -> 2855 bytes |
6 files changed, 44 insertions, 4 deletions
diff --git a/libdw/ChangeLog b/libdw/ChangeLog index ef9b3acd..59b6c63a 100644 --- a/libdw/ChangeLog +++ b/libdw/ChangeLog @@ -1,3 +1,8 @@ +2013-05-03 Mark Wielaard <mjw@redhat.com> + + * dwarf_getsrclines.c (dwarf_getsrclines): Only set end_sequence + when nlinelist > 0. + 2013-04-28 Jan Kratochvil <jan.kratochvil@redhat.com> * libdw.map (ELFUTILS_0.156): New. diff --git a/libdw/dwarf_getsrclines.c b/libdw/dwarf_getsrclines.c index 5a58b783..fa4dd18c 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 4003851f..6df580a7 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,3 +1,9 @@ +2013-05-03 Mark Wielaard <mjw@redhat.com> + + * 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 <jan.kratochvil@redhat.com> * 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 4b577035..6327edbb 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 5a220cab..fb48c77d 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 <drepper@redhat.com>, 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 Binary files differnew file mode 100755 index 00000000..23cd7223 --- /dev/null +++ b/tests/testfilenolines.bz2 |