g_free (jit_tls);*/
if ((mono_runtime_unhandled_exception_policy_get () == MONO_UNHANDLED_POLICY_LEGACY) ||
- (obj->vtable->klass == mono_defaults.threadabortexception_class)) {
+ (obj->vtable->klass == mono_defaults.threadabortexception_class) ||
+ ((obj->vtable->klass) == mono_class_get_appdomain_unloaded_exception_class () &&
+ mono_thread_info_current ()->runtime_thread)) {
mono_thread_exit ();
} else {
mono_invoke_unhandled_exception_hook (obj);
if (mono_class_is_contextbound (method->klass) || !info->compiled_method)
supported = FALSE;
- if (supported)
+ if (supported) {
info->dyn_call_info = mono_arch_dyn_call_prepare (sig);
+ if (debug_options.dyn_runtime_invoke)
+ g_assert (info->dyn_call_info);
+ }
}
#endif
MonoMethodSignature *sig = mono_method_signature (method);
gpointer *args;
static RuntimeInvokeDynamicFunction dyn_runtime_invoke;
- int i, pindex;
- guint8 buf [512];
+ int i, pindex, buf_size;
+ guint8 *buf;
guint8 retval [256];
if (!dyn_runtime_invoke) {
//printf ("M: %s\n", mono_method_full_name (method, TRUE));
- mono_arch_start_dyn_call (info->dyn_call_info, (gpointer**)args, retval, buf, sizeof (buf));
+ buf_size = mono_arch_dyn_call_get_buf_size (info->dyn_call_info);
+ buf = g_alloca (buf_size);
+ g_assert (buf);
+
+ mono_arch_start_dyn_call (info->dyn_call_info, (gpointer**)args, retval, buf);
dyn_runtime_invoke (buf, exc, info->compiled_method);
mono_arch_finish_dyn_call (info->dyn_call_info, buf);