#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;
*/
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
*/
struct _MonoDebuggerInfo {
guint64 magic;
- guint32 version;
+ guint32 major_version;
+ guint32 minor_version;
+ guint32 runtime_flags;
guint32 total_size;
guint32 symbol_table_size;
guint32 mono_trampoline_num;
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,
G_GNUC_UNUSED guint64 dummy3, const gchar *string_argument);
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 {