From 9ec5b63e10abbadc04c65066b8f2c87381d15939 Mon Sep 17 00:00:00 2001 From: Aleksey Kliger Date: Fri, 14 Jan 2022 19:41:31 -0500 Subject: [PATCH] [metadata] Add mono_get_defaults () And use it in the debugger --- src/mono/mono/component/debugger-agent.c | 16 ++++++---------- src/mono/mono/component/debugger-stub.c | 4 ++-- src/mono/mono/component/debugger.h | 4 +--- src/mono/mono/component/mini-wasm-debugger.c | 6 ++---- src/mono/mono/metadata/class-internals.h | 4 ++++ src/mono/mono/metadata/loader.c | 6 ++++++ src/mono/mono/mini/mini-runtime.c | 2 +- 7 files changed, 22 insertions(+), 20 deletions(-) diff --git a/src/mono/mono/component/debugger-agent.c b/src/mono/mono/component/debugger-agent.c index 79f0295b2e76f..f9712c5b77e38 100644 --- a/src/mono/mono/component/debugger-agent.c +++ b/src/mono/mono/component/debugger-agent.c @@ -403,8 +403,6 @@ static gint32 suspend_count; /* Whenever to buffer reply messages and send them together */ static gboolean buffer_replies; -MonoDefaults *mdbg_mono_defaults; - #ifndef TARGET_WASM #define GET_TLS_DATA_FROM_THREAD(thread) \ DebuggerTlsData *tls = NULL; \ @@ -727,13 +725,11 @@ mono_debugger_is_disconnected (void) } static void -debugger_agent_init (MonoDefaults *mono_defaults) +debugger_agent_init (void) { if (!agent_config.enabled) return; - mdbg_mono_defaults = mono_defaults; - DebuggerEngineCallbacks cbs; memset (&cbs, 0, sizeof (cbs)); cbs.tls_get_restore_state = tls_get_restore_state; @@ -4750,7 +4746,7 @@ static void debugger_agent_handle_exception (MonoException *exc, MonoContext *throw_ctx, MonoContext *catch_ctx, StackFrameInfo *catch_frame) { - if (catch_ctx == NULL && catch_frame == NULL && get_mini_debug_options ()->suspend_on_unhandled && mono_object_class (exc) != mdbg_mono_defaults->threadabortexception_class) { + if (catch_ctx == NULL && catch_frame == NULL && get_mini_debug_options ()->suspend_on_unhandled && mono_object_class (exc) != mono_get_defaults ()->threadabortexception_class) { mono_runtime_printf_err ("Unhandled exception, suspending..."); while (1) ; @@ -6512,7 +6508,7 @@ module_apply_changes (MonoImage *image, MonoArray *dmeta, MonoArray *dil, MonoAr static void buffer_add_cattr_arg (Buffer *buf, MonoType *t, MonoDomain *domain, MonoObject *val) { - if (val && val->vtable->klass == mdbg_mono_defaults->runtimetype_class) { + if (val && val->vtable->klass == mono_get_defaults ()->runtimetype_class) { /* Special case these so the client doesn't have to handle Type objects */ buffer_add_byte (buf, VALUE_TYPE_ID_TYPE); @@ -8712,16 +8708,16 @@ method_commands_internal (int command, MonoMethod *method, MonoDomain *domain, g g_error ("Could not load token due to %s", mono_error_get_message (error)); } - if (handle_class == mdbg_mono_defaults->typehandle_class) { + if (handle_class == mono_get_defaults ()->typehandle_class) { buffer_add_byte (buf, TOKEN_TYPE_TYPE); if (method->wrapper_type == MONO_WRAPPER_DYNAMIC_METHOD) buffer_add_typeid (buf, domain, (MonoClass *) val); else buffer_add_typeid (buf, domain, mono_class_from_mono_type_internal ((MonoType*)val)); - } else if (handle_class == mdbg_mono_defaults->fieldhandle_class) { + } else if (handle_class == mono_get_defaults ()->fieldhandle_class) { buffer_add_byte (buf, TOKEN_TYPE_FIELD); buffer_add_fieldid (buf, domain, (MonoClassField *)val); - } else if (handle_class == mdbg_mono_defaults->methodhandle_class) { + } else if (handle_class == mono_get_defaults ()->methodhandle_class) { buffer_add_byte (buf, TOKEN_TYPE_METHOD); buffer_add_methodid (buf, domain, (MonoMethod *)val); } else if (handle_class == mono_get_string_class ()) { diff --git a/src/mono/mono/component/debugger-stub.c b/src/mono/mono/component/debugger-stub.c index 224f531f79648..4235a97eb5017 100644 --- a/src/mono/mono/component/debugger-stub.c +++ b/src/mono/mono/component/debugger-stub.c @@ -16,7 +16,7 @@ static void stub_debugger_parse_options (char *options); static void -stub_debugger_init (MonoDefaults *mono_defaults); +stub_debugger_init (void); static void stub_debugger_breakpoint_hit (void *sigctx); @@ -113,7 +113,7 @@ stub_debugger_parse_options (char *options) } static void -stub_debugger_init (MonoDefaults *mono_defaults) +stub_debugger_init (void) { } diff --git a/src/mono/mono/component/debugger.h b/src/mono/mono/component/debugger.h index a573750b1fa9f..633bfc492cc03 100644 --- a/src/mono/mono/component/debugger.h +++ b/src/mono/mono/component/debugger.h @@ -172,7 +172,7 @@ typedef struct _DebuggerTlsData DebuggerTlsData; typedef struct MonoComponentDebugger { MonoComponent component; - void (*init) (MonoDefaults *mono_defaults); + void (*init) (void); void (*user_break) (void); void (*parse_options) (char *options); void (*breakpoint_hit) (void *sigctx); @@ -199,8 +199,6 @@ typedef struct MonoComponentDebugger { } MonoComponentDebugger; -extern MonoDefaults *mdbg_mono_defaults; - #define DE_ERR_NONE 0 // WARNING WARNING WARNING // Error codes MUST match those of sdb for now diff --git a/src/mono/mono/component/mini-wasm-debugger.c b/src/mono/mono/component/mini-wasm-debugger.c index 0cfcd5cce9588..81a2011e1ef54 100644 --- a/src/mono/mono/component/mini-wasm-debugger.c +++ b/src/mono/mono/component/mini-wasm-debugger.c @@ -141,7 +141,7 @@ mono_wasm_enable_debugging_internal (int debug_level) } static void -mono_wasm_debugger_init (MonoDefaults *mono_defaults) +mono_wasm_debugger_init (void) { int debug_level = mono_wasm_get_debug_level(); mono_wasm_enable_debugging_internal (debug_level); @@ -149,8 +149,6 @@ mono_wasm_debugger_init (MonoDefaults *mono_defaults) if (!debugger_enabled) return; - mdbg_mono_defaults = mono_defaults; - DebuggerEngineCallbacks cbs = { .tls_get_restore_state = tls_get_restore_state, .try_process_suspend = try_process_suspend, @@ -433,7 +431,7 @@ mono_wasm_breakpoint_hit (void) } static void -mono_wasm_debugger_init (MonoDefaults *mono_defaults) +mono_wasm_debugger_init (void) { } diff --git a/src/mono/mono/metadata/class-internals.h b/src/mono/mono/metadata/class-internals.h index 64892b226ee71..01104274c1f3b 100644 --- a/src/mono/mono/metadata/class-internals.h +++ b/src/mono/mono/metadata/class-internals.h @@ -987,6 +987,10 @@ typedef struct { /* If you need a MonoType, use one of the mono_get_*_type () functions in class-inlines.h */ extern MonoDefaults mono_defaults; +MONO_COMPONENT_API +MonoDefaults * +mono_get_defaults (void); + #define GENERATE_GET_CLASS_WITH_CACHE_DECL(shortname) \ MonoClass* mono_class_get_##shortname##_class (void); diff --git a/src/mono/mono/metadata/loader.c b/src/mono/mono/metadata/loader.c index 7098bb527a4b3..e0ce3f575ae06 100644 --- a/src/mono/mono/metadata/loader.c +++ b/src/mono/mono/metadata/loader.c @@ -107,6 +107,12 @@ mono_loader_init () } } +MonoDefaults * +mono_get_defaults (void) +{ + return &mono_defaults; +} + void mono_global_loader_data_lock (void) { diff --git a/src/mono/mono/mini/mini-runtime.c b/src/mono/mono/mini/mini-runtime.c index 5aa5426d4e4f3..78d588f38a435 100644 --- a/src/mono/mono/mini/mini-runtime.c +++ b/src/mono/mono/mini/mini-runtime.c @@ -4522,7 +4522,7 @@ mini_init (const char *filename, const char *runtime_version) if (default_opt & MONO_OPT_AOT) mono_aot_init (); - mono_component_debugger ()->init (&mono_defaults); + mono_component_debugger ()->init (); #ifdef MONO_ARCH_GSHARED_SUPPORTED mono_set_generic_sharing_supported (TRUE);