Merge pull request #4033 from ntherning/no-stdcall-for-icalls-on-windows-32-bit
[mono.git] / mono / mini / mini-runtime.c
index 572048ff5ff8b401b415ab6ba0fe9de8e88cc02f..4c504f1e93a50742d736ff7cfafc2a0aa1523324 100644 (file)
@@ -253,6 +253,8 @@ mono_print_method_from_ip (void *ip)
        MonoGenericSharingContext*gsctx;
        const char *shared_type;
 
+       if (!domain)
+               domain = mono_get_root_domain ();
        ji = mini_jit_info_table_find_ext (domain, (char *)ip, TRUE, &target_domain);
        if (ji && ji->is_trampoline) {
                MonoTrampInfo *tinfo = (MonoTrampInfo *)ji->d.tramp_info;
@@ -1280,6 +1282,7 @@ mono_patch_info_hash (gconstpointer data)
        case MONO_PATCH_INFO_GC_SAFE_POINT_FLAG:
        case MONO_PATCH_INFO_AOT_MODULE:
        case MONO_PATCH_INFO_GET_TLS_TRAMP:
+       case MONO_PATCH_INFO_JIT_THREAD_ATTACH:
                return (ji->type << 8);
        case MONO_PATCH_INFO_CASTCLASS_CACHE:
                return (ji->type << 8) | (ji->data.index);
@@ -1726,6 +1729,12 @@ mono_resolve_patch_target (MonoMethod *method, MonoDomain *domain, guint8 *code,
                target = NULL;
 #endif
                break;
+       case MONO_PATCH_INFO_JIT_THREAD_ATTACH: {
+               MonoJitICallInfo *mi = mono_find_jit_icall_by_name ("mono_jit_thread_attach");
+               g_assert (mi);
+               target = mi->func;
+               break;
+       }
        default:
                g_assert_not_reached ();
        }
@@ -3586,6 +3595,8 @@ mini_init (const char *filename, const char *runtime_version)
 
        mono_cross_helpers_run ();
 
+       mono_counters_init ();
+
        mini_jit_init ();
 
        /* Happens when using the embedding interface */
@@ -3634,6 +3645,11 @@ mini_init (const char *filename, const char *runtime_version)
        callbacks.compile_method = mono_jit_compile_method;
        callbacks.create_jump_trampoline = mono_create_jump_trampoline;
        callbacks.create_jit_trampoline = mono_create_jit_trampoline;
+       callbacks.create_delegate_trampoline = mono_create_delegate_trampoline;
+       callbacks.free_method = mono_jit_free_method;
+#ifndef DISABLE_REMOTING
+       callbacks.create_remoting_trampoline = mono_jit_create_remoting_trampoline;
+#endif
 #endif
 
        mono_install_callbacks (&callbacks);
@@ -3644,8 +3660,6 @@ mini_init (const char *filename, const char *runtime_version)
        ticallbacks.thread_state_init_from_handle = mono_thread_state_init_from_handle;
        ticallbacks.thread_state_init = mono_thread_state_init;
 
-       mono_counters_init ();
-
 #ifndef HOST_WIN32
        mono_w32handle_init ();
 #endif
@@ -3709,11 +3723,6 @@ mini_init (const char *filename, const char *runtime_version)
        mono_threads_install_cleanup (mini_thread_cleanup);
 
 #ifdef JIT_TRAMPOLINES_WORK
-       mono_install_free_method (mono_jit_free_method);
-#ifndef DISABLE_REMOTING
-       mono_install_remoting_trampoline (mono_jit_create_remoting_trampoline);
-#endif
-       mono_install_delegate_trampoline (mono_create_delegate_trampoline);
        mono_install_create_domain_hook (mini_create_jit_domain_info);
        mono_install_free_domain_hook (mini_free_jit_domain_info);
 #endif