1 #ifndef __MONO_DEBUG_H__
2 #define __MONO_DEBUG_H__
5 #include <mono/metadata/image.h>
6 #include <mono/metadata/appdomain.h>
8 typedef struct _MonoSymbolFile MonoSymbolFile;
9 typedef struct _MonoSymbolFilePriv MonoSymbolFilePriv;
11 typedef struct _MonoDebugHandle MonoDebugHandle;
12 typedef struct _MonoDebugHandlePriv MonoDebugHandlePriv;
13 typedef struct _MonoDebugDomainData MonoDebugDomainData;
14 typedef struct _MonoDebugDomainDataPriv MonoDebugDomainDataPriv;
16 typedef struct _MonoDebugVarInfo MonoDebugVarInfo;
17 typedef struct _MonoDebugMethodJitInfo MonoDebugMethodJitInfo;
20 MONO_DEBUG_FORMAT_NONE,
21 MONO_DEBUG_FORMAT_MONO,
22 MONO_DEBUG_FORMAT_DEBUGGER
25 struct _MonoDebugHandle {
26 const char *image_file;
28 MonoSymbolFile *symfile;
29 MonoDebugHandlePriv *_priv;
32 struct _MonoDebugMethodJitInfo {
33 const guint8 *code_start;
36 guint32 epilogue_begin;
37 const guint8 *wrapper_addr;
38 // Array of MonoDebugLineNumberEntry
41 MonoDebugVarInfo *this_var;
42 MonoDebugVarInfo *params;
44 MonoDebugVarInfo *locals;
47 struct _MonoDebugDomainData {
49 MonoDebugMethodJitInfo **jit;
50 MonoDebugDomainDataPriv *_priv;
54 * These bits of the MonoDebugLocalInfo's "index" field are flags specifying
55 * where the variable is actually stored.
57 * See relocate_variable() in debug-symfile.c for more info.
59 #define MONO_DEBUG_VAR_ADDRESS_MODE_FLAGS 0xf0000000
61 /* The variable is in register "index". */
62 #define MONO_DEBUG_VAR_ADDRESS_MODE_REGISTER 0
64 /* The variable is at offset "offset" from register "index". */
65 #define MONO_DEBUG_VAR_ADDRESS_MODE_REGOFFSET 0x10000000
67 /* The variable is in the two registers "offset" and "index". */
68 #define MONO_DEBUG_VAR_ADDRESS_MODE_TWO_REGISTERS 0x20000000
70 struct _MonoDebugVarInfo {
78 #define MONO_DEBUGGER_VERSION 41
79 #define MONO_DEBUGGER_MAGIC 0x7aff65af4253d427ULL
81 extern MonoDebugFormat mono_debug_format;
82 extern GHashTable *mono_debug_handles;
84 void mono_debug_init (MonoDomain *domain, MonoDebugFormat format);
85 void mono_debug_init_2 (MonoAssembly *assembly);
86 void mono_debug_cleanup (void);
87 MonoDebugDomainData *mono_debug_get_domain_data (MonoDebugHandle *handle, MonoDomain *domain);
88 void mono_debug_add_wrapper (MonoMethod *method, MonoMethod *wrapper_method, MonoDomain *domain);
89 void mono_debug_add_method (MonoMethod *method, MonoDebugMethodJitInfo *jit, MonoDomain *domain);
90 gchar *mono_debug_source_location_from_address (MonoMethod *method, guint32 address,
91 guint32 *line_number, MonoDomain *domain);
92 gchar *mono_debug_source_location_from_il_offset (MonoMethod *method, guint32 offset,
93 guint32 *line_number);
94 gint32 mono_debug_il_offset_from_address (MonoMethod *method, gint32 address, MonoDomain *domain);
95 gint32 mono_debug_address_from_il_offset (MonoMethod *method, gint32 il_offset, MonoDomain *domain);
97 #endif /* __MONO_DEBUG_H__ */