From 13bea2c57b33d8c4ffac0edaddfdfdccc59eedb3 Mon Sep 17 00:00:00 2001 From: Zoltan Varga Date: Tue, 6 Apr 2021 02:55:17 -0400 Subject: [PATCH 1/5] [mono] Remove appdomains_list variable, it shouldn't be needed. --- src/mono/mono/metadata/domain.c | 24 ------------------------ 1 file changed, 24 deletions(-) diff --git a/src/mono/mono/metadata/domain.c b/src/mono/mono/metadata/domain.c index 18aa5b0d814313..1a9df287e8fb5a 100644 --- a/src/mono/mono/metadata/domain.c +++ b/src/mono/mono/metadata/domain.c @@ -67,7 +67,6 @@ mono_thread_info_tls_set (info, TLS_KEY_DOMAIN, (x)); \ } while (FALSE) -static MonoDomain **appdomains_list; static MonoImage *exe_image; static MonoDomain *mono_root_domain; @@ -107,25 +106,6 @@ get_runtimes_from_exe (const char *exe_file, MonoImage **exe_image); static const MonoRuntimeInfo* get_runtime_by_version (const char *version); -//g_malloc on sgen and mono_gc_alloc_fixed on boehm -static void* -gc_alloc_fixed_non_heap_list (size_t size) -{ - if (mono_gc_is_moving ()) - return g_malloc0 (size); - else - return mono_gc_alloc_fixed (size, MONO_GC_DESCRIPTOR_NULL, MONO_ROOT_SOURCE_DOMAIN, NULL, "Domain List"); -} - -static void -gc_free_fixed_non_heap_list (void *ptr) -{ - if (mono_gc_is_moving ()) - g_free (ptr); - else - mono_gc_free_fixed (ptr); -} - static MonoDomain * create_root_domain (void) { @@ -148,10 +128,6 @@ create_root_domain (void) MONO_PROFILER_RAISE (domain_loading, (domain)); - // FIXME: why is this needed ? - appdomains_list = (MonoDomain **)gc_alloc_fixed_non_heap_list (sizeof (void*)); - appdomains_list [0] = domain; - #ifndef DISABLE_PERFCOUNTERS mono_atomic_inc_i32 (&mono_perfcounters->loader_appdomains); mono_atomic_inc_i32 (&mono_perfcounters->loader_total_appdomains); From 4635bb8a7daa60c8215cd599d0dabee7741e3325 Mon Sep 17 00:00:00 2001 From: Zoltan Varga Date: Tue, 6 Apr 2021 02:58:10 -0400 Subject: [PATCH 2/5] Remove some GC domain code. --- src/mono/mono/metadata/boehm-gc.c | 78 --------------------------- src/mono/mono/metadata/gc-internals.h | 4 -- src/mono/mono/metadata/sgen-mono.c | 25 --------- 3 files changed, 107 deletions(-) diff --git a/src/mono/mono/metadata/boehm-gc.c b/src/mono/mono/metadata/boehm-gc.c index 14ec4bc3f2ea16..72776300a30ec6 100644 --- a/src/mono/mono/metadata/boehm-gc.c +++ b/src/mono/mono/metadata/boehm-gc.c @@ -1577,47 +1577,6 @@ mono_gc_is_null (void) return FALSE; } -/** - * mono_gchandle_is_in_domain: - * \param gchandle a GCHandle's handle. - * \param domain An application domain. - * - * Use this function to determine if the \p gchandle points to an - * object allocated in the specified \p domain. - * - * \returns TRUE if the object wrapped by the \p gchandle belongs to the specific \p domain. - */ -gboolean -mono_gchandle_is_in_domain (MonoGCHandle gch, MonoDomain *domain) -{ - guint32 gchandle = MONO_GC_HANDLE_TO_UINT (gch); - guint slot = MONO_GC_HANDLE_SLOT (gchandle); - guint type = MONO_GC_HANDLE_TYPE (gchandle); - HandleData *handles = &gc_handles [type]; - gboolean result = FALSE; - - if (type >= HANDLE_TYPE_MAX) - return FALSE; - - lock_handles (handles); - if (slot < handles->size && slot_occupied (handles, slot)) { - if (MONO_GC_HANDLE_TYPE_IS_WEAK (handles->type)) { - result = domain->domain_id == handles->domain_ids [slot]; - } else { - MonoObject *obj; - obj = (MonoObject *)handles->entries [slot]; - if (obj == NULL) - result = TRUE; - else - result = domain == mono_object_domain (obj); - } - } else { - /* print a warning? */ - } - unlock_handles (handles); - return result; -} - /** * mono_gchandle_free_internal: * \param gchandle a GCHandle's handle. @@ -1659,43 +1618,6 @@ mono_gchandle_free_internal (MonoGCHandle gch) MONO_PROFILER_RAISE (gc_handle_deleted, (gchandle, (MonoGCHandleType)handles->type)); } -/** - * mono_gchandle_free_domain: - * \param domain domain that is unloading - * - * Function used internally to cleanup any GC handle for objects belonging - * to the specified domain during appdomain unload. - */ -void -mono_gchandle_free_domain (MonoDomain *domain) -{ - guint type; - - for (type = HANDLE_TYPE_MIN; type < HANDLE_PINNED; ++type) { - guint slot; - HandleData *handles = &gc_handles [type]; - lock_handles (handles); - for (slot = 0; slot < handles->size; ++slot) { - if (!slot_occupied (handles, slot)) - continue; - if (MONO_GC_HANDLE_TYPE_IS_WEAK (type)) { - if (domain->domain_id == handles->domain_ids [slot]) { - vacate_slot (handles, slot); - if (handles->entries [slot]) - mono_gc_weak_link_remove (&handles->entries [slot], handles->type == HANDLE_WEAK_TRACK); - } - } else { - if (handles->entries [slot] && mono_object_domain (handles->entries [slot]) == domain) { - vacate_slot (handles, slot); - handles->entries [slot] = NULL; - } - } - } - unlock_handles (handles); - } - -} - guint64 mono_gc_get_total_allocated_bytes (MonoBoolean precise) { diff --git a/src/mono/mono/metadata/gc-internals.h b/src/mono/mono/metadata/gc-internals.h index b852dbead118ef..f52deb7dbda4d8 100644 --- a/src/mono/mono/metadata/gc-internals.h +++ b/src/mono/mono/metadata/gc-internals.h @@ -121,10 +121,6 @@ mono_gc_alloc_fixed_no_descriptor (size_t size, MonoGCRootSource source, void *k void mono_gc_free_fixed (void* addr); -/* make sure the gchandle was allocated for an object in domain */ -gboolean mono_gchandle_is_in_domain (MonoGCHandle gchandle, MonoDomain *domain); -void mono_gchandle_free_domain (MonoDomain *domain); - typedef void (*FinalizerThreadCallback) (gpointer user_data); MonoObject* diff --git a/src/mono/mono/metadata/sgen-mono.c b/src/mono/mono/metadata/sgen-mono.c index e586d8150a6cb7..f1ef299056f4ff 100644 --- a/src/mono/mono/metadata/sgen-mono.c +++ b/src/mono/mono/metadata/sgen-mono.c @@ -2728,19 +2728,6 @@ mono_gchandle_new_weakref_internal (GCObject *obj, gboolean track_resurrection) return MONO_GC_HANDLE_FROM_UINT (sgen_gchandle_new_weakref (obj, track_resurrection)); } -/** - * mono_gchandle_is_in_domain: - * \param gchandle a GCHandle's handle. - * \param domain An application domain. - * \returns TRUE if the object wrapped by the \p gchandle belongs to the specific \p domain. - */ -gboolean -mono_gchandle_is_in_domain (MonoGCHandle gchandle, MonoDomain *domain) -{ - MonoDomain *gchandle_domain = (MonoDomain *)sgen_gchandle_get_metadata (MONO_GC_HANDLE_TO_UINT (gchandle)); - return domain->domain_id == gchandle_domain->domain_id; -} - /** * mono_gchandle_free_internal: * \param gchandle a GCHandle's handle. @@ -2755,18 +2742,6 @@ mono_gchandle_free_internal (MonoGCHandle gchandle) sgen_gchandle_free (MONO_GC_HANDLE_TO_UINT (gchandle)); } -/** - * mono_gchandle_free_domain: - * \param unloading domain that is unloading - * - * Function used internally to cleanup any GC handle for objects belonging - * to the specified domain during appdomain unload. - */ -void -mono_gchandle_free_domain (MonoDomain *unloading) -{ -} - /** * mono_gchandle_get_target_internal: * \param gchandle a GCHandle's handle. From b3ffc130f3cae9bc25c614174b925a29e744fd33 Mon Sep 17 00:00:00 2001 From: Zoltan Varga Date: Tue, 6 Apr 2021 03:06:28 -0400 Subject: [PATCH 3/5] Remove domains from sre.c. --- src/mono/mono/metadata/metadata-internals.h | 1 - src/mono/mono/metadata/sre.c | 37 ++++++++------------- 2 files changed, 14 insertions(+), 24 deletions(-) diff --git a/src/mono/mono/metadata/metadata-internals.h b/src/mono/mono/metadata/metadata-internals.h index e5abd22a1e9644..fed59f11db4782 100644 --- a/src/mono/mono/metadata/metadata-internals.h +++ b/src/mono/mono/metadata/metadata-internals.h @@ -649,7 +649,6 @@ struct _MonoDynamicAssembly { MonoAssembly assembly; char *strong_name; guint32 strong_name_size; - MonoDomain *domain; }; struct _MonoDynamicImage { diff --git a/src/mono/mono/metadata/sre.c b/src/mono/mono/metadata/sre.c index 73d8cfd286ae69..736bac5c533839 100644 --- a/src/mono/mono/metadata/sre.c +++ b/src/mono/mono/metadata/sre.c @@ -79,9 +79,6 @@ static void reflection_methodbuilder_from_dynamic_method (ReflectionMethodBuilde static gboolean reflection_setup_internal_class (MonoReflectionTypeBuilderHandle tb, MonoError *error); static gboolean reflection_init_generic_class (MonoReflectionTypeBuilderHandle tb, MonoError *error); static gboolean reflection_setup_class_hierarchy (GHashTable *unparented, MonoError *error); - - -static gpointer register_assembly (MonoDomain *domain, MonoReflectionAssembly *res, MonoAssembly *assembly); #endif static char* type_get_qualified_name (MonoType *type, MonoAssembly *ass); @@ -1202,6 +1199,18 @@ mono_image_create_token (MonoDynamicImage *assembly, MonoObjectHandle obj, #ifndef DISABLE_REFLECTION_EMIT +static gpointer +register_assembly (MonoReflectionAssembly *res, MonoAssembly *assembly) +{ + return CACHE_OBJECT (MonoReflectionAssembly *, assembly, &res->object, NULL); +} + +static MonoReflectionModuleBuilderHandle +register_module (MonoReflectionModuleBuilderHandle res, MonoDynamicImage *module) +{ + return CACHE_OBJECT_HANDLE (MonoReflectionModuleBuilder, module, MONO_HANDLE_CAST (MonoObject, res), NULL); +} + /* * mono_reflection_dynimage_basic_init: * @assembly: an assembly builder object @@ -1214,7 +1223,6 @@ mono_reflection_dynimage_basic_init (MonoReflectionAssemblyBuilder *assemblyb, M { MonoDynamicAssembly *assembly; MonoDynamicImage *image; - MonoDomain *domain = mono_get_root_domain (); MonoAssemblyLoadContext *alc = mono_alc_get_default (); if (assemblyb->dynamic_assembly) @@ -1259,7 +1267,6 @@ mono_reflection_dynimage_basic_init (MonoReflectionAssemblyBuilder *assemblyb, M * they only fire AssemblyResolve events, they don't cause probing for * referenced assemblies to happen. */ assembly->assembly.context.kind = MONO_ASMCTX_INDIVIDUAL; - assembly->domain = domain; char *assembly_name = mono_string_to_utf8_checked_internal (assemblyb->name, error); return_if_nok (error); @@ -1270,33 +1277,17 @@ mono_reflection_dynimage_basic_init (MonoReflectionAssemblyBuilder *assemblyb, M mono_alc_add_assembly (alc, (MonoAssembly*)assembly); - register_assembly (mono_object_domain (assemblyb), &assemblyb->assembly, &assembly->assembly); + register_assembly (&assemblyb->assembly, &assembly->assembly); MONO_PROFILER_RAISE (assembly_loaded, (&assembly->assembly)); mono_assembly_invoke_load_hook_internal (alc, (MonoAssembly*)assembly); } -#endif /* !DISABLE_REFLECTION_EMIT */ - -#ifndef DISABLE_REFLECTION_EMIT -static gpointer -register_assembly (MonoDomain *domain, MonoReflectionAssembly *res, MonoAssembly *assembly) -{ - return CACHE_OBJECT (MonoReflectionAssembly *, assembly, &res->object, NULL); -} - -static MonoReflectionModuleBuilderHandle -register_module (MonoDomain *domain, MonoReflectionModuleBuilderHandle res, MonoDynamicImage *module) -{ - return CACHE_OBJECT_HANDLE (MonoReflectionModuleBuilder, module, MONO_HANDLE_CAST (MonoObject, res), NULL); -} - static gboolean image_module_basic_init (MonoReflectionModuleBuilderHandle moduleb, MonoError *error) { error_init (error); - MonoDomain *domain = MONO_HANDLE_DOMAIN (moduleb); MonoDynamicImage *image = MONO_HANDLE_GETVAL (moduleb, dynamic_image); MonoReflectionAssemblyBuilderHandle ab = MONO_HANDLE_NEW (MonoReflectionAssemblyBuilder, NULL); MONO_HANDLE_GET (ab, moduleb, assemblyb); @@ -1321,7 +1312,7 @@ image_module_basic_init (MonoReflectionModuleBuilderHandle moduleb, MonoError *e MONO_HANDLE_SETVAL (MONO_HANDLE_CAST (MonoReflectionModule, moduleb), image, MonoImage*, &image->image); MONO_HANDLE_SETVAL (moduleb, dynamic_image, MonoDynamicImage*, image); - register_module (domain, moduleb, image); + register_module (moduleb, image); /* register the module with the assembly */ MonoImage *ass = dynamic_assembly->assembly.image; From 8c1ea09eb19a34e9c8d425e551eba47db02c7eb8 Mon Sep 17 00:00:00 2001 From: Zoltan Varga Date: Tue, 6 Apr 2021 04:56:07 -0400 Subject: [PATCH 4/5] Remove domains from the jit info code. --- src/mono/mono/metadata/appdomain.h | 2 +- src/mono/mono/metadata/exception.c | 4 +--- src/mono/mono/metadata/external-only.c | 22 +++++++++++++++++++ src/mono/mono/metadata/icall-eventpipe.c | 2 +- src/mono/mono/metadata/jit-info.c | 27 +++--------------------- src/mono/mono/metadata/jit-info.h | 6 +++--- src/mono/mono/metadata/marshal.c | 3 ++- src/mono/mono/metadata/threads.c | 4 ++-- src/mono/mono/mini/aot-runtime.c | 26 +++++++++-------------- src/mono/mono/mini/aot-runtime.h | 2 +- src/mono/mono/mini/debugger-agent.c | 2 +- src/mono/mono/mini/driver.c | 5 ++--- src/mono/mono/mini/mini-exceptions.c | 12 +++++------ src/mono/mono/mini/mini-posix.c | 2 +- src/mono/mono/mini/mini-runtime.c | 12 ++++------- src/mono/mono/profiler/log.c | 2 +- src/mono/mono/utils/mono-threads.c | 2 +- src/mono/mono/utils/mono-threads.h | 2 +- 18 files changed, 62 insertions(+), 75 deletions(-) diff --git a/src/mono/mono/metadata/appdomain.h b/src/mono/mono/metadata/appdomain.h index e6a17ddd3df1d8..88c35942aadec7 100644 --- a/src/mono/mono/metadata/appdomain.h +++ b/src/mono/mono/metadata/appdomain.h @@ -139,7 +139,7 @@ mono_context_get_id (MonoAppContext *context); MONO_API MONO_RT_EXTERNAL_ONLY int32_t mono_context_get_domain_id (MonoAppContext *context); -MONO_API MonoJitInfo * +MONO_API MONO_RT_EXTERNAL_ONLY MonoJitInfo * mono_jit_info_table_find (MonoDomain *domain, void* addr); /* MonoJitInfo accessors */ diff --git a/src/mono/mono/metadata/exception.c b/src/mono/mono/metadata/exception.c index 5e57b278e83d85..e4a4234e6d04e8 100644 --- a/src/mono/mono/metadata/exception.c +++ b/src/mono/mono/metadata/exception.c @@ -1122,7 +1122,6 @@ char * mono_exception_handle_get_native_backtrace (MonoExceptionHandle exc) { #ifdef HAVE_BACKTRACE_SYMBOLS - MonoDomain *domain; MonoArrayHandle arr = MONO_HANDLE_NEW(MonoArray, NULL); int i, len; GString *text; @@ -1132,7 +1131,6 @@ mono_exception_handle_get_native_backtrace (MonoExceptionHandle exc) if (MONO_HANDLE_IS_NULL(arr)) return g_strdup (""); - domain = mono_domain_get (); len = mono_array_handle_length (arr); text = g_string_new_len (NULL, len * 20); MonoGCHandle gchandle; @@ -1145,7 +1143,7 @@ mono_exception_handle_get_native_backtrace (MonoExceptionHandle exc) for (i = 0; i < len; ++i) { gpointer ip; MONO_HANDLE_ARRAY_GETVAL (ip, arr, gpointer, i); - MonoJitInfo *ji = mono_jit_info_table_find (domain, ip); + MonoJitInfo *ji = mono_jit_info_table_find_internal (ip, TRUE, FALSE); if (ji) { char *msg = mono_debug_print_stack_frame (mono_jit_info_get_method (ji), (char*)ip - (char*)ji->code_start, NULL); g_string_append_printf (text, "%s\n", msg); diff --git a/src/mono/mono/metadata/external-only.c b/src/mono/mono/metadata/external-only.c index 01a9e4ad15fb9c..007c624be5db3f 100644 --- a/src/mono/mono/metadata/external-only.c +++ b/src/mono/mono/metadata/external-only.c @@ -24,6 +24,7 @@ #include "external-only.h" #include "threads.h" #include "threads-types.h" +#include "jit-info.h" /** * mono_gchandle_new: @@ -664,3 +665,24 @@ mono_domain_try_type_resolve (MonoDomain *domain, char *name, MonoObject *typebu mono_error_cleanup (error); HANDLE_FUNCTION_RETURN_OBJ (ret); } + +/** + * mono_jit_info_table_find: + * \param domain Domain that you want to look up + * \param addr Points to an address with JITed code. + * + * Use this function to obtain a \c MonoJitInfo* object that can be used to get + * some statistics. You should provide both the \p domain on which you will be + * performing the probe, and an address. Since application domains can share code + * the same address can be in use by multiple domains at once. + * + * This does not return any results for trampolines. + * + * \returns NULL if the address does not belong to JITed code (it might be native + * code or a trampoline) or a valid pointer to a \c MonoJitInfo* . + */ +MonoJitInfo* +mono_jit_info_table_find (MonoDomain *domain, gpointer addr) +{ + return mono_jit_info_table_find_internal (addr, TRUE, FALSE); +} diff --git a/src/mono/mono/metadata/icall-eventpipe.c b/src/mono/mono/metadata/icall-eventpipe.c index 7c1f89eb396e05..c8ab05a558af30 100644 --- a/src/mono/mono/metadata/icall-eventpipe.c +++ b/src/mono/mono/metadata/icall-eventpipe.c @@ -519,7 +519,7 @@ eventpipe_execute_rundown ( events_data.buffer_size = 1024 * sizeof(uint32_t); events_data.buffer = g_new (uint8_t, events_data.buffer_size); events_data.method_events_func = method_events_func; - mono_jit_info_table_foreach_internal (root_domain, eventpipe_fire_method_events_func, &events_data); + mono_jit_info_table_foreach_internal (eventpipe_fire_method_events_func, &events_data); g_free (events_data.buffer); // Iterate all assemblies in domain. diff --git a/src/mono/mono/metadata/jit-info.c b/src/mono/mono/metadata/jit-info.c index 84bac024bb5591..4dd455987afc34 100644 --- a/src/mono/mono/metadata/jit-info.c +++ b/src/mono/mono/metadata/jit-info.c @@ -297,7 +297,7 @@ jit_info_table_find (MonoJitInfoTable *table, MonoThreadHazardPointers *hp, gint * mono_jit_info_get_method () could fail. */ MonoJitInfo* -mono_jit_info_table_find_internal (MonoDomain *domain, gpointer addr, gboolean try_aot, gboolean allow_trampolines) +mono_jit_info_table_find_internal (gpointer addr, gboolean try_aot, gboolean allow_trampolines) { MonoJitInfoTable *table; MonoJitInfo *ji, *module_ji; @@ -328,7 +328,7 @@ mono_jit_info_table_find_internal (MonoDomain *domain, gpointer addr, gboolean t table = (MonoJitInfoTable *)mono_get_hazardous_pointer ((gpointer volatile*)&aot_modules, hp, JIT_INFO_TABLE_HAZARD_INDEX); module_ji = jit_info_table_find (table, hp, (gint8*)addr); if (module_ji) - ji = jit_info_find_in_aot_func (domain, module_ji->d.image, addr); + ji = jit_info_find_in_aot_func (module_ji->d.image, addr); if (hp) mono_hazard_pointer_clear (hp, JIT_INFO_TABLE_HAZARD_INDEX); } @@ -339,29 +339,8 @@ mono_jit_info_table_find_internal (MonoDomain *domain, gpointer addr, gboolean t return ji; } -/** - * mono_jit_info_table_find: - * \param domain Domain that you want to look up - * \param addr Points to an address with JITed code. - * - * Use this function to obtain a \c MonoJitInfo* object that can be used to get - * some statistics. You should provide both the \p domain on which you will be - * performing the probe, and an address. Since application domains can share code - * the same address can be in use by multiple domains at once. - * - * This does not return any results for trampolines. - * - * \returns NULL if the address does not belong to JITed code (it might be native - * code or a trampoline) or a valid pointer to a \c MonoJitInfo* . - */ -MonoJitInfo* -mono_jit_info_table_find (MonoDomain *domain, gpointer addr) -{ - return mono_jit_info_table_find_internal (domain, addr, TRUE, FALSE); -} - void -mono_jit_info_table_foreach_internal (MonoDomain *domain, MonoJitInfoFunc func, gpointer user_data) +mono_jit_info_table_foreach_internal (MonoJitInfoFunc func, gpointer user_data) { MonoJitInfoTable *table; MonoJitInfo *ji; diff --git a/src/mono/mono/metadata/jit-info.h b/src/mono/mono/metadata/jit-info.h index f6d9f42090addc..dabb36af8bf3e1 100644 --- a/src/mono/mono/metadata/jit-info.h +++ b/src/mono/mono/metadata/jit-info.h @@ -282,15 +282,15 @@ mono_jit_info_get_unwind_info (MonoJitInfo *ji); * Installs a new function which is used to return a MonoJitInfo for a method inside * an AOT module. */ -typedef MonoJitInfo *(*MonoJitInfoFindInAot) (MonoDomain *domain, MonoImage *image, gpointer addr); +typedef MonoJitInfo *(*MonoJitInfoFindInAot) (MonoImage *image, gpointer addr); void mono_install_jit_info_find_in_aot (MonoJitInfoFindInAot func); -MonoJitInfo* mono_jit_info_table_find_internal (MonoDomain *domain, gpointer addr, gboolean try_aot, gboolean allow_trampolines); +MonoJitInfo* mono_jit_info_table_find_internal (gpointer addr, gboolean try_aot, gboolean allow_trampolines); typedef void (*MonoJitInfoFunc) (MonoJitInfo *ji, gpointer user_data); void -mono_jit_info_table_foreach_internal (MonoDomain *domain, MonoJitInfoFunc func, gpointer user_data); +mono_jit_info_table_foreach_internal (MonoJitInfoFunc func, gpointer user_data); void mono_jit_code_hash_init (MonoInternalHashTable *jit_code_hash); diff --git a/src/mono/mono/metadata/marshal.c b/src/mono/mono/metadata/marshal.c index 849005b672fa8a..47d25a99f469dc 100644 --- a/src/mono/mono/metadata/marshal.c +++ b/src/mono/mono/metadata/marshal.c @@ -49,6 +49,7 @@ #include "mono/metadata/abi-details.h" #include "mono/metadata/custom-attrs-internals.h" #include "mono/metadata/loader-internals.h" +#include "mono/metadata/jit-info.h" #include "mono/utils/mono-counters.h" #include "mono/utils/mono-tls.h" #include "mono/utils/mono-memory-model.h" @@ -540,7 +541,7 @@ mono_delegate_free_ftnptr (MonoDelegate *delegate) void **method_data; MonoMethod *method; - ji = mono_jit_info_table_find (mono_domain_get (), mono_get_addr_from_ftnptr (ptr)); + ji = mono_jit_info_table_find_internal (mono_get_addr_from_ftnptr (ptr), TRUE, FALSE); /* FIXME we leak wrapper with the interpreter */ if (!ji) return; diff --git a/src/mono/mono/metadata/threads.c b/src/mono/mono/metadata/threads.c index c13cb0fd450904..7dabfc87a2b8d4 100644 --- a/src/mono/mono/metadata/threads.c +++ b/src/mono/mono/metadata/threads.c @@ -2637,7 +2637,7 @@ thread_in_critical_region (MonoThreadInfo *info) } static gboolean -ip_in_critical_region (MonoDomain *domain, gpointer ip) +ip_in_critical_region (gpointer ip) { MonoJitInfo *ji; MonoMethod *method; @@ -2647,7 +2647,7 @@ ip_in_critical_region (MonoDomain *domain, gpointer ip) * It won't find aot methods whose jit info is not yet loaded, * so we preload their jit info in the JIT. */ - ji = mono_jit_info_table_find_internal (domain, ip, FALSE, FALSE); + ji = mono_jit_info_table_find_internal (ip, FALSE, FALSE); if (!ji) return FALSE; diff --git a/src/mono/mono/mini/aot-runtime.c b/src/mono/mono/mini/aot-runtime.c index 144335ff2e67e8..2152352d767d25 100644 --- a/src/mono/mono/mini/aot-runtime.c +++ b/src/mono/mono/mini/aot-runtime.c @@ -1906,7 +1906,7 @@ load_aot_module (MonoAssemblyLoadContext *alc, MonoAssembly *assembly, gpointer */ return; - if (image_is_dynamic (assembly->image) || mono_domain_get () != mono_get_root_domain ()) + if (image_is_dynamic (assembly->image)) return; mono_aot_lock (); @@ -3414,7 +3414,7 @@ sort_methods (MonoAotModule *amodule) * FIXME: Large sizes in the lock free allocator */ MonoJitInfo * -mono_aot_find_jit_info (MonoDomain *domain, MonoImage *image, gpointer addr) +mono_aot_find_jit_info (MonoImage *image, gpointer addr) { ERROR_DECL (error); int pos, left, right, code_len; @@ -3438,10 +3438,6 @@ mono_aot_find_jit_info (MonoDomain *domain, MonoImage *image, gpointer addr) nmethods = amodule->info.nmethods; - if (domain != mono_get_root_domain ()) - /* FIXME: */ - return NULL; - orig_addr = addr; addr = MINI_FTNPTR_TO_ADDR (addr); @@ -3991,7 +3987,7 @@ load_patch_info (MonoAotModule *amodule, MonoMemPool *mp, int n_patches, } static void -register_jump_target_got_slot (MonoDomain *domain, MonoMethod *method, gpointer *got_slot) +register_jump_target_got_slot (MonoMethod *method, gpointer *got_slot) { /* * Jump addresses cannot be patched by the trampoline code since it @@ -4151,7 +4147,7 @@ load_method (MonoAotModule *amodule, MonoImage *image, MonoMethod *method, guint full_name = mono_method_full_name (method, TRUE); if (!jinfo) - jinfo = mono_aot_find_jit_info (mono_get_root_domain (), amodule->assembly->image, code); + jinfo = mono_aot_find_jit_info (amodule->assembly->image, code); mono_trace (G_LOG_LEVEL_DEBUG, MONO_TRACE_AOT, "AOT: FOUND method %s [%p - %p %p]", full_name, code, code + jinfo->code_size, info); g_free (full_name); @@ -4197,7 +4193,7 @@ load_method (MonoAotModule *amodule, MonoImage *image, MonoMethod *method, guint return NULL; } MONO_PROFILER_RAISE (jit_begin, (method)); - jinfo = mono_jit_info_table_find (mono_get_root_domain (), code); + jinfo = mono_jit_info_table_find_internal (code, TRUE, FALSE); g_assert (jinfo); MONO_PROFILER_RAISE (jit_done, (method, jinfo)); } @@ -4438,7 +4434,6 @@ mono_aot_find_method_index (MonoMethod *method) static gboolean init_method (MonoAotModule *amodule, gpointer info, guint32 method_index, MonoMethod *method, MonoClass *init_class, MonoError *error) { - MonoDomain *domain = mono_get_root_domain (); MonoMemPool *mp; MonoClass *klass_to_run_ctor = NULL; gboolean from_plt = method == NULL; @@ -4540,7 +4535,7 @@ init_method (MonoAotModule *amodule, gpointer info, guint32 method_index, MonoMe /* This cannot be resolved in mono_resolve_patch_target () */ if (ji->type == MONO_PATCH_INFO_AOT_JIT_INFO) { // FIXME: Lookup using the index - jinfo = mono_aot_find_jit_info (domain, amodule->assembly->image, code); + jinfo = mono_aot_find_jit_info (amodule->assembly->image, code); ji->type = MONO_PATCH_INFO_ABS; ji->data.target = jinfo; } @@ -4555,7 +4550,7 @@ init_method (MonoAotModule *amodule, gpointer info, guint32 method_index, MonoMe mono_memory_barrier (); got [got_slots [pindex]] = addr; if (ji->type == MONO_PATCH_INFO_METHOD_JUMP) - register_jump_target_got_slot (domain, ji->data.method, &(got [got_slots [pindex]])); + register_jump_target_got_slot (ji->data.method, &(got [got_slots [pindex]])); if (llvm) { void (*init_aotconst) (int, gpointer) = (void (*)(int, gpointer))amodule->info.llvm_init_aotconst; @@ -4571,7 +4566,7 @@ init_method (MonoAotModule *amodule, gpointer info, guint32 method_index, MonoMe } if (mini_debug_options.load_aot_jit_info_eagerly) - jinfo = mono_aot_find_jit_info (domain, amodule->assembly->image, code); + jinfo = mono_aot_find_jit_info (amodule->assembly->image, code); gboolean inited_ok; inited_ok = TRUE; @@ -5318,8 +5313,7 @@ load_function_full (MonoAotModule *amodule, const char *name, MonoTrampInfo **ou g_assertf (target, "Unknown relocation '%p'\n", ji->data.target); } } else { - /* Hopefully the code doesn't have patches which need method or - * domain to be set. + /* Hopefully the code doesn't have patches which need method to be set. */ target = mono_resolve_patch_target (NULL, (guint8 *)code, ji, FALSE, error); mono_error_assert_ok (error); @@ -6240,7 +6234,7 @@ mono_aot_get_class_from_name (MonoImage *image, const char *name_space, const ch } MonoJitInfo * -mono_aot_find_jit_info (MonoDomain *domain, MonoImage *image, gpointer addr) +mono_aot_find_jit_info (MonoImage *image, gpointer addr) { return NULL; } diff --git a/src/mono/mono/mini/aot-runtime.h b/src/mono/mono/mini/aot-runtime.h index 8e70e95da661ff..862e74e948c74e 100644 --- a/src/mono/mono/mini/aot-runtime.h +++ b/src/mono/mono/mini/aot-runtime.h @@ -248,7 +248,7 @@ guint8* mono_aot_get_plt_entry (host_mgreg_t *regs, guint8 *code); guint32 mono_aot_get_plt_info_offset (gpointer aot_module, guint8 *plt_entry, host_mgreg_t *regs, guint8 *code); gboolean mono_aot_get_cached_class_info (MonoClass *klass, MonoCachedClassInfo *res); gboolean mono_aot_get_class_from_name (MonoImage *image, const char *name_space, const char *name, MonoClass **klass); -MonoJitInfo* mono_aot_find_jit_info (MonoDomain *domain, MonoImage *image, gpointer addr); +MonoJitInfo* mono_aot_find_jit_info (MonoImage *image, gpointer addr); gpointer mono_aot_plt_resolve (gpointer aot_module, host_mgreg_t *regs, guint8 *code, MonoError *error); void mono_aot_patch_plt_entry (gpointer aot_module, guint8 *code, guint8 *plt_entry, gpointer *got, host_mgreg_t *regs, guint8 *addr); gpointer mono_aot_get_method_from_vt_slot (MonoVTable *vtable, int slot, MonoError *error); diff --git a/src/mono/mono/mini/debugger-agent.c b/src/mono/mono/mini/debugger-agent.c index 0d815f6e7fe6fc..4fe52904fa2ee1 100644 --- a/src/mono/mono/mini/debugger-agent.c +++ b/src/mono/mono/mini/debugger-agent.c @@ -2298,7 +2298,7 @@ debugger_interrupt_critical (MonoThreadInfo *info, gpointer user_data) /* not attached */ ji = NULL; } else { - ji = mono_jit_info_table_find_internal (domain, MINI_FTNPTR_TO_ADDR (MONO_CONTEXT_GET_IP (&mono_thread_info_get_suspend_state (info)->ctx)), TRUE, TRUE); + ji = mono_jit_info_table_find_internal (MINI_FTNPTR_TO_ADDR (MONO_CONTEXT_GET_IP (&mono_thread_info_get_suspend_state (info)->ctx)), TRUE, TRUE); } /* This is signal safe */ diff --git a/src/mono/mono/mini/driver.c b/src/mono/mono/mini/driver.c index b5a9e823235f9f..4c694d5d0c558f 100644 --- a/src/mono/mono/mini/driver.c +++ b/src/mono/mono/mini/driver.c @@ -1044,7 +1044,6 @@ test_thread_func (gpointer void_arg) int mode = MODE_ALLOC; int i = 0; gulong lookup_successes = 0, lookup_failures = 0; - MonoDomain *domain = test_domain; int thread_num = (int)(td - thread_datas); gboolean modify_thread = thread_num < NUM_THREADS / 2; /* only half of the threads modify the table */ @@ -1073,7 +1072,7 @@ test_thread_func (gpointer void_arg) guint pos = (*data)->start + random () % (*data)->length; MonoJitInfo *ji; - ji = mono_jit_info_table_find (domain, (char*)(gsize)pos); + ji = mono_jit_info_table_find_internal ((char*)(gsize)pos, TRUE, FALSE); g_assert (ji->cas_inited); g_assert ((*data)->ji == ji); @@ -1083,7 +1082,7 @@ test_thread_func (gpointer void_arg) char *addr = (char*)(uintptr_t)pos; MonoJitInfo *ji; - ji = mono_jit_info_table_find (domain, addr); + ji = mono_jit_info_table_find_internal (addr, TRUE, FALSE); /* * FIXME: We are actually not allowed diff --git a/src/mono/mono/mini/mini-exceptions.c b/src/mono/mono/mini/mini-exceptions.c index 060da0bb8b2351..ed98a849d04d17 100644 --- a/src/mono/mono/mini/mini-exceptions.c +++ b/src/mono/mono/mini/mini-exceptions.c @@ -392,7 +392,7 @@ build_stack_trace (struct _Unwind_Context *frame_ctx, void *state) { uintptr_t ip = _Unwind_GetIP (frame_ctx); - if (show_native_addresses || mono_jit_info_table_find (mono_get_root_domain (), (char*)ip)) { + if (show_native_addresses || mono_jit_info_table_find_internal ((char*)ip, TRUE, FALSE)) { GList **trace_ips = (GList **)state; *trace_ips = g_list_prepend (*trace_ips, (gpointer)ip); } @@ -937,7 +937,7 @@ mono_exception_stackframe_obj_walk (MonoStackFrame *captured_frame, MonoExceptio return TRUE; gpointer ip = (gpointer) (captured_frame->method_address + captured_frame->native_offset); - MonoJitInfo *ji = mono_jit_info_table_find_internal (mono_domain_get (), ip, TRUE, TRUE); + MonoJitInfo *ji = mono_jit_info_table_find_internal (ip, TRUE, TRUE); // Other domain maybe? if (!ji) @@ -975,7 +975,6 @@ mono_exception_walk_trace_internal (MonoException *ex, MonoExceptionFrameWalk fu { MONO_REQ_GC_UNSAFE_MODE; - MonoDomain *domain = mono_get_root_domain (); MonoArray *ta = ex->trace_ips; /* Exception is not thrown yet */ @@ -996,7 +995,7 @@ mono_exception_walk_trace_internal (MonoException *ex, MonoExceptionFrameWalk fu if (trace_ip.ji) { ji = trace_ip.ji; } else { - ji = mono_jit_info_table_find (domain, ip); + ji = mono_jit_info_table_find_internal (ip, TRUE, FALSE); } if (ji == NULL) { @@ -1032,7 +1031,6 @@ MonoArray * ves_icall_get_trace (MonoException *exc, gint32 skip, MonoBoolean need_file_info) { ERROR_DECL (error); - MonoDomain *domain = mono_get_root_domain (); MonoArray *res; MonoArray *ta = exc->trace_ips; MonoDebugSourceLocation *location; @@ -1076,7 +1074,7 @@ ves_icall_get_trace (MonoException *exc, gint32 skip, MonoBoolean need_file_info if (trace_ip.ji) { ji = trace_ip.ji; } else { - ji = mono_jit_info_table_find (domain, ip); + ji = mono_jit_info_table_find_internal (ip, TRUE, FALSE); if (ji == NULL) { /* Unmanaged frame */ mono_array_setref_internal (res, i, sf); @@ -1978,7 +1976,7 @@ mini_jit_info_table_find_ext (gpointer addr, gboolean allow_trampolines) { // FIXME: Transition all callers to this function addr = MINI_FTNPTR_TO_ADDR (addr); - return mono_jit_info_table_find_internal (mono_get_root_domain (), addr, TRUE, allow_trampolines); + return mono_jit_info_table_find_internal (addr, TRUE, allow_trampolines); } MonoJitInfo* diff --git a/src/mono/mono/mini/mini-posix.c b/src/mono/mono/mini/mini-posix.c index faedffbb7f692e..6ff3228ca06b3d 100644 --- a/src/mono/mono/mini/mini-posix.c +++ b/src/mono/mono/mini/mini-posix.c @@ -204,7 +204,7 @@ MONO_SIG_HANDLER_FUNC (static, sigabrt_signal_handler) MONO_SIG_HANDLER_GET_CONTEXT; if (mono_thread_internal_current ()) - ji = mono_jit_info_table_find_internal (mono_domain_get (), mono_arch_ip_from_context (ctx), TRUE, TRUE); + ji = mono_jit_info_table_find_internal (mono_arch_ip_from_context (ctx), TRUE, TRUE); if (!ji) { if (mono_chain_signal (MONO_SIG_HANDLER_PARAMS)) return; diff --git a/src/mono/mono/mini/mini-runtime.c b/src/mono/mono/mini/mini-runtime.c index bd5d54450a9ef6..bb25304af2dfa6 100644 --- a/src/mono/mono/mini/mini-runtime.c +++ b/src/mono/mono/mini/mini-runtime.c @@ -219,7 +219,7 @@ mono_get_method_from_ip (void *ip) if (!domain) domain = mono_get_root_domain (); - ji = mono_jit_info_table_find_internal (domain, ip, TRUE, TRUE); + ji = mono_jit_info_table_find_internal (ip, TRUE, TRUE); if (!ji) { user_data.ip = ip; user_data.method = NULL; @@ -3354,7 +3354,7 @@ MONO_SIG_HANDLER_FUNC (, mono_sigfpe_signal_handler) MONO_SIG_HANDLER_INFO_TYPE *info = MONO_SIG_HANDLER_GET_INFO (); MONO_SIG_HANDLER_GET_CONTEXT; - ji = mono_jit_info_table_find_internal (mono_domain_get (), mono_arch_ip_from_context (ctx), TRUE, TRUE); + ji = mono_jit_info_table_find_internal (mono_arch_ip_from_context (ctx), TRUE, TRUE); MONO_ENTER_GC_UNSAFE_UNBALANCED; @@ -3499,7 +3499,7 @@ MONO_SIG_HANDLER_FUNC (, mono_sigsegv_signal_handler) if (domain) { gpointer ip = MINI_FTNPTR_TO_ADDR (mono_arch_ip_from_context (ctx)); - ji = mono_jit_info_table_find_internal (domain, ip, TRUE, TRUE); + ji = mono_jit_info_table_find_internal (ip, TRUE, TRUE); } #ifdef MONO_ARCH_SIGSEGV_ON_ALTSTACK @@ -3687,17 +3687,13 @@ static void mini_init_delegate (MonoDelegateHandle delegate, MonoObjectHandle target, gpointer addr, MonoMethod *method, MonoError *error) { MonoDelegate *del = MONO_HANDLE_RAW (delegate); - MonoDomain *domain = MONO_HANDLE_DOMAIN (delegate); if (!method) { MonoJitInfo *ji; gpointer lookup_addr = MINI_FTNPTR_TO_ADDR (addr); g_assert (addr); - ji = mono_jit_info_table_find_internal (domain, mono_get_addr_from_ftnptr (lookup_addr), TRUE, TRUE); - /* Shared code */ - if (!ji && domain != mono_get_root_domain ()) - ji = mono_jit_info_table_find_internal (mono_get_root_domain (), mono_get_addr_from_ftnptr (lookup_addr), TRUE, TRUE); + ji = mono_jit_info_table_find_internal (mono_get_addr_from_ftnptr (lookup_addr), TRUE, TRUE); if (ji) { if (ji->is_trampoline) { /* Could be an unbox trampoline etc. */ diff --git a/src/mono/mono/profiler/log.c b/src/mono/mono/profiler/log.c index d68ef2ab70edff..e2ea96c06a044f 100644 --- a/src/mono/mono/profiler/log.c +++ b/src/mono/mono/profiler/log.c @@ -3505,7 +3505,7 @@ handle_dumper_queue_entry (void) g_assert (domain && "What happened to the domain pointer?"); g_assert (address && "What happened to the instruction pointer?"); - MonoJitInfo *ji = mono_jit_info_table_find (domain, address); + MonoJitInfo *ji = mono_jit_info_table_find_internal (address, TRUE, FALSE); if (ji) method = mono_jit_info_get_method (ji); diff --git a/src/mono/mono/utils/mono-threads.c b/src/mono/mono/utils/mono-threads.c index fb616aa4911849..52890fe288ea33 100644 --- a/src/mono/mono/utils/mono-threads.c +++ b/src/mono/mono/utils/mono-threads.c @@ -1253,7 +1253,7 @@ is_thread_in_critical_region (MonoThreadInfo *info) return TRUE; if (threads_callbacks.ip_in_critical_region) - return threads_callbacks.ip_in_critical_region ((MonoDomain *) state->unwind_data [MONO_UNWIND_DATA_DOMAIN], (char *) MONO_CONTEXT_GET_IP (&state->ctx)); + return threads_callbacks.ip_in_critical_region ((char *) MONO_CONTEXT_GET_IP (&state->ctx)); return FALSE; } diff --git a/src/mono/mono/utils/mono-threads.h b/src/mono/mono/utils/mono-threads.h index b5606c7e4b3118..8d08f10fe5baf0 100644 --- a/src/mono/mono/utils/mono-threads.h +++ b/src/mono/mono/utils/mono-threads.h @@ -327,7 +327,7 @@ typedef struct { SMR remains functional as its small_id has not been reclaimed. */ void (*thread_detach_with_lock)(THREAD_INFO_TYPE *info); - gboolean (*ip_in_critical_region) (MonoDomain *domain, gpointer ip); + gboolean (*ip_in_critical_region) (gpointer ip); gboolean (*thread_in_critical_region) (THREAD_INFO_TYPE *info); // Called on the affected thread. From ecdfcb163774806da796c30337d94f73c22c436e Mon Sep 17 00:00:00 2001 From: Zoltan Varga Date: Tue, 6 Apr 2021 08:25:33 -0400 Subject: [PATCH 5/5] Remove more domain usage from the JIT code. --- src/mono/mono/metadata/appdomain.c | 10 ---------- src/mono/mono/metadata/appdomain.h | 2 +- src/mono/mono/metadata/external-only.c | 10 ++++++++++ src/mono/mono/mini/interp/interp.c | 10 +++++----- src/mono/mono/mini/interp/transform.c | 2 +- src/mono/mono/mini/mini-arm.c | 14 +++++--------- src/mono/mono/mini/mini-ppc.c | 14 +++++--------- src/mono/mono/mini/mini-trampolines.c | 13 ++++++++++--- 8 files changed, 37 insertions(+), 38 deletions(-) diff --git a/src/mono/mono/metadata/appdomain.c b/src/mono/mono/metadata/appdomain.c index 762858c430b3a4..6426bc8729a168 100644 --- a/src/mono/mono/metadata/appdomain.c +++ b/src/mono/mono/metadata/appdomain.c @@ -507,16 +507,6 @@ mono_domain_try_type_resolve_name (MonoAssembly *assembly, MonoStringHandle name HANDLE_FUNCTION_RETURN_REF (MonoReflectionAssembly, MONO_HANDLE_CAST (MonoReflectionAssembly, ret)); } -/** - * mono_domain_owns_vtable_slot: - * \returns Whether \p vtable_slot is inside a vtable which belongs to \p domain. - */ -gboolean -mono_domain_owns_vtable_slot (MonoDomain *domain, gpointer vtable_slot) -{ - return mono_mem_manager_mp_contains_addr (mono_mem_manager_get_ambient (), vtable_slot); -} - MonoAssembly* mono_try_assembly_resolve (MonoAssemblyLoadContext *alc, const char *fname_raw, MonoAssembly *requesting, MonoError *error) { diff --git a/src/mono/mono/metadata/appdomain.h b/src/mono/mono/metadata/appdomain.h index 88c35942aadec7..b92b9cc854067a 100644 --- a/src/mono/mono/metadata/appdomain.h +++ b/src/mono/mono/metadata/appdomain.h @@ -121,7 +121,7 @@ mono_domain_has_type_resolve (MonoDomain *domain); MONO_API MONO_RT_EXTERNAL_ONLY MonoReflectionAssembly * mono_domain_try_type_resolve (MonoDomain *domain, char *name, MonoObject *tb); -MONO_API mono_bool +MONO_API MONO_RT_EXTERNAL_ONLY mono_bool mono_domain_owns_vtable_slot (MonoDomain *domain, void* vtable_slot); MONO_API MONO_RT_EXTERNAL_ONLY void diff --git a/src/mono/mono/metadata/external-only.c b/src/mono/mono/metadata/external-only.c index 007c624be5db3f..19999e384c7763 100644 --- a/src/mono/mono/metadata/external-only.c +++ b/src/mono/mono/metadata/external-only.c @@ -686,3 +686,13 @@ mono_jit_info_table_find (MonoDomain *domain, gpointer addr) { return mono_jit_info_table_find_internal (addr, TRUE, FALSE); } + +/** + * mono_domain_owns_vtable_slot: + * \returns Whether \p vtable_slot is inside a vtable which belongs to \p domain. + */ +gboolean +mono_domain_owns_vtable_slot (MonoDomain *domain, gpointer vtable_slot) +{ + return mono_mem_manager_mp_contains_addr (mono_mem_manager_get_ambient (), vtable_slot); +} diff --git a/src/mono/mono/mini/interp/interp.c b/src/mono/mono/mini/interp/interp.c index 78f24a129f9b5b..65a10241e09b41 100644 --- a/src/mono/mono/mini/interp/interp.c +++ b/src/mono/mono/mini/interp/interp.c @@ -7276,7 +7276,7 @@ interp_metadata_update_init (MonoError *error) #ifdef ENABLE_METADATA_UPDATE static void -metadata_update_backup_frames (MonoDomain *domain, MonoThreadInfo *info, InterpFrame *frame) +metadata_update_backup_frames (MonoThreadInfo *info, InterpFrame *frame) { while (frame) { mono_trace (G_LOG_LEVEL_DEBUG, MONO_TRACE_METADATA_UPDATE, "threadinfo=%p, copy imethod for method=%s", info, mono_method_full_name (frame->imethod->method, 1)); @@ -7286,7 +7286,7 @@ metadata_update_backup_frames (MonoDomain *domain, MonoThreadInfo *info, InterpF } static void -metadata_update_prepare_to_invalidate (MonoDomain *domain) +metadata_update_prepare_to_invalidate (void) { /* (1) make a copy of imethod for every interpframe that is on the stack, * so we do not invalidate currently running methods */ @@ -7302,7 +7302,7 @@ metadata_update_prepare_to_invalidate (MonoDomain *domain) */ if (context && context->safepoint_frame) { mono_trace (G_LOG_LEVEL_DEBUG, MONO_TRACE_METADATA_UPDATE, "threadinfo=%p, has safepoint frame %p", info, context->safepoint_frame); - metadata_update_backup_frames (domain, info, context->safepoint_frame); + metadata_update_backup_frames (info, context->safepoint_frame); } MonoLMF *lmf = info->jit_data->lmf; @@ -7311,7 +7311,7 @@ metadata_update_prepare_to_invalidate (MonoDomain *domain) MonoLMFExt *ext = (MonoLMFExt *) lmf; if (ext->kind == MONO_LMFEXT_INTERP_EXIT || ext->kind == MONO_LMFEXT_INTERP_EXIT_WITH_CTX) { InterpFrame *frame = ext->interp_exit_data; - metadata_update_backup_frames (domain, info, frame); + metadata_update_backup_frames (info, frame); } } lmf = (MonoLMF *)(((gsize) lmf->previous_lmf) & ~3); @@ -7330,7 +7330,7 @@ interp_invalidate_transformed (void) #ifdef ENABLE_METADATA_UPDATE need_stw_restart = TRUE; mono_stop_world (MONO_THREAD_INFO_FLAGS_NO_GC); - metadata_update_prepare_to_invalidate (mono_get_root_domain ()); + metadata_update_prepare_to_invalidate (); #endif // FIXME: Enumerate all memory managers diff --git a/src/mono/mono/mini/interp/transform.c b/src/mono/mono/mini/interp/transform.c index 29df42cebaa096..fa5ee70b8c3e1f 100644 --- a/src/mono/mono/mini/interp/transform.c +++ b/src/mono/mono/mini/interp/transform.c @@ -9171,7 +9171,7 @@ generate (MonoMethod *method, MonoMethodHeader *header, InterpMethod *rtm, MonoG save_seq_points (td, jinfo); #ifdef ENABLE_EXPERIMENT_TIERED /* debugging aid, it makes `mono_pmip` work. */ - mono_jit_info_table_add (mono_get_root_domain (), jinfo); + mono_jit_info_table_add (jinfo); #endif exit: diff --git a/src/mono/mono/mini/mini-arm.c b/src/mono/mono/mini/mini-arm.c index e0e183467e0296..c58ab2707e9302 100644 --- a/src/mono/mono/mini/mini-arm.c +++ b/src/mono/mono/mini/mini-arm.c @@ -3772,7 +3772,7 @@ emit_thunk (guint8 *code, gconstpointer target) } static void -handle_thunk (MonoCompile *cfg, MonoDomain *domain, guchar *code, const guchar *target) +handle_thunk (MonoCompile *cfg, guchar *code, const guchar *target) { MonoJitInfo *ji = NULL; MonoThunkJitInfo *info; @@ -3781,9 +3781,6 @@ handle_thunk (MonoCompile *cfg, MonoDomain *domain, guchar *code, const guchar * guint8 *orig_target; guint8 *target_thunk; - if (!domain) - domain = mono_domain_get (); - if (cfg) { /* * This can be called multiple times during JITting, @@ -3855,7 +3852,7 @@ handle_thunk (MonoCompile *cfg, MonoDomain *domain, guchar *code, const guchar * } static void -arm_patch_general (MonoCompile *cfg, MonoDomain *domain, guchar *code, const guchar *target) +arm_patch_general (MonoCompile *cfg, guchar *code, const guchar *target) { guint32 *code32 = (guint32*)code; guint32 ins = *code32; @@ -3901,7 +3898,7 @@ arm_patch_general (MonoCompile *cfg, MonoDomain *domain, guchar *code, const guc } } - handle_thunk (cfg, domain, code, target); + handle_thunk (cfg, code, target); return; } @@ -4004,7 +4001,7 @@ arm_patch_general (MonoCompile *cfg, MonoDomain *domain, guchar *code, const guc void arm_patch (guchar *code, const guchar *target) { - arm_patch_general (NULL, NULL, code, target); + arm_patch_general (NULL, code, target); } /* @@ -6078,7 +6075,6 @@ void mono_arch_patch_code_new (MonoCompile *cfg, guint8 *code, MonoJumpInfo *ji, gpointer target) { unsigned char *ip = ji->ip.i + code; - MonoDomain *domain = mono_get_root_domain (); switch (ji->type) { case MONO_PATCH_INFO_SWITCH: { @@ -6125,7 +6121,7 @@ mono_arch_patch_code_new (MonoCompile *cfg, guint8 *code, MonoJumpInfo *ji, gpoi /* everything is dealt with at epilog output time */ break; default: - arm_patch_general (cfg, domain, ip, (const guchar*)target); + arm_patch_general (cfg, ip, (const guchar*)target); break; } } diff --git a/src/mono/mono/mini/mini-ppc.c b/src/mono/mono/mini/mini-ppc.c index c7f4c04a241fbd..88f8e2fcd75502 100644 --- a/src/mono/mono/mini/mini-ppc.c +++ b/src/mono/mono/mini/mini-ppc.c @@ -2692,7 +2692,7 @@ emit_thunk (guint8 *code, gconstpointer target) } static void -handle_thunk (MonoCompile *cfg, MonoDomain *domain, guchar *code, const guchar *target) +handle_thunk (MonoCompile *cfg, guchar *code, const guchar *target) { MonoJitInfo *ji = NULL; MonoThunkJitInfo *info; @@ -2701,9 +2701,6 @@ handle_thunk (MonoCompile *cfg, MonoDomain *domain, guchar *code, const guchar * guint8 *orig_target; guint8 *target_thunk; - if (!domain) - domain = mono_domain_get (); - if (cfg) { /* * This can be called multiple times during JITting, @@ -2792,7 +2789,7 @@ patch_ins (guint8 *code, guint32 ins) } static void -ppc_patch_full (MonoCompile *cfg, MonoDomain *domain, guchar *code, const guchar *target, gboolean is_fd) +ppc_patch_full (MonoCompile *cfg, guchar *code, const guchar *target, gboolean is_fd) { guint32 ins = *(guint32*)code; guint32 prim = ins >> 26; @@ -2832,7 +2829,7 @@ ppc_patch_full (MonoCompile *cfg, MonoDomain *domain, guchar *code, const guchar } } - handle_thunk (cfg, domain, code, target); + handle_thunk (cfg, code, target); return; g_assert_not_reached (); @@ -2940,7 +2937,7 @@ ppc_patch_full (MonoCompile *cfg, MonoDomain *domain, guchar *code, const guchar void ppc_patch (guchar *code, const guchar *target) { - ppc_patch_full (NULL, NULL, code, target, FALSE); + ppc_patch_full (NULL, code, target, FALSE); } void @@ -4618,7 +4615,6 @@ mono_arch_patch_code_new (MonoCompile *cfg, guint8 *code, MonoJumpInfo *ji, gpoi { unsigned char *ip = ji->ip.i + code; gboolean is_fd = FALSE; - MonoDomain *domain = mono_get_root_domain (); switch (ji->type) { case MONO_PATCH_INFO_IP: @@ -4673,7 +4669,7 @@ mono_arch_patch_code_new (MonoCompile *cfg, guint8 *code, MonoJumpInfo *ji, gpoi /* fall through */ #endif default: - ppc_patch_full (cfg, domain, ip, (const guchar*)target, is_fd); + ppc_patch_full (cfg, ip, (const guchar*)target, is_fd); break; } } diff --git a/src/mono/mono/mini/mini-trampolines.c b/src/mono/mono/mini/mini-trampolines.c index 3782eee0b70ca8..3767a9d8e004af 100644 --- a/src/mono/mono/mini/mini-trampolines.c +++ b/src/mono/mono/mini/mini-trampolines.c @@ -153,6 +153,13 @@ mono_create_static_rgctx_trampoline (MonoMethod *m, gpointer addr) } #endif +// FIXME: Is this still needed ? +static gboolean +owns_vtable_slot (gpointer vtable_slot) +{ + return mono_mem_manager_mp_contains_addr (mono_mem_manager_get_ambient (), vtable_slot); +} + gpointer mono_create_ftnptr_arg_trampoline (gpointer arg, gpointer addr) { @@ -507,7 +514,7 @@ common_call_trampoline (host_mgreg_t *regs, guint8 *code, MonoMethod *m, MonoVTa /* * We found AOT compiled code for the method, skip the rest. */ - if (mono_domain_owns_vtable_slot (mono_get_root_domain (), vtable_slot)) + if (owns_vtable_slot (vtable_slot)) *vtable_slot = addr; return mono_create_ftnptr (addr); @@ -690,7 +697,7 @@ common_call_trampoline (host_mgreg_t *regs, guint8 *code, MonoMethod *m, MonoVTa vtable_slot = orig_vtable_slot; if (vtable_slot) { - if (vtable_slot_to_patch && (mono_aot_is_got_entry (code, (guint8*)vtable_slot_to_patch) || mono_domain_owns_vtable_slot (mono_get_root_domain (), vtable_slot_to_patch))) { + if (vtable_slot_to_patch && (mono_aot_is_got_entry (code, (guint8*)vtable_slot_to_patch) || owns_vtable_slot (vtable_slot_to_patch))) { g_assert (*vtable_slot_to_patch); *vtable_slot_to_patch = mono_get_addr_from_ftnptr (addr); } @@ -823,7 +830,7 @@ mono_vcall_trampoline (host_mgreg_t *regs, guint8 *code, int slot, guint8 *tramp addr = mono_aot_get_method_from_vt_slot (vt, slot, error); goto_if_nok (error, leave); if (addr && !m_class_is_valuetype (vt->klass)) { - if (mono_domain_owns_vtable_slot (mono_get_root_domain (), vtable_slot)) + if (owns_vtable_slot (vtable_slot)) *vtable_slot = addr; res = mono_create_ftnptr (addr);