blob: 9711d04fe79741bf16b39b39015fca09a5e8d461 [file] [log] [blame]
# RUN: yaml2obj --docnum=1 %s -o %t.1
# RUN: llvm-readobj --sframe=.sframe_eof_address --sframe=.sframe_eof_offset --sframe \
# RUN: %t.1 2>&1 | \
# RUN: FileCheck %s --strict-whitespace --match-full-lines \
# RUN: -DFILE=%t.1 --check-prefix=CASE1
# RUN: yaml2obj --docnum=2 %s -o %t.2
# RUN: llvm-readobj --sframe %t.2 2>&1 | \
# RUN: FileCheck %s --strict-whitespace --match-full-lines \
# RUN: -DFILE=%t.2 --check-prefix=CASE2
--- !ELF
FileHeader:
Class: ELFCLASS64
Data: ELFDATA2LSB
Type: ET_EXEC
Sections:
- Name: .sframe_eof_address
Type: SHT_GNU_SFRAME
Flags: [ SHF_ALLOC ]
ContentArray: [
0xe2, 0xde, 0x02, 0x04, # Preamble (magic, version, flags)
# Header:
0x03, 0x42, 0x47, 0x00, # ABI, Fixed FP offset, Fixed RA Offset, AUX header length
0x01, 0x00, 0x00, 0x00, # Number of FDEs
0x01, 0x00, 0x00, 0x00, # Number of FREs
0x00, 0x10, 0x00, 0x00, # FRE length
0x00, 0x00, 0x00, 0x00, # FDE offset
0x00, 0x00, 0x00, 0x00, # FRE offset
# FDE[0]:
0x00, 0xde, 0xad, 0x00, # Start Address
0xbe, 0x01, 0x00, 0x00, # Size
0x00, 0x00, 0x00, 0x00, # Start FRE Offset
0x01, 0x00, 0x00, 0x00, # Number of FREs
0x00, 0xde, 0xad, 0x00, # Info, RepSize, Padding2
# FRE[0]:
0x00 # Start Address, (missing) Info
]
# CASE1-LABEL:SFrame section '.sframe_eof_address' {
# CASE1: FuncDescEntry [0] {
# CASE1: Info {
# CASE1-NEXT: FRE Type: Addr1 (0x0)
# CASE1-NEXT: FDE Type: PCInc (0x0)
# CASE1: FREs [
# CASE1-NEXT:{{.*}}: warning: '[[FILE]]': unexpected end of data at offset 0x31 while reading [0x30, 0x32)
# CASE1-NEXT: ]
- Name: .sframe_eof_offset
Type: SHT_GNU_SFRAME
Flags: [ SHF_ALLOC ]
ContentArray: [
0xe2, 0xde, 0x02, 0x04, # Preamble (magic, version, flags)
# Header:
0x03, 0x42, 0x47, 0x00, # ABI, Fixed FP offset, Fixed RA Offset, AUX header length
0x01, 0x00, 0x00, 0x00, # Number of FDEs
0x01, 0x00, 0x00, 0x00, # Number of FREs
0x00, 0x10, 0x00, 0x00, # FRE length
0x00, 0x00, 0x00, 0x00, # FDE offset
0x00, 0x00, 0x00, 0x00, # FRE offset
# FDE[0]:
0x00, 0xde, 0xad, 0x00, # Start Address
0xbe, 0x01, 0x00, 0x00, # Size
0x00, 0x00, 0x00, 0x00, # Start FRE Offset
0x01, 0x00, 0x00, 0x00, # Number of FREs
0x00, 0xde, 0xad, 0x00, # Info, RepSize, Padding2
# FRE[0]:
0x00, 0x02 # Start Address, Info, (missing) Offsets
]
# CASE1-LABEL:SFrame section '.sframe_eof_offset' {
# CASE1: FuncDescEntry [0] {
# CASE1: Info {
# CASE1-NEXT: FRE Type: Addr1 (0x0)
# CASE1-NEXT: FDE Type: PCInc (0x0)
# CASE1: FREs [
# CASE1-NEXT:{{.*}}: warning: '[[FILE]]': unexpected end of data at offset 0x32 while reading [0x32, 0x33)
# CASE1-NEXT: ]
- Name: .sframe
Type: SHT_GNU_SFRAME
Flags: [ SHF_ALLOC ]
ContentArray: [
0xe2, 0xde, 0x02, 0x04, # Preamble (magic, version, flags)
# Header:
0x03, 0x42, 0x40, 0x00, # ABI, Fixed FP offset, Fixed RA Offset, AUX header length
0x02, 0x00, 0x00, 0x00, # Number of FDEs
0x01, 0x00, 0x00, 0x00, # Number of FREs
0x00, 0x10, 0x00, 0x00, # FRE length
0x00, 0x00, 0x00, 0x00, # FDE offset
0x00, 0x00, 0x00, 0x00, # FRE offset
# FDE[0]:
0x00, 0x00, 0xde, 0x00, # Start Address
0xbe, 0x01, 0x00, 0x00, # Size
0x00, 0x00, 0x00, 0x00, # Start FRE Offset
0x02, 0x00, 0x00, 0x00, # Number of FREs
0x00, 0xde, 0xad, 0x00, # Info, RepSize, Padding2
# FDE[1]:
0x00, 0x00, 0xad, 0x00, # Start Address
0xbe, 0x01, 0x00, 0x00, # Size
0x08, 0x00, 0x00, 0x00, # Start FRE Offset
0x03, 0x00, 0x00, 0x00, # Number of FREs
0x11, 0xde, 0xad, 0x00, # Info, RepSize, Padding2
# FRE[0,0]: Zero offsets
0x00, 0x00, # Start Address, Info
# FRE[0,1]: One four-byte offset, SP-based
0x01, 0x43, # Start Address, Info
0x74, 0x00, 0x00, 0x00, # Offset[0]
# FRE[1,0]: Two two-byte offsets, FP-based
0x00, 0x00, 0x24, # Start Address, Info
0x10, 0x00, 0x20, 0x00, # Offset[0], Offset[1]
# FRE[1,1]: Four one-byte offsets, FP-based
0x00, 0x01, 0x08, # Start Address, Info
0x10, 0x20, 0x30, 0x40, # Offset[0-3]
]
## Testing:
## - little-endian support
## - AMD64 ABI
## - one and two byte address sizes
## - PCInc and PCMask FDE types
## - all offset sizes
## - various offset counts
## - hitting EOF after printing some number of FREs
# CASE1-LABEL:SFrame section '.sframe' {
# CASE1: ABI: AMD64EndianLittle (0x3)
# CASE1: CFA fixed RA offset: 64
# CASE1: FuncDescEntry [0] {
# CASE1-NEXT: PC: 0xDE007F
# CASE1: Info {
# CASE1-NEXT: FRE Type: Addr1 (0x0)
# CASE1-NEXT: FDE Type: PCInc (0x0)
# CASE1: FREs [
# CASE1-NEXT: Frame Row Entry {
# CASE1-NEXT: Start Address: 0xDE007F
# CASE1-NEXT: Return Address Signed: No
# CASE1-NEXT: Offset Size: B1 (0x0)
# CASE1-NEXT: Base Register: FP (0x0)
# CASE1-NEXT: RA Offset: 64
# CASE1-NEXT: }
# CASE1-NEXT: Frame Row Entry {
# CASE1-NEXT: Start Address: 0xDE0080
# CASE1-NEXT: Return Address Signed: No
# CASE1-NEXT: Offset Size: B4 (0x2)
# CASE1-NEXT: Base Register: SP (0x1)
# CASE1-NEXT: CFA Offset: 116
# CASE1-NEXT: RA Offset: 64
# CASE1-NEXT: }
# CASE1-NEXT: ]
# CASE1: FuncDescEntry [1] {
# CASE1-NEXT: PC: 0xAD0093
# CASE1: Info {
# CASE1-NEXT: FRE Type: Addr2 (0x1)
# CASE1-NEXT: FDE Type: PCMask (0x1)
# CASE1: FREs [
# CASE1-NEXT: Frame Row Entry {
# CASE1-NEXT: Start Address: 0x0
# CASE1-NEXT: Return Address Signed: No
# CASE1-NEXT: Offset Size: B2 (0x1)
# CASE1-NEXT: Base Register: FP (0x0)
# CASE1-NEXT: CFA Offset: 16
# CASE1-NEXT: RA Offset: 64
# CASE1-NEXT: FP Offset: 32
# CASE1-NEXT: }
# CASE1-NEXT: Frame Row Entry {
# CASE1-NEXT: Start Address: 0x100
# CASE1-NEXT: Return Address Signed: No
# CASE1-NEXT: Offset Size: B1 (0x0)
# CASE1-NEXT: Base Register: FP (0x0)
# CASE1-NEXT: CFA Offset: 16
# CASE1-NEXT: RA Offset: 64
# CASE1-NEXT: FP Offset: 32
# CASE1-NEXT: Extra Offsets: [48, 64]
# CASE1-NEXT: }
# CASE1-NEXT:{{.*}}: warning: '[[FILE]]': unexpected end of data at offset 0x5a while reading [0x5a, 0x5d)
--- !ELF
FileHeader:
Class: ELFCLASS64
Data: ELFDATA2MSB
Type: ET_EXEC
Sections:
- Name: .sframe
Type: SHT_GNU_SFRAME
Flags: [ SHF_ALLOC ]
ContentArray: [
0xde, 0xe2, 0x02, 0x05, # Preamble (magic, version, flags)
# Header:
0x01, 0x42, 0x47, 0x00, # ABI, Fixed FP offset, Fixed RA Offset, AUX header length
0x00, 0x00, 0x00, 0x01, # Number of FDEs
0x00, 0x00, 0x00, 0x10, # Number of FREs
0x00, 0x00, 0x10, 0x00, # FRE length
0x00, 0x00, 0x00, 0x00, # FDE offset
0x00, 0x00, 0x01, 0x00, # FRE offset
# FDE:
0x00, 0xde, 0x00, 0x00, # Start Address
0x00, 0x00, 0x01, 0xbe, # Size
0x00, 0x00, 0x00, 0x00, # Start FRE Offset
0x00, 0x00, 0x00, 0x05, # Number of FREs
0x02, 0xde, 0xad, 0x00, # Info, RepSize, Padding2
# FRE[0]: Zero offsets
0x00, 0x00, 0x00, 0x00, # Start Address
0x00, # Info
# FRE[1]: One offset
0x00, 0x00, 0x00, 0x01, # Start Address
0x82, 0x10, # Info, Offset[0]
# FRE[2]: Two offsets
0x00, 0x00, 0x00, 0x02, # Start Address
0x04, 0x10, 0x20, # Info, Offset[0-1]
# FRE[3]: Three offsets
0x00, 0x00, 0x00, 0x03, # Start Address
0x86, 0x10, 0x20, 0x30, # Info, Offset[0-2]
# FRE[4]: Four offsets
0x00, 0x00, 0x00, 0x04, # Start Address
0x08, # Info
0x10, 0x20, 0x30, 0x40, # Offset[0-3]
]
## Testing:
## - big-endian support
## - ARM64 ABI
## - four-byte address sizes
## - return address signing
## - various offset counts
# CASE2-LABEL:SFrame section '.sframe' {
# CASE2: ABI: AArch64EndianBig (0x1)
# CASE2: FuncDescEntry [0] {
# CASE2-NEXT: PC: 0xDE001C
# CASE2: Info {
# CASE2-NEXT: FRE Type: Addr4 (0x2)
# CASE2-NEXT: FDE Type: PCInc (0x0)
# CASE2: FREs [
# CASE2-NEXT: Frame Row Entry {
# CASE2-NEXT: Start Address: 0xDE001C
# CASE2-NEXT: Return Address Signed: No
# CASE2-NEXT: Offset Size: B1 (0x0)
# CASE2-NEXT: Base Register: FP (0x0)
# CASE2-NEXT: }
# CASE2-NEXT: Frame Row Entry {
# CASE2-NEXT: Start Address: 0xDE001D
# CASE2-NEXT: Return Address Signed: Yes
# CASE2-NEXT: Offset Size: B1 (0x0)
# CASE2-NEXT: Base Register: FP (0x0)
# CASE2-NEXT: CFA Offset: 16
# CASE2-NEXT: }
# CASE2-NEXT: Frame Row Entry {
# CASE2-NEXT: Start Address: 0xDE001E
# CASE2-NEXT: Return Address Signed: No
# CASE2-NEXT: Offset Size: B1 (0x0)
# CASE2-NEXT: Base Register: FP (0x0)
# CASE2-NEXT: CFA Offset: 16
# CASE2-NEXT: RA Offset: 32
# CASE2-NEXT: }
# CASE2-NEXT: Frame Row Entry {
# CASE2-NEXT: Start Address: 0xDE001F
# CASE2-NEXT: Return Address Signed: Yes
# CASE2-NEXT: Offset Size: B1 (0x0)
# CASE2-NEXT: Base Register: FP (0x0)
# CASE2-NEXT: CFA Offset: 16
# CASE2-NEXT: RA Offset: 32
# CASE2-NEXT: FP Offset: 48
# CASE2-NEXT: }
# CASE2-NEXT: Frame Row Entry {
# CASE2-NEXT: Start Address: 0xDE0020
# CASE2-NEXT: Return Address Signed: No
# CASE2-NEXT: Offset Size: B1 (0x0)
# CASE2-NEXT: Base Register: FP (0x0)
# CASE2-NEXT: CFA Offset: 16
# CASE2-NEXT: RA Offset: 32
# CASE2-NEXT: FP Offset: 48
# CASE2-NEXT: Extra Offsets: [64]
# CASE2-NEXT: }