1## This test checks how we handle the --bb-addr-map option. 2 3## Check 64-bit: 4# RUN: yaml2obj --docnum=1 %s -DBITS=64 -DADDR=0x999999999 -o %t1.x64.o 5# RUN: llvm-readobj %t1.x64.o --bb-addr-map 2>&1 | FileCheck %s -DADDR=0x999999999 -DFILE=%t1.x64.o --check-prefix=CHECK 6# RUN: llvm-readelf %t1.x64.o --bb-addr-map | FileCheck %s --check-prefix=GNU 7 8## Check 64-bit: 9# RUN: yaml2obj --docnum=1 %s -DBITS=64 -DADDR=0x999999999 -o %t1.v1.x64.o 10# RUN: llvm-readobj %t1.v1.x64.o --bb-addr-map 2>&1 | FileCheck %s -DADDR=0x999999999 -DFILE=%t1.v1.x64.o --check-prefix=CHECK 11 12## Check 32-bit: 13# RUN: yaml2obj --docnum=1 %s -DBITS=32 -o %t1.x32.o 14# RUN: llvm-readobj %t1.x32.o --bb-addr-map 2>&1 | FileCheck -DADDR=0x11111 %s -DFILE=%t1.x32.o --check-prefix=CHECK 15# RUN: llvm-readelf %t1.x32.o --bb-addr-map | FileCheck %s --check-prefix=GNU 16 17## Check that a malformed section can be handled. 18# RUN: yaml2obj --docnum=1 %s -DBITS=32 -DSIZE=7 -o %t2.o 19# RUN: llvm-readobj %t2.o --bb-addr-map 2>&1 | FileCheck %s -DOFFSET=0x00000007 -DFILE=%t2.o --check-prefix=TRUNCATED 20 21## Check that invalid metadata can be handled. 22# RUN: yaml2obj --docnum=1 %s -DBITS=32 -DMETADATA=0xF000002 -o %t3.o 23# RUN: llvm-readobj %t3.o --bb-addr-map 2>&1 | FileCheck %s -DFILE=%t3.o --check-prefix=INVALIDMD 24 25# CHECK: BBAddrMap [ 26# CHECK-NEXT: Function { 27# CHECK-NEXT: At: [[ADDR]] 28# CHECK-NEXT: warning: '[[FILE]]': could not identify function symbol for address ([[ADDR]]) in SHT_LLVM_BB_ADDR_MAP section with index 3 29# CHECK-NEXT: Name: <?> 30# CHECK-NEXT: BB Ranges [ 31# CHECK-NEXT: { 32# CHECK-NEXT: Base Address: [[ADDR]] 33# CHECK-NEXT: BB Entries [ 34# CHECK-NEXT: { 35# CHECK-NEXT: ID: 0 36# CHECK-NEXT: Offset: 0x0 37# CHECK-NEXT: Size: 0x1 38# CHECK-NEXT: HasReturn: No 39# CHECK-NEXT: HasTailCall: Yes 40# CHECK-NEXT: IsEHPad: No 41# CHECK-NEXT: CanFallThrough: No 42# CHECK-NEXT: HasIndirectBranch: No 43# CHECK-NEXT: } 44# CHECK-NEXT: ] 45# CHECK-NEXT: } 46# CHECK-NEXT: { 47# CHECK-NEXT: Base Address: 0x44444 48# CHECK-NEXT: BB Entries [ 49# CHECK-NEXT: { 50# CHECK-NEXT: ID: 2 51# CHECK-NEXT: Offset: 0x3 52# CHECK-NEXT: Size: 0x4 53# CHECK-NEXT: HasReturn: Yes 54# CHECK-NEXT: HasTailCall: No 55# CHECK-NEXT: IsEHPad: Yes 56# CHECK-NEXT: CanFallThrough: No 57# CHECK-NEXT: HasIndirectBranch: Yes 58# CHECK-NEXT: } 59# CHECK-NEXT: ] 60# CHECK-NEXT: } 61# CHECK-NEXT: ] 62# CHECK-NEXT: } 63# CHECK-NEXT: Function { 64# CHECK-NEXT: At: 0x22222 65# CHECK-NEXT: Name: foo 66# CHECK-NEXT: BB Ranges [ 67# CHECK-NEXT: { 68# CHECK-NEXT: Base Address: 0x22222 69# CHECK-NEXT: BB Entries [ 70# CHECK-NEXT: { 71# CHECK-NEXT: ID: 4 72# CHECK-NEXT: Offset: 0x6 73# CHECK-NEXT: Size: 0x7 74# CHECK-NEXT: HasReturn: No 75# CHECK-NEXT: HasTailCall: No 76# CHECK-NEXT: IsEHPad: No 77# CHECK-NEXT: CanFallThrough: Yes 78# CHECK-NEXT: HasIndirectBranch: No 79# CHECK-NEXT: } 80# CHECK-NEXT: ] 81# CHECK-NEXT: } 82# CHECK-NEXT: ] 83# CHECK-NEXT: } 84# CHECK-NEXT: ] 85 86# GNU: GNUStyle::printBBAddrMaps not implemented 87 88# TRUNCATED: BBAddrMap [ 89# TRUNCATED-NEXT: warning: '[[FILE]]': unable to dump SHT_LLVM_BB_ADDR_MAP section with index 3: unable to decode LEB128 at offset [[OFFSET]]: malformed uleb128, extends past end 90# TRUNCATED-NEXT: ] 91## Check that the other valid section is properly dumped. 92# TRUNCATED-NEXT: BBAddrMap [ 93# TRUNCATED-NEXT: Function { 94# TRUNCATED-NEXT: At: 0x33333 95# TRUNCATED-NEXT: Name: bar 96# TRUNCATED-NEXT: BB Ranges [ 97# TRUNCATED-NEXT: { 98# TRUNCATED-NEXT: Base Address: 0x33333 99# TRUNCATED-NEXT: BB Entries [ 100# TRUNCATED-NEXT: { 101# TRUNCATED-NEXT: ID: 6 102# TRUNCATED-NEXT: Offset: 0x9 103# TRUNCATED-NEXT: Size: 0xA 104# TRUNCATED-NEXT: HasReturn: Yes 105# TRUNCATED-NEXT: HasTailCall: Yes 106# TRUNCATED-NEXT: IsEHPad: No 107# TRUNCATED-NEXT: CanFallThrough: Yes 108# TRUNCATED-NEXT: HasIndirectBranch: Yes 109# TRUNCATED-NEXT: } 110# TRUNCATED-NEXT: { 111# TRUNCATED-NEXT: ID: 7 112# TRUNCATED-NEXT: Offset: 0x1F 113# TRUNCATED-NEXT: Size: 0xD 114# TRUNCATED-NEXT: HasReturn: No 115# TRUNCATED-NEXT: HasTailCall: Yes 116# TRUNCATED-NEXT: IsEHPad: Yes 117# TRUNCATED-NEXT: CanFallThrough: Yes 118# TRUNCATED-NEXT: HasIndirectBranch: No 119# TRUNCATED-NEXT: } 120# TRUNCATED-NEXT: ] 121# TRUNCATED-NEXT: } 122# TRUNCATED-NEXT: ] 123# TRUNCATED-NEXT: } 124# TRUNCATED-NEXT: ] 125 126# INVALIDMD: BBAddrMap [ 127# INVALIDMD-NEXT: warning: '[[FILE]]': unable to dump SHT_LLVM_BB_ADDR_MAP section with index 3: invalid encoding for BBEntry::Metadata: 0xf000002 128 129--- !ELF 130FileHeader: 131 Class: ELFCLASS[[BITS]] 132 Data: ELFDATA2LSB 133 Type: ET_EXEC 134Sections: 135 - Name: .text 136 Type: SHT_PROGBITS 137 Flags: [SHF_ALLOC] 138 - Name: .text.bar 139 Type: SHT_PROGBITS 140 Flags: [SHF_ALLOC] 141 - Name: .llvm_bb_addr_map 142 Type: SHT_LLVM_BB_ADDR_MAP 143 ShSize: [[SIZE=<none>]] 144 Link: .text 145 Entries: 146 - Version: 2 147 Feature: 0x8 148 BBRanges: 149 - BaseAddress: [[ADDR=0x11111]] 150 BBEntries: 151 - ID: 0 152 AddressOffset: 0x0 153 Size: 0x1 154 Metadata: [[METADATA=0x2]] 155 - BaseAddress: 0x44444 156 BBEntries: 157 - ID: 2 158 AddressOffset: 0x3 159 Size: 0x4 160 Metadata: 0x15 161 - Version: 2 162 BBRanges: 163 - BaseAddress: 0x22222 164 BBEntries: 165 - ID: 4 166 AddressOffset: 0x6 167 Size: 0x7 168 Metadata: 0x8 169 - Name: dummy_section 170 Type: SHT_PROGBITS 171 Size: 16 172 - Name: '.llvm_bb_addr_map (1)' 173 Type: SHT_LLVM_BB_ADDR_MAP 174 Link: .text.bar 175 Entries: 176 - Version: 2 177 BBRanges: 178 - BaseAddress: 0x33333 179 BBEntries: 180 - ID: 6 181 AddressOffset: 0x9 182 Size: 0xa 183 Metadata: 0x1b 184 - ID: 7 185 AddressOffset: 0xc 186 Size: 0xd 187 Metadata: 0xe 188Symbols: 189 - Name: foo 190 Section: .text 191 Type: STT_FUNC 192 Value: 0x22222 193 - Name: bar 194 Section: .text.bar 195 Type: STT_FUNC 196 Value: 0x33333 197