+/*
+ * This header is only installed for use by the debugger:
+ * the structures and the API declared here are not supported.
+ */
+
#ifndef __MONO_DEBUG_H__
#define __MONO_DEBUG_H__
#include <glib.h>
-#include <mono/metadata/debug-mono-symfile.h>
+#include <mono/metadata/image.h>
+#include <mono/metadata/appdomain.h>
+
+typedef struct _MonoSymbolFile MonoSymbolFile;
+typedef struct _MonoSymbolFilePriv MonoSymbolFilePriv;
typedef struct _MonoDebugHandle MonoDebugHandle;
-typedef struct _MonoDebuggerSymbolFileTable MonoDebuggerSymbolFileTable;
+typedef struct _MonoDebugHandlePriv MonoDebugHandlePriv;
+typedef struct _MonoDebugDomainData MonoDebugDomainData;
+typedef struct _MonoDebugDomainDataPriv MonoDebugDomainDataPriv;
+
+typedef struct _MonoDebugVarInfo MonoDebugVarInfo;
+typedef struct _MonoDebugMethodJitInfo MonoDebugMethodJitInfo;
typedef enum {
MONO_DEBUG_FORMAT_NONE,
} MonoDebugFormat;
struct _MonoDebugHandle {
+ const char *image_file;
MonoImage *image;
MonoSymbolFile *symfile;
- GHashTable *wrapper_info;
+ MonoDebugHandlePriv *_priv;
};
-struct _MonoDebuggerSymbolFileTable {
- guint64 magic;
- guint32 version;
- guint32 total_size;
- guint32 count;
- guint32 generation;
- MonoGlobalSymbolFile *global_symfile;
- MonoSymbolFile *symfiles [MONO_ZERO_LEN_ARRAY];
+struct _MonoDebugMethodJitInfo {
+ const guint8 *code_start;
+ guint32 code_size;
+ guint32 prologue_end;
+ guint32 epilogue_begin;
+ const guint8 *wrapper_addr;
+ /* Array of MonoDebugLineNumberEntry */
+ GArray *line_numbers;
+ guint32 num_params;
+ MonoDebugVarInfo *this_var;
+ MonoDebugVarInfo *params;
+ guint32 num_locals;
+ MonoDebugVarInfo *locals;
};
-/* This is incremented each time the symbol table is modified.
- * The debugger looks at this variable and if it has a higher value than its current
- * copy of the symbol table, it must call debugger_update_symbol_file_table().
- */
-extern guint32 mono_debugger_symbol_file_table_generation;
-extern guint32 mono_debugger_symbol_file_table_modified;
+struct _MonoDebugDomainData {
+ guint32 domain_id;
+ MonoDebugMethodJitInfo **jit;
+ MonoDebugDomainDataPriv *_priv;
+};
-/* Caution: This variable may be accessed at any time from the debugger;
- * it is very important not to modify the memory it is pointing to
- * without previously setting this pointer back to NULL.
+/*
+ * These bits of the MonoDebugLocalInfo's "index" field are flags specifying
+ * where the variable is actually stored.
+ *
+ * See relocate_variable() in debug-symfile.c for more info.
*/
-extern MonoDebuggerSymbolFileTable *mono_debugger_symbol_file_table;
+#define MONO_DEBUG_VAR_ADDRESS_MODE_FLAGS 0xf0000000
+
+/* The variable is in register "index". */
+#define MONO_DEBUG_VAR_ADDRESS_MODE_REGISTER 0
+
+/* The variable is at offset "offset" from register "index". */
+#define MONO_DEBUG_VAR_ADDRESS_MODE_REGOFFSET 0x10000000
+
+/* The variable is in the two registers "offset" and "index". */
+#define MONO_DEBUG_VAR_ADDRESS_MODE_TWO_REGISTERS 0x20000000
+
+struct _MonoDebugVarInfo {
+ guint32 index;
+ guint32 offset;
+ guint32 size;
+ guint32 begin_scope;
+ guint32 end_scope;
+};
+
+#define MONO_DEBUGGER_VERSION 47
+#define MONO_DEBUGGER_MAGIC 0x7aff65af4253d427ULL
+
extern MonoDebugFormat mono_debug_format;
+extern GHashTable *mono_debug_handles;
void mono_debug_init (MonoDebugFormat format);
+void mono_debug_init_1 (MonoDomain *domain);
void mono_debug_init_2 (MonoAssembly *assembly);
void mono_debug_cleanup (void);
-void mono_debug_lock (void);
-void mono_debug_unlock (void);
-int mono_debug_update_symbol_file_table (void);
-void mono_debug_add_wrapper (MonoMethod *method, MonoMethod *wrapper_method);
-void mono_debug_add_method (MonoMethod *method, MonoDebugMethodJitInfo *jit);
-void mono_debug_update (void);
+void mono_debug_add_wrapper (MonoMethod *method, gpointer wrapper, MonoDomain *domain);
+
+void mono_debug_add_method (MonoMethod *method, MonoDebugMethodJitInfo *jit, MonoDomain *domain);
gchar *mono_debug_source_location_from_address (MonoMethod *method, guint32 address,
- guint32 *line_number);
+ guint32 *line_number, MonoDomain *domain);
gchar *mono_debug_source_location_from_il_offset (MonoMethod *method, guint32 offset,
guint32 *line_number);
-gint32 mono_debug_il_offset_from_address (MonoMethod *method, gint32 address);
-gint32 mono_debug_address_from_il_offset (MonoMethod *method, gint32 il_offset);
+gint32 mono_debug_il_offset_from_address (MonoMethod *method, gint32 address, MonoDomain *domain);
+gint32 mono_debug_address_from_il_offset (MonoMethod *method, gint32 il_offset, MonoDomain *domain);
#endif /* __MONO_DEBUG_H__ */