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 %t1 6# RUN: obj2yaml %t1 | FileCheck %s --check-prefix=VALID 7 8# VALID: --- !ELF 9# VALID-NEXT: FileHeader: 10# VALID-NEXT: Class: ELFCLASS64 11# VALID-NEXT: Data: ELFDATA2LSB 12# VALID-NEXT: Type: ET_EXEC 13# VALID-NEXT: Sections: 14# VALID-NEXT: - Name: .llvm_bb_addr_map 15# VALID-NEXT: Type: SHT_LLVM_BB_ADDR_MAP 16# VALID-NEXT: Entries: 17# VALID-NEXT: - Version: 2 18# VALID-NEXT: Feature: 0x7 19## The 'BaseAddress' field is omitted when it's zero. 20# VALID-NEXT: BBRanges: 21# VALID-NEXT: - BBEntries: 22# VALID-NEXT: - ID: 0 23# VALID-NEXT: AddressOffset: 0x1 24# VALID-NEXT: Size: 0x2 25# VALID-NEXT: Metadata: 0x3 26# VALID-NEXT: - ID: 2 27# VALID-NEXT: AddressOffset: 0x4 28# VALID-NEXT: Size: 0x5 29# VALID-NEXT: Metadata: 0x6 30# VALID-NEXT: - ID: 4 31# VALID-NEXT: AddressOffset: 0xFFFFFFFFFFFFFFF7 32# VALID-NEXT: Size: 0xFFFFFFFFFFFFFFF8 33# VALID-NEXT: Metadata: 0xFFFFFFFFFFFFFFF9 34# VALID-NEXT: - Version: 2 35# VALID-NEXT: Feature: 0xA 36# VALID-NEXT: BBRanges: 37# VALID-NEXT: - BaseAddress: 0xFFFFFFFFFFFFFF20 38# VALID-NEXT: BBEntries: 39# VALID-NEXT: - ID: 6 40# VALID-NEXT: AddressOffset: 0xA 41# VALID-NEXT: Size: 0xB 42# VALID-NEXT: Metadata: 0xC 43# VALID-NEXT: PGOAnalyses: 44# VALID-NEXT: - FuncEntryCount: 100 45# VALID-NEXT: PGOBBEntries: 46# VALID-NEXT: - BBFreq: 100 47# VALID-NEXT: Successors: 48# VALID-NEXT: - ID: 2 49# VALID-NEXT: BrProb: 0x80000000 50# VALID-NEXT: - ID: 4 51# VALID-NEXT: BrProb: 0x80000000 52# VALID-NEXT: - BBFreq: 50 53# VALID-NEXT: Successors: 54# VALID-NEXT: - ID: 4 55# VALID-NEXT: BrProb: 0xFFFFFFFF 56# VALID-NEXT: - BBFreq: 100 57# VALID-NEXT: Successors: [] 58# VALID-NEXT: PGOBBEntries: 59# VALID-NEXT: - BBFreq: 20 60 61--- !ELF 62FileHeader: 63 Class: ELFCLASS64 64 Data: ELFDATA2LSB 65 Type: ET_EXEC 66Sections: 67 - Name: .llvm_bb_addr_map 68 Type: SHT_LLVM_BB_ADDR_MAP 69 ShSize: [[SIZE=<none>]] 70 Entries: 71 - Version: 2 72 Feature: 0x7 73 BBRanges: 74 - BaseAddress: 0x0 75 BBEntries: 76 - ID: 0 77 AddressOffset: 0x1 78 Size: 0x2 79 Metadata: 0x3 80 - ID: 2 81 AddressOffset: 0x4 82 Size: 0x5 83 Metadata: 0x6 84 - ID: 4 85 AddressOffset: 0xFFFFFFFFFFFFFFF7 86 Size: 0xFFFFFFFFFFFFFFF8 87 Metadata: 0xFFFFFFFFFFFFFFF9 88 - Version: 2 89 Feature: 0xA 90 BBRanges: 91 - BaseAddress: 0xFFFFFFFFFFFFFF20 92 BBEntries: 93 - ID: 6 94 AddressOffset: 0xA 95 Size: 0xB 96 Metadata: 0xC 97 PGOAnalyses: 98 - FuncEntryCount: 100 99 PGOBBEntries: 100 - BBFreq: 100 101 Successors: 102 - ID: 2 103 BrProb: 0x80000000 104 - ID: 4 105 BrProb: 0x80000000 106 - BBFreq: 50 107 Successors: 108 - ID: 4 109 BrProb: 0xFFFFFFFF 110 - BBFreq: 100 111 Successors: [] 112 - PGOBBEntries: 113 - BBFreq: 20 114 115## Check obj2yaml can dump multiple .llvm_bb_addr_map sections. 116 117# RUN: yaml2obj --docnum=2 %s -o %t2 118# RUN: obj2yaml %t2 | FileCheck %s --check-prefix=MULTI 119 120# MULTI: --- !ELF 121# MULTI-NEXT: FileHeader: 122# MULTI-NEXT: Class: ELFCLASS64 123# MULTI-NEXT: Data: ELFDATA2LSB 124# MULTI-NEXT: Type: ET_EXEC 125# MULTI-NEXT: Sections: 126# MULTI-NEXT: - Name: .llvm_bb_addr_map 127# MULTI-NEXT: Type: SHT_LLVM_BB_ADDR_MAP 128# MULTI-NEXT: Entries: 129## Fieldx 'BaseAddress' is omitted when it is zero. 130# MULTI-NEXT: - Version: 0 131# MULTI-NEXT: Feature: 0x3 132# MULTI-NEXT: BBRanges: 133# MULTI-NEXT: - BBEntries: 134# MULTI-NEXT: - ID: 0 135# MULTI-NEXT: AddressOffset: 0x1 136# MULTI-NEXT: Size: 0x2 137# MULTI-NEXT: Metadata: 0x3 138# MULTI-NEXT: PGOAnalyses: 139# MULTI-NEXT: - FuncEntryCount: 0 140# MULTI-NEXT: PGOBBEntries: 141# MULTI-NEXT: - BBFreq: 0 142# MULTI-NEXT: - Name: '.llvm_bb_addr_map (1)' 143# MULTI-NEXT: Type: SHT_LLVM_BB_ADDR_MAP 144# MULTI-NEXT: Entries: 145# MULTI-NEXT: - Version: 0 146# MULTI-NEXT: Feature: 0x1 147# MULTI-NEXT: BBRanges: 148# MULTI-NEXT: - BaseAddress: 0x20 149# MULTI-NEXT: BBEntries: [] 150# MULTI-NEXT: PGOAnalyses: 151# MULTI-NEXT: - FuncEntryCount: 0 152 153--- !ELF 154FileHeader: 155 Class: ELFCLASS64 156 Data: ELFDATA2LSB 157 Type: ET_EXEC 158Sections: 159 - Name: .llvm_bb_addr_map 160 Type: SHT_LLVM_BB_ADDR_MAP 161 Entries: 162## Check that obj2yaml does not emit the 'BaseAddress' and 'Feature' fields when 163## they are zero. 164 - Version: 0 165 Feature: 0x3 166 BBRanges: 167 - BaseAddress: 0x0 168 BBEntries: 169 - AddressOffset: 0x1 170 Size: 0x2 171 Metadata: 0x3 172 PGOAnalyses: 173 - FuncEntryCount: 0 174 PGOBBEntries: 175 - BBFreq: 0 176 - Name: '.llvm_bb_addr_map (1)' 177 Type: SHT_LLVM_BB_ADDR_MAP 178 Entries: 179 - Version: 0 180 Feature: 0x1 181 BBRanges: 182 - BaseAddress: 0x20 183 PGOAnalyses: 184 - FuncEntryCount: 0 185 186## Check that obj2yaml uses the "Content" tag to describe an .llvm_bb_addr_map section 187## when it can't extract the entries, for example, when the section is truncated. 188 189# RUN: yaml2obj --docnum=1 -DSIZE=0x1D %s -o %t3 190# RUN: obj2yaml %t3 | FileCheck %s --check-prefixes=TRUNCATED,INVALID 191 192# INVALID: --- !ELF 193# INVALID-NEXT: FileHeader: 194# INVALID-NEXT: Class: ELFCLASS64 195# INVALID-NEXT: Data: ELFDATA2LSB 196# INVALID-NEXT: Type: ET_EXEC 197# INVALID-NEXT: Sections: 198# INVALID-NEXT: - Name: .llvm_bb_addr_map 199# INVALID-NEXT: Type: SHT_LLVM_BB_ADDR_MAP 200# TRUNCATED-NEXT: Content: {{([[:xdigit:]]{58})}}{{$}} 201# TRUNCATED-NEXT: Content: {{([[:xdigit:]]{58})}}{{$}} 202 203## Check that obj2yaml uses the "Content" tag when original YAML does not 204## provide a PGO field that was enabled in the feature byte 205 206# RUN: yaml2obj --docnum=3 %s -o %t4 207# RUN: obj2yaml %t4 | FileCheck %s --check-prefix=MISSING-FEC 208 209--- !ELF 210FileHeader: 211 Class: ELFCLASS64 212 Data: ELFDATA2LSB 213 Type: ET_EXEC 214Sections: 215 - Name: '.llvm_bb_addr_map' 216 Type: SHT_LLVM_BB_ADDR_MAP 217 Entries: 218 - Version: 0 219 Feature: 0x1 220 BBRanges: 221 - BaseAddress: 0x20 222 223# MISSING-FEC: --- !ELF 224# MISSING-FEC-NEXT: FileHeader: 225# MISSING-FEC-NEXT: Class: ELFCLASS64 226# MISSING-FEC-NEXT: Data: ELFDATA2LSB 227# MISSING-FEC-NEXT: Type: ET_EXEC 228# MISSING-FEC-NEXT: Sections: 229# MISSING-FEC-NEXT: - Name: .llvm_bb_addr_map 230# MISSING-FEC-NEXT: Type: SHT_LLVM_BB_ADDR_MAP 231# MISSING-FEC-NEXT: Content: '{{([[:xdigit:]]+)}}'{{$}} 232 233