forked from Imagelibrary/binutils-gdb
[binutils/readelf] Fix handling of DW_MACRO_define_strx in dwo file
When printing a DW_MACRO_define_strx entry in a .debug_macro.dwo section, we run into: ... DW_MACRO_define_strx lineno : 0 macro : <no .debug_str_offsets section> ... Fix this in display_debug_macro by passing the correct dwo argument to a fetch_indexed_string call. That works fine for readelf -w, with with readelf -wm we have: ... DW_MACRO_define_strx lineno : 0 macro : <no .debug_str_offsets.dwo section> ... Fix this in display_debug_macro by doing load_debug_section_with_follow for str_dwo / str_index_dwo sections instead of str / str_index sections when handling .debug_macro.dwo. PR 31735
This commit is contained in:
@@ -6293,9 +6293,17 @@ display_debug_macro (struct dwarf_section *section,
|
|||||||
if (suffix && strcmp (suffix, ".dwo") == 0)
|
if (suffix && strcmp (suffix, ".dwo") == 0)
|
||||||
is_dwo = true;
|
is_dwo = true;
|
||||||
|
|
||||||
load_debug_section_with_follow (str, file);
|
if (is_dwo)
|
||||||
|
{
|
||||||
|
load_debug_section_with_follow (str_dwo, file);
|
||||||
|
load_debug_section_with_follow (str_index_dwo, file);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
load_debug_section_with_follow (str, file);
|
||||||
|
load_debug_section_with_follow (str_index, file);
|
||||||
|
}
|
||||||
load_debug_section_with_follow (line, file);
|
load_debug_section_with_follow (line, file);
|
||||||
load_debug_section_with_follow (str_index, file);
|
|
||||||
|
|
||||||
introduce (section, false);
|
introduce (section, false);
|
||||||
|
|
||||||
@@ -6504,7 +6512,7 @@ display_debug_macro (struct dwarf_section *section,
|
|||||||
READ_ULEB (lineno, curr, end);
|
READ_ULEB (lineno, curr, end);
|
||||||
READ_ULEB (offset, curr, end);
|
READ_ULEB (offset, curr, end);
|
||||||
string = (const unsigned char *)
|
string = (const unsigned char *)
|
||||||
fetch_indexed_string (offset, NULL, offset_size, false, 0);
|
fetch_indexed_string (offset, NULL, offset_size, is_dwo, 0);
|
||||||
if (op == DW_MACRO_define_strx)
|
if (op == DW_MACRO_define_strx)
|
||||||
printf (" DW_MACRO_define_strx ");
|
printf (" DW_MACRO_define_strx ");
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#name: readelf -ws readelf-debug-str-offsets-dw4
|
#name: readelf -wsm readelf-debug-str-offsets-dw4
|
||||||
#source: readelf-debug-str-offsets-dw4.s
|
#source: readelf-debug-str-offsets-dw4.s
|
||||||
#readelf: -ws
|
#readelf: -wsm
|
||||||
|
|
||||||
Contents of the .debug_str.dwo section:
|
Contents of the .debug_str.dwo section:
|
||||||
|
|
||||||
@@ -12,3 +12,10 @@ Contents of the .debug_str_offsets.dwo section:
|
|||||||
Index Offset \[String\]
|
Index Offset \[String\]
|
||||||
0 00000000 FIRST
|
0 00000000 FIRST
|
||||||
1 00000006 SECOND
|
1 00000006 SECOND
|
||||||
|
Contents of the .debug_macro.dwo section:
|
||||||
|
|
||||||
|
Offset: 0
|
||||||
|
Version: 4
|
||||||
|
Offset size: 4
|
||||||
|
|
||||||
|
DW_MACRO_define_strx lineno : 0 macro : FIRST
|
||||||
|
|||||||
@@ -4,3 +4,10 @@
|
|||||||
.section .debug_str_offsets.dwo,"MS",%progbits,1
|
.section .debug_str_offsets.dwo,"MS",%progbits,1
|
||||||
.4byte 0
|
.4byte 0
|
||||||
.4byte 6
|
.4byte 6
|
||||||
|
.section .debug_macro.dwo,"e",%progbits
|
||||||
|
.2byte 0x4 /* DWARF macro version number. */
|
||||||
|
.byte 0x0 /* Flags: 32-bit dwarf. */
|
||||||
|
.byte 0xb /* Define macro strx. */
|
||||||
|
.uleb128 0 /* At line number 0. */
|
||||||
|
.uleb128 0x0 /* .debug_str_offsets.dwo entry 0. */
|
||||||
|
.byte 0 /* End compilation unit. */
|
||||||
|
|||||||
Reference in New Issue
Block a user