2019-07-26.
This is just a compilation of information in the DWARF5
standard. Nothing new here. It pulls together mention of
DW_UT and DW_TAG and section names and how DIE signatures
relate to one another.
Expanding on Appendix B, DW5
Sec 3.1 unit entries
full compilation unit
partial compilation unit
type unit
skeleton compilation unit
Ignoring sup (supplementary object file section) sections.
Referencing: see Appendix E, page 367 line 23
and Chapter 7, reference, page 217..
DW_FORM_ref_sig8 (8 byte signature)
DW_FORM_ref_addr (.debug_info[.dwo] offset
in same .debug_info[.dwo])
(special rules apply for relocations and section
groups to make this work. Appendix E.1.2.3)
If the target is outside the current .debug_info it is up
to relocations and object symbols and possibly run-time
relocation to make that work.
DW_OP_call_ref expression operator is like DW_FORM_ref_addr
(but not relevant here).
Normal DWARF Section Relationships
Dwarf5 Section 3
DW_UT_compile
DW_TAG_compile_unit
No type signature in header.
DW_AT_signature refers to a type_unit CU via
DW_FORM_ref_sig8
DW4:If DW_AT_GNU_dwo_id here it refers to DW_UT_type
signature? Or some other header DW_AT_GNU_dwo_id?
In section .debug_info
Normal DWARF adding type unit.
DW_UT_type
These are usually used to allow space compression
and duplicate elimination.
These must not exist as a split CU.
DW_TAG_type_unit
DW5: has CU header signature
DW_AT_signature refers to a type unit via
DW_FORM_ref_sig8. DW5 section 2.13.2
DW4: DW_AT_GNU_dwo_id (need to check)
DW4: .debug_types
DW5: .debug_info
Normal DWARF adding partial. New in DW5
DW_UT_partial
These must not exist as a split CU.
These are part of space compression and duplicate elimination
techniqes fro Appendix E.1
DW_TAG_partial_unit
Can have DW_AT_signature to refer to type units.
Can have FORM_ref_sig8 in other ways to refer
to type units.
No type signature in header.
.debug_info
Split Dwarf
Here the intent is to have most of the DWARF of an executable
in a separate object file (Package Files)and a smaller amount
in the main executable, though all the sections can be in
the same object file or executable.
These sections have no relocations In a Package File there
will be signature lookup sections .debug_cu_index
and .debug_tu_index .
New in DW5 with GNU cc in DW4 using
DW_AT_GNU_dwo_id, following a draft version of DW5.
In DW4 gcc places types in .debug_types.dwo split
DW_UT_skeleton
Skeleton CU A:
DW5: DW_TAG_skeleton_unit
DW5: DW_AT_signature refers to a type unit via
DW_FORM_ref_sig8. DW5 section 2.13.2
DW4: DW_TAG_compile_unit in .debug_info,
DW_AT_GNU_dwo_id in CU Die,
and the CU_die has no children.
DW4: DW_TAG_type_unit in .debug_types,
DW_AT_GNU_dwo_id in CU Die,
and the CU_die has no children.
DW5: has CU header signature .debug_info
DW_UT_split_compile
Split CU for A:
DW_TAG_compile_unit
DW5: has CU header signature
DW4:If DW_AT_GNU_dwo_id, target of some
.debug_info skeleton unit
DW5: .debug_info.dwo
DW_UT_split_type
DW5: DW_TAG_type_unit
DW5: .debug_info.dwo
DW5: has CU header signature
DW4: If DW_AT_GNU_dwo_id, target of some
thing elsewhere, .debug_info or .debug_types
or .debug_info.dwo or .debug_types.dwo.
DW4: in .debug_types.dwo, a target.