static gboolean is_ip_in_managed_allocator (MonoDomain *domain, gpointer ip) { MonoJitInfo *ji; if (!mono_thread_internal_current ()) /* Happens during thread attach */ return FALSE; if (!ip || !domain) return FALSE; if (!sgen_has_critical_method ()) return FALSE; /* * mono_jit_info_table_find is not async safe since it calls into the AOT runtime to load information for * missing methods (#13951). To work around this, we disable the AOT fallback. For this to work, the JIT needs * to register the jit info for all GC critical methods after they are JITted/loaded. */ ji = mono_jit_info_table_find_internal (domain, (char *)ip, FALSE, FALSE); if (!ji) return FALSE; return sgen_is_critical_method (mono_jit_info_get_method (ji)); }
MONO_SIG_HANDLER_FUNC (static, sigabrt_signal_handler) { MonoJitInfo *ji = NULL; MONO_SIG_HANDLER_INFO_TYPE *info = MONO_SIG_HANDLER_GET_INFO (); 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); if (!ji) { if (mono_chain_signal (MONO_SIG_HANDLER_PARAMS)) return; mono_handle_native_crash ("SIGABRT", ctx, info); } }
MonoJitInfo* mono_jit_info_table_find (MonoDomain *domain, char *addr) { return mono_jit_info_table_find_internal (domain, addr, TRUE, FALSE); }