java-interp.h (_Jv_InterpFrame): Add pointer to the interpreter PC.
2007-04-23 Kyle Galloway <kgallowa@redhat.com> * include/java-interp.h (_Jv_InterpFrame): Add pointer to the interpreter PC. (<init>): Add a pointer to the interpreter PC as a parameter with default value NULL. (get_pc): New method. * interpret-run.cc: If debugging, pass a pointer to the PC when creating the stack frame. * jvmti.cc (_Jv_JVMTI_GetStackTrace): Call _Jv_InterpFrame::get_pc to get the PC. From-SVN: r124076
This commit is contained in:
parent
34a7526e36
commit
d76473618c
@ -1,3 +1,15 @@
|
||||
2007-04-23 Kyle Galloway <kgallowa@redhat.com>
|
||||
|
||||
* include/java-interp.h (_Jv_InterpFrame): Add pointer to the
|
||||
interpreter PC.
|
||||
(<init>): Add a pointer to the interpreter PC as a parameter with
|
||||
default value NULL.
|
||||
(get_pc): New method.
|
||||
* interpret-run.cc: If debugging, pass a pointer to the PC when
|
||||
creating the stack frame.
|
||||
* jvmti.cc (_Jv_JVMTI_GetStackTrace): Call _Jv_InterpFrame::get_pc
|
||||
to get the PC.
|
||||
|
||||
2007-04-23 Kyle Galloway <kgallowa@redhat.com>
|
||||
|
||||
* gnu/classpath/jdwp/natVMVirtualMachine.cc (getSourceFile): Check
|
||||
|
@ -422,6 +422,9 @@ public:
|
||||
pc_t pc;
|
||||
jclass proxyClass;
|
||||
};
|
||||
|
||||
// Pointer to the actual pc value.
|
||||
pc_t *pc_ptr;
|
||||
|
||||
//Debug info for local variables.
|
||||
_Jv_word *locals;
|
||||
@ -430,7 +433,8 @@ public:
|
||||
// Object pointer for this frame ("this")
|
||||
jobject obj_ptr;
|
||||
|
||||
_Jv_InterpFrame (void *meth, java::lang::Thread *thr, jclass proxyCls = NULL)
|
||||
_Jv_InterpFrame (void *meth, java::lang::Thread *thr, jclass proxyCls = NULL,
|
||||
pc_t *pc = NULL)
|
||||
: _Jv_Frame (reinterpret_cast<_Jv_MethodBase *> (meth), thr,
|
||||
frame_interpreter)
|
||||
{
|
||||
@ -438,6 +442,7 @@ public:
|
||||
proxyClass = proxyCls;
|
||||
thr->interp_frame = (gnu::gcj::RawData *) this;
|
||||
obj_ptr = NULL;
|
||||
pc_ptr = pc;
|
||||
}
|
||||
|
||||
~_Jv_InterpFrame ()
|
||||
@ -448,7 +453,20 @@ public:
|
||||
jobject get_this_ptr ()
|
||||
{
|
||||
return obj_ptr;
|
||||
}
|
||||
}
|
||||
|
||||
pc_t get_pc ()
|
||||
{
|
||||
pc_t pc;
|
||||
|
||||
// If the PC_PTR is NULL, we are not debugging.
|
||||
if (pc_ptr == NULL)
|
||||
pc = 0;
|
||||
else
|
||||
pc = *pc_ptr;
|
||||
|
||||
return pc;
|
||||
}
|
||||
};
|
||||
|
||||
// A native frame in the call stack really just a placeholder
|
||||
|
@ -12,6 +12,8 @@ details. */
|
||||
* compiled directly. */
|
||||
|
||||
using namespace java::lang::reflect;
|
||||
|
||||
pc_t pc = NULL;
|
||||
|
||||
// FRAME_DESC registers this particular invocation as the top-most
|
||||
// interpreter frame. This lets the stack tracing code (for
|
||||
@ -20,7 +22,12 @@ details. */
|
||||
// destructor so it cleans up automatically when the interpreter
|
||||
// returns.
|
||||
java::lang::Thread *thread = java::lang::Thread::currentThread();
|
||||
|
||||
#ifdef DEBUG
|
||||
_Jv_InterpFrame frame_desc (meth, thread, NULL, &pc);
|
||||
#else
|
||||
_Jv_InterpFrame frame_desc (meth, thread);
|
||||
#endif
|
||||
|
||||
_Jv_word stack[meth->max_stack];
|
||||
_Jv_word *sp = stack;
|
||||
@ -334,8 +341,6 @@ details. */
|
||||
#endif
|
||||
};
|
||||
|
||||
pc_t pc;
|
||||
|
||||
#ifdef DIRECT_THREADED
|
||||
|
||||
#ifdef DEBUG
|
||||
|
@ -1245,7 +1245,7 @@ _Jv_JVMTI_GetStackTrace (MAYBE_UNUSED jvmtiEnv *env, jthread thread,
|
||||
= static_cast<_Jv_InterpMethod *> (frame->self);
|
||||
_Jv_InterpFrame *interp_frame
|
||||
= static_cast<_Jv_InterpFrame *> (frame);
|
||||
frames[i].location = imeth->insn_index (interp_frame->pc);
|
||||
frames[i].location = imeth->insn_index (interp_frame->get_pc ());
|
||||
}
|
||||
else
|
||||
frames[i].location = -1;
|
||||
|
Loading…
Reference in New Issue
Block a user