242 lines · yaml
1## Check how obj2yaml produces YAML PGO Analysis Map in .llvm_bb_addr_map.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: 218# VALID-NEXT: Feature: 0x8719## The 'BaseAddress' field is omitted when it's zero.20# VALID-NEXT: BBRanges:21# VALID-NEXT: - BBEntries:22# VALID-NEXT: - ID: 023# VALID-NEXT: AddressOffset: 0x124# VALID-NEXT: Size: 0x225# VALID-NEXT: Metadata: 0x326# VALID-NEXT: - ID: 227# VALID-NEXT: AddressOffset: 0x428# VALID-NEXT: Size: 0x529# VALID-NEXT: Metadata: 0x630# VALID-NEXT: - ID: 431# VALID-NEXT: AddressOffset: 0xFFFFFFFFFFFFFFF732# VALID-NEXT: Size: 0xFFFFFFFFFFFFFFF833# VALID-NEXT: Metadata: 0xFFFFFFFFFFFFFFF934# VALID-NEXT: - Version: 235# VALID-NEXT: Feature: 0xA36# VALID-NEXT: BBRanges:37# VALID-NEXT: - BaseAddress: 0xFFFFFFFFFFFFFF2038# VALID-NEXT: BBEntries:39# VALID-NEXT: - ID: 640# VALID-NEXT: AddressOffset: 0xA41# VALID-NEXT: Size: 0xB42# VALID-NEXT: Metadata: 0xC43# VALID-NEXT: PGOAnalyses:44# VALID-NEXT: - FuncEntryCount: 10045# VALID-NEXT: PGOBBEntries:46# VALID-NEXT: - BBFreq: 10047# VALID-NEXT: PostLinkBBFreq: 1048# VALID-NEXT: Successors:49# VALID-NEXT: - ID: 250# VALID-NEXT: BrProb: 0x8000000051# VALID-NEXT: PostLinkBrFreq: 752# VALID-NEXT: - ID: 453# VALID-NEXT: BrProb: 0x8000000054# VALID-NEXT: PostLinkBrFreq: 055# VALID-NEXT: - BBFreq: 5056# VALID-NEXT: PostLinkBBFreq: 057# VALID-NEXT: Successors:58# VALID-NEXT: - ID: 459# VALID-NEXT: BrProb: 0xFFFFFFFF60# VALID-NEXT: PostLinkBrFreq: 061# VALID-NEXT: - BBFreq: 10062# VALID-NEXT: PostLinkBBFreq: 363# VALID-NEXT: Successors: []64# VALID-NEXT: PGOBBEntries:65# VALID-NEXT: - BBFreq: 2066 67--- !ELF68FileHeader:69 Class: ELFCLASS6470 Data: ELFDATA2LSB71 Type: ET_EXEC72Sections:73 - Name: .llvm_bb_addr_map74 Type: SHT_LLVM_BB_ADDR_MAP75 ShSize: [[SIZE=<none>]]76 Entries:77 - Version: 278 Feature: 0x8779 BBRanges:80 - BaseAddress: 0x081 BBEntries:82 - ID: 083 AddressOffset: 0x184 Size: 0x285 Metadata: 0x386 - ID: 287 AddressOffset: 0x488 Size: 0x589 Metadata: 0x690 - ID: 491 AddressOffset: 0xFFFFFFFFFFFFFFF792 Size: 0xFFFFFFFFFFFFFFF893 Metadata: 0xFFFFFFFFFFFFFFF994 - Version: 295 Feature: 0xA96 BBRanges:97 - BaseAddress: 0xFFFFFFFFFFFFFF2098 BBEntries:99 - ID: 6100 AddressOffset: 0xA101 Size: 0xB102 Metadata: 0xC103 PGOAnalyses:104 - FuncEntryCount: 100105 PGOBBEntries:106 - BBFreq: 100107 PostLinkBBFreq: 10108 Successors:109 - ID: 2110 BrProb: 0x80000000111 PostLinkBrFreq: 7112 - ID: 4113 BrProb: 0x80000000114 - BBFreq: 50115 Successors:116 - ID: 4117 BrProb: 0xFFFFFFFF118 - BBFreq: 100119 PostLinkBBFreq: 3120 Successors: []121 - PGOBBEntries:122 - BBFreq: 20123 124## Check obj2yaml can dump multiple .llvm_bb_addr_map sections.125 126# RUN: yaml2obj --docnum=2 %s -o %t2127# RUN: obj2yaml %t2 | FileCheck %s --check-prefix=MULTI128 129# MULTI: --- !ELF130# MULTI-NEXT: FileHeader:131# MULTI-NEXT: Class: ELFCLASS64132# MULTI-NEXT: Data: ELFDATA2LSB133# MULTI-NEXT: Type: ET_EXEC134# MULTI-NEXT: Sections:135# MULTI-NEXT: - Name: .llvm_bb_addr_map136# MULTI-NEXT: Type: SHT_LLVM_BB_ADDR_MAP137# MULTI-NEXT: Entries:138## Fieldx 'BaseAddress' is omitted when it is zero.139# MULTI-NEXT: - Version: 0140# MULTI-NEXT: Feature: 0x3141# MULTI-NEXT: BBRanges:142# MULTI-NEXT: - BBEntries:143# MULTI-NEXT: - ID: 0144# MULTI-NEXT: AddressOffset: 0x1145# MULTI-NEXT: Size: 0x2146# MULTI-NEXT: Metadata: 0x3147# MULTI-NEXT: PGOAnalyses:148# MULTI-NEXT: - FuncEntryCount: 0149# MULTI-NEXT: PGOBBEntries:150# MULTI-NEXT: - BBFreq: 0151# MULTI-NEXT: - Name: '.llvm_bb_addr_map (1)'152# MULTI-NEXT: Type: SHT_LLVM_BB_ADDR_MAP153# MULTI-NEXT: Entries:154# MULTI-NEXT: - Version: 0155# MULTI-NEXT: Feature: 0x1156# MULTI-NEXT: BBRanges:157# MULTI-NEXT: - BaseAddress: 0x20158# MULTI-NEXT: BBEntries: []159# MULTI-NEXT: PGOAnalyses:160# MULTI-NEXT: - FuncEntryCount: 0161 162--- !ELF163FileHeader:164 Class: ELFCLASS64165 Data: ELFDATA2LSB166 Type: ET_EXEC167Sections:168 - Name: .llvm_bb_addr_map169 Type: SHT_LLVM_BB_ADDR_MAP170 Entries:171## Check that obj2yaml does not emit the 'BaseAddress' and 'Feature' fields when172## they are zero.173 - Version: 0174 Feature: 0x3175 BBRanges:176 - BaseAddress: 0x0177 BBEntries:178 - AddressOffset: 0x1179 Size: 0x2180 Metadata: 0x3181 PGOAnalyses:182 - FuncEntryCount: 0183 PGOBBEntries:184 - BBFreq: 0185 - Name: '.llvm_bb_addr_map (1)'186 Type: SHT_LLVM_BB_ADDR_MAP187 Entries:188 - Version: 0189 Feature: 0x1190 BBRanges:191 - BaseAddress: 0x20192 PGOAnalyses:193 - FuncEntryCount: 0194 195## Check that obj2yaml uses the "Content" tag to describe an .llvm_bb_addr_map section196## when it can't extract the entries, for example, when the section is truncated.197 198# RUN: yaml2obj --docnum=1 -DSIZE=0x1D %s -o %t3199# RUN: obj2yaml %t3 | FileCheck %s --check-prefixes=TRUNCATED,INVALID200 201# INVALID: --- !ELF202# INVALID-NEXT: FileHeader:203# INVALID-NEXT: Class: ELFCLASS64204# INVALID-NEXT: Data: ELFDATA2LSB205# INVALID-NEXT: Type: ET_EXEC206# INVALID-NEXT: Sections:207# INVALID-NEXT: - Name: .llvm_bb_addr_map208# INVALID-NEXT: Type: SHT_LLVM_BB_ADDR_MAP209# TRUNCATED-NEXT: Content: {{([[:xdigit:]]{58})}}{{$}}210# TRUNCATED-NEXT: Content: {{([[:xdigit:]]{58})}}{{$}}211 212## Check that obj2yaml uses the "Content" tag when original YAML does not213## provide a PGO field that was enabled in the feature byte214 215# RUN: yaml2obj --docnum=3 %s -o %t4216# RUN: obj2yaml %t4 | FileCheck %s --check-prefix=MISSING-FEC217 218--- !ELF219FileHeader:220 Class: ELFCLASS64221 Data: ELFDATA2LSB222 Type: ET_EXEC223Sections:224 - Name: '.llvm_bb_addr_map'225 Type: SHT_LLVM_BB_ADDR_MAP226 Entries:227 - Version: 0228 Feature: 0x1229 BBRanges:230 - BaseAddress: 0x20231 232# MISSING-FEC: --- !ELF233# MISSING-FEC-NEXT: FileHeader:234# MISSING-FEC-NEXT: Class: ELFCLASS64235# MISSING-FEC-NEXT: Data: ELFDATA2LSB236# MISSING-FEC-NEXT: Type: ET_EXEC237# MISSING-FEC-NEXT: Sections:238# MISSING-FEC-NEXT: - Name: .llvm_bb_addr_map239# MISSING-FEC-NEXT: Type: SHT_LLVM_BB_ADDR_MAP240# MISSING-FEC-NEXT: Content: '{{([[:xdigit:]]+)}}'{{$}}241 242