* 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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@124076
138bc75d-0d04-0410-961f-
82ee72b054a4
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
for null source file and throw an exception indicating this.
pc_t pc;
jclass proxyClass;
};
+
+ // Pointer to the actual pc value.
+ pc_t *pc_ptr;
//Debug info for local variables.
_Jv_word *locals;
// 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)
{
proxyClass = proxyCls;
thr->interp_frame = (gnu::gcj::RawData *) this;
obj_ptr = NULL;
+ pc_ptr = pc;
}
~_Jv_InterpFrame ()
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
* 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
// 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;
#endif
};
- pc_t pc;
-
#ifdef DIRECT_THREADED
#ifdef DEBUG
= 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;