* Added: stacktrace_dump_trace
authortwisti <none@none>
Thu, 23 Jun 2005 09:54:26 +0000 (09:54 +0000)
committertwisti <none@none>
Thu, 23 Jun 2005 09:54:26 +0000 (09:54 +0000)
src/vm/jit/stacktrace.c
src/vm/jit/stacktrace.h

index fa6bec54459b25976b1df548f68c0ce0f2fcad70..97949d52713364844ac7d3c51a5322ce4cc5264f 100644 (file)
@@ -28,7 +28,7 @@
 
    Changes: Christian Thalinger
 
-   $Id: stacktrace.c 2768 2005-06-21 15:51:39Z twisti $
+   $Id: stacktrace.c 2799 2005-06-23 09:54:26Z twisti $
 
 */
 
@@ -558,6 +558,71 @@ java_objectarray *cacao_getStackForVMAccessController()
 }
 
 
+/* stacktrace_dump_trace *******************************************************
+
+   This method is call from signal_handler_sigusr1 to dump the
+   stacktrace of the current thread to stdout.
+
+*******************************************************************************/
+
+void stacktrace_dump_trace(void)
+{
+       stackTraceBuffer      *buffer;
+       stacktraceelement     *element;
+       methodinfo            *m;
+       s4                     i;
+
+#if 0
+       /* get thread stackframeinfo */
+
+       info = &THREADINFO->_stackframeinfo;
+
+       /* fill stackframeinfo structure */
+
+       tmp.oldThreadspecificHeadValue = *info;
+       tmp.addressOfThreadspecificHead = info;
+       tmp.method = NULL;
+       tmp.beginOfJavaStackframe = NULL;
+       tmp.returnToFromNative = _mc->gregs[REG_RIP];
+
+       *info = &tmp;
+#endif
+
+       /* generate stacktrace */
+
+       cacao_stacktrace_NormalTrace((void **) &buffer);
+
+       /* print stacktrace */
+
+       if (buffer) {
+               element = buffer->start;
+
+               for (i = 0; i < buffer->size; i++, element++) {
+                       m = element->method;
+
+                       printf("\tat ");
+                       utf_display_classname(m->class->name);
+                       printf(".");
+                       utf_display(m->name);
+                       utf_display(m->descriptor);
+
+                       if (m->flags & ACC_NATIVE) {
+                               printf("(Native Method)\n");
+
+                       } else {
+                               printf("(");
+                               utf_display(m->class->sourcefile);
+                               printf(":%d)\n", (u4) element->linenumber);
+                       }
+               }
+       }
+
+       /* flush stdout */
+
+       fflush(stdout);
+}
+
+
 /*
  * These are local overrides for various environment variables in Emacs.
  * Please do not remove this and leave it at the end of the file, where
index 21062ffe6f3b855e4718c517414625c54b0b9422..c5c0bddbee1ca8dba5771706d409a3000cb987ad 100644 (file)
@@ -28,7 +28,7 @@
 
    Changes:
 
-   $Id: stacktrace.h 2768 2005-06-21 15:51:39Z twisti $
+   $Id: stacktrace.h 2799 2005-06-23 09:54:26Z twisti $
 
 */
 
@@ -93,6 +93,7 @@ java_objectarray *cacao_createClassContextArray(void);
 java_objectheader *cacao_currentClassLoader(void);
 methodinfo* cacao_callingMethod(void);
 java_objectarray *cacao_getStackForVMAccessController(void);
+void stacktrace_dump_trace(void);
 
 #endif /* _STACKTRACE_H */