+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.
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
noinst_PROGRAMS = genmdesc
-lib_LTLIBRARIES = libmono.la
+lib_LTLIBRARIES = libmono.la $(libmono_dbg_la)
noinst_LTLIBRARIES = libmono-static.la
endif
libmonoincludedir = $(includedir)/mono-$(API_VER)/mono/jit
-libmonoinclude_HEADERS = jit.h
+libmonoinclude_HEADERS = jit.h $(mono_dbg_h)
libmono_la_LIBADD = \
$(libs)
--- /dev/null
+#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;
+}
--- /dev/null
+#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
+