summaryrefslogtreecommitdiff
path: root/libjava
diff options
context:
space:
mode:
authorkseitz <kseitz@138bc75d-0d04-0410-961f-82ee72b054a4>2007-02-13 18:57:01 +0000
committerkseitz <kseitz@138bc75d-0d04-0410-961f-82ee72b054a4>2007-02-13 18:57:01 +0000
commit5b9cd26616f2fe5ed3c99a6bbdb6745ce9d227dc (patch)
tree0063b7e73f3674970a68e69e728b48abb52b3e8d /libjava
parentf93c52f5652d57bfb619b8462e2f3347035b60cf (diff)
downloadgcc-5b9cd26616f2fe5ed3c99a6bbdb6745ce9d227dc.tar.gz
* gnu/classpath/jdwp/natVMVirtualMachine.cc
(jdwpBreakpointCB): New function. (jdwpVMInitCB): Define and enable the breakpoint callback. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@121889 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libjava')
-rw-r--r--libjava/ChangeLog7
-rw-r--r--libjava/gnu/classpath/jdwp/natVMVirtualMachine.cc30
2 files changed, 35 insertions, 2 deletions
diff --git a/libjava/ChangeLog b/libjava/ChangeLog
index 9a53848e7e9..efd3543e60c 100644
--- a/libjava/ChangeLog
+++ b/libjava/ChangeLog
@@ -1,3 +1,10 @@
+2007-02-13 Keith Seitz <keiths@redhat.com>
+
+ * gnu/classpath/jdwp/natVMVirtualMachine.cc
+ (jdwpBreakpointCB): New function.
+ (jdwpVMInitCB): Define and enable the breakpoint
+ callback.
+
2007-02-13 Andrew Haley <aph@redhat.com>
* testsuite/libjava.lang/Divide_2.out
diff --git a/libjava/gnu/classpath/jdwp/natVMVirtualMachine.cc b/libjava/gnu/classpath/jdwp/natVMVirtualMachine.cc
index e06daa7bb24..d219f588956 100644
--- a/libjava/gnu/classpath/jdwp/natVMVirtualMachine.cc
+++ b/libjava/gnu/classpath/jdwp/natVMVirtualMachine.cc
@@ -15,8 +15,6 @@ details. */
#include <jvm.h>
#include <jvmti.h>
-#include <java-interp.h>
-
#include <java/lang/Class.h>
#include <java/lang/ClassLoader.h>
#include <java/lang/Integer.h>
@@ -34,6 +32,7 @@ details. */
#include <gnu/classpath/jdwp/VMFrame.h>
#include <gnu/classpath/jdwp/VMMethod.h>
#include <gnu/classpath/jdwp/VMVirtualMachine.h>
+#include <gnu/classpath/jdwp/event/BreakpointEvent.h>
#include <gnu/classpath/jdwp/event/ClassPrepareEvent.h>
#include <gnu/classpath/jdwp/event/EventManager.h>
#include <gnu/classpath/jdwp/event/EventRequest.h>
@@ -71,6 +70,8 @@ struct step_info
static Location *get_request_location (EventRequest *);
static gnu::classpath::jdwp::event::filters::StepFilter *
get_request_step_filter (EventRequest *);
+static void JNICALL jdwpBreakpointCB (jvmtiEnv *, JNIEnv *, jthread,
+ jmethodID, jlocation);
static void JNICALL jdwpClassPrepareCB (jvmtiEnv *, JNIEnv *, jthread, jclass);
static void JNICALL jdwpThreadEndCB (jvmtiEnv *, JNIEnv *, jthread);
static void JNICALL jdwpThreadStartCB (jvmtiEnv *, JNIEnv *, jthread);
@@ -644,6 +645,29 @@ throw_jvmti_error (jvmtiError err)
}
static void JNICALL
+jdwpBreakpointCB (jvmtiEnv *env, MAYBE_UNUSED JNIEnv *jni_env,
+ jthread thread, jmethodID method, jlocation location)
+{
+ jclass klass;
+ jvmtiError err;
+ err = env->GetMethodDeclaringClass (method, &klass);
+ JvAssert (err == JVMTI_ERROR_NONE);
+
+ using namespace gnu::classpath::jdwp;
+
+ jlong methodId = reinterpret_cast<jlong> (method);
+ VMMethod *meth = VMVirtualMachine::getClassMethod (klass, methodId);
+ Location *loc = new Location (meth, location);
+ JvAssert (thread->frame.frame_type == frame_interpreter);
+ _Jv_InterpFrame *iframe
+ = reinterpret_cast<_Jv_InterpFrame *> (thread->interp_frame);
+ jobject instance = iframe->get_this_ptr ();
+ event::BreakpointEvent *event
+ = new event::BreakpointEvent (thread, loc, instance);
+ Jdwp::notify (event);
+}
+
+static void JNICALL
jdwpClassPrepareCB (jvmtiEnv *env, MAYBE_UNUSED JNIEnv *jni_env,
jthread thread, jclass klass)
{
@@ -703,6 +727,7 @@ jdwpVMInitCB (MAYBE_UNUSED jvmtiEnv *env, MAYBE_UNUSED JNIEnv *jni_env,
{
// The VM is now initialized, add our callbacks
jvmtiEventCallbacks callbacks;
+ DEFINE_CALLBACK (callbacks, Breakpoint);
DEFINE_CALLBACK (callbacks, ClassPrepare);
DEFINE_CALLBACK (callbacks, ThreadEnd);
DEFINE_CALLBACK (callbacks, ThreadStart);
@@ -710,6 +735,7 @@ jdwpVMInitCB (MAYBE_UNUSED jvmtiEnv *env, MAYBE_UNUSED JNIEnv *jni_env,
_jdwp_jvmtiEnv->SetEventCallbacks (&callbacks, sizeof (callbacks));
// Enable callbacks
+ ENABLE_EVENT (BREAKPOINT, NULL);
ENABLE_EVENT (CLASS_PREPARE, NULL);
ENABLE_EVENT (THREAD_END, NULL);
ENABLE_EVENT (THREAD_START, NULL);