Index: Makefile.am =================================================================== --- Makefile.am.orig 2014-11-08 12:47:24.000000000 +0000 +++ Makefile.am 2018-08-01 23:54:10.532235224 +0000 @@ -126,7 +126,7 @@ nodist_libffi_la_SOURCES += src/bfin/ffi.c src/bfin/sysv.S endif if X86 -nodist_libffi_la_SOURCES += src/x86/ffi.c src/x86/sysv.S src/x86/win32.S +nodist_libffi_la_SOURCES += src/x86/ffi.c src/x86/sysv.S endif if X86_FREEBSD nodist_libffi_la_SOURCES += src/x86/ffi.c src/x86/freebsd.S src/x86/win32.S Index: src/x86/ffi.c =================================================================== --- src/x86/ffi.c.orig 2014-11-08 12:47:24.000000000 +0000 +++ src/x86/ffi.c 2018-08-01 23:59:43.730599037 +0000 @@ -340,9 +340,11 @@ ffi_call_win64(unsigned int (*)(char *, extended_cif *), extended_cif *, unsigned, unsigned, unsigned *, void (*fn)(void)); #else +#ifdef X86_WIN32 extern void ffi_call_win32(unsigned int (*)(char *, extended_cif *), extended_cif *, unsigned, unsigned, unsigned, unsigned *, void (*fn)(void)); +#endif extern void ffi_call_SYSV(void (*)(char *, extended_cif *), extended_cif *, unsigned, unsigned, unsigned *, void (*fn)(void)); #endif @@ -393,11 +395,13 @@ case FFI_SYSV: case FFI_MS_CDECL: #endif +#ifdef X86_WIN32 case FFI_STDCALL: case FFI_THISCALL: case FFI_FASTCALL: case FFI_PASCAL: case FFI_REGISTER: +#endif ffi_call_win32(ffi_prep_args, &ecif, cif->abi, cif->bytes, cif->flags, ecif.rvalue, fn); break; @@ -428,10 +432,12 @@ __attribute__ ((regparm(1))); #endif #ifndef X86_WIN64 +#ifdef X86_WIN32 void FFI_HIDDEN ffi_closure_STDCALL (ffi_closure *); void FFI_HIDDEN ffi_closure_THISCALL (ffi_closure *); void FFI_HIDDEN ffi_closure_FASTCALL (ffi_closure *); void FFI_HIDDEN ffi_closure_REGISTER (ffi_closure *); +#endif #else void FFI_HIDDEN ffi_closure_win64 (ffi_closure *); #endif @@ -741,6 +747,7 @@ &ffi_closure_SYSV, (void*)codeloc); } +#ifdef X86_WIN32 else if (cif->abi == FFI_REGISTER) { FFI_INIT_TRAMPOLINE_WIN32 (&closure->tramp[0], @@ -765,7 +772,6 @@ &ffi_closure_STDCALL, (void*)codeloc); } -#ifdef X86_WIN32 else if (cif->abi == FFI_MS_CDECL) { FFI_INIT_TRAMPOLINE (&closure->tramp[0], @@ -910,11 +916,13 @@ case FFI_MS_CDECL: #endif #ifndef X86_WIN64 +#ifdef X86_WIN32 case FFI_STDCALL: case FFI_THISCALL: case FFI_FASTCALL: case FFI_PASCAL: case FFI_REGISTER: +#endif ffi_call_win32(ffi_prep_args_raw, &ecif, cif->abi, cif->bytes, cif->flags, ecif.rvalue, fn); break;