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 %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: BBRanges: 19## The 'BaseAddress' field is omitted when it's zero. 20# VALID-NEXT: - BBEntries: 21# VALID-NEXT: - ID: 0 22# VALID-NEXT: AddressOffset: 0x1 23# VALID-NEXT: Size: 0x2 24# VALID-NEXT: Metadata: 0x3 25# VALID-NEXT: - ID: 2 26# VALID-NEXT: AddressOffset: 0x4 27# VALID-NEXT: Size: 0x5 28# VALID-NEXT: Metadata: 0x6 29# VALID-NEXT: - ID: 4 30# VALID-NEXT: AddressOffset: 0xFFFFFFFFFFFFFFF7 31# VALID-NEXT: Size: 0xFFFFFFFFFFFFFFF8 32# VALID-NEXT: Metadata: 0xFFFFFFFFFFFFFFF9 33# VALID-NEXT: - Version: 2 34# VALID-NEXT: Feature: 0x8 35# VALID-NEXT: BBRanges: 36# VALID-NEXT: - BaseAddress: 0xFFFFFFFFFFFFFF20 37# VALID-NEXT: BBEntries: 38# VALID-NEXT: - ID: 6 39# VALID-NEXT: AddressOffset: 0xA 40# VALID-NEXT: Size: 0xB 41# VALID-NEXT: Metadata: 0xC 42 43--- !ELF 44FileHeader: 45 Class: ELFCLASS64 46 Data: ELFDATA2LSB 47 Type: ET_EXEC 48Sections: 49 - Name: .llvm_bb_addr_map 50 Type: SHT_LLVM_BB_ADDR_MAP 51 ShSize: [[SIZE=<none>]] 52 Entries: 53 - Version: 2 54 Feature: 0x0 55 BBRanges: 56 - BaseAddress: 0x0 57 BBEntries: 58 - ID: 0 59 AddressOffset: 0x1 60 Size: 0x2 61 Metadata: 0x3 62 - ID: 2 63 AddressOffset: 0x4 64 Size: 0x5 65 Metadata: 0x6 66 - ID: 4 67 AddressOffset: 0xFFFFFFFFFFFFFFF7 68 Size: 0xFFFFFFFFFFFFFFF8 69 Metadata: 0xFFFFFFFFFFFFFFF9 70 - Version: 2 71 Feature: 0x8 72 NumBBRanges: [[NUMBBRANGES=<none>]] 73 BBRanges: 74 - BaseAddress: 0xFFFFFFFFFFFFFF20 75 NumBlocks: [[NUMBLOCKS=<none>]] 76 BBEntries: 77 - ID: 6 78 AddressOffset: 0xA 79 Size: 0xB 80 Metadata: 0xC 81 82## Check obj2yaml can dump empty .llvm_bb_addr_map sections. 83 84# RUN: yaml2obj --docnum=2 %s -o %t2 85# RUN: obj2yaml %t2 | FileCheck %s --check-prefix=EMPTY 86 87# EMPTY: --- !ELF 88# EMPTY-NEXT: FileHeader: 89# EMPTY-NEXT: Class: ELFCLASS64 90# EMPTY-NEXT: Data: ELFDATA2LSB 91# EMPTY-NEXT: Type: ET_EXEC 92# EMPTY-NEXT: Sections: 93# EMPTY-NEXT: - Name: .llvm_bb_addr_map 94# EMPTY-NEXT: Type: SHT_LLVM_BB_ADDR_MAP 95# EMPTY-NOT: Content: 96 97--- !ELF 98FileHeader: 99 Class: ELFCLASS64 100 Data: ELFDATA2LSB 101 Type: ET_EXEC 102Sections: 103 - Name: .llvm_bb_addr_map 104 Type: SHT_LLVM_BB_ADDR_MAP 105 Content: "" 106 107## Check obj2yaml can dump multiple .llvm_bb_addr_map sections. 108 109# RUN: yaml2obj --docnum=3 %s -o %t3 110# RUN: obj2yaml %t3 | FileCheck %s --check-prefix=MULTI 111 112# MULTI: --- !ELF 113# MULTI-NEXT: FileHeader: 114# MULTI-NEXT: Class: ELFCLASS64 115# MULTI-NEXT: Data: ELFDATA2LSB 116# MULTI-NEXT: Type: ET_EXEC 117# MULTI-NEXT: Sections: 118# MULTI-NEXT: - Name: .llvm_bb_addr_map 119# MULTI-NEXT: Type: SHT_LLVM_BB_ADDR_MAP 120# MULTI-NEXT: Entries: 121## Fields 'BaseAddress' and 'Feature' are omitted when they are zero. 122# MULTI-NEXT: - Version: 0 123# MULTI-NEXT: BBRanges: 124# MULTI-NEXT: - BBEntries: 125# MULTI-NEXT: - ID: 0 126# MULTI-NEXT: AddressOffset: 0x1 127# MULTI-NEXT: Size: 0x2 128# MULTI-NEXT: Metadata: 0x3 129# MULTI-NEXT: - Name: '.llvm_bb_addr_map (1)' 130# MULTI-NEXT: Type: SHT_LLVM_BB_ADDR_MAP 131# MULTI-NEXT: Entries: 132# MULTI-NEXT: - Version: 0 133# MULTI-NEXT: BBRanges: 134# MULTI-NEXT: - BaseAddress: 0x20 135# MULTI-NEXT: BBEntries: [] 136 137--- !ELF 138FileHeader: 139 Class: ELFCLASS64 140 Data: ELFDATA2LSB 141 Type: ET_EXEC 142Sections: 143 - Name: .llvm_bb_addr_map 144 Type: SHT_LLVM_BB_ADDR_MAP 145 Entries: 146## Check that obj2yaml does not emit the 'Address' and 'Feature' fields when 147## they are zero. 148 - Version: 0 149 Feature: 0x0 150 BBRanges: 151 - BaseAddress: 0x0 152 BBEntries: 153 - AddressOffset: 0x1 154 Size: 0x2 155 Metadata: 0x3 156 - Name: '.llvm_bb_addr_map (1)' 157 Type: SHT_LLVM_BB_ADDR_MAP 158 Entries: 159 - Version: 0 160 BBRanges: 161 - BaseAddress: 0x20 162 163## Check that obj2yaml uses the "Content" tag to describe an .llvm_bb_addr_map section 164## when it can't extract the entries, for example, when the section is truncated, or 165## when an invalid 'NumBlocks' or 'NumBBRanges` field is specified. 166 167# RUN: yaml2obj --docnum=1 -DSIZE=0x8 %s -o %t4 168# RUN: obj2yaml %t4 | FileCheck %s --check-prefixes=TRUNCATED,INVALID 169 170# RUN: yaml2obj --docnum=1 -DNUMBLOCKS=2 %s -o %t5 171# RUN: obj2yaml %t5 | FileCheck %s --check-prefixes=BADNUM,INVALID 172 173# RUN: yaml2obj --docnum=1 -DNUMBBRANGES=2 %s -o %t6 174# RUN: obj2yaml %t6 | FileCheck %s --check-prefixes=BADNUM,INVALID 175 176# INVALID: --- !ELF 177# INVALID-NEXT: FileHeader: 178# INVALID-NEXT: Class: ELFCLASS64 179# INVALID-NEXT: Data: ELFDATA2LSB 180# INVALID-NEXT: Type: ET_EXEC 181# INVALID-NEXT: Sections: 182# INVALID-NEXT: - Name: .llvm_bb_addr_map 183# INVALID-NEXT: Type: SHT_LLVM_BB_ADDR_MAP 184# BADNUM-NEXT: Content: {{([[:xdigit:]]+)}}{{$}} 185# TRUNCATED-NEXT: Content: '{{([[:xdigit:]]{16})}}'{{$}} 186