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_MONO_SYMFILE_H__
7 #define __MONO_DEBUG_MONO_SYMFILE_H__
10 #include <mono/metadata/class.h>
11 #include <mono/metadata/reflection.h>
12 #include <mono/metadata/mono-debug.h>
14 typedef struct MonoSymbolFileOffsetTable MonoSymbolFileOffsetTable;
15 typedef struct MonoSymbolFileLineNumberEntry MonoSymbolFileLineNumberEntry;
16 typedef struct MonoSymbolFileMethodEntry MonoSymbolFileMethodEntry;
17 typedef struct MonoSymbolFileMethodAddress MonoSymbolFileMethodAddress;
18 typedef struct MonoSymbolFileDynamicTable MonoSymbolFileDynamicTable;
19 typedef struct MonoSymbolFileSourceEntry MonoSymbolFileSourceEntry;
20 typedef struct MonoSymbolFileMethodIndexEntry MonoSymbolFileMethodIndexEntry;
21 typedef struct MonoSymbolFileLexicalBlockEntry MonoSymbolFileLexicalBlockEntry;
23 /* Keep in sync with OffsetTable in mcs/class/Mono.CSharp.Debugger/MonoSymbolTable.cs */
24 struct MonoSymbolFileOffsetTable {
25 guint32 _total_file_size;
26 guint32 _data_section_offset;
27 guint32 _data_section_size;
28 guint32 _source_count;
29 guint32 _source_table_offset;
30 guint32 _source_table_size;
31 guint32 _method_count;
32 guint32 _method_table_offset;
33 guint32 _method_table_size;
37 struct MonoSymbolFileMethodEntry {
38 guint32 _source_index;
43 guint32 _num_line_numbers;
45 guint32 _type_index_table_offset;
46 guint32 _local_variable_table_offset;
47 guint32 _line_number_table_offset;
48 guint32 _num_lexical_blocks;
49 guint32 _lexical_block_table_offset;
50 guint32 _namespace_idx;
51 guint32 _local_names_ambiguous;
54 struct MonoSymbolFileSourceEntry {
57 guint32 _num_namespaces;
59 guint32 _method_offset;
60 guint32 _nstable_offset;
63 struct MonoSymbolFileMethodIndexEntry {
68 struct MonoSymbolFileMethodAddress {
70 const guint8 *start_address;
71 const guint8 *end_address;
72 const guint8 *method_start_address;
73 const guint8 *method_end_address;
74 const guint8 *wrapper_address;
77 guint32 variable_table_offset;
78 guint32 type_table_offset;
79 guint32 num_line_numbers;
80 guint32 line_number_offset;
81 guint32 num_lexical_blocks;
82 guint32 lexical_block_table_offset;
83 guint8 data [MONO_ZERO_LEN_ARRAY];
86 struct MonoSymbolFileLexicalBlockEntry {
87 guint32 _start_offset;
91 struct MonoSymbolFileLineNumberEntry {
96 struct _MonoDebugMethodInfo {
98 MonoDebugHandle *handle;
100 guint32 num_il_offsets;
101 MonoSymbolFileLineNumberEntry *il_offsets;
102 guint32 num_lexical_blocks;
103 MonoSymbolFileLexicalBlockEntry *lexical_blocks;
104 MonoSymbolFileMethodEntry *entry;
107 struct _MonoDebugLexicalBlockEntry {
108 guint32 il_start_offset;
109 guint32 native_start_offset;
110 guint32 il_end_offset;
111 guint32 native_end_offset;
114 struct _MonoDebugLineNumberEntry {
116 guint32 native_offset;
119 struct _MonoSymbolFile {
120 const guint8 *raw_contents;
121 int raw_contents_size;
123 GHashTable *method_hash;
124 MonoSymbolFileOffsetTable *offset_table;
127 #define MONO_SYMBOL_FILE_VERSION 39
128 #define MONO_SYMBOL_FILE_MAGIC 0x45e82623fd7fa614ULL
133 mono_debug_open_mono_symbols (MonoDebugHandle *handle,
134 const guint8 *raw_contents,
136 gboolean in_the_debugger);
139 mono_debug_close_mono_symbol_file (MonoSymbolFile *symfile);
141 MonoDebugSourceLocation *
142 mono_debug_symfile_lookup_location (MonoDebugMethodInfo *minfo,
146 _mono_debug_address_from_il_offset (MonoDebugMethodJitInfo *jit,
149 MonoDebugMethodInfo *
150 mono_debug_symfile_lookup_method (MonoDebugHandle *handle,
154 #endif /* __MONO_SYMFILE_H__ */