[runtime] Centralize the processing of MonoTrampInfo structures into the mono_tramp_i...
[mono.git] / mono / mini / debug-debugger.c
index 45f75b7332377ccf6fdbb7dacfe0e7a27a329a05..a103595c0bf72426da06cef43e283fb219b22e1a 100644 (file)
@@ -1,3 +1,12 @@
+/*
+ * debug-debugger.c: Hard debugger support (mdb)
+ *
+ * Author:
+ *
+ * Copyright 2006-2010 Novell, Inc.
+ */
+#if MONO_DEBUGGER_SUPPORTED
+
 #include <config.h>
 #include <mono/io-layer/io-layer.h>
 #include <mono/metadata/threads.h>
  * configure.in checks whether we're using the included libgc and disables the debugger if not.
  */
 
-#if !defined(MONO_DEBUGGER_SUPPORTED)
-#error "Some clown tried to compile debug-debugger.c on an unsupported platform - fix Makefile.am!"
-#elif !defined(USE_INCLUDED_LIBGC)
-#error "Some clown #defined MONO_DEBUGGER_SUPPORTED without USE_INCLUDED_GC - fix configure.in!"
+#if !defined(USE_INCLUDED_LIBGC)
+#error "Inconsistency detected: #defined MONO_DEBUGGER_SUPPORTED without USE_INCLUDED_GC - fix configure.in!"
 #endif
 
 static guint64 debugger_compile_method (guint64 method_arg);
@@ -50,11 +57,15 @@ static guint64 debugger_register_class_init_callback (guint64 image_argument, gu
 static void debugger_remove_class_init_callback (guint64 index, G_GNUC_UNUSED guint64 dummy);
 static guint64 debugger_get_method_signature (guint64 argument1, G_GNUC_UNUSED guint64 argument2);
 
+static guint64 debugger_abort_runtime_invoke (G_GNUC_UNUSED guint64 dummy1, G_GNUC_UNUSED guint64 dummy2);
+
 #define EXECUTABLE_CODE_BUFFER_SIZE 4096
 static guint8 *debugger_executable_code_buffer = NULL;
 
 static GCThreadFunctions debugger_thread_vtable;
 
+static guint32 debugger_thread_abort_signal = 0;
+
 static MonoDebuggerMetadataInfo debugger_metadata_info = {
        sizeof (MonoDebuggerMetadataInfo),
        sizeof (MonoDefaults),
@@ -62,10 +73,10 @@ static MonoDebuggerMetadataInfo debugger_metadata_info = {
        MONO_SIZEOF_TYPE,
        sizeof (MonoArrayType),
        sizeof (MonoClass),
-       sizeof (MonoThread),
-       G_STRUCT_OFFSET (MonoThread, tid),
-       G_STRUCT_OFFSET (MonoThread, stack_ptr),
-       G_STRUCT_OFFSET (MonoThread, end_stack),
+       sizeof (MonoInternalThread),
+       G_STRUCT_OFFSET (MonoInternalThread, tid),
+       G_STRUCT_OFFSET (MonoInternalThread, stack_ptr),
+       G_STRUCT_OFFSET (MonoInternalThread, end_stack),
        G_STRUCT_OFFSET (MonoClass, image),
        G_STRUCT_OFFSET (MonoClass, instance_size),
        G_STRUCT_OFFSET (MonoClass, parent),
@@ -167,9 +178,19 @@ MonoDebuggerInfo MONO_DEBUGGER__debugger_info = {
        debugger_event_handler,
 
        &_mono_debug_using_mono_debugger,
-       (gint32*)&_mono_debugger_interruption_request
+       (gint32*)&_mono_debugger_interruption_request,
+
+       &debugger_abort_runtime_invoke,
+
+       &debugger_thread_abort_signal
 };
 
+static guint64
+debugger_abort_runtime_invoke (G_GNUC_UNUSED guint64 dummy1, G_GNUC_UNUSED guint64 dummy2)
+{
+       return mono_debugger_abort_runtime_invoke ();
+}
+
 static guint64
 debugger_compile_method (guint64 method_arg)
 {
@@ -497,6 +518,8 @@ mini_debugger_init (void)
        debugger_executable_code_buffer = mono_global_codeman_reserve (EXECUTABLE_CODE_BUFFER_SIZE);
        mono_debugger_event_handler = debugger_event_handler;
 
+       debugger_thread_abort_signal = mono_thread_get_abort_signal ();
+
        /*
         * Use an indirect call so gcc can't optimize it away.
         */
@@ -518,6 +541,7 @@ mini_debugger_init (void)
 void
 mini_debugger_set_attach_ok (void)
 {
+       debugger_thread_abort_signal = mono_thread_get_abort_signal ();
        MONO_DEBUGGER__debugger_info.runtime_flags |= DEBUGGER_RUNTIME_FLAGS_ATTACH_OK;
 }
 
@@ -587,3 +611,4 @@ mini_debugger_main (MonoDomain *domain, MonoAssembly *assembly, int argc, char *
 
        return 0;
 }
+#endif /* MONO_DEBUGGER_SUPPORTED */