1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-25 20:23:11 +01:00
llvm-mirror/test/DebugInfo/X86/dwp-v5-tu.s
Igor Kudrin afc5a59902 [DebugInfo] Fix reading DWARFv5 type units in DWP.
In DWARFv5, type units are stored in .debug_info sections, along with
compilation units, and they are distinguished by the unit_type field
in the header, not by the name of the section. It is impossible to
associate the correct index section of a DWP file with the unit before
the unit's header is read. This patch fixes reading DWARFv5 type units
by parsing the header first and then applying the index entry according
to the actual unit type.

Differential Revision: https://reviews.llvm.org/D77552
2020-04-08 12:50:58 +07:00

77 lines
3.3 KiB
ArmAsm

## The test checks that we can read DWARFv5 type units in DWP files.
# RUN: llvm-mc -triple x86_64-unknown-linux %s -filetype=obj -o - | \
# RUN: llvm-dwarfdump -debug-info - | \
# RUN: FileCheck %s
# CHECK: .debug_info.dwo contents:
# CHECK: Type Unit:
# CHECK: DW_TAG_type_unit
# CHECK-NEXT: DW_AT_visibility (DW_VIS_local)
# CHECK: DW_TAG_structure_type
# CHECK-NEXT: DW_AT_name ("foo")
.section .debug_abbrev.dwo, "e", @progbits
## Reserve some space in the section so that the abbreviation table for the type
## unit does not start at the beginning of the section and thus the base offset
## from the index section should be added to find the correct offset.
.space 16
.LAbbrevBegin:
.uleb128 1 # Abbrev code
.uleb128 0x41 # DW_TAG_type_unit
.byte 1 # DW_CHILDREN_yes
.uleb128 0x17 # DW_AT_visibility
.uleb128 0x0b # DW_FORM_data1
.byte 0 # EOM(1)
.byte 0 # EOM(2)
.uleb128 2 # Abbrev code
.uleb128 0x13 # DW_TAG_structure_type
.byte 0 # DW_CHILDREN_no
.uleb128 0x03 # DW_AT_name
.uleb128 0x08 # DW_FORM_string
.byte 0 # EOM(1)
.byte 0 # EOM(2)
.byte 0 # EOM(3)
.LAbbrevEnd:
.section .debug_info.dwo, "e", @progbits
.LTUBegin:
.long .LTUEnd-.LTUVersion # Length of Unit
.LTUVersion:
.short 5 # DWARF version number
.byte 6 # DW_UT_split_type
.byte 8 # Address Size (in bytes)
.long 0 # Offset Into Abbrev. Section
.quad 0x1100001122222222 # Type Signature
.long .LTUType-.LTUBegin # Type offset
.uleb128 1 # Abbrev [1] DW_TAG_type_unit
.byte 1 # DW_AT_visibility
.LTUType:
.uleb128 2 # Abbrev [2] DW_TAG_structure_type
.asciz "foo" # DW_AT_name
.LTUEnd:
.section .debug_tu_index, "", @progbits
## Header:
.short 5 # Version
.space 2 # Padding
.long 2 # Section count
.long 1 # Unit count
.long 2 # Slot count
## Hash Table of Signatures:
.quad 0x1100001122222222
.quad 0
## Parallel Table of Indexes:
.long 1
.long 0
## Table of Section Offsets:
## Row 0:
.long 1 # DW_SECT_INFO
.long 3 # DW_SECT_ABBREV
## Row 1:
.long 0 # Offset in .debug_info.dwo
.long .LAbbrevBegin-.debug_abbrev.dwo # Offset in .debug_abbrev.dwo
## Table of Section Sizes:
.long .LTUEnd-.LTUBegin # Size in .debug_info.dwo
.long .LAbbrevEnd-.LAbbrevBegin # Size in .debug_abbrev.dwo