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>
|
2007-04-23 Kyle Galloway <kgallowa@redhat.com>
|
||||||
|
|
||||||
* gnu/classpath/jdwp/natVMVirtualMachine.cc (getSourceFile): Check
|
* gnu/classpath/jdwp/natVMVirtualMachine.cc (getSourceFile): Check
|
||||||
|
@ -423,6 +423,9 @@ public:
|
|||||||
jclass proxyClass;
|
jclass proxyClass;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Pointer to the actual pc value.
|
||||||
|
pc_t *pc_ptr;
|
||||||
|
|
||||||
//Debug info for local variables.
|
//Debug info for local variables.
|
||||||
_Jv_word *locals;
|
_Jv_word *locals;
|
||||||
char *locals_type;
|
char *locals_type;
|
||||||
@ -430,7 +433,8 @@ public:
|
|||||||
// Object pointer for this frame ("this")
|
// Object pointer for this frame ("this")
|
||||||
jobject obj_ptr;
|
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,
|
: _Jv_Frame (reinterpret_cast<_Jv_MethodBase *> (meth), thr,
|
||||||
frame_interpreter)
|
frame_interpreter)
|
||||||
{
|
{
|
||||||
@ -438,6 +442,7 @@ public:
|
|||||||
proxyClass = proxyCls;
|
proxyClass = proxyCls;
|
||||||
thr->interp_frame = (gnu::gcj::RawData *) this;
|
thr->interp_frame = (gnu::gcj::RawData *) this;
|
||||||
obj_ptr = NULL;
|
obj_ptr = NULL;
|
||||||
|
pc_ptr = pc;
|
||||||
}
|
}
|
||||||
|
|
||||||
~_Jv_InterpFrame ()
|
~_Jv_InterpFrame ()
|
||||||
@ -449,6 +454,19 @@ public:
|
|||||||
{
|
{
|
||||||
return obj_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
|
// A native frame in the call stack really just a placeholder
|
||||||
|
@ -13,6 +13,8 @@ details. */
|
|||||||
|
|
||||||
using namespace java::lang::reflect;
|
using namespace java::lang::reflect;
|
||||||
|
|
||||||
|
pc_t pc = NULL;
|
||||||
|
|
||||||
// FRAME_DESC registers this particular invocation as the top-most
|
// FRAME_DESC registers this particular invocation as the top-most
|
||||||
// interpreter frame. This lets the stack tracing code (for
|
// interpreter frame. This lets the stack tracing code (for
|
||||||
// Throwable) print information about the method being interpreted
|
// Throwable) print information about the method being interpreted
|
||||||
@ -20,7 +22,12 @@ details. */
|
|||||||
// destructor so it cleans up automatically when the interpreter
|
// destructor so it cleans up automatically when the interpreter
|
||||||
// returns.
|
// returns.
|
||||||
java::lang::Thread *thread = java::lang::Thread::currentThread();
|
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);
|
_Jv_InterpFrame frame_desc (meth, thread);
|
||||||
|
#endif
|
||||||
|
|
||||||
_Jv_word stack[meth->max_stack];
|
_Jv_word stack[meth->max_stack];
|
||||||
_Jv_word *sp = stack;
|
_Jv_word *sp = stack;
|
||||||
@ -334,8 +341,6 @@ details. */
|
|||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
pc_t pc;
|
|
||||||
|
|
||||||
#ifdef DIRECT_THREADED
|
#ifdef DIRECT_THREADED
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
|
@ -1245,7 +1245,7 @@ _Jv_JVMTI_GetStackTrace (MAYBE_UNUSED jvmtiEnv *env, jthread thread,
|
|||||||
= static_cast<_Jv_InterpMethod *> (frame->self);
|
= static_cast<_Jv_InterpMethod *> (frame->self);
|
||||||
_Jv_InterpFrame *interp_frame
|
_Jv_InterpFrame *interp_frame
|
||||||
= static_cast<_Jv_InterpFrame *> (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
|
else
|
||||||
frames[i].location = -1;
|
frames[i].location = -1;
|
||||||
|
Loading…
Reference in New Issue
Block a user