2 * This header is only installed for use by the debugger:
3 * the structures and the API declared here are not supported.
6 #ifndef __MONO_DEBUG_H__
7 #define __MONO_DEBUG_H__
10 #include <mono/metadata/image.h>
11 #include <mono/metadata/appdomain.h>
13 typedef struct _MonoSymbolFile MonoSymbolFile;
14 typedef struct _MonoSymbolFilePriv MonoSymbolFilePriv;
16 typedef struct _MonoDebugHandle MonoDebugHandle;
17 typedef struct _MonoDebugHandlePriv MonoDebugHandlePriv;
18 typedef struct _MonoDebugDomainData MonoDebugDomainData;
19 typedef struct _MonoDebugDomainDataPriv MonoDebugDomainDataPriv;
21 typedef struct _MonoDebugVarInfo MonoDebugVarInfo;
22 typedef struct _MonoDebugMethodJitInfo MonoDebugMethodJitInfo;
25 MONO_DEBUG_FORMAT_NONE,
26 MONO_DEBUG_FORMAT_MONO,
27 MONO_DEBUG_FORMAT_DEBUGGER
30 struct _MonoDebugHandle {
31 const char *image_file;
33 MonoSymbolFile *symfile;
34 MonoDebugHandlePriv *_priv;
37 struct _MonoDebugMethodJitInfo {
38 const guint8 *code_start;
41 guint32 epilogue_begin;
42 const guint8 *wrapper_addr;
43 /* Array of MonoDebugLineNumberEntry */
46 MonoDebugVarInfo *this_var;
47 MonoDebugVarInfo *params;
49 MonoDebugVarInfo *locals;
52 struct _MonoDebugDomainData {
54 MonoDebugMethodJitInfo **jit;
55 MonoDebugDomainDataPriv *_priv;
59 * These bits of the MonoDebugLocalInfo's "index" field are flags specifying
60 * where the variable is actually stored.
62 * See relocate_variable() in debug-symfile.c for more info.
64 #define MONO_DEBUG_VAR_ADDRESS_MODE_FLAGS 0xf0000000
66 /* The variable is in register "index". */
67 #define MONO_DEBUG_VAR_ADDRESS_MODE_REGISTER 0
69 /* The variable is at offset "offset" from register "index". */
70 #define MONO_DEBUG_VAR_ADDRESS_MODE_REGOFFSET 0x10000000
72 /* The variable is in the two registers "offset" and "index". */
73 #define MONO_DEBUG_VAR_ADDRESS_MODE_TWO_REGISTERS 0x20000000
75 struct _MonoDebugVarInfo {
83 #define MONO_DEBUGGER_VERSION 45
84 #define MONO_DEBUGGER_MAGIC 0x7aff65af4253d427ULL
86 extern MonoDebugFormat mono_debug_format;
87 extern GHashTable *mono_debug_handles;
89 void mono_debug_init (MonoDebugFormat format);
90 void mono_debug_init_1 (MonoDomain *domain);
91 void mono_debug_init_2 (MonoAssembly *assembly);
92 void mono_debug_cleanup (void);
93 void mono_debug_add_wrapper (MonoMethod *method, gpointer wrapper, MonoDomain *domain);
95 void mono_debug_add_method (MonoMethod *method, MonoDebugMethodJitInfo *jit, MonoDomain *domain);
96 gchar *mono_debug_source_location_from_address (MonoMethod *method, guint32 address,
97 guint32 *line_number, MonoDomain *domain);
98 gchar *mono_debug_source_location_from_il_offset (MonoMethod *method, guint32 offset,
99 guint32 *line_number);
100 gint32 mono_debug_il_offset_from_address (MonoMethod *method, gint32 address, MonoDomain *domain);
101 gint32 mono_debug_address_from_il_offset (MonoMethod *method, gint32 il_offset, MonoDomain *domain);
103 #endif /* __MONO_DEBUG_H__ */