86 lines · plain
1# REQUIRES: x862 3# Test handling of FDE pc negative relative addressing with DW_EH_PE_sdata2.4# This situation can arise when .eh_frame is placed after .text.5 6# RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t.o7# RUN: echo "SECTIONS { .text : { *(.text) } .eh_frame : { *(.eh_frame) } }" > %t.script8# RUN: ld.lld --eh-frame-hdr --script %t.script --section-start .text=0x1000 %t.o -o %t9# RUN: llvm-readobj -S --section-data %t | FileCheck %s10 11# CHECK: Section {12# CHECK: Index:13# CHECK: Name: .eh_frame14# CHECK-NEXT: Type: SHT_PROGBITS15# CHECK-NEXT: Flags [16# CHECK-NEXT: SHF_ALLOC17# CHECK-NEXT: ]18# CHECK-NEXT: Address: 0x100119# CHECK-NEXT: Offset: 0x100120# CHECK-NEXT: Size:21# CHECK-NEXT: Link:22# CHECK-NEXT: Info:23# CHECK-NEXT: AddressAlignment:24# CHECK-NEXT: EntrySize:25# CHECK-NEXT: SectionData (26# CHECK-NEXT: 0000: 10000000 00000000 017A5200 0101010127# CHECK-NEXT: 0010: 1A000000 0A000000 18000000 E3FFFFFF28# CHECK-NEXT: 0020: 00000000 000029# ^30# DFFFFFFF = _start(0x1000) - PC(.eh_frame(0x1001) + 0x20)31 32# CHECK: Section {33# CHECK: Index:34# CHECK: Name: .eh_frame_hdr35# CHECK-NEXT: Type: SHT_PROGBITS36# CHECK-NEXT: Flags [37# CHECK-NEXT: SHF_ALLOC38# CHECK-NEXT: ]39# CHECK-NEXT: Address: 0x102840# CHECK-NEXT: Offset: 0x102841# CHECK-NEXT: Size: 2042# CHECK-NEXT: Link: 043# CHECK-NEXT: Info: 044# CHECK-NEXT: AddressAlignment: 445# CHECK-NEXT: EntrySize: 046# CHECK-NEXT: SectionData (47# CHECK-NEXT: 0000: 011B033B D5FFFFFF 01000000 D8FFFFFF48# CHECK-NEXT: 0010: EDFFFFFF49# Header (always 4 bytes): 011B033B50# D5FFFFFF = .eh_frame(0x1001) - .eh_frame_hdr(0x1028) - 451# 01000000 = 1 = the number of FDE pointers in the table.52# D8FFFFFF = _start(0x1000) - .eh_frame_hdr(0x1028)53# EDFFFFFF = FDE(.eh_frame(0x1001) + 0x18) - .eh_frame_hdr(0x1028)54 55.text56.global _start57_start:58 nop59 60.section .eh_frame,"a",@unwind61 .long 16 # Size62 .long 0x00 # ID63 .byte 0x01 # Version.64 65 .byte 0x7A # Augmentation string: "zR"66 .byte 0x5267 .byte 0x0068 69 .byte 0x0170 71 .byte 0x01 # LEB12872 .byte 0x01 # LEB12873 74 .byte 0x01 # LEB12875 .byte 0x1A # DW_EH_PE_pcrel | DW_EH_PE_sdata276 77 .byte 0x0078 .byte 0x0079 .byte 0x0080 81 .long 10 # Size82 .long 24 # ID83fde:84 .long _start - fde85 .word 086