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). 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