[gold commit] Add support for DWARF 5

Cary Coutant ccoutant@gmail.com
Fri Mar 19 21:02:59 GMT 2021


I've committed the following patch to add initial support for DWARF 5.
This should handle most DWARF 5 content found in .o files (i.e., not
in split-DWARF .dwo files).

Tested --gdb-index and line number handling with DWARF 5 debug info
and line number tables. Tested on x86_64 and aarch64 with GCC 10 and
GCC 11.

-cary


elfcpp:
        * dwarf.h (enum DW_LNCT): Add line number table content type codes.
        (enum DW_LINE_OPS): Reformat.
        (enum DW_LINE_EXTENDED_OPS): Reformat.
        (enum DW_CHILDREN): Reformat.
        (enum DW_RLE): Add range list entry types.
        (enum DW_SECT): Update values for DWARF 5.

gold:
        * dwarf_reader.cc (Dwarf_abbrev_table::do_get_abbrev): Handle
        DW_FORM_implicit_const.
        (Dwarf_ranges_table::read_ranges_table): Add version parameter;
        Adjust all callers.  Look for .debug_rnglists section if DWARF 5.
        (Dwarf_ranges_table::read_range_list_v5): New method.
        (Dwarf_die::read_attributes): Handle new DWARF 5 DW_FORM codes.
        (Dwarf_die::skip_attributes): Likewise.
        (Dwarf_info_reader::do_parse): Support DWARF 5 unit header format.
        (Dwarf_info_reader::read_3bytes_from_pointer): New method.
        (Sized_dwarf_line_info::Sized_dwarf_line_info): Initialize
        str_buffer_, str_buffer_start, reloc_map_, line_number_map_.
        Look for .debug_line_str section.
        (Sized_dwarf_line_info::read_header_prolog): Support DWARF 5 prolog.
        (Sized_dwarf_line_info::read_header_tables): Rename to...
        (Sized_dwarf_line_info::read_header_tables_v2): ... this.
        (Sized_dwarf_line_info::read_header_tables_v5): New method.
        (Sized_dwarf_line_info::process_one_opcode): Insert missing "this->".
        Change advance_line to signed int64_t.
        (Sized_dwarf_line_info::read_lines): Add endptr parameter; adjust
        callers.  Insert missing "this->".
        (Sized_dwarf_line_info::read_line_mappings): Support DWARF 5.
        (Sized_dwarf_line_info::do_addr2line): Add debug code.
        * dwarf_reader.h (Dwarf_abbrev_table::Attribute): Add implicit_const
        field. Adjust constructor.
        (Dwarf_abbrev_table::add_sttribute): Add implicit_const parameter.
        (Dwarf_ranges_table::read_ranges_table): Add version parameter.
        (Dwarf_ranges_table::read_range_list_v5): New method.
        (Dwarf_die): Remove unused attr_off field.
        (Dwarf_info_reader::Dwarf_info_reader): Initialize unit_type_ field.
        (Dwarf_info_reader::is_type_unit): New method.
        (Dwarf_info_reader::read_3bytes_from_pointer): New method.
        (Dwarf_info_reader::read_range_list): Call read_range_list_v5 for
        DWARF 5 range lists.
        (Dwarf_info_reader::is_type_unit_): Remove.
        (Dwarf_info_reader::unit_type_): New field.
        (Sized_dwarf_line_info::~Sized_dwarf_line_info): Delete
        str_buffer_start_.
        (Sized_dwarf_line_info::read_header_tables): Rename to...
        (Sized_dwarf_line_info::read_header_tables_v2): ... this.
        (Sized_dwarf_line_info::read_header_tables_v5): New method.
        (Sized_dwarf_line_info::read_lines): Add endptr parameter.
        (Sized_dwarf_line_info::Dwarf_line_infoHeader): Add address_size field.
        (Sized_dwarf_line_info::str_buffer_): New field.
        (Sized_dwarf_line_info::str_buffer_end_): New field.
        (Sized_dwarf_line_info::str_buffer_start_): New field.
        (Sized_dwarf_line_info::end_of_header_length_): New field.
        (Sized_dwarf_line_info::end_of_unit_): New field.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: dwarf5.patch
Type: application/octet-stream
Size: 45506 bytes
Desc: not available
URL: <https://sourceware.org/pipermail/binutils/attachments/20210319/245cb08f/attachment-0001.obj>


More information about the Binutils mailing list