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 typedef struct MonoDebugMethodInfo MonoDebugMethodInfo;
25 /* Keep in sync with OffsetTable in mcs/class/Mono.CSharp.Debugger/MonoSymbolTable.cs */
26 struct MonoSymbolFileOffsetTable {
27 guint32 _total_file_size;
28 guint32 _data_section_offset;
29 guint32 _data_section_size;
30 guint32 _source_count;
31 guint32 _source_table_offset;
32 guint32 _source_table_size;
33 guint32 _method_count;
34 guint32 _method_table_offset;
35 guint32 _method_table_size;
39 struct MonoSymbolFileMethodEntry {
40 guint32 _source_index;
45 guint32 _num_line_numbers;
47 guint32 _type_index_table_offset;
48 guint32 _local_variable_table_offset;
49 guint32 _line_number_table_offset;
50 guint32 _num_lexical_blocks;
51 guint32 _lexical_block_table_offset;
52 guint32 _namespace_idx;
53 guint32 _local_names_ambiguous;
56 struct MonoSymbolFileSourceEntry {
59 guint32 _num_namespaces;
61 guint32 _method_offset;
62 guint32 _nstable_offset;
65 struct MonoSymbolFileMethodIndexEntry {
70 struct MonoSymbolFileMethodAddress {
72 const guint8 *start_address;
73 const guint8 *end_address;
74 const guint8 *method_start_address;
75 const guint8 *method_end_address;
76 const guint8 *wrapper_address;
79 guint32 variable_table_offset;
80 guint32 type_table_offset;
81 guint32 num_line_numbers;
82 guint32 line_number_offset;
83 guint32 num_lexical_blocks;
84 guint32 lexical_block_table_offset;
85 guint8 data [MONO_ZERO_LEN_ARRAY];
88 struct MonoSymbolFileLexicalBlockEntry {
89 guint32 _start_offset;
93 struct MonoSymbolFileLineNumberEntry {
98 struct MonoDebugMethodInfo {
100 MonoDebugHandle *handle;
102 guint32 num_il_offsets;
103 MonoSymbolFileLineNumberEntry *il_offsets;
104 guint32 num_lexical_blocks;
105 MonoSymbolFileLexicalBlockEntry *lexical_blocks;
106 MonoSymbolFileMethodEntry *entry;
109 struct _MonoDebugLexicalBlockEntry {
110 guint32 il_start_offset;
111 guint32 native_start_offset;
112 guint32 il_end_offset;
113 guint32 native_end_offset;
116 struct _MonoDebugLineNumberEntry {
118 guint32 native_offset;
121 struct _MonoSymbolFile {
122 const guint8 *raw_contents;
123 int raw_contents_size;
125 GHashTable *method_hash;
126 MonoSymbolFileOffsetTable *offset_table;
129 #define MONO_SYMBOL_FILE_VERSION 38
130 #define MONO_SYMBOL_FILE_MAGIC 0x45e82623fd7fa614ULL
135 mono_debug_open_mono_symbol_file (MonoDebugHandle *handle,
136 gboolean create_symfile);
139 mono_debug_close_mono_symbol_file (MonoSymbolFile *symfile);
142 mono_debug_find_source_location (MonoSymbolFile *symfile,
145 guint32 *line_number);
148 _mono_debug_address_from_il_offset (MonoDebugMethodJitInfo *jit,
151 MonoDebugMethodInfo *
152 mono_debug_find_method (MonoDebugHandle *handle,
156 #endif /* __MONO_SYMFILE_H__ */