Merge pull request #1150 from ludovic-henry/pr17c-delegate-trampoline
[mono.git] / mono / mini / mini-darwin.c
index 7050fab04c304ee6dd6777121661c6c87ab6f0cc..9a57d363ce2dae59aabfb87a9d6c56d30ffca62e 100644 (file)
@@ -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;