1## This test checks how we handle the --bb-addr-map option. 2 3## Check 64-bit: 4# RUN: yaml2obj %s -DBITS=64 -DADDR=0xFFFFFFFF1 -o %t1.x64.o 5# RUN: llvm-readobj %t1.x64.o --bb-addr-map | FileCheck %s -DADDR=0xFFFFFFFF1 --check-prefix=LLVM 6# RUN: llvm-readelf %t1.x64.o --bb-addr-map | FileCheck %s --check-prefix=GNU 7 8## Check 32-bit: 9# RUN: yaml2obj %s -DBITS=32 -o %t1.x32.o 10# RUN: llvm-readobj %t1.x32.o --bb-addr-map | FileCheck -DADDR=0x11111 %s --check-prefix=LLVM 11# RUN: llvm-readelf %t1.x32.o --bb-addr-map | FileCheck %s --check-prefix=GNU 12 13## Check that a malformed section can be handled. 14# RUN: yaml2obj %s -DBITS=32 -DSIZE=4 -o %t2.o 15# RUN: llvm-readobj %t2.o --bb-addr-map 2>&1 | FileCheck %s -DOFFSET=0x00000004 -DFILE=%t2.o --check-prefix=TRUNCATED 16 17# LLVM: BBAddrMap [ 18# LLVM-NEXT: Function { 19# LLVM-NEXT: At: [[ADDR]] 20# LLVM-NEXT: BB entries [ 21# LLVM-NEXT: { 22# LLVM-NEXT: Offset: 0x0 23# LLVM-NEXT: Size: 0x1 24# LLVM-NEXT: HasReturn: No 25# LLVM-NEXT: HasTailCall: Yes 26# LLVM-NEXT: IsEHPad: No 27# LLVM-NEXT: CanFallThrough: No 28# LLVM-NEXT: } 29# LLVM-NEXT: { 30# LLVM-NEXT: Offset: 0x3 31# LLVM-NEXT: Size: 0x4 32# LLVM-NEXT: HasReturn: Yes 33# LLVM-NEXT: HasTailCall: No 34# LLVM-NEXT: IsEHPad: Yes 35# LLVM-NEXT: CanFallThrough: No 36# LLVM-NEXT: } 37# LLVM-NEXT: ] 38# LLVM-NEXT: } 39# LLVM-NEXT: Function { 40# LLVM-NEXT: At: 0x22222 41# LLVM-NEXT: BB entries [ 42# LLVM-NEXT: { 43# LLVM-NEXT: Offset: 0x6 44# LLVM-NEXT: Size: 0x7 45# LLVM-NEXT: HasReturn: No 46# LLVM-NEXT: HasTailCall: No 47# LLVM-NEXT: IsEHPad: No 48# LLVM-NEXT: CanFallThrough: Yes 49# LLVM-NEXT: } 50# LLVM-NEXT: ] 51# LLVM-NEXT: } 52# LLVM-NEXT: ] 53# LLVM-NEXT: BBAddrMap [ 54# LLVM-NEXT: Function { 55# LLVM-NEXT: At: 0x33333 56# LLVM-NEXT: BB entries [ 57# LLVM-NEXT: { 58# LLVM-NEXT: Offset: 0x9 59# LLVM-NEXT: Size: 0xA 60# LLVM-NEXT: HasReturn: Yes 61# LLVM-NEXT: HasTailCall: Yes 62# LLVM-NEXT: IsEHPad: No 63# LLVM-NEXT: CanFallThrough: Yes 64# LLVM-NEXT: } 65# LLVM-NEXT: ] 66# LLVM-NEXT: } 67# LLVM-NEXT: ] 68 69# GNU: GNUStyle::printBBAddrMaps not implemented 70 71# TRUNCATED: BBAddrMap [ 72# TRUNCATED-NEXT: warning: '[[FILE]]': unable to dump SHT_LLVM_BB_ADDR_MAP section with index 1: unable to decode LEB128 at offset [[OFFSET]]: malformed uleb128, extends past end 73# TRUNCATED-NEXT: ] 74## Check that the other valid section is properly dumped. 75# TRUNCATED-NEXT: BBAddrMap [ 76# TRUNCATED-NEXT: Function { 77# TRUNCATED-NEXT: At: 0x33333 78# TRUNCATED-NEXT: BB entries [ 79# TRUNCATED-NEXT: { 80# TRUNCATED-NEXT: Offset: 0x9 81# TRUNCATED-NEXT: Size: 0xA 82# TRUNCATED-NEXT: HasReturn: Yes 83# TRUNCATED-NEXT: HasTailCall: Yes 84# TRUNCATED-NEXT: IsEHPad: No 85# TRUNCATED-NEXT: CanFallThrough: Yes 86# TRUNCATED-NEXT: } 87# TRUNCATED-NEXT: ] 88# TRUNCATED-NEXT: } 89# TRUNCATED-NEXT: ] 90 91--- !ELF 92FileHeader: 93 Class: ELFCLASS[[BITS]] 94 Data: ELFDATA2LSB 95 Type: ET_EXEC 96Sections: 97 - Name: bb_addr_map_1 98 Type: SHT_LLVM_BB_ADDR_MAP 99 ShSize: [[SIZE=<none>]] 100 Entries: 101 - Address: [[ADDR=0x11111]] 102 BBEntries: 103 - AddressOffset: 0x0 104 Size: 0x1 105 Metadata: 0xF0000002 106 - AddressOffset: 0x3 107 Size: 0x4 108 Metadata: 0x5 109 - Address: 0x22222 110 BBEntries: 111 - AddressOffset: 0x6 112 Size: 0x7 113 Metadata: 0x8 114 - Name: dummy_section 115 Type: SHT_PROGBITS 116 Size: 16 117 - Name: bb_addr_map_2 118 Type: SHT_LLVM_BB_ADDR_MAP 119 Entries: 120 - Address: 0x33333 121 BBEntries: 122 - AddressOffset: 0x9 123 Size: 0xa 124 Metadata: 0xb 125