2009-05-15 Zoltan Varga <vargaz@gmail.com>
+ * mini-trampolines.c (mono_magic_trampoline): Handle static rgctx invoke
+ wrappers during full aot mode correctly.
+
+ * aot-runtime.c (mono_aot_get_unbox_trampoline): Handle shared generic
+ methods correctly.
+
* aot-compiler.c (mono_aot_method_hash): Use our internal version of
mono_metadata_type_hash ().
case MONO_WRAPPER_PROXY_ISINST:
case MONO_WRAPPER_ALLOC:
case MONO_WRAPPER_REMOTING_INVOKE:
- case MONO_WRAPPER_STATIC_RGCTX_INVOKE:
case MONO_WRAPPER_UNKNOWN:
break;
+ case MONO_WRAPPER_STATIC_RGCTX_INVOKE:
+ g_assert (!acfg->aot_opts.full_aot);
+ break;
default:
//printf ("Skip (wrapper call): %d -> %s\n", patch_info->type, mono_method_full_name (patch_info->data.method, TRUE));
return FALSE;
char *symbol;
gpointer code;
- if (method->is_inflated) {
+ if (method->is_inflated && !mono_method_is_generic_sharable_impl (method, FALSE)) {
guint32 index = find_extra_method (method, &amodule);
-
g_assert (index != 0xffffff);
symbol = g_strdup_printf ("ut_e_%d", index);
if (!code && mono_method_needs_static_rgctx_invoke (m, FALSE))
m = mono_marshal_get_static_rgctx_invoke (m);
+ if (mono_aot_only && m->wrapper_type == MONO_WRAPPER_STATIC_RGCTX_INVOKE) {
+ /*
+ * These wrappers can be created in mono_class_get_vtable_entry () for
+ * example.
+ */
+ need_rgctx_tramp = TRUE;
+ m = mono_marshal_method_from_wrapper (m);
+ }
+
addr = mono_compile_method (m);
g_assert (addr);