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=6 -o %t2.o 19# RUN: llvm-readobj %t2.o --bb-addr-map 2>&1 | FileCheck %s -DOFFSET=0x00000006 -DFILE=%t2.o --check-prefix=TRUNCATED 20 21# CHECK: BBAddrMap [ 22# CHECK-NEXT: Function { 23# CHECK-NEXT: At: [[ADDR]] 24# CHECK-NEXT: warning: '[[FILE]]': could not identify function symbol for address ([[ADDR]]) in SHT_LLVM_BB_ADDR_MAP section with index 3 25# CHECK-NEXT: Name: <?> 26# CHECK-NEXT: BB entries [ 27# CHECK-NEXT: { 28# CHECK-NEXT: Offset: 0x0 29# CHECK-NEXT: Size: 0x1 30# CHECK-NEXT: HasReturn: No 31# CHECK-NEXT: HasTailCall: Yes 32# CHECK-NEXT: IsEHPad: No 33# CHECK-NEXT: CanFallThrough: No 34# CHECK-NEXT: } 35# CHECK-NEXT: { 36# CHECK-NEXT: Offset: 0x4 37# CHECK-NEXT: Size: 0x4 38# CHECK-NEXT: HasReturn: Yes 39# CHECK-NEXT: HasTailCall: No 40# CHECK-NEXT: IsEHPad: Yes 41# CHECK-NEXT: CanFallThrough: No 42# CHECK-NEXT: } 43# CHECK-NEXT: ] 44# CHECK-NEXT: } 45# CHECK-NEXT: Function { 46# CHECK-NEXT: At: 0x22222 47# CHECK-NEXT: Name: foo 48# CHECK-NEXT: BB entries [ 49# CHECK-NEXT: { 50# CHECK-NEXT: Offset: 0x6 51# CHECK-NEXT: Size: 0x7 52# CHECK-NEXT: HasReturn: No 53# CHECK-NEXT: HasTailCall: No 54# CHECK-NEXT: IsEHPad: No 55# CHECK-NEXT: CanFallThrough: Yes 56# CHECK-NEXT: } 57# CHECK-NEXT: ] 58# CHECK-NEXT: } 59# CHECK-NEXT: ] 60 61# GNU: GNUStyle::printBBAddrMaps not implemented 62 63# TRUNCATED: BBAddrMap [ 64# 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 65# TRUNCATED-NEXT: ] 66## Check that the other valid section is properly dumped. 67# TRUNCATED-NEXT: BBAddrMap [ 68# TRUNCATED-NEXT: Function { 69# TRUNCATED-NEXT: At: 0x33333 70# TRUNCATED-NEXT: Name: bar 71# TRUNCATED-NEXT: BB entries [ 72# TRUNCATED-NEXT: { 73# TRUNCATED-NEXT: Offset: 0x9 74# TRUNCATED-NEXT: Size: 0xA 75# TRUNCATED-NEXT: HasReturn: Yes 76# TRUNCATED-NEXT: HasTailCall: Yes 77# TRUNCATED-NEXT: IsEHPad: No 78# TRUNCATED-NEXT: CanFallThrough: Yes 79# TRUNCATED-NEXT: } 80# TRUNCATED-NEXT: { 81# TRUNCATED-NEXT: Offset: 0x1F 82# TRUNCATED-NEXT: Size: 0xD 83# TRUNCATED-NEXT: HasReturn: No 84# TRUNCATED-NEXT: HasTailCall: Yes 85# TRUNCATED-NEXT: IsEHPad: Yes 86# TRUNCATED-NEXT: CanFallThrough: Yes 87# TRUNCATED-NEXT: } 88# TRUNCATED-NEXT: ] 89# TRUNCATED-NEXT: } 90# TRUNCATED-NEXT: ] 91 92--- !ELF 93FileHeader: 94 Class: ELFCLASS[[BITS]] 95 Data: ELFDATA2LSB 96 Type: ET_EXEC 97Sections: 98 - Name: .text 99 Type: SHT_PROGBITS 100 Flags: [SHF_ALLOC] 101 - Name: .text.bar 102 Type: SHT_PROGBITS 103 Flags: [SHF_ALLOC] 104 - Name: .llvm_bb_addr_map 105 Type: SHT_LLVM_BB_ADDR_MAP 106 ShSize: [[SIZE=<none>]] 107 Link: .text 108 Entries: 109 - Version: 1 110 Address: [[ADDR=0x11111]] 111 BBEntries: 112 - AddressOffset: 0x0 113 Size: 0x1 114 Metadata: 0xF0000002 115 - AddressOffset: 0x3 116 Size: 0x4 117 Metadata: 0x5 118 - Version: 1 119 Address: 0x22222 120 BBEntries: 121 - AddressOffset: 0x6 122 Size: 0x7 123 Metadata: 0x8 124 - Name: dummy_section 125 Type: SHT_PROGBITS 126 Size: 16 127 - Name: '.llvm_bb_addr_map (1)' 128 Type: SHT_LLVM_BB_ADDR_MAP 129 Link: .text.bar 130 Entries: 131 - Version: 1 132 Address: 0x33333 133 BBEntries: 134 - AddressOffset: 0x9 135 Size: 0xa 136 Metadata: 0xb 137 - AddressOffset: 0xc 138 Size: 0xd 139 Metadata: 0xe 140Symbols: 141 - Name: foo 142 Section: .text 143 Type: STT_FUNC 144 Value: 0x22222 145 - Name: bar 146 Section: .text.bar 147 Type: STT_FUNC 148 Value: 0x33333 149 150## Check that using the SHT_LLVM_BB_ADDR_MAP_V0 section type generates the same 151## result as using the SHT_LLVM_BB_ADDR_MAP section type with Version=0. 152## The Version field is required even for SHT_LLVM_BB_ADDR_MAP_V0 but it 153## should not impact the result. This unideal behavior will be gone once 154## SHT_LLVM_BB_ADDR_MAP_V0 is deprecated. 155 156# RUN: yaml2obj --docnum=2 %s -DVERSION=255 -DSECTION_TYPE=SHT_LLVM_BB_ADDR_MAP_V0 -o %t2.type0 157# RUN: llvm-readobj %t2.type0 --bb-addr-map 2>&1 | FileCheck %s --check-prefix=V0 158 159# RUN: yaml2obj --docnum=2 %s -DVERSION=0 -DSECTION_TYPE=SHT_LLVM_BB_ADDR_MAP -o %t2.version0 160# RUN: llvm-readobj %t2.version0 --bb-addr-map 2>&1 | FileCheck %s --check-prefix=V0 161 162# V0: BBAddrMap [ 163# V0-NEXT: Function { 164# V0-NEXT: At: 0x11111 165# V0-NEXT: Name: foo 166# V0-NEXT: BB entries [ 167# V0-NEXT: { 168# V0-NEXT: Offset: 0x1 169# V0-NEXT: Size: 0x2 170# V0-NEXT: HasReturn: 171# V0-NEXT: HasTailCall: 172# V0-NEXT: IsEHPad: 173# V0-NEXT: CanFallThrough: 174# V0-NEXT: } 175# V0-NEXT: { 176# V0-NEXT: Offset: 0x4 177# V0-NEXT: Size: 0x5 178# V0-NEXT: HasReturn: 179# V0-NEXT: HasTailCall: 180# V0-NEXT: IsEHPad: 181# V0-NEXT: CanFallThrough: 182# V0-NEXT: } 183# V0-NEXT: ] 184# V0-NEXT: } 185 186--- !ELF 187FileHeader: 188 Class: ELFCLASS64 189 Data: ELFDATA2LSB 190 Type: ET_EXEC 191Sections: 192 - Name: .text.foo 193 Type: SHT_PROGBITS 194 Flags: [SHF_ALLOC] 195 - Name: .llvm_bb_addr_map 196 Type: [[SECTION_TYPE]] 197 Link: .text.foo 198 Entries: 199 - Version: [[VERSION]] 200 Address: 0x11111 201 BBEntries: 202 - AddressOffset: 0x1 203 Size: 0x2 204 Metadata: 0x3 205 - AddressOffset: 0x4 206 Size: 0x5 207 Metadata: 0x6 208Symbols: 209 - Name: foo 210 Section: .text.foo 211 Type: STT_FUNC 212 Value: 0x11111 213