// java-stack.h - Definitions for unwinding & inspecting the call stack. /* Copyright (C) 2003 Free Software Foundation This file is part of libgcj. This software is copyrighted work licensed under the terms of the Libgcj License. Please consult the file "LIBGCJ_LICENSE" for details. */ #ifndef __JV_STACKTRACE_H__ #define __JV_STACKTRACE_H__ #include #include #include #include #include #include #include #include using namespace gnu::gcj::runtime; enum _Jv_FrameType { frame_native, frame_interpreter }; #ifdef INTERPRETER struct _Jv_InterpFrameInfo { _Jv_InterpMethod *meth; pc_t pc; }; #endif union _Jv_FrameInfo { }; struct _Jv_StackFrame { _Jv_FrameType type; /* Native or interpreted. */ union { #ifdef INTERPRETER _Jv_InterpFrameInfo interp; #endif void *ip; }; // _Jv_FrameInfo info; /* Frame-type specific data. */ jclass klass; _Jv_Method *meth; }; class _Jv_StackTrace { private: int length; _Jv_StackFrame frames[]; static void UpdateNCodeMap (); static jclass ClassForIP (void *ip, void **ncode); static void FillInFrameInfo (_Jv_StackFrame *frame); static void getLineNumberForFrame(_Jv_StackFrame *frame, NameFinder *finder, jstring *sourceFileName, jint *lineNum); static _Unwind_Reason_Code UnwindTraceFn (struct _Unwind_Context *context, void *state_ptr); public: static _Jv_StackTrace *GetStackTrace (void); static JArray< ::java::lang::StackTraceElement *>* GetStackTraceElements (_Jv_StackTrace *trace, java::lang::Throwable *throwable); static jclass GetCallingClass (void); }; #endif /* __JV_STACKTRACE_H__ */