2007-12-19 Martin Baulig <martin@ximian.com>
authorMartin Baulig <martin@novell.com>
Wed, 19 Dec 2007 17:54:25 +0000 (17:54 -0000)
committerMartin Baulig <martin@novell.com>
Wed, 19 Dec 2007 17:54:25 +0000 (17:54 -0000)
* mono-dbg.[ch]: New files.  Initial version of the debugger
runtime library.  We only use this for generics at the moment.

* Makefile.am: Create libmono-dbg.la if the debugger is supported;
also install <mono/jit/mono-dbg.h>.

svn path=/trunk/mono/; revision=91642

mono/mini/ChangeLog
mono/mini/Makefile.am
mono/mini/mono-dbg.c [new file with mode: 0644]
mono/mini/mono-dbg.h [new file with mode: 0644]

index 2f22af2edf4d092bc5d126dbc44137cd7c343825..7af779635676f821857ba3eccd8278d6ef583cc2 100644 (file)
@@ -1,3 +1,11 @@
+2007-12-19  Martin Baulig  <martin@ximian.com>
+
+       * mono-dbg.[ch]: New files.  Initial version of the debugger
+       runtime library.  We only use this for generics at the moment.
+
+       * Makefile.am: Create libmono-dbg.la if the debugger is supported;
+       also install <mono/jit/mono-dbg.h>.
+
 2007-12-15  Zoltan Varga  <vargaz@gmail.com>
 
        * mini.c (mono_method_to_ir): Fix a warning.
index f313fcb0c39738d212c73dcdb8aebce430ad1c1b..62302a1b6cff46e117666688b3a3ea7029781913 100644 (file)
@@ -68,6 +68,18 @@ else
 libmono_la_LDFLAGS=$(monoldflags)
 endif
 
+if MONO_DEBUGGER_SUPPORTED
+libmono_dbg_la = libmono-dbg.la
+mono_dbg_h = mono-dbg.h
+
+libmono_dbg_la_SOURCES = mono-dbg.c mono-dbg.h
+else
+libmono_dbg_la =
+mono_dbg_h =
+
+libmono_dbg_la_SOURCES =
+endif
+
 if JIT_SUPPORTED
 
 if PLATFORM_WIN32
@@ -78,7 +90,7 @@ endif
 
 noinst_PROGRAMS = genmdesc
 
-lib_LTLIBRARIES = libmono.la
+lib_LTLIBRARIES = libmono.la $(libmono_dbg_la)
 noinst_LTLIBRARIES = libmono-static.la
 endif
 
@@ -371,7 +383,7 @@ BURGSRC= $(common_BURGSRC) $(arch_BURGSRC)
 
 libmonoincludedir = $(includedir)/mono-$(API_VER)/mono/jit
 
-libmonoinclude_HEADERS = jit.h
+libmonoinclude_HEADERS = jit.h $(mono_dbg_h)
 
 libmono_la_LIBADD = \
        $(libs)
diff --git a/mono/mini/mono-dbg.c b/mono/mini/mono-dbg.c
new file mode 100644 (file)
index 0000000..a530e8d
--- /dev/null
@@ -0,0 +1,46 @@
+#include <config.h>
+#include <mono/metadata/mono-debug.h>
+#include <mono/metadata/mono-config.h>
+#include <mono/metadata/class-internals.h>
+#include "mono-dbg.h"
+
+guint32
+mono_dbg_get_version (void)
+{
+       return MONO_DEBUGGER_VERSION;
+}
+
+gboolean
+mono_dbg_read_generic_class (MonoDbgMemoryAccess memory, gconstpointer address,
+                            MonoDbgGenericClass *result)
+{
+       MonoGenericClass gclass;
+
+       if (!memory (address, &gclass, sizeof (MonoGenericClass)))
+               return FALSE;
+
+       result->container_class = gclass.container_class;
+       result->generic_inst = gclass.context.class_inst;
+       result->klass = gclass.cached_class;
+
+       return TRUE;
+}
+
+gboolean
+mono_dbg_read_generic_inst (MonoDbgMemoryAccess memory, gconstpointer address,
+                           MonoDbgGenericInst *result)
+{
+       MonoGenericInst ginst;
+
+       if (!memory (address, &ginst, sizeof (MonoGenericInst)))
+               return FALSE;
+
+       result->id = ginst.id;
+       result->type_argc = ginst.type_argc;
+       result->type_argv = g_new0 (gconstpointer, ginst.type_argc);
+
+       if (!memory (ginst.type_argv, result->type_argv, ginst.type_argc * sizeof (gpointer)))
+               return FALSE;
+
+       return TRUE;
+}
diff --git a/mono/mini/mono-dbg.h b/mono/mini/mono-dbg.h
new file mode 100644 (file)
index 0000000..e46cc12
--- /dev/null
@@ -0,0 +1,36 @@
+#ifndef __MONO_DBG_H__
+#define __MONO_DBG_H__
+
+#include <glib.h>
+
+G_BEGIN_DECLS
+
+typedef gboolean (*MonoDbgMemoryAccess) (gconstpointer address, void *buffer, guint32 size);
+
+guint32
+mono_dbg_get_version (void);
+
+typedef struct {
+       gconstpointer container_class;
+       gconstpointer generic_inst;
+       gconstpointer klass;
+} MonoDbgGenericClass;
+
+typedef struct {
+       guint32 id;
+       guint32 type_argc;
+       gconstpointer *type_argv;
+} MonoDbgGenericInst;
+
+gboolean
+mono_dbg_read_generic_class (MonoDbgMemoryAccess memory, gconstpointer address,
+                            MonoDbgGenericClass *result);
+
+gboolean
+mono_dbg_read_generic_inst (MonoDbgMemoryAccess memory, gconstpointer address,
+                           MonoDbgGenericInst *result);
+
+G_END_DECLS
+
+#endif
+