https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101431

--- Comment #5 from Richard Biener <rguenth at gcc dot gnu.org> ---
(In reply to Richard Biener from comment #4)
> > cat tmp/t.c
> void foo(int i) {}
> > gcc-11 -g -o tmp/t.o tmp/t.c -c
> 
> and the DWARF ends up
> 
>  <0><c>: Abbrev Number: 1 (DW_TAG_compile_unit)
>     <d>   DW_AT_producer    : (indirect string, offset: 0x0): GNU C17 11.1.1
> 20210428 -mtune=generic -march=x86-64 -g
>     <11>   DW_AT_language    : 29       (C11)
>     <12>   DW_AT_name        : (indirect line string, offset: 0x0): tmp/t.c
>     <16>   DW_AT_comp_dir    : (indirect line string, offset: 0x8): /
>     <1a>   DW_AT_low_pc      : 0x0
>     <22>   DW_AT_high_pc     : 0xa
>     <2a>   DW_AT_stmt_list   : 0x0
> 
> ...
>  The Directory Table (offset 0x22, lines 2, columns 1):
>   Entry Name
>   0     (indirect line string, offset: 0xa): tmp
>   1     (indirect line string, offset: 0xe): tmp
> 
>  The File Name Table (offset 0x30, lines 2, columns 2):
>   Entry Dir     Name
>   0     0       (indirect line string, offset: 0x12): tmp/t.c
>   1     1       (indirect line string, offset: 0x1a): t.c
> 
> I suspect this is because of how GCC and gas together end up producing
> .debug_line - we have
> 
>         .file   "t.c"
>         .text
> ...
> foo:
> .LFB0:
>         .file 1 "tmp/t.c"
> ...
>         .section        .debug_line,"",@progbits
> .Ldebug_line0:
>         .file 0 "/" "tmp/t.c"
> 
> but this .file 0 ends up taking the place of comp-dir and it also
> ends up duplicating the file entry for t.c unnecessarily.  I'm not
> familiar with how the DWARF5 stuff was set up so I hope somebody
> else can have a look.
> 
> Note the referenced testcase in github uses -gsplit-dwarf.

This was with binutils 2.36.1 and GCC configured against that.

Reply via email to