aboutsummaryrefslogtreecommitdiff
path: root/binutils
diff options
context:
space:
mode:
authorTom de Vries <tdevries@suse.de>2024-05-15 09:45:55 +0200
committerTom de Vries <tdevries@suse.de>2024-05-15 09:45:55 +0200
commit7e4f1f4bc7ffe26524a6eb0685bd22863cdfde1e (patch)
tree98b6876e7486c33461003830f32102a3617c3b13 /binutils
parent27f4c4bd1987980e86cc4e8468aaeb0d0ad7ada8 (diff)
downloadgdb-7e4f1f4bc7ffe26524a6eb0685bd22863cdfde1e.zip
gdb-7e4f1f4bc7ffe26524a6eb0685bd22863cdfde1e.tar.gz
gdb-7e4f1f4bc7ffe26524a6eb0685bd22863cdfde1e.tar.bz2
[binutils/readelf] Fix printing of dwarf4 .debug_str_offsets.dwo
When compiling a hello world with dwarf4 split dwarf: ... $ gcc -gdwarf-4 -gsplit-dwarf hello.c -save-temps -dA ... we have in a-hello.s these three initial entries in .debug_str_offsets: ... .section .debug_str_offsets.dwo,"e",@progbits .4byte 0 // indexed string 0x0: short int .4byte 0xa // indexed string 0x1: /home/vries/binutils .4byte 0x1f // indexed string 0x2: main ... but "readelf -ws a.out" starts at the third entry: ... Contents of the .debug_str_offsets.dwo section (loaded from a-hello.dwo): Length: 0x30 Index Offset [String] 0 00000000 main ... This is a regression since commit 407115429b3 ("Modified changes for split-dwarf and dwarf-5."), which introduced a variable debug_str_offsets_hdr_len in display_debug_str_offsets. Fix this by setting display_debug_str_offsets to 0 for the dwarf4 case. PR 31734
Diffstat (limited to 'binutils')
-rw-r--r--binutils/dwarf.c1
-rw-r--r--binutils/testsuite/binutils-all/readelf-debug-str-offsets-dw4.d14
-rw-r--r--binutils/testsuite/binutils-all/readelf-debug-str-offsets-dw4.s6
-rw-r--r--binutils/testsuite/binutils-all/readelf.exp1
4 files changed, 22 insertions, 0 deletions
diff --git a/binutils/dwarf.c b/binutils/dwarf.c
index c5ccc50..8125c64 100644
--- a/binutils/dwarf.c
+++ b/binutils/dwarf.c
@@ -7969,6 +7969,7 @@ display_debug_str_offsets (struct dwarf_section *section,
length = section->size;
curr = section->start;
entries_end = end;
+ debug_str_offsets_hdr_len = 0;
printf (_(" Length: %#" PRIx64 "\n"), length);
printf (_(" Index Offset [String]\n"));
diff --git a/binutils/testsuite/binutils-all/readelf-debug-str-offsets-dw4.d b/binutils/testsuite/binutils-all/readelf-debug-str-offsets-dw4.d
new file mode 100644
index 0000000..23581e7
--- /dev/null
+++ b/binutils/testsuite/binutils-all/readelf-debug-str-offsets-dw4.d
@@ -0,0 +1,14 @@
+#name: readelf -ws readelf-debug-str-offsets-dw4
+#source: readelf-debug-str-offsets-dw4.s
+#readelf: -ws
+
+Contents of the .debug_str.dwo section:
+
+ 0x00000000 46495253 54005345 434f4e44 00 FIRST.SECOND.
+
+Contents of the .debug_str_offsets.dwo section:
+
+ Length: 0x8
+ Index Offset \[String\]
+ 0 00000000 FIRST
+ 1 00000006 SECOND
diff --git a/binutils/testsuite/binutils-all/readelf-debug-str-offsets-dw4.s b/binutils/testsuite/binutils-all/readelf-debug-str-offsets-dw4.s
new file mode 100644
index 0000000..108f260
--- /dev/null
+++ b/binutils/testsuite/binutils-all/readelf-debug-str-offsets-dw4.s
@@ -0,0 +1,6 @@
+ .section .debug_str.dwo,"MS",%progbits,1
+ .asciz "FIRST"
+ .asciz "SECOND"
+ .section .debug_str_offsets.dwo,"MS",%progbits,1
+ .4byte 0
+ .4byte 6
diff --git a/binutils/testsuite/binutils-all/readelf.exp b/binutils/testsuite/binutils-all/readelf.exp
index 09ed75f..9f20cb4 100644
--- a/binutils/testsuite/binutils-all/readelf.exp
+++ b/binutils/testsuite/binutils-all/readelf.exp
@@ -402,6 +402,7 @@ if {[which $AS] != 0} then {
run_dump_test "retain1b"
run_dump_test "readelf-maskos-1a"
run_dump_test "readelf-maskos-1b"
+ run_dump_test "readelf-debug-str-offsets-dw4"
if {![istarget *-*-hpux*]} then {
run_dump_test pr26548
if {![binutils_assemble_flags $srcdir/$subdir/pr26548.s tmpdir/pr26548e.o {--defsym ERROR=1}]} then {