diff options
author | jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4> | 2002-04-28 19:57:42 +0000 |
---|---|---|
committer | jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4> | 2002-04-28 19:57:42 +0000 |
commit | b40c762bb40e5b879b5a20b4a7d2c736d4a56598 (patch) | |
tree | 8f8fb5903fbe17a1cd591f2bd8975d96fdb09d5f | |
parent | db6798b562b51d84d776d8e6506cd43e7fc889f8 (diff) | |
download | gcc-b40c762bb40e5b879b5a20b4a7d2c736d4a56598.tar.gz |
* configure.in (HAVE_AS_SPARC_UA_PCREL): Check for working
%r_disp32().
* src/sparc/v8.S: Use it.
* src/sparc/v9.S: Likewise.
* fficonfig.h.in: Rebuilt.
* configure: Rebuilt.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@52858 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r-- | libffi/ChangeLog | 9 | ||||
-rwxr-xr-x | libffi/configure | 42 | ||||
-rw-r--r-- | libffi/configure.in | 18 | ||||
-rw-r--r-- | libffi/fficonfig.h.in | 3 | ||||
-rw-r--r-- | libffi/src/sparc/v8.S | 9 | ||||
-rw-r--r-- | libffi/src/sparc/v9.S | 9 |
6 files changed, 90 insertions, 0 deletions
diff --git a/libffi/ChangeLog b/libffi/ChangeLog index 178dd9544a4..cd5a456e2bc 100644 --- a/libffi/ChangeLog +++ b/libffi/ChangeLog @@ -1,3 +1,12 @@ +2002-04-28 Jakub Jelinek <jakub@redhat.com> + + * configure.in (HAVE_AS_SPARC_UA_PCREL): Check for working + %r_disp32(). + * src/sparc/v8.S: Use it. + * src/sparc/v9.S: Likewise. + * fficonfig.h.in: Rebuilt. + * configure: Rebuilt. + 2002-04-08 Hans Boehm <Hans_Boehm@hp.com> * src/java_raw_api.c (ffi_java_raw_size): Handle FFI_TYPE_DOUBLE diff --git a/libffi/configure b/libffi/configure index e5ca777ab96..9649abaf3a4 100755 --- a/libffi/configure +++ b/libffi/configure @@ -3421,6 +3421,48 @@ if test $ac_cv_c_bigendian = unknown; then fi +if test x$TARGET == xSPARC; then + echo $ac_n "checking assembler and linker support unaligned pc related relocs""... $ac_c" 1>&6 +echo "configure:3426: checking assembler and linker support unaligned pc related relocs" >&5 +if eval "test \"`echo '$''{'libffi_cv_as_sparc_ua_pcrel'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + + save_CFLAGS="$CFLAGS" + save_LDFLAGS="$LDFLAGS" + CFLAGS="$CFLAGS -fpic" + LDFLAGS="$LDFLAGS -shared" + cat > conftest.$ac_ext <<EOF +#line 3436 "configure" +#include "confdefs.h" +asm (".text; foo: nop; .data; .align 4; .byte 0; .uaword %r_disp32(foo); .text"); +int main() { + +; return 0; } +EOF +if { (eval echo configure:3442: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + libffi_cv_as_sparc_ua_pcrel=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + libffi_cv_as_sparc_ua_pcrel=no +fi +rm -f conftest* + CFLAGS="$save_CFLAGS" + LDFLAGS="$save_LDFLAGS" +fi + +echo "$ac_t""$libffi_cv_as_sparc_ua_pcrel" 1>&6 + if test "x$libffi_cv_as_sparc_ua_pcrel" = xyes; then + cat >> confdefs.h <<\EOF +#define HAVE_AS_SPARC_UA_PCREL 1 +EOF + + fi +fi + diff --git a/libffi/configure.in b/libffi/configure.in index 9dfa33dfebb..9e9ab1c1425 100644 --- a/libffi/configure.in +++ b/libffi/configure.in @@ -96,6 +96,24 @@ AC_COMPILE_CHECK_SIZEOF(long double) AC_COMPILE_CHECK_SIZEOF(void *) AC_C_BIGENDIAN_CROSS +if test x$TARGET == xSPARC; then + AC_CACHE_CHECK([assembler and linker support unaligned pc related relocs], + libffi_cv_as_sparc_ua_pcrel, [ + save_CFLAGS="$CFLAGS" + save_LDFLAGS="$LDFLAGS" + CFLAGS="$CFLAGS -fpic" + LDFLAGS="$LDFLAGS -shared" + AC_TRY_LINK([asm (".text; foo: nop; .data; .align 4; .byte 0; .uaword %r_disp32(foo); .text");],, + [libffi_cv_as_sparc_ua_pcrel=yes], + [libffi_cv_as_sparc_ua_pcrel=no]) + CFLAGS="$save_CFLAGS" + LDFLAGS="$save_LDFLAGS"]) + if test "x$libffi_cv_as_sparc_ua_pcrel" = xyes; then + AC_DEFINE(HAVE_AS_SPARC_UA_PCREL, 1, + [Define if your assembler and linker support unaligned PC relative relocs.]) + fi +fi + AC_SUBST(TARGET) AC_SUBST(TARGETDIR) diff --git a/libffi/fficonfig.h.in b/libffi/fficonfig.h.in index f7ea90bbdf9..ac15aeddbd7 100644 --- a/libffi/fficonfig.h.in +++ b/libffi/fficonfig.h.in @@ -68,3 +68,6 @@ /* Define if you have the memcpy function. */ #undef HAVE_MEMCPY + +/* Define if your assembler and linker support unaligned PC relative relocs. */ +#undef HAVE_AS_SPARC_UA_PCREL diff --git a/libffi/src/sparc/v8.S b/libffi/src/sparc/v8.S index 8cccd6e750c..d94fe03d2aa 100644 --- a/libffi/src/sparc/v8.S +++ b/libffi/src/sparc/v8.S @@ -115,7 +115,11 @@ longlong: .byte 0x80-WS ! sleb128 -WS; CIE Data Alignment Factor .byte 0xf ! CIE RA Column .byte 0x1 ! uleb128 0x1; Augmentation size +#ifdef HAVE_AS_SPARC_UA_PCREL + .byte 0x1b ! FDE Encoding (pcrel sdata4) +#else .byte 0x50 ! FDE Encoding (aligned absolute) +#endif .byte 0xc ! DW_CFA_def_cfa .byte 0xe ! uleb128 0xe .byte 0x0 ! uleb128 0x0 @@ -125,9 +129,14 @@ longlong: .uaword .LLEFDE1-.LLASFDE1 ! FDE Length .LLASFDE1: .uaword .LLASFDE1-.LLframe1 ! FDE CIE offset +#ifdef HAVE_AS_SPARC_UA_PCREL + .uaword %r_disp32(.LLFB1) + .uaword .LLFE1-.LLFB1 ! FDE address range +#else .align WS .nword .LLFB1 .uanword .LLFE1-.LLFB1 ! FDE address range +#endif .byte 0x0 ! uleb128 0x0; Augmentation size .byte 0x4 ! DW_CFA_advance_loc4 .uaword .LLCFI0-.LLFB1 diff --git a/libffi/src/sparc/v9.S b/libffi/src/sparc/v9.S index 9d02bb85885..bd358c0d84d 100644 --- a/libffi/src/sparc/v9.S +++ b/libffi/src/sparc/v9.S @@ -136,7 +136,11 @@ dostruct: .byte 0x78 ! sleb128 -8; CIE Data Alignment Factor .byte 0xf ! CIE RA Column .byte 0x1 ! uleb128 0x1; Augmentation size +#ifdef HAVE_AS_SPARC_UA_PCREL + .byte 0x1b ! FDE Encoding (pcrel sdata4) +#else .byte 0x50 ! FDE Encoding (aligned absolute) +#endif .byte 0xc ! DW_CFA_def_cfa .byte 0xe ! uleb128 0xe .byte 0xff,0xf ! uleb128 0x7ff @@ -146,9 +150,14 @@ dostruct: .uaword .LLEFDE1-.LLASFDE1 ! FDE Length .LLASFDE1: .uaword .LLASFDE1-.LLframe1 ! FDE CIE offset +#ifdef HAVE_AS_SPARC_UA_PCREL + .uaword %r_disp32(.LLFB1) + .uaword .LLFE1-.LLFB1 ! FDE address range +#else .align 8 .xword .LLFB1 .uaxword .LLFE1-.LLFB1 ! FDE address range +#endif .byte 0x0 ! uleb128 0x0; Augmentation size .byte 0x4 ! DW_CFA_advance_loc4 .uaword .LLCFI0-.LLFB1 |