https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115066
Bug ID: 115066 Summary: [debug, gsplit-dwarf, gdwarf-4, g3] DW_MACRO_define_strp used for debug_str_offsets index Product: gcc Version: 14.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: debug Assignee: unassigned at gcc dot gnu.org Reporter: vries at gcc dot gnu.org Target Milestone: --- Consider a hello world, compiled with split dwarf and dwarf version 4, and -g3 for macro info: ... $ gcc -gdwarf-4 -gsplit-dwarf /data/vries/hello.c -g3 -save-temps -dA ... In section .debug_macro.dwo, we have: ... .Ldebug_macro0: .value 0x4 # DWARF macro version number .byte 0x2 # Flags: 32-bit, lineptr present .long .Lskeleton_debug_line0 .byte 0x3 # Start new file .uleb128 0 # Included from line number 0 .uleb128 0x1 # file /data/vries/hello.c .byte 0x5 # Define macro strp .uleb128 0 # At line number 0 .uleb128 0x1d0 # The macro: "__STDC__ 1" ... So, given that we use a DW_MACRO_define_strp, we'd expect 0x1d0 to be an offset into a .debug_str section. However, in .debug_str.dwo we find: ... 0x000001d0 455f584f 50454e32 4b385853 49005345 E_XOPEN2K8XSI.SE ... In fact, 0x1d0 is an index into the string offset table in .debug_str_offsets.dwo: ... .long 0x34f0 # indexed string 0x1d0: __STDC__ 1 ... So, it looks like DW_MACRO_define_strx should have been used instead.