aboutsummaryrefslogtreecommitdiff
path: root/libffi/src/x86
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2003-05-17 00:09:22 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2003-05-17 00:09:22 +0200
commita733b15e510bf45335f9b5dc345117d4741ae743 (patch)
tree0263f96916c31cb329b80472caf4f2a3a0ffa797 /libffi/src/x86
parentf5a1c99c633d3cc9a3f3c4ee4c34094f0369bbac (diff)
downloadgcc-a733b15e510bf45335f9b5dc345117d4741ae743.zip
gcc-a733b15e510bf45335f9b5dc345117d4741ae743.tar.gz
gcc-a733b15e510bf45335f9b5dc345117d4741ae743.tar.bz2
configure.in (HAVE_RO_EH_FRAME): Check whether .eh_frame section should be read-only.
* configure.in (HAVE_RO_EH_FRAME): Check whether .eh_frame section should be read-only. * configure: Rebuilt. * fficonfig.h.in: Rebuilt. * include/ffi.h.in (EH_FRAME_FLAGS): Define. * src/alpha/osf.S: Use EH_FRAME_FLAGS. * src/powerpc/linux64.S: Likewise. * src/powerpc/linux64_closure.S: Likewise. Include ffi.h. * src/powerpc/sysv.S: Use EH_FRAME_FLAGS. Use pcrel encoding if -fpic/-fPIC/-mrelocatable. * src/powerpc/powerpc_closure.S: Likewise. * src/sparc/v8.S: If HAVE_RO_EH_FRAME is defined, don't include #write in .eh_frame flags. * src/sparc/v9.S: Likewise. * src/x86/unix64.S: Use EH_FRAME_FLAGS. * src/x86/sysv.S: Likewise. Use pcrel encoding if -fpic/-fPIC. * src/s390/sysv.S: Use EH_FRAME_FLAGS. Include ffi.h. From-SVN: r66887
Diffstat (limited to 'libffi/src/x86')
-rw-r--r--libffi/src/x86/sysv.S74
-rw-r--r--libffi/src/x86/unix64.S2
2 files changed, 45 insertions, 31 deletions
diff --git a/libffi/src/x86/sysv.S b/libffi/src/x86/sysv.S
index ad898ad..b4bcbba 100644
--- a/libffi/src/x86/sysv.S
+++ b/libffi/src/x86/sysv.S
@@ -129,41 +129,55 @@ epilogue:
.ffi_call_SYSV_end:
.size ffi_call_SYSV,.ffi_call_SYSV_end-ffi_call_SYSV
-.section .eh_frame,"aw",@progbits
-__FRAME_BEGIN__:
- .4byte .LLCIE1
+ .section .eh_frame,EH_FRAME_FLAGS,@progbits
+.Lframe1:
+ .long .LECIE1-.LSCIE1 # Length of Common Information Entry
.LSCIE1:
- .4byte 0x0
- .byte 0x1
- .byte 0x0
- .byte 0x1
- .byte 0x7c
- .byte 0x8
- .byte 0xc
- .byte 0x4
- .byte 0x4
- .byte 0x88
- .byte 0x1
+ .long 0x0 # CIE Identifier Tag
+ .byte 0x1 # CIE Version
+#ifdef __PIC__
+ .ascii "zR\0" # CIE Augmentation
+#else
+ .ascii "\0" # CIE Augmentation
+#endif
+ .uleb128 0x1 # CIE Code Alignment Factor
+ .sleb128 -4 # CIE Data Alignment Factor
+ .byte 0x8 # CIE RA Column
+#ifdef __PIC__
+ .uleb128 0x1 # Augmentation size
+ .byte 0x1b # FDE Encoding (pcrel sdata4)
+#endif
+ .byte 0xc # DW_CFA_def_cfa
+ .uleb128 0x4
+ .uleb128 0x4
+ .byte 0x88 # DW_CFA_offset, column 0x8
+ .uleb128 0x1
.align 4
.LECIE1:
- .set .LLCIE1,.LECIE1-.LSCIE1
- .4byte .LLFDE1
.LSFDE1:
- .4byte .LSFDE1-__FRAME_BEGIN__
- .4byte .LFB1
- .4byte .LFE1-.LFB1
- .byte 0x4
- .4byte .LCFI0-.LFB1
- .byte 0xe
- .byte 0x8
- .byte 0x85
- .byte 0x2
- .byte 0x4
- .4byte .LCFI1-.LCFI0
- .byte 0xd
- .byte 0x5
+ .long .LEFDE1-.LASFDE1 # FDE Length
+.LASFDE1:
+ .long .LASFDE1-.Lframe1 # FDE CIE offset
+#ifdef __PIC__
+ .long .LFB1-. # FDE initial location
+#else
+ .long .LFB1 # FDE initial location
+#endif
+ .long .LFE1-.LFB1 # FDE address range
+#ifdef __PIC__
+ .uleb128 0x0 # Augmentation size
+#endif
+ .byte 0x4 # DW_CFA_advance_loc4
+ .long .LCFI0-.LFB1
+ .byte 0xe # DW_CFA_def_cfa_offset
+ .uleb128 0x8
+ .byte 0x85 # DW_CFA_offset, column 0x5
+ .uleb128 0x2
+ .byte 0x4 # DW_CFA_advance_loc4
+ .long .LCFI1-.LCFI0
+ .byte 0xd # DW_CFA_def_cfa_register
+ .uleb128 0x5
.align 4
.LEFDE1:
- .set .LLFDE1,.LEFDE1-.LSFDE1
#endif /* ifndef __x86_64__ */
diff --git a/libffi/src/x86/unix64.S b/libffi/src/x86/unix64.S
index f0cd3c9..e39d604 100644
--- a/libffi/src/x86/unix64.S
+++ b/libffi/src/x86/unix64.S
@@ -237,7 +237,7 @@ ffi_closure_UNIX64:
ret
.LFE2:
- .section .eh_frame,"a",@progbits
+ .section .eh_frame,EH_FRAME_FLAGS,@progbits
.Lframe0:
.long .LECIE1-.LSCIE1
.LSCIE1: