1## Check how yaml2obj produces .llvm_bb_addr_map sections. 2 3# RUN: yaml2obj --docnum=1 %s -o %t1 4# RUN: llvm-readobj --sections --section-data %t1 | FileCheck %s 5 6## Case 1: Specify content. 7# CHECK: Section { 8# CHECK: Index: 1 9# CHECK-NEXT: Name: .llvm_bb_addr_map (1) 10# CHECK-NEXT: Type: SHT_LLVM_BB_ADDR_MAP (0x6FFF4C0A) 11# CHECK-NEXT: Flags [ (0x0) 12# CHECK-NEXT: ] 13# CHECK-NEXT: Address: 0x0 14# CHECK-NEXT: Offset: 0x40 15# CHECK-NEXT: Size: 13 16# CHECK-NEXT: Link: 0 17# CHECK-NEXT: Info: 0 18# CHECK-NEXT: AddressAlignment: 0 19# CHECK-NEXT: EntrySize: 0 20# CHECK-NEXT: SectionData ( 21# CHECK-NEXT: 0000: 00000000 00000000 01010203 04 22# CHECK-NEXT: ) 23# CHECK-NEXT: } 24 25## Case 2: Empty. 26# CHECK: Name: .llvm_bb_addr_map (1) 27# CHECK: Size: 28# CHECK-SAME: {{^ 0$}} 29 30## Case 3: Specify Size only. 31# CHECK: Name: .llvm_bb_addr_map (1) 32# CHECK: SectionData ( 33# CHECK-NEXT: 0000: 00000000 00000000 34# CHECK-NEXT: ) 35 36# Case 4: Specify Entries. 37# CHECK: Name: .llvm_bb_addr_map (1) 38# CHECK: SectionData ( 39# CHECK-NEXT: 0000: 02002000 00000000 0000010B 010203 40# CHECK-NEXT: ) 41 42# Case 5: Specify Entries and omit the Address field. 43# CHECK: Name: .llvm_bb_addr_map (1) 44# CHECK: Address: 45# CHECK-SAME: {{^ 0x0$}} 46# CHECK: SectionData ( 47# CHECK-NEXT: 0000: 02000000 00000000 0000010C 010203 48# CHECK-NEXT: ) 49 50# Case 6: Override the NumBlocks field. 51# CHECK: Name: .llvm_bb_addr_map (1) 52# CHECK: SectionData ( 53# CHECK-NEXT: 0000: 02002000 00000000 0000020D 010203 54# CHECK-NEXT: ) 55 56# Case 7: Specify empty BBRanges. 57# CHECK: Name: .llvm_bb_addr_map (1) 58# CHECK: SectionData ( 59# CHECK-NEXT: 0000: 020000 60# CHECK-NEXT: ) 61 62# Case 8: Specify empty BBRanges with multi-bb-range. 63# CHECK: Name: .llvm_bb_addr_map (1) 64# CHECK: SectionData ( 65# CHECK-NEXT: 0000: 020800 66# CHECK-NEXT: ) 67 68 69 70 71--- !ELF 72FileHeader: 73 Class: ELFCLASS64 74 Data: ELFDATA2LSB 75 Type: ET_EXEC 76Sections: 77 78## Test the following cases: 79 80## 1) We can produce an .llvm_bb_addr_map section from a description with section 81## content. 82## Specify Content. 83 - Name: '.llvm_bb_addr_map (1)' 84 Type: SHT_LLVM_BB_ADDR_MAP 85 Content: "00000000000000000101020304" 86 87## 2) We can produce an empty .llvm_bb_addr_map section from a description 88## with empty section content. 89 - Name: '.llvm_bb_addr_map (2)' 90 Type: SHT_LLVM_BB_ADDR_MAP 91 92## 3) We can produce a zero .llvm_bb_addr_map section of a specific size when 93## we specify the size only. 94 - Name: '.llvm_bb_addr_map (3)' 95 Type: SHT_LLVM_BB_ADDR_MAP 96 Size: 8 97 98## 4) We can produce an .llvm_bb_addr_map section from a description with 99## Entries. 100 - Name: '.llvm_bb_addr_map (4)' 101 Type: SHT_LLVM_BB_ADDR_MAP 102 Entries: 103 - Version: 2 104 BBRanges: 105 - BaseAddress: 0x0000000000000020 106 BBEntries: 107 - ID: 11 108 AddressOffset: 0x00000001 109 Size: 0x00000002 110 Metadata: 0x00000003 111 112## 5) When specifying the description with Entries, the 'Address' field will be 113## zero when omitted. 114 - Name: '.llvm_bb_addr_map (5)' 115 Type: SHT_LLVM_BB_ADDR_MAP 116 Entries: 117 - Version: 2 118 BBRanges: 119 - BBEntries: 120 - ID: 12 121 AddressOffset: 0x00000001 122 Size: 0x00000002 123 Metadata: 0x00000003 124 125## 6) We can override the NumBlocks field with a value different from the 126## actual number of BB Entries. 127 - Name: '.llvm_bb_addr_map (6)' 128 Type: SHT_LLVM_BB_ADDR_MAP 129 Entries: 130 - Version: 2 131 BBRanges: 132 - BaseAddress: 0x0000000000000020 133 NumBlocks: 2 134 BBEntries: 135 - ID: 13 136 AddressOffset: 0x00000001 137 Size: 0x00000002 138 Metadata: 0x00000003 139 140## 7) We can produce a SHT_LLVM_BB_ADDR_MAP section from a description 141## with one entry with empty BBRanges. 142 - Name: '.llvm_bb_addr_map (7)' 143 Type: SHT_LLVM_BB_ADDR_MAP 144 Entries: 145 - Version: 2 146 BBRanges: [] 147 148## 8) We can produce a SHT_LLVM_BB_ADDR_MAP section from a multi-bb-range 149## description with one entry with empty BBRanges. 150 - Name: '.llvm_bb_addr_map (8)' 151 Type: SHT_LLVM_BB_ADDR_MAP 152 Entries: 153 - Version: 2 154 Feature: 0x8 155 BBRanges: [] 156 157## Check we can't use Entries at the same time as either Content or Size. 158# RUN: not yaml2obj --docnum=2 -DCONTENT="00" %s 2>&1 | FileCheck %s --check-prefix=INVALID 159# RUN: not yaml2obj --docnum=2 -DSIZE="0" %s 2>&1 | FileCheck %s --check-prefix=INVALID 160 161# INVALID: error: "Entries" cannot be used with "Content" or "Size" 162 163--- !ELF 164FileHeader: 165 Class: ELFCLASS64 166 Data: ELFDATA2LSB 167 Type: ET_EXEC 168Sections: 169## Specify Content and Size 170 - Name: '.llvm_bb_addr_map' 171 Type: SHT_LLVM_BB_ADDR_MAP 172 Entries: [] 173 Content: [[CONTENT=<none>]] 174 Size: [[SIZE=<none>]] 175 176## Check that yaml2obj generates a warning when we use unsupported versions. 177# RUN: yaml2obj --docnum=3 %s 2>&1 | FileCheck %s --check-prefix=INVALID-VERSION 178# INVALID-VERSION: warning: unsupported SHT_LLVM_BB_ADDR_MAP version: 3; encoding using the most recent version 179 180--- !ELF 181FileHeader: 182 Class: ELFCLASS64 183 Data: ELFDATA2LSB 184 Type: ET_EXEC 185Sections: 186 - Name: '.llvm_bb_addr_map' 187 Type: SHT_LLVM_BB_ADDR_MAP 188 Entries: 189## Specify unsupported version 190 - Version: 3 191