X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Fmetadata%2Fmono-debug.h;h=852a0f3e25e282fbd937c7d8bae8f2153c5009f0;hb=ba6dad488203bdacecee7f23ef35f576ad94f04d;hp=a63914e1e3c068e39c9515b3f7bf5e673fb332fd;hpb=b16cf37a8d93db28650210c829d53dc2b339e4e7;p=mono.git diff --git a/mono/metadata/mono-debug.h b/mono/metadata/mono-debug.h index a63914e1e3c..852a0f3e25e 100644 --- a/mono/metadata/mono-debug.h +++ b/mono/metadata/mono-debug.h @@ -11,6 +11,7 @@ #include typedef struct _MonoSymbolTable MonoSymbolTable; +typedef struct _MonoDebugDataTable MonoDebugDataTable; typedef struct _MonoSymbolFile MonoSymbolFile; typedef struct _MonoSymbolFilePriv MonoSymbolFilePriv; @@ -24,12 +25,14 @@ typedef struct _MonoDebugLexicalBlockEntry MonoDebugLexicalBlockEntry; typedef struct _MonoDebugVarInfo MonoDebugVarInfo; typedef struct _MonoDebugMethodJitInfo MonoDebugMethodJitInfo; typedef struct _MonoDebugMethodAddress MonoDebugMethodAddress; -typedef struct _MonoDebugWrapperData MonoDebugWrapperData; +typedef struct _MonoDebugMethodAddressList MonoDebugMethodAddressList; typedef struct _MonoDebugClassEntry MonoDebugClassEntry; typedef struct _MonoDebugMethodInfo MonoDebugMethodInfo; typedef struct _MonoDebugSourceLocation MonoDebugSourceLocation; +typedef struct _MonoDebugList MonoDebugList; + typedef enum { MONO_DEBUG_FORMAT_NONE, MONO_DEBUG_FORMAT_MONO, @@ -51,6 +54,16 @@ typedef enum { MONO_DEBUGGER_TYPE_KIND_REFERENCE } MonoDebuggerTypeKind; +/* + * NOTE: + * We intentionally do not use GList here since the debugger needs to know about + * the layout of the fields. +*/ +struct _MonoDebugList { + MonoDebugList *next; + gconstpointer data; +}; + struct _MonoSymbolTable { guint64 magic; guint32 version; @@ -61,45 +74,15 @@ struct _MonoSymbolTable { */ MonoDebugHandle *corlib; - /* - * The symbol files. - */ - MonoDebugHandle **symbol_files; - guint32 num_symbol_files; + MonoDebugList *data_tables; + MonoDebugDataTable *type_table; /* - * Data table. - * This is intentionally not a GPtrArray to make it more easy to - * read for the debugger. The `data_tables' field contains - * `num_data_tables' pointers to continuous memory areas. - * - * The data table is basically a big continuous blob, but we need - * to split it up into pieces because we don't know the total size - * in advance and using g_realloc() doesn't work because that may - * reallocate the block to a different address. - */ - guint32 num_data_tables; - gpointer *data_tables; - /* - * Current data table. - * The `current_data_table' points to a blob of `current_data_table_size' - * bytes. - */ - gpointer current_data_table; - guint32 current_data_table_size; - /* - * The offset in the `current_data_table'. + * The symbol files. */ - guint32 current_data_table_offset; + MonoDebugList *symbol_files; }; -typedef enum { - MONO_DEBUG_DATA_ITEM_UNKNOWN = 0, - MONO_DEBUG_DATA_ITEM_METHOD, - MONO_DEBUG_DATA_ITEM_CLASS, - MONO_DEBUG_DATA_ITEM_WRAPPER -} MonoDebugDataItemType; - struct _MonoDebugHandle { guint32 index; char *image_file; @@ -109,7 +92,6 @@ struct _MonoDebugHandle { }; struct _MonoDebugMethodJitInfo { - MonoDebugMethodAddress *address; const guint8 *code_start; guint32 code_size; guint32 prologue_end; @@ -126,26 +108,9 @@ struct _MonoDebugMethodJitInfo { MonoDebugVarInfo *locals; }; -struct _MonoDebugMethodAddress { +struct _MonoDebugMethodAddressList { guint32 size; - guint32 symfile_id; - guint32 domain_id; - guint32 method_id; - guint32 code_size; - guint32 dummy; - const guint8 *code_start; - const guint8 *wrapper_addr; - MonoDebugMethodJitInfo *jit; - guint8 data [MONO_ZERO_LEN_ARRAY]; -}; - -struct _MonoDebugWrapperData { - guint32 size; - guint32 code_size; - MonoMethod *method; - const guint8 *code_start; - const gchar *name; - const gchar *cil_code; + guint32 count; guint8 data [MONO_ZERO_LEN_ARRAY]; }; @@ -186,30 +151,39 @@ struct _MonoDebugVarInfo { guint32 end_scope; }; -#define MONO_DEBUGGER_VERSION 58 +#define MONO_DEBUGGER_VERSION 60 #define MONO_DEBUGGER_MAGIC 0x7aff65af4253d427ULL extern MonoSymbolTable *mono_symbol_table; extern MonoDebugFormat mono_debug_format; extern GHashTable *mono_debug_handles; +extern gint32 mono_debug_debugger_version; + +void mono_debug_list_add (MonoDebugList **list, gconstpointer data); +void mono_debug_list_remove (MonoDebugList **list, gconstpointer data); void mono_debug_init (MonoDebugFormat format); -void mono_debug_init_1 (MonoDomain *domain); -void mono_debug_init_2 (MonoAssembly *assembly); -void mono_debug_init_2_memory (MonoImage *image, const guint8 *raw_contents, int size); +void mono_debug_open_image_from_memory (MonoImage *image, const guint8 *raw_contents, int size); void mono_debug_cleanup (void); +void mono_debug_close_image (MonoImage *image); + +void mono_debug_domain_unload (MonoDomain *domain); +void mono_debug_domain_create (MonoDomain *domain); + gboolean mono_debug_using_mono_debugger (void); -MonoDebugMethodAddress *mono_debug_add_method (MonoMethod *method, MonoDebugMethodJitInfo *jit, - MonoDomain *domain); -MonoDebugMethodJitInfo *mono_debug_read_method (MonoDebugMethodAddress *address); -void mono_debug_free_method_jit_info (MonoDebugMethodJitInfo *jit); +MonoDebugMethodAddress * +mono_debug_add_method (MonoMethod *method, MonoDebugMethodJitInfo *jit, MonoDomain *domain); + +MonoDebugMethodInfo * +mono_debug_lookup_method (MonoMethod *method); -MonoDebugMethodInfo *mono_debug_lookup_method (MonoMethod *method); +MonoDebugMethodAddressList * +mono_debug_lookup_method_addresses (MonoMethod *method); MonoDebugMethodJitInfo* -mono_debug_find_method (MonoDebugMethodInfo *minfo, MonoDomain *domain); +mono_debug_find_method (MonoMethod *method, MonoDomain *domain); /* * Line number support.