summaryrefslogtreecommitdiff
path: root/patches/libffi/libffi-3.2.1.midipix.patch
blob: 341f8307a613c5c267e77b7341ff5888bcccef56 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
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 */