1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201
|
## Test that DWARFv5 .debug_loclists is correctly recognized
## and converted into the DW_FORM_sec_offset form in --garbage-collection
## case or correctly preserved in --no-garbage-collection case.
# RUN: yaml2obj %s -o %t.o
# RUN: llvm-dwarfutil %t.o %t1
# RUN: llvm-dwarfdump -verify %t1 | FileCheck %s
# RUN: llvm-dwarfdump -a --verbose %t1 | FileCheck %s --check-prefix DWARF-CHECK
# RUN: llvm-dwarfutil --no-garbage-collection %t.o %t1
# RUN: llvm-dwarfdump -verify %t1 | FileCheck %s
# RUN: llvm-dwarfdump -a --verbose %t1 | FileCheck %s --check-prefix UPD-DWARF-CHECK
# RUN: llvm-dwarfutil --no-garbage-collection --build-accelerator=DWARF %t.o %t1
# RUN: llvm-dwarfdump -verify %t1 | FileCheck %s
# RUN: llvm-dwarfdump -a --verbose %t1 | FileCheck %s --check-prefix UPD-DWARF-CHECK
#CHECK: No errors.
#DWARF-CHECK: DW_TAG_compile_unit
#DWARF-CHECK: DW_AT_name {{.*}}"CU1"
#DWARF-CHECK-NOT: DW_AT_loclists_base
#DWARF-CHECK: DW_TAG_variable
#DWARF-CHECK: DW_AT_name {{.*}}"var1"
#DWARF-CHECK: DW_AT_location [DW_FORM_sec_offset] (0x0000000c:
#DWARF-CHECK: [0x0000000000001130, 0x0000000000001140): DW_OP_reg5 RDI)
#DWARF-CHECK: DW_AT_name {{.*}}"var2"
#DWARF-CHECK: DW_AT_location [DW_FORM_sec_offset] (0x00000014:
#DWARF-CHECK: <default>: DW_OP_reg5 RDI)
#DWARF-CHECK: DW_TAG_variable
#DWARF-CHECK: DW_AT_name {{.*}}"var3"
#DWARF-CHECK: DW_AT_location [DW_FORM_sec_offset] (0x00000018:
#DWARF-CHECK: [0x0000000000001140, 0x0000000000001150): DW_OP_reg5 RDI
#DWARF-CHECK: [0x0000000000001160, 0x0000000000001170): DW_OP_reg6 RBP)
#UPD-DWARF-CHECK: DW_TAG_compile_unit
#UPD-DWARF-CHECK: DW_AT_name {{.*}}"CU1"
#UPD-DWARF-CHECK: DW_AT_loclists_base [DW_FORM_sec_offset] (0x0000000c)
#UPD-DWARF-CHECK: DW_TAG_variable
#UPD-DWARF-CHECK: DW_AT_name {{.*}}"var1"
#UPD-DWARF-CHECK: DW_AT_location [DW_FORM_loclistx] (indexed (0x0) loclist = 0x00000018:
#UPD-DWARF-CHECK: [0x0000000000001130, 0x0000000000001140): DW_OP_reg5 RDI)
#UPD-DWARF-CHECK: DW_TAG_variable
#UPD-DWARF-CHECK: DW_AT_name {{.*}}"var2"
#UPD-DWARF-CHECK: DW_AT_location [DW_FORM_loclistx] (indexed (0x1) loclist = 0x0000001e:
#UPD-DWARF-CHECK: <default>: DW_OP_reg5 RDI)
#UPD-DWARF-CHECK: DW_TAG_variable
#UPD-DWARF-CHECK: DW_AT_name {{.*}}"var3"
#UPD-DWARF-CHECK: DW_AT_location [DW_FORM_loclistx] (indexed (0x2) loclist = 0x00000022:
#UPD-DWARF-CHECK: [0x0000000000001140, 0x0000000000001150): DW_OP_reg5 RDI
#UPD-DWARF-CHECK: [0x0000000000001160, 0x0000000000001170): DW_OP_reg6 RBP)
## Following yaml description has Content of the .debug_rnglists exactly like following data vvvvvvvvvvv
## .debug_rnglists contents:
## 0x00000000: range list header: length = 0x0000003e, format = DWARF32, version = 0x0005, addr_size = 0x08, seg_size = 0x00, offset_entry_count = 0x00000005
## offsets: [
## 0x00000014 => 0x00000020
## 0x00000018 => 0x00000024
## 0x0000001c => 0x00000028
## 0x00000027 => 0x00000033
## 0x00000032 => 0x0000003e
## ]
## ranges:
## 0x00000020: [DW_RLE_startx_length]: 0x0000000000000000, 0x0000000000000010 => [0x0000000000001130, 0x0000000000001140)
## 0x00000023: [DW_RLE_end_of_list ]
## 0x00000024: [DW_RLE_startx_length]: 0x0000000000000001, 0x0000000000000010 => [0x0000000000001140, 0x0000000000001150)
## 0x00000027: [DW_RLE_end_of_list ]
## 0x00000028: [DW_RLE_start_length ]: 0x0000000000001150, 0x0000000000000010 => [0x0000000000001150, 0x0000000000001160)
## 0x00000032: [DW_RLE_end_of_list ]
## 0x00000033: [DW_RLE_start_length ]: 0x0000000000001160, 0x0000000000000010 => [0x0000000000001160, 0x0000000000001170)
## 0x0000003d: [DW_RLE_end_of_list ]
## 0x0000003e: [DW_RLE_startx_length]: 0x0000000000000000, 0x0000000000000040 => [0x0000000000001130, 0x0000000000001170)
## 0x00000041: [DW_RLE_end_of_list ]
## Following yaml description has Content of the .debug_loclists exactly like following data vvvvvvvvvvv
## .debug_loclists contents:
## 0x00000000: locations list header: length = 0x00000029, format = DWARF32, version = 0x0005, addr_size = 0x08, seg_size = 0x00, offset_entry_count = 0x00000003
## offsets: [
## 0x0000000c => 0x00000018
## 0x00000012 => 0x0000001e
## 0x00000016 => 0x00000022
## ]
## 0x00000018:
## DW_LLE_startx_length (0x0000000000000000, 0x0000000000000010): DW_OP_reg5 RDI
## DW_LLE_end_of_list ()
##
## 0x0000001e:
## DW_LLE_default_location()
## => <default>: DW_OP_reg5 RDI
## DW_LLE_end_of_list ()
##
## 0x00000022:
## DW_LLE_startx_length (0x0000000000000001, 0x0000000000000010): DW_OP_reg5 RDI
## DW_LLE_startx_length (0x0000000000000003, 0x0000000000000010): DW_OP_reg6 RBP
## DW_LLE_end_of_list ()
--- !ELF
FileHeader:
Class: ELFCLASS64
Data: ELFDATA2LSB
Type: ET_REL
Machine: EM_X86_64
Sections:
- Name: .text
Type: SHT_PROGBITS
Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
Address: 0x1130
Size: 0x70
- Name: .debug_rnglists
Type: SHT_PROGBITS
Flags: [ ]
Content: "3e000000050008000500000014000000180000001c000000270000003200000003001000030110000750110000000000001000076011000000000000100003004000"
- Name: .debug_loclists
Type: SHT_PROGBITS
Flags: [ ]
Content: "2900000005000800030000000c0000001200000016000000030010015500050155000301100155030310015600"
DWARF:
debug_abbrev:
- Table:
- Tag: DW_TAG_compile_unit
Children: DW_CHILDREN_yes
Attributes:
- Attribute: DW_AT_producer
Form: DW_FORM_string
- Attribute: DW_AT_language
Form: DW_FORM_data2
- Attribute: DW_AT_name
Form: DW_FORM_string
- Attribute: DW_AT_low_pc
Form: DW_FORM_addrx
- Attribute: DW_AT_ranges
Form: DW_FORM_rnglistx
- Attribute: DW_AT_rnglists_base
Form: DW_FORM_sec_offset
- Attribute: DW_AT_loclists_base
Form: DW_FORM_sec_offset
- Attribute: DW_AT_addr_base
Form: DW_FORM_sec_offset
- Tag: DW_TAG_base_type
Children: DW_CHILDREN_no
Attributes:
- Attribute: DW_AT_name
Form: DW_FORM_string
- Tag: DW_TAG_variable
Children: DW_CHILDREN_no
Attributes:
- Attribute: DW_AT_name
Form: DW_FORM_string
- Attribute: DW_AT_const_value
Form: DW_FORM_data4
- Attribute: DW_AT_type
Form: DW_FORM_ref_addr
- Attribute: DW_AT_location
Form: DW_FORM_loclistx
debug_info:
- Version: 5
UnitType: DW_UT_compile
Entries:
- AbbrCode: 1
Values:
- CStr: by_hand
- Value: 0x04
- CStr: CU1
- Value: 0x0
- Value: 0x4
- Value: 0xc
- Value: 0xc
- Value: 0x8
- AbbrCode: 2
Values:
- CStr: int
- AbbrCode: 3
Values:
- CStr: var1
- Value: 0x00000000
- Value: 0x00000029
- Value: 0x0
- AbbrCode: 3
Values:
- CStr: var2
- Value: 0x00000000
- Value: 0x00000029
- Value: 0x1
- AbbrCode: 3
Values:
- CStr: var3
- Value: 0x00000000
- Value: 0x00000029
- Value: 0x2
- AbbrCode: 0
debug_addr:
- Version: 5
AddressSize: 0x08
Entries:
- Address: 0x1130
- Address: 0x1140
- Address: 0x1150
- Address: 0x1160
...
|