Issue 150731.1: Add new TAG for skeleton units
Section Various, pg Various
This is an alternative proposal to 150702.1. If this
proposal fails, that earlier proposal should be reconsidered.
The earlier proposal attempts to simplify case analysis and
improve consistency of the various kinds of compilation and
type units by building on the existing unit_type field that
was added to compilation units and type units in DWARF V5.
This proposal also seeks to simplify case analysis but in a
different manner--by defining a new TAG (DW_TAG_skeleton_unit)
to be used for skeleton compilation units, instead of
reusing DW_TAG_compile_unit in an attribute dependent way.
Given a new TAG for skeleton units, for consistency we should
add a new unit type code to correspond to the new kind of unit.
(Some history on the origin of the unit type field is included
at the end, following this proposal.)
Note that this proposal does not distinguish between normal and
split variants of compilation and type units.
Proposal
--------
Changes:
- In Table 2.1, add new entry:
DW_TAG_skeleton_unit
- In S3.1.2/p62: In paragraph 1 change DW_TAG_compile_unit
to DW_TAG_skeleton_unit.
- In Table 7.2, add
DW_UT_skeleton 0x04
- In Table 7.3, add new entry (just above DW_TAG_lo_user)
DW_TAG_skeleton_unit <next available, ~0x5a>
- In 7.5.1.1, replace the second sentence of bullet 3
The value of this field is DW_UT_compile for a full compilation
unit, DW_UT_partial for a partial compilation unit, or
DW_UT_skeleton for a skeleton compilation unit.
- In Appendix A, p252, add
DW_TAG_skeleton_unit DW_AT_addr_base
DW_AT_comp_dir
DW_AT_dwo_id
DW_AT_dwo_name
DW_AT_high_pc
DW_AT_low_pc
DW_AT_ranges
DW_AT_ranges_base
DW_AT_stmt_list
DW_AT_str_offsets_base
DW_AT_use_UTF8
- In Appendix A, page 243: Remove DW_AT_dwo_name from the
entry for DW_AT_compile_unit.
- In Figure F.4, change DW_TAG_compile_unit to DW_TAG_skeleton_unit.
[end of proposal]
=================================================================
Some history regarding the unit_type field in .debug_info headers
When we adopted 130526.1, which merged type units back into
the .debug_info section (and eliminated the .debug_types section)
it was necessary to add a header field (unit_type) to be able
to distinguish the two kinds of units for parsing/scanning purposes.
130526.1 defined two cases, compilation units and type units, with
unit type codes 1 and 2, respectively. Type code 1 included both
DW_TAG_compile_unit and DW_TAG_partial_unit (recall skeleton/split
units did not exist then). We added type code 3 to cover partial
units, and defined names DW_UT_compile, DW_UT_type, and DW_UT_partial
respectively.
--
05/17/2016 - Withdrawn (see 160108.1).