diff options
Diffstat (limited to 'libjava/java')
-rw-r--r-- | libjava/java/lang/reflect/natMethod.cc | 7 | ||||
-rw-r--r-- | libjava/java/lang/reflect/natVMProxy.cc | 6 |
2 files changed, 11 insertions, 2 deletions
diff --git a/libjava/java/lang/reflect/natMethod.cc b/libjava/java/lang/reflect/natMethod.cc index d95c92f..8ac87fc 100644 --- a/libjava/java/lang/reflect/natMethod.cc +++ b/libjava/java/lang/reflect/natMethod.cc @@ -436,7 +436,12 @@ _Jv_CallAnyMethodA (jobject obj, p += size_per_arg; } - if (ffi_prep_cif (&cif, FFI_DEFAULT_ABI, param_count, + ffi_abi cabi = FFI_DEFAULT_ABI; +#if defined (X86_WIN32) && !defined (__CYGWIN__) + if (needs_this) + cabi = FFI_THISCALL; +#endif + if (ffi_prep_cif (&cif, cabi, param_count, rtype, argtypes) != FFI_OK) throw new java::lang::VirtualMachineError(JvNewStringLatin1("internal error: ffi_prep_cif failed")); diff --git a/libjava/java/lang/reflect/natVMProxy.cc b/libjava/java/lang/reflect/natVMProxy.cc index 4c3fd74..e46263d 100644 --- a/libjava/java/lang/reflect/natVMProxy.cc +++ b/libjava/java/lang/reflect/natVMProxy.cc @@ -79,7 +79,11 @@ typedef void (*closure_fun) (ffi_cif*, void*, void**, void*); static void *ncode (int method_index, jclass klass, _Jv_Method *self, closure_fun fun); static void run_proxy (ffi_cif*, void*, void**, void*); -typedef jobject invoke_t (jobject, Proxy *, Method *, JArray< jobject > *); +typedef jobject +#if defined (X86_WIN32) && !defined (__CYGWIN__) + __attribute__ ((thiscall)) +#endif + invoke_t (jobject, Proxy *, Method *, JArray< jobject > *); // True if pc points to a proxy frame. |