Use start and end addresses for methods.
[mono.git] / mono / metadata / debug-mono-symfile.h
1 #ifndef __MONO_DEBUG_MONO_SYMFILE_H__
2 #define __MONO_DEBUG_MONO_SYMFILE_H__
3
4 #include <glib.h>
5 #include <mono/metadata/class.h>
6 #include <mono/metadata/reflection.h>
7 #include <mono/metadata/debug-symfile.h>
8
9 typedef struct MonoSymbolFile                   MonoSymbolFile;
10 typedef struct MonoSymbolFileOffsetTable        MonoSymbolFileOffsetTable;
11 typedef struct MonoSymbolFileLineNumberEntry    MonoSymbolFileLineNumberEntry;
12 typedef struct MonoSymbolFileMethodEntry        MonoSymbolFileMethodEntry;
13
14 /* Keep in sync with OffsetTable in mcs/class/Mono.CSharp.Debugger/MonoSymbolTable.cs */
15 struct MonoSymbolFileOffsetTable {
16         guint32 total_file_size;
17         guint32 source_table_offset;
18         guint32 source_table_size;
19         guint32 method_table_offset;
20         guint32 method_table_size;
21         guint32 line_number_table_offset;
22         guint32 line_number_table_size;
23 };
24
25 struct MonoSymbolFileMethodEntry {
26         guint32 token;
27         guint32 source_file_offset;
28         guint32 line_number_table_offset;
29         guint32 start_row;
30         guint64 start_address;
31         guint64 end_address;
32 };
33
34 struct MonoSymbolFileLineNumberEntry {
35         guint32 row;
36         guint32 offset;
37         guint32 address;
38 };
39
40 struct MonoSymbolFile {
41         int fd;
42         char *file_name;
43         MonoImage *image;
44         /* Pointer to the mmap()ed contents of the file. */
45         char *raw_contents;
46         size_t raw_contents_size;
47         MonoSymbolFileOffsetTable *offset_table;
48         GHashTable *method_table;
49 };
50
51 #define MONO_SYMBOL_FILE_VERSION                16
52 #define MONO_SYMBOL_FILE_MAGIC                  0x45e82623fd7fa614
53
54 /* Tries to load `filename' as a debugging information file, if `emit_warnings" is set,
55  * use g_warning() to signal error messages on failure, otherwise silently return NULL. */
56 MonoSymbolFile *mono_debug_open_mono_symbol_file   (MonoImage                 *image,
57                                                     const char                *filename,
58                                                     gboolean                   emit_warnings);
59
60 typedef MonoDebugMethodInfo * (*MonoDebugGetMethodFunc) (MonoSymbolFile      *symbol_file,
61                                                          MonoMethod          *method,
62                                                          gpointer             user_data);
63
64 void    mono_debug_update_mono_symbol_file (MonoSymbolFile           *symbol_file,
65                                             MonoDebugGetMethodFunc    method_info_func,
66                                             gpointer                  user_data);
67
68 void mono_debug_close_mono_symbol_file (MonoSymbolFile *symfile);
69
70 gchar *
71 mono_debug_find_source_location (MonoSymbolFile *symfile, MonoMethod *method, guint32 offset,
72                                  guint32 *line_number);
73
74 #endif /* __MONO_SYMFILE_H__ */
75