mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-22 18:54:02 +01:00
afc5a59902
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
77 lines
3.3 KiB
ArmAsm
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
|