Bug 27440

Summary: [dwz, dwarf5] Add --dwarf-5 flag to generate .debug_sup, ref_sup and strp_sup
Product: dwz Reporter: Mark Wielaard <mark>
Component: defaultAssignee: Nobody <nobody>
Status: RESOLVED FIXED    
Severity: normal CC: dwz, jakub, tromey
Priority: P2    
Version: unspecified   
Target Milestone: ---   
URL: https://sourceware.org/pipermail/dwz/2021q1/000930.html
Host: Target:
Build: Last reconfirmed:
Bug Depends on:    
Bug Blocks: 24726    

Description Mark Wielaard 2021-02-19 11:43:28 UTC
Currently the dwz multi-files are really DWARF4 + GNU extensions. Since the format and references were formalized in the DWARF5 spec as DWARF Supplementary Object Files (DWARF5 section 7.3.6) it would be nice to have a way to generate this format with a --dwarf-5 flag:

- Use DW_FORM_ref_sup[48] and DW_FORM_strp_sup instead of
  DW_FORM_GNU_ref_alt and DW_FORM_GNU_strp_alt

- Generate .debug_sup section (standardized variant of .gnu_debugaltlink)
Comment 1 Tom Tromey 2021-02-21 00:09:01 UTC
I found out today that gdb doesn't support these forms.
It also doesn't know about .debug_sup.
Comment 2 Jakub Jelinek 2021-02-21 00:29:11 UTC
I think no consumer does, because nothing was producing that.
Which is why it is produced under non-default switch now, so that consumers can be adapted and perhaps in 6 months or 12 months we can switch the default (in that case probably only if there were DWARF 5 CUs present, at least some).
Comment 3 Tom Tromey 2021-02-21 23:19:42 UTC
I sent a gdb patch to handle this.
https://sourceware.org/pipermail/gdb-patches/2021-February/176508.html
Comment 4 Mark Wielaard 2021-02-26 23:26:28 UTC
commit 4e55da9f7700dda5936c7a486651674dbc782a7e
Author: Jakub Jelinek <jakub@redhat.com>
Date:   Sat Feb 20 10:47:53 2021 +0100

    PR27440 - add --dwarf-5 support
    
    This adds --dwarf-5 support, so that dwz can emit standard DWARF 5
    Supplementary object files with .debug_sup section and debug info referring
    to those with .debug_sup section instead of .gnu.debugaltlink and standard
    DWARF 5 DW_FORM_*sup instead of the DW_FORM_GNU_*alt forms.
    
            * dwz.1: Document --dwarf-5 and -5 options.
            * dwz.c (enum debug_section_kind): Add DEBUG_SUP.
            (debug_sections): Add .debug_sup section entry.
            (multifile_name, multifile_relative): Adjust comment.
            (dwarf_5): New variable.
            (note_strp_offset2): Adjust function comment.  If dwarf_5, return
            DW_FORM_strp_sup instead of DW_FORM_GNU_strp_alt.
            (macro_eq, read_macro, optimize_write_macro, handle_macro): Use
            standard DWARF 5 DW_MACRO_* names instead of their DW_MACRO_GNU_*
            aliases.
            (write_macro): Likewise.  Handle DW_FORM_strp_sup.
            (build_abbrevs_for_die): If dwarf_5, use DW_FORM_ref_sup4 instead of
            DW_FORM_GNU_ref_alt.
            (write_unit_die): Handle DW_FORM_strp_sup.
            (write_die): Handle DW_FORM_ref_sup4 and DW_FORM_strp_sup.
            (read_dwarf): Fail if .debug_sup section is present, unless
            rd_multifile in dwarf_5 mode.
            (dwz): Write .debug_sup section instead of .gnu.debugaltlink if
            dwarf_5.
            (optimize_multifile): Write .debug_sup section instead of
            .note.gnu.build-id.
            (dwz_options): Add --dwarf-5 and -5 options.
            (dwz_multi_file_options_help): Mention .debug_sup section in -M
            description.  Add --dwarf-5 description.
            (main): Handle --dwarf-5 and -5 options.