On Sat, Apr 28, 2018 at 05:23:12PM +0200, Mark Wielaard wrote:
> GNU DebugFission didn't add table headers for the .debug_addr
> tables, but DWARF5 does. The table header make it possible
> for a DWARF consumer to parse the address tables without having
> to index all .debug_info CUs first. We can keep using the
> .debug_addr section label as is, because the DW_AT_addr_base
> attribute points at the actual address index, which starts
> right after the table header. So the label is generated at
> the correct location whether the header is added first or not.
> 
> gcc/ChangeLog
> 
>       * dwarf2out.c (dwarf2out_finish): Add .debug_addr table header for
>       dwarf_version >= 5.
> 
> diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c
> index d3d925d..51d0ca4 100644
> --- a/gcc/dwarf2out.c
> +++ b/gcc/dwarf2out.c
> @@ -31293,6 +31293,21 @@ dwarf2out_finish (const char *)
>       }
>  
>        switch_to_section (debug_addr_section);
> +      /* GNU DebugFission didn't have a header for .debug_addr.  */
> +      if (dwarf_version >= 5)
> +     {
> +       unsigned long addrs_length =
> +         addr_index_table->elements () * DWARF2_ADDR_SIZE + 4;

No = at the end of line, it should be at the start of the next line, i.e.
          unsigned long addrs_length
            = addr_index_table->elements () * DWARF2_ADDR_SIZE + 4;

> +
> +       if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
> +         dw2_asm_output_data (4, 0xffffffff,
> +                              "Escape value for 64-bit DWARF extension");
> +       dw2_asm_output_data (DWARF_OFFSET_SIZE, addrs_length,
> +                            "Length of Address Unit");
> +       dw2_asm_output_data (2, 5, "DWARF addr version");
> +       dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Size of Address");
> +       dw2_asm_output_data (1, 0, "Size of Segment Descriptor");
> +     }
>        ASM_OUTPUT_LABEL (asm_out_file, debug_addr_section_label);
>        output_addr_table ();
>      }

Shouldn't we together with the addition of the .debug_addr section header
also switch to using DW_AT_addr_base rather than DW_AT_GNU_addr_base, i.e.
add DW_AT_addr_base into dwarf_AT and use dwarf_AT (DW_AT_addr_base)
instead of DW_AT_GNU_addr_base?

        Jakub

Reply via email to