OSDN Git Service

2007-04-23 Kyle Galloway <kgallowa@redhat.com>
authorkgallowa <kgallowa@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 23 Apr 2007 17:30:29 +0000 (17:30 +0000)
committerkgallowa <kgallowa@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 23 Apr 2007 17:30:29 +0000 (17:30 +0000)
* 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

libjava/ChangeLog
libjava/include/java-interp.h
libjava/interpret-run.cc
libjava/jvmti.cc

index 5d51892..b93bb3c 100644 (file)
@@ -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.
 
index ee45faa..8da0584 100644 (file)
@@ -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
index 649b1bd..9e1ed2e 100644 (file)
@@ -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
index 716e96a..c13bb5a 100644 (file)
@@ -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;