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

Reply via email to