On Thu, Sep 12, 2024 at 11:08 AM Jakub Jelinek <ja...@redhat.com> wrote:
> On Thu, Sep 12, 2024 at 10:52:33AM -0700, David Blaikie via Dwarf-discuss > wrote: > > Looks probably like a bug in GCC and best discussed in their forum? > (clang > > seems to produce the macro in the macinfo if you compile with > > `-fdebug-macro` (& you have to put some emitted entity (like a function > > definition) in the file before Clang will produce any debug info for the > > file)) > > GCC emits that the .debug_macro snippets from headers (in chunks > uninterrupted by inclusion of other headers) in .debug_macro comdat > sections > with wm4.0.6147fde142b63cfbd46fc3f1300479b2 etc. comdat groups and it is > just the linker which merges stuff back (and gets rid of redundancies). > Oooh, fascinating. Certainly llvm-dwarfdump has explicit support for sections it expects to be fragmented (multiple sections with the same name, for comdat purposes, etc) - and so llvm-dwarfdump certainly wouldn't dump this correctly (probably ignores all but the first section named `.debug_macro`) from an object file (of course in a linked executable, none of this still exists so it should be fine). > > So say for > /tmp/1.h > #define MAC4 > #define MAC5 1 > /tmp/1.c > #define MAC1 2 > #define MAC2 3 > #include "/tmp/1.h" > #define MAC3 4 > int main () { return 0; } > gcc -O2 -g3 -c -o /tmp/1.o /tmp/1.c > gcc -o /tmp/1 /tmp/1.o > readelf -WS /tmp/1.o | grep debug_macro > [18] .debug_macro PROGBITS 0000000000000000 0001a4 00002c > 00 0 0 1 > [19] .rela.debug_macro RELA 0000000000000000 003548 000090 > 18 I 31 18 8 > [20] .debug_macro PROGBITS 0000000000000000 0001d0 000934 > 00 G 0 0 1 > [21] .rela.debug_macro RELA 0000000000000000 0035d8 0024c0 > 18 IG 31 20 8 > [22] .debug_macro PROGBITS 0000000000000000 000b04 000010 > 00 G 0 0 1 > [23] .rela.debug_macro RELA 0000000000000000 005a98 000030 > 18 IG 31 22 8 > there are 2 extra .debug_macro sections in comdat groups, and then in the > resulting binary one has: > readelf -wm /tmp/1 > Contents of the .debug_macro section: > > Offset: 0x0 > Version: 5 > Offset size: 4 > Offset into .debug_line: 0x0 > > DW_MACRO_import - offset : 0x2c > DW_MACRO_start_file - lineno: 0 filenum: 1 > DW_MACRO_define_strp - lineno : 1 macro : MAC1 2 > DW_MACRO_define_strp - lineno : 2 macro : MAC2 3 > DW_MACRO_start_file - lineno: 3 filenum: 2 > DW_MACRO_import - offset : 0x960 > DW_MACRO_end_file > DW_MACRO_define_strp - lineno : 4 macro : MAC3 4 > DW_MACRO_end_file > ... > Offset: 0x960 > Version: 5 > Offset size: 4 > > DW_MACRO_define_strp - lineno : 1 macro : MAC4 > DW_MACRO_define_strp - lineno : 2 macro : MAC5 1 > > Left out the chunk at 0x2c, that is for predefined macros, for > showing how it works that is just a clutter. > > Jakub > >
-- Dwarf-discuss mailing list Dwarf-discuss@lists.dwarfstd.org https://lists.dwarfstd.org/mailman/listinfo/dwarf-discuss