| ## 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 |