Use g_assertion_message instead of exit to kill an iOS app.
[mono.git] / mono / mini / debug-debugger.h
index 8aad57a0fa9e376a6b774a959e213a3b35f8c99d..b7c5b43e6df38ec3999d531b53e8d8c47e738b31 100644 (file)
@@ -11,6 +11,7 @@
 
 #include <mono/metadata/class-internals.h>
 #include <mono/metadata/mono-debug-debugger.h>
+#include <libgc/include/libgc-mono-debugger.h>
 #include "debug-mini.h"
 
 typedef struct _MonoDebuggerInfo               MonoDebuggerInfo;
@@ -22,6 +23,11 @@ typedef struct _MonoDebuggerMetadataInfo     MonoDebuggerMetadataInfo;
  */
 extern guint8 *mono_trampoline_code [];
 
+typedef enum {
+       DEBUGGER_RUNTIME_FLAGS_NONE             = 0,
+       DEBUGGER_RUNTIME_FLAGS_ATTACH_OK        = 1
+} MonoDebuggerRuntimeFlags;
+
 /*
  * There's a global data symbol called `MONO_DEBUGGER__debugger_info' which
  * contains pointers to global variables and functions which must be accessed
@@ -29,41 +35,65 @@ extern guint8 *mono_trampoline_code [];
  */
 struct _MonoDebuggerInfo {
        guint64 magic;
-       guint32 version;
+       guint32 major_version;
+       guint32 minor_version;
+       guint32 runtime_flags;
        guint32 total_size;
        guint32 symbol_table_size;
-       guint32 dummy;
-       gpointer notification_function;
+       guint32 mono_trampoline_num;
        guint8 **mono_trampoline_code;
+       gpointer notification_function;
        MonoSymbolTable **symbol_table;
        MonoDebuggerMetadataInfo *metadata_info;
+       gint32 *debugger_version;
+
        guint64 (*compile_method) (guint64 method_argument);
        guint64 (*get_virtual_method) (guint64 object_argument, guint64 method_argument);
        guint64 (*get_boxed_object_method) (guint64 klass_argument, guint64 val_argument);
        MonoInvokeFunc runtime_invoke;
        guint64 (*class_get_static_field_data) (guint64 klass);
        guint64 (*run_finally) (guint64 argument1, guint64 argument2);
-       void (*attach) (void);
-       void (*detach) (void);
        void (*initialize) (void);
-       void * (*get_lmf_addr) (void);
 
        guint64 (*create_string) (G_GNUC_UNUSED guint64 dummy1, G_GNUC_UNUSED guint64 dummy2,
-                                 const gchar *string_argument);
+                                 G_GNUC_UNUSED guint64 dummy3, const gchar *string_argument);
        gint64 (*lookup_class) (guint64 image_argument, G_GNUC_UNUSED guint64 dummy,
-                               gchar *full_name);
-       guint64 (*insert_breakpoint) (guint64 method_argument, guint64 index);
-       void (*remove_breakpoint) (G_GNUC_UNUSED guint64 dummy, guint64 index);
+                               G_GNUC_UNUSED guint64 dummy2, gchar *full_name);
+
+       guint64 (*insert_method_breakpoint) (guint64 method_argument, guint64 index);
+       guint64 (*insert_source_breakpoint) (guint64 image_argument, guint64 token,
+                                            guint64 index, const gchar *class_name);
+       void (*remove_breakpoint) (guint64 index, G_GNUC_UNUSED guint64 dummy);
+
+       guint64 (*rgister_class_init_callback) (guint64 image_argument, guint64 token,
+                                               guint64 index, const gchar *class_name);
+       void (*remove_class_init_callback) (guint64 index, G_GNUC_UNUSED guint64 dummy);
 
-       gint32 *debugger_version;
        MonoDebuggerThreadInfo **thread_table;
 
        guint8 **executable_code_buffer;
-       volatile const MonoDebuggerBreakpointInfo **breakpoint_info_area;
-       volatile const MonoDebuggerBreakpointInfo ***breakpoint_table;
+       MonoBreakpointInfo *mono_breakpoint_info;
+       gssize *mono_breakpoint_info_index;
 
        guint32 executable_code_buffer_size;
-       guint32 breakpoint_table_size;
+       guint32 breakpoint_array_size;
+
+       guint64 (*get_method_signature) (guint64 method_argument, G_GNUC_UNUSED guint64 dummy);
+       guint64 (*init_code_buffer) (void);
+
+       /*
+        * These are only needed when attaching.
+        */
+       GCThreadFunctions **thread_vtable_ptr;
+       GCThreadFunctions *debugger_thread_vtable;
+       void (**event_handler_ptr) (MonoDebuggerEvent event, guint64 data, guint64 arg);
+       void (*debugger_event_handler) (MonoDebuggerEvent event, guint64 data, guint64 arg);
+       gint32 *using_mono_debugger;
+       gint32 *interruption_request;
+
+       guint64 (*abort_runtime_invoke) (G_GNUC_UNUSED guint64 dummy1, G_GNUC_UNUSED guint64 dummy2);
+
+       guint32 *thread_abort_signal;
 };
 
 struct _MonoDebuggerMetadataInfo {