| diff -ru --new-file a/configure b/configure |
| |
| |
| @@ -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 |
| |
| |
| @@ -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 |
| |
| |
| @@ -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 |
| |
| |
| @@ -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 |
| |
| |
| @@ -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 */ |
| |
| |
| |
| @@ -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 |
| |