This testcase tests the fix for the readelf --debug-dump=line bug fixed in commit 40b1f18 "readelf: Fix advance_pc to use op_addr_advance, not just op_advance."
This tests both the --debug-dump=line (readelf) implementation and the --debug-dump=decodedline (libdw) implementation. The first fails without the bug fix. The second was already correct. Signed-off-by: Mark Wielaard <m...@klomp.org> --- tests/ChangeLog | 6 +++ tests/Makefile.am | 1 + tests/run-readelf-line.sh | 89 +++++++++++++++++++++++++++++++++++++ tests/testfile-ppc64-min-instr.bz2 | Bin 0 -> 3106 bytes 4 files changed, 96 insertions(+) create mode 100755 tests/testfile-ppc64-min-instr.bz2 diff --git a/tests/ChangeLog b/tests/ChangeLog index c9403fb..27e5bd8 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,3 +1,9 @@ +2018-04-16 Mark Wielaard <m...@klomp.org> + + * testfile-ppc64-min-instr.bz2: New testfile. + * run-readelf-line.sh: Run against testfile-ppc64-min-instr.bz2. + * Makefile.am (EXTRA_DIST): Add testfile-ppc64-min-instr.bz2. + 2018-04-11 Mark Wielaard <m...@klomp.org> * run-addrcfi.sh: Adjust expected rule for aarch64 sp. diff --git a/tests/Makefile.am b/tests/Makefile.am index a8cc2df..16abfb0 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -230,6 +230,7 @@ EXTRA_DIST = run-arextract.sh run-arsymtest.sh run-ar.sh \ run-readelf-macro.sh testfilemacro.bz2 \ run-readelf-loc.sh testfileloc.bz2 \ run-readelf-aranges.sh run-readelf-line.sh testfilefoobarbaz.bz2 \ + testfile-ppc64-min-instr.bz2 \ run-readelf-z.sh \ run-readelf-dwz-multi.sh libtestfile_multi_shared.so.bz2 \ testfile_multi.dwz.bz2 testfile_multi_main.bz2 \ diff --git a/tests/run-readelf-line.sh b/tests/run-readelf-line.sh index 32bcf9d..f93bf47 100755 --- a/tests/run-readelf-line.sh +++ b/tests/run-readelf-line.sh @@ -256,4 +256,93 @@ DWARF section [30] '.debug_line' at offset 0x15f6: EOF +# A .debug_line table with mininum instruction length > 1. +# +# = hello.c +# #include <stdio.h> +# +# int +# main (int argc, char **argv) +# { +# printf ("Hello, %s\n", (argc > 0 +# ? argv[1]: "World")); +# return 0; +# } +# +# clang version 5.0.1 (tags/RELEASE_501/final) +# Target: powerpc64-unknown-linux-gnu +# clang -g -O2 -o testfile-ppc64-min-instr hello.c +testfiles testfile-ppc64-min-instr + +testrun_compare ${abs_top_builddir}/src/readelf --debug-dump=line testfile-ppc64-min-instr <<\EOF + +DWARF section [29] '.debug_line' at offset 0xdf6: + +Table at offset 0: + + Length: 69 + DWARF version: 2 + Prologue length: 30 + Minimum instruction length: 4 + Maximum operations per instruction: 1 + Initial value if 'is_stmt': 1 + Line base: -5 + Line range: 14 + Opcode base: 13 + +Opcodes: + [ 1] 0 arguments + [ 2] 1 argument + [ 3] 1 argument + [ 4] 1 argument + [ 5] 1 argument + [ 6] 0 arguments + [ 7] 0 arguments + [ 8] 0 arguments + [ 9] 1 argument + [10] 0 arguments + [11] 0 arguments + [12] 1 argument + +Directory table: + +File name table: + Entry Dir Time Size Name + 1 0 0 0 hello.c + +Line number statements: + [ 28] extended opcode 2: set address to 0x100005a4 <main> + [ 33] special opcode 22: address+0 = 0x100005a4 <main>, line+4 = 5 + [ 34] set column to 27 + [ 36] set prologue end flag + [ 37] special opcode 19: address+0 = 0x100005a4 <main>, line+1 = 6 + [ 38] set column to 8 + [ 3a] special opcode 47: address+8 = 0x100005ac <main+0x8>, line+1 = 7 + [ 3b] set 'is_stmt' to 0 + [ 3c] advance line by constant -7 to 0 + [ 3e] special opcode 32: address+4 = 0x100005b0 <main+0xc>, line+0 = 0 + [ 3f] set column to 3 + [ 41] set 'is_stmt' to 1 + [ 42] special opcode 108: address+24 = 0x100005c8 <main+0x24>, line+6 = 6 + [ 43] special opcode 76: address+16 = 0x100005d8 <main+0x34>, line+2 = 8 + [ 44] advance address by 32 to 0x100005f8 + [ 46] extended opcode 1: end of sequence +EOF + +testrun_compare ${abs_top_builddir}/src/readelf --debug-dump=decodedline testfile-ppc64-min-instr <<\EOF + +DWARF section [29] '.debug_line' at offset 0xdf6: + + CU [b] hello.c + line:col SBPE* disc isa op address (Statement Block Prologue Epilogue *End) + /home/fedora/mjw/hello.c (mtime: 0, length: 0) + 5:0 S 0 0 0 0x00000000100005a4 <main> + 6:27 S P 0 0 0 0x00000000100005a4 <main> + 7:8 S 0 0 0 0x00000000100005ac <main+0x8> + 0:8 0 0 0 0x00000000100005b0 <main+0xc> + 6:3 S 0 0 0 0x00000000100005c8 <main+0x24> + 8:3 S 0 0 0 0x00000000100005d8 <main+0x34> + 8:3 S * 0 0 0 0x00000000100005f7 <main+0x53> + +EOF exit 0 diff --git a/tests/testfile-ppc64-min-instr.bz2 b/tests/testfile-ppc64-min-instr.bz2 new file mode 100755 index 0000000000000000000000000000000000000000..85bef57be5819daecec07592b3e5044c4ef4953f GIT binary patch literal 3106 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 literal 0 HcmV?d00001 -- 1.8.3.1