X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Fmini%2Fmini.c;h=dd40298565b71964ed4a32248f601f04bc875c1c;hb=7c162f952c4d76ee1f0b3d2e0b54d972d95da12a;hp=1ab0ac22f2047393c5087998fd3cb0ae948fc6e6;hpb=e9ef2be4373c0f09c6bc15b75e92cca93fe8feed;p=mono.git diff --git a/mono/mini/mini.c b/mono/mini/mini.c index 1ab0ac22f20..dd40298565b 100755 --- a/mono/mini/mini.c +++ b/mono/mini/mini.c @@ -711,17 +711,22 @@ mono_debug_count (void) { static int count = 0; count ++; + static gboolean inited; + static const char *value; - if (!g_getenv ("COUNT")) + if (!inited) { + value = g_getenv ("COUNT"); + inited = TRUE; + } + + if (!value) return TRUE; - if (count == atoi (g_getenv ("COUNT"))) { + if (count == atoi (value)) break_count (); - } - if (count > atoi (g_getenv ("COUNT"))) { + if (count > atoi (value)) return FALSE; - } return TRUE; } @@ -1241,7 +1246,7 @@ mono_compile_create_var_for_vreg (MonoCompile *cfg, MonoType *type, int opcode, if ((num + 1) >= cfg->varinfo_count) { int orig_count = cfg->varinfo_count; - cfg->varinfo_count = cfg->varinfo_count ? (cfg->varinfo_count * 2) : 64; + cfg->varinfo_count = cfg->varinfo_count ? (cfg->varinfo_count * 2) : 32; cfg->varinfo = (MonoInst **)g_realloc (cfg->varinfo, sizeof (MonoInst*) * cfg->varinfo_count); cfg->vars = (MonoMethodVar *)g_realloc (cfg->vars, sizeof (MonoMethodVar) * cfg->varinfo_count); memset (&cfg->vars [orig_count], 0, (cfg->varinfo_count - orig_count) * sizeof (MonoMethodVar)); @@ -4920,6 +4925,8 @@ mini_method_compile (MonoMethod *method, guint32 opts, MonoDomain *domain, JitFl #ifdef ENABLE_LLVM gboolean llvm = (flags & JIT_FLAG_LLVM) ? 1 : 0; #endif + static gboolean verbose_method_inited; + static const char *verbose_method_name; InterlockedIncrement (&mono_jit_stats.methods_compiled); if (mono_profiler_get_events () & MONO_PROFILE_JIT_COMPILATION) @@ -5070,9 +5077,8 @@ mini_method_compile (MonoMethod *method, guint32 opts, MonoDomain *domain, JitFl { static gboolean inited; - if (!inited) { + if (!inited) inited = TRUE; - } /* * Check for methods which cannot be compiled by LLVM early, to avoid @@ -5148,8 +5154,12 @@ mini_method_compile (MonoMethod *method, guint32 opts, MonoDomain *domain, JitFl cfg->opt |= MONO_OPT_ABCREM; } - if (g_getenv ("MONO_VERBOSE_METHOD")) { - const char *name = g_getenv ("MONO_VERBOSE_METHOD"); + if (!verbose_method_inited) { + verbose_method_name = g_getenv ("MONO_VERBOSE_METHOD"); + verbose_method_inited = TRUE; + } + if (verbose_method_name) { + const char *name = verbose_method_name; if ((strchr (name, '.') > name) || strchr (name, ':')) { MonoMethodDesc *desc; @@ -5160,7 +5170,7 @@ mini_method_compile (MonoMethod *method, guint32 opts, MonoDomain *domain, JitFl } mono_method_desc_free (desc); } else { - if (strcmp (cfg->method->name, g_getenv ("MONO_VERBOSE_METHOD")) == 0) + if (strcmp (cfg->method->name, name) == 0) cfg->verbose_level = 4; } } @@ -6724,14 +6734,12 @@ mono_jit_runtime_invoke (MonoMethod *method, void *obj, void **params, MonoObjec return runtime_invoke (obj, params, exc, info->compiled_method); } -SIG_HANDLER_FUNC (, mono_sigfpe_signal_handler) +MONO_SIG_HANDLER_FUNC (, mono_sigfpe_signal_handler) { MonoException *exc = NULL; MonoJitInfo *ji; -#if !(defined(MONO_ARCH_USE_SIGACTION) || defined(HOST_WIN32)) - void *info = NULL; -#endif - GET_CONTEXT; + void *info = MONO_SIG_HANDLER_GET_INFO (); + MONO_SIG_HANDLER_GET_CONTEXT; ji = mono_jit_info_table_find (mono_domain_get (), mono_arch_ip_from_context (ctx)); @@ -6749,12 +6757,12 @@ SIG_HANDLER_FUNC (, mono_sigfpe_signal_handler) #endif if (!ji) { - if (!mono_do_crash_chaining && mono_chain_signal (SIG_HANDLER_PARAMS)) + if (!mono_do_crash_chaining && mono_chain_signal (MONO_SIG_HANDLER_PARAMS)) return; mono_handle_native_sigsegv (SIGSEGV, ctx); if (mono_do_crash_chaining) { - mono_chain_signal (SIG_HANDLER_PARAMS); + mono_chain_signal (MONO_SIG_HANDLER_PARAMS); return; } } @@ -6762,10 +6770,10 @@ SIG_HANDLER_FUNC (, mono_sigfpe_signal_handler) mono_arch_handle_exception (ctx, exc); } -SIG_HANDLER_FUNC (, mono_sigill_signal_handler) +MONO_SIG_HANDLER_FUNC (, mono_sigill_signal_handler) { MonoException *exc; - GET_CONTEXT; + MONO_SIG_HANDLER_GET_CONTEXT; exc = mono_get_exception_execution_engine ("SIGILL"); @@ -6776,13 +6784,15 @@ SIG_HANDLER_FUNC (, mono_sigill_signal_handler) #define HAVE_SIG_INFO #endif -SIG_HANDLER_FUNC (, mono_sigsegv_signal_handler) +MONO_SIG_HANDLER_FUNC (, mono_sigsegv_signal_handler) { MonoJitInfo *ji; MonoJitTlsData *jit_tls = mono_native_tls_get_value (mono_jit_tls_id); gpointer fault_addr = NULL; - - GET_CONTEXT; +#ifdef HAVE_SIG_INFO + MONO_SIG_HANDLER_INFO_TYPE *info = MONO_SIG_HANDLER_GET_INFO (); +#endif + MONO_SIG_HANDLER_GET_CONTEXT; #if defined(MONO_ARCH_SOFT_DEBUG_SUPPORTED) && defined(HAVE_SIG_INFO) if (mono_arch_is_single_step_event (info, ctx)) { @@ -6804,11 +6814,11 @@ SIG_HANDLER_FUNC (, mono_sigsegv_signal_handler) /* The thread might no be registered with the runtime */ if (!mono_domain_get () || !jit_tls) { - if (!mono_do_crash_chaining && mono_chain_signal (SIG_HANDLER_PARAMS)) + if (!mono_do_crash_chaining && mono_chain_signal (MONO_SIG_HANDLER_PARAMS)) return; mono_handle_native_sigsegv (SIGSEGV, ctx); if (mono_do_crash_chaining) { - mono_chain_signal (SIG_HANDLER_PARAMS); + mono_chain_signal (MONO_SIG_HANDLER_PARAMS); return; } } @@ -6841,7 +6851,7 @@ SIG_HANDLER_FUNC (, mono_sigsegv_signal_handler) g_assert_not_reached (); } else { /* The original handler might not like that it is executed on an altstack... */ - if (!ji && mono_chain_signal (SIG_HANDLER_PARAMS)) + if (!ji && mono_chain_signal (MONO_SIG_HANDLER_PARAMS)) return; mono_arch_handle_altstack_exception (ctx, info->si_addr, FALSE); @@ -6849,13 +6859,13 @@ SIG_HANDLER_FUNC (, mono_sigsegv_signal_handler) #else if (!ji) { - if (!mono_do_crash_chaining && mono_chain_signal (SIG_HANDLER_PARAMS)) + if (!mono_do_crash_chaining && mono_chain_signal (MONO_SIG_HANDLER_PARAMS)) return; mono_handle_native_sigsegv (SIGSEGV, ctx); if (mono_do_crash_chaining) { - mono_chain_signal (SIG_HANDLER_PARAMS); + mono_chain_signal (MONO_SIG_HANDLER_PARAMS); return; } } @@ -6864,10 +6874,10 @@ SIG_HANDLER_FUNC (, mono_sigsegv_signal_handler) #endif } -SIG_HANDLER_FUNC (, mono_sigint_signal_handler) +MONO_SIG_HANDLER_FUNC (, mono_sigint_signal_handler) { MonoException *exc; - GET_CONTEXT; + MONO_SIG_HANDLER_GET_CONTEXT; exc = mono_get_exception_execution_engine ("Interrupted (SIGINT).");