diff options
author | kgallowa <kgallowa@138bc75d-0d04-0410-961f-82ee72b054a4> | 2007-04-23 17:30:29 +0000 |
---|---|---|
committer | kgallowa <kgallowa@138bc75d-0d04-0410-961f-82ee72b054a4> | 2007-04-23 17:30:29 +0000 |
commit | ca42112c32f3a96e8ef382fdfac01aae8f9a102e (patch) | |
tree | 81048b7fa6e216d50f6149770c8a5fe429e8072d | |
parent | 5be46544c62f8b3bfc70a6689ccf58a37deaef39 (diff) | |
download | gcc-ca42112c32f3a96e8ef382fdfac01aae8f9a102e.tar.gz |
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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@124076 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r-- | libjava/ChangeLog | 12 | ||||
-rw-r--r-- | libjava/include/java-interp.h | 22 | ||||
-rw-r--r-- | libjava/interpret-run.cc | 9 | ||||
-rw-r--r-- | libjava/jvmti.cc | 2 |
4 files changed, 40 insertions, 5 deletions
diff --git a/libjava/ChangeLog b/libjava/ChangeLog index 5d51892301e..b93bb3cd0a4 100644 --- a/libjava/ChangeLog +++ b/libjava/ChangeLog @@ -1,5 +1,17 @@ 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. diff --git a/libjava/include/java-interp.h b/libjava/include/java-interp.h index ee45faa18d8..8da0584af8e 100644 --- a/libjava/include/java-interp.h +++ b/libjava/include/java-interp.h @@ -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 diff --git a/libjava/interpret-run.cc b/libjava/interpret-run.cc index 649b1bd2486..9e1ed2e9c4e 100644 --- a/libjava/interpret-run.cc +++ b/libjava/interpret-run.cc @@ -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 diff --git a/libjava/jvmti.cc b/libjava/jvmti.cc index 716e96ae682..c13bb5aa397 100644 --- a/libjava/jvmti.cc +++ b/libjava/jvmti.cc @@ -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; |