X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Fmini%2Fmini-darwin.c;h=9a57d363ce2dae59aabfb87a9d6c56d30ffca62e;hb=4b2d1f0edc6712006bfb66c1a19100664dc99edf;hp=7050fab04c304ee6dd6777121661c6c87ab6f0cc;hpb=b57fcaa28b7108c701b378a27f772917c225d033;p=mono.git diff --git a/mono/mini/mini-darwin.c b/mono/mini/mini-darwin.c index 7050fab04c3..9a57d363ce2 100644 --- a/mono/mini/mini-darwin.c +++ b/mono/mini/mini-darwin.c @@ -265,8 +265,8 @@ mono_gdb_render_native_backtraces (pid_t crashed_pid) commands = fopen (template, "w"); if (using_lldb) { fprintf (commands, "process attach --pid %ld\n", (long) crashed_pid); - fprintf (commands, "script lldb.debugger.HandleCommand (\"thread list\")\n"); - fprintf (commands, "script lldb.debugger.HandleCommand (\"thread backtrace all\")\n"); + fprintf (commands, "thread list\n"); + fprintf (commands, "thread backtrace all\n"); fprintf (commands, "detach\n"); fprintf (commands, "quit\n"); argv [1] = "--source"; @@ -290,7 +290,7 @@ mono_gdb_render_native_backtraces (pid_t crashed_pid) } gboolean -mono_thread_state_init_from_handle (MonoThreadUnwindState *tctx, MonoNativeThreadId thread_id, MonoNativeThreadHandle thread_handle) +mono_thread_state_init_from_handle (MonoThreadUnwindState *tctx, MonoThreadInfo *info) { kern_return_t ret; mach_msg_type_number_t num_state; @@ -299,9 +299,10 @@ mono_thread_state_init_from_handle (MonoThreadUnwindState *tctx, MonoNativeThrea mcontext_t mctx; MonoJitTlsData *jit_tls; void *domain; - MonoLMF *lmf; - MonoThreadInfo *info; + MonoLMF *lmf = NULL; + gpointer *addr; + g_assert (info); /*Zero enough state to make sure the caller doesn't confuse itself*/ tctx->valid = FALSE; tctx->unwind_data [MONO_UNWIND_DATA_DOMAIN] = NULL; @@ -311,7 +312,7 @@ mono_thread_state_init_from_handle (MonoThreadUnwindState *tctx, MonoNativeThrea state = (thread_state_t) alloca (mono_mach_arch_get_thread_state_size ()); mctx = (mcontext_t) alloca (mono_mach_arch_get_mcontext_size ()); - ret = mono_mach_arch_get_thread_state (thread_handle, state, &num_state); + ret = mono_mach_arch_get_thread_state (info->native_handle, state, &num_state); if (ret != KERN_SUCCESS) return FALSE; @@ -320,17 +321,10 @@ mono_thread_state_init_from_handle (MonoThreadUnwindState *tctx, MonoNativeThrea mono_sigctx_to_monoctx (&ctx, &tctx->ctx); - info = mono_thread_info_lookup (thread_id); - - if (info) { - /* mono_set_jit_tls () sets this */ - jit_tls = mono_thread_info_tls_get (info, TLS_KEY_JIT_TLS); - /* SET_APPDOMAIN () sets this */ - domain = mono_thread_info_tls_get (info, TLS_KEY_DOMAIN); - } else { - jit_tls = NULL; - domain = NULL; - } + /* mono_set_jit_tls () sets this */ + jit_tls = mono_thread_info_tls_get (info, TLS_KEY_JIT_TLS); + /* SET_APPDOMAIN () sets this */ + domain = mono_thread_info_tls_get (info, TLS_KEY_DOMAIN); /*Thread already started to cleanup, can no longer capture unwind state*/ if (!jit_tls || !domain) @@ -341,15 +335,11 @@ mono_thread_state_init_from_handle (MonoThreadUnwindState *tctx, MonoNativeThrea * arch-specific code. But the address of the TLS variable is stored in another TLS variable which * can be accessed through MonoThreadInfo. */ - lmf = NULL; - if (info) { - gpointer *addr; - - /* mono_set_lmf_addr () sets this */ - addr = mono_thread_info_tls_get (info, TLS_KEY_LMF_ADDR); - if (addr) - lmf = *addr; - } + /* mono_set_lmf_addr () sets this */ + addr = mono_thread_info_tls_get (info, TLS_KEY_LMF_ADDR); + if (addr) + lmf = *addr; + tctx->unwind_data [MONO_UNWIND_DATA_DOMAIN] = domain; tctx->unwind_data [MONO_UNWIND_DATA_JIT_TLS] = jit_tls;