typedef struct MonoDebugMethodInfo MonoDebugMethodInfo;
typedef struct MonoDebugMethodJitInfo MonoDebugMethodJitInfo;
typedef struct MonoDebugVarInfo MonoDebugVarInfo;
+typedef struct MonoDebugLineNumberEntry MonoDebugLineNumberEntry;
typedef struct MonoDebugRangeInfo MonoDebugRangeInfo;
+typedef struct MonoDebugTypeInfo MonoDebugTypeInfo;
/* Keep in sync with OffsetTable in mcs/class/Mono.CSharp.Debugger/MonoSymbolTable.cs */
struct MonoSymbolFileOffsetTable {
guint32 line_number_table_size;
guint32 local_variable_table_offset;
guint32 local_variable_table_size;
+ guint32 source_file_table_offset;
+ guint32 source_file_table_size;
+ guint32 source_file_count;
guint32 type_count;
guint32 type_index_table_offset;
guint32 type_index_table_size;
struct MonoSymbolFileMethodAddress {
guint32 size;
- guint64 start_address;
- guint64 end_address;
- guint32 line_table_offset;
+ const guint8 *start_address;
+ const guint8 *end_address;
+ const guint8 *method_start_address;
+ const guint8 *method_end_address;
guint32 variable_table_offset;
guint32 type_table_offset;
+ guint32 num_line_numbers;
+ guint32 line_number_size;
+ MonoDebugLineNumberEntry *line_numbers;
guint8 data [MONO_ZERO_LEN_ARRAY];
};
MonoSymbolFile *symfile;
guint32 file_offset;
guint32 num_il_offsets;
+ guint32 start_line;
+ guint32 end_line;
MonoSymbolFileLineNumberEntry *il_offsets;
MonoDebugMethodJitInfo *jit;
gpointer user_data;
};
+struct MonoDebugLineNumberEntry {
+ guint32 line;
+ guint32 offset;
+ guint32 address;
+};
+
struct MonoDebugMethodJitInfo {
const guint8 *code_start;
guint32 code_size;
guint32 prologue_end;
guint32 epilogue_begin;
- guint32 *il_addresses;
+ // Array of MonoDebugLineNumberEntry
+ GArray *line_numbers;
guint32 num_params;
MonoDebugVarInfo *this_var;
MonoDebugVarInfo *params;
};
struct MonoDebugRangeInfo {
- guint64 start_address;
- guint64 end_address;
+ const guint8 *start_address;
+ const guint8 *end_address;
guint32 file_offset;
gpointer dynamic_data;
guint32 dynamic_size;
};
+struct MonoDebugTypeInfo {
+ MonoClass *klass;
+ guint32 rank;
+ guint32 token;
+ gpointer type_info;
+};
+
struct MonoSymbolFile {
guint64 magic;
guint32 version;
MonoDebugRangeInfo *range_table;
guint32 range_entry_size;
guint32 num_range_entries;
+ /* Pointer to the malloced class table. */
+ MonoDebugTypeInfo *type_table;
+ guint32 type_entry_size;
+ guint32 num_type_entries;
/* Private. */
MonoSymbolFilePriv *_priv;
};
-#define MONO_SYMBOL_FILE_VERSION 26
+#define MONO_SYMBOL_FILE_VERSION 28
#define MONO_SYMBOL_FILE_MAGIC 0x45e82623fd7fa614
-#define MONO_SYMBOL_FILE_DYNAMIC_VERSION 3
+#define MONO_SYMBOL_FILE_DYNAMIC_VERSION 14
#define MONO_SYMBOL_FILE_DYNAMIC_MAGIC 0x7aff65af4253d427
MonoSymbolFile *
mono_debug_symfile_add_method (MonoSymbolFile *symfile,
MonoMethod *method);
+void
+mono_debug_symfile_add_type (MonoSymbolFile *symfile,
+ MonoClass *klass);
+
void
mono_debug_close_mono_symbol_file (MonoSymbolFile *symfile);
ves_icall_MonoDebugger_GetLocalTypeFromSignature (MonoReflectionAssembly *assembly,
MonoArray *signature);
+MonoReflectionType *
+ves_icall_MonoDebugger_GetType (MonoReflectionAssembly *assembly,
+ guint32 token);
#endif /* __MONO_SYMFILE_H__ */