| Index: libffi/ChangeLog |
| =================================================================== |
| --- libffi.orig/ChangeLog |
| +++ libffi/ChangeLog |
| @@ -33,6 +33,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 |
| @@ -43,7 +56,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 |
| @@ -13313,67 +13313,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 |
| @@ -351,44 +351,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([ |