-/*
+/**
+ * \file
* (C) 2003 Ximian, Inc.
* (C) 2003-2011 Novell, Inc.
* Copyright 2011 Xamarin, Inc (http://www.xamarin.com)
/**
* mono_create_static_rgctx_trampoline:
- * @m: the mono method to create a trampoline for
- * @addr: the address to jump to (where the compiled code for M lives)
+ * \param m the mono method to create a trampoline for
+ * \param addr the address to jump to (where the compiled code for M lives)
*
* Creates a static rgctx trampoline for M which branches to ADDR which should
* point to the compiled code of M.
*
* On PPC addr should be an ftnptr and the return value is an ftnptr too.
*
- * Returns the generated static rgctx trampoline.
+ * \returns the generated static rgctx trampoline.
*/
gpointer
mono_create_static_rgctx_trampoline (MonoMethod *m, gpointer addr)
if (mono_aot_only)
res = mono_aot_get_static_rgctx_trampoline (ctx, addr);
else
- res = mono_arch_get_static_rgctx_trampoline (m, (MonoMethodRuntimeGenericContext *)ctx, addr);
+ res = mono_arch_get_static_rgctx_trampoline (ctx, addr);
mono_domain_lock (domain);
/* Duplicates inserted while we didn't hold the lock are OK */
return code;
}
-#ifdef MONO_ARCH_HAVE_HANDLER_BLOCK_GUARD
-static gpointer
-mono_handler_block_guard_trampoline (mgreg_t *regs, guint8 *code, gpointer *tramp_info, guint8* tramp)
-{
- MONO_REQ_GC_UNSAFE_MODE;
-
- MonoContext ctx;
- MonoException *exc;
- MonoJitTlsData *jit_tls = (MonoJitTlsData *)mono_tls_get_jit_tls ();
- gpointer resume_ip = jit_tls->handler_block_return_address;
-
- memcpy (&ctx, &jit_tls->handler_block_context, sizeof (MonoContext));
- MONO_CONTEXT_SET_IP (&ctx, jit_tls->handler_block_return_address);
-
- jit_tls->handler_block_return_address = NULL;
- jit_tls->handler_block = NULL;
-
- if (!resume_ip) /*this should not happen, but we should avoid crashing */
- exc = mono_get_exception_execution_engine ("Invalid internal state, resuming abort after handler block but no resume ip found");
- else
- exc = mono_thread_resume_interruption (TRUE);
-
- if (exc) {
- mono_handle_exception (&ctx, (MonoObject *)exc);
- mono_restore_context (&ctx);
- }
-
- return resume_ip;
-}
-
-gpointer
-mono_create_handler_block_trampoline (void)
-{
- static gpointer code;
-
- if (code)
- return code;
-
- if (mono_aot_only) {
- gpointer tmp = mono_aot_get_trampoline ("handler_block_trampoline");
- g_assert (tmp);
- mono_memory_barrier ();
- code = tmp;
- return code;
- }
-
- mono_trampolines_lock ();
- if (!code) {
- MonoTrampInfo *info;
- gpointer tmp;
-
- tmp = mono_arch_create_handler_block_trampoline (&info, FALSE);
- mono_tramp_info_register (info, NULL);
- mono_memory_barrier ();
- code = tmp;
- }
- mono_trampolines_unlock ();
-
- return code;
-}
-#endif
-
/*
* mono_get_trampoline_func:
*
#endif
case MONO_TRAMPOLINE_VCALL:
return mono_vcall_trampoline;
-#ifdef MONO_ARCH_HAVE_HANDLER_BLOCK_GUARD
- case MONO_TRAMPOLINE_HANDLER_BLOCK_GUARD:
- return mono_handler_block_guard_trampoline;
-#endif
default:
g_assert_not_reached ();
return NULL;
mono_trampoline_code [MONO_TRAMPOLINE_GENERIC_VIRTUAL_REMOTING] = create_trampoline_code (MONO_TRAMPOLINE_GENERIC_VIRTUAL_REMOTING);
#endif
mono_trampoline_code [MONO_TRAMPOLINE_VCALL] = create_trampoline_code (MONO_TRAMPOLINE_VCALL);
-#ifdef MONO_ARCH_HAVE_HANDLER_BLOCK_GUARD
- mono_trampoline_code [MONO_TRAMPOLINE_HANDLER_BLOCK_GUARD] = create_trampoline_code (MONO_TRAMPOLINE_HANDLER_BLOCK_GUARD);
- mono_create_handler_block_trampoline ();
-#endif
mono_counters_register ("Calls to trampolines", MONO_COUNTER_JIT | MONO_COUNTER_INT, &trampoline_calls);
mono_counters_register ("JIT trampolines", MONO_COUNTER_JIT | MONO_COUNTER_INT, &jit_trampolines);
"delegate",
"restore_stack_prot",
"generic_virtual_remoting",
- "vcall",
- "handler_block_guard"
+ "vcall"
};
/*