Index: alibffi/src/closures.c =================================================================== --- alibffi.orig/src/closures.c +++ alibffi/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: alibffi/ChangeLog.libffi =================================================================== --- alibffi.orig/ChangeLog.libffi +++ alibffi/ChangeLog.libffi @@ -1,3 +1,11 @@ +2009-10-27 Abdulaziz Ghuloum + + * 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 * configure.ac, Makefile.am, src/avr32/ffi.c, Index: alibffi/configure.ac =================================================================== --- alibffi.orig/configure.ac +++ alibffi/configure.ac @@ -274,6 +274,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: alibffi/configure =================================================================== --- alibffi.orig/configure +++ alibffi/configure @@ -14498,7 +14498,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