diff options
author | Keith Seitz <keiths@redhat.com> | 2007-02-13 18:57:01 +0000 |
---|---|---|
committer | Keith Seitz <kseitz@gcc.gnu.org> | 2007-02-13 18:57:01 +0000 |
commit | a13c5b70a48cdfeef426eb3c394a963ebd7aff46 (patch) | |
tree | 0063b7e73f3674970a68e69e728b48abb52b3e8d /libjava/gnu | |
parent | b3a00d65b811cb24a05542d86dfa4276f3a3aef4 (diff) | |
download | gcc-a13c5b70a48cdfeef426eb3c394a963ebd7aff46.zip gcc-a13c5b70a48cdfeef426eb3c394a963ebd7aff46.tar.gz gcc-a13c5b70a48cdfeef426eb3c394a963ebd7aff46.tar.bz2 |
* gnu/classpath/jdwp/natVMVirtualMachine.cc
(jdwpBreakpointCB): New function.
(jdwpVMInitCB): Define and enable the breakpoint
callback.
From-SVN: r121889
Diffstat (limited to 'libjava/gnu')
-rw-r--r-- | libjava/gnu/classpath/jdwp/natVMVirtualMachine.cc | 30 |
1 files changed, 28 insertions, 2 deletions
diff --git a/libjava/gnu/classpath/jdwp/natVMVirtualMachine.cc b/libjava/gnu/classpath/jdwp/natVMVirtualMachine.cc index e06daa7..d219f58 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); |