Message ID | CAEwic4ZXCoaFot9vGOMg5Oi3ONc3Pi5vc5KjByeWP6=xkgAtTw@mail.gmail.com |
---|---|
State | New |
Headers | show |
On 01/29/2012 02:15 PM, Kai Tietz wrote: > 2012-01-29 Kai Tietz <ktietz@redhat.com> > > PR target/51500 > * interpret.cc (_Jv_init_cif): Handle thiscall > convention for 32-bit Windows. > * java/lang/reflect/natMethod.cc (_Jv_CallAnyMethodA): > Likewise. > * java/lang/reflect/natVMProxy.cc (ncode): Force SYSV > closure for 32-bit Windows. > (invoke_t): Add thiscall-attribute for 32-bit Windows. > > Patch tested for i686-w64-mingw32, i686-pc-cygwin, and > x86_64-unknown-linux-gnu. Ok for apply? Is it upstream? OK if so. Andrew.
2012/1/30 Andrew Haley <aph@redhat.com>: > On 01/29/2012 02:15 PM, Kai Tietz wrote: >> 2012-01-29 Kai Tietz <ktietz@redhat.com> >> >> PR target/51500 >> * interpret.cc (_Jv_init_cif): Handle thiscall >> convention for 32-bit Windows. >> * java/lang/reflect/natMethod.cc (_Jv_CallAnyMethodA): >> Likewise. >> * java/lang/reflect/natVMProxy.cc (ncode): Force SYSV >> closure for 32-bit Windows. >> (invoke_t): Add thiscall-attribute for 32-bit Windows. >> >> Patch tested for i686-w64-mingw32, i686-pc-cygwin, and >> x86_64-unknown-linux-gnu. Ok for apply? > > Is it upstream? OK if so. > > Andrew. Andrew, I sent update-patch to ML for libffi to support closure-code for thiscall. So the hunk in patch for java/lang/reflect/natVMProxy.cc (ncode): Force SYSV closure for 32-bit Windows. Isn't necessary, if the fix in libffi gets applied. Ok to commit patch without that hunk? The standard-thiscall call feature is already in libffi. Regards, Kai
On 02/01/2012 09:47 AM, Kai Tietz wrote: > I sent update-patch to ML for libffi to support closure-code for > thiscall. So the hunk in patch for java/lang/reflect/natVMProxy.cc > (ncode): Force SYSV closure for 32-bit Windows. Isn't necessary, if > the fix in libffi gets applied. > > Ok to commit patch without that hunk? The standard-thiscall call > feature is already in libffi. Yes. A goal is to minimize divergence from upstream libffi. Several of us have done a lot of work to make this happen. Andrew.
Index: gcc/libjava/interpret.cc =================================================================== --- gcc.orig/libjava/interpret.cc +++ gcc/libjava/interpret.cc @@ -1303,7 +1303,12 @@ _Jv_init_cif (_Jv_Utf8Const* signature, if (ptr != (unsigned char*)signature->chars() + signature->len()) throw_internal_error ("did not find end of signature"); - if (ffi_prep_cif (cif, FFI_DEFAULT_ABI, + ffi_abi cabi = FFI_DEFAULT_ABI; +#if defined (X86_WIN32) && !defined (__CYGWIN__) + if (!staticp) + cabi = FFI_THISCALL; +#endif + if (ffi_prep_cif (cif, cabi, arg_count, rtype, arg_types) != FFI_OK) throw_internal_error ("ffi_prep_cif failed"); Index: gcc/libjava/java/lang/reflect/natMethod.cc =================================================================== --- gcc.orig/libjava/java/lang/reflect/natMethod.cc +++ gcc/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")); Index: gcc/libjava/java/lang/reflect/natVMProxy.cc =================================================================== --- gcc.orig/libjava/java/lang/reflect/natVMProxy.cc +++ gcc/libjava/java/lang/reflect/natVMProxy.cc @@ -79,7 +79,11 @@ typedef void (*closure_fun) (ffi_cif*, v 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.