X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Fmetadata%2Fmono-debug.h;h=7a801f41e8a48ee1bce977ac90d1fcc6ce11e256;hb=64e2556130a5220a09a770b85b442d0ff34bcbda;hp=b87f7184ebbcc0fc2b83c282f303ebc3a6e3fc99;hpb=6110fc90713ce59ff0996fcd3520e09a96575820;p=mono.git diff --git a/mono/metadata/mono-debug.h b/mono/metadata/mono-debug.h index b87f7184ebb..7a801f41e8a 100644 --- a/mono/metadata/mono-debug.h +++ b/mono/metadata/mono-debug.h @@ -11,45 +11,40 @@ #include typedef struct _MonoSymbolTable MonoSymbolTable; +typedef struct _MonoDebugDataTable MonoDebugDataTable; typedef struct _MonoSymbolFile MonoSymbolFile; -typedef struct _MonoSymbolFilePriv MonoSymbolFilePriv; typedef struct _MonoDebugHandle MonoDebugHandle; -typedef struct _MonoDebugHandlePriv MonoDebugHandlePriv; typedef struct _MonoDebugLineNumberEntry MonoDebugLineNumberEntry; -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, MONO_DEBUG_FORMAT_DEBUGGER } MonoDebugFormat; -typedef enum { - MONO_DEBUGGER_TYPE_KIND_UNKNOWN = 1, - MONO_DEBUGGER_TYPE_KIND_FUNDAMENTAL, - MONO_DEBUGGER_TYPE_KIND_STRING, - MONO_DEBUGGER_TYPE_KIND_SZARRAY, - MONO_DEBUGGER_TYPE_KIND_ARRAY, - MONO_DEBUGGER_TYPE_KIND_POINTER, - MONO_DEBUGGER_TYPE_KIND_ENUM, - MONO_DEBUGGER_TYPE_KIND_OBJECT, - MONO_DEBUGGER_TYPE_KIND_STRUCT, - MONO_DEBUGGER_TYPE_KIND_CLASS, - MONO_DEBUGGER_TYPE_KIND_CLASS_INFO, - 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; @@ -60,56 +55,24 @@ struct _MonoSymbolTable { * Corlib and metadata info. */ MonoDebugHandle *corlib; + MonoDebugDataTable *global_data_table; + MonoDebugList *data_tables; /* * The symbol files. */ - MonoDebugHandle **symbol_files; - guint32 num_symbol_files; - - /* - * 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'. - */ - 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; - const char *image_file; + char *image_file; MonoImage *image; + MonoDebugDataTable *type_table; MonoSymbolFile *symfile; - MonoDebugHandlePriv *_priv; }; struct _MonoDebugMethodJitInfo { - MonoDebugMethodAddress *address; const guint8 *code_start; guint32 code_size; guint32 prologue_end; @@ -117,8 +80,6 @@ struct _MonoDebugMethodJitInfo { const guint8 *wrapper_addr; guint32 num_line_numbers; MonoDebugLineNumberEntry *line_numbers; - guint32 num_lexical_blocks; - MonoDebugLexicalBlockEntry *lexical_blocks; guint32 num_params; MonoDebugVarInfo *this_var; MonoDebugVarInfo *params; @@ -126,32 +87,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; - guint8 data [MONO_ZERO_LEN_ARRAY]; -}; - -struct _MonoDebugClassEntry { - guint32 size; - guint32 symfile_id; + guint32 count; guint8 data [MONO_ZERO_LEN_ARRAY]; }; @@ -178,38 +116,63 @@ struct _MonoDebugSourceLocation { /* The variable is in the two registers "offset" and "index". */ #define MONO_DEBUG_VAR_ADDRESS_MODE_TWO_REGISTERS 0x20000000 +/* The variable is dead. */ +#define MONO_DEBUG_VAR_ADDRESS_MODE_DEAD 0x30000000 + struct _MonoDebugVarInfo { guint32 index; guint32 offset; guint32 size; guint32 begin_scope; guint32 end_scope; + MonoType *type; }; -#define MONO_DEBUGGER_VERSION 57 +#define MONO_DEBUGGER_MAJOR_VERSION 80 +#define MONO_DEBUGGER_MINOR_VERSION 0 #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; +extern gint32 _mono_debug_using_mono_debugger; + +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); + +void +mono_debug_free_method_jit_info (MonoDebugMethodJitInfo *jit); + + +void +mono_debug_add_delegate_trampoline (gpointer code, int size); + +int +mono_debug_lookup_locals (MonoMethod *method, char ***names, int **indexes); /* * Line number support.