213 lines
6.6 KiB
Plaintext
213 lines
6.6 KiB
Plaintext
## This test checks how we handle the --bb-addr-map option.
|
|
|
|
## Check 64-bit:
|
|
# RUN: yaml2obj --docnum=1 %s -DBITS=64 -DADDR=0x999999999 -o %t1.x64.o
|
|
# RUN: llvm-readobj %t1.x64.o --bb-addr-map 2>&1 | FileCheck %s -DADDR=0x999999999 -DFILE=%t1.x64.o --check-prefix=CHECK
|
|
# RUN: llvm-readelf %t1.x64.o --bb-addr-map | FileCheck %s --check-prefix=GNU
|
|
|
|
## Check 64-bit:
|
|
# RUN: yaml2obj --docnum=1 %s -DBITS=64 -DADDR=0x999999999 -o %t1.v1.x64.o
|
|
# RUN: llvm-readobj %t1.v1.x64.o --bb-addr-map 2>&1 | FileCheck %s -DADDR=0x999999999 -DFILE=%t1.v1.x64.o --check-prefix=CHECK
|
|
|
|
## Check 32-bit:
|
|
# RUN: yaml2obj --docnum=1 %s -DBITS=32 -o %t1.x32.o
|
|
# RUN: llvm-readobj %t1.x32.o --bb-addr-map 2>&1 | FileCheck -DADDR=0x11111 %s -DFILE=%t1.x32.o --check-prefix=CHECK
|
|
# RUN: llvm-readelf %t1.x32.o --bb-addr-map | FileCheck %s --check-prefix=GNU
|
|
|
|
## Check that a malformed section can be handled.
|
|
# RUN: yaml2obj --docnum=1 %s -DBITS=32 -DSIZE=6 -o %t2.o
|
|
# RUN: llvm-readobj %t2.o --bb-addr-map 2>&1 | FileCheck %s -DOFFSET=0x00000006 -DFILE=%t2.o --check-prefix=TRUNCATED
|
|
|
|
# CHECK: BBAddrMap [
|
|
# CHECK-NEXT: Function {
|
|
# CHECK-NEXT: At: [[ADDR]]
|
|
# CHECK-NEXT: warning: '[[FILE]]': could not identify function symbol for address ([[ADDR]]) in SHT_LLVM_BB_ADDR_MAP section with index 3
|
|
# CHECK-NEXT: Name: <?>
|
|
# CHECK-NEXT: BB entries [
|
|
# CHECK-NEXT: {
|
|
# CHECK-NEXT: Offset: 0x0
|
|
# CHECK-NEXT: Size: 0x1
|
|
# CHECK-NEXT: HasReturn: No
|
|
# CHECK-NEXT: HasTailCall: Yes
|
|
# CHECK-NEXT: IsEHPad: No
|
|
# CHECK-NEXT: CanFallThrough: No
|
|
# CHECK-NEXT: }
|
|
# CHECK-NEXT: {
|
|
# CHECK-NEXT: Offset: 0x4
|
|
# CHECK-NEXT: Size: 0x4
|
|
# CHECK-NEXT: HasReturn: Yes
|
|
# CHECK-NEXT: HasTailCall: No
|
|
# CHECK-NEXT: IsEHPad: Yes
|
|
# CHECK-NEXT: CanFallThrough: No
|
|
# CHECK-NEXT: }
|
|
# CHECK-NEXT: ]
|
|
# CHECK-NEXT: }
|
|
# CHECK-NEXT: Function {
|
|
# CHECK-NEXT: At: 0x22222
|
|
# CHECK-NEXT: Name: foo
|
|
# CHECK-NEXT: BB entries [
|
|
# CHECK-NEXT: {
|
|
# CHECK-NEXT: Offset: 0x6
|
|
# CHECK-NEXT: Size: 0x7
|
|
# CHECK-NEXT: HasReturn: No
|
|
# CHECK-NEXT: HasTailCall: No
|
|
# CHECK-NEXT: IsEHPad: No
|
|
# CHECK-NEXT: CanFallThrough: Yes
|
|
# CHECK-NEXT: }
|
|
# CHECK-NEXT: ]
|
|
# CHECK-NEXT: }
|
|
# CHECK-NEXT: ]
|
|
|
|
# GNU: GNUStyle::printBBAddrMaps not implemented
|
|
|
|
# TRUNCATED: BBAddrMap [
|
|
# 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
|
|
# TRUNCATED-NEXT: ]
|
|
## Check that the other valid section is properly dumped.
|
|
# TRUNCATED-NEXT: BBAddrMap [
|
|
# TRUNCATED-NEXT: Function {
|
|
# TRUNCATED-NEXT: At: 0x33333
|
|
# TRUNCATED-NEXT: Name: bar
|
|
# TRUNCATED-NEXT: BB entries [
|
|
# TRUNCATED-NEXT: {
|
|
# TRUNCATED-NEXT: Offset: 0x9
|
|
# TRUNCATED-NEXT: Size: 0xA
|
|
# TRUNCATED-NEXT: HasReturn: Yes
|
|
# TRUNCATED-NEXT: HasTailCall: Yes
|
|
# TRUNCATED-NEXT: IsEHPad: No
|
|
# TRUNCATED-NEXT: CanFallThrough: Yes
|
|
# TRUNCATED-NEXT: }
|
|
# TRUNCATED-NEXT: {
|
|
# TRUNCATED-NEXT: Offset: 0x1F
|
|
# TRUNCATED-NEXT: Size: 0xD
|
|
# TRUNCATED-NEXT: HasReturn: No
|
|
# TRUNCATED-NEXT: HasTailCall: Yes
|
|
# TRUNCATED-NEXT: IsEHPad: Yes
|
|
# TRUNCATED-NEXT: CanFallThrough: Yes
|
|
# TRUNCATED-NEXT: }
|
|
# TRUNCATED-NEXT: ]
|
|
# TRUNCATED-NEXT: }
|
|
# TRUNCATED-NEXT: ]
|
|
|
|
--- !ELF
|
|
FileHeader:
|
|
Class: ELFCLASS[[BITS]]
|
|
Data: ELFDATA2LSB
|
|
Type: ET_EXEC
|
|
Sections:
|
|
- Name: .text
|
|
Type: SHT_PROGBITS
|
|
Flags: [SHF_ALLOC]
|
|
- Name: .text.bar
|
|
Type: SHT_PROGBITS
|
|
Flags: [SHF_ALLOC]
|
|
- Name: .llvm_bb_addr_map
|
|
Type: SHT_LLVM_BB_ADDR_MAP
|
|
ShSize: [[SIZE=<none>]]
|
|
Link: .text
|
|
Entries:
|
|
- Version: 1
|
|
Address: [[ADDR=0x11111]]
|
|
BBEntries:
|
|
- AddressOffset: 0x0
|
|
Size: 0x1
|
|
Metadata: 0xF0000002
|
|
- AddressOffset: 0x3
|
|
Size: 0x4
|
|
Metadata: 0x5
|
|
- Version: 1
|
|
Address: 0x22222
|
|
BBEntries:
|
|
- AddressOffset: 0x6
|
|
Size: 0x7
|
|
Metadata: 0x8
|
|
- Name: dummy_section
|
|
Type: SHT_PROGBITS
|
|
Size: 16
|
|
- Name: '.llvm_bb_addr_map (1)'
|
|
Type: SHT_LLVM_BB_ADDR_MAP
|
|
Link: .text.bar
|
|
Entries:
|
|
- Version: 1
|
|
Address: 0x33333
|
|
BBEntries:
|
|
- AddressOffset: 0x9
|
|
Size: 0xa
|
|
Metadata: 0xb
|
|
- AddressOffset: 0xc
|
|
Size: 0xd
|
|
Metadata: 0xe
|
|
Symbols:
|
|
- Name: foo
|
|
Section: .text
|
|
Type: STT_FUNC
|
|
Value: 0x22222
|
|
- Name: bar
|
|
Section: .text.bar
|
|
Type: STT_FUNC
|
|
Value: 0x33333
|
|
|
|
## Check that using the SHT_LLVM_BB_ADDR_MAP_V0 section type generates the same
|
|
## result as using the SHT_LLVM_BB_ADDR_MAP section type with Version=0.
|
|
## The Version field is required even for SHT_LLVM_BB_ADDR_MAP_V0 but it
|
|
## should not impact the result. This unideal behavior will be gone once
|
|
## SHT_LLVM_BB_ADDR_MAP_V0 is deprecated.
|
|
|
|
# RUN: yaml2obj --docnum=2 %s -DVERSION=255 -DSECTION_TYPE=SHT_LLVM_BB_ADDR_MAP_V0 -o %t2.type0
|
|
# RUN: llvm-readobj %t2.type0 --bb-addr-map 2>&1 | FileCheck %s --check-prefix=V0
|
|
|
|
# RUN: yaml2obj --docnum=2 %s -DVERSION=0 -DSECTION_TYPE=SHT_LLVM_BB_ADDR_MAP -o %t2.version0
|
|
# RUN: llvm-readobj %t2.version0 --bb-addr-map 2>&1 | FileCheck %s --check-prefix=V0
|
|
|
|
# V0: BBAddrMap [
|
|
# V0-NEXT: Function {
|
|
# V0-NEXT: At: 0x11111
|
|
# V0-NEXT: Name: foo
|
|
# V0-NEXT: BB entries [
|
|
# V0-NEXT: {
|
|
# V0-NEXT: Offset: 0x1
|
|
# V0-NEXT: Size: 0x2
|
|
# V0-NEXT: HasReturn:
|
|
# V0-NEXT: HasTailCall:
|
|
# V0-NEXT: IsEHPad:
|
|
# V0-NEXT: CanFallThrough:
|
|
# V0-NEXT: }
|
|
# V0-NEXT: {
|
|
# V0-NEXT: Offset: 0x4
|
|
# V0-NEXT: Size: 0x5
|
|
# V0-NEXT: HasReturn:
|
|
# V0-NEXT: HasTailCall:
|
|
# V0-NEXT: IsEHPad:
|
|
# V0-NEXT: CanFallThrough:
|
|
# V0-NEXT: }
|
|
# V0-NEXT: ]
|
|
# V0-NEXT: }
|
|
|
|
--- !ELF
|
|
FileHeader:
|
|
Class: ELFCLASS64
|
|
Data: ELFDATA2LSB
|
|
Type: ET_EXEC
|
|
Sections:
|
|
- Name: .text.foo
|
|
Type: SHT_PROGBITS
|
|
Flags: [SHF_ALLOC]
|
|
- Name: .llvm_bb_addr_map
|
|
Type: [[SECTION_TYPE]]
|
|
Link: .text.foo
|
|
Entries:
|
|
- Version: [[VERSION]]
|
|
Address: 0x11111
|
|
BBEntries:
|
|
- AddressOffset: 0x1
|
|
Size: 0x2
|
|
Metadata: 0x3
|
|
- AddressOffset: 0x4
|
|
Size: 0x5
|
|
Metadata: 0x6
|
|
Symbols:
|
|
- Name: foo
|
|
Section: .text.foo
|
|
Type: STT_FUNC
|
|
Value: 0x11111
|