[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 407115429b ("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
This commit is contained in:
Tom de Vries
2024-05-15 09:45:55 +02:00
parent 27f4c4bd19
commit 7e4f1f4bc7
4 changed files with 22 additions and 0 deletions

View 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"));

View File

@@ -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

View File

@@ -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

View 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 {