364 lines
13 KiB
Plaintext
364 lines
13 KiB
Plaintext
Index: libffi/ChangeLog
|
|
===================================================================
|
|
--- libffi.orig/ChangeLog
|
|
+++ libffi/ChangeLog
|
|
@@ -50,6 +50,19 @@
|
|
|
|
* configure: Regenerate.
|
|
|
|
+2011-02-11 Anthony Green <green@moxielogic.com>
|
|
+
|
|
+ From Tom Honermann <tom.honermann@oracle.com>:
|
|
+ * src/powerpc/aix.S (ffi_call_AIX): Support for xlc toolchain on
|
|
+ AIX. Declare .ffi_prep_args. Insert nops after branch
|
|
+ instructions so that the AIX linker can insert TOC reload
|
|
+ instructions.
|
|
+ * src/powerpc/aix_closure.S: Declare .ffi_closure_helper_DARWIN.
|
|
+
|
|
+2011-02-08 Uli Link <ul.mcamafia@linkitup.de>
|
|
+
|
|
+ * include/ffi.h.in (FFI_64_BIT_MAX): Define and use.
|
|
+
|
|
2011-02-09 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
|
|
|
|
PR libffi/46661
|
|
@@ -60,7 +73,7 @@
|
|
2011-02-08 Rafael Avila de Espindola <respindola@mozilla.com>
|
|
|
|
* configure.ac: Fix x86 test for pc related relocs.
|
|
- * confifure: Rebuilt.
|
|
+ * configure: Rebuilt.
|
|
|
|
2011-02-07 Joel Sherrill <joel.sherrill@oarcorp.com>
|
|
|
|
Index: libffi/include/ffi.h.in
|
|
===================================================================
|
|
--- libffi.orig/include/ffi.h.in
|
|
+++ libffi/include/ffi.h.in
|
|
@@ -1,16 +1,17 @@
|
|
/* -----------------------------------------------------------------*-C-*-
|
|
- libffi @VERSION@ - Copyright (c) 1996-2003, 2007, 2008 Red Hat, Inc.
|
|
+ libffi @VERSION@ - Copyright (c) 2011 Anthony Green
|
|
+ - Copyright (c) 1996-2003, 2007, 2008 Red Hat, Inc.
|
|
|
|
- Permission is hereby granted, free of charge, to any person obtaining
|
|
- a copy of this software and associated documentation files (the
|
|
- ``Software''), to deal in the Software without restriction, including
|
|
- without limitation the rights to use, copy, modify, merge, publish,
|
|
- distribute, sublicense, and/or sell copies of the Software, and to
|
|
- permit persons to whom the Software is furnished to do so, subject to
|
|
- the following conditions:
|
|
+ Permission is hereby granted, free of charge, to any person
|
|
+ obtaining a copy of this software and associated documentation
|
|
+ files (the ``Software''), to deal in the Software without
|
|
+ restriction, including without limitation the rights to use, copy,
|
|
+ modify, merge, publish, distribute, sublicense, and/or sell copies
|
|
+ of the Software, and to permit persons to whom the Software is
|
|
+ furnished to do so, subject to the following conditions:
|
|
|
|
- The above copyright notice and this permission notice shall be included
|
|
- in all copies or substantial portions of the Software.
|
|
+ The above copyright notice and this permission notice shall be
|
|
+ included in all copies or substantial portions of the Software.
|
|
|
|
THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND,
|
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
@@ -77,15 +78,31 @@ extern "C" {
|
|
/* LONG_LONG_MAX is not always defined (not if STRICT_ANSI, for example).
|
|
But we can find it either under the correct ANSI name, or under GNU
|
|
C's internal name. */
|
|
+
|
|
+#define FFI_64_BIT_MAX 9223372036854775807
|
|
+
|
|
#ifdef LONG_LONG_MAX
|
|
# define FFI_LONG_LONG_MAX LONG_LONG_MAX
|
|
#else
|
|
# ifdef LLONG_MAX
|
|
# define FFI_LONG_LONG_MAX LLONG_MAX
|
|
+# ifdef _AIX52 /* or newer has C99 LLONG_MAX */
|
|
+# undef FFI_64_BIT_MAX
|
|
+# define FFI_64_BIT_MAX 9223372036854775807LL
|
|
+# endif /* _AIX52 or newer */
|
|
# else
|
|
# ifdef __GNUC__
|
|
# define FFI_LONG_LONG_MAX __LONG_LONG_MAX__
|
|
# endif
|
|
+# ifdef _AIX /* AIX 5.1 and earlier have LONGLONG_MAX */
|
|
+# ifndef __PPC64__
|
|
+# if defined (__IBMC__) || defined (__IBMCPP__)
|
|
+# define FFI_LONG_LONG_MAX LONGLONG_MAX
|
|
+# endif
|
|
+# endif /* __PPC64__ */
|
|
+# undef FFI_64_BIT_MAX
|
|
+# define FFI_64_BIT_MAX 9223372036854775807LL
|
|
+# endif
|
|
# endif
|
|
#endif
|
|
|
|
@@ -132,17 +149,17 @@ typedef struct _ffi_type
|
|
#endif
|
|
|
|
#if LONG_MAX == 2147483647
|
|
-# if FFI_LONG_LONG_MAX != 9223372036854775807
|
|
+# if FFI_LONG_LONG_MAX != FFI_64_BIT_MAX
|
|
#error "no 64-bit data type supported"
|
|
# endif
|
|
-#elif LONG_MAX != 9223372036854775807
|
|
+#elif LONG_MAX != FFI_64_BIT_MAX
|
|
#error "long size not supported"
|
|
#endif
|
|
|
|
#if LONG_MAX == 2147483647
|
|
# define ffi_type_ulong ffi_type_uint32
|
|
# define ffi_type_slong ffi_type_sint32
|
|
-#elif LONG_MAX == 9223372036854775807
|
|
+#elif LONG_MAX == FFI_64_BIT_MAX
|
|
# define ffi_type_ulong ffi_type_uint64
|
|
# define ffi_type_slong ffi_type_sint64
|
|
#else
|
|
@@ -195,7 +212,7 @@ typedef struct {
|
|
#ifndef FFI_SIZEOF_ARG
|
|
# if LONG_MAX == 2147483647
|
|
# define FFI_SIZEOF_ARG 4
|
|
-# elif LONG_MAX == 9223372036854775807
|
|
+# elif LONG_MAX == FFI_64_BIT_MAX
|
|
# define FFI_SIZEOF_ARG 8
|
|
# endif
|
|
#endif
|
|
Index: libffi/src/powerpc/aix.S
|
|
===================================================================
|
|
--- libffi.orig/src/powerpc/aix.S
|
|
+++ libffi/src/powerpc/aix.S
|
|
@@ -1,5 +1,5 @@
|
|
/* -----------------------------------------------------------------------
|
|
- aix.S - Copyright (c) 2002,2009 Free Software Foundation, Inc.
|
|
+ aix.S - Copyright (c) 2002, 2009 Free Software Foundation, Inc.
|
|
based on darwin.S by John Hornkvist
|
|
|
|
PowerPC Assembly glue.
|
|
@@ -79,6 +79,8 @@
|
|
.set f20,20
|
|
.set f21,21
|
|
|
|
+ .extern .ffi_prep_args
|
|
+
|
|
#define LIBFFI_ASM
|
|
#include <fficonfig.h>
|
|
#include <ffi.h>
|
|
@@ -125,6 +127,7 @@ ffi_call_AIX:
|
|
/* Call ffi_prep_args. */
|
|
mr r4, r1
|
|
bl .ffi_prep_args
|
|
+ nop
|
|
|
|
/* Now do the call. */
|
|
ld r0, 0(r29)
|
|
@@ -226,6 +229,7 @@ L(float_return_value):
|
|
/* Call ffi_prep_args. */
|
|
mr r4, r1
|
|
bl .ffi_prep_args
|
|
+ nop
|
|
|
|
/* Now do the call. */
|
|
lwz r0, 0(r29)
|
|
Index: libffi/src/powerpc/aix_closure.S
|
|
===================================================================
|
|
--- libffi.orig/src/powerpc/aix_closure.S
|
|
+++ libffi/src/powerpc/aix_closure.S
|
|
@@ -79,6 +79,8 @@
|
|
.set f20,20
|
|
.set f21,21
|
|
|
|
+ .extern .ffi_closure_helper_DARWIN
|
|
+
|
|
#define LIBFFI_ASM
|
|
#define JUMPTARGET(name) name
|
|
#define L(x) x
|
|
Index: libffi/configure
|
|
===================================================================
|
|
--- libffi.orig/configure
|
|
+++ libffi/configure
|
|
@@ -13285,67 +13285,69 @@ $as_echo "#define HAVE_AS_X86_64_UNWIND_
|
|
fi
|
|
fi
|
|
|
|
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether .eh_frame section should be read-only" >&5
|
|
+if test "x$GCC" = "xyes"; then
|
|
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether .eh_frame section should be read-only" >&5
|
|
$as_echo_n "checking whether .eh_frame section should be read-only... " >&6; }
|
|
if ${libffi_cv_ro_eh_frame+:} false; then :
|
|
$as_echo_n "(cached) " >&6
|
|
else
|
|
|
|
- libffi_cv_ro_eh_frame=no
|
|
- echo 'extern void foo (void); void bar (void) { foo (); foo (); }' > conftest.c
|
|
- if $CC $CFLAGS -S -fpic -fexceptions -o conftest.s conftest.c > /dev/null 2>&1; then
|
|
- if grep '.section.*eh_frame.*"a"' conftest.s > /dev/null; then
|
|
- libffi_cv_ro_eh_frame=yes
|
|
- elif grep '.section.*eh_frame.*#alloc' conftest.c \
|
|
- | grep -v '#write' > /dev/null; then
|
|
- libffi_cv_ro_eh_frame=yes
|
|
- fi
|
|
- fi
|
|
- rm -f conftest.*
|
|
+ libffi_cv_ro_eh_frame=no
|
|
+ echo 'extern void foo (void); void bar (void) { foo (); foo (); }' > conftest.c
|
|
+ if $CC $CFLAGS -S -fpic -fexceptions -o conftest.s conftest.c > /dev/null 2>&1; then
|
|
+ if grep '.section.*eh_frame.*"a"' conftest.s > /dev/null; then
|
|
+ libffi_cv_ro_eh_frame=yes
|
|
+ elif grep '.section.*eh_frame.*#alloc' conftest.c \
|
|
+ | grep -v '#write' > /dev/null; then
|
|
+ libffi_cv_ro_eh_frame=yes
|
|
+ fi
|
|
+ fi
|
|
+ rm -f conftest.*
|
|
|
|
fi
|
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libffi_cv_ro_eh_frame" >&5
|
|
$as_echo "$libffi_cv_ro_eh_frame" >&6; }
|
|
-if test "x$libffi_cv_ro_eh_frame" = xyes; then
|
|
+ if test "x$libffi_cv_ro_eh_frame" = xyes; then
|
|
|
|
$as_echo "#define HAVE_RO_EH_FRAME 1" >>confdefs.h
|
|
|
|
|
|
$as_echo "#define EH_FRAME_FLAGS \"a\"" >>confdefs.h
|
|
|
|
-else
|
|
+ else
|
|
|
|
$as_echo "#define EH_FRAME_FLAGS \"aw\"" >>confdefs.h
|
|
|
|
-fi
|
|
+ fi
|
|
|
|
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for __attribute__((visibility(\"hidden\")))" >&5
|
|
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for __attribute__((visibility(\"hidden\")))" >&5
|
|
$as_echo_n "checking for __attribute__((visibility(\"hidden\")))... " >&6; }
|
|
if ${libffi_cv_hidden_visibility_attribute+:} false; then :
|
|
$as_echo_n "(cached) " >&6
|
|
else
|
|
|
|
- echo 'int __attribute__ ((visibility ("hidden"))) foo (void) { return 1; }' > conftest.c
|
|
- libffi_cv_hidden_visibility_attribute=no
|
|
- if { ac_try='${CC-cc} -Werror -S conftest.c -o conftest.s 1>&5'
|
|
+ echo 'int __attribute__ ((visibility ("hidden"))) foo (void) { return 1 ; }' > conftest.c
|
|
+ libffi_cv_hidden_visibility_attribute=no
|
|
+ if { ac_try='${CC-cc} -Werror -S conftest.c -o conftest.s 1>&5'
|
|
{ { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
|
|
(eval $ac_try) 2>&5
|
|
ac_status=$?
|
|
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
|
|
test $ac_status = 0; }; }; then
|
|
- if grep '\.hidden.*foo' conftest.s >/dev/null; then
|
|
- libffi_cv_hidden_visibility_attribute=yes
|
|
- fi
|
|
- fi
|
|
- rm -f conftest.*
|
|
+ if grep '\.hidden.*foo' conftest.s >/dev/null; then
|
|
+ libffi_cv_hidden_visibility_attribute=yes
|
|
+ fi
|
|
+ fi
|
|
+ rm -f conftest.*
|
|
|
|
fi
|
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libffi_cv_hidden_visibility_attribute" >&5
|
|
$as_echo "$libffi_cv_hidden_visibility_attribute" >&6; }
|
|
-if test $libffi_cv_hidden_visibility_attribute = yes; then
|
|
+ if test $libffi_cv_hidden_visibility_attribute = yes; then
|
|
|
|
$as_echo "#define HAVE_HIDDEN_VISIBILITY_ATTRIBUTE 1" >>confdefs.h
|
|
|
|
+ fi
|
|
fi
|
|
|
|
|
|
Index: libffi/configure.ac
|
|
===================================================================
|
|
--- libffi.orig/configure.ac
|
|
+++ libffi/configure.ac
|
|
@@ -345,44 +345,46 @@ if test x$TARGET = xX86_64; then
|
|
fi
|
|
fi
|
|
|
|
-AC_CACHE_CHECK([whether .eh_frame section should be read-only],
|
|
- libffi_cv_ro_eh_frame, [
|
|
- libffi_cv_ro_eh_frame=no
|
|
- echo 'extern void foo (void); void bar (void) { foo (); foo (); }' > conftest.c
|
|
- if $CC $CFLAGS -S -fpic -fexceptions -o conftest.s conftest.c > /dev/null 2>&1; then
|
|
- if grep '.section.*eh_frame.*"a"' conftest.s > /dev/null; then
|
|
- libffi_cv_ro_eh_frame=yes
|
|
- elif grep '.section.*eh_frame.*#alloc' conftest.c \
|
|
- | grep -v '#write' > /dev/null; then
|
|
- libffi_cv_ro_eh_frame=yes
|
|
- fi
|
|
- fi
|
|
- rm -f conftest.*
|
|
- ])
|
|
-if test "x$libffi_cv_ro_eh_frame" = xyes; then
|
|
- AC_DEFINE(HAVE_RO_EH_FRAME, 1,
|
|
- [Define if .eh_frame sections should be read-only.])
|
|
- AC_DEFINE(EH_FRAME_FLAGS, "a",
|
|
- [Define to the flags needed for the .section .eh_frame directive.])
|
|
-else
|
|
- AC_DEFINE(EH_FRAME_FLAGS, "aw",
|
|
- [Define to the flags needed for the .section .eh_frame directive.])
|
|
-fi
|
|
+if test "x$GCC" = "xyes"; then
|
|
+ AC_CACHE_CHECK([whether .eh_frame section should be read-only],
|
|
+ libffi_cv_ro_eh_frame, [
|
|
+ libffi_cv_ro_eh_frame=no
|
|
+ echo 'extern void foo (void); void bar (void) { foo (); foo (); }' > conftest.c
|
|
+ if $CC $CFLAGS -S -fpic -fexceptions -o conftest.s conftest.c > /dev/null 2>&1; then
|
|
+ if grep '.section.*eh_frame.*"a"' conftest.s > /dev/null; then
|
|
+ libffi_cv_ro_eh_frame=yes
|
|
+ elif grep '.section.*eh_frame.*#alloc' conftest.c \
|
|
+ | grep -v '#write' > /dev/null; then
|
|
+ libffi_cv_ro_eh_frame=yes
|
|
+ fi
|
|
+ fi
|
|
+ rm -f conftest.*
|
|
+ ])
|
|
+ if test "x$libffi_cv_ro_eh_frame" = xyes; then
|
|
+ AC_DEFINE(HAVE_RO_EH_FRAME, 1,
|
|
+ [Define if .eh_frame sections should be read-only.])
|
|
+ AC_DEFINE(EH_FRAME_FLAGS, "a",
|
|
+ [Define to the flags needed for the .section .eh_frame directive. ])
|
|
+ else
|
|
+ AC_DEFINE(EH_FRAME_FLAGS, "aw",
|
|
+ [Define to the flags needed for the .section .eh_frame directive. ])
|
|
+ fi
|
|
|
|
-AC_CACHE_CHECK([for __attribute__((visibility("hidden")))],
|
|
- libffi_cv_hidden_visibility_attribute, [
|
|
- echo 'int __attribute__ ((visibility ("hidden"))) foo (void) { return 1; }' > conftest.c
|
|
- libffi_cv_hidden_visibility_attribute=no
|
|
- if AC_TRY_COMMAND(${CC-cc} -Werror -S conftest.c -o conftest.s 1>&AS_MESSAGE_LOG_FD); then
|
|
- if grep '\.hidden.*foo' conftest.s >/dev/null; then
|
|
- libffi_cv_hidden_visibility_attribute=yes
|
|
- fi
|
|
- fi
|
|
- rm -f conftest.*
|
|
- ])
|
|
-if test $libffi_cv_hidden_visibility_attribute = yes; then
|
|
- AC_DEFINE(HAVE_HIDDEN_VISIBILITY_ATTRIBUTE, 1,
|
|
- [Define if __attribute__((visibility("hidden"))) is supported.])
|
|
+ AC_CACHE_CHECK([for __attribute__((visibility("hidden")))],
|
|
+ libffi_cv_hidden_visibility_attribute, [
|
|
+ echo 'int __attribute__ ((visibility ("hidden"))) foo (void) { return 1 ; }' > conftest.c
|
|
+ libffi_cv_hidden_visibility_attribute=no
|
|
+ if AC_TRY_COMMAND(${CC-cc} -Werror -S conftest.c -o conftest.s 1>&AS_MESSAGE_LOG_FD); then
|
|
+ if grep '\.hidden.*foo' conftest.s >/dev/null; then
|
|
+ libffi_cv_hidden_visibility_attribute=yes
|
|
+ fi
|
|
+ fi
|
|
+ rm -f conftest.*
|
|
+ ])
|
|
+ if test $libffi_cv_hidden_visibility_attribute = yes; then
|
|
+ AC_DEFINE(HAVE_HIDDEN_VISIBILITY_ATTRIBUTE, 1,
|
|
+ [Define if __attribute__((visibility("hidden"))) is supported.])
|
|
+ fi
|
|
fi
|
|
|
|
AH_BOTTOM([
|