33 #include "native/include/java_lang_Thread.h"
34 #include "native/include/java_nio_ByteBuffer.h"
35 #include "native/include/java_lang_Class.h"
36 #include "native/include/java_lang_ClassLoader.h"
37 #include "native/include/java_lang_reflect_Method.h"
38 #include "native/include/gnu_classpath_jdwp_event_EventRequest.h"
39 #include "native/include/gnu_classpath_jdwp_VMVirtualMachine.h"
41 #include "native/jvmti/VMjdwp.h"
77 log_text (
"VMVirtualMachine_getSuspendCount: not supported");
93 printjvmtierror(
"VMVirtualMachine_getAllLoadedClassCount GetLoadedClasses",err);
96 (*jvmtienv)->Deallocate(
jvmtienv,(
unsigned char*)classes);
117 printjvmtierror(
"VMVirtualMachine_getAllLoadedClasses GetLoadedClasses",err);
124 cl = (*env)->FindClass(env,
"java.lang.Class");
125 if (!cl)
return NULL;
128 joa = (*env)->NewObjectArray(env, (jsize)classcount, cl , NULL);
129 if (!joa)
return NULL;
131 for (i = 0; i < classcount; i++)
132 (*env)->SetObjectArrayElement(env,joa,(jsize)i, (
jobject)classes[i]);
133 (*jvmtienv)->Deallocate(
jvmtienv, (
unsigned char*)classes);
135 cl = (*env)->FindClass(env,
"java.util.Arrays");
136 if (!cl)
return NULL;
138 m = (*env)->GetStaticMethodID(env, cl,
"asList",
"([Ljava/lang/Object;)Ljava/util/List;");
141 ol = (*env)->CallStaticObjectMethod(env,(
jclass)cl,m,joa);
142 if (!ol)
return NULL;
144 cl = (*env)->FindClass(env,
"java.util.List");
145 if (!cl)
return NULL;
146 m = (*env)->GetMethodID(env,cl,
"iterator",
"()Ljava/util/Iterator;");
148 oi = (*env)->CallObjectMethod(env,ol,m);
150 return (
struct java_util_Iterator*)oi;
161 err = (*jvmtienv)->GetClassStatus(
jvmtienv, (
jclass) par1, &status);
162 printjvmtierror(
"VMVirtualMachine_getClassStatus GetClassStatus", err);
174 jmethodID* methodID, m;
184 &count, &methodID))) {
185 printjvmtierror(
"VMVirtualMachine_getAllClassMethods GetClassMethods", err);
190 GetStaticMethodID(env, clazz,
"getClassMethod",
191 "(Ljava/lang/Class;J)Lgnu/classpath/jdwp/VMMethod;");
194 cl = (*env)->FindClass(env,
"gnu.classpath.jdwp.VMMethod");
195 if (!cl)
return NULL;
197 joa = (*env)->NewObjectArray(env, (jsize)count, cl , NULL);
198 if (!joa)
return NULL;
200 for (i = 0; i < count; i++) {
202 CallStaticObjectMethod(env,clazz,m,(
jobject)par1, methodID[i]);
203 if (!ol)
return NULL;
204 (*env)->SetObjectArrayElement(env,joa,(jsize)i, ol);
220 cl = (*env)->FindClass(env,
"gnu.classpath.jdwp.VMMethod");
221 if (!cl)
return NULL;
223 m = (*env)->GetMethodID(env, cl,
"<init>",
"(Ljava/lang/Class;J)V");
226 ol = (*env)->NewObject(env, cl, m, par1, par2);
228 return (
struct gnu_classpath_jdwp_VMMethod*)ol;
238 log_text (
"VMVirtualMachine_getFrames - IMPLEMENT ME!!!");
252 log_text (
"VMVirtualMachine_getFrame - IMPLEMENT ME!!!");
280 printjvmtierror(
"VMVirtualMachine_getThreadStatus GetThreadState", err);
306 log_text (
"VMVirtualMachine_getLoadRequests(");
317 log_text (
"VMVirtualMachine_executeMethod");
334 printjvmtierror(
"VMVirtualMachine.getSourceFile GetSourceFileName", err);
338 str = (*env)->NewString(env,(jchar*)srcname,(jsize)strlen(srcname));
379 erc = (*env)->FindClass(env,
"gnu.classpath.jdwp.event.EventRequest");
381 kindid = (*env)->GetFieldID(env, erc,
"_kind",
"B");
382 kind = (*env)->GetByteField(env, (
jobject)par1, kindid);
387 printjvmtierror(
"VMVirtualMachine_registerEvent SetEventNotificationMode",err);
403 erc = (*env)->FindClass(env,
"gnu.classpath.jdwp.event.EventRequest");
405 kindid = (*env)->GetFieldID(env, erc,
"_kind",
"B");
406 kind = (*env)->GetByteField(env, (
jobject)par1, kindid);
411 printjvmtierror(
"VMVirtualMachine_registerEvent SetEventNotificationMode",err);
JNIEXPORT void JNICALL Java_gnu_classpath_jdwp_VMVirtualMachine_suspendThread(JNIEnv *env, jclass clazz, struct java_lang_Thread *par1)
JNIEXPORT java_objectarray *JNICALL Java_gnu_classpath_jdwp_VMVirtualMachine_getAllClassMethods(JNIEnv *env, jclass clazz, struct java_lang_Class *par1)
JNIEXPORT int32_t JNICALL Java_gnu_classpath_jdwp_VMVirtualMachine_getSuspendCount(JNIEnv *env, jclass clazz, struct java_lang_Thread *par1)
JNIEXPORT struct gnu_classpath_jdwp_VMMethod *JNICALL Java_gnu_classpath_jdwp_VMVirtualMachine_getClassMethod(JNIEnv *env, jclass clazz, struct java_lang_Class *par1, s8 par2)
JNIEXPORT int32_t JNICALL Java_gnu_classpath_jdwp_VMVirtualMachine_getFrameCount(JNIEnv *env, jclass clazz, struct java_lang_Thread *par1)
#define JVMTI_THREAD_STATE_SLEEPING
JNIEXPORT int32_t JNICALL Java_gnu_classpath_jdwp_VMVirtualMachine_getClassStatus(JNIEnv *env, jclass clazz, struct java_lang_Class *par1)
#define JVMTI_THREAD_STATE_BLOCKED_ON_MONITOR_ENTER
static jvmtiError SetEventNotificationMode(jvmtiEnv *env, jvmtiEventMode mode, jvmtiEvent event_type, jthread event_thread,...)
JNIEXPORT void JNICALL Java_gnu_classpath_jdwp_VMVirtualMachine_registerEvent(JNIEnv *env, jclass clazz, struct gnu_classpath_jdwp_event_EventRequest *par1)
void printjvmtierror(char *desc, jvmtiError err)
GNU Classpath java/lang/reflect/Method.
JNIEXPORT struct gnu_classpath_jdwp_VMFrame *JNICALL Java_gnu_classpath_jdwp_VMVirtualMachine_getFrame(JNIEnv *env, jclass clazz, struct java_lang_Thread *par1, struct java_nio_ByteBuffer *par2)
static jvmtiError GetSourceFileName(jvmtiEnv *env, jclass klass, char **source_name_ptr)
JNIEXPORT void JNICALL Java_gnu_classpath_jdwp_VMVirtualMachine_resumeThread(JNIEnv *env, jclass clazz, struct java_lang_Thread *par1)
#define JVMTI_THREAD_STATE_WAITING
#define JVMTI_THREAD_STATE_ALIVE
JNIEXPORT void JNICALL Java_gnu_classpath_jdwp_VMVirtualMachine_unregisterEvent(JNIEnv *env, jclass clazz, struct gnu_classpath_jdwp_event_EventRequest *par1)
static jvmtiError GetLoadedClasses(jvmtiEnv *env, jint *class_count_ptr, jclass **classes_ptr)
JNIEXPORT struct gnu_classpath_jdwp_util_MethodResult *JNICALL Java_gnu_classpath_jdwp_VMVirtualMachine_executeMethod(JNIEnv *env, jclass clazz, struct java_lang_Object *par1, struct java_lang_Thread *par2, struct java_lang_Class *par3, struct java_lang_reflect_Method *par4, java_objectarray *par5, int32_t par6)
JNIEXPORT struct java_util_Iterator *JNICALL Java_gnu_classpath_jdwp_VMVirtualMachine_getAllLoadedClasses(JNIEnv *env, jclass clazz)
JNIEXPORT struct java_util_ArrayList *JNICALL Java_gnu_classpath_jdwp_VMVirtualMachine_getLoadRequests(JNIEnv *env, jclass clazz, struct java_lang_ClassLoader *par1)
GNU Classpath java/lang/ClassLoader.
JNIEXPORT void JNICALL Java_gnu_classpath_jdwp_VMVirtualMachine_clearEvents(JNIEnv *env, jclass clazz, int32_t par1)
GNU Classpath java/lang/String.
JNIEXPORT struct java_util_ArrayList *JNICALL Java_gnu_classpath_jdwp_VMVirtualMachine_getFrames(JNIEnv *env, jclass clazz, struct java_lang_Thread *par1, int32_t par2, int32_t par3)
static jvmtiError GetClassMethods(jvmtiEnv *env, jclass klass, jint *method_count_ptr, jmethodID **methods_ptr)
JNIEXPORT int32_t JNICALL Java_gnu_classpath_jdwp_VMVirtualMachine_getThreadStatus(JNIEnv *env, jclass clazz, struct java_lang_Thread *par1)
GNU Classpath java/lang/Thread.
JNIEXPORT int32_t JNICALL Java_gnu_classpath_jdwp_VMVirtualMachine_getAllLoadedClassesCount(JNIEnv *env, jclass clazz)
JNIEXPORT struct java_lang_String *JNICALL Java_gnu_classpath_jdwp_VMVirtualMachine_getSourceFile(JNIEnv *env, jclass clazz, struct java_lang_Class *par1)
GNU Classpath java/lang/Class.
static jvmtiEvent EventKind2jvmtiEvent(jbyte kind)