added linear scan to mono (use --ls to enable it)
[mono.git] / mono / jit / debug-dwarf2-plus.c
1 #include <stdlib.h>
2 #include <string.h>
3 #include <mono/metadata/class.h>
4 #include <mono/metadata/debug-symfile.h>
5 #include <mono/jit/codegen.h>
6 #include <mono/jit/debug.h>
7
8 #include "debug-private.h"
9
10 typedef struct {
11         MonoDebugSymbolFile *symfile;
12 } AssemblyDebugInfoPrivate;
13
14 void
15 mono_debug_open_assembly_dwarf2_plus (AssemblyDebugInfo *info)
16 {
17         AssemblyDebugInfoPrivate *priv = g_new0 (AssemblyDebugInfoPrivate, 1);
18
19         priv->symfile = mono_debug_open_symbol_file (info->image, info->filename, TRUE);
20
21         info->_priv = priv;
22 }
23
24 void
25 mono_debug_close_assembly_dwarf2_plus (AssemblyDebugInfo *info)
26 {
27         AssemblyDebugInfoPrivate *priv = info->_priv;
28
29         if (priv->symfile)
30                 mono_debug_close_symbol_file (priv->symfile);
31
32         g_free (info->_priv);
33 }
34
35 static MonoDebugMethodInfo *
36 method_info_func (MonoDebugSymbolFile *symfile, guint32 token, gpointer user_data)
37 {
38         AssemblyDebugInfo *info = user_data;
39         MonoMethod *method;
40         DebugMethodInfo *minfo;
41
42         method = g_hash_table_lookup (info->image->method_cache, GINT_TO_POINTER (token));
43         if (!method)
44                 return NULL;
45
46         minfo = g_hash_table_lookup (info->methods, method);
47
48         return (MonoDebugMethodInfo *) minfo;
49 }
50
51 void
52 mono_debug_write_assembly_dwarf2_plus (AssemblyDebugInfo *info)
53 {
54         AssemblyDebugInfoPrivate *priv = info->_priv;
55
56         if (priv->symfile)
57                 mono_debug_update_symbol_file (priv->symfile, method_info_func, info);
58 }