223 lines
7.4 KiB
Plaintext
223 lines
7.4 KiB
Plaintext
Index: libffi/src/closures.c
|
|
===================================================================
|
|
--- libffi.orig/src/closures.c
|
|
+++ libffi/src/closures.c
|
|
@@ -214,6 +214,8 @@ static int dlmunmap(void *, size_t);
|
|
|
|
#if !(defined(X86_WIN32) || defined(X86_WIN64)) || defined (__CYGWIN__)
|
|
|
|
+#if FFI_MMAP_EXEC_SELINUX
|
|
+
|
|
/* A mutex used to synchronize access to *exec* variables in this file. */
|
|
static pthread_mutex_t open_temp_exec_file_mutex = PTHREAD_MUTEX_INITIALIZER;
|
|
|
|
@@ -483,6 +485,27 @@ dlmmap (void *start, size_t length, int
|
|
return dlmmap_locked (start, length, prot, flags, offset);
|
|
}
|
|
|
|
+#else
|
|
+
|
|
+static void *
|
|
+dlmmap (void *start, size_t length, int prot,
|
|
+ int flags, int fd, off_t offset)
|
|
+{
|
|
+
|
|
+ assert (start == NULL && length % malloc_getpagesize == 0
|
|
+ && prot == (PROT_READ | PROT_WRITE)
|
|
+ && flags == (MAP_PRIVATE | MAP_ANONYMOUS)
|
|
+ && fd == -1 && offset == 0);
|
|
+
|
|
+#if FFI_CLOSURE_TEST
|
|
+ printf ("mapping in %zi\n", length);
|
|
+#endif
|
|
+
|
|
+ return mmap (start, length, prot | PROT_EXEC, flags, fd, offset);
|
|
+}
|
|
+
|
|
+#endif
|
|
+
|
|
/* Release memory at the given address, as well as the corresponding
|
|
executable page if it's separate. */
|
|
static int
|
|
Index: libffi/ChangeLog.libffi
|
|
===================================================================
|
|
--- libffi.orig/ChangeLog.libffi
|
|
+++ libffi/ChangeLog.libffi
|
|
@@ -1,3 +1,11 @@
|
|
+2009-10-27 Abdulaziz Ghuloum <aghuloum@gmail.com>
|
|
+
|
|
+ * configure.ac (FFI_MMAP_EXEC_WRIT): Define for snow
|
|
+ leopard (i?86-apple-darwin10*).
|
|
+ * configure: Rebuilt.
|
|
+ * fficonfig.h.in: Rebuilt.
|
|
+ * src/closures.c (dlmmap): Define version for snow leopard.
|
|
+
|
|
2009-10-05 Bradley Smith <brad@brad-smith.co.uk>
|
|
|
|
* configure.ac, Makefile.am, src/avr32/ffi.c,
|
|
Index: libffi/configure.ac
|
|
===================================================================
|
|
--- libffi.orig/configure.ac
|
|
+++ libffi/configure.ac
|
|
@@ -163,6 +163,7 @@ case "$host" in
|
|
esac
|
|
|
|
AC_SUBST(AM_RUNTESTFLAGS)
|
|
+AC_SUBST(AM_LTLDFLAGS)
|
|
|
|
if test $TARGETDIR = unknown; then
|
|
AC_MSG_ERROR(["libffi has not been ported to $host."])
|
|
@@ -274,6 +275,14 @@ if test x$TARGET = xX86 || test x$TARGET
|
|
fi
|
|
fi
|
|
|
|
+case "$target" in
|
|
+ *-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
|
|
+
|
|
AC_CACHE_CHECK([whether .eh_frame section should be read-only],
|
|
libffi_cv_ro_eh_frame, [
|
|
libffi_cv_ro_eh_frame=no
|
|
Index: libffi/configure
|
|
===================================================================
|
|
--- libffi.orig/configure
|
|
+++ libffi/configure
|
|
@@ -847,6 +847,7 @@ SPARC_FALSE
|
|
SPARC_TRUE
|
|
MIPS_FALSE
|
|
MIPS_TRUE
|
|
+AM_LTLDFLAGS
|
|
AM_RUNTESTFLAGS
|
|
TESTSUBDIR_FALSE
|
|
TESTSUBDIR_TRUE
|
|
@@ -4772,13 +4773,13 @@ if test "${lt_cv_nm_interface+set}" = se
|
|
else
|
|
lt_cv_nm_interface="BSD nm"
|
|
echo "int some_variable = 0;" > conftest.$ac_ext
|
|
- (eval echo "\"\$as_me:4775: $ac_compile\"" >&5)
|
|
+ (eval echo "\"\$as_me:4776: $ac_compile\"" >&5)
|
|
(eval "$ac_compile" 2>conftest.err)
|
|
cat conftest.err >&5
|
|
- (eval echo "\"\$as_me:4778: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
|
|
+ (eval echo "\"\$as_me:4779: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
|
|
(eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
|
|
cat conftest.err >&5
|
|
- (eval echo "\"\$as_me:4781: output\"" >&5)
|
|
+ (eval echo "\"\$as_me:4782: output\"" >&5)
|
|
cat conftest.out >&5
|
|
if $GREP 'External.*some_variable' conftest.out > /dev/null; then
|
|
lt_cv_nm_interface="MS dumpbin"
|
|
@@ -5984,7 +5985,7 @@ ia64-*-hpux*)
|
|
;;
|
|
*-*-irix6*)
|
|
# Find out which ABI we are using.
|
|
- echo '#line 5987 "configure"' > conftest.$ac_ext
|
|
+ echo '#line 5988 "configure"' > conftest.$ac_ext
|
|
if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
|
(eval $ac_compile) 2>&5
|
|
ac_status=$?
|
|
@@ -7837,11 +7838,11 @@ else
|
|
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
|
|
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
|
|
-e 's:$: $lt_compiler_flag:'`
|
|
- (eval echo "\"\$as_me:7840: $lt_compile\"" >&5)
|
|
+ (eval echo "\"\$as_me:7841: $lt_compile\"" >&5)
|
|
(eval "$lt_compile" 2>conftest.err)
|
|
ac_status=$?
|
|
cat conftest.err >&5
|
|
- echo "$as_me:7844: \$? = $ac_status" >&5
|
|
+ echo "$as_me:7845: \$? = $ac_status" >&5
|
|
if (exit $ac_status) && test -s "$ac_outfile"; then
|
|
# The compiler can only warn and ignore the option if not recognized
|
|
# So say no if there are warnings other than the usual output.
|
|
@@ -8176,11 +8177,11 @@ else
|
|
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
|
|
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
|
|
-e 's:$: $lt_compiler_flag:'`
|
|
- (eval echo "\"\$as_me:8179: $lt_compile\"" >&5)
|
|
+ (eval echo "\"\$as_me:8180: $lt_compile\"" >&5)
|
|
(eval "$lt_compile" 2>conftest.err)
|
|
ac_status=$?
|
|
cat conftest.err >&5
|
|
- echo "$as_me:8183: \$? = $ac_status" >&5
|
|
+ echo "$as_me:8184: \$? = $ac_status" >&5
|
|
if (exit $ac_status) && test -s "$ac_outfile"; then
|
|
# The compiler can only warn and ignore the option if not recognized
|
|
# So say no if there are warnings other than the usual output.
|
|
@@ -8281,11 +8282,11 @@ else
|
|
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
|
|
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
|
|
-e 's:$: $lt_compiler_flag:'`
|
|
- (eval echo "\"\$as_me:8284: $lt_compile\"" >&5)
|
|
+ (eval echo "\"\$as_me:8285: $lt_compile\"" >&5)
|
|
(eval "$lt_compile" 2>out/conftest.err)
|
|
ac_status=$?
|
|
cat out/conftest.err >&5
|
|
- echo "$as_me:8288: \$? = $ac_status" >&5
|
|
+ echo "$as_me:8289: \$? = $ac_status" >&5
|
|
if (exit $ac_status) && test -s out/conftest2.$ac_objext
|
|
then
|
|
# The compiler can only warn and ignore the option if not recognized
|
|
@@ -8336,11 +8337,11 @@ else
|
|
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
|
|
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
|
|
-e 's:$: $lt_compiler_flag:'`
|
|
- (eval echo "\"\$as_me:8339: $lt_compile\"" >&5)
|
|
+ (eval echo "\"\$as_me:8340: $lt_compile\"" >&5)
|
|
(eval "$lt_compile" 2>out/conftest.err)
|
|
ac_status=$?
|
|
cat out/conftest.err >&5
|
|
- echo "$as_me:8343: \$? = $ac_status" >&5
|
|
+ echo "$as_me:8344: \$? = $ac_status" >&5
|
|
if (exit $ac_status) && test -s out/conftest2.$ac_objext
|
|
then
|
|
# The compiler can only warn and ignore the option if not recognized
|
|
@@ -11139,7 +11140,7 @@ else
|
|
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
|
|
lt_status=$lt_dlunknown
|
|
cat > conftest.$ac_ext <<_LT_EOF
|
|
-#line 11142 "configure"
|
|
+#line 11143 "configure"
|
|
#include "confdefs.h"
|
|
|
|
#if HAVE_DLFCN_H
|
|
@@ -11235,7 +11236,7 @@ else
|
|
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
|
|
lt_status=$lt_dlunknown
|
|
cat > conftest.$ac_ext <<_LT_EOF
|
|
-#line 11238 "configure"
|
|
+#line 11239 "configure"
|
|
#include "confdefs.h"
|
|
|
|
#if HAVE_DLFCN_H
|
|
@@ -12184,6 +12185,8 @@ case "$host" in
|
|
;;
|
|
i?86-win32* | i?86-*-cygwin* | i?86-*-mingw*)
|
|
TARGET=X86_WIN32; TARGETDIR=x86
|
|
+ # All mingw/cygwin/win32 builds require this for sharedlib
|
|
+ AM_LTLDFLAGS="-no-undefined"
|
|
;;
|
|
i?86-*-darwin*)
|
|
TARGET=X86_DARWIN; TARGETDIR=x86
|
|
@@ -12263,6 +12266,7 @@ esac
|
|
|
|
|
|
|
|
+
|
|
if test $TARGETDIR = unknown; then
|
|
{ { $as_echo "$as_me:$LINENO: error: \"libffi has not been ported to $host.\"" >&5
|
|
$as_echo "$as_me: error: \"libffi has not been ported to $host.\"" >&2;}
|
|
@@ -14498,7 +14502,7 @@ _ACEOF
|
|
fi
|
|
|
|
case "$target" in
|
|
- i?86-apple-darwin10*)
|
|
+ *-apple-darwin10* | *-*-freebsd* | *-*-openbsd* | *-pc-solaris*)
|
|
|
|
cat >>confdefs.h <<\_ACEOF
|
|
#define FFI_MMAP_EXEC_WRIT 1
|