X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Fmini%2Fmini-mips.c;h=5d6ebc7b6bc126975df54bdc38c29d247d5ca8d0;hb=f2347361184c1be48e4a59475b0f0aad8dc1855a;hp=6c9653f18a93fef5eef8fec1f130fa6d3a97ab72;hpb=529a16fc140bb682f490285aee8b722fa9580cb8;p=mono.git diff --git a/mono/mini/mini-mips.c b/mono/mini/mini-mips.c index 6c9653f18a9..5d6ebc7b6bc 100644 --- a/mono/mini/mini-mips.c +++ b/mono/mini/mini-mips.c @@ -221,8 +221,7 @@ mips_emit_exc_by_name(guint8 *code, const char *name) gpointer addr; MonoClass *exc_class; - exc_class = mono_class_from_name (mono_defaults.corlib, "System", name); - g_assert (exc_class); + exc_class = mono_class_load_from_name (mono_defaults.corlib, "System", name); mips_load_const (code, mips_a0, exc_class->type_token); addr = mono_get_throw_corlib_exception (); @@ -4633,7 +4632,7 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb) mips_bne (code, mips_at, mips_zero, 0); mips_nop (code); - EMIT_SYSTEM_EXCEPTION_NAME("ArithmeticException"); + EMIT_SYSTEM_EXCEPTION_NAME("OverflowException"); mips_patch (branch_patch, (guint32)code); mips_fmovd (code, ins->dreg, ins->sreg1); break; @@ -4672,10 +4671,11 @@ mono_arch_register_lowlevel_calls (void) } void -mono_arch_patch_code (MonoCompile *cfg, MonoMethod *method, MonoDomain *domain, guint8 *code, MonoJumpInfo *ji, gboolean run_cctors) +mono_arch_patch_code (MonoCompile *cfg, MonoMethod *method, MonoDomain *domain, guint8 *code, MonoJumpInfo *ji, gboolean run_cctors, MonoError *error) { MonoJumpInfo *patch_info; - MonoError error; + + mono_error_init (error); for (patch_info = ji; patch_info; patch_info = patch_info->next) { unsigned char *ip = patch_info->ip.i + code; @@ -4709,8 +4709,9 @@ mono_arch_patch_code (MonoCompile *cfg, MonoMethod *method, MonoDomain *domain, case MONO_PATCH_INFO_R4: case MONO_PATCH_INFO_R8: /* from OP_AOTCONST : lui + addiu */ - target = mono_resolve_patch_target_checked (method, domain, code, patch_info, run_cctors, &error); - mono_error_raise_exception (&error); /* FIXME: don't raise here */ + target = mono_resolve_patch_target (method, domain, code, patch_info, run_cctors, error); + return_if_nok (error); + patch_lui_addiu ((guint32 *)(void *)ip, (guint32)target); continue; #if 0 @@ -4723,8 +4724,9 @@ mono_arch_patch_code (MonoCompile *cfg, MonoMethod *method, MonoDomain *domain, /* everything is dealt with at epilog output time */ continue; default: - target = mono_resolve_patch_target_checked (method, domain, code, patch_info, run_cctors, &error); - mono_error_raise_exception (&error); /* FIXME: don't raise here */ + target = mono_resolve_patch_target (method, domain, code, patch_info, run_cctors, error); + return_if_nok (error); + mips_patch ((guint32 *)(void *)ip, (guint32)target); break; }