* src/vm/jit/stacktrace.c (stacktrace_create_stackframeinfo): Removed.
[cacao.git] / src / vm / jit / stacktrace.h
index 9e1e47bf88f4c6affcd0d316a91699e283122cd4..c2531481c037302adc0296fcf60a1b588fa8991d 100644 (file)
@@ -1,6 +1,6 @@
 /* src/vm/jit/stacktrace.h - header file for stacktrace generation
 
-   Copyright (C) 1996-2005, 2006 R. Grafl, A. Krall, C. Kruegel,
+   Copyright (C) 1996-2005, 2006, 2007 R. Grafl, A. Krall, C. Kruegel,
    C. Oates, R. Obermaisser, M. Platter, M. Probst, S. Ring,
    E. Steiner, C. Thalinger, D. Thuernbeck, P. Tomsich, C. Ullrich,
    J. Wenninger, Institut f. Computersprachen - TU Wien
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
    02110-1301, USA.
 
-   Contact: cacao@cacaojvm.org
-
-   Authors: Christian Thalinger
-
-   Changes:
-
-   $Id: stacktrace.h 4433 2006-02-04 20:15:23Z twisti $
-
 */
 
 
@@ -45,7 +37,10 @@ typedef struct stacktrace_entry stacktrace_entry;
 #include "config.h"
 #include "vm/types.h"
 
-#include "vm/method.h"
+#include "md-abi.h"
+
+#include "vmcore/class.h"
+#include "vmcore/method.h"
 
 
 /* stackframeinfo **************************************************************
@@ -62,15 +57,18 @@ struct stackframeinfo {
        u1             *sp;                 /* SP of parent Java function         */
        u1             *ra;                 /* RA to parent Java function         */
        u1             *xpc;                /* XPC (for inline stubs)             */
-};
-
-#if defined(USE_THREADS)
-#define STACKFRAMEINFO    (stackframeinfo **) (&THREADINFO->_stackframeinfo)
-#else
-extern stackframeinfo *_no_threads_stackframeinfo;
-
-#define STACKFRAMEINFO    (&_no_threads_stackframeinfo)
+#if defined(ENABLE_GC_CACAO)
+       /* 
+        * The exact GC needs to be able to recover saved registers, so the
+        * native-stub saves these registers here
+        */
+# if defined(HAS_ADDRESS_REGISTER_FILE)
+       ptrint          adrregs[ADR_SAV_CNT];
+# else
+       ptrint          intregs[INT_SAV_CNT];
+# endif
 #endif
+};
 
 
 /* stacktrace_entry ***********************************************************/
@@ -91,80 +89,49 @@ struct stacktrace_entry {
 #define STACKTRACE_CAPACITY_INCREMENT    80
 
 struct stacktracebuffer {
-       s4                capacity;         /* size of the buffer                 */
-       s4                used;             /* current entries in the buffer      */
-       stacktrace_entry *entries;          /* the actual entries                 */
+       s4               capacity;          /* size of the buffer                 */
+       s4               used;              /* current entries in the buffer      */
+       stacktrace_entry entries[80];       /* the actual entries                 */
 };
 
 
 /* function prototypes ********************************************************/
 
-#if defined(ENABLE_INTRP)
-void stacktrace_create_stackframeinfo(stackframeinfo *sfi, u1 *pv, u1 *sp,
-                                                                         u1 *ra);
-#endif
-
-void stacktrace_create_inline_stackframeinfo(stackframeinfo *sfi, u1 *pv,
-                                                                                        u1 *sp, u1 *ra, u1 *xpc);
+void stacktrace_stackframeinfo_add(stackframeinfo *sfi, u1 *pv, u1 *sp, u1 *ra, u1 *xpc);
+void stacktrace_stackframeinfo_remove(stackframeinfo *sfi);
 
-void stacktrace_create_extern_stackframeinfo(stackframeinfo *sfi, u1 *pv,
-                                                                                        u1 *sp, u1 *ra, u1 *xpc);
 
-void stacktrace_create_native_stackframeinfo(stackframeinfo *sfi, u1 *pv,
-                                                                                        u1 *sp, u1 *ra);
+stacktracebuffer *stacktrace_create(stackframeinfo *sfi);
 
-void stacktrace_remove_stackframeinfo(stackframeinfo *sfi);
+java_handle_bytearray_t   *stacktrace_fillInStackTrace(void);
 
-/* inline exception creating functions */
-java_objectheader *stacktrace_inline_arithmeticexception(u1 *pv, u1 *sp, u1 *ra,
-                                                                                                                u1 *xpc);
-
-java_objectheader *stacktrace_inline_arrayindexoutofboundsexception(u1 *pv,
-                                                                                                                                       u1 *sp,
-                                                                                                                                       u1 *ra,
-                                                                                                                                       u1 *xpc,
-                                                                                                                                       s4 index);
-
-java_objectheader *stacktrace_inline_arraystoreexception(u1 *pv, u1 *sp, u1 *ra,
-                                                                                                                u1 *xpc);
-
-java_objectheader *stacktrace_inline_classcastexception(u1 *pv, u1 *sp, u1 *ra,
-                                                                                                               u1 *xpc);
-
-java_objectheader *stacktrace_inline_nullpointerexception(u1 *pv, u1 *sp,
-                                                                                                                 u1 *ra, u1 *xpc);
-
-
-/* hardware exception creating functions */
-java_objectheader *stacktrace_hardware_arithmeticexception(u1 *pv, u1 *sp,
-                                                                                                                  u1 *ra, u1 *xpc);
-
-java_objectheader *stacktrace_hardware_nullpointerexception(u1 *pv, u1 *sp,
-                                                                                                                       u1 *ra, u1 *xpc);
-
-/* refill the stacktrace of an existing exception */
-java_objectheader *stacktrace_inline_fillInStackTrace(u1 *pv, u1 *sp, u1 *ra,
-                                                                                                         u1 *xpc);
-
-stacktracebuffer  *stacktrace_fillInStackTrace(void);
-java_objectarray  *stacktrace_getClassContext(void);
-java_objectheader *stacktrace_getCurrentClassLoader(void);
-java_objectarray  *stacktrace_getStack(void);
-
-void stacktrace_dump_trace(void);
-void stacktrace_print_trace(java_objectheader *xptr);
+#if defined(ENABLE_JAVASE)
+java_handle_objectarray_t *stacktrace_getClassContext(void);
+classinfo                 *stacktrace_getCurrentClass(void);
+java_handle_objectarray_t *stacktrace_getStack(void);
+#endif
 
+void stacktrace_print_trace_from_buffer(stacktracebuffer *stb);
+void stacktrace_print_trace(java_handle_t *xptr);
 
 /* machine dependent functions (code in ARCH_DIR/md.c) */
 
 #if defined(ENABLE_JIT)
 u1 *md_stacktrace_get_returnaddress(u1 *sp, u4 framesize);
+# if defined(__SPARC_64__)
+u1 *md_get_framepointer(u1 *sp);
+u1 *md_get_pv_from_stackframe(u1 *sp);
+# endif
 #endif
 
 #if defined(ENABLE_INTRP)
 u1 *intrp_md_stacktrace_get_returnaddress(u1 *sp, u4 framesize);
 #endif
 
+#if defined(ENABLE_CYCLES_STATS)
+void stacktrace_print_cycles_stats(FILE *file);
+#endif
+
 #endif /* _STACKTRACE_H */
 
 
@@ -179,4 +146,5 @@ u1 *intrp_md_stacktrace_get_returnaddress(u1 *sp, u4 framesize);
  * c-basic-offset: 4
  * tab-width: 4
  * End:
+ * vim:noexpandtab:sw=4:ts=4:
  */