[vmkit-commits] [vmkit] r139475 - in /vmkit/trunk: include/mvm/System.h lib/J3/Classpath/ClasspathVMRuntime.inc lib/J3/VMCore/JavaClass.cpp lib/J3/VMCore/Jni.cpp lib/J3/VMCore/Jnjvm.cpp tools/j3/Main.cpp
Nicolas Geoffray
nicolas.geoffray at lip6.fr
Sat Sep 10 15:27:00 PDT 2011
Author: geoffray
Date: Sat Sep 10 17:27:00 2011
New Revision: 139475
URL: http://llvm.org/viewvc/llvm-project?rev=139475&view=rev
Log:
Another few bug fixes.
Modified:
vmkit/trunk/include/mvm/System.h
vmkit/trunk/lib/J3/Classpath/ClasspathVMRuntime.inc
vmkit/trunk/lib/J3/VMCore/JavaClass.cpp
vmkit/trunk/lib/J3/VMCore/Jni.cpp
vmkit/trunk/lib/J3/VMCore/Jnjvm.cpp
vmkit/trunk/tools/j3/Main.cpp
Modified: vmkit/trunk/include/mvm/System.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/mvm/System.h?rev=139475&r1=139474&r2=139475&view=diff
==============================================================================
--- vmkit/trunk/include/mvm/System.h (original)
+++ vmkit/trunk/include/mvm/System.h Sat Sep 10 17:27:00 2011
@@ -203,6 +203,10 @@
static int GetNumberOfProcessors() {
return sysconf(_SC_NPROCESSORS_ONLN);
}
+
+ static void Exit(int value) {
+ _exit(value);
+ }
};
}
Modified: vmkit/trunk/lib/J3/Classpath/ClasspathVMRuntime.inc
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/Classpath/ClasspathVMRuntime.inc?rev=139475&r1=139474&r2=139475&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/Classpath/ClasspathVMRuntime.inc (original)
+++ vmkit/trunk/lib/J3/Classpath/ClasspathVMRuntime.inc Sat Sep 10 17:27:00 2011
@@ -188,7 +188,7 @@
jclass clazz,
#endif
jint par1) {
- exit(par1);
+ mvm::System::Exit(par1);
}
JNIEXPORT jlong Java_java_lang_VMRuntime_freeMemory(
Modified: vmkit/trunk/lib/J3/VMCore/JavaClass.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/JavaClass.cpp?rev=139475&r1=139474&r2=139475&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/VMCore/JavaClass.cpp (original)
+++ vmkit/trunk/lib/J3/VMCore/JavaClass.cpp Sat Sep 10 17:27:00 2011
@@ -1060,14 +1060,25 @@
for (sint32 i =0; i < clen; ++i) {
cur = jniConsClName->elements[i];
- if (cur == '/') ptr[0] = '_';
- else if (cur == '_') {
+ if (cur == '/') {
+ ptr[0] = '_';
+ ptr++;
+ } else if (cur == '_') {
ptr[0] = '_';
ptr[1] = '1';
- ++ptr;
+ ptr += 2;
+ } else if (cur == '$') {
+ ptr[0] = '_';
+ ptr[1] = '0';
+ ptr[2] = '0';
+ ptr[3] = '0';
+ ptr[4] = '2';
+ ptr[5] = '4';
+ ptr += 6;
+ } else {
+ ptr[0] = (uint8)cur;
+ ptr++;
}
- else ptr[0] = (uint8)cur;
- ++ptr;
}
ptr[0] = '_';
Modified: vmkit/trunk/lib/J3/VMCore/Jni.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/Jni.cpp?rev=139475&r1=139474&r2=139475&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/VMCore/Jni.cpp (original)
+++ vmkit/trunk/lib/J3/VMCore/Jni.cpp Sat Sep 10 17:27:00 2011
@@ -146,6 +146,7 @@
BEGIN_JNI_EXCEPTION
+ verifyNull(_Cl);
// Local object references.
JavaObject* Cl = *(JavaObject**)_Cl;
JavaObject* res = 0;
@@ -156,7 +157,6 @@
Jnjvm* vm = JavaThread::get()->getJVM();
- verifyNull(Cl);
UserCommonClass* cl = UserCommonClass::resolvedImplClass(vm, Cl, true);
if (!cl->isClass()) RETURN_FROM_JNI(0);
@@ -231,9 +231,9 @@
jboolean IsSameObject(JNIEnv *env, jobject ref1, jobject ref2) {
BEGIN_JNI_EXCEPTION
-
- JavaObject* Ref1 = *(JavaObject**)ref1;
- JavaObject* Ref2 = *(JavaObject**)ref2;
+
+ JavaObject* Ref1 = ref1 ? *(JavaObject**)ref1 : NULL;
+ JavaObject* Ref2 = ref2 ? *(JavaObject**)ref2 : NULL;
llvm_gcroot(Ref1, 0);
llvm_gcroot(Ref2, 0);
@@ -492,11 +492,29 @@
}
-jobject CallObjectMethodA(JNIEnv *env, jobject obj, jmethodID methodID,
+jobject CallObjectMethodA(JNIEnv *env, jobject _obj, jmethodID methodID,
const jvalue * args) {
- fprintf(stderr, "Implement me\n");
- abort();
- return 0;
+ BEGIN_JNI_EXCEPTION
+
+ verifyNull(_obj);
+
+ // Local object references.
+ JavaObject* obj = *(JavaObject**)_obj;
+ JavaObject* res = 0;
+ llvm_gcroot(obj, 0);
+ llvm_gcroot(res, 0);
+
+ JavaMethod* meth = (JavaMethod*)methodID;
+ Jnjvm* vm = JavaThread::get()->getJVM();
+ UserClass* cl = getClassFromVirtualMethod(vm, meth, JavaObject::getClass(obj));
+ res = meth->invokeJavaObjectVirtualBuf(vm, cl, obj, (void*)args);
+
+ jobject ret = (jobject)th->pushJNIRef(res);
+ RETURN_FROM_JNI(ret);
+
+ END_JNI_EXCEPTION
+
+ RETURN_FROM_JNI(0);
}
@@ -551,11 +569,26 @@
}
-jboolean CallBooleanMethodA(JNIEnv *env, jobject obj, jmethodID methodID,
+jboolean CallBooleanMethodA(JNIEnv *env, jobject _obj, jmethodID methodID,
const jvalue * args) {
- fprintf(stderr, "Implement me\n");
- abort();
- return 0;
+ BEGIN_JNI_EXCEPTION
+
+ verifyNull(_obj);
+
+ // Local object references.
+ JavaObject* obj = *(JavaObject**)_obj;
+ llvm_gcroot(obj, 0);
+
+ JavaMethod* meth = (JavaMethod*)methodID;
+ Jnjvm* vm = JavaThread::get()->getJVM();
+ UserClass* cl = getClassFromVirtualMethod(vm, meth, JavaObject::getClass(obj));
+ jboolean res = (jboolean)meth->invokeIntVirtualBuf(vm, cl, obj, (void*)args);
+
+ RETURN_FROM_JNI(res);
+
+ END_JNI_EXCEPTION
+
+ RETURN_FROM_JNI(0);
}
@@ -588,11 +621,26 @@
}
-jbyte CallByteMethodA(JNIEnv *env, jobject obj, jmethodID methodID,
+jbyte CallByteMethodA(JNIEnv *env, jobject _obj, jmethodID methodID,
const jvalue *args) {
- fprintf(stderr, "Implement me\n");
- abort();
- return 0;
+ BEGIN_JNI_EXCEPTION
+
+ verifyNull(_obj);
+
+ // Local object references.
+ JavaObject* obj = *(JavaObject**)_obj;
+ llvm_gcroot(obj, 0);
+
+ JavaMethod* meth = (JavaMethod*)methodID;
+ Jnjvm* vm = JavaThread::get()->getJVM();
+ UserClass* cl = getClassFromVirtualMethod(vm, meth, JavaObject::getClass(obj));
+ jbyte res = (jbyte)meth->invokeIntVirtualBuf(vm, cl, obj, (void*)args);
+
+ RETURN_FROM_JNI(res);
+
+ END_JNI_EXCEPTION
+
+ RETURN_FROM_JNI(0);
}
@@ -626,11 +674,26 @@
}
-jchar CallCharMethodA(JNIEnv *env, jobject obj, jmethodID methodID,
+jchar CallCharMethodA(JNIEnv *env, jobject _obj, jmethodID methodID,
const jvalue *args) {
- fprintf(stderr, "Implement me\n");
- abort();
- return 0;
+ BEGIN_JNI_EXCEPTION
+
+ verifyNull(_obj);
+
+ // Local object references.
+ JavaObject* obj = *(JavaObject**)_obj;
+ llvm_gcroot(obj, 0);
+
+ JavaMethod* meth = (JavaMethod*)methodID;
+ Jnjvm* vm = JavaThread::get()->getJVM();
+ UserClass* cl = getClassFromVirtualMethod(vm, meth, JavaObject::getClass(obj));
+ jchar res = (jchar)meth->invokeIntVirtualBuf(vm, cl, obj, (void*)args);
+
+ RETURN_FROM_JNI(res);
+
+ END_JNI_EXCEPTION
+
+ RETURN_FROM_JNI(0);
}
@@ -664,11 +727,26 @@
}
-jshort CallShortMethodA(JNIEnv *env, jobject obj, jmethodID methodID,
+jshort CallShortMethodA(JNIEnv *env, jobject _obj, jmethodID methodID,
const jvalue *args) {
- fprintf(stderr, "Implement me\n");
- abort();
- return 0;
+ BEGIN_JNI_EXCEPTION
+
+ verifyNull(_obj);
+
+ // Local object references.
+ JavaObject* obj = *(JavaObject**)_obj;
+ llvm_gcroot(obj, 0);
+
+ JavaMethod* meth = (JavaMethod*)methodID;
+ Jnjvm* vm = JavaThread::get()->getJVM();
+ UserClass* cl = getClassFromVirtualMethod(vm, meth, JavaObject::getClass(obj));
+ jshort res = (jshort)meth->invokeIntVirtualBuf(vm, cl, obj, (void*)args);
+
+ RETURN_FROM_JNI(res);
+
+ END_JNI_EXCEPTION
+
+ RETURN_FROM_JNI(0);
}
@@ -726,9 +804,24 @@
jint CallIntMethodA(JNIEnv *env, jobject _obj, jmethodID methodID,
const jvalue *args) {
- fprintf(stderr, "Implement me\n");
- abort();
- return 0;
+ BEGIN_JNI_EXCEPTION
+
+ verifyNull(_obj);
+
+ // Local object references.
+ JavaObject* obj = *(JavaObject**)_obj;
+ llvm_gcroot(obj, 0);
+
+ JavaMethod* meth = (JavaMethod*)methodID;
+ Jnjvm* vm = JavaThread::get()->getJVM();
+ UserClass* cl = getClassFromVirtualMethod(vm, meth, JavaObject::getClass(obj));
+ jint res = (jint)meth->invokeIntVirtualBuf(vm, cl, obj, (void*)args);
+
+ RETURN_FROM_JNI(res);
+
+ END_JNI_EXCEPTION
+
+ RETURN_FROM_JNI(0);
}
@@ -763,11 +856,26 @@
}
-jlong CallLongMethodA(JNIEnv *env, jobject obj, jmethodID methodID,
+jlong CallLongMethodA(JNIEnv *env, jobject _obj, jmethodID methodID,
const jvalue *args) {
- fprintf(stderr, "Implement me\n");
- abort();
- return 0;
+ BEGIN_JNI_EXCEPTION
+
+ verifyNull(_obj);
+
+ // Local object references.
+ JavaObject* obj = *(JavaObject**)_obj;
+ llvm_gcroot(obj, 0);
+
+ JavaMethod* meth = (JavaMethod*)methodID;
+ Jnjvm* vm = JavaThread::get()->getJVM();
+ UserClass* cl = getClassFromVirtualMethod(vm, meth, JavaObject::getClass(obj));
+ jlong res = (jlong)meth->invokeLongVirtualBuf(vm, cl, obj, (void*)args);
+
+ RETURN_FROM_JNI(res);
+
+ END_JNI_EXCEPTION
+
+ RETURN_FROM_JNI(0);
}
@@ -822,9 +930,24 @@
jfloat CallFloatMethodA(JNIEnv *env, jobject _obj, jmethodID methodID,
const jvalue *args) {
- fprintf(stderr, "Implement me\n");
- abort();
- return 0;
+ BEGIN_JNI_EXCEPTION
+
+ verifyNull(_obj);
+
+ // Local object references.
+ JavaObject* obj = *(JavaObject**)_obj;
+ llvm_gcroot(obj, 0);
+
+ JavaMethod* meth = (JavaMethod*)methodID;
+ Jnjvm* vm = JavaThread::get()->getJVM();
+ UserClass* cl = getClassFromVirtualMethod(vm, meth, JavaObject::getClass(obj));
+ jfloat res = (jfloat)meth->invokeFloatVirtualBuf(vm, cl, obj, (void*)args);
+
+ RETURN_FROM_JNI(res);
+
+ END_JNI_EXCEPTION
+
+ RETURN_FROM_JNI(0.0f);
}
@@ -879,9 +1002,24 @@
jdouble CallDoubleMethodA(JNIEnv *env, jobject _obj, jmethodID methodID,
const jvalue *args) {
- fprintf(stderr, "Implement me\n");
- abort();
- return 0;
+ BEGIN_JNI_EXCEPTION
+
+ verifyNull(_obj);
+
+ // Local object references.
+ JavaObject* obj = *(JavaObject**)_obj;
+ llvm_gcroot(obj, 0);
+
+ JavaMethod* meth = (JavaMethod*)methodID;
+ Jnjvm* vm = JavaThread::get()->getJVM();
+ UserClass* cl = getClassFromVirtualMethod(vm, meth, JavaObject::getClass(obj));
+ jdouble res = (jdouble)meth->invokeDoubleVirtualBuf(vm, cl, obj, (void*)args);
+
+ RETURN_FROM_JNI(res);
+
+ END_JNI_EXCEPTION
+
+ RETURN_FROM_JNI(0.0);
}
@@ -1679,11 +1817,27 @@
}
-jobject CallStaticObjectMethodA(JNIEnv *env, jclass clazz, jmethodID methodID,
+jobject CallStaticObjectMethodA(JNIEnv *env, jclass _clazz, jmethodID methodID,
const jvalue *args) {
- fprintf(stderr, "Implement me\n");
- abort();
- return 0;
+ BEGIN_JNI_EXCEPTION
+
+ // Local object references.
+ JavaObject* clazz = *(JavaObject**)_clazz;
+ JavaObject* res = 0;
+ llvm_gcroot(clazz, 0);
+ llvm_gcroot(res, 0);
+
+ JavaMethod* meth = (JavaMethod*)methodID;
+ Jnjvm* vm = JavaThread::get()->getJVM();
+ UserClass* cl = getClassFromStaticMethod(vm, meth, clazz);
+
+ res = meth->invokeJavaObjectStaticBuf(vm, cl, (void*)args);
+
+ jobject ret = (jobject)th->pushJNIRef(res);
+ RETURN_FROM_JNI(ret);
+
+ END_JNI_EXCEPTION
+ RETURN_FROM_JNI(0);
}
@@ -1731,11 +1885,23 @@
}
-jboolean CallStaticBooleanMethodA(JNIEnv *env, jclass clazz, jmethodID methodID,
+jboolean CallStaticBooleanMethodA(JNIEnv *env, jclass _clazz, jmethodID methodID,
const jvalue *args) {
- fprintf(stderr, "Implement me\n");
- abort();
- return 0;
+ BEGIN_JNI_EXCEPTION
+
+ // Local object references.
+ JavaObject* clazz = *(JavaObject**)_clazz;
+ llvm_gcroot(clazz, 0);
+
+ JavaMethod* meth = (JavaMethod*)methodID;
+ Jnjvm* vm = JavaThread::get()->getJVM();
+ UserClass* cl = getClassFromStaticMethod(vm, meth, clazz);
+ jboolean res = (jboolean) meth->invokeIntStaticBuf(vm, cl, (void*)args);
+
+ RETURN_FROM_JNI(res);
+
+ END_JNI_EXCEPTION
+ RETURN_FROM_JNI(0);
}
@@ -1781,11 +1947,23 @@
}
-jbyte CallStaticByteMethodA(JNIEnv *env, jclass clazz, jmethodID methodID,
+jbyte CallStaticByteMethodA(JNIEnv *env, jclass _clazz, jmethodID methodID,
const jvalue *args) {
- fprintf(stderr, "Implement me\n");
- abort();
- return 0;
+ BEGIN_JNI_EXCEPTION
+
+ // Local object references.
+ JavaObject* clazz = *(JavaObject**)_clazz;
+ llvm_gcroot(clazz, 0);
+
+ JavaMethod* meth = (JavaMethod*)methodID;
+ Jnjvm* vm = JavaThread::get()->getJVM();
+ UserClass* cl = getClassFromStaticMethod(vm, meth, clazz);
+ jbyte res = (jbyte) meth->invokeIntStaticBuf(vm, cl, (void*)args);
+
+ RETURN_FROM_JNI(res);
+
+ END_JNI_EXCEPTION
+ RETURN_FROM_JNI(0);
}
@@ -1833,9 +2011,21 @@
jchar CallStaticCharMethodA(JNIEnv *env, jclass _clazz, jmethodID methodID,
const jvalue *args) {
- fprintf(stderr, "Implement me\n");
- abort();
- return 0;
+ BEGIN_JNI_EXCEPTION
+
+ // Local object references.
+ JavaObject* clazz = *(JavaObject**)_clazz;
+ llvm_gcroot(clazz, 0);
+
+ JavaMethod* meth = (JavaMethod*)methodID;
+ Jnjvm* vm = JavaThread::get()->getJVM();
+ UserClass* cl = getClassFromStaticMethod(vm, meth, clazz);
+ jchar res = (jchar) meth->invokeIntStaticBuf(vm, cl, (void*)args);
+
+ RETURN_FROM_JNI(res);
+
+ END_JNI_EXCEPTION
+ RETURN_FROM_JNI(0);
}
@@ -1883,11 +2073,23 @@
}
-jshort CallStaticShortMethodA(JNIEnv *env, jclass clazz, jmethodID methodID,
+jshort CallStaticShortMethodA(JNIEnv *env, jclass _clazz, jmethodID methodID,
const jvalue *args) {
- fprintf(stderr, "Implement me\n");
- abort();
- return 0;
+ BEGIN_JNI_EXCEPTION
+
+ // Local object references.
+ JavaObject* clazz = *(JavaObject**)_clazz;
+ llvm_gcroot(clazz, 0);
+
+ JavaMethod* meth = (JavaMethod*)methodID;
+ Jnjvm* vm = JavaThread::get()->getJVM();
+ UserClass* cl = getClassFromStaticMethod(vm, meth, clazz);
+ jshort res = (jshort) meth->invokeIntStaticBuf(vm, cl, (void*)args);
+
+ RETURN_FROM_JNI(res);
+
+ END_JNI_EXCEPTION
+ RETURN_FROM_JNI(0);
}
@@ -1934,11 +2136,23 @@
}
-jint CallStaticIntMethodA(JNIEnv *env, jclass clazz, jmethodID methodID,
+jint CallStaticIntMethodA(JNIEnv *env, jclass _clazz, jmethodID methodID,
const jvalue *args) {
- fprintf(stderr, "Implement me\n");
- abort();
- return 0;
+ BEGIN_JNI_EXCEPTION
+
+ // Local object references.
+ JavaObject* clazz = *(JavaObject**)_clazz;
+ llvm_gcroot(clazz, 0);
+
+ JavaMethod* meth = (JavaMethod*)methodID;
+ Jnjvm* vm = JavaThread::get()->getJVM();
+ UserClass* cl = getClassFromStaticMethod(vm, meth, clazz);
+ jint res = (jint) meth->invokeIntStaticBuf(vm, cl, (void*)args);
+
+ RETURN_FROM_JNI(res);
+
+ END_JNI_EXCEPTION
+ RETURN_FROM_JNI(0);
}
@@ -1986,11 +2200,23 @@
}
-jlong CallStaticLongMethodA(JNIEnv *env, jclass clazz, jmethodID methodID,
+jlong CallStaticLongMethodA(JNIEnv *env, jclass _clazz, jmethodID methodID,
const jvalue *args) {
- fprintf(stderr, "Implement me\n");
- abort();
- return 0;
+ BEGIN_JNI_EXCEPTION
+
+ // Local object references.
+ JavaObject* clazz = *(JavaObject**)_clazz;
+ llvm_gcroot(clazz, 0);
+
+ JavaMethod* meth = (JavaMethod*)methodID;
+ Jnjvm* vm = JavaThread::get()->getJVM();
+ UserClass* cl = getClassFromStaticMethod(vm, meth, clazz);
+ jlong res = (jlong) meth->invokeLongStaticBuf(vm, cl, (void*)args);
+
+ RETURN_FROM_JNI(res);
+
+ END_JNI_EXCEPTION
+ RETURN_FROM_JNI(0);
}
@@ -2040,11 +2266,23 @@
}
-jfloat CallStaticFloatMethodA(JNIEnv *env, jclass clazz, jmethodID methodID,
+jfloat CallStaticFloatMethodA(JNIEnv *env, jclass _clazz, jmethodID methodID,
const jvalue *args) {
- fprintf(stderr, "Implement me\n");
- abort();
- return 0;
+ BEGIN_JNI_EXCEPTION
+
+ // Local object references.
+ JavaObject* clazz = *(JavaObject**)_clazz;
+ llvm_gcroot(clazz, 0);
+
+ JavaMethod* meth = (JavaMethod*)methodID;
+ Jnjvm* vm = JavaThread::get()->getJVM();
+ UserClass* cl = getClassFromStaticMethod(vm, meth, clazz);
+ jfloat res = (jfloat) meth->invokeFloatStaticBuf(vm, cl, (void*)args);
+
+ RETURN_FROM_JNI(res);
+
+ END_JNI_EXCEPTION
+ RETURN_FROM_JNI(0);
}
@@ -2092,11 +2330,23 @@
}
-jdouble CallStaticDoubleMethodA(JNIEnv *env, jclass clazz, jmethodID methodID,
+jdouble CallStaticDoubleMethodA(JNIEnv *env, jclass _clazz, jmethodID methodID,
const jvalue *args) {
- fprintf(stderr, "Implement me\n");
- abort();
- return 0;
+ BEGIN_JNI_EXCEPTION
+
+ // Local object references.
+ JavaObject* clazz = *(JavaObject**)_clazz;
+ llvm_gcroot(clazz, 0);
+
+ JavaMethod* meth = (JavaMethod*)methodID;
+ Jnjvm* vm = JavaThread::get()->getJVM();
+ UserClass* cl = getClassFromStaticMethod(vm, meth, clazz);
+ jdouble res = (jdouble) meth->invokeDoubleStaticBuf(vm, cl, (void*)args);
+
+ RETURN_FROM_JNI(res);
+
+ END_JNI_EXCEPTION
+ RETURN_FROM_JNI(0);
}
@@ -2147,10 +2397,24 @@
}
-void CallStaticVoidMethodA(JNIEnv *env, jclass clazz, jmethodID methodID,
+void CallStaticVoidMethodA(JNIEnv *env, jclass _clazz, jmethodID methodID,
const jvalue * args) {
- fprintf(stderr, "Implement me\n");
- abort();
+ BEGIN_JNI_EXCEPTION
+
+ // Local object references.
+ JavaObject* clazz = *(JavaObject**)_clazz;
+ llvm_gcroot(clazz, 0);
+
+ JavaMethod* meth = (JavaMethod*)methodID;
+ Jnjvm* vm = JavaThread::get()->getJVM();
+ UserClass* cl = getClassFromStaticMethod(vm, meth, clazz);
+ meth->invokeIntStaticBuf(vm, cl, (void*)args);
+
+ RETURN_VOID_FROM_JNI;
+
+ END_JNI_EXCEPTION
+
+ RETURN_VOID_FROM_JNI;
}
@@ -2461,10 +2725,17 @@
}
-jsize GetStringLength(JNIEnv *env, jstring str) {
- fprintf(stderr, "Implement me\n");
- abort();
- return 0;
+jsize GetStringLength(JNIEnv *env, jstring _str) {
+ BEGIN_JNI_EXCEPTION
+
+ // Local object references.
+ JavaString* str = *(JavaString**)_str;
+ llvm_gcroot(str, 0);
+
+ RETURN_FROM_JNI(str->count);
+
+ END_JNI_EXCEPTION
+ RETURN_FROM_JNI(0);
}
Modified: vmkit/trunk/lib/J3/VMCore/Jnjvm.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/Jnjvm.cpp?rev=139475&r1=139474&r2=139475&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/VMCore/Jnjvm.cpp (original)
+++ vmkit/trunk/lib/J3/VMCore/Jnjvm.cpp Sat Sep 10 17:27:00 2011
@@ -1193,6 +1193,7 @@
method->invokeIntStatic(this, method->classDef, &args);
} else {
fprintf(stderr, "Main method not public.\n");
+ mvm::System::Exit(1);
}
} CATCH {
} END_CATCH;
@@ -1210,6 +1211,8 @@
fprintf(stderr, "Exception in thread \"main\": "
"Can not print stack trace.\n");
} END_CATCH;
+ // Program failed. Exit with return code not 0.
+ mvm::System::Exit(1);
}
}
Modified: vmkit/trunk/tools/j3/Main.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tools/j3/Main.cpp?rev=139475&r1=139474&r2=139475&view=diff
==============================================================================
--- vmkit/trunk/tools/j3/Main.cpp (original)
+++ vmkit/trunk/tools/j3/Main.cpp Sat Sep 10 17:27:00 2011
@@ -47,7 +47,7 @@
// Run the application.
vm->runApplication(argc, argv);
vm->waitForExit();
- exit(0);
+ System::Exit(0);
// Destroy everyone.
// vm->~Jnjvm();
More information about the vmkit-commits
mailing list