Blob Blame History Raw
diff -ru --new-file a/configure b/configure
--- a/configure	2014-11-12 06:59:57.000000000 -0500
+++ b/configure	2016-01-25 18:26:47.000000000 -0500
@@ -17133,7 +17133,7 @@
   i?86-*-freebsd* | i?86-*-openbsd*)
 	TARGET=X86_FREEBSD; TARGETDIR=x86
 	;;
-  i?86-win32* | i?86-*-cygwin* | i?86-*-mingw* | i?86-*-os2* | i?86-*-interix*)
+  i?86-win32* | i?86-*-cygwin* | i?86-*-mingw* | i?86-*-os2* | i?86-*-interix* | i?86-*-midipix*)
 	TARGET=X86_WIN32; TARGETDIR=x86
 	# All mingw/cygwin/win32 builds require -no-undefined for sharedlib.
 	# We must also check with_cross_host to decide if this is a native
@@ -17161,7 +17161,7 @@
 	TARGET=X86_DARWIN; TARGETDIR=x86
 	;;
 
-  x86_64-*-cygwin* | x86_64-*-mingw*)
+  x86_64-*-cygwin* | x86_64-*-mingw* | x86_64-*-midipix*)
 	TARGET=X86_WIN64; TARGETDIR=x86
 	# All mingw/cygwin/win32 builds require -no-undefined for sharedlib.
 	# We must also check with_cross_host to decide if this is a native
diff -ru --new-file a/src/closures.c b/src/closures.c
--- a/src/closures.c	2014-11-08 07:47:24.000000000 -0500
+++ b/src/closures.c	2016-01-25 17:57:43.000000000 -0500
@@ -26,6 +26,25 @@
    DEALINGS IN THE SOFTWARE.
    ----------------------------------------------------------------------- */
 
+#ifdef __midipix__
+
+#include <stdlib.h>
+
+void * ffi_closure_alloc (size_t size, void ** code)
+{
+	if (code)
+		return (*code = malloc(size));
+	else
+		return 0;
+}
+
+void ffi_closure_free (void * addr)
+{
+	free(addr);
+}
+
+#else
+
 #if defined __linux__ && !defined _GNU_SOURCE
 #define _GNU_SOURCE 1
 #endif
@@ -686,3 +705,4 @@
 
 # endif /* ! FFI_MMAP_EXEC_WRIT */
 #endif /* FFI_CLOSURES */
+#endif
diff -ru --new-file a/src/x86/ffi.c b/src/x86/ffi.c
--- a/src/x86/ffi.c	2014-11-08 07:47:24.000000000 -0500
+++ b/src/x86/ffi.c	2016-01-25 17:52:14.000000000 -0500
@@ -31,8 +31,12 @@
 #if !defined(__x86_64__) || defined(_WIN64) || defined(__CYGWIN__)
 
 #ifdef _WIN64
+#ifdef __midipix__
+/* not needed */
+#else
 #include <windows.h>
 #endif
+#endif
 
 #include <ffi.h>
 #include <ffi_common.h>
diff -ru --new-file a/src/x86/win32.S b/src/x86/win32.S
--- a/src/x86/win32.S	2014-11-11 09:41:37.000000000 -0500
+++ b/src/x86/win32.S	2016-01-25 18:36:49.000000000 -0500
@@ -1344,6 +1344,14 @@
         .align 4
 .LEFDE5:
 
+#ifdef __midipix__
+	.section .got$ffi_call_win32,"r"
+	.global __imp_ffi_call_win32
+__imp_ffi_call_win32:
+	.long	ffi_call_win32
+	.linkonce discard
+#endif
+
 #endif /* !_MSC_VER */
 
 #if defined __ELF__ && defined __linux__
diff -ru --new-file a/src/x86/win64.S b/src/x86/win64.S
--- a/src/x86/win64.S	2014-11-08 07:47:24.000000000 -0500
+++ b/src/x86/win64.S	2016-01-25 17:47:17.000000000 -0500
@@ -516,5 +516,15 @@
 	pop	%rbp
 	retq
 	.seh_endproc
+
+
+#ifdef __midipix__
+	.section .got$ffi_call_win64,"r"
+	.global __imp_ffi_call_win64
+__imp_ffi_call_win64:
+	.quad	ffi_call_win64
+	.linkonce discard
+#endif
+
 #endif /* !_MSC_VER */
 
--- libffi-3.2.1/src/x86/win32.S.orig2	2016-05-31 09:21:19.120895425 +0000
+++ libffi-3.2.1/src/x86/win32.S	2016-05-31 09:22:19.252894091 +0000
@@ -529,7 +529,9 @@
  
         # This assumes we are using gas.
         .balign 16
+#ifndef __midipix__
 FFI_HIDDEN(ffi_call_win32)
+#endif
         .globl	USCORE_SYMBOL(ffi_call_win32)
 #if defined(X86_WIN32) && !defined(__OS2__)
         .def	_ffi_call_win32;	.scl	2;	.type	32;	.endef
@@ -712,7 +714,9 @@
         ret
 .ffi_call_win32_end:
         .balign 16
+#ifndef __midipix__
 FFI_HIDDEN(ffi_closure_THISCALL)
+#endif
         .globl	USCORE_SYMBOL(ffi_closure_THISCALL)
 #if defined(X86_WIN32) && !defined(__OS2__)
         .def	_ffi_closure_THISCALL;	.scl	2;	.type	32;	.endef
@@ -725,7 +729,9 @@
         jmp	.ffi_closure_STDCALL_internal
 
         .balign 16
+#ifndef __midipix__
 FFI_HIDDEN(ffi_closure_FASTCALL)
+#endif
         .globl	USCORE_SYMBOL(ffi_closure_FASTCALL)
 #if defined(X86_WIN32) && !defined(__OS2__)
         .def	_ffi_closure_FASTCALL;	.scl	2;	.type	32;	.endef
@@ -737,7 +743,9 @@
         push	%edx
         push	%ecx
         jmp	.ffi_closure_STDCALL_internal
+#ifndef __midipix__
 FFI_HIDDEN(ffi_closure_REGISTER)
+#endif
         .globl	USCORE_SYMBOL(ffi_closure_REGISTER)
 #if defined(X86_WIN32) && !defined(__OS2__)
         .def	_ffi_closure_REGISTER;	.scl	2;	.type	32;	.endef
@@ -754,7 +762,9 @@
 .LFE1:
         # This assumes we are using gas.
         .balign 16
+#ifndef __midipix__
 FFI_HIDDEN(ffi_closure_SYSV)
+#endif
 #if defined(X86_WIN32)
         .globl	USCORE_SYMBOL(ffi_closure_SYSV)
 #if defined(X86_WIN32) && !defined(__OS2__)
@@ -898,7 +908,9 @@
 
 #ifdef X86_WIN32
         .balign 16
+#ifndef __midipix__
 FFI_HIDDEN(ffi_closure_raw_THISCALL)
+#endif
         .globl	USCORE_SYMBOL(ffi_closure_raw_THISCALL)
 #if defined(X86_WIN32) && !defined(__OS2__)
         .def	_ffi_closure_raw_THISCALL;	.scl	2;	.type	32;	.endef
@@ -1040,7 +1052,9 @@
 
         # This assumes we are using gas.
         .balign	16
+#ifndef __midipix__
 FFI_HIDDEN(ffi_closure_STDCALL)
+#endif
         .globl	USCORE_SYMBOL(ffi_closure_STDCALL)
 #if defined(X86_WIN32) && !defined(__OS2__)
         .def	_ffi_closure_STDCALL;	.scl	2;	.type	32;	.endef
@@ -1345,10 +1359,17 @@
 .LEFDE5:
 
 #ifdef __midipix__
+#if defined(SYMBOL_UNDERSCORE)
+	.section .got$ffi__call_win32,"r"
+	.global __imp__ffi_call_win32
+__imp__ffi_call_win32:
+	.long	_ffi_call_win32
+#else
 	.section .got$ffi_call_win32,"r"
 	.global __imp_ffi_call_win32
 __imp_ffi_call_win32:
 	.long	ffi_call_win32
+#endif
 	.linkonce discard
 #endif