blob: 6c3103ce05682d0eed6f003dadfed5bb18f58288 [file] [log] [blame]
// 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 <unwind.h>
#include <gcj/cni.h>
#include <gcj/javaprims.h>
#include <java-interp.h>
#include <java/lang/Class.h>
#include <java/lang/StackTraceElement.h>
#include <java/lang/Throwable.h>
#include <gnu/gcj/runtime/NameFinder.h>
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__ */