blob: 64f6f779d005885e1a0ec99d0ccc6602838be3d6 [file] [edit]
## Check we can parse .eh_frame_hdr with sdata8 encoding (used for large binaries).
## Header uses eh_frame_ptr_enc=0x1c (pcrel|sdata8) and table_enc=0x3c (datarel|sdata8).
# RUN: yaml2obj --docnum=1 %s -o %t.sdata8
# RUN: llvm-readelf --unwind %t.sdata8 | FileCheck %s --check-prefix=SDATA8
# SDATA8: EHFrameHeader {
# SDATA8-NEXT: Address: 0x1000
# SDATA8-NEXT: Offset: 0x78
# SDATA8-NEXT: Size: 0x30
# SDATA8-NEXT: Corresponding Section: .eh_frame_hdr
# SDATA8-NEXT: Header {
# SDATA8-NEXT: version: 1
# SDATA8-NEXT: eh_frame_ptr_enc: 0x1c
# SDATA8-NEXT: fde_count_enc: 0x3
# SDATA8-NEXT: table_enc: 0x3c
# SDATA8-NEXT: eh_frame_ptr: 0x1030
# SDATA8-NEXT: fde_count: 2
# SDATA8-NEXT: entry 0 {
# SDATA8-NEXT: initial_location: 0x2000
# SDATA8-NEXT: address: 0x1048
# SDATA8-NEXT: }
# SDATA8-NEXT: entry 1 {
# SDATA8-NEXT: initial_location: 0x2001
# SDATA8-NEXT: address: 0x1068
# SDATA8-NEXT: }
# SDATA8-NEXT: }
# SDATA8-NEXT: }
--- !ELF
FileHeader:
Class: ELFCLASS64
Data: ELFDATA2LSB
Type: ET_EXEC
Machine: EM_X86_64
Sections:
- Name: .eh_frame_hdr
Type: SHT_PROGBITS
Flags: [ SHF_ALLOC ]
Address: 0x1000
AddressAlign: 4
## Header: version=1, eh_frame_ptr_enc=0x1c (pcrel|sdata8),
## fde_count_enc=0x03 (udata4), table_enc=0x3c (datarel|sdata8)
## eh_frame_ptr: 0x2c (8 bytes) -> points to 0x1004 + 0x2c = 0x1030
## fde_count: 2 (4 bytes)
## entry 0: initial_location=0x1000 (0x2000-0x1000), address=0x48 (0x1048-0x1000)
## entry 1: initial_location=0x1001 (0x2001-0x1000), address=0x68 (0x1068-0x1000)
Content: 011c033c2c00000000000000020000000010000000000000480000000000000001100000000000006800000000000000
ProgramHeaders:
- Type: PT_GNU_EH_FRAME
Flags: [ PF_R ]
VAddr: 0x1000
PAddr: 0x1000
MemSize: 0x30
FileSize: 0x30
FirstSec: .eh_frame_hdr
LastSec: .eh_frame_hdr
## Check we can parse .eh_frame_hdr with mixed encoding: sdata8 for eh_frame_ptr, sdata4 for table.
# RUN: yaml2obj --docnum=2 %s -o %t.mixed
# RUN: llvm-readelf --unwind %t.mixed | FileCheck %s --check-prefix=MIXED
# MIXED: EHFrameHeader {
# MIXED-NEXT: Address: 0x1000
# MIXED-NEXT: Offset: 0x78
# MIXED-NEXT: Size: 0x20
# MIXED-NEXT: Corresponding Section: .eh_frame_hdr
# MIXED-NEXT: Header {
# MIXED-NEXT: version: 1
# MIXED-NEXT: eh_frame_ptr_enc: 0x1c
# MIXED-NEXT: fde_count_enc: 0x3
# MIXED-NEXT: table_enc: 0x3b
# MIXED-NEXT: eh_frame_ptr: 0x1020
# MIXED-NEXT: fde_count: 2
# MIXED-NEXT: entry 0 {
# MIXED-NEXT: initial_location: 0x2000
# MIXED-NEXT: address: 0x1030
# MIXED-NEXT: }
# MIXED-NEXT: entry 1 {
# MIXED-NEXT: initial_location: 0x2001
# MIXED-NEXT: address: 0x1050
# MIXED-NEXT: }
# MIXED-NEXT: }
# MIXED-NEXT: }
--- !ELF
FileHeader:
Class: ELFCLASS64
Data: ELFDATA2LSB
Type: ET_EXEC
Machine: EM_X86_64
Sections:
- Name: .eh_frame_hdr
Type: SHT_PROGBITS
Flags: [ SHF_ALLOC ]
Address: 0x1000
AddressAlign: 4
## Header: version=1, eh_frame_ptr_enc=0x1c (pcrel|sdata8),
## fde_count_enc=0x03 (udata4), table_enc=0x3b (datarel|sdata4)
## eh_frame_ptr: 0x1c (8 bytes) -> points to 0x1004 + 0x1c = 0x1020
## fde_count: 2 (4 bytes)
## entry 0: initial_location=0x1000 (4 bytes), address=0x30 (4 bytes)
## entry 1: initial_location=0x1001 (4 bytes), address=0x50 (4 bytes)
Content: 011c033b1c000000000000000200000000100000300000000110000050000000
ProgramHeaders:
- Type: PT_GNU_EH_FRAME
Flags: [ PF_R ]
VAddr: 0x1000
PAddr: 0x1000
MemSize: 0x20
FileSize: 0x20
FirstSec: .eh_frame_hdr
LastSec: .eh_frame_hdr