dotgnu-pnet-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[dotgnu-pnet-commits] pnet ChangeLog engine/jitc.c


From: Radek Polak
Subject: [dotgnu-pnet-commits] pnet ChangeLog engine/jitc.c
Date: Fri, 03 Aug 2007 09:16:11 +0000

CVSROOT:        /sources/dotgnu-pnet
Module name:    pnet
Changes by:     Radek Polak <radekp>    07/08/03 09:16:11

Modified files:
        .              : ChangeLog 
        engine         : jitc.c 

Log message:
        added function for printing metod names of jitted ILMethods (good for 
debugging jit engine)

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/pnet/ChangeLog?cvsroot=dotgnu-pnet&r1=1.3483&r2=1.3484
http://cvs.savannah.gnu.org/viewcvs/pnet/engine/jitc.c?cvsroot=dotgnu-pnet&r1=1.71&r2=1.72

Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/dotgnu-pnet/pnet/ChangeLog,v
retrieving revision 1.3483
retrieving revision 1.3484
diff -u -b -r1.3483 -r1.3484
--- ChangeLog   3 Aug 2007 08:19:59 -0000       1.3483
+++ ChangeLog   3 Aug 2007 09:16:11 -0000       1.3484
@@ -1,5 +1,11 @@
 2007-08-03  Radek Polak  <address@hidden>
 
+       * engine/jitc.c: Added function ILJitPrintMethod that can be used from 
gdb
+       to print ILMethod at given pc. Works only when _IL_JIT_ENABLE_DEBUG is
+       enabled.
+
+2007-08-03  Radek Polak  <address@hidden>
+
        * engine/debugger.c: Handle ref and out parameters.
 
 2007-07-26  Klaus Treichel  <address@hidden>

Index: engine/jitc.c
===================================================================
RCS file: /sources/dotgnu-pnet/pnet/engine/jitc.c,v
retrieving revision 1.71
retrieving revision 1.72
diff -u -b -r1.71 -r1.72
--- engine/jitc.c       2 Apr 2007 21:54:23 -0000       1.71
+++ engine/jitc.c       3 Aug 2007 09:16:11 -0000       1.72
@@ -4484,6 +4484,76 @@
 
 #endif /* !IL_CONFIG_REDUCE_CODE */
 
+#ifdef _IL_JIT_ENABLE_DEBUG
+
+/*
+ * Print ILMethod at given pc.
+ * This function is used for printing stacktrace of jitted ILMethods in gdb.
+ * Do not use otherwise!
+ *
+ * Usage:
+ *
+ * 1/ When gdb stops you can use: p ILJitPrintMethod (0x1234567)
+ * where 0x1234567 is frame from bt command.
+ *
+ * 2/ add lines [1] to your ~/.gdbinit
+ * to define new command for printing stacktrace.
+ *
+ * iljit_bt 5 in stopped gdb prints method names in first 5 frames.
+ *
+ * [1]:
+
+ define iljit_bt
+ select-frame 0
+ set $i = 0
+ while ($i < $arg0)
+   set $foo = ILJitPrintMethod ($pc)
+   printf "#%d %s\n", $i, $foo
+   up-silently
+   set $i = $i + 1
+ end
+end
+
+ */
+char *ILJitPrintMethod(void *pc)
+{
+       ILExecThread *thread;
+       ILJITCoder *coder;
+       jit_function_t fn;
+       void *handler = 0;
+       ILMethod *method;
+       char *methodName;
+       char *className;
+       char *result;
+
+       thread = ILExecThreadCurrent();
+       if(thread == 0)
+       {
+               return "unable to get current thread";
+       }
+       coder = (ILJITCoder *)(thread->process->coder);
+       fn = jit_function_from_pc(coder->context, pc, &handler);
+       if(fn == 0)
+       {
+               return "function at given pc not found";
+       }
+       method = (ILMethod *)jit_function_get_meta(fn, IL_JIT_META_METHOD);
+       methodName = ILMethod_Name(method);
+       className = ILClass_Name(ILMethod_Owner(method));
+       result = (char *) ILMalloc(strlen(methodName) + strlen(className) + 2);
+       if(result)
+       {
+               sprintf(result, "%s.%s", className, methodName);
+               return result;
+       }
+       else
+       {
+               return "out of memory";
+       }
+}
+
+#endif /* _IL_JIT_ENABLE_DEBUG */
+
 #define        IL_JITC_FUNCTIONS
 #include "jitc_diag.c"
 #include "jitc_locals.c"




reply via email to

[Prev in Thread] Current Thread [Next in Thread]