diff options
author | Richard Henderson <rth@redhat.com> | 2010-11-29 08:43:24 -0800 |
---|---|---|
committer | Rainer Orth <ro@gcc.gnu.org> | 2010-11-29 16:43:24 +0000 |
commit | e12bcbf492904c2ead0b91a00e9eff35b2d67c94 (patch) | |
tree | 1b8661166057754454c74e5ec2a6227a206ce0e9 | |
parent | c8718cb3ef78c2e10ac42434330701b1e045a7e2 (diff) | |
download | gcc-e12bcbf492904c2ead0b91a00e9eff35b2d67c94.zip gcc-e12bcbf492904c2ead0b91a00e9eff35b2d67c94.tar.gz gcc-e12bcbf492904c2ead0b91a00e9eff35b2d67c94.tar.bz2 |
sysv.S (FDE_ENCODING, FDE_ENCODE): Define.
2010-11-29 Richard Henderson <rth@redhat.com>
Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
* src/x86/sysv.S (FDE_ENCODING, FDE_ENCODE): Define.
(.eh_frame): Use FDE_ENCODING.
(.LASFDE1, .LASFDE2, LASFDE3): Simplify with FDE_ENCODE.
Co-Authored-By: Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
From-SVN: r167251
-rw-r--r-- | libffi/ChangeLog | 7 | ||||
-rw-r--r-- | libffi/src/x86/sysv.S | 51 |
2 files changed, 33 insertions, 25 deletions
diff --git a/libffi/ChangeLog b/libffi/ChangeLog index b5f87d3..6b78da8 100644 --- a/libffi/ChangeLog +++ b/libffi/ChangeLog @@ -1,3 +1,10 @@ +2010-11-29 Richard Henderson <rth@redhat.com> + Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> + + * src/x86/sysv.S (FDE_ENCODING, FDE_ENCODE): Define. + (.eh_frame): Use FDE_ENCODING. + (.LASFDE1, .LASFDE2, LASFDE3): Simplify with FDE_ENCODE. + 2010-11-15 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> * testsuite/lib/libffi-dg.exp: Rename ... diff --git a/libffi/src/x86/sysv.S b/libffi/src/x86/sysv.S index f3b0bd5..f108dd8 100644 --- a/libffi/src/x86/sysv.S +++ b/libffi/src/x86/sysv.S @@ -328,6 +328,25 @@ ffi_closure_raw_SYSV: .size ffi_closure_raw_SYSV, .-ffi_closure_raw_SYSV #endif +#if defined __PIC__ +# if defined __sun__ && defined __svr4__ +/* 32-bit Solaris 2/x86 uses datarel encoding for PIC. GNU ld before 2.22 + doesn't correctly sort .eh_frame_hdr with mixed encodings, so match this. */ +# define FDE_ENCODING 0x30 /* datarel */ +# define FDE_ENCODE(X) X@GOTOFF +# else +# define FDE_ENCODING 0x1b /* pcrel sdata4 */ +# if defined HAVE_AS_X86_PCREL +# define FDE_ENCODE(X) X-. +# else +# define FDE_ENCODE(X) X@rel +# endif +# endif +#else +# define FDE_ENCODING 0 /* absolute */ +# define FDE_ENCODE(X) X +#endif + .section .eh_frame,EH_FRAME_FLAGS,@progbits .Lframe1: .long .LECIE1-.LSCIE1 /* Length of Common Information Entry */ @@ -354,7 +373,7 @@ ffi_closure_raw_SYSV: .byte 0x8 /* CIE RA Column */ #ifdef __PIC__ .byte 0x1 /* .uleb128 0x1; Augmentation size */ - .byte 0x1b /* FDE Encoding (pcrel sdata4) */ + .byte FDE_ENCODING #endif .byte 0xc /* DW_CFA_def_cfa */ .byte 0x4 /* .uleb128 0x4 */ @@ -367,14 +386,8 @@ ffi_closure_raw_SYSV: .long .LEFDE1-.LASFDE1 /* FDE Length */ .LASFDE1: .long .LASFDE1-.Lframe1 /* FDE CIE offset */ -#if defined __PIC__ && defined HAVE_AS_X86_PCREL - .long .LFB1-. /* FDE initial location */ -#elif defined __PIC__ - .long .LFB1@rel -#else - .long .LFB1 -#endif - .long .LFE1-.LFB1 /* FDE address range */ + .long FDE_ENCODE(.LFB1) /* FDE initial location */ + .long .LFE1-.LFB1 /* FDE address range */ #ifdef __PIC__ .byte 0x0 /* .uleb128 0x0; Augmentation size */ #endif @@ -394,14 +407,8 @@ ffi_closure_raw_SYSV: .long .LEFDE2-.LASFDE2 /* FDE Length */ .LASFDE2: .long .LASFDE2-.Lframe1 /* FDE CIE offset */ -#if defined __PIC__ && defined HAVE_AS_X86_PCREL - .long .LFB2-. /* FDE initial location */ -#elif defined __PIC__ - .long .LFB2@rel -#else - .long .LFB2 -#endif - .long .LFE2-.LFB2 /* FDE address range */ + .long FDE_ENCODE(.LFB2) /* FDE initial location */ + .long .LFE2-.LFB2 /* FDE address range */ #ifdef __PIC__ .byte 0x0 /* .uleb128 0x0; Augmentation size */ #endif @@ -430,14 +437,8 @@ ffi_closure_raw_SYSV: .long .LEFDE3-.LASFDE3 /* FDE Length */ .LASFDE3: .long .LASFDE3-.Lframe1 /* FDE CIE offset */ -#if defined __PIC__ && defined HAVE_AS_X86_PCREL - .long .LFB3-. /* FDE initial location */ -#elif defined __PIC__ - .long .LFB3@rel -#else - .long .LFB3 -#endif - .long .LFE3-.LFB3 /* FDE address range */ + .long FDE_ENCODE(.LFB3) /* FDE initial location */ + .long .LFE3-.LFB3 /* FDE address range */ #ifdef __PIC__ .byte 0x0 /* .uleb128 0x0; Augmentation size */ #endif |