335 lines · plain
1## Test that DWARFv5 address attributes and address expression operands2## are handled correctly, specifically:3## 1. DW_FORM_addrx is correctly recognized and converted into the DW_FORM_addr4## in --garbage-collection case or correctly preserved in --no-garbage-collection case.5## 2. DW_OP_addrx is correctly recognized and converted into the DW_OP_addr6## in --garbage-collection case or correctly preserved in --no-garbage-collection case.7## 3. DW_OP_constx is correctly recognized and converted into the DW_OP_const[*]u8## in --garbage-collection case or correctly preserved in --no-garbage-collection case.9 10# RUN: yaml2obj %s -o %t.o11 12# RUN: llvm-dwarfutil %t.o %t113# RUN: llvm-dwarfdump -verify %t1 | FileCheck %s14# RUN: llvm-dwarfdump -a --verbose %t1 | FileCheck %s --check-prefix DWARF-CHECK15 16# RUN: llvm-dwarfutil --linker parallel %t.o %t117# RUN: llvm-dwarfdump -verify %t1 | FileCheck %s18# RUN: llvm-dwarfdump -a --verbose %t1 | FileCheck %s --check-prefix DWARF-CHECK19 20# RUN: llvm-dwarfutil --no-garbage-collection %t.o %t121# RUN: llvm-dwarfdump -verify %t1 | FileCheck %s22# RUN: llvm-dwarfdump -a --verbose %t1 | FileCheck %s --check-prefix UPD-DWARF-CHECK23 24# RUN: llvm-dwarfutil --linker parallel --no-garbage-collection %t.o %t125# RUN: llvm-dwarfdump -verify %t1 | FileCheck %s26# RUN: llvm-dwarfdump -a --verbose %t1 | FileCheck %s --check-prefix UPD-DWARF-CHECK27 28# RUN: llvm-dwarfutil --no-garbage-collection --build-accelerator=DWARF %t.o %t129# RUN: llvm-dwarfdump -verify %t1 | FileCheck %s30# RUN: llvm-dwarfdump -a --verbose %t1 | FileCheck %s --check-prefix UPD-DWARF-CHECK31 32# RUN: llvm-dwarfutil --linker parallel --no-garbage-collection --build-accelerator=DWARF %t.o %t133# RUN: llvm-dwarfdump -verify %t1 | FileCheck %s34# RUN: llvm-dwarfdump -a --verbose %t1 | FileCheck %s --check-prefix UPD-DWARF-CHECK35 36#CHECK: No errors.37 38#DWARF-CHECK: DW_TAG_compile_unit39#DWARF-CHECK: DW_AT_name [DW_FORM_strx] {{.*}} "CU1"40#DWARF-CHECK: DW_AT_low_pc [DW_FORM_addrx] (indexed (00000000) address = 0x0000000000001130)41#DWARF-CHECK: DW_AT_high_pc [DW_FORM_data8] (0x0000000000000060)42#DWARF-CHECK: DW_AT_str_offsets_base [DW_FORM_sec_offset]43#DWARF-CHECK: DW_TAG_subprogram44#DWARF-CHECK: DW_AT_name [DW_FORM_strx] {{.*}} "foo1"45#DWARF-CHECK: DW_AT_low_pc [DW_FORM_addrx] (indexed (00000000) address = 0x0000000000001130)46#DWARF-CHECK: DW_AT_high_pc [DW_FORM_data8] (0x0000000000000010)47#DWARF-CHECK: DW_TAG_subprogram48#DWARF-CHECK: DW_AT_name [DW_FORM_strx] {{.*}} "foo2"49#DWARF-CHECK: DW_AT_low_pc [DW_FORM_addrx] (indexed (00000001) address = 0x0000000000001140)50#DWARF-CHECK: DW_AT_high_pc [DW_FORM_data8] (0x0000000000000010)51#DWARF-CHECK: DW_TAG_subprogram52#DWARF-CHECK: DW_AT_name [DW_FORM_strx] {{.*}} "foo3"53#DWARF-CHECK: DW_AT_low_pc [DW_FORM_addrx] (indexed (00000002) address = 0x0000000000001150)54#DWARF-CHECK: DW_AT_high_pc [DW_FORM_data8] (0x0000000000000010)55#DWARF-CHECK: DW_TAG_subprogram56#DWARF-CHECK: DW_AT_name [DW_FORM_strx] {{.*}} "foo4"57#DWARF-CHECK: DW_AT_low_pc [DW_FORM_addrx] (indexed (00000003) address = 0x0000000000001160)58#DWARF-CHECK: DW_AT_high_pc [DW_FORM_data8] (0x0000000000000010)59#DWARF-CHECK: DW_TAG_subprogram60#DWARF-CHECK: DW_AT_name [DW_FORM_strx] {{.*}} "foo5"61#DWARF-CHECK: DW_AT_low_pc [DW_FORM_addrx] (indexed (00000004) address = 0x0000000000001170)62#DWARF-CHECK: DW_AT_high_pc [DW_FORM_data8] (0x0000000000000010)63#DWARF-CHECK: DW_TAG_subprogram64#DWARF-CHECK: DW_AT_name [DW_FORM_strx] {{.*}} "foo6"65#DWARF-CHECK: DW_AT_low_pc [DW_FORM_addrx] (indexed (00000005) address = 0x0000000000001180)66#DWARF-CHECK: DW_AT_high_pc [DW_FORM_data8] (0x0000000000000010)67#DWARF-CHECK: DW_TAG_variable68#DWARF-CHECK: DW_AT_name [DW_FORM_strx] {{.*}} "var1"69#DWARF-CHECK: DW_AT_location [DW_FORM_exprloc] (DW_OP_addr 0x2000)70#DWARF-CHECK: DW_TAG_variable71#DWARF-CHECK: DW_AT_name [DW_FORM_strx] {{.*}} "var2"72#DWARF-CHECK: DW_AT_location [DW_FORM_exprloc] (DW_OP_addr 0x2000)73#DWARF-CHECK: DW_TAG_variable74#DWARF-CHECK: DW_AT_name [DW_FORM_strx] {{.*}} "var3"75#DWARF-CHECK: DW_AT_location [DW_FORM_exprloc] (DW_OP_const8u 0x2000, DW_OP_form_tls_address)76#DWARF-CHECK: DW_TAG_variable77#DWARF-CHECK: DW_AT_name [DW_FORM_strx] {{.*}} "var4"78#DWARF-CHECK: DW_AT_location [DW_FORM_exprloc] (DW_OP_const8u 0x2000, DW_OP_form_tls_address)79#DWARF-CHECK=NOT: .debug_addr contents:80 81#UPD-DWARF-CHECK: DW_TAG_compile_unit82#UPD-DWARF-CHECK: DW_AT_name {{.*}}"CU1"83#UPD-DWARF-CHECK: DW_AT_low_pc [DW_FORM_addrx] (indexed (00000000) address = 0x0000000000001130)84#UPD-DWARF-CHECK: DW_AT_high_pc [DW_FORM_data8] (0x0000000000000060)85#UPD-DWARF-CHECK: DW_TAG_subprogram86#UPD-DWARF-CHECK: DW_AT_name {{.*}}"foo1"87#UPD-DWARF-CHECK: DW_AT_low_pc [DW_FORM_addrx] (indexed (00000000) address = 0x0000000000001130)88#UPD-DWARF-CHECK: DW_AT_high_pc [DW_FORM_data8] (0x0000000000000010)89#UPD-DWARF-CHECK: DW_TAG_subprogram90#UPD-DWARF-CHECK: DW_AT_name {{.*}}"foo2"91#UPD-DWARF-CHECK: DW_AT_low_pc [DW_FORM_addrx] (indexed (00000001) address = 0x0000000000001140)92#UPD-DWARF-CHECK: DW_AT_high_pc [DW_FORM_data8] (0x0000000000000010)93#UPD-DWARF-CHECK: DW_TAG_subprogram94#UPD-DWARF-CHECK: DW_AT_name {{.*}}"foo3"95#UPD-DWARF-CHECK: DW_AT_low_pc [DW_FORM_addrx] (indexed (00000002) address = 0x0000000000001150)96#UPD-DWARF-CHECK: DW_AT_high_pc [DW_FORM_data8] (0x0000000000000010)97#UPD-DWARF-CHECK: DW_TAG_subprogram98#UPD-DWARF-CHECK: DW_AT_name {{.*}}"foo4"99#UPD-DWARF-CHECK: DW_AT_low_pc [DW_FORM_addrx1] (indexed (00000003) address = 0x0000000000001160)100#UPD-DWARF-CHECK: DW_AT_high_pc [DW_FORM_data8] (0x0000000000000010)101#UPD-DWARF-CHECK: DW_TAG_subprogram102#UPD-DWARF-CHECK: DW_AT_name {{.*}}"foo5"103#UPD-DWARF-CHECK: DW_AT_low_pc [DW_FORM_addrx2] (indexed (00000004) address = 0x0000000000001170)104#UPD-DWARF-CHECK: DW_AT_high_pc [DW_FORM_data8] (0x0000000000000010)105#UPD-DWARF-CHECK: DW_TAG_subprogram106#UPD-DWARF-CHECK: DW_AT_name {{.*}}"foo6"107#UPD-DWARF-CHECK: DW_AT_low_pc [DW_FORM_addrx4] (indexed (00000005) address = 0x0000000000001180)108#UPD-DWARF-CHECK: DW_AT_high_pc [DW_FORM_data8] (0x0000000000000010)109#UPD-DWARF-CHECK: DW_TAG_variable110#UPD-DWARF-CHECK: DW_AT_name {{.*}}"var1"111#UPD-DWARF-CHECK: DW_AT_location [DW_FORM_exprloc] (DW_OP_addrx 0x6)112#UPD-DWARF-CHECK: DW_TAG_variable113#UPD-DWARF-CHECK: DW_AT_name {{.*}}"var2"114#UPD-DWARF-CHECK: DW_AT_location [DW_FORM_exprloc] (DW_OP_addr 0x2000)115#UPD-DWARF-CHECK: DW_TAG_variable116#UPD-DWARF-CHECK: DW_AT_name {{.*}}"var3"117#UPD-DWARF-CHECK: DW_AT_location [DW_FORM_exprloc] (DW_OP_constx 0x6, DW_OP_form_tls_address)118#UPD-DWARF-CHECK: DW_TAG_variable119#UPD-DWARF-CHECK: DW_AT_name {{.*}}"var4"120#UPD-DWARF-CHECK: DW_AT_location [DW_FORM_exprloc] (DW_OP_const8u 0x2000, DW_OP_form_tls_address)121#UPD-DWARF-CHECK: .debug_addr contents:122#UPD-DWARF-CHECK: 0x00000000: Address table header: length = 0x0000003c, format = DWARF32, version = 0x0005, addr_size = 0x08, seg_size = 0x00123#UPD-DWARF-CHECK: Addrs: [124#UPD-DWARF-CHECK: 0x0000000000001130125#UPD-DWARF-CHECK: 0x0000000000001140126#UPD-DWARF-CHECK: 0x0000000000001150127#UPD-DWARF-CHECK: 0x0000000000001160128#UPD-DWARF-CHECK: 0x0000000000001170129#UPD-DWARF-CHECK: 0x0000000000001180130#UPD-DWARF-CHECK: 0x0000000000002000131#UPD-DWARF-CHECK: ]132 133--- !ELF134FileHeader:135 Class: ELFCLASS64136 Data: ELFDATA2LSB137 Type: ET_REL138 Machine: EM_X86_64139Sections:140 - Name: .text141 Type: SHT_PROGBITS142 Flags: [ SHF_ALLOC, SHF_EXECINSTR ]143 Address: 0x1130144 Size: 0x1000145DWARF:146 debug_abbrev:147 - Table:148 - Tag: DW_TAG_compile_unit149 Children: DW_CHILDREN_yes150 Attributes:151 - Attribute: DW_AT_producer152 Form: DW_FORM_string153 - Attribute: DW_AT_language154 Form: DW_FORM_data2155 - Attribute: DW_AT_name156 Form: DW_FORM_string157 - Attribute: DW_AT_low_pc158 Form: DW_FORM_addrx159 - Attribute: DW_AT_high_pc160 Form: DW_FORM_data8161 - Attribute: DW_AT_addr_base162 Form: DW_FORM_sec_offset163 - Tag: DW_TAG_subprogram164 Children: DW_CHILDREN_yes165 Attributes:166 - Attribute: DW_AT_name167 Form: DW_FORM_string168 - Attribute: DW_AT_low_pc169 Form: DW_FORM_addrx170 - Attribute: DW_AT_high_pc171 Form: DW_FORM_data8172 - Attribute: DW_AT_type173 Form: DW_FORM_ref4174 - Tag: DW_TAG_subprogram175 Children: DW_CHILDREN_yes176 Attributes:177 - Attribute: DW_AT_name178 Form: DW_FORM_string179 - Attribute: DW_AT_low_pc180 Form: DW_FORM_addrx1181 - Attribute: DW_AT_high_pc182 Form: DW_FORM_data8183 - Attribute: DW_AT_type184 Form: DW_FORM_ref4185 - Tag: DW_TAG_subprogram186 Children: DW_CHILDREN_yes187 Attributes:188 - Attribute: DW_AT_name189 Form: DW_FORM_string190 - Attribute: DW_AT_low_pc191 Form: DW_FORM_addrx2192 - Attribute: DW_AT_high_pc193 Form: DW_FORM_data8194 - Attribute: DW_AT_type195 Form: DW_FORM_ref4196 - Tag: DW_TAG_subprogram197 Children: DW_CHILDREN_yes198 Attributes:199 - Attribute: DW_AT_name200 Form: DW_FORM_string201 - Attribute: DW_AT_low_pc202 Form: DW_FORM_addrx4203 - Attribute: DW_AT_high_pc204 Form: DW_FORM_data8205 - Attribute: DW_AT_type206 Form: DW_FORM_ref4207 - Tag: DW_TAG_base_type208 Children: DW_CHILDREN_no209 Attributes:210 - Attribute: DW_AT_name211 Form: DW_FORM_string212 - Tag: DW_TAG_variable213 Children: DW_CHILDREN_no214 Attributes:215 - Attribute: DW_AT_name216 Form: DW_FORM_string217 - Attribute: DW_AT_type218 Form: DW_FORM_ref4219 - Attribute: DW_AT_location220 Form: DW_FORM_exprloc221 debug_info:222 - Version: 5223 UnitType: DW_UT_compile224 Entries:225 - AbbrCode: 1226 Values:227 - CStr: by_hand228 - Value: 0x04229 - CStr: CU1230 - Value: 0x0231 - Value: 0x60232 - Value: 0x8233 - AbbrCode: 2234 Values:235 - CStr: foo1236 - Value: 0x0237 - Value: 0x10238 - Value: 0xa4239 - AbbrCode: 0240 - AbbrCode: 2241 Values:242 - CStr: foo2243 - Value: 0x01244 - Value: 0x10245 - Value: 0xa4246 - AbbrCode: 0247 - AbbrCode: 2248 Values:249 - CStr: foo3250 - Value: 0x02251 - Value: 0x10252 - Value: 0xa4253 - AbbrCode: 0254 - AbbrCode: 3255 Values:256 - CStr: foo4257 - Value: 0x03258 - Value: 0x10259 - Value: 0xa4260 - AbbrCode: 0261 - AbbrCode: 4262 Values:263 - CStr: foo5264 - Value: 0x04265 - Value: 0x10266 - Value: 0xa4267 - AbbrCode: 0268 - AbbrCode: 5269 Values:270 - CStr: foo6271 - Value: 0x05272 - Value: 0x10273 - Value: 0xa4274 - AbbrCode: 0275 - AbbrCode: 6276 Values:277 - CStr: int278 - AbbrCode: 7279 Values:280 - CStr: var1281 - Value: 0xa4282 - BlockData:283 - 0xa1284 - 0x6285 - AbbrCode: 7286 Values:287 - CStr: var2288 - Value: 0xa4289 - BlockData:290 - 0x03291 - 0x00292 - 0x20293 - 0x00294 - 0x00295 - 0x00296 - 0x00297 - 0x00298 - 0x00299 - AbbrCode: 7300 Values:301 - CStr: var3302 - Value: 0xa4303 - BlockData:304 - 0xa2305 - 0x6306 - 0x9b307 - AbbrCode: 7308 Values:309 - CStr: var4310 - Value: 0xa4311 - BlockData:312 - 0x0e313 - 0x00314 - 0x20315 - 0x00316 - 0x00317 - 0x00318 - 0x00319 - 0x00320 - 0x00321 - 0x9b322 - AbbrCode: 0323 debug_addr:324 - Version: 5325 AddressSize: 0x08326 Entries:327 - Address: 0x1130328 - Address: 0x1140329 - Address: 0x1150330 - Address: 0x1160331 - Address: 0x1170332 - Address: 0x1180333 - Address: 0x2000334...335