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.
  
