]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
[binutils/readelf] Fix printing of dwarf4 .debug_str_offsets.dwo
authorTom de Vries <tdevries@suse.de>
Wed, 15 May 2024 07:45:55 +0000 (09:45 +0200)
committerTom de Vries <tdevries@suse.de>
Wed, 15 May 2024 07:45:55 +0000 (09:45 +0200)
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

binutils/dwarf.c
binutils/testsuite/binutils-all/readelf-debug-str-offsets-dw4.d [new file with mode: 0644]
binutils/testsuite/binutils-all/readelf-debug-str-offsets-dw4.s [new file with mode: 0644]
binutils/testsuite/binutils-all/readelf.exp

index c5ccc50dae78fed1a8c4ae8d1716436bae33ba8a..8125c64e1b6665fd27b685d4032dd5f595eb17b0 100644 (file)
@@ -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 (file)
index 0000000..23581e7
--- /dev/null
@@ -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 (file)
index 0000000..108f260
--- /dev/null
@@ -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
index 09ed75f8761c5b0aadaf1d378c20dcd8e027ca7b..9f20cb4281218b1b43c2891173c978edd71f413c 100644 (file)
@@ -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 {