X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Fmini%2Fmini-trampolines.c;h=c464a0033a77c727829ba44f5e6acea3bba0e84c;hb=dfac8517b91687f11479801fa0a2191585b1ad4c;hp=bcb603603f38dc0215822fac41186b189cffd1dd;hpb=82041260ed737b80e1ba8adef3f9a031c069303a;p=mono.git diff --git a/mono/mini/mini-trampolines.c b/mono/mini/mini-trampolines.c index bcb603603f3..c464a0033a7 100644 --- a/mono/mini/mini-trampolines.c +++ b/mono/mini/mini-trampolines.c @@ -2,6 +2,7 @@ * (C) 2003 Ximian, Inc. * (C) 2003-2011 Novell, Inc. * Copyright 2011 Xamarin, Inc (http://www.xamarin.com) + * Licensed under the MIT license. See LICENSE file in the project root for full license information. */ #include #include @@ -1016,14 +1017,6 @@ mono_aot_plt_trampoline (mgreg_t *regs, guint8 *code, guint8 *aot_module, mono_error_set_pending_exception (&error); return NULL; } - if (mono_loader_get_last_error ()) { - MonoError error; - - mono_error_init (&error); - mono_error_set_from_loader_error (&error); - mono_error_set_pending_exception (&error); - return NULL; - } // FIXME: Error handling (how ?) g_assert (res); } @@ -1065,36 +1058,6 @@ mono_rgctx_lazy_fetch_trampoline (mgreg_t *regs, guint8 *code, gpointer data, gu return res; } -/* - * Precompute data to speed up mono_delegate_trampoline (). - * METHOD might be NULL. - */ -static MonoDelegateTrampInfo* -create_delegate_trampoline_data (MonoDomain *domain, MonoClass *klass, MonoMethod *method) -{ - MonoDelegateTrampInfo *tramp_data; - MonoMethod *invoke; - MonoError err; - - // Precompute the delegate invoke impl and pass it to the delegate trampoline - invoke = mono_get_delegate_invoke (klass); - g_assert (invoke); - - tramp_data = (MonoDelegateTrampInfo *)mono_domain_alloc0 (domain, sizeof (MonoDelegateTrampInfo)); - tramp_data->invoke = invoke; - tramp_data->invoke_sig = mono_method_signature (invoke); - tramp_data->impl_this = mono_arch_get_delegate_invoke_impl (mono_method_signature (invoke), TRUE); - tramp_data->impl_nothis = mono_arch_get_delegate_invoke_impl (mono_method_signature (invoke), FALSE); - tramp_data->method = method; - if (method) { - mono_error_init (&err); - tramp_data->sig = mono_method_signature_checked (method, &err); - tramp_data->need_rgctx_tramp = mono_method_needs_static_rgctx_invoke (method, FALSE); - } - - return tramp_data; -} - /** * mono_delegate_trampoline: * @@ -1584,11 +1547,13 @@ mono_create_jit_trampoline_from_token (MonoImage *image, guint32 token) /* * mono_create_delegate_trampoline_info: * - * Create a delegate trampoline for the KLASS+METHOD pair. + * Create a trampoline info structure for the KLASS+METHOD pair. */ MonoDelegateTrampInfo* mono_create_delegate_trampoline_info (MonoDomain *domain, MonoClass *klass, MonoMethod *method) { + MonoMethod *invoke; + MonoError error; MonoDelegateTrampInfo *tramp_info; MonoClassMethodPair pair, *dpair; guint32 code_size = 0; @@ -1601,8 +1566,20 @@ mono_create_delegate_trampoline_info (MonoDomain *domain, MonoClass *klass, Mono if (tramp_info) return tramp_info; - tramp_info = create_delegate_trampoline_data (domain, klass, method); + invoke = mono_get_delegate_invoke (klass); + g_assert (invoke); + tramp_info = (MonoDelegateTrampInfo *)mono_domain_alloc0 (domain, sizeof (MonoDelegateTrampInfo)); + tramp_info->invoke = invoke; + tramp_info->invoke_sig = mono_method_signature (invoke); + tramp_info->impl_this = mono_arch_get_delegate_invoke_impl (mono_method_signature (invoke), TRUE); + tramp_info->impl_nothis = mono_arch_get_delegate_invoke_impl (mono_method_signature (invoke), FALSE); + tramp_info->method = method; + if (method) { + mono_error_init (&error); + tramp_info->sig = mono_method_signature_checked (method, &error); + tramp_info->need_rgctx_tramp = mono_method_needs_static_rgctx_invoke (method, FALSE); + } tramp_info->invoke_impl = mono_create_specific_trampoline (tramp_info, MONO_TRAMPOLINE_DELEGATE, domain, &code_size); g_assert (code_size);