274 lines · yaml
1## Check how obj2yaml produces YAML .llvm_bb_addr_map descriptions.2 3## Check that obj2yaml uses the "Entries" tag to describe an .llvm_bb_addr_map section.4 5# RUN: yaml2obj --docnum=1 %s -o %t16# RUN: obj2yaml %t1 | FileCheck %s --check-prefix=VALID7 8# VALID: --- !ELF9# VALID-NEXT: FileHeader:10# VALID-NEXT: Class: ELFCLASS6411# VALID-NEXT: Data: ELFDATA2LSB12# VALID-NEXT: Type: ET_EXEC13# VALID-NEXT: Sections:14# VALID-NEXT: - Name: .llvm_bb_addr_map15# VALID-NEXT: Type: SHT_LLVM_BB_ADDR_MAP16# VALID-NEXT: Entries:17# VALID-NEXT: - Version: 318# VALID-NEXT: BBRanges:19## The 'BaseAddress' field is omitted when it's zero.20# VALID-NEXT: - BBEntries:21# VALID-NEXT: - ID: 022# VALID-NEXT: AddressOffset: 0x123# VALID-NEXT: Size: 0x224# VALID-NEXT: Metadata: 0x325# VALID-NEXT: - ID: 226# VALID-NEXT: AddressOffset: 0x427# VALID-NEXT: Size: 0x528# VALID-NEXT: Metadata: 0x629# VALID-NEXT: - ID: 430# VALID-NEXT: AddressOffset: 0xFFFFFFFFFFFFFFF731# VALID-NEXT: Size: 0xFFFFFFFFFFFFFFF832# VALID-NEXT: Metadata: 0xFFFFFFFFFFFFFFF933# VALID-NEXT: - Version: 334# VALID-NEXT: Feature: 0x2835# VALID-NEXT: BBRanges:36# VALID-NEXT: - BaseAddress: 0xFFFFFFFFFFFFFF2037# VALID-NEXT: BBEntries:38# VALID-NEXT: - ID: 639# VALID-NEXT: AddressOffset: 0xA40# VALID-NEXT: Size: 0xB41# VALID-NEXT: Metadata: 0xC42# VALID-NEXT: CallsiteEndOffsets: [ 0x1, 0x2 ]43 44--- !ELF45FileHeader:46 Class: ELFCLASS6447 Data: ELFDATA2LSB48 Type: ET_EXEC49Sections:50 - Name: .llvm_bb_addr_map51 Type: SHT_LLVM_BB_ADDR_MAP52 ShSize: [[SIZE=<none>]]53 Entries:54 - Version: 355 Feature: 0x056 BBRanges:57 - BaseAddress: 0x058 BBEntries:59 - ID: 060 AddressOffset: 0x161 Size: 0x262 Metadata: 0x363 - ID: 264 AddressOffset: 0x465 Size: 0x566 Metadata: 0x667 - ID: 468 AddressOffset: 0xFFFFFFFFFFFFFFF769 Size: 0xFFFFFFFFFFFFFFF870 Metadata: 0xFFFFFFFFFFFFFFF971 - Version: 372 Feature: 0x2873 NumBBRanges: [[NUMBBRANGES=<none>]]74 BBRanges:75 - BaseAddress: 0xFFFFFFFFFFFFFF2076 NumBlocks: [[NUMBLOCKS=<none>]]77 BBEntries:78 - ID: 679 AddressOffset: 0xA80 Size: 0xB81 Metadata: 0xC82 CallsiteEndOffsets: [ 0x1, 0x2 ]83 84## Check obj2yaml can dump empty .llvm_bb_addr_map sections.85 86# RUN: yaml2obj --docnum=2 %s -o %t287# RUN: obj2yaml %t2 | FileCheck %s --check-prefix=EMPTY88 89# EMPTY: --- !ELF90# EMPTY-NEXT: FileHeader:91# EMPTY-NEXT: Class: ELFCLASS6492# EMPTY-NEXT: Data: ELFDATA2LSB93# EMPTY-NEXT: Type: ET_EXEC94# EMPTY-NEXT: Sections:95# EMPTY-NEXT: - Name: .llvm_bb_addr_map96# EMPTY-NEXT: Type: SHT_LLVM_BB_ADDR_MAP97# EMPTY-NOT: Content:98 99--- !ELF100FileHeader:101 Class: ELFCLASS64102 Data: ELFDATA2LSB103 Type: ET_EXEC104Sections:105 - Name: .llvm_bb_addr_map106 Type: SHT_LLVM_BB_ADDR_MAP107 Content: ""108 109## Check obj2yaml can dump multiple .llvm_bb_addr_map sections.110 111# RUN: yaml2obj --docnum=3 %s -o %t3112# RUN: obj2yaml %t3 | FileCheck %s --check-prefix=MULTI113 114# MULTI: --- !ELF115# MULTI-NEXT: FileHeader:116# MULTI-NEXT: Class: ELFCLASS64117# MULTI-NEXT: Data: ELFDATA2LSB118# MULTI-NEXT: Type: ET_EXEC119# MULTI-NEXT: Sections:120# MULTI-NEXT: - Name: .llvm_bb_addr_map121# MULTI-NEXT: Type: SHT_LLVM_BB_ADDR_MAP122# MULTI-NEXT: Entries:123## Fields 'BaseAddress' and 'Feature' are omitted when they are zero.124# MULTI-NEXT: - Version: 0125# MULTI-NEXT: BBRanges:126# MULTI-NEXT: - BBEntries:127# MULTI-NEXT: - ID: 0128# MULTI-NEXT: AddressOffset: 0x1129# MULTI-NEXT: Size: 0x2130# MULTI-NEXT: Metadata: 0x3131# MULTI-NEXT: - Name: '.llvm_bb_addr_map (1)'132# MULTI-NEXT: Type: SHT_LLVM_BB_ADDR_MAP133# MULTI-NEXT: Entries:134# MULTI-NEXT: - Version: 0135# MULTI-NEXT: BBRanges:136# MULTI-NEXT: - BaseAddress: 0x20137# MULTI-NEXT: BBEntries: []138 139--- !ELF140FileHeader:141 Class: ELFCLASS64142 Data: ELFDATA2LSB143 Type: ET_EXEC144Sections:145 - Name: .llvm_bb_addr_map146 Type: SHT_LLVM_BB_ADDR_MAP147 Entries:148## Check that obj2yaml does not emit the 'Address' and 'Feature' fields when149## they are zero.150 - Version: 0151 Feature: 0x0152 BBRanges:153 - BaseAddress: 0x0154 BBEntries:155 - AddressOffset: 0x1156 Size: 0x2157 Metadata: 0x3158 - Name: '.llvm_bb_addr_map (1)'159 Type: SHT_LLVM_BB_ADDR_MAP160 Entries:161 - Version: 0162 BBRanges:163 - BaseAddress: 0x20164 165## Check that obj2yaml can dump basic block hash in the .llvm_bb_addr_map section.166 167# RUN: yaml2obj --docnum=4 %s -o %t4168# RUN: obj2yaml %t4 | FileCheck %s --check-prefix=BBHASH169 170# BBHASH: --- !ELF171# BBHASH-NEXT: FileHeader:172# BBHASH-NEXT: Class: ELFCLASS64173# BBHASH-NEXT: Data: ELFDATA2LSB174# BBHASH-NEXT: Type: ET_EXEC175# BBHASH-NEXT: Sections:176# BBHASH-NEXT: - Name: .llvm_bb_addr_map177# BBHASH-NEXT: Type: SHT_LLVM_BB_ADDR_MAP178# BBHASH-NEXT: Entries:179# BBHASH-NEXT: - Version: 4180# BBHASH-NEXT: Feature: 0x40181# BBHASH-NEXT: BBRanges:182# BBHASH-NEXT: - BBEntries:183# BBHASH-NEXT: - ID: 0184# BBHASH-NEXT: AddressOffset: 0x1185# BBHASH-NEXT: Size: 0x2186# BBHASH-NEXT: Metadata: 0x3187# BBHASH-NEXT: Hash: 0x1188# BBHASH-NEXT: - ID: 2189# BBHASH-NEXT: AddressOffset: 0x4190# BBHASH-NEXT: Size: 0x5191# BBHASH-NEXT: Metadata: 0x6192# BBHASH-NEXT: Hash: 0x2193# BBHASH-NEXT: - ID: 4194# BBHASH-NEXT: AddressOffset: 0xFFFFFFFFFFFFFFF7195# BBHASH-NEXT: Size: 0xFFFFFFFFFFFFFFF8196# BBHASH-NEXT: Metadata: 0xFFFFFFFFFFFFFFF9197# BBHASH-NEXT: Hash: 0x3198# BBHASH-NEXT: - Version: 4199# BBHASH-NEXT: Feature: 0x68200# BBHASH-NEXT: BBRanges:201# BBHASH-NEXT: - BaseAddress: 0xFFFFFFFFFFFFFF20202# BBHASH-NEXT: BBEntries:203# BBHASH-NEXT: - ID: 6204# BBHASH-NEXT: AddressOffset: 0xA205# BBHASH-NEXT: Size: 0xB206# BBHASH-NEXT: Metadata: 0xC207# BBHASH-NEXT: CallsiteEndOffsets: [ 0x1, 0x2 ]208# BBHASH-NEXT: Hash: 0x123209 210--- !ELF211FileHeader:212 Class: ELFCLASS64213 Data: ELFDATA2LSB214 Type: ET_EXEC215Sections:216 - Name: .llvm_bb_addr_map217 Type: SHT_LLVM_BB_ADDR_MAP218 Entries:219 - Version: 4220 Feature: 0x40221 BBRanges:222 - BaseAddress: 0x0223 BBEntries:224 - ID: 0225 AddressOffset: 0x1226 Size: 0x2227 Metadata: 0x3228 Hash: 0x1229 - ID: 2230 AddressOffset: 0x4231 Size: 0x5232 Metadata: 0x6233 Hash: 0x2234 - ID: 4235 AddressOffset: 0xFFFFFFFFFFFFFFF7236 Size: 0xFFFFFFFFFFFFFFF8237 Metadata: 0xFFFFFFFFFFFFFFF9238 Hash: 0x3239 - Version: 4240 Feature: 0x68241 BBRanges:242 - BaseAddress: 0xFFFFFFFFFFFFFF20243 BBEntries:244 - ID: 6245 AddressOffset: 0xA246 Size: 0xB247 Metadata: 0xC248 CallsiteEndOffsets: [ 0x1, 0x2 ]249 Hash: 0x123250 251## Check that obj2yaml uses the "Content" tag to describe an .llvm_bb_addr_map section252## when it can't extract the entries, for example, when the section is truncated, or253## when an invalid 'NumBlocks' or 'NumBBRanges` field is specified.254 255# RUN: yaml2obj --docnum=1 -DSIZE=0x8 %s -o %t4256# RUN: obj2yaml %t4 | FileCheck %s --check-prefixes=TRUNCATED,INVALID257 258# RUN: yaml2obj --docnum=1 -DNUMBLOCKS=2 %s -o %t5259# RUN: obj2yaml %t5 | FileCheck %s --check-prefixes=BADNUM,INVALID260 261# RUN: yaml2obj --docnum=1 -DNUMBBRANGES=2 %s -o %t6262# RUN: obj2yaml %t6 | FileCheck %s --check-prefixes=BADNUM,INVALID263 264# INVALID: --- !ELF265# INVALID-NEXT: FileHeader:266# INVALID-NEXT: Class: ELFCLASS64267# INVALID-NEXT: Data: ELFDATA2LSB268# INVALID-NEXT: Type: ET_EXEC269# INVALID-NEXT: Sections:270# INVALID-NEXT: - Name: .llvm_bb_addr_map271# INVALID-NEXT: Type: SHT_LLVM_BB_ADDR_MAP272# BADNUM-NEXT: Content: {{([[:xdigit:]]+)}}{{$}}273# TRUNCATED-NEXT: Content: '{{([[:xdigit:]]{16})}}'{{$}}274