This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] Remove padding from DWARF5 headers


OK.

On Tue, Jan 3, 2017 at 6:09 PM, Jakub Jelinek <jakub@redhat.com> wrote:
> Hi!
>
> http://dwarfstd.org/ShowIssue.php?issue=161031.2
> got approved today, so DWARF5 is changing and the various DW_UT_* kinds
> will no longer have the same size of the headers.  So,
> DW_UT_compile/DW_UT_partial shrinks by 12/16 bytes (padding 1 and padding 2
> is removed; 16 bytes for 64-bit DWARF), DW_UT_type remains the same,
> DW_UT_skeleton/DW_UT_split_compile shrink by 4/8 bytes (padding 2 is
> removed).  For DW_UT_* kinds consumers don't understand, the first 3 fields
> (length, version and ut kind) are required to be present and the only
> sensible action is to skip the whole unit (using length field).
>
> Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?
>
> Jan/Mark, are you going to adjust GDB/elfutils etc. correspondingly?
>
> 2017-01-03  Jakub Jelinek  <jakub@redhat.com>
>
>         * dwarf2out.c (DWARF_COMPILE_UNIT_HEADER_SIZE): For DWARF5 decrease
>         by 12.
>         (DWARF_COMDAT_TYPE_UNIT_HEADER_SIZE): Always
>         DWARF_COMPILE_UNIT_HEADER_SIZE plus 12.
>         (DWARF_COMPILE_UNIT_SKELETON_HEADER_SIZE): Define.
>         (calc_base_type_die_sizes): Use DWARF_COMPILE_UNIT_SKELETON_HEADER_SIZE
>         for initial die_offset if dwarf_split_debug_info.
>         (output_comp_unit): Use DWARF_COMPILE_UNIT_SKELETON_HEADER_SIZE for
>         initial next_die_offset if dwo_id is non-NULL.  Don't emit padding
>         fields.
>         (output_skeleton_debug_sections): Formatting fix.  Use
>         DWARF_COMPILE_UNIT_SKELETON_HEADER_SIZE instead of
>         DWARF_COMPILE_UNIT_HEADER_SIZE.  Don't emit padding.
>
> --- gcc/dwarf2out.c.jj  2017-01-03 16:04:17.000000000 +0100
> +++ gcc/dwarf2out.c     2017-01-03 19:41:45.526194592 +0100
> @@ -2996,14 +2996,16 @@ skeleton_chain_node;
>  /* Fixed size portion of the DWARF compilation unit header.  */
>  #define DWARF_COMPILE_UNIT_HEADER_SIZE \
>    (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE                       \
> -   + (dwarf_version >= 5                                               \
> -      ? 4 + DWARF_TYPE_SIGNATURE_SIZE + DWARF_OFFSET_SIZE : 3))
> +   + (dwarf_version >= 5 ? 4 : 3))
>
>  /* Fixed size portion of the DWARF comdat type unit header.  */
>  #define DWARF_COMDAT_TYPE_UNIT_HEADER_SIZE \
>    (DWARF_COMPILE_UNIT_HEADER_SIZE                                      \
> -   + (dwarf_version >= 5                                               \
> -      ? 0 : DWARF_TYPE_SIGNATURE_SIZE + DWARF_OFFSET_SIZE))
> +   + DWARF_TYPE_SIGNATURE_SIZE + DWARF_OFFSET_SIZE)
> +
> +/* Fixed size portion of the DWARF skeleton compilation unit header.  */
> +#define DWARF_COMPILE_UNIT_SKELETON_HEADER_SIZE \
> +  (DWARF_COMPILE_UNIT_HEADER_SIZE + (dwarf_version >= 5 ? 8 : 0))
>
>  /* Fixed size portion of public names info.  */
>  #define DWARF_PUBNAMES_HEADER_SIZE (2 * DWARF_OFFSET_SIZE + 2)
> @@ -9044,7 +9046,9 @@ calc_die_sizes (dw_die_ref die)
>  static void
>  calc_base_type_die_sizes (void)
>  {
> -  unsigned long die_offset = DWARF_COMPILE_UNIT_HEADER_SIZE;
> +  unsigned long die_offset = (dwarf_split_debug_info
> +                             ? DWARF_COMPILE_UNIT_SKELETON_HEADER_SIZE
> +                             : DWARF_COMPILE_UNIT_HEADER_SIZE);
>    unsigned int i;
>    dw_die_ref base_type;
>  #if ENABLE_ASSERT_CHECKING
> @@ -10302,7 +10306,9 @@ output_comp_unit (dw_die_ref die, int ou
>    delete extern_map;
>
>    /* Initialize the beginning DIE offset - and calculate sizes/offsets.  */
> -  next_die_offset = DWARF_COMPILE_UNIT_HEADER_SIZE;
> +  next_die_offset = (dwo_id
> +                    ? DWARF_COMPILE_UNIT_SKELETON_HEADER_SIZE
> +                    : DWARF_COMPILE_UNIT_HEADER_SIZE);
>    calc_die_sizes (die);
>
>    oldsym = die->die_id.die_symbol;
> @@ -10330,12 +10336,6 @@ output_comp_unit (dw_die_ref die, int ou
>        if (dwo_id != NULL)
>         for (int i = 0; i < 8; i++)
>           dw2_asm_output_data (1, dwo_id[i], i == 0 ? "DWO id" : NULL);
> -      else
> -       /* Hope all the padding will be removed for DWARF 5 final for
> -          DW_AT_compile and DW_AT_partial.  */
> -       dw2_asm_output_data (8, 0, "Padding 1");
> -
> -      dw2_asm_output_data (DWARF_OFFSET_SIZE, 0, "Padding 2");
>      }
>    output_die (die);
>
> @@ -10430,10 +10430,11 @@ output_skeleton_debug_sections (dw_die_r
>       header.  */
>    if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
>      dw2_asm_output_data (4, 0xffffffff,
> -      "Initial length escape value indicating 64-bit DWARF extension");
> +                        "Initial length escape value indicating 64-bit "
> +                        "DWARF extension");
>
>    dw2_asm_output_data (DWARF_OFFSET_SIZE,
> -                       DWARF_COMPILE_UNIT_HEADER_SIZE
> +                      DWARF_COMPILE_UNIT_SKELETON_HEADER_SIZE
>                         - DWARF_INITIAL_LENGTH_SIZE
>                         + size_of_die (comp_unit),
>                        "Length of Compilation Unit Info");
> @@ -10449,12 +10450,8 @@ output_skeleton_debug_sections (dw_die_r
>    if (dwarf_version < 5)
>      dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Pointer Size (in bytes)");
>    else
> -    {
> -      for (int i = 0; i < 8; i++)
> -       dw2_asm_output_data (1, dwo_id[i], i == 0 ? "DWO id" : NULL);
> -
> -      dw2_asm_output_data (DWARF_OFFSET_SIZE, 0, "Padding 2");
> -    }
> +    for (int i = 0; i < 8; i++)
> +      dw2_asm_output_data (1, dwo_id[i], i == 0 ? "DWO id" : NULL);
>
>    comp_unit->die_abbrev = SKELETON_COMP_DIE_ABBREV;
>    output_die (comp_unit);
>
>         Jakub


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]