[mono] Use the proper memory manager in the JIT code. (#51175)
authorZoltan Varga <vargaz@gmail.com>
Wed, 14 Apr 2021 00:27:32 +0000 (20:27 -0400)
committerGitHub <noreply@github.com>
Wed, 14 Apr 2021 00:27:32 +0000 (20:27 -0400)
15 files changed:
src/mono/mono/mini/method-to-ir.c
src/mono/mono/mini/mini-amd64.c
src/mono/mono/mini/mini-arm.c
src/mono/mono/mini/mini-generic-sharing.c
src/mono/mono/mini/mini-ppc.c
src/mono/mono/mini/mini-runtime.c
src/mono/mono/mini/mini-runtime.h
src/mono/mono/mini/mini-s390x.c
src/mono/mono/mini/mini-x86.c
src/mono/mono/mini/mini.h
src/mono/mono/mini/tramp-amd64.c
src/mono/mono/mini/tramp-arm.c
src/mono/mono/mini/tramp-ppc.c
src/mono/mono/mini/tramp-s390x.c
src/mono/mono/mini/tramp-x86.c

index 8814851..d847738 100644 (file)
@@ -1690,7 +1690,7 @@ MONO_RESTORE_WARNING
 
                ji.type = patch_type;
                ji.data.target = data;
-               target = mono_resolve_patch_target (NULL, NULL, &ji, FALSE, error);
+               target = mono_resolve_patch_target_ext (cfg->mem_manager, NULL, NULL, &ji, FALSE, error);
                mono_error_assert_ok (error);
 
                EMIT_NEW_PCONST (cfg, ins, target);
@@ -3603,7 +3603,7 @@ handle_delegate_ctor (MonoCompile *cfg, MonoClass *klass, MonoInst *target, Mono
                                jit_mm->method_code_hash = g_hash_table_new (NULL, NULL);
                        code_slot = (guint8 **)g_hash_table_lookup (jit_mm->method_code_hash, method);
                        if (!code_slot) {
-                               code_slot = (guint8 **)m_method_alloc0 (method, sizeof (gpointer));
+                               code_slot = (guint8 **)mono_mem_manager_alloc0 (jit_mm->mem_manager, sizeof (gpointer));
                                g_hash_table_insert (jit_mm->method_code_hash, method, code_slot);
                        }
                        jit_mm_unlock (jit_mm);
index 94c009d..7861797 100644 (file)
@@ -8618,6 +8618,7 @@ mono_arch_build_imt_trampoline (MonoVTable *vtable, MonoIMTCheckItem **imt_entri
        guint8 *code, *start;
        gboolean vtable_is_32bit = ((gsize)(vtable) == (gsize)(int)(gsize)(vtable));
        GSList *unwind_ops;
+       MonoMemoryManager *mem_manager = m_class_get_mem_manager (vtable->klass);
 
        for (i = 0; i < count; ++i) {
                MonoIMTCheckItem *item = imt_entries [i];
@@ -8666,7 +8667,6 @@ mono_arch_build_imt_trampoline (MonoVTable *vtable, MonoIMTCheckItem **imt_entri
        if (fail_tramp) {
                code = (guint8 *)mini_alloc_generic_virtual_trampoline (vtable, size + MONO_TRAMPOLINE_UNWINDINFO_SIZE(0));
        } else {
-               MonoMemoryManager *mem_manager = m_class_get_mem_manager (vtable->klass);
                code = (guint8 *)mono_mem_manager_code_reserve (mem_manager, size + MONO_TRAMPOLINE_UNWINDINFO_SIZE(0));
        }
        start = code;
@@ -8763,7 +8763,7 @@ mono_arch_build_imt_trampoline (MonoVTable *vtable, MonoIMTCheckItem **imt_entri
 
        MONO_PROFILER_RAISE (jit_code_buffer, (start, code - start, MONO_PROFILER_CODE_BUFFER_IMT_TRAMPOLINE, NULL));
 
-       mono_tramp_info_register (mono_tramp_info_create (NULL, start, code - start, NULL, unwind_ops), NULL);
+       mono_tramp_info_register (mono_tramp_info_create (NULL, start, code - start, NULL, unwind_ops), mem_manager);
 
        return start;
 }
index c58ab27..b08a5bc 100644 (file)
@@ -6935,6 +6935,7 @@ mono_arch_build_imt_trampoline (MonoVTable *vtable, MonoIMTCheckItem **imt_entri
        char * cond;
 #endif
        GSList *unwind_ops;
+       MonoMemoryManager *mem_manager = m_class_get_mem_manager (vtable->klass);
 
        size = BASE_SIZE;
        constant_pool_starts = g_new0 (guint32*, count);
@@ -6976,7 +6977,6 @@ mono_arch_build_imt_trampoline (MonoVTable *vtable, MonoIMTCheckItem **imt_entri
        if (fail_tramp) {
                code = (arminstr_t *)mini_alloc_generic_virtual_trampoline (vtable, size);
        } else {
-               MonoMemoryManager *mem_manager = m_class_get_mem_manager (vtable->klass);
                code = mono_mem_manager_code_reserve (mem_manager, size);
        }
        start = code;
@@ -7154,7 +7154,7 @@ mono_arch_build_imt_trampoline (MonoVTable *vtable, MonoIMTCheckItem **imt_entri
 
        g_assert (DISTANCE (start, code) <= size);
 
-       mono_tramp_info_register (mono_tramp_info_create (NULL, (guint8*)start, DISTANCE (start, code), NULL, unwind_ops), NULL);
+       mono_tramp_info_register (mono_tramp_info_create (NULL, (guint8*)start, DISTANCE (start, code), NULL, unwind_ops), mem_manager);
 
        return start;
 }
index 549d827..d1cc5e0 100644 (file)
@@ -3048,8 +3048,7 @@ mono_class_fill_runtime_generic_context (MonoVTable *class_vtable, guint32 slot,
 {
        MonoRuntimeGenericContext *rgctx, *new_rgctx;
        gpointer info;
-       // FIXME:
-       MonoJitMemoryManager *jit_mm = get_default_jit_mm ();
+       MonoJitMemoryManager *jit_mm = jit_mm_for_class (class_vtable->klass);
 
        error_init (error);
 
index 88f8e2f..19097c9 100644 (file)
@@ -5474,6 +5474,7 @@ mono_arch_build_imt_trampoline (MonoVTable *vtable, MonoIMTCheckItem **imt_entri
        int i;
        int size = 0;
        guint8 *code, *start;
+       MonoMemoryManager *mem_manager = m_class_get_mem_manager (vtable->klass);
 
        for (i = 0; i < count; ++i) {
                MonoIMTCheckItem *item = imt_entries [i];
@@ -5508,7 +5509,6 @@ mono_arch_build_imt_trampoline (MonoVTable *vtable, MonoIMTCheckItem **imt_entri
        if (fail_tramp) {
                code = (guint8 *)mini_alloc_generic_virtual_trampoline (vtable, size);
        } else {
-               MonoMemoryManager *mem_manager = m_class_get_mem_manager (vtable->klass);
                code = mono_mem_manager_code_reserve (mem_manager, size);
        }
        start = code;
@@ -5605,7 +5605,7 @@ mono_arch_build_imt_trampoline (MonoVTable *vtable, MonoIMTCheckItem **imt_entri
        mono_arch_flush_icache (start, size);
        MONO_PROFILER_RAISE (jit_code_buffer, (start, code - start, MONO_PROFILER_CODE_BUFFER_IMT_TRAMPOLINE, NULL));
 
-       mono_tramp_info_register (mono_tramp_info_create (NULL, start, code - start, NULL, NULL), NULL);
+       mono_tramp_info_register (mono_tramp_info_create (NULL, start, code - start, NULL, NULL), mem_manager);
 
        return start;
 }
index bb25304..f1c43bc 100644 (file)
@@ -472,11 +472,11 @@ mono_tramp_info_free (MonoTrampInfo *info)
 }
 
 static void
-register_trampoline_jit_info (MonoDomain *domain, MonoTrampInfo *info)
+register_trampoline_jit_info (MonoMemoryManager *mem_manager, MonoTrampInfo *info)
 {
        MonoJitInfo *ji;
 
-       ji = (MonoJitInfo *)mono_mem_manager_alloc0 (get_default_mem_manager (), mono_jit_info_size ((MonoJitInfoFlags)0, 0, 0));
+       ji = (MonoJitInfo *)mono_mem_manager_alloc0 (mem_manager, mono_jit_info_size ((MonoJitInfoFlags)0, 0, 0));
        mono_jit_info_init (ji, NULL, (guint8*)MINI_FTNPTR_TO_ADDR (info->code), info->code_size, (MonoJitInfoFlags)0, 0, 0);
        ji->d.tramp_info = info;
        ji->is_trampoline = TRUE;
@@ -494,18 +494,15 @@ register_trampoline_jit_info (MonoDomain *domain, MonoTrampInfo *info)
  * Frees INFO.
  */
 static void
-mono_tramp_info_register_internal (MonoTrampInfo *info, MonoDomain *domain, gboolean aot)
+mono_tramp_info_register_internal (MonoTrampInfo *info, MonoMemoryManager *mem_manager, gboolean aot)
 {
        MonoTrampInfo *copy;
+       MonoDomain *domain = mono_get_root_domain ();
 
        if (!info)
                return;
 
-       if (!domain)
-               domain = mono_get_root_domain ();
-
-       // domain might be unset during startup
-       if (domain) {
+       if (mem_manager) {
                copy = mono_mem_manager_alloc0 (get_default_mem_manager (), sizeof (MonoTrampInfo));
        } else {
                copy = g_new0 (MonoTrampInfo, 1);
@@ -519,10 +516,9 @@ mono_tramp_info_register_internal (MonoTrampInfo *info, MonoDomain *domain, gboo
        if (info->unwind_ops) {
                copy->uw_info = mono_unwind_ops_encode (info->unwind_ops, &copy->uw_info_len);
                copy->owns_uw_info = TRUE;
-               if (domain) {
-                       /* Move unwind info into the domain's memory pool so that it is removed once the domain is released. */
+               if (mem_manager) {
                        guint8 *temp = copy->uw_info;
-                       copy->uw_info = mono_mem_manager_alloc (get_default_mem_manager (), copy->uw_info_len);
+                       copy->uw_info = mono_mem_manager_alloc (mem_manager, copy->uw_info_len);
                        memcpy (copy->uw_info, temp, copy->uw_info_len);
                        g_free (temp);
                }
@@ -541,13 +537,13 @@ mono_tramp_info_register_internal (MonoTrampInfo *info, MonoDomain *domain, gboo
 #endif
 
        if (!domain) {
-               /* If no root domain has been created yet, postpone the registration. */
+               /* If no domain has been created yet, postpone the registration. */
                mono_jit_lock ();
                tramp_infos = g_slist_prepend (tramp_infos, copy);
                mono_jit_unlock ();
        } else if (copy->uw_info || info->method) {
                /* Only register trampolines that have unwind info */
-               register_trampoline_jit_info (domain, copy);
+               register_trampoline_jit_info (mem_manager ? mem_manager : get_default_mem_manager (), copy);
        }
 
        if (mono_jit_map_is_enabled ())
@@ -557,15 +553,15 @@ mono_tramp_info_register_internal (MonoTrampInfo *info, MonoDomain *domain, gboo
 }
 
 void
-mono_tramp_info_register (MonoTrampInfo *info, MonoDomain *domain)
+mono_tramp_info_register (MonoTrampInfo *info, MonoMemoryManager *mem_manager)
 {
-       mono_tramp_info_register_internal (info, domain, FALSE);
+       mono_tramp_info_register_internal (info, mem_manager, FALSE);
 }
 
 void
-mono_aot_tramp_info_register (MonoTrampInfo *info, MonoDomain *domain)
+mono_aot_tramp_info_register (MonoTrampInfo *info, MonoMemoryManager *mem_manager)
 {
-       mono_tramp_info_register_internal (info, domain, TRUE);
+       mono_tramp_info_register_internal (info, mem_manager, TRUE);
 }
 
 /* Register trampolines created before the root domain was created in the jit info tables */
@@ -577,7 +573,7 @@ register_trampolines (MonoDomain *domain)
        for (l = tramp_infos; l; l = l->next) {
                MonoTrampInfo *info = (MonoTrampInfo *)l->data;
 
-               register_trampoline_jit_info (domain, info);
+               register_trampoline_jit_info (get_default_mem_manager (), info);
        }
 }
 
@@ -1348,7 +1344,7 @@ mono_patch_info_equal (gconstpointer ka, gconstpointer kb)
 }
 
 gpointer
-mono_resolve_patch_target (MonoMethod *method, guint8 *code, MonoJumpInfo *patch_info, gboolean run_cctors, MonoError *error)
+mono_resolve_patch_target_ext (MonoMemoryManager *mem_manager, MonoMethod *method, guint8 *code, MonoJumpInfo *patch_info, gboolean run_cctors, MonoError *error)
 {
        unsigned char *ip = patch_info->ip.i + code;
        gconstpointer target = NULL;
@@ -1424,7 +1420,7 @@ mono_resolve_patch_target (MonoMethod *method, guint8 *code, MonoJumpInfo *patch
                break;
        }
        case MONO_PATCH_INFO_METHOD_PINVOKE_ADDR_CACHE: {
-               target = mono_mem_manager_alloc0 (get_default_mem_manager (), sizeof (gpointer));
+               target = mono_mem_manager_alloc0 (mem_manager, sizeof (gpointer));
                break;
        }
        case MONO_PATCH_INFO_GC_SAFE_POINT_FLAG:
@@ -1642,7 +1638,7 @@ mono_resolve_patch_target (MonoMethod *method, guint8 *code, MonoJumpInfo *patch
                break;
        }
        case MONO_PATCH_INFO_CASTCLASS_CACHE: {
-               target = mono_mem_manager_alloc0 (get_default_mem_manager (), sizeof (gpointer));
+               target = mono_mem_manager_alloc0 (mem_manager, sizeof (gpointer));
                break;
        }
        case MONO_PATCH_INFO_OBJC_SELECTOR_REF: {
@@ -1654,7 +1650,7 @@ mono_resolve_patch_target (MonoMethod *method, guint8 *code, MonoJumpInfo *patch
                char *s;
 
                len = strlen ((const char *)patch_info->data.target);
-               s = (char *)mono_mem_manager_alloc0 (get_default_mem_manager (), len + 1);
+               s = (char *)mono_mem_manager_alloc0 (mem_manager, len + 1);
                memcpy (s, patch_info->data.target, len);
                target = s;
 
@@ -1685,6 +1681,12 @@ mono_resolve_patch_target (MonoMethod *method, guint8 *code, MonoJumpInfo *patch
        return (gpointer)target;
 }
 
+gpointer
+mono_resolve_patch_target (MonoMethod *method, guint8 *code, MonoJumpInfo *patch_info, gboolean run_cctors, MonoError *error)
+{
+       return mono_resolve_patch_target_ext (get_default_mem_manager (), method, code, patch_info, run_cctors, error);
+}
+
 /*
  * mini_register_jump_site:
  *
@@ -1823,7 +1825,11 @@ mini_lookup_method (MonoMethod *method, MonoMethod *shared)
 
        jit_code_hash_lock (jit_mm);
        ji = (MonoJitInfo *)mono_internal_hash_table_lookup (&jit_mm->jit_code_hash, method);
+       jit_code_hash_unlock (jit_mm);
        if (!ji && shared) {
+               jit_mm = jit_mm_for_method (shared);
+
+               jit_code_hash_lock (jit_mm);
                /* Try generic sharing */
                ji = (MonoJitInfo *)mono_internal_hash_table_lookup (&jit_mm->jit_code_hash, shared);
                if (ji && !ji->has_generic_jit_info)
@@ -1837,8 +1843,8 @@ mini_lookup_method (MonoMethod *method, MonoMethod *shared)
                ++lookups;
                if (!ji)
                        ++failed_lookups;
+               jit_code_hash_unlock (jit_mm);
        }
-       jit_code_hash_unlock (jit_mm);
 
        return ji;
 }
index cfc7dd1..67d4414 100644 (file)
@@ -78,12 +78,13 @@ get_default_mem_manager (void)
 static inline MonoJitMemoryManager*
 jit_mm_for_method (MonoMethod *method)
 {
-       /*
-        * Some places might not look up the correct memory manager because of generic instances/generic sharing etc.
-        * So use the same memory manager everywhere, this is not a problem since we don't support unloading yet.
-        */
-       //return (MonoJitMemoryManager*)m_method_get_mem_manager (method)->runtime_info;
-       return get_default_jit_mm ();
+       return (MonoJitMemoryManager*)m_method_get_mem_manager (method)->runtime_info;
+}
+
+static inline MonoJitMemoryManager*
+jit_mm_for_class (MonoClass *klass)
+{
+       return (MonoJitMemoryManager*)m_class_get_mem_manager (klass)->runtime_info;
 }
 
 static inline void
@@ -550,6 +551,7 @@ MonoJumpInfo *mono_patch_info_list_prepend  (MonoJumpInfo *list, int ip, MonoJum
 MonoJumpInfoToken* mono_jump_info_token_new (MonoMemPool *mp, MonoImage *image, guint32 token);
 MonoJumpInfoToken* mono_jump_info_token_new2 (MonoMemPool *mp, MonoImage *image, guint32 token, MonoGenericContext *context);
 gpointer  mono_resolve_patch_target         (MonoMethod *method, guint8 *code, MonoJumpInfo *patch_info, gboolean run_cctors, MonoError *error);
+gpointer  mono_resolve_patch_target_ext     (MonoMemoryManager *mem_manager, MonoMethod *method, guint8 *code, MonoJumpInfo *patch_info, gboolean run_cctors, MonoError *error);
 void mini_register_jump_site                (MonoMethod *method, gpointer ip);
 void mini_patch_jump_sites                  (MonoMethod *method, gpointer addr);
 void mini_patch_llvm_jit_callees            (MonoMethod *method, gpointer addr);
index 1cc8f83..e16cae8 100644 (file)
@@ -6484,6 +6484,7 @@ mono_arch_build_imt_trampoline (MonoVTable *vtable,
        int i;
        int size = 0;
        guchar *code, *start;
+       MonoMemoryManager *mem_manager = m_class_get_mem_manager (vtable->klass);
 
        for (i = 0; i < count; ++i) {
                MonoIMTCheckItem *item = imt_entries [i];
@@ -6519,7 +6520,6 @@ mono_arch_build_imt_trampoline (MonoVTable *vtable,
        if (fail_tramp) {
                code = (guint8 *)mini_alloc_generic_virtual_trampoline (vtable, size);
        } else {
-               MonoMemoryManager *mem_manager = m_class_get_mem_manager (vtable->klass);
                code = mono_mem_manager_code_reserve (mem_manager, size);
        }
 
@@ -6606,7 +6606,7 @@ mono_arch_build_imt_trampoline (MonoVTable *vtable,
 
        g_assert (code - start <= size);
 
-       mono_tramp_info_register (mono_tramp_info_create (NULL, start, code - start, NULL, NULL), NULL);
+       mono_tramp_info_register (mono_tramp_info_create (NULL, start, code - start, NULL, NULL), mem_manager);
 
        return (start);
 }
index d07ba76..5cc9c3b 100644 (file)
@@ -5525,6 +5525,7 @@ mono_arch_build_imt_trampoline (MonoVTable *vtable, MonoIMTCheckItem **imt_entri
        int size = 0;
        guint8 *code, *start;
        GSList *unwind_ops;
+       MonoMemoryManager *mem_manager = m_class_get_mem_manager (vtable->klass);
 
        for (i = 0; i < count; ++i) {
                MonoIMTCheckItem *item = imt_entries [i];
@@ -5552,7 +5553,6 @@ mono_arch_build_imt_trampoline (MonoVTable *vtable, MonoIMTCheckItem **imt_entri
        if (fail_tramp) {
                code = (guint8 *)mini_alloc_generic_virtual_trampoline (vtable, size);
        } else {
-               MonoMemoryManager *mem_manager = m_class_get_mem_manager (vtable->klass);
                code = mono_mem_manager_code_reserve (mem_manager, size);
        }
        start = code;
@@ -5644,7 +5644,7 @@ mono_arch_build_imt_trampoline (MonoVTable *vtable, MonoIMTCheckItem **imt_entri
 
        MONO_PROFILER_RAISE (jit_code_buffer, (start, code - start, MONO_PROFILER_CODE_BUFFER_IMT_TRAMPOLINE, NULL));
 
-       mono_tramp_info_register (mono_tramp_info_create (NULL, start, code - start, NULL, unwind_ops), NULL);
+       mono_tramp_info_register (mono_tramp_info_create (NULL, start, code - start, NULL, unwind_ops), mem_manager);
 
        return start;
 }
index ac00a72..6446d66 100644 (file)
@@ -2298,8 +2298,8 @@ void              mono_emit_unwind_op (MonoCompile *cfg, int when,
                                                                           int val);
 MonoTrampInfo*    mono_tramp_info_create (const char *name, guint8 *code, guint32 code_size, MonoJumpInfo *ji, GSList *unwind_ops);
 void              mono_tramp_info_free (MonoTrampInfo *info);
-void              mono_aot_tramp_info_register (MonoTrampInfo *info, MonoDomain *domain);
-void              mono_tramp_info_register (MonoTrampInfo *info, MonoDomain *domain);
+void              mono_aot_tramp_info_register (MonoTrampInfo *info, MonoMemoryManager *mem_manager);
+void              mono_tramp_info_register (MonoTrampInfo *info, MonoMemoryManager *mem_manager);
 int mini_exception_id_by_name (const char *name);
 gboolean mini_type_is_hfa (MonoType *t, int *out_nfields, int *out_esize);
 
index 805ae16..086796f 100644 (file)
@@ -78,7 +78,7 @@ mono_arch_get_unbox_trampoline (MonoMethod *m, gpointer addr)
        mono_arch_flush_icache (start, code - start);
        MONO_PROFILER_RAISE (jit_code_buffer, (start, code - start, MONO_PROFILER_CODE_BUFFER_UNBOX_TRAMPOLINE, m));
 
-       mono_tramp_info_register (mono_tramp_info_create (NULL, start, code - start, NULL, unwind_ops), NULL);
+       mono_tramp_info_register (mono_tramp_info_create (NULL, start, code - start, NULL, unwind_ops), mem_manager);
 
        return start;
 }
@@ -117,7 +117,7 @@ mono_arch_get_static_rgctx_trampoline (MonoMemoryManager *mem_manager, gpointer
        mono_arch_flush_icache (start, code - start);
        MONO_PROFILER_RAISE (jit_code_buffer, (start, code - start, MONO_PROFILER_CODE_BUFFER_GENERICS_TRAMPOLINE, NULL));
 
-       mono_tramp_info_register (mono_tramp_info_create (NULL, start, code - start, NULL, unwind_ops), NULL);
+       mono_tramp_info_register (mono_tramp_info_create (NULL, start, code - start, NULL, unwind_ops), mem_manager);
 
        return start;
 }
index 1ad45ca..3a9f87e 100644 (file)
@@ -538,7 +538,7 @@ mono_arch_get_unbox_trampoline (MonoMethod *m, gpointer addr)
        /*g_print ("unbox trampoline at %d for %s:%s\n", this_pos, m->klass->name, m->name);
        g_print ("unbox code is at %p for method at %p\n", start, addr);*/
 
-       mono_tramp_info_register (mono_tramp_info_create (NULL, start, code - start, NULL, unwind_ops), NULL);
+       mono_tramp_info_register (mono_tramp_info_create (NULL, start, code - start, NULL, unwind_ops), mem_manager);
 
        return start;
 }
@@ -566,7 +566,7 @@ mono_arch_get_static_rgctx_trampoline (MonoMemoryManager *mem_manager, gpointer
        mono_arch_flush_icache (start, code - start);
        MONO_PROFILER_RAISE (jit_code_buffer, (start, code - start, MONO_PROFILER_CODE_BUFFER_GENERICS_TRAMPOLINE, NULL));
 
-       mono_tramp_info_register (mono_tramp_info_create (NULL, start, code - start, NULL, unwind_ops), NULL);
+       mono_tramp_info_register (mono_tramp_info_create (NULL, start, code - start, NULL, unwind_ops), mem_manager);
 
        return start;
 }
@@ -595,7 +595,7 @@ mono_arch_get_ftnptr_arg_trampoline (MonoMemoryManager *mem_manager, gpointer ar
        mono_arch_flush_icache (start, code - start);
        MONO_PROFILER_RAISE (jit_code_buffer, (start, code - start, MONO_PROFILER_CODE_BUFFER_GENERICS_TRAMPOLINE, NULL));
 
-       mono_tramp_info_register (mono_tramp_info_create (NULL, start, code - start, NULL, unwind_ops), NULL);
+       mono_tramp_info_register (mono_tramp_info_create (NULL, start, code - start, NULL, unwind_ops), mem_manager);
 
        return start;
 }
@@ -1189,7 +1189,7 @@ mono_arch_get_gsharedvt_arg_trampoline (gpointer arg, gpointer addr)
        mono_arch_flush_icache (buf, code - buf);
        MONO_PROFILER_RAISE (jit_code_buffer, (buf, code - buf, MONO_PROFILER_CODE_BUFFER_GENERICS_TRAMPOLINE, NULL));
 
-       mono_tramp_info_register (mono_tramp_info_create (NULL, buf, code - buf, NULL, NULL), NULL);
+       mono_tramp_info_register (mono_tramp_info_create (NULL, buf, code - buf, NULL, NULL), mem_manager);
 
        return buf;
 }
index 850753e..67eb7c2 100644 (file)
@@ -107,7 +107,7 @@ mono_arch_get_unbox_trampoline (MonoMethod *m, gpointer addr)
        /*g_print ("unbox trampoline at %d for %s:%s\n", this_pos, m->klass->name, m->name);
        g_print ("unbox code is at %p for method at %p\n", start, addr);*/
 
-       mono_tramp_info_register (mono_tramp_info_create (NULL, start, code - start, NULL, NULL), NULL);
+       mono_tramp_info_register (mono_tramp_info_create (NULL, start, code - start, NULL, NULL), mem_manager);
 
        return start;
 }
@@ -152,7 +152,7 @@ mono_arch_get_static_rgctx_trampoline (MonoMemoryManager *mem_manager, gpointer
        MONO_PROFILER_RAISE (jit_code_buffer, (start, code - start, MONO_PROFILER_CODE_BUFFER_GENERICS_TRAMPOLINE, NULL));
        g_assert ((code - start) <= size);
 
-       mono_tramp_info_register (mono_tramp_info_create (NULL, start, code - start, NULL, NULL), NULL);
+       mono_tramp_info_register (mono_tramp_info_create (NULL, start, code - start, NULL, NULL), mem_manager);
 
        return start;
 }
index d5d6909..9634169 100644 (file)
@@ -117,7 +117,7 @@ mono_arch_get_unbox_trampoline (MonoMethod *m, gpointer addr)
 
        snprintf(trampName, sizeof(trampName), "%s_unbox_trampoline", m->name);
 
-       mono_tramp_info_register (mono_tramp_info_create (trampName, start, code - start, NULL, NULL), NULL);
+       mono_tramp_info_register (mono_tramp_info_create (trampName, start, code - start, NULL, NULL), mem_manager);
 
        return start;
 }
@@ -747,7 +747,7 @@ mono_arch_get_static_rgctx_trampoline (MonoMemoryManager *mem_manager, gpointer
        mono_arch_flush_icache (start, code - start);
        MONO_PROFILER_RAISE (jit_code_buffer, (start, code - start, MONO_PROFILER_CODE_BUFFER_GENERICS_TRAMPOLINE, NULL));
 
-       mono_tramp_info_register (mono_tramp_info_create (NULL, start, code - start, NULL, NULL), NULL);
+       mono_tramp_info_register (mono_tramp_info_create (NULL, start, code - start, NULL, NULL), mem_manager);
 
        return(start);
 }      
index 395ae09..218e961 100644 (file)
@@ -55,7 +55,7 @@ mono_arch_get_unbox_trampoline (MonoMethod *m, gpointer addr)
 
        MONO_PROFILER_RAISE (jit_code_buffer, (start, code - start, MONO_PROFILER_CODE_BUFFER_UNBOX_TRAMPOLINE, m));
 
-       mono_tramp_info_register (mono_tramp_info_create (NULL, start, code - start, NULL, unwind_ops), NULL);
+       mono_tramp_info_register (mono_tramp_info_create (NULL, start, code - start, NULL, unwind_ops), mem_manager);
 
        return start;
 }
@@ -79,7 +79,7 @@ mono_arch_get_static_rgctx_trampoline (MonoMemoryManager *mem_manager, gpointer
        mono_arch_flush_icache (start, code - start);
        MONO_PROFILER_RAISE (jit_code_buffer, (start, code - start, MONO_PROFILER_CODE_BUFFER_GENERICS_TRAMPOLINE, NULL));
 
-       mono_tramp_info_register (mono_tramp_info_create (NULL, start, code - start, NULL, unwind_ops), NULL);
+       mono_tramp_info_register (mono_tramp_info_create (NULL, start, code - start, NULL, unwind_ops), mem_manager);
 
        return start;
 }
@@ -609,7 +609,7 @@ mono_arch_get_gsharedvt_arg_trampoline (gpointer arg, gpointer addr)
        mono_arch_flush_icache (start, code - start);
        MONO_PROFILER_RAISE (jit_code_buffer, (start, code - start, MONO_PROFILER_CODE_BUFFER_GENERICS_TRAMPOLINE, NULL));
 
-       mono_tramp_info_register (mono_tramp_info_create (NULL, start, code - start, NULL, unwind_ops), NULL);
+       mono_tramp_info_register (mono_tramp_info_create (NULL, start, code - start, NULL, unwind_ops), mem_manager);
 
        return start;
 }