288 lines · plain
1## Test that DWARFv5 .debug_rnglists is correctly recognized2## and converted into the DW_FORM_sec_offset form in --garbage-collection3## case or correctly preserved in --no-garbage-collection case.4 5# RUN: yaml2obj %s -o %t.o6 7# RUN: llvm-dwarfutil %t.o %t18# RUN: llvm-dwarfdump -verify %t1 | FileCheck %s9# RUN: llvm-dwarfdump -a --verbose %t1 | FileCheck %s --check-prefix DWARF-CHECK10 11# RUN: llvm-dwarfutil --linker parallel %t.o %t112# RUN: llvm-dwarfdump -verify %t1 | FileCheck %s13# RUN: llvm-dwarfdump -a --verbose %t1 | FileCheck %s --check-prefix DWARF-CHECK14 15# RUN: llvm-dwarfutil --no-garbage-collection %t.o %t116# RUN: llvm-dwarfdump -verify %t1 | FileCheck %s17# RUN: llvm-dwarfdump -a --verbose %t1 | FileCheck %s --check-prefix UPD-DWARF-CHECK18 19# RUN: llvm-dwarfutil --linker parallel --no-garbage-collection %t.o %t120# RUN: llvm-dwarfdump -verify %t1 | FileCheck %s21# RUN: llvm-dwarfdump -a --verbose %t1 | FileCheck %s --check-prefix UPD-DWARF-CHECK22 23# RUN: llvm-dwarfutil --no-garbage-collection --build-accelerator=DWARF %t.o %t124# RUN: llvm-dwarfdump -verify %t1 | FileCheck %s25# RUN: llvm-dwarfdump -a --verbose %t1 | FileCheck %s --check-prefix UPD-DWARF-CHECK26 27# RUN: llvm-dwarfutil --linker parallel --no-garbage-collection --build-accelerator=DWARF %t.o %t128# RUN: llvm-dwarfdump -verify %t1 | FileCheck %s29# RUN: llvm-dwarfdump -a --verbose %t1 | FileCheck %s --check-prefix UPD-DWARF-CHECK30 31#CHECK: No errors.32 33#DWARF-CHECK: DW_TAG_compile_unit34#DWARF-CHECK: DW_AT_name [DW_FORM_strx] {{.*}} "CU1"35#DWARF-CHECK: DW_AT_low_pc [DW_FORM_addrx] (indexed (00000000) address = 0x0000000000001130)36#DWARF-CHECK: DW_AT_ranges [DW_FORM_sec_offset] (0x[[CURANGE_OFF:[0-9a-f]*]]37#DWARF-CHECK: [0x0000000000001130, 0x0000000000001170))38#DWARF-CHECK: DW_AT_str_offsets_base [DW_FORM_sec_offset]39#DWARF-CHECK: DW_TAG_subprogram40#DWARF-CHECK: DW_AT_name [DW_FORM_strx] {{.*}} "foo1"41#DWARF-CHECK: DW_AT_low_pc [DW_FORM_addrx] (indexed (00000000) address = 0x0000000000001130)42#DWARF-CHECK: DW_AT_high_pc [DW_FORM_data8] (0x0000000000000010)43#DWARF-CHECK: DW_TAG_lexical_block44#DWARF-CHECK: DW_AT_ranges [DW_FORM_sec_offset] (0x[[F1RANGE_OFF:[0-9a-f]*]]45#DWARF-CHECK: [0x0000000000001130, 0x0000000000001140))46#DWARF-CHECK: DW_TAG_subprogram47#DWARF-CHECK: DW_AT_name [DW_FORM_strx] {{.*}} "foo2"48#DWARF-CHECK: DW_AT_low_pc [DW_FORM_addrx] (indexed (00000001) address = 0x0000000000001140)49#DWARF-CHECK: DW_AT_high_pc [DW_FORM_data8] (0x0000000000000010)50#DWARF-CHECK: DW_TAG_lexical_block51#DWARF-CHECK: DW_AT_ranges [DW_FORM_sec_offset] (0x[[F2RANGE_OFF:[0-9a-f]*]]52#DWARF-CHECK: [0x0000000000001140, 0x0000000000001150))53#DWARF-CHECK: DW_TAG_subprogram54#DWARF-CHECK: DW_AT_name [DW_FORM_strx] {{.*}} "foo3"55#DWARF-CHECK: DW_AT_low_pc [DW_FORM_addrx] (indexed (00000002) address = 0x0000000000001150)56#DWARF-CHECK: DW_AT_high_pc [DW_FORM_data8] (0x0000000000000010)57#DWARF-CHECK: DW_TAG_lexical_block58#DWARF-CHECK: DW_AT_ranges [DW_FORM_sec_offset] (0x[[F3RANGE_OFF:[0-9a-f]*]]59#DWARF-CHECK: [0x0000000000001150, 0x0000000000001160))60#DWARF-CHECK: DW_TAG_subprogram61#DWARF-CHECK: DW_AT_name [DW_FORM_strx] {{.*}} "foo4"62#DWARF-CHECK: DW_AT_low_pc [DW_FORM_addrx] (indexed (00000003) address = 0x0000000000001160)63#DWARF-CHECK: DW_AT_high_pc [DW_FORM_data8] (0x0000000000000010)64#DWARF-CHECK: DW_TAG_lexical_block65#DWARF-CHECK: DW_AT_ranges [DW_FORM_sec_offset] (0x[[F4RANGE_OFF:[0-9a-f]*]]66#DWARF-CHECK: [0x0000000000001160, 0x0000000000001170))67#DWARF-CHECK: .debug_aranges contents:68#DWARF-CHECK: Address Range Header: length = 0x0000002c, format = DWARF32, version = 0x0002, cu_offset = 0x000000{{00|21}}, addr_size = 0x08, seg_size = 0x0069#DWARF-CHECK: [0x0000000000001130, 0x0000000000001170)70#DWARF-CHECK: .debug_addr contents:71#DWARF-CHECK: 0x00000000: Address table header: length = 0x00000024, format = DWARF32, version = 0x0005, addr_size = 0x08, seg_size = 0x0072#DWARF-CHECK: Addrs: [73#DWARF-CHECK: 0x000000000000113074#DWARF-CHECK: 0x000000000000114075#DWARF-CHECK: 0x000000000000115076#DWARF-CHECK: 0x000000000000116077#DWARF-CHECK: ]78#DWARF-CHECK: .debug_rnglists contents:79#DWARF-CHECK: 0x00000000: range list header: length = 0x00000026, format = DWARF32, version = 0x0005, addr_size = 0x08, seg_size = 0x00, offset_entry_count = 0x0000000080#DWARF-CHECK: ranges:81#DWARF-CHECK: 0x[[F1RANGE_OFF]]: [DW_RLE_base_addressx]: 0x000000000000000082#DWARF-CHECK: {{.}}: [DW_RLE_offset_pair ]: 0x0000000000000000, 0x000000000000001083#DWARF-CHECK: {{.}}: [DW_RLE_end_of_list ]84#DWARF-CHECK: 0x[[F2RANGE_OFF]]: [DW_RLE_base_addressx]: 0x000000000000000185#DWARF-CHECK: {{.}}: [DW_RLE_offset_pair ]: 0x0000000000000000, 0x000000000000001086#DWARF-CHECK: {{.}}: [DW_RLE_end_of_list ]87#DWARF-CHECK: 0x[[F3RANGE_OFF]]: [DW_RLE_base_addressx]: 0x000000000000000288#DWARF-CHECK: {{.}}: [DW_RLE_offset_pair ]: 0x0000000000000000, 0x000000000000001089#DWARF-CHECK: {{.}}: [DW_RLE_end_of_list ]90#DWARF-CHECK: 0x[[F4RANGE_OFF]]: [DW_RLE_base_addressx]: 0x000000000000000391#DWARF-CHECK: {{.}}: [DW_RLE_offset_pair ]: 0x0000000000000000, 0x000000000000001092#DWARF-CHECK: {{.}}: [DW_RLE_end_of_list ]93#DWARF-CHECK 0x[[CURANGE_OFF]]: [DW_RLE_base_addressx]: 0x000000000000000094#DWARF-CHECK: {{.}}: [DW_RLE_offset_pair ]: 0x0000000000000000, 0x000000000000004095#DWARF-CHECK: {{.}}: [DW_RLE_end_of_list ]96 97#UPD-DWARF-CHECK: DW_TAG_compile_unit98#UPD-DWARF-CHECK: DW_AT_name {{.*}}"CU1"99#UPD-DWARF-CHECK: DW_AT_low_pc [DW_FORM_addrx] (indexed (00000000) address = 0x0000000000001130)100#UPD-DWARF-CHECK: DW_AT_ranges [DW_FORM_rnglistx] (indexed (0x4) rangelist = 0x0000003e101#UPD-DWARF-CHECK: [0x0000000000001130, 0x0000000000001170))102#UPD-DWARF-CHECK: DW_TAG_subprogram103#UPD-DWARF-CHECK: DW_AT_name {{.*}}"foo1"104#UPD-DWARF-CHECK: DW_AT_low_pc [DW_FORM_addrx] (indexed (00000000) address = 0x0000000000001130) 105#UPD-DWARF-CHECK: DW_AT_high_pc [DW_FORM_data8] (0x0000000000000010)106#UPD-DWARF-CHECK: DW_TAG_lexical_block107#UPD-DWARF-CHECK: DW_AT_ranges [DW_FORM_rnglistx] (indexed (0x0) rangelist = 0x00000020108#UPD-DWARF-CHECK: [0x0000000000001130, 0x0000000000001140))109#UPD-DWARF-CHECK: DW_TAG_subprogram110#UPD-DWARF-CHECK: DW_AT_name {{.*}}"foo2"111#UPD-DWARF-CHECK: DW_AT_low_pc [DW_FORM_addrx] (indexed (00000001) address = 0x0000000000001140) 112#UPD-DWARF-CHECK: DW_AT_high_pc [DW_FORM_data8] (0x0000000000000010)113#UPD-DWARF-CHECK: DW_TAG_lexical_block114#UPD-DWARF-CHECK: DW_AT_ranges [DW_FORM_rnglistx] (indexed (0x1) rangelist = 0x00000024115#UPD-DWARF-CHECK: [0x0000000000001140, 0x0000000000001150))116#UPD-DWARF-CHECK: DW_TAG_subprogram117#UPD-DWARF-CHECK: DW_AT_name {{.*}}"foo3"118#UPD-DWARF-CHECK: DW_AT_low_pc [DW_FORM_addrx] (indexed (00000002) address = 0x0000000000001150) 119#UPD-DWARF-CHECK: DW_AT_high_pc [DW_FORM_data8] (0x0000000000000010)120#UPD-DWARF-CHECK: DW_TAG_lexical_block121#UPD-DWARF-CHECK: DW_AT_ranges [DW_FORM_sec_offset] (0x00000028122#UPD-DWARF-CHECK: [0x0000000000001150, 0x0000000000001160))123#UPD-DWARF-CHECK: DW_TAG_subprogram124#UPD-DWARF-CHECK: DW_AT_name {{.*}}"foo4"125#UPD-DWARF-CHECK: DW_AT_low_pc [DW_FORM_addrx] (indexed (00000003) address = 0x0000000000001160)126#UPD-DWARF-CHECK: DW_AT_high_pc [DW_FORM_data8] (0x0000000000000010)127#UPD-DWARF-CHECK: DW_TAG_lexical_block128#UPD-DWARF-CHECK: DW_AT_ranges [DW_FORM_sec_offset] (0x00000033129#UPD-DWARF-CHECK: [0x0000000000001160, 0x0000000000001170))130#UPD-DWARF-CHECK: .debug_addr contents:131#UPD-DWARF-CHECK: 0x00000000: Address table header: length = 0x00000024, format = DWARF32, version = 0x0005, addr_size = 0x08, seg_size = 0x00132#UPD-DWARF-CHECK: Addrs: [133#UPD-DWARF-CHECK: 0x0000000000001130134#UPD-DWARF-CHECK: 0x0000000000001140135#UPD-DWARF-CHECK: 0x0000000000001150136#UPD-DWARF-CHECK: 0x0000000000001160137#UPD-DWARF-CHECK: ]138#UPD-DWARF-CHECK: .debug_rnglists contents:139#UPD-DWARF-CHECK: 0x00000000: range list header: length = 0x0000003e, format = DWARF32, version = 0x0005, addr_size = 0x08, seg_size = 0x00, offset_entry_count = 0x00000005140#UPD-DWARF-CHECK: offsets: [141#UPD-DWARF-CHECK: 0x00000014 => 0x00000020142#UPD-DWARF-CHECK: 0x00000018 => 0x00000024143#UPD-DWARF-CHECK: 0x0000001c => 0x00000028144#UPD-DWARF-CHECK: 0x00000027 => 0x00000033145#UPD-DWARF-CHECK: 0x00000032 => 0x0000003e146#UPD-DWARF-CHECK: ]147#UPD-DWARF-CHECK: ranges:148#UPD-DWARF-CHECK: 0x00000020: [DW_RLE_startx_length]: 0x0000000000000000, 0x0000000000000010149#UPD-DWARF-CHECK: 0x00000023: [DW_RLE_end_of_list ]150#UPD-DWARF-CHECK: 0x00000024: [DW_RLE_startx_length]: 0x0000000000000001, 0x0000000000000010151#UPD-DWARF-CHECK: 0x00000027: [DW_RLE_end_of_list ]152#UPD-DWARF-CHECK: 0x00000028: [DW_RLE_start_length ]: 0x0000000000001150, 0x0000000000000010153#UPD-DWARF-CHECK: 0x00000032: [DW_RLE_end_of_list ]154#UPD-DWARF-CHECK: 0x00000033: [DW_RLE_start_length ]: 0x0000000000001160, 0x0000000000000010155#UPD-DWARF-CHECK: 0x0000003d: [DW_RLE_end_of_list ]156#UPD-DWARF-CHECK: 0x0000003e: [DW_RLE_startx_length]: 0x0000000000000000, 0x0000000000000040157#UPD-DWARF-CHECK: 0x00000041: [DW_RLE_end_of_list ]158 159## Following yaml description has Content of the .debug_rnglists exactly like above data ^^^^^^160--- !ELF161FileHeader:162 Class: ELFCLASS64163 Data: ELFDATA2LSB164 Type: ET_REL165 Machine: EM_X86_64166Sections:167 - Name: .text168 Type: SHT_PROGBITS169 Flags: [ SHF_ALLOC, SHF_EXECINSTR ]170 Address: 0x1130171 Size: 0x70172 - Name: .debug_rnglists173 Type: SHT_PROGBITS174 Flags: [ ]175 Content: "3e000000050008000500000014000000180000001c000000270000003200000003001000030110000750110000000000001000076011000000000000100003004000"176DWARF:177 debug_abbrev:178 - Table:179 - Tag: DW_TAG_compile_unit180 Children: DW_CHILDREN_yes181 Attributes:182 - Attribute: DW_AT_producer183 Form: DW_FORM_string184 - Attribute: DW_AT_language185 Form: DW_FORM_data2186 - Attribute: DW_AT_name187 Form: DW_FORM_string188 - Attribute: DW_AT_low_pc189 Form: DW_FORM_addrx190 - Attribute: DW_AT_ranges191 Form: DW_FORM_rnglistx 192 - Attribute: DW_AT_rnglists_base193 Form: DW_FORM_sec_offset194 - Attribute: DW_AT_addr_base195 Form: DW_FORM_sec_offset196 - 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_addrx 203 - Attribute: DW_AT_high_pc204 Form: DW_FORM_data8205 - Attribute: DW_AT_type206 Form: DW_FORM_ref4207 - Tag: DW_TAG_lexical_block208 Children: DW_CHILDREN_no209 Attributes:210 - Attribute: DW_AT_ranges211 Form: DW_FORM_rnglistx212 - Tag: DW_TAG_lexical_block213 Children: DW_CHILDREN_no214 Attributes:215 - Attribute: DW_AT_ranges 216 Form: DW_FORM_sec_offset 217 - Tag: DW_TAG_base_type218 Children: DW_CHILDREN_no219 Attributes:220 - Attribute: DW_AT_name221 Form: DW_FORM_string222 debug_info:223 - Version: 5224 UnitType: DW_UT_compile225 Entries:226 - AbbrCode: 1227 Values:228 - CStr: by_hand229 - Value: 0x04230 - CStr: CU1231 - Value: 0x0232 - Value: 0x4233 - Value: 0xc234 - Value: 0x8235 - AbbrCode: 2236 Values:237 - CStr: foo1238 - Value: 0x00239 - Value: 0x10240 - Value: 0x83241 - AbbrCode: 3242 Values:243 - Value: 0x00244 - AbbrCode: 0245 - AbbrCode: 2246 Values:247 - CStr: foo2248 - Value: 0x01249 - Value: 0x10250 - Value: 0x83251 - AbbrCode: 3252 Values:253 - Value: 0x01254 - AbbrCode: 0255 - AbbrCode: 2256 Values:257 - CStr: foo3258 - Value: 0x02259 - Value: 0x10260 - Value: 0x83261 - AbbrCode: 4262 Values:263 - Value: 0x28264 - AbbrCode: 0265 - AbbrCode: 2266 Values:267 - CStr: foo4268 - Value: 0x03269 - Value: 0x10270 - Value: 0x83271 - AbbrCode: 4272 Values:273 - Value: 0x33274 - AbbrCode: 0275 - AbbrCode: 5276 Values:277 - CStr: int278 - AbbrCode: 0279 debug_addr:280 - Version: 5281 AddressSize: 0x08282 Entries:283 - Address: 0x1130284 - Address: 0x1140285 - Address: 0x1150286 - Address: 0x1160287...288