X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Fmini%2Fmini.c;h=51ca3d5c79cc415a49c4f92c14bccba3c6be9bec;hb=c866c3eefb79ea86be468e4f95c7012fa3d2db4f;hp=fff5ece8d5512e319ffe7c3a70bbaf25e5ba2b24;hpb=1aa82aca7fdd1cc1f9da78625ef21dffa2699498;p=mono.git diff --git a/mono/mini/mini.c b/mono/mini/mini.c index fff5ece8d55..51ca3d5c79c 100644 --- a/mono/mini/mini.c +++ b/mono/mini/mini.c @@ -1052,7 +1052,7 @@ mini_method_verify (MonoCompile *cfg, MonoMethod *method, gboolean fail_compile) else if (info->exception_type == MONO_EXCEPTION_FIELD_ACCESS) mono_error_set_generic_error (&cfg->error, "System", "FieldAccessException", "%s", msg); else if (info->exception_type == MONO_EXCEPTION_UNVERIFIABLE_IL) - mono_error_set_generic_error (&cfg->error, "System.Security", "VerificationException", msg); + mono_error_set_generic_error (&cfg->error, "System.Security", "VerificationException", "%s", msg); if (!mono_error_ok (&cfg->error)) { mono_cfg_set_exception (cfg, MONO_EXCEPTION_MONO_ERROR); g_free (msg); @@ -1983,6 +1983,18 @@ mono_create_tls_get (MonoCompile *cfg, MonoTlsKey key) if (!cfg->backend->have_tls_get) return NULL; +#ifdef HAVE_KW_THREAD + /* + * MONO_THREAD_VAR_OFFSET definitions don't work when loading mono as a + * dynamic library. This means that we need to be conservative and don't + * aot code that contains these tls chunks. + * + * FIXME Remove HAVE_KW_THREAD altogether and use only pthread since it + * simplifies the code alot. + */ + if (!cfg->full_aot) + cfg->disable_aot = TRUE; +#endif /* * TLS offsets might be different at AOT time, so load them from a GOT slot and * use a different opcode. @@ -3124,8 +3136,8 @@ init_backend (MonoBackend *backend) #ifdef MONO_ARCH_HAVE_OBJC_GET_SELECTOR backend->have_objc_get_selector = 1; #endif -#ifdef MONO_ARCH_HAVE_GENERALIZED_IMT_THUNK - backend->have_generalized_imt_thunk = 1; +#ifdef MONO_ARCH_HAVE_GENERALIZED_IMT_TRAMPOLINE + backend->have_generalized_imt_trampoline = 1; #endif #ifdef MONO_ARCH_GSHARED_SUPPORTED backend->gshared_supported = 1; @@ -3163,6 +3175,9 @@ init_backend (MonoBackend *backend) #ifdef MONO_ARCH_DYN_CALL_PARAM_AREA backend->dyn_call_param_area = MONO_ARCH_DYN_CALL_PARAM_AREA; #endif +#ifdef MONO_ARCH_NO_DIV_WITH_MUL + backend->disable_div_with_mul = 1; +#endif } /* @@ -4041,7 +4056,7 @@ void mono_cfg_set_exception_invalid_program (MonoCompile *cfg, char *msg) { mono_cfg_set_exception (cfg, MONO_EXCEPTION_MONO_ERROR); - mono_error_set_generic_error (&cfg->error, "System", "InvalidProgramException", msg); + mono_error_set_generic_error (&cfg->error, "System", "InvalidProgramException", "%s", msg); } #endif /* DISABLE_JIT */ @@ -4385,9 +4400,8 @@ mono_jit_compile_method_inner (MonoMethod *method, MonoDomain *target_domain, in vtable = mono_class_vtable (target_domain, method->klass); if (!vtable) { - ex = mono_class_get_exception_for_failure (method->klass); - g_assert (ex); - mono_error_set_exception_instance (error, ex); + g_assert (mono_class_has_failure (method->klass)); + mono_error_set_for_class_failure (error, method->klass); return NULL; }