diff -urN libffi-3.1/configure libffi/configure --- libffi-3.1/configure 2014-05-19 15:44:03.000000000 +0200 +++ libffi/configure 2014-08-09 21:51:07.877871443 +0200 @@ -17236,6 +17236,10 @@ fi ;; + i*86-*-nto-qnx*) + TARGET=X86; TARGETDIR=x86 + ;; + x86_64-*-darwin*) TARGET=X86_DARWIN; TARGETDIR=x86 ;; @@ -17298,12 +17302,12 @@ ;; mips-sgi-irix5.* | mips-sgi-irix6.* | mips*-*-rtems*) - TARGET=MIPS; TARGETDIR=mips + TARGET=MIPS_IRIX; TARGETDIR=mips ;; mips*-*linux* | mips*-*-openbsd*) # Support 128-bit long double for NewABI. HAVE_LONG_DOUBLE='defined(__mips64)' - TARGET=MIPS; TARGETDIR=mips + TARGET=MIPS_LINUX; TARGETDIR=mips ;; nios2*-linux*) @@ -17373,7 +17377,7 @@ as_fn_error $? "\"libffi has not been ported to $host.\"" "$LINENO" 5 fi - if test x$TARGET = xMIPS; then + if expr x$TARGET : 'xMIPS' > /dev/null; then MIPS_TRUE= MIPS_FALSE='#' else @@ -18814,6 +18818,12 @@ ac_config_files="$ac_config_files include/Makefile include/ffi.h Makefile testsuite/Makefile man/Makefile libffi.pc" +ac_config_links="$ac_config_links include/ffi_common.h:include/ffi_common.h" + + +ac_config_files="$ac_config_files fficonfig.py" + + cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure @@ -20126,6 +20136,8 @@ "testsuite/Makefile") CONFIG_FILES="$CONFIG_FILES testsuite/Makefile" ;; "man/Makefile") CONFIG_FILES="$CONFIG_FILES man/Makefile" ;; "libffi.pc") CONFIG_FILES="$CONFIG_FILES libffi.pc" ;; + "include/ffi_common.h") CONFIG_LINKS="$CONFIG_LINKS include/ffi_common.h:include/ffi_common.h" ;; + "fficonfig.py") CONFIG_FILES="$CONFIG_FILES fficonfig.py" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac diff -urN libffi-3.1/configure.ac libffi/configure.ac --- libffi-3.1/configure.ac 2014-05-11 15:57:49.000000000 +0200 +++ libffi/configure.ac 2014-08-09 21:51:07.877871443 +0200 @@ -1,4 +1,7 @@ dnl Process this with autoconf to create configure +# +# file from libffi - slightly patched for Python's ctypes +# AC_PREREQ(2.68) @@ -144,6 +147,9 @@ AM_LTLDFLAGS='-no-undefined -bindir "$(bindir)"'; fi ;; + i*86-*-nto-qnx*) + TARGET=X86; TARGETDIR=x86 + ;; i?86-*-darwin*) TARGET=X86_DARWIN; TARGETDIR=x86 ;; @@ -218,12 +224,12 @@ ;; mips-sgi-irix5.* | mips-sgi-irix6.* | mips*-*-rtems*) - TARGET=MIPS; TARGETDIR=mips + TARGET=MIPS_IRIX; TARGETDIR=mips ;; mips*-*linux* | mips*-*-openbsd*) # Support 128-bit long double for NewABI. HAVE_LONG_DOUBLE='defined(__mips64)' - TARGET=MIPS; TARGETDIR=mips + TARGET=MIPS_LINUX; TARGETDIR=mips ;; nios2*-linux*) @@ -293,7 +299,7 @@ AC_MSG_ERROR(["libffi has not been ported to $host."]) fi -AM_CONDITIONAL(MIPS, test x$TARGET = xMIPS) +AM_CONDITIONAL(MIPS,[expr x$TARGET : 'xMIPS' > /dev/null]) AM_CONDITIONAL(BFIN, test x$TARGET = xBFIN) AM_CONDITIONAL(SPARC, test x$TARGET = xSPARC) AM_CONDITIONAL(X86, test x$TARGET = xX86) @@ -617,4 +623,8 @@ AC_CONFIG_FILES(include/Makefile include/ffi.h Makefile testsuite/Makefile man/Makefile libffi.pc) +AC_CONFIG_LINKS(include/ffi_common.h:include/ffi_common.h) + +AC_CONFIG_FILES(fficonfig.py) + AC_OUTPUT diff -urN libffi-3.1/fficonfig.py.in libffi/fficonfig.py.in --- libffi-3.1/fficonfig.py.in 1970-01-01 01:00:00.000000000 +0100 +++ libffi/fficonfig.py.in 2014-08-09 21:43:25.229871827 +0200 @@ -0,0 +1,35 @@ +ffi_sources = """ +src/prep_cif.c +src/closures.c +""".split() + +ffi_platforms = { + 'MIPS_IRIX': ['src/mips/ffi.c', 'src/mips/o32.S', 'src/mips/n32.S'], + 'MIPS_LINUX': ['src/mips/ffi.c', 'src/mips/o32.S'], + 'X86': ['src/x86/ffi.c', 'src/x86/sysv.S', 'src/x86/win32.S'], + 'X86_FREEBSD': ['src/x86/ffi.c', 'src/x86/freebsd.S'], + 'X86_WIN32': ['src/x86/ffi.c', 'src/x86/win32.S'], + 'SPARC': ['src/sparc/ffi.c', 'src/sparc/v8.S', 'src/sparc/v9.S'], + 'ALPHA': ['src/alpha/ffi.c', 'src/alpha/osf.S'], + 'IA64': ['src/ia64/ffi.c', 'src/ia64/unix.S'], + 'M32R': ['src/m32r/sysv.S', 'src/m32r/ffi.c'], + 'M68K': ['src/m68k/ffi.c', 'src/m68k/sysv.S'], + 'POWERPC': ['src/powerpc/ffi.c', 'src/powerpc/ffi_sysv.c', 'src/powerpc/ffi_linux64.c', 'src/powerpc/sysv.S', 'src/powerpc/ppc_closure.S', 'src/powerpc/linux64.S', 'src/powerpc/linux64_closure.S'], + 'POWERPC_AIX': ['src/powerpc/ffi_darwin.c', 'src/powerpc/aix.S', 'src/powerpc/aix_closure.S'], + 'POWERPC_FREEBSD': ['src/powerpc/ffi.c', 'src/powerpc/sysv.S', 'src/powerpc/ppc_closure.S'], + 'AARCH64': ['src/aarch64/sysv.S', 'src/aarch64/ffi.c'], + 'ARM': ['src/arm/sysv.S', 'src/arm/ffi.c'], + 'LIBFFI_CRIS': ['src/cris/sysv.S', 'src/cris/ffi.c'], + 'FRV': ['src/frv/eabi.S', 'src/frv/ffi.c'], + 'S390': ['src/s390/sysv.S', 'src/s390/ffi.c'], + 'X86_64': ['src/x86/ffi64.c', 'src/x86/unix64.S', 'src/x86/ffi.c', 'src/x86/sysv.S'], + 'SH': ['src/sh/sysv.S', 'src/sh/ffi.c'], + 'SH64': ['src/sh64/sysv.S', 'src/sh64/ffi.c'], + 'PA': ['src/pa/linux.S', 'src/pa/ffi.c'], + 'PA_LINUX': ['src/pa/linux.S', 'src/pa/ffi.c'], + 'PA_HPUX': ['src/pa/hpux32.S', 'src/pa/ffi.c'], +} + +ffi_sources += ffi_platforms['@TARGET@'] + +ffi_cflags = '@CFLAGS@' diff -urN libffi-3.1/src/dlmalloc.c libffi/src/dlmalloc.c --- libffi-3.1/src/dlmalloc.c 2014-04-25 19:45:13.000000000 +0200 +++ libffi/src/dlmalloc.c 2014-08-09 21:51:07.881871443 +0200 @@ -457,6 +457,11 @@ #define LACKS_ERRNO_H #define MALLOC_FAILURE_ACTION #define MMAP_CLEARS 0 /* WINCE and some others apparently don't clear */ +#elif !defined _GNU_SOURCE +/* mremap() on Linux requires this via sys/mman.h + * See roundup issue 10309 + */ +#define _GNU_SOURCE 1 #endif /* WIN32 */ #ifdef __OS2__ @@ -4497,7 +4502,7 @@ char* tbase = (char*)(CALL_MMAP(tsize)); if (tbase != CMFAIL) { m = init_user_mstate(tbase, tsize); - set_segment_flags(&m->seg, IS_MMAPPED_BIT); + (void)set_segment_flags(&m->seg, IS_MMAPPED_BIT); set_lock(m, locked); } } @@ -4512,7 +4517,7 @@ if (capacity > msize + TOP_FOOT_SIZE && capacity < (size_t) -(msize + TOP_FOOT_SIZE + mparams.page_size)) { m = init_user_mstate((char*)base, capacity); - set_segment_flags(&m->seg, EXTERN_BIT); + (void)set_segment_flags(&m->seg, EXTERN_BIT); set_lock(m, locked); } return (mspace)m; diff -urN libffi-3.1/src/arm/ffi.c libffi/src/arm/ffi.c --- libffi-3.1/src/arm/ffi.c Sat Aug 09 23:52:34 2014 +0200 +++ libffi/src/arm/ffi.c Sat Aug 09 23:58:38 2014 +0200 @@ -154,9 +154,6 @@ int ffi_prep_args_VFP(char *stack, extended_cif *ecif, float *vfp_space) { - // make sure we are using FFI_VFP - FFI_ASSERT(ecif->cif->abi == FFI_VFP); - register unsigned int i, vi = 0; register void **p_argv; register char *argp, *regp, *eo_regp; @@ -165,6 +162,9 @@ char done_with_regs = 0; char is_vfp_type; + // make sure we are using FFI_VFP + FFI_ASSERT(ecif->cif->abi == FFI_VFP); + /* the first 4 words on the stack are used for values passed in core * registers. */ regp = stack;