summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>2002-04-28 19:57:42 +0000
committerjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>2002-04-28 19:57:42 +0000
commitb40c762bb40e5b879b5a20b4a7d2c736d4a56598 (patch)
tree8f8fb5903fbe17a1cd591f2bd8975d96fdb09d5f
parentdb6798b562b51d84d776d8e6506cd43e7fc889f8 (diff)
downloadgcc-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/ChangeLog9
-rwxr-xr-xlibffi/configure42
-rw-r--r--libffi/configure.in18
-rw-r--r--libffi/fficonfig.h.in3
-rw-r--r--libffi/src/sparc/v8.S9
-rw-r--r--libffi/src/sparc/v9.S9
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