X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Fmetadata%2Fmono-debug.h;h=daba9e2ee1cdf81f35105014fd1b097b0bd296e0;hb=157cb97206f627685c15410953d2767146f6e426;hp=9599f95adb72c3af42a1579aaa2282cb308154d1;hpb=f6f244119f3bde495ca10ee7699e9db0f102debb;p=mono.git diff --git a/mono/metadata/mono-debug.h b/mono/metadata/mono-debug.h index 9599f95adb7..daba9e2ee1c 100644 --- a/mono/metadata/mono-debug.h +++ b/mono/metadata/mono-debug.h @@ -1,20 +1,37 @@ +/* + * 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 +#include #include #include +MONO_BEGIN_DECLS + +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 _MonoDebugDomainData MonoDebugDomainData; -typedef struct _MonoDebugDomainDataPriv MonoDebugDomainDataPriv; + +typedef struct _MonoDebugLineNumberEntry MonoDebugLineNumberEntry; typedef struct _MonoDebugVarInfo MonoDebugVarInfo; typedef struct _MonoDebugMethodJitInfo MonoDebugMethodJitInfo; +typedef struct _MonoDebugMethodAddress MonoDebugMethodAddress; +typedef struct _MonoDebugMethodAddressList MonoDebugMethodAddressList; +typedef struct _MonoDebugClassEntry MonoDebugClassEntry; + +typedef struct _MonoDebugMethodInfo MonoDebugMethodInfo; +typedef struct _MonoDebugLocalsInfo MonoDebugLocalsInfo; +typedef struct _MonoDebugSourceLocation MonoDebugSourceLocation; + +typedef struct _MonoDebugList MonoDebugList; typedef enum { MONO_DEBUG_FORMAT_NONE, @@ -22,32 +39,69 @@ typedef enum { MONO_DEBUG_FORMAT_DEBUGGER } MonoDebugFormat; +/* + * NOTE: + * We intentionally do not use GList here since the debugger needs to know about + * the layout of the fields. +*/ +struct _MonoDebugList { + MonoDebugList *next; + const void* data; +}; + +struct _MonoSymbolTable { + uint64_t magic; + uint32_t version; + uint32_t total_size; + + /* + * Corlib and metadata info. + */ + MonoDebugHandle *corlib; + MonoDebugDataTable *global_data_table; + MonoDebugList *data_tables; + + /* + * The symbol files. + */ + MonoDebugList *symbol_files; +}; + struct _MonoDebugHandle { - const char *image_file; + uint32_t index; + char *image_file; MonoImage *image; + MonoDebugDataTable *type_table; MonoSymbolFile *symfile; - MonoDebugHandlePriv *_priv; }; 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; + const mono_byte *code_start; + uint32_t code_size; + uint32_t prologue_end; + uint32_t epilogue_begin; + const mono_byte *wrapper_addr; + uint32_t num_line_numbers; + MonoDebugLineNumberEntry *line_numbers; + uint32_t num_params; MonoDebugVarInfo *this_var; MonoDebugVarInfo *params; - guint32 num_locals; + uint32_t num_locals; MonoDebugVarInfo *locals; + MonoDebugVarInfo *gsharedvt_info_var; + MonoDebugVarInfo *gsharedvt_locals_var; +}; + +struct _MonoDebugMethodAddressList { + uint32_t size; + uint32_t count; + mono_byte data [MONO_ZERO_LEN_ARRAY]; }; -struct _MonoDebugDomainData { - guint32 domain_id; - MonoDebugMethodJitInfo **jit; - MonoDebugDomainDataPriv *_priv; +struct _MonoDebugSourceLocation { + char *source_file; + uint32_t row, column; + uint32_t il_offset; }; /* @@ -67,31 +121,100 @@ struct _MonoDebugDomainData { /* 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 + +/* Same as REGOFFSET, but do an indirection */ +#define MONO_DEBUG_VAR_ADDRESS_MODE_REGOFFSET_INDIR 0x40000000 + +/* gsharedvt local */ +#define MONO_DEBUG_VAR_ADDRESS_MODE_GSHAREDVT_LOCAL 0x50000000 + struct _MonoDebugVarInfo { - guint32 index; - guint32 offset; - guint32 size; - guint32 begin_scope; - guint32 end_scope; + uint32_t index; + uint32_t offset; + uint32_t size; + uint32_t begin_scope; + uint32_t end_scope; + MonoType *type; }; -#define MONO_DEBUGGER_VERSION 42 +#define MONO_DEBUGGER_MAJOR_VERSION 81 +#define MONO_DEBUGGER_MINOR_VERSION 6 #define MONO_DEBUGGER_MAGIC 0x7aff65af4253d427ULL +extern MonoSymbolTable *mono_symbol_table; extern MonoDebugFormat mono_debug_format; -extern GHashTable *mono_debug_handles; +extern int32_t mono_debug_debugger_version; +extern int32_t _mono_debug_using_mono_debugger; -void mono_debug_init (MonoDomain *domain, MonoDebugFormat format); -void mono_debug_init_2 (MonoAssembly *assembly); +void mono_debug_list_add (MonoDebugList **list, const void* data); +void mono_debug_list_remove (MonoDebugList **list, const void* data); + +void mono_debug_init (MonoDebugFormat format); +void mono_debug_open_image_from_memory (MonoImage *image, const mono_byte *raw_contents, int size); void mono_debug_cleanup (void); -MonoDebugDomainData *mono_debug_get_domain_data (MonoDebugHandle *handle, MonoDomain *domain); -void mono_debug_add_wrapper (MonoMethod *method, MonoMethod *wrapper_method, 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, 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, MonoDomain *domain); -gint32 mono_debug_address_from_il_offset (MonoMethod *method, gint32 il_offset, MonoDomain *domain); + +void mono_debug_close_image (MonoImage *image); + +void mono_debug_domain_unload (MonoDomain *domain); +void mono_debug_domain_create (MonoDomain *domain); + +mono_bool mono_debug_using_mono_debugger (void); + +MonoDebugMethodAddress * +mono_debug_add_method (MonoMethod *method, MonoDebugMethodJitInfo *jit, MonoDomain *domain); + +void +mono_debug_remove_method (MonoMethod *method, MonoDomain *domain); + +MonoDebugMethodInfo * +mono_debug_lookup_method (MonoMethod *method); + +MonoDebugMethodAddressList * +mono_debug_lookup_method_addresses (MonoMethod *method); + +MonoDebugMethodJitInfo* +mono_debug_find_method (MonoMethod *method, MonoDomain *domain); + +void +mono_debug_free_method_jit_info (MonoDebugMethodJitInfo *jit); + + +void +mono_debug_add_delegate_trampoline (void* code, int size); + +MonoDebugLocalsInfo* +mono_debug_lookup_locals (MonoMethod *method); + +/* + * Line number support. + */ + +MonoDebugSourceLocation * +mono_debug_lookup_source_location (MonoMethod *method, uint32_t address, MonoDomain *domain); + +int32_t +mono_debug_il_offset_from_address (MonoMethod *method, MonoDomain *domain, uint32_t native_offset); + +void +mono_debug_free_source_location (MonoDebugSourceLocation *location); + +char * +mono_debug_print_stack_frame (MonoMethod *method, uint32_t native_offset, MonoDomain *domain); + +/* + * Mono Debugger support functions + * + * These methods are used by the JIT while running inside the Mono Debugger. + */ + +int mono_debugger_method_has_breakpoint (MonoMethod *method); +int mono_debugger_insert_breakpoint (const char *method_name, mono_bool include_namespace); + +void mono_set_is_debugger_attached (mono_bool attached); +mono_bool mono_is_debugger_attached (void); + +MONO_END_DECLS #endif /* __MONO_DEBUG_H__ */