summaryrefslogtreecommitdiff
path: root/patches/ios
diff options
context:
space:
mode:
Diffstat (limited to 'patches/ios')
-rw-r--r--patches/ios776
1 files changed, 0 insertions, 776 deletions
diff --git a/patches/ios b/patches/ios
deleted file mode 100644
index fadbded..0000000
--- a/patches/ios
+++ /dev/null
@@ -1,776 +0,0 @@
-Index: libffi/ChangeLog
-===================================================================
---- libffi.orig/ChangeLog
-+++ libffi/ChangeLog
-@@ -111,6 +111,29 @@
-
- * configure: Regenerate.
-
-+2011-02-09 Anthony Green <green@moxielogic.com>
-+
-+ * README: Mention ARM iOS.
-+
-+2011-02-09 Landon Fuller <landonf@macports.org>
-+
-+ * Makefile.am (EXTRA_DIST): Add build-ios.sh, src/arm/gentramp.sh,
-+ src/arm/trampoline.S.
-+ (nodist_libffi_la_SOURCES): Add src/arc/trampoline.S.
-+ * configure.ac (FFI_EXEC_TRAMPOLINE_TABLE): Define.
-+ * src/arm/ffi.c (ffi_trampoline_table)
-+ (ffi_closure_trampoline_table_page, ffi_trampoline_table_entry)
-+ (FFI_TRAMPOLINE_CODELOC_CONFIG, FFI_TRAMPOLINE_CONFIG_PAGE_OFFSET)
-+ (FFI_TRAMPOLINE_COUNT, ffi_trampoline_lock, ffi_trampoline_tables)
-+ (ffi_trampoline_table_alloc, ffi_closure_alloc, ffi_closure_free):
-+ Define for FFI_EXEC_TRAMPOLINE_TABLE case (iOS).
-+ (ffi_prep_closure_loc): Handl FFI_EXEC_TRAMPOLINE_TABLE case
-+ separately.
-+ * src/arm/sysv.S: Handle Apple iOS host.
-+ * src/closures.c: Handle FFI_EXEC_TRAMPOLINE_TABLE case.
-+ * build-ios.sh: New file.
-+ * fficonfig.h.in, configure, Makefile.in: Rebuilt.
-+
- 2011-02-08 Oren Held <orenhe@il.ibm.com>
-
- * src/dlmalloc.c (_STRUCT_MALLINFO): Define in order to avoid
-Index: libffi/Makefile.am
-===================================================================
---- libffi.orig/Makefile.am
-+++ libffi/Makefile.am
-@@ -10,31 +10,28 @@ EXTRA_DIST = LICENSE ChangeLog.v1 Change
- src/avr32/ffi.c src/avr32/sysv.S src/avr32/ffitarget.h \
- src/cris/ffi.c src/cris/sysv.S src/cris/ffitarget.h \
- src/ia64/ffi.c src/ia64/ffitarget.h src/ia64/ia64_flags.h \
-- src/ia64/unix.S \
-- src/mips/ffi.c src/mips/n32.S src/mips/o32.S \
-- src/mips/ffitarget.h \
-- src/m32r/ffi.c src/m32r/sysv.S src/m32r/ffitarget.h \
-- src/m68k/ffi.c src/m68k/sysv.S src/m68k/ffitarget.h \
-- src/powerpc/ffi.c src/powerpc/sysv.S \
-+ src/ia64/unix.S src/mips/ffi.c src/mips/n32.S src/mips/o32.S \
-+ src/mips/ffitarget.h src/m32r/ffi.c src/m32r/sysv.S \
-+ src/m32r/ffitarget.h src/m68k/ffi.c src/m68k/sysv.S \
-+ src/m68k/ffitarget.h src/powerpc/ffi.c src/powerpc/sysv.S \
- src/powerpc/linux64.S src/powerpc/linux64_closure.S \
-- src/powerpc/ppc_closure.S src/powerpc/asm.h \
-- src/powerpc/aix.S src/powerpc/darwin.S \
-- src/powerpc/aix_closure.S src/powerpc/darwin_closure.S \
-- src/powerpc/ffi_darwin.c src/powerpc/ffitarget.h \
-- src/s390/ffi.c src/s390/sysv.S src/s390/ffitarget.h \
-- src/sh/ffi.c src/sh/sysv.S src/sh/ffitarget.h \
-- src/sh64/ffi.c src/sh64/sysv.S src/sh64/ffitarget.h \
-- src/sparc/v8.S src/sparc/v9.S src/sparc/ffitarget.h \
-- src/sparc/ffi.c src/x86/darwin64.S \
-+ src/powerpc/ppc_closure.S src/powerpc/asm.h src/powerpc/aix.S \
-+ src/powerpc/darwin.S src/powerpc/aix_closure.S \
-+ src/powerpc/darwin_closure.S src/powerpc/ffi_darwin.c \
-+ src/powerpc/ffitarget.h src/s390/ffi.c src/s390/sysv.S \
-+ src/s390/ffitarget.h src/sh/ffi.c src/sh/sysv.S \
-+ src/sh/ffitarget.h src/sh64/ffi.c src/sh64/sysv.S \
-+ src/sh64/ffitarget.h src/sparc/v8.S src/sparc/v9.S \
-+ src/sparc/ffitarget.h src/sparc/ffi.c src/x86/darwin64.S \
- src/x86/ffi.c src/x86/sysv.S src/x86/win32.S src/x86/darwin.S \
-- src/x86/win64.S src/x86/freebsd.S \
-- src/x86/ffi64.c src/x86/unix64.S src/x86/ffitarget.h \
-- src/pa/ffitarget.h src/pa/ffi.c src/pa/linux.S src/pa/hpux32.S \
-- src/frv/ffi.c src/frv/eabi.S src/frv/ffitarget.h \
-- src/dlmalloc.c \
-- src/moxie/ffi.c src/moxie/eabi.S \
-- libtool-version ChangeLog.libffi m4/libtool.m4 \
-- m4/lt~obsolete.m4 m4/ltoptions.m4 m4/ltsugar.m4 m4/ltversion.m4
-+ src/x86/win64.S src/x86/freebsd.S src/x86/ffi64.c \
-+ src/x86/unix64.S src/x86/ffitarget.h src/pa/ffitarget.h \
-+ src/pa/ffi.c src/pa/linux.S src/pa/hpux32.S src/frv/ffi.c \
-+ src/frv/eabi.S src/frv/ffitarget.h src/dlmalloc.c \
-+ src/moxie/ffi.c src/moxie/eabi.S libtool-version \
-+ ChangeLog.libffi m4/libtool.m4 m4/lt~obsolete.m4 \
-+ m4/ltoptions.m4 m4/ltsugar.m4
-+ m4/ltversion.m4 build-ios.sh src/arm/gentramp.sh
-
- info_TEXINFOS = doc/libffi.texi
-
-@@ -144,6 +141,9 @@ nodist_libffi_la_SOURCES += src/powerpc/
- endif
- if ARM
- nodist_libffi_la_SOURCES += src/arm/sysv.S src/arm/ffi.c
-+if FFI_EXEC_TRAMPOLINE_TABLE
-+nodist_libffi_la_SOURCES += src/arm/trampoline.S
-+endif
- endif
- if AVR32
- nodist_libffi_la_SOURCES += src/avr32/sysv.S src/avr32/ffi.c
-Index: libffi/Makefile.in
-===================================================================
---- libffi.orig/Makefile.in
-+++ libffi/Makefile.in
-@@ -52,21 +52,22 @@ target_triplet = @target@
- @POWERPC_DARWIN_TRUE@am__append_14 = src/powerpc/ffi_darwin.c src/powerpc/darwin.S src/powerpc/darwin_closure.S
- @POWERPC_FREEBSD_TRUE@am__append_15 = src/powerpc/ffi.c src/powerpc/sysv.S src/powerpc/ppc_closure.S
- @ARM_TRUE@am__append_16 = src/arm/sysv.S src/arm/ffi.c
--@AVR32_TRUE@am__append_17 = src/avr32/sysv.S src/avr32/ffi.c
--@LIBFFI_CRIS_TRUE@am__append_18 = src/cris/sysv.S src/cris/ffi.c
--@FRV_TRUE@am__append_19 = src/frv/eabi.S src/frv/ffi.c
--@MOXIE_TRUE@am__append_20 = src/moxie/eabi.S src/moxie/ffi.c
--@S390_TRUE@am__append_21 = src/s390/sysv.S src/s390/ffi.c
--@X86_64_TRUE@am__append_22 = src/x86/ffi64.c src/x86/unix64.S src/x86/ffi.c src/x86/sysv.S
--@SH_TRUE@am__append_23 = src/sh/sysv.S src/sh/ffi.c
--@SH64_TRUE@am__append_24 = src/sh64/sysv.S src/sh64/ffi.c
--@PA_LINUX_TRUE@am__append_25 = src/pa/linux.S src/pa/ffi.c
--@PA_HPUX_TRUE@am__append_26 = src/pa/hpux32.S src/pa/ffi.c
-+@ARM_TRUE@@FFI_EXEC_TRAMPOLINE_TABLE_TRUE@am__append_17 = src/arm/trampoline.S
-+@AVR32_TRUE@am__append_18 = src/avr32/sysv.S src/avr32/ffi.c
-+@LIBFFI_CRIS_TRUE@am__append_19 = src/cris/sysv.S src/cris/ffi.c
-+@FRV_TRUE@am__append_20 = src/frv/eabi.S src/frv/ffi.c
-+@MOXIE_TRUE@am__append_21 = src/moxie/eabi.S src/moxie/ffi.c
-+@S390_TRUE@am__append_22 = src/s390/sysv.S src/s390/ffi.c
-+@X86_64_TRUE@am__append_23 = src/x86/ffi64.c src/x86/unix64.S src/x86/ffi.c src/x86/sysv.S
-+@SH_TRUE@am__append_24 = src/sh/sysv.S src/sh/ffi.c
-+@SH64_TRUE@am__append_25 = src/sh64/sysv.S src/sh64/ffi.c
-+@PA_LINUX_TRUE@am__append_26 = src/pa/linux.S src/pa/ffi.c
-+@PA_HPUX_TRUE@am__append_27 = src/pa/hpux32.S src/pa/ffi.c
- # Build debug. Define FFI_DEBUG on the commandline so that, when building with
- # MSVC, it can link against the debug CRT.
--@FFI_DEBUG_TRUE@am__append_27 = -DFFI_DEBUG
-+@FFI_DEBUG_TRUE@am__append_28 = -DFFI_DEBUG
- # Build opt.
--@FFI_DEBUG_FALSE@am__append_28 = -O2
-+@FFI_DEBUG_FALSE@am__append_29 = -O2
- subdir = .
- DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
- $(srcdir)/Makefile.in $(srcdir)/doc/stamp-vti \
-@@ -144,17 +145,18 @@ am_libffi_la_OBJECTS = src/debug.lo src/
- @POWERPC_FREEBSD_TRUE@ src/powerpc/sysv.lo \
- @POWERPC_FREEBSD_TRUE@ src/powerpc/ppc_closure.lo
- @ARM_TRUE@am__objects_16 = src/arm/sysv.lo src/arm/ffi.lo
--@AVR32_TRUE@am__objects_17 = src/avr32/sysv.lo src/avr32/ffi.lo
--@LIBFFI_CRIS_TRUE@am__objects_18 = src/cris/sysv.lo src/cris/ffi.lo
--@FRV_TRUE@am__objects_19 = src/frv/eabi.lo src/frv/ffi.lo
--@MOXIE_TRUE@am__objects_20 = src/moxie/eabi.lo src/moxie/ffi.lo
--@S390_TRUE@am__objects_21 = src/s390/sysv.lo src/s390/ffi.lo
--@X86_64_TRUE@am__objects_22 = src/x86/ffi64.lo src/x86/unix64.lo \
-+@ARM_TRUE@@FFI_EXEC_TRAMPOLINE_TABLE_TRUE@am__objects_17 = src/arm/trampoline.lo
-+@AVR32_TRUE@am__objects_18 = src/avr32/sysv.lo src/avr32/ffi.lo
-+@LIBFFI_CRIS_TRUE@am__objects_19 = src/cris/sysv.lo src/cris/ffi.lo
-+@FRV_TRUE@am__objects_20 = src/frv/eabi.lo src/frv/ffi.lo
-+@MOXIE_TRUE@am__objects_21 = src/moxie/eabi.lo src/moxie/ffi.lo
-+@S390_TRUE@am__objects_22 = src/s390/sysv.lo src/s390/ffi.lo
-+@X86_64_TRUE@am__objects_23 = src/x86/ffi64.lo src/x86/unix64.lo \
- @X86_64_TRUE@ src/x86/ffi.lo src/x86/sysv.lo
--@SH_TRUE@am__objects_23 = src/sh/sysv.lo src/sh/ffi.lo
--@SH64_TRUE@am__objects_24 = src/sh64/sysv.lo src/sh64/ffi.lo
--@PA_LINUX_TRUE@am__objects_25 = src/pa/linux.lo src/pa/ffi.lo
--@PA_HPUX_TRUE@am__objects_26 = src/pa/hpux32.lo src/pa/ffi.lo
-+@SH_TRUE@am__objects_24 = src/sh/sysv.lo src/sh/ffi.lo
-+@SH64_TRUE@am__objects_25 = src/sh64/sysv.lo src/sh64/ffi.lo
-+@PA_LINUX_TRUE@am__objects_26 = src/pa/linux.lo src/pa/ffi.lo
-+@PA_HPUX_TRUE@am__objects_27 = src/pa/hpux32.lo src/pa/ffi.lo
- nodist_libffi_la_OBJECTS = $(am__objects_1) $(am__objects_2) \
- $(am__objects_3) $(am__objects_4) $(am__objects_5) \
- $(am__objects_6) $(am__objects_7) $(am__objects_8) \
-@@ -163,17 +165,18 @@ nodist_libffi_la_OBJECTS = $(am__objects
- $(am__objects_15) $(am__objects_16) $(am__objects_17) \
- $(am__objects_18) $(am__objects_19) $(am__objects_20) \
- $(am__objects_21) $(am__objects_22) $(am__objects_23) \
-- $(am__objects_24) $(am__objects_25) $(am__objects_26)
-+ $(am__objects_24) $(am__objects_25) $(am__objects_26) \
-+ $(am__objects_27)
- libffi_la_OBJECTS = $(am_libffi_la_OBJECTS) \
- $(nodist_libffi_la_OBJECTS)
- libffi_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
- $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
- $(libffi_la_LDFLAGS) $(LDFLAGS) -o $@
- libffi_convenience_la_LIBADD =
--am__objects_27 = src/debug.lo src/prep_cif.lo src/types.lo \
-+am__objects_28 = src/debug.lo src/prep_cif.lo src/types.lo \
- src/raw_api.lo src/java_raw_api.lo src/closures.lo
--am_libffi_convenience_la_OBJECTS = $(am__objects_27)
--am__objects_28 = $(am__objects_1) $(am__objects_2) $(am__objects_3) \
-+am_libffi_convenience_la_OBJECTS = $(am__objects_28)
-+am__objects_29 = $(am__objects_1) $(am__objects_2) $(am__objects_3) \
- $(am__objects_4) $(am__objects_5) $(am__objects_6) \
- $(am__objects_7) $(am__objects_8) $(am__objects_9) \
- $(am__objects_10) $(am__objects_11) $(am__objects_12) \
-@@ -181,8 +184,8 @@ am__objects_28 = $(am__objects_1) $(am__
- $(am__objects_16) $(am__objects_17) $(am__objects_18) \
- $(am__objects_19) $(am__objects_20) $(am__objects_21) \
- $(am__objects_22) $(am__objects_23) $(am__objects_24) \
-- $(am__objects_25) $(am__objects_26)
--nodist_libffi_convenience_la_OBJECTS = $(am__objects_28)
-+ $(am__objects_25) $(am__objects_26) $(am__objects_27)
-+nodist_libffi_convenience_la_OBJECTS = $(am__objects_29)
- libffi_convenience_la_OBJECTS = $(am_libffi_convenience_la_OBJECTS) \
- $(nodist_libffi_convenience_la_OBJECTS)
- DEFAULT_INCLUDES = -I.@am__isrc@
-@@ -300,6 +303,7 @@ ECHO_N = @ECHO_N@
- ECHO_T = @ECHO_T@
- EGREP = @EGREP@
- EXEEXT = @EXEEXT@
-+FFI_EXEC_TRAMPOLINE_TABLE = @FFI_EXEC_TRAMPOLINE_TABLE@
- FGREP = @FGREP@
- GREP = @GREP@
- HAVE_LONG_DOUBLE = @HAVE_LONG_DOUBLE@
-@@ -408,31 +412,27 @@ EXTRA_DIST = LICENSE ChangeLog.v1 Change
- src/avr32/ffi.c src/avr32/sysv.S src/avr32/ffitarget.h \
- src/cris/ffi.c src/cris/sysv.S src/cris/ffitarget.h \
- src/ia64/ffi.c src/ia64/ffitarget.h src/ia64/ia64_flags.h \
-- src/ia64/unix.S \
-- src/mips/ffi.c src/mips/n32.S src/mips/o32.S \
-- src/mips/ffitarget.h \
-- src/m32r/ffi.c src/m32r/sysv.S src/m32r/ffitarget.h \
-- src/m68k/ffi.c src/m68k/sysv.S src/m68k/ffitarget.h \
-- src/powerpc/ffi.c src/powerpc/sysv.S \
-+ src/ia64/unix.S src/mips/ffi.c src/mips/n32.S src/mips/o32.S \
-+ src/mips/ffitarget.h src/m32r/ffi.c src/m32r/sysv.S \
-+ src/m32r/ffitarget.h src/m68k/ffi.c src/m68k/sysv.S \
-+ src/m68k/ffitarget.h src/powerpc/ffi.c src/powerpc/sysv.S \
- src/powerpc/linux64.S src/powerpc/linux64_closure.S \
-- src/powerpc/ppc_closure.S src/powerpc/asm.h \
-- src/powerpc/aix.S src/powerpc/darwin.S \
-- src/powerpc/aix_closure.S src/powerpc/darwin_closure.S \
-- src/powerpc/ffi_darwin.c src/powerpc/ffitarget.h \
-- src/s390/ffi.c src/s390/sysv.S src/s390/ffitarget.h \
-- src/sh/ffi.c src/sh/sysv.S src/sh/ffitarget.h \
-- src/sh64/ffi.c src/sh64/sysv.S src/sh64/ffitarget.h \
-- src/sparc/v8.S src/sparc/v9.S src/sparc/ffitarget.h \
-- src/sparc/ffi.c src/x86/darwin64.S \
-+ src/powerpc/ppc_closure.S src/powerpc/asm.h src/powerpc/aix.S \
-+ src/powerpc/darwin.S src/powerpc/aix_closure.S \
-+ src/powerpc/darwin_closure.S src/powerpc/ffi_darwin.c \
-+ src/powerpc/ffitarget.h src/s390/ffi.c src/s390/sysv.S \
-+ src/s390/ffitarget.h src/sh/ffi.c src/sh/sysv.S \
-+ src/sh/ffitarget.h src/sh64/ffi.c src/sh64/sysv.S \
-+ src/sh64/ffitarget.h src/sparc/v8.S src/sparc/v9.S \
-+ src/sparc/ffitarget.h src/sparc/ffi.c src/x86/darwin64.S \
- src/x86/ffi.c src/x86/sysv.S src/x86/win32.S src/x86/darwin.S \
-- src/x86/win64.S src/x86/freebsd.S \
-- src/x86/ffi64.c src/x86/unix64.S src/x86/ffitarget.h \
-- src/pa/ffitarget.h src/pa/ffi.c src/pa/linux.S src/pa/hpux32.S \
-- src/frv/ffi.c src/frv/eabi.S src/frv/ffitarget.h \
-- src/dlmalloc.c \
-- src/moxie/ffi.c src/moxie/eabi.S \
-- libtool-version ChangeLog.libffi m4/libtool.m4 \
-- m4/lt~obsolete.m4 m4/ltoptions.m4 m4/ltsugar.m4 m4/ltversion.m4
-+ src/x86/win64.S src/x86/freebsd.S src/x86/ffi64.c \
-+ src/x86/unix64.S src/x86/ffitarget.h src/pa/ffitarget.h \
-+ src/pa/ffi.c src/pa/linux.S src/pa/hpux32.S src/frv/ffi.c \
-+ src/frv/eabi.S src/frv/ffitarget.h src/dlmalloc.c \
-+ src/moxie/ffi.c src/moxie/eabi.S libtool-version \
-+ ChangeLog.libffi m4/libtool.m4 m4/lt~obsolete.m4 \
-+ m4/ltoptions.m4 m4/ltsugar.m4
-
- info_TEXINFOS = doc/libffi.texi
-
-@@ -491,10 +491,11 @@ nodist_libffi_la_SOURCES = $(am__append_
- $(am__append_15) $(am__append_16) $(am__append_17) \
- $(am__append_18) $(am__append_19) $(am__append_20) \
- $(am__append_21) $(am__append_22) $(am__append_23) \
-- $(am__append_24) $(am__append_25) $(am__append_26)
-+ $(am__append_24) $(am__append_25) $(am__append_26) \
-+ $(am__append_27)
- libffi_convenience_la_SOURCES = $(libffi_la_SOURCES)
- nodist_libffi_convenience_la_SOURCES = $(nodist_libffi_la_SOURCES)
--AM_CFLAGS = -Wall -g -fexceptions $(am__append_27) $(am__append_28)
-+AM_CFLAGS = -Wall -g -fexceptions $(am__append_28) $(am__append_29)
- libffi_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` $(LTLDFLAGS) $(AM_LTLDFLAGS)
- AM_CPPFLAGS = -I. -I$(top_srcdir)/include -Iinclude -I$(top_srcdir)/src
- AM_CCASFLAGS = $(AM_CPPFLAGS)
-@@ -730,6 +731,8 @@ src/arm/sysv.lo: src/arm/$(am__dirstamp)
- src/arm/$(DEPDIR)/$(am__dirstamp)
- src/arm/ffi.lo: src/arm/$(am__dirstamp) \
- src/arm/$(DEPDIR)/$(am__dirstamp)
-+src/arm/trampoline.lo: src/arm/$(am__dirstamp) \
-+ src/arm/$(DEPDIR)/$(am__dirstamp)
- src/avr32/$(am__dirstamp):
- @$(MKDIR_P) src/avr32
- @: > src/avr32/$(am__dirstamp)
-@@ -827,6 +830,8 @@ mostlyclean-compile:
- -rm -f src/arm/ffi.lo
- -rm -f src/arm/sysv.$(OBJEXT)
- -rm -f src/arm/sysv.lo
-+ -rm -f src/arm/trampoline.$(OBJEXT)
-+ -rm -f src/arm/trampoline.lo
- -rm -f src/avr32/ffi.$(OBJEXT)
- -rm -f src/avr32/ffi.lo
- -rm -f src/avr32/sysv.$(OBJEXT)
-@@ -949,6 +954,7 @@ distclean-compile:
- @AMDEP_TRUE@@am__include@ @am__quote@src/alpha/$(DEPDIR)/osf.Plo@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@src/arm/$(DEPDIR)/ffi.Plo@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@src/arm/$(DEPDIR)/sysv.Plo@am__quote@
-+@AMDEP_TRUE@@am__include@ @am__quote@src/arm/$(DEPDIR)/trampoline.Plo@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@src/avr32/$(DEPDIR)/ffi.Plo@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@src/avr32/$(DEPDIR)/sysv.Plo@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@src/cris/$(DEPDIR)/ffi.Plo@am__quote@
-@@ -1816,6 +1822,7 @@ uninstall-am: uninstall-dvi-am uninstall
- uninstall-info-am uninstall-libLTLIBRARIES uninstall-pdf-am \
- uninstall-pkgconfigDATA uninstall-ps-am
-
-+ m4/ltversion.m4 build-ios.sh src/arm/gentramp.sh
-
- # No install-html or install-pdf support in automake yet
- .PHONY: install-html install-pdf
-Index: libffi/configure.ac
-===================================================================
---- libffi.orig/configure.ac
-+++ libffi/configure.ac
-@@ -331,13 +331,23 @@ if test x$TARGET = xX86_WIN64; then
- fi
- fi
-
-+
-+FFI_EXEC_TRAMPOLINE_TABLE=0
- case "$target" in
-+ *arm*-apple-darwin*)
-+ FFI_EXEC_TRAMPOLINE_TABLE=1
-+ AC_DEFINE(FFI_EXEC_TRAMPOLINE_TABLE, 1,
-+ [Cannot use PROT_EXEC on this target, so, we revert to
-+ alternative means])
-+ ;;
- *-apple-darwin10* | *-*-freebsd* | *-*-openbsd* | *-pc-solaris*)
- AC_DEFINE(FFI_MMAP_EXEC_WRIT, 1,
- [Cannot use malloc on this target, so, we revert to
- alternative means])
- ;;
- esac
-+AM_CONDITIONAL(FFI_EXEC_TRAMPOLINE_TABLE, test x$FFI_EXEC_TRAMPOLINE_TABLE = x1)
-+AC_SUBST(FFI_EXEC_TRAMPOLINE_TABLE)
-
- if test x$TARGET = xX86_64; then
- AC_CACHE_CHECK([assembler supports unwind section type],
-Index: libffi/fficonfig.h.in
-===================================================================
---- libffi.orig/fficonfig.h.in
-+++ libffi/fficonfig.h.in
-@@ -17,6 +17,9 @@
- /* Define this if you want extra debugging. */
- #undef FFI_DEBUG
-
-+/* Cannot use PROT_EXEC on this target, so, we revert to alternative means */
-+#undef FFI_EXEC_TRAMPOLINE_TABLE
-+
- /* Cannot use malloc on this target, so, we revert to alternative means */
- #undef FFI_MMAP_EXEC_WRIT
-
-Index: libffi/src/arm/ffi.c
-===================================================================
---- libffi.orig/src/arm/ffi.c
-+++ libffi/src/arm/ffi.c
-@@ -1,5 +1,6 @@
- /* -----------------------------------------------------------------------
-- ffi.c - Copyright (c) 1998, 2008 Red Hat, Inc.
-+ ffi.c - Copyright (c) 1998, 2008, 2011 Red Hat, Inc.
-+ Copyright (c) 2011 Plausible Labs Cooperative, Inc.
-
- ARM Foreign Function Interface
-
-@@ -339,6 +340,220 @@ ffi_prep_incoming_args_SYSV(char *stack,
-
- extern unsigned int ffi_arm_trampoline[3];
-
-+#if FFI_EXEC_TRAMPOLINE_TABLE
-+
-+#include <mach/mach.h>
-+#include <pthread.h>
-+#include <stdio.h>
-+#include <stdlib.h>
-+
-+extern void *ffi_closure_trampoline_table_page;
-+
-+typedef struct ffi_trampoline_table ffi_trampoline_table;
-+typedef struct ffi_trampoline_table_entry ffi_trampoline_table_entry;
-+
-+struct ffi_trampoline_table {
-+ /* contigious writable and executable pages */
-+ vm_address_t config_page;
-+ vm_address_t trampoline_page;
-+
-+ /* free list tracking */
-+ uint16_t free_count;
-+ ffi_trampoline_table_entry *free_list;
-+ ffi_trampoline_table_entry *free_list_pool;
-+
-+ ffi_trampoline_table *prev;
-+ ffi_trampoline_table *next;
-+};
-+
-+struct ffi_trampoline_table_entry {
-+ void *(*trampoline)();
-+ ffi_trampoline_table_entry *next;
-+};
-+
-+/* Override the standard architecture trampoline size */
-+// XXX TODO - Fix
-+#undef FFI_TRAMPOLINE_SIZE
-+#define FFI_TRAMPOLINE_SIZE 12
-+
-+/* The trampoline configuration is placed at 4080 bytes prior to the trampoline's entry point */
-+#define FFI_TRAMPOLINE_CODELOC_CONFIG(codeloc) ((void **) (((uint8_t *) codeloc) - 4080));
-+
-+/* The first 16 bytes of the config page are unused, as they are unaddressable from the trampoline page. */
-+#define FFI_TRAMPOLINE_CONFIG_PAGE_OFFSET 16
-+
-+/* Total number of trampolines that fit in one trampoline table */
-+#define FFI_TRAMPOLINE_COUNT ((PAGE_SIZE - FFI_TRAMPOLINE_CONFIG_PAGE_OFFSET) / FFI_TRAMPOLINE_SIZE)
-+
-+static pthread_mutex_t ffi_trampoline_lock = PTHREAD_MUTEX_INITIALIZER;
-+static ffi_trampoline_table *ffi_trampoline_tables = NULL;
-+
-+static ffi_trampoline_table *
-+ffi_trampoline_table_alloc ()
-+{
-+ ffi_trampoline_table *table = NULL;
-+
-+ /* Loop until we can allocate two contigious pages */
-+ while (table == NULL) {
-+ vm_address_t config_page = 0x0;
-+ kern_return_t kt;
-+
-+ /* Try to allocate two pages */
-+ kt = vm_allocate (mach_task_self (), &config_page, PAGE_SIZE*2, VM_FLAGS_ANYWHERE);
-+ if (kt != KERN_SUCCESS) {
-+ fprintf(stderr, "vm_allocate() failure: %d at %s:%d\n", kt, __FILE__, __LINE__);
-+ break;
-+ }
-+
-+ /* Now drop the second half of the allocation to make room for the trampoline table */
-+ vm_address_t trampoline_page = config_page+PAGE_SIZE;
-+ kt = vm_deallocate (mach_task_self (), trampoline_page, PAGE_SIZE);
-+ if (kt != KERN_SUCCESS) {
-+ fprintf(stderr, "vm_deallocate() failure: %d at %s:%d\n", kt, __FILE__, __LINE__);
-+ break;
-+ }
-+
-+ /* Remap the trampoline table to directly follow the config page */
-+ vm_prot_t cur_prot;
-+ vm_prot_t max_prot;
-+
-+ kt = vm_remap (mach_task_self (), &trampoline_page, PAGE_SIZE, 0x0, FALSE, mach_task_self (), (vm_address_t) &ffi_closure_trampoline_table_page, FALSE, &cur_prot, &max_prot, VM_INHERIT_SHARE);
-+
-+ /* If we lost access to the destination trampoline page, drop our config allocation mapping and retry */
-+ if (kt != KERN_SUCCESS) {
-+ /* Log unexpected failures */
-+ if (kt != KERN_NO_SPACE) {
-+ fprintf(stderr, "vm_remap() failure: %d at %s:%d\n", kt, __FILE__, __LINE__);
-+ }
-+
-+ vm_deallocate (mach_task_self (), config_page, PAGE_SIZE);
-+ continue;
-+ }
-+
-+ /* We have valid trampoline and config pages */
-+ table = calloc (1, sizeof(ffi_trampoline_table));
-+ table->free_count = FFI_TRAMPOLINE_COUNT;
-+ table->config_page = config_page;
-+ table->trampoline_page = trampoline_page;
-+
-+ /* Create and initialize the free list */
-+ table->free_list_pool = calloc(FFI_TRAMPOLINE_COUNT, sizeof(ffi_trampoline_table_entry));
-+
-+ uint16_t i;
-+ for (i = 0; i < table->free_count; i++) {
-+ ffi_trampoline_table_entry *entry = &table->free_list_pool[i];
-+ entry->trampoline = (void *) (table->trampoline_page + (i * FFI_TRAMPOLINE_SIZE));
-+
-+ if (i < table->free_count - 1)
-+ entry->next = &table->free_list_pool[i+1];
-+ }
-+
-+ table->free_list = table->free_list_pool;
-+ }
-+
-+ return table;
-+}
-+
-+void *
-+ffi_closure_alloc (size_t size, void **code)
-+{
-+ /* Create the closure */
-+ ffi_closure *closure = malloc(size);
-+ if (closure == NULL)
-+ return NULL;
-+
-+ pthread_mutex_lock(&ffi_trampoline_lock);
-+
-+ /* Check for an active trampoline table with available entries. */
-+ ffi_trampoline_table *table = ffi_trampoline_tables;
-+ if (table == NULL || table->free_list == NULL) {
-+ table = ffi_trampoline_table_alloc ();
-+ if (table == NULL) {
-+ free(closure);
-+ return NULL;
-+ }
-+
-+ /* Insert the new table at the top of the list */
-+ table->next = ffi_trampoline_tables;
-+ if (table->next != NULL)
-+ table->next->prev = table;
-+
-+ ffi_trampoline_tables = table;
-+ }
-+
-+ /* Claim the free entry */
-+ ffi_trampoline_table_entry *entry = ffi_trampoline_tables->free_list;
-+ ffi_trampoline_tables->free_list = entry->next;
-+ ffi_trampoline_tables->free_count--;
-+ entry->next = NULL;
-+
-+ pthread_mutex_unlock(&ffi_trampoline_lock);
-+
-+ /* Initialize the return values */
-+ *code = entry->trampoline;
-+ closure->trampoline_table = table;
-+ closure->trampoline_table_entry = entry;
-+
-+ return closure;
-+}
-+
-+void
-+ffi_closure_free (void *ptr)
-+{
-+ ffi_closure *closure = ptr;
-+
-+ pthread_mutex_lock(&ffi_trampoline_lock);
-+
-+ /* Fetch the table and entry references */
-+ ffi_trampoline_table *table = closure->trampoline_table;
-+ ffi_trampoline_table_entry *entry = closure->trampoline_table_entry;
-+
-+ /* Return the entry to the free list */
-+ entry->next = table->free_list;
-+ table->free_list = entry;
-+ table->free_count++;
-+
-+ /* If all trampolines within this table are free, and at least one other table exists, deallocate
-+ * the table */
-+ if (table->free_count == FFI_TRAMPOLINE_COUNT && ffi_trampoline_tables != table) {
-+ /* Remove from the list */
-+ if (table->prev != NULL)
-+ table->prev->next = table->next;
-+
-+ if (table->next != NULL)
-+ table->next->prev = table->prev;
-+
-+ /* Deallocate pages */
-+ kern_return_t kt;
-+ kt = vm_deallocate (mach_task_self (), table->config_page, PAGE_SIZE);
-+ if (kt != KERN_SUCCESS)
-+ fprintf(stderr, "vm_deallocate() failure: %d at %s:%d\n", kt, __FILE__, __LINE__);
-+
-+ kt = vm_deallocate (mach_task_self (), table->trampoline_page, PAGE_SIZE);
-+ if (kt != KERN_SUCCESS)
-+ fprintf(stderr, "vm_deallocate() failure: %d at %s:%d\n", kt, __FILE__, __LINE__);
-+
-+ /* Deallocate free list */
-+ free (table->free_list_pool);
-+ free (table);
-+ } else if (ffi_trampoline_tables != table) {
-+ /* Otherwise, bump this table to the top of the list */
-+ table->prev = NULL;
-+ table->next = ffi_trampoline_tables;
-+ if (ffi_trampoline_tables != NULL)
-+ ffi_trampoline_tables->prev = table;
-+
-+ ffi_trampoline_tables = table;
-+ }
-+
-+ pthread_mutex_unlock (&ffi_trampoline_lock);
-+
-+ /* Free the closure */
-+ free (closure);
-+}
-+
-+#else
-+
- #define FFI_INIT_TRAMPOLINE(TRAMP,FUN,CTX) \
- ({ unsigned char *__tramp = (unsigned char*)(TRAMP); \
- unsigned int __fun = (unsigned int)(FUN); \
-@@ -353,6 +568,7 @@ extern unsigned int ffi_arm_trampoline[3
- mapping. */ \
- })
-
-+#endif
-
- /* the cif must already be prep'ed */
-
-@@ -372,10 +588,16 @@ ffi_prep_closure_loc (ffi_closure* closu
- else
- FFI_ASSERT (0);
-
-+#if FFI_EXEC_TRAMPOLINE_TABLE
-+ void **config = FFI_TRAMPOLINE_CODELOC_CONFIG(codeloc);
-+ config[0] = closure;
-+ config[1] = closure_func;
-+#else
- FFI_INIT_TRAMPOLINE (&closure->tramp[0], \
- closure_func, \
- codeloc);
--
-+#endif
-+
- closure->cif = cif;
- closure->user_data = user_data;
- closure->fun = fun;
-Index: libffi/src/arm/sysv.S
-===================================================================
---- libffi.orig/src/arm/sysv.S
-+++ libffi/src/arm/sysv.S
-@@ -1,5 +1,6 @@
- /* -----------------------------------------------------------------------
-- sysv.S - Copyright (c) 1998, 2008 Red Hat, Inc.
-+ sysv.S - Copyright (c) 1998, 2008, 2011 Red Hat, Inc.
-+ Copyright (c) 2011 Plausible Labs Cooperative, Inc.
-
- ARM Foreign Function Interface
-
-@@ -39,7 +40,11 @@
- #else
- #define CNAME(x) x
- #endif
-+#ifdef __APPLE__
-+#define ENTRY(x) .globl CNAME(x); CNAME(x):
-+#else
- #define ENTRY(x) .globl CNAME(x); .type CNAME(x),%function; CNAME(x):
-+#endif /* __APPLE__ */
- #endif
-
- #ifdef __ELF__
-@@ -48,6 +53,12 @@
- #define LSYM(x) x
- #endif
-
-+/* Use the SOFTFP return value ABI on Mac OS X, as per the iOS ABI
-+ Function Call Guide */
-+#ifdef __APPLE__
-+#define __SOFTFP__
-+#endif
-+
- /* We need a better way of testing for this, but for now, this is all
- we can do. */
- @ This selects the minimum architecture level required.
-@@ -105,21 +116,33 @@
- .align 0
- .thumb
- .thumb_func
-+#ifdef __APPLE__
-+ ENTRY($0)
-+#else
- ENTRY(\name)
-+#endif
- bx pc
- nop
- .arm
- UNWIND .fnstart
- /* A hook to tell gdb that we've switched to ARM mode. Also used to call
- directly from other local arm routines. */
--_L__\name:
-+#ifdef __APPLE__
-+_L__$0:
-+#else
-+_L__\name:
-+#endif
- .endm
- #else
- .macro ARM_FUNC_START name
- .text
- .align 0
- .arm
-+#ifdef __APPLE__
-+ ENTRY($0)
-+#else
- ENTRY(\name)
-+#endif
- UNWIND .fnstart
- .endm
- #endif
-@@ -141,8 +164,7 @@ _L__\name:
- #endif
- .endm
-
--
-- @ r0: fn
-+ @ r0: ffi_prep_args
- @ r1: &ecif
- @ r2: cif->bytes
- @ r3: fig->flags
-@@ -222,11 +244,18 @@ ARM_FUNC_START ffi_call_SYSV
- #endif
-
- LSYM(Lepilogue):
-- RETLDM "r0-r3,fp"
-+#if defined (__INTERWORKING__)
-+ ldmia sp!, {r0-r3,fp, lr}
-+ bx lr
-+#else
-+ ldmia sp!, {r0-r3,fp, pc}
-+#endif
-
- .ffi_call_SYSV_end:
- UNWIND .fnend
-+#ifdef __ELF__
- .size CNAME(ffi_call_SYSV),.ffi_call_SYSV_end-CNAME(ffi_call_SYSV)
-+#endif
-
-
- /*
-@@ -247,7 +276,7 @@ ARM_FUNC_START ffi_closure_SYSV
- sub sp, sp, #16
- str sp, [sp, #8]
- add r1, sp, #8
-- bl ffi_closure_SYSV_inner
-+ bl CNAME(ffi_closure_SYSV_inner)
- cmp r0, #FFI_TYPE_INT
- beq .Lretint
-
-@@ -299,7 +328,9 @@ ARM_FUNC_START ffi_closure_SYSV
-
- .ffi_closure_SYSV_end:
- UNWIND .fnend
-+#ifdef __ELF__
- .size CNAME(ffi_closure_SYSV),.ffi_closure_SYSV_end-CNAME(ffi_closure_SYSV)
-+#endif
-
-
- /* Below are VFP hard-float ABI call and closure implementations.
-@@ -371,7 +402,7 @@ LSYM(Lbase_args):
- @ assume no return value.
- cmp r2, #0
- beq LSYM(Lepilogue_vfp)
--
-+
- cmp r3, #FFI_TYPE_INT
- streq r0, [r2]
- beq LSYM(Lepilogue_vfp)
-Index: libffi/src/closures.c
-===================================================================
---- libffi.orig/src/closures.c
-+++ libffi/src/closures.c
-@@ -1,6 +1,7 @@
- /* -----------------------------------------------------------------------
-- closures.c - Copyright (c) 2007 Red Hat, Inc.
-- Copyright (C) 2007, 2009, 2010 Free Software Foundation, Inc
-+ closures.c - Copyright (c) 2007, 2009, 2010 Red Hat, Inc.
-+ Copyright (C) 2007, 2009, 2010 Free Software Foundation, Inc
-+ Copyright (c) 2011 Plausible Labs Cooperative, Inc.
-
- Code to allocate and deallocate memory for closures.
-
-@@ -32,7 +33,7 @@
- #include <ffi.h>
- #include <ffi_common.h>
-
--#ifndef FFI_MMAP_EXEC_WRIT
-+#if !FFI_MMAP_EXEC_WRIT && !FFI_EXEC_TRAMPOLINE_TABLE
- # if __gnu_linux__
- /* This macro indicates it may be forbidden to map anonymous memory
- with both write and execute permission. Code compiled when this
-@@ -63,7 +64,11 @@
-
- #if FFI_CLOSURES
-
--# if FFI_MMAP_EXEC_WRIT
-+# if FFI_EXEC_TRAMPOLINE_TABLE
-+
-+// Per-target implementation; It's unclear what can reasonable be shared between two OS/architecture implementations.
-+
-+# elif FFI_MMAP_EXEC_WRIT /* !FFI_EXEC_TRAMPOLINE_TABLE */
-
- #define USE_LOCKS 1
- #define USE_DL_PREFIX 1