[vmkit-commits] [vmkit] r180391 - Added many missing llvm_gcroot calls.
Peter Senna Tschudin
peter.senna at gmail.com
Thu Apr 25 10:06:34 PDT 2013
Author: peter.senna
Date: Thu Apr 25 12:05:01 2013
New Revision: 180391
URL: http://llvm.org/viewvc/llvm-project?rev=180391&view=rev
Log:
Added many missing llvm_gcroot calls.
(cherry picked from commit 218281cb7925925d264f3df80b84f7e3e94a81d7)
Modified:
vmkit/trunk/include/vmkit/FinalizerThread.h
vmkit/trunk/include/vmkit/ReferenceThread.h
vmkit/trunk/lib/j3/ClassLib/ArrayCopy.inc
vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathReflect.cpp
vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathReflect.h
vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMClass.inc
vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMField.inc
vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMMethod.inc
vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMThread.inc
vmkit/trunk/lib/j3/ClassLib/GNUClasspath/JavaUpcalls.cpp
vmkit/trunk/lib/j3/ClassLib/OpenJDK/ClasspathReflect.h
vmkit/trunk/lib/j3/ClassLib/OpenJDK/JavaUpcalls.cpp
vmkit/trunk/lib/j3/ClassLib/OpenJDK/OpenJDK.inc
vmkit/trunk/lib/j3/ClassLib/Reflect.inc
vmkit/trunk/lib/j3/Compiler/JavaAOTCompiler.cpp
vmkit/trunk/lib/j3/Compiler/JavaJIT.cpp
vmkit/trunk/lib/j3/VMCore/JavaArray.h
vmkit/trunk/lib/j3/VMCore/JavaClass.cpp
vmkit/trunk/lib/j3/VMCore/JavaClass.h
vmkit/trunk/lib/j3/VMCore/JavaObject.cpp
vmkit/trunk/lib/j3/VMCore/JavaReferenceQueue.cpp
vmkit/trunk/lib/j3/VMCore/JavaRuntimeJIT.cpp
vmkit/trunk/lib/j3/VMCore/JavaThread.cpp
vmkit/trunk/lib/j3/VMCore/Jni.cpp
vmkit/trunk/lib/j3/VMCore/JniClasspath.inc
vmkit/trunk/lib/j3/VMCore/JniOpenJDK.inc
vmkit/trunk/lib/j3/VMCore/Jnjvm.cpp
vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.cpp
vmkit/trunk/lib/j3/VMCore/JnjvmStaleRef.cpp
vmkit/trunk/lib/j3/VMCore/VirtualTables.cpp
vmkit/trunk/lib/vmkit/CommonThread/ObjectLocks.cpp
vmkit/trunk/lib/vmkit/MMTk/VmkitGC.cpp
vmkit/trunk/lib/vmkit/MMTk/VmkitGC.h
vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp
vmkit/trunk/mmtk/mmtk-j3/ObjectModel.cpp
Modified: vmkit/trunk/include/vmkit/FinalizerThread.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/vmkit/FinalizerThread.h?rev=180391&r1=180390&r2=180391&view=diff
==============================================================================
--- vmkit/trunk/include/vmkit/FinalizerThread.h (original)
+++ vmkit/trunk/include/vmkit/FinalizerThread.h Thu Apr 25 12:05:01 2013
@@ -136,9 +136,12 @@ namespace vmkit {
/// them for finalization if they are not live.
///
void scanFinalizationQueue(word_t closure) {
+ gc* obj = NULL;
+ llvm_gcroot(obj, 0);
+
uint32 NewIndex = 0;
for (uint32 i = 0; i < CurrentIndex; ++i) {
- gc* obj = FinalizationQueue[i];
+ obj = FinalizationQueue[i];
if (!vmkit::Collector::isLive(obj, closure)) {
obj = vmkit::Collector::retainForFinalize(FinalizationQueue[i], closure);
Modified: vmkit/trunk/include/vmkit/ReferenceThread.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/vmkit/ReferenceThread.h?rev=180391&r1=180390&r2=180391&view=diff
==============================================================================
--- vmkit/trunk/include/vmkit/ReferenceThread.h (original)
+++ vmkit/trunk/include/vmkit/ReferenceThread.h Thu Apr 25 12:05:01 2013
@@ -30,12 +30,18 @@ namespace vmkit {
template <class T>
gc* processReference(gc* reference, ReferenceThread<T>* th, word_t closure) {
+ gc *referent = NULL, *newReference = NULL, *newReferent = NULL;
+ llvm_gcroot(referent, 0);
+ llvm_gcroot(newReference, 0);
+ llvm_gcroot(newReferent, 0);
+ llvm_gcroot(reference, 0);
+
if (!vmkit::Collector::isLive(reference, closure)) {
vmkit::Thread::get()->MyVM->clearObjectReferent(reference);
return NULL;
}
- gc* referent = *(vmkit::Thread::get()->MyVM->getObjectReferentPtr(reference));
+ referent = *(vmkit::Thread::get()->MyVM->getObjectReferentPtr(reference));
if (!referent) {
return NULL;
@@ -50,10 +56,10 @@ namespace vmkit {
// Nothing to do.
}
- gc* newReference =
+ newReference =
vmkit::Collector::getForwardedReference(reference, closure);
if (vmkit::Collector::isLive(referent, closure)) {
- gc* newReferent = vmkit::Collector::getForwardedReferent(referent, closure);
+ newReferent = vmkit::Collector::getForwardedReferent(referent, closure);
vmkit::Thread::get()->MyVM->setObjectReferent(newReference, newReferent);
return newReference;
} else {
@@ -112,11 +118,14 @@ namespace vmkit {
template <class T>
void scan(ReferenceThread<T>* thread, word_t closure) {
+ gc *obj = NULL, *res = NULL;
+ llvm_gcroot(obj, 0);
+ llvm_gcroot(res, 0);
uint32 NewIndex = 0;
for (uint32 i = 0; i < CurrentIndex; ++i) {
- gc* obj = References[i];
- gc* res = processReference(obj, thread, closure);
+ obj = References[i];
+ res = processReference(obj, thread, closure);
if (res) References[NewIndex++] = res;
}
Modified: vmkit/trunk/lib/j3/ClassLib/ArrayCopy.inc
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/ArrayCopy.inc?rev=180391&r1=180390&r2=180391&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/ClassLib/ArrayCopy.inc (original)
+++ vmkit/trunk/lib/j3/ClassLib/ArrayCopy.inc Thu Apr 25 12:05:01 2013
@@ -10,10 +10,14 @@
void ArrayCopy(JavaObject* src, jint sstart, JavaObject* dst, jint dstart, jint len)
{
+ ArrayObject* arraySrc = 0;
+ ArrayObject* arrayDest = 0;
JavaObject* cur = 0;
llvm_gcroot(src, 0);
llvm_gcroot(dst, 0);
llvm_gcroot(cur, 0);
+ llvm_gcroot(arraySrc, 0);
+ llvm_gcroot(arrayDest, 0);
JavaThread* th = JavaThread::get();
Jnjvm *vm = th->getJVM();
@@ -68,8 +72,9 @@ void ArrayCopy(JavaObject* src, jint sst
// Unfortunately in the case that an element can't be assigned,
// System.arrayCopy is required to do the partial copy, hence this check.
int copyLen = len;
+ arraySrc = (ArrayObject*)src;
for (int i = 0; i < len; i++) {
- cur = ArrayObject::getElement((ArrayObject*)src, i + sstart);
+ cur = ArrayObject::getElement(arraySrc, i + sstart);
if (cur) {
if (!(JavaObject::getClass(cur)->isSubclassOf(dstType))) {
copyLen = i; // copy up until this element
@@ -80,6 +85,7 @@ void ArrayCopy(JavaObject* src, jint sst
// If same array, then there's a potential for overlap.
// Check this now, and use it to determine iteration order.
+ arrayDest = (ArrayObject*)dst;
bool backward = (src == dst) &&
(sstart < dstart) &&
(sstart + copyLen > dstart);
@@ -87,12 +93,12 @@ void ArrayCopy(JavaObject* src, jint sst
if (backward) {
for(int i = copyLen - 1; i >= 0; --i) {
cur = ArrayObject::getElement((ArrayObject*)src, i + sstart);
- ArrayObject::setElement((ArrayObject*)dst, cur, i + dstart);
+ ArrayObject::setElement(arrayDest, cur, i + dstart);
}
} else {
for(int i = 0; i < copyLen; ++i) {
- cur = ArrayObject::getElement((ArrayObject*)src, i + sstart);
- ArrayObject::setElement((ArrayObject*)dst, cur, i + dstart);
+ cur = ArrayObject::getElement(arraySrc, i + sstart);
+ ArrayObject::setElement(arrayDest, cur, i + dstart);
}
}
Modified: vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathReflect.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathReflect.cpp?rev=180391&r1=180390&r2=180391&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathReflect.cpp (original)
+++ vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathReflect.cpp Thu Apr 25 12:05:01 2013
@@ -65,9 +65,11 @@ JavaObjectMethod* JavaObjectMethod::crea
JavaObjectMethod* ret = 0;
JavaObjectVMMethod* vmMeth = 0;
JavaString* str = 0;
+ JavaObject* Cl = 0;
llvm_gcroot(ret, 0);
llvm_gcroot(str, 0);
llvm_gcroot(vmMeth, 0);
+ llvm_gcroot(Cl, 0);
Jnjvm* vm = JavaThread::get()->getJVM();
@@ -78,7 +80,7 @@ JavaObjectMethod* JavaObjectMethod::crea
str = vm->internalUTF8ToStr(meth->name);
- JavaObject* Cl = meth->classDef->getDelegatee();
+ Cl = meth->classDef->getDelegatee();
vm->upcalls->initVMMethod->invokeIntSpecial(vm, VMMeth, vmMeth);
vmMeth->name = str;
Modified: vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathReflect.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathReflect.h?rev=180391&r1=180390&r2=180391&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathReflect.h (original)
+++ vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathReflect.h Thu Apr 25 12:05:01 2013
@@ -52,6 +52,7 @@ public:
}
static void staticTracer(JavaObjectClass* obj, word_t closure) {
+ llvm_gcroot(obj, 0);
vmkit::Collector::markAndTrace(obj, &obj->pd, closure);
vmkit::Collector::markAndTrace(obj, &obj->signers, closure);
vmkit::Collector::markAndTrace(obj, &obj->constructor, closure);
@@ -79,6 +80,7 @@ private:
// others
public:
static void staticTracer(JavaObjectVMField* obj, word_t closure) {
+ llvm_gcroot(obj, 0);
vmkit::Collector::markAndTrace(obj, &obj->name, closure);
vmkit::Collector::markAndTrace(obj, &obj->declaringClass, closure);
}
@@ -105,6 +107,7 @@ private:
public:
static void staticTracer(JavaObjectField* obj, word_t closure) {
+ llvm_gcroot(obj, 0);
vmkit::Collector::markAndTrace(obj, &obj->p, closure);
vmkit::Collector::markAndTrace(obj, &obj->vmField, closure);
}
@@ -129,6 +132,7 @@ public:
uint32 slot;
public:
static void staticTracer(JavaObjectVMMethod* obj, word_t closure) {
+ llvm_gcroot(obj, 0);
vmkit::Collector::markAndTrace(obj, &obj->name, closure);
vmkit::Collector::markAndTrace(obj, &obj->declaringClass, closure);
}
@@ -151,6 +155,7 @@ private:
public:
static void staticTracer(JavaObjectMethod* obj, word_t closure) {
+ llvm_gcroot(obj, 0);
vmkit::Collector::markAndTrace(obj, &obj->p, closure);
vmkit::Collector::markAndTrace(obj, &obj->vmMethod, closure);
}
@@ -173,6 +178,7 @@ private:
public:
static void staticTracer(JavaObjectVMConstructor* obj, word_t closure) {
+ llvm_gcroot(obj, 0);
vmkit::Collector::markAndTrace(obj, &obj->declaringClass, closure);
}
@@ -193,6 +199,7 @@ private:
public:
static void staticTracer(JavaObjectConstructor* obj, word_t closure) {
+ llvm_gcroot(obj, 0);
vmkit::Collector::markAndTrace(obj, &obj->p, closure);
vmkit::Collector::markAndTrace(obj, &obj->vmCons, closure);
}
@@ -212,6 +219,7 @@ private:
public:
static void staticTracer(JavaObjectVMThread* obj, word_t closure) {
+ llvm_gcroot(obj, 0);
vmkit::Collector::markAndTrace(obj, &obj->thread, closure);
}
Modified: vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMClass.inc
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMClass.inc?rev=180391&r1=180390&r2=180391&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMClass.inc (original)
+++ vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMClass.inc Thu Apr 25 12:05:01 2013
@@ -84,14 +84,15 @@ jclass clazz,
#endif
JavaObject* Cl,
jboolean publicOnly) {
-
+ JavaObjectClass* jcl = 0;
ArrayObject* ret = 0;
llvm_gcroot(Cl, 0);
llvm_gcroot(ret, 0);
+ llvm_gcroot(jcl, 0);
BEGIN_NATIVE_EXCEPTION(0)
- ret = JavaObjectClass::getDeclaredConstructors((JavaObjectClass*)Cl, publicOnly);
+ ret = JavaObjectClass::getDeclaredConstructors(jcl = (JavaObjectClass*)Cl, publicOnly);
END_NATIVE_EXCEPTION
@@ -106,13 +107,15 @@ jclass clazz,
JavaObject* Cl,
jboolean publicOnly) {
+ JavaObjectClass* jcl = 0;
ArrayObject* ret = 0;
llvm_gcroot(Cl, 0);
llvm_gcroot(ret, 0);
+ llvm_gcroot(jcl, 0);
BEGIN_NATIVE_EXCEPTION(0)
- ret = JavaObjectClass::getDeclaredMethods((JavaObjectClass*)Cl, publicOnly);
+ ret = JavaObjectClass::getDeclaredMethods(jcl = (JavaObjectClass*)Cl, publicOnly);
END_NATIVE_EXCEPTION
@@ -127,12 +130,14 @@ jclass clazz,
JavaObject* Cl,
jboolean ignore) {
+ JavaObjectClass* jcl = 0;
jint res = 0;
llvm_gcroot(Cl, 0);
+ llvm_gcroot(jcl, 0);
BEGIN_NATIVE_EXCEPTION(0)
- res = JavaObjectClass::getModifiers((JavaObjectClass*)Cl);
+ res = JavaObjectClass::getModifiers(jcl = (JavaObjectClass*)Cl);
END_NATIVE_EXCEPTION
return res;
@@ -337,14 +342,15 @@ JNIEnv *env,
jclass clazz,
#endif
JavaObject* Cl, jboolean publicOnly) {
-
+ JavaObjectClass* jcl = 0;
ArrayObject* ret = 0;
llvm_gcroot(Cl, 0);
llvm_gcroot(ret, 0);
+ llvm_gcroot(jcl, 0);
BEGIN_NATIVE_EXCEPTION(0)
- ret = JavaObjectClass::getDeclaredFields((JavaObjectClass*)Cl, publicOnly);
+ ret = JavaObjectClass::getDeclaredFields(jcl = (JavaObjectClass*)Cl, publicOnly);
END_NATIVE_EXCEPTION
@@ -357,14 +363,15 @@ JNIEnv *env,
jclass clazz,
#endif
JavaObject* Cl) {
-
+ JavaObjectClass* jcl = 0;
ArrayObject* res = 0;
llvm_gcroot(res, 0);
llvm_gcroot(Cl, 0);
+ llvm_gcroot(jcl, 0);
BEGIN_NATIVE_EXCEPTION(0)
- res = JavaObjectClass::getInterfaces((JavaObjectClass*)Cl);
+ res = JavaObjectClass::getInterfaces(jcl = (JavaObjectClass*)Cl);
END_NATIVE_EXCEPTION
@@ -378,14 +385,16 @@ JNIEnv *env,
jclass clazz,
#endif
JavaObject* Cl) {
+ JavaObjectClass* jcl = 0;
JavaObject* res = 0;
llvm_gcroot(res, 0);
llvm_gcroot(Cl, 0);
+ llvm_gcroot(jcl, 0);
BEGIN_NATIVE_EXCEPTION(0)
- res = JavaObjectClass::getDeclaringClass((JavaObjectClass*)Cl);
+ res = JavaObjectClass::getDeclaringClass(jcl = (JavaObjectClass*)Cl);
END_NATIVE_EXCEPTION
@@ -399,14 +408,15 @@ JNIEnv *env,
jclass clazz,
#endif
JavaObject* Cl, bool publicOnly) {
-
+ JavaObjectClass* jcl = 0;
ArrayObject* result = 0;
llvm_gcroot(result, 0);
llvm_gcroot(Cl, 0);
+ llvm_gcroot(jcl, 0);
BEGIN_NATIVE_EXCEPTION(0)
- result = JavaObjectClass::getDeclaredClasses((JavaObjectClass*)Cl, publicOnly);
+ result = JavaObjectClass::getDeclaredClasses(jcl = (JavaObjectClass*)Cl, publicOnly);
END_NATIVE_EXCEPTION
@@ -438,6 +448,7 @@ JavaObject* Cl) {
//fprintf(stderr, "Java_java_lang_VMClass_getDeclaredAnnotations not implemented\n");
//abort();
+ ArrayObject* arrayRes = 0;
JavaObject* res = 0;
JavaObject* annon = 0;
JavaObject* newHashMap = 0;
@@ -447,6 +458,7 @@ JavaObject* Cl) {
llvm_gcroot(newHashMap, 0);
llvm_gcroot(Cl, 0);
llvm_gcroot(annotationClass, 0);
+ llvm_gcroot(arrayRes, 0);
BEGIN_NATIVE_EXCEPTION(0)
@@ -467,7 +479,7 @@ JavaObject* Cl) {
uint16 numAnnotations = reader.readU2();
UserClassArray* array = upcalls->annotationArrayClass;
- res = array->doNew(numAnnotations, vm);
+ arrayRes = (ArrayObject *)(res = array->doNew(numAnnotations, vm));
for (uint16 i = 0; i < numAnnotations; ++i) {
uint16 typeIndex = reader.readU2();
const UTF8* annoType = cl->ctpInfo->UTF8At(typeIndex);
@@ -489,7 +501,7 @@ JavaObject* Cl) {
annotationClass = AnnonClass->getClassDelegatee(vm);
annon = upcalls->createAnnotation->invokeJavaObjectStatic(vm, upcalls->newAnnotationHandler, &annotationClass, &newHashMap);
- ArrayObject::setElement((ArrayObject *)res, annon, i);
+ ArrayObject::setElement(arrayRes, annon, i);
} // end for
}
Modified: vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMField.inc
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMField.inc?rev=180391&r1=180390&r2=180391&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMField.inc (original)
+++ vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMField.inc Thu Apr 25 12:05:01 2013
@@ -112,6 +112,7 @@ JNIEXPORT JavaObject* JNICALL Java_java_
JNIEnv *env,
#endif
JavaObjectVMField* VMField) {
+ ArrayObject* arrayRes = 0;
JavaObject* res = 0;
JavaObject* annon = 0;
JavaObject* newHashMap = 0;
@@ -121,6 +122,7 @@ JavaObjectVMField* VMField) {
llvm_gcroot(newHashMap, 0);
llvm_gcroot(VMField, 0);
llvm_gcroot(annotationClass, 0);
+ llvm_gcroot(arrayRes, 0);
BEGIN_NATIVE_EXCEPTION(0)
@@ -142,7 +144,7 @@ JavaObjectVMField* VMField) {
uint16 numAnnotations = reader.readU2();
UserClassArray* array = upcalls->annotationArrayClass;
- res = array->doNew(numAnnotations, vm);
+ arrayRes = (ArrayObject *)(res = array->doNew(numAnnotations, vm));
dprintf("JavaField : %s with %d fields \n", UTF8Buffer(field->name).cString(), numAnnotations);
for (uint16 i = 0; i < numAnnotations; ++i) {
uint16 typeIndex = reader.readU2();
@@ -166,7 +168,7 @@ JavaObjectVMField* VMField) {
annotationClass = AnnonClass->getClassDelegatee(vm);
annon = upcalls->createAnnotation->invokeJavaObjectStatic(vm, upcalls->newAnnotationHandler, &annotationClass, &newHashMap);
- ArrayObject::setElement((ArrayObject *)res, annon, i);
+ ArrayObject::setElement(arrayRes, annon, i);
} // end for
}
Modified: vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMMethod.inc
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMMethod.inc?rev=180391&r1=180390&r2=180391&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMMethod.inc (original)
+++ vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMMethod.inc Thu Apr 25 12:05:01 2013
@@ -133,6 +133,7 @@ JNIEXPORT JavaObject* JNICALL Java_java_
JNIEnv *env,
#endif
JavaObjectVMMethod* VMMethod) {
+ ArrayObject* arrayRes = 0;
JavaObject* res = 0;
JavaObject* annon = 0;
JavaObject* newHashMap = 0;
@@ -142,6 +143,7 @@ JavaObjectVMMethod* VMMethod) {
llvm_gcroot(newHashMap, 0);
llvm_gcroot(VMMethod, 0);
llvm_gcroot(annotationClass, 0);
+ llvm_gcroot(arrayRes, 0);
BEGIN_NATIVE_EXCEPTION(0)
@@ -163,7 +165,7 @@ JavaObjectVMMethod* VMMethod) {
uint16 numAnnotations = reader.readU2();
UserClassArray* array = upcalls->annotationArrayClass;
- res = array->doNew(numAnnotations, vm);
+ arrayRes = (ArrayObject *)(res = array->doNew(numAnnotations, vm));
for (uint16 i = 0; i < numAnnotations; ++i) {
uint16 typeIndex = reader.readU2();
const UTF8* annoType = compilingClass->ctpInfo->UTF8At(typeIndex);
@@ -184,7 +186,7 @@ JavaObjectVMMethod* VMMethod) {
annotationClass = AnnonClass->getClassDelegatee(vm);
annon = upcalls->createAnnotation->invokeJavaObjectStatic(vm, upcalls->newAnnotationHandler, &annotationClass, &newHashMap);
- ArrayObject::setElement((ArrayObject *)res, annon, i);
+ ArrayObject::setElement(arrayRes, annon, i);
} // end for
}
Modified: vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMThread.inc
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMThread.inc?rev=180391&r1=180390&r2=180391&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMThread.inc (original)
+++ vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMThread.inc Thu Apr 25 12:05:01 2013
@@ -110,7 +110,8 @@ JNIEXPORT void JNICALL Java_java_lang_VM
JNIEnv *env,
#endif
JavaObject* vmthread) {
-
+ gc* obj = NULL;
+ llvm_gcroot(obj, 0);
llvm_gcroot(vmthread, 0);
BEGIN_NATIVE_EXCEPTION(0)
@@ -145,7 +146,7 @@ JavaObject* vmthread) {
th->lockingThread.varcond.signal();
// Release the lock if we acquired it.
- if (locked) lock->release(lock->getAssociatedObject(), vm->lockSystem);
+ if (locked) lock->release(obj = lock->getAssociatedObject(), vm->lockSystem);
}
// Here we could also raise a signal for interrupting I/O
Modified: vmkit/trunk/lib/j3/ClassLib/GNUClasspath/JavaUpcalls.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/GNUClasspath/JavaUpcalls.cpp?rev=180391&r1=180390&r2=180391&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/ClassLib/GNUClasspath/JavaUpcalls.cpp (original)
+++ vmkit/trunk/lib/j3/ClassLib/GNUClasspath/JavaUpcalls.cpp Thu Apr 25 12:05:01 2013
@@ -489,42 +489,50 @@ extern "C" JavaObject* Java_java_lang_re
}
extern "C" void nativeJavaObjectClassTracer(
- JavaObjectClass* obj, word_t closure) {
+ JavaObjectClass* obj, word_t closure) {
+ llvm_gcroot(obj, 0);
JavaObjectClass::staticTracer(obj, closure);
}
extern "C" void nativeJavaObjectFieldTracer(
JavaObjectField* obj, word_t closure) {
+ llvm_gcroot(obj, 0);
JavaObjectField::staticTracer(obj, closure);
}
extern "C" void nativeJavaObjectMethodTracer(
JavaObjectMethod* obj, word_t closure) {
+ llvm_gcroot(obj, 0);
JavaObjectMethod::staticTracer(obj, closure);
}
extern "C" void nativeJavaObjectConstructorTracer(
JavaObjectConstructor* obj, word_t closure) {
+ llvm_gcroot(obj, 0);
JavaObjectConstructor::staticTracer(obj, closure);
}
extern "C" void nativeJavaObjectVMFieldTracer(
JavaObjectVMField* obj, word_t closure) {
+ llvm_gcroot(obj, 0);
JavaObjectVMField::staticTracer(obj, closure);
}
extern "C" void nativeJavaObjectVMMethodTracer(
JavaObjectVMMethod* obj, word_t closure) {
+ llvm_gcroot(obj, 0);
JavaObjectVMMethod::staticTracer(obj, closure);
}
extern "C" void nativeJavaObjectVMConstructorTracer(
JavaObjectVMConstructor* obj, word_t closure) {
+ llvm_gcroot(obj, 0);
JavaObjectVMConstructor::staticTracer(obj, closure);
}
extern "C" void nativeJavaObjectVMThreadTracer(
JavaObjectVMThread* obj, word_t closure) {
+ llvm_gcroot(obj, 0);
JavaObjectVMThread::staticTracer(obj, closure);
}
Modified: vmkit/trunk/lib/j3/ClassLib/OpenJDK/ClasspathReflect.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/OpenJDK/ClasspathReflect.h?rev=180391&r1=180390&r2=180391&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/ClassLib/OpenJDK/ClasspathReflect.h (original)
+++ vmkit/trunk/lib/j3/ClassLib/OpenJDK/ClasspathReflect.h Thu Apr 25 12:05:01 2013
@@ -73,6 +73,7 @@ public:
}
static void staticTracer(JavaObjectClass* obj, word_t closure) {
+ llvm_gcroot(obj, 0);
vmkit::Collector::markAndTrace(obj, &obj->cachedConstructor, closure);
vmkit::Collector::markAndTrace(obj, &obj->newInstanceCallerCache, closure);
vmkit::Collector::markAndTrace(obj, &obj->name, closure);
@@ -132,6 +133,7 @@ private:
public:
static void staticTracer(JavaObjectField* obj, word_t closure) {
+ llvm_gcroot(obj, 0);
vmkit::Collector::markAndTrace(obj, &obj->clazz, closure);
vmkit::Collector::markAndTrace(obj, &obj->name, closure);
vmkit::Collector::markAndTrace(obj, &obj->type, closure);
@@ -189,6 +191,7 @@ private:
public:
static void staticTracer(JavaObjectMethod* obj, word_t closure) {
+ llvm_gcroot(obj, 0);
vmkit::Collector::markAndTrace(obj, &obj->clazz, closure);
vmkit::Collector::markAndTrace(obj, &obj->name, closure);
vmkit::Collector::markAndTrace(obj, &obj->returnType, closure);
@@ -242,6 +245,7 @@ private:
public:
static void staticTracer(JavaObjectConstructor* obj, word_t closure) {
+ llvm_gcroot(obj, 0);
vmkit::Collector::markAndTrace(obj, &obj->clazz, closure);
vmkit::Collector::markAndTrace(obj, &obj->parameterTypes, closure);
vmkit::Collector::markAndTrace(obj, &obj->exceptionTypes, closure);
Modified: vmkit/trunk/lib/j3/ClassLib/OpenJDK/JavaUpcalls.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/OpenJDK/JavaUpcalls.cpp?rev=180391&r1=180390&r2=180391&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/ClassLib/OpenJDK/JavaUpcalls.cpp (original)
+++ vmkit/trunk/lib/j3/ClassLib/OpenJDK/JavaUpcalls.cpp Thu Apr 25 12:05:01 2013
@@ -466,21 +466,25 @@ extern "C" void Java_java_lang_ref_Refer
extern "C" void nativeJavaObjectClassTracer(
JavaObjectClass* obj, word_t closure) {
+ llvm_gcroot(obj, 0);
JavaObjectClass::staticTracer(obj, closure);
}
extern "C" void nativeJavaObjectFieldTracer(
JavaObjectField* obj, word_t closure) {
+ llvm_gcroot(obj, 0);
JavaObjectField::staticTracer(obj, closure);
}
extern "C" void nativeJavaObjectMethodTracer(
JavaObjectMethod* obj, word_t closure) {
+ llvm_gcroot(obj, 0);
JavaObjectMethod::staticTracer(obj, closure);
}
extern "C" void nativeJavaObjectConstructorTracer(
JavaObjectConstructor* obj, word_t closure) {
+ llvm_gcroot(obj, 0);
JavaObjectConstructor::staticTracer(obj, closure);
}
Modified: vmkit/trunk/lib/j3/ClassLib/OpenJDK/OpenJDK.inc
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/OpenJDK/OpenJDK.inc?rev=180391&r1=180390&r2=180391&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/ClassLib/OpenJDK/OpenJDK.inc (original)
+++ vmkit/trunk/lib/j3/ClassLib/OpenJDK/OpenJDK.inc Thu Apr 25 12:05:01 2013
@@ -157,11 +157,14 @@ JVM_MonitorNotifyAll(JNIEnv *env, jobjec
JNIEXPORT jobject JNICALL
JVM_Clone(JNIEnv *env, jobject obj) {
+ JavaObject* src = 0;
JavaObject * clone = 0;
llvm_gcroot(clone, 0);
+ llvm_gcroot(src, 0);
+
BEGIN_JNI_EXCEPTION
- clone = JavaObject::clone(*(JavaObject**)obj);
+ clone = JavaObject::clone(src = *(JavaObject**)obj);
RETURN_REF_FROM_JNI(clone, jobject);
END_JNI_EXCEPTION
@@ -767,7 +770,9 @@ JVM_CountStackFrames(JNIEnv *env, jobjec
JNIEXPORT void JNICALL
JVM_Interrupt(JNIEnv *env, jobject _thread) {
+ gc* obj = NULL;
JavaObject * thread = 0;
+ llvm_gcroot(obj, 0);
llvm_gcroot(thread, 0);
BEGIN_JNI_EXCEPTION
@@ -802,7 +807,7 @@ JVM_Interrupt(JNIEnv *env, jobject _thre
jth->lockingThread.varcond.signal();
// Release the lock if we acquired it.
- if (locked) lock->release(lock->getAssociatedObject(), vm->lockSystem);
+ if (locked) lock->release(obj = lock->getAssociatedObject(), vm->lockSystem);
}
// Here we could also raise a signal for interrupting I/O
@@ -1469,12 +1474,15 @@ JVM_GetClassName(JNIEnv *env, jclass cls
JNIEXPORT jobjectArray JNICALL
JVM_GetClassInterfaces(JNIEnv *env, jclass cls) {
+ JavaObjectClass* cl = 0;
ArrayObject* ret = 0;
llvm_gcroot(ret, 0);
+ llvm_gcroot(cl, 0);
BEGIN_JNI_EXCEPTION
- ret = JavaObjectClass::getInterfaces(*(JavaObjectClass**)cls);
+ cl = *(JavaObjectClass**)cls;
+ ret = JavaObjectClass::getInterfaces(cl);
RETURN_REF_FROM_JNI(ret, jobjectArray);
@@ -1640,13 +1648,16 @@ JVM_GetClassModifiers(JNIEnv *env, jclas
JNIEXPORT jobjectArray JNICALL
JVM_GetDeclaredClasses(JNIEnv *env, jclass ofClass) {
+ JavaObjectClass* cl = 0;
ArrayObject* ret = 0;
llvm_gcroot(ret, 0);
+ llvm_gcroot(cl, 0);
BEGIN_JNI_EXCEPTION
// TODO: Verify boolean parameter here, assuming should default to true.
- ret = JavaObjectClass::getDeclaredClasses(*(JavaObjectClass**)ofClass, false);
+ cl = *(JavaObjectClass**)ofClass;
+ ret = JavaObjectClass::getDeclaredClasses(cl, false);
RETURN_REF_FROM_JNI(ret, jobjectArray);
@@ -1723,12 +1734,15 @@ JVM_GetClassAnnotations(JNIEnv *env, jcl
JNIEXPORT jobjectArray JNICALL
JVM_GetClassDeclaredMethods(JNIEnv *env, jclass ofClass, jboolean publicOnly) {
+ JavaObjectClass* cl = 0;
ArrayObject* ret = 0;
llvm_gcroot(ret, 0);
+ llvm_gcroot(cl, 0);
BEGIN_JNI_EXCEPTION
- ret = JavaObjectClass::getDeclaredMethods(*(JavaObjectClass**)ofClass, publicOnly);
+ cl = *(JavaObjectClass**)ofClass;
+ ret = JavaObjectClass::getDeclaredMethods(cl, publicOnly);
RETURN_REF_FROM_JNI(ret, jobjectArray);
@@ -1739,12 +1753,15 @@ JVM_GetClassDeclaredMethods(JNIEnv *env,
JNIEXPORT jobjectArray JNICALL
JVM_GetClassDeclaredFields(JNIEnv *env, jclass ofClass, jboolean publicOnly) {
+ JavaObjectClass* cl = 0;
ArrayObject* ret = 0;
llvm_gcroot(ret, 0);
+ llvm_gcroot(cl, 0);
BEGIN_JNI_EXCEPTION
- ret = JavaObjectClass::getDeclaredFields(*(JavaObjectClass**)ofClass, publicOnly);
+ cl = *(JavaObjectClass**)ofClass;
+ ret = JavaObjectClass::getDeclaredFields(cl, publicOnly);
RETURN_REF_FROM_JNI(ret, jobjectArray);
@@ -1755,12 +1772,15 @@ JVM_GetClassDeclaredFields(JNIEnv *env,
JNIEXPORT jobjectArray JNICALL
JVM_GetClassDeclaredConstructors(JNIEnv *env, jclass ofClass, jboolean publicOnly) {
+ JavaObjectClass* cl = 0;
ArrayObject* ret = 0;
llvm_gcroot(ret, 0);
+ llvm_gcroot(cl, 0);
BEGIN_JNI_EXCEPTION
- ret = JavaObjectClass::getDeclaredConstructors(*(JavaObjectClass**)ofClass, publicOnly);
+ cl = *(JavaObjectClass**)ofClass;
+ ret = JavaObjectClass::getDeclaredConstructors(cl, publicOnly);
RETURN_REF_FROM_JNI(ret, jobjectArray);
Modified: vmkit/trunk/lib/j3/ClassLib/Reflect.inc
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/Reflect.inc?rev=180391&r1=180390&r2=180391&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/ClassLib/Reflect.inc (original)
+++ vmkit/trunk/lib/j3/ClassLib/Reflect.inc Thu Apr 25 12:05:01 2013
@@ -135,9 +135,11 @@ JavaObject* JavaObjectClass::getDeclarin
}
ArrayObject* JavaObjectClass::getDeclaredClasses(JavaObjectClass* Cl, bool publicOnly) {
+ JavaObject* obj = 0;
ArrayObject* result = 0;
llvm_gcroot(result, 0);
llvm_gcroot(Cl, 0);
+ llvm_gcroot(obj, 0);
Jnjvm* vm = JavaThread::get()->getJVM();
UserClass* cl = UserCommonClass::resolvedImplClass(vm, Cl, false)->asClass();
@@ -160,8 +162,9 @@ ArrayObject* JavaObjectClass::getDeclare
int index = 0;
for (uint16 i = 0; i < cl->nbInnerClasses; ++i) {
UserClass* klass = cl->innerClasses[i];
+ obj = klass->getClassDelegatee(vm);
if (!publicOnly || isPublic(klass->innerAccess))
- ArrayObject::setElement(result, klass->getClassDelegatee(vm), index++);
+ ArrayObject::setElement(result, obj, index++);
}
assert(index == sizeArray);
}
@@ -212,9 +215,11 @@ ArrayObject* JavaObjectClass::getDeclare
}
ArrayObject* JavaObjectClass::getInterfaces(JavaObjectClass* Cl) {
+ JavaObject* obj = 0;
ArrayObject* res = 0;
llvm_gcroot(Cl, 0);
llvm_gcroot(res, 0);
+ llvm_gcroot(obj, 0);
Jnjvm* vm = JavaThread::get()->getJVM();
UserCommonClass* cl = UserCommonClass::resolvedImplClass(vm, Cl, false);
@@ -222,7 +227,8 @@ ArrayObject* JavaObjectClass::getInterfa
for (uint16 i = 0; i < cl->nbInterfaces; ++i) {
UserClass* klass = cl->interfaces[i];
- ArrayObject::setElement(res, klass->getClassDelegatee(vm), i);
+ obj = klass->getClassDelegatee(vm);
+ ArrayObject::setElement(res, obj, i);
}
return res;
Modified: vmkit/trunk/lib/j3/Compiler/JavaAOTCompiler.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/Compiler/JavaAOTCompiler.cpp?rev=180391&r1=180390&r2=180391&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/Compiler/JavaAOTCompiler.cpp (original)
+++ vmkit/trunk/lib/j3/Compiler/JavaAOTCompiler.cpp Thu Apr 25 12:05:01 2013
@@ -244,6 +244,8 @@ Constant* JavaAOTCompiler::getMethodInCl
}
Constant* JavaAOTCompiler::getString(JavaString* str) {
+ llvm_gcroot(str, 0);
+
assert(!useCooperativeGC());
string_iterator SI = strings.find(str);
if (SI != strings.end()) {
@@ -328,6 +330,9 @@ JavaObject* JavaAOTCompiler::getFinalObj
}
Constant* JavaAOTCompiler::HandleMagic(JavaObject* obj, CommonClass* objCl) {
+ word_t* realObj = 0;
+ llvm_gcroot(obj, 0);
+ llvm_gcroot(realObj, 0);
static const UTF8* AddressArray = objCl->classLoader->asciizConstructUTF8("org/vmmagic/unboxed/AddressArray");
static const UTF8* WordArray = objCl->classLoader->asciizConstructUTF8("org/vmmagic/unboxed/WordArray");
@@ -340,7 +345,7 @@ Constant* JavaAOTCompiler::HandleMagic(J
name->equals(ExtentArray) || name->equals(ObjectReferenceArray) ||
name->equals(OffsetArray)) {
- word_t* realObj = (word_t*)obj;
+ realObj = (word_t*)obj;
word_t size = realObj[0];
ArrayType* ATy = ArrayType::get(JavaIntrinsics.JavaObjectType,
@@ -373,6 +378,8 @@ Constant* JavaAOTCompiler::HandleMagic(J
Constant* JavaAOTCompiler::getFinalObject(JavaObject* obj, CommonClass* objCl) {
+ llvm_gcroot(obj, 0);
+
assert(!useCooperativeGC());
llvm::GlobalVariable* varGV = 0;
final_object_iterator End = finalObjects.end();
@@ -446,6 +453,11 @@ Constant* JavaAOTCompiler::getFinalObjec
}
Constant* JavaAOTCompiler::CreateConstantFromStaticInstance(Class* cl) {
+ JavaObject* val = 0;
+ JavaString* obj = 0;
+ llvm_gcroot(val, 0);
+ llvm_gcroot(obj, 0);
+
LLVMClassInfo* LCI = getClassInfo(cl);
Type* Ty = LCI->getStaticType();
StructType* STy = dyn_cast<StructType>(Ty->getContainedType(0));
@@ -498,7 +510,7 @@ Constant* JavaAOTCompiler::CreateConstan
abort();
}
} else {
- JavaObject* val = field.getStaticObjectField();
+ val = field.getStaticObjectField();
if (val) {
JnjvmClassLoader* JCL = cl->classLoader;
CommonClass* FieldCl = field.getSignature()->assocClass(JCL);
@@ -530,7 +542,7 @@ Constant* JavaAOTCompiler::CreateConstan
Elts.push_back(JavaIntrinsics.JavaObjectNullConstant);
} else {
const UTF8* utf8 = ctpInfo->UTF8At(ctpInfo->ctpDef[idx]);
- JavaString* obj = ctpInfo->resolveString(utf8, idx);
+ obj = ctpInfo->resolveString(utf8, idx);
Constant* C = getString(obj);
C = ConstantExpr::getBitCast(C, JavaIntrinsics.JavaObjectType);
Elts.push_back(C);
@@ -657,6 +669,12 @@ Constant* JavaAOTCompiler::CreateConstan
}
Constant* JavaAOTCompiler::CreateConstantFromJavaObject(JavaObject* obj) {
+ JavaObject* val = 0;
+ ArrayObject* array = 0;
+ llvm_gcroot(obj, 0);
+ llvm_gcroot(val, 0);
+ llvm_gcroot(array, 0);
+
assert(!useCooperativeGC());
CommonClass* cl = JavaObject::getClass(obj);
@@ -692,7 +710,8 @@ Constant* JavaAOTCompiler::CreateConstan
abort();
}
} else {
- return CreateConstantFromObjectArray((ArrayObject*)obj);
+ array = (ArrayObject*)obj;
+ return CreateConstantFromObjectArray(array);
}
} else {
@@ -744,7 +763,7 @@ Constant* JavaAOTCompiler::CreateConstan
abort();
}
} else {
- JavaObject* val = field.getInstanceObjectField(obj);
+ val = field.getInstanceObjectField(obj);
if (val) {
JnjvmClassLoader* JCL = cl->classLoader;
CommonClass* FieldCl = field.getSignature()->assocClass(JCL);
@@ -764,6 +783,8 @@ Constant* JavaAOTCompiler::CreateConstan
}
Constant* JavaAOTCompiler::CreateConstantFromJavaString(JavaString* str) {
+ llvm_gcroot(str, 0);
+
assert(!useCooperativeGC());
Class* cl = JavaObject::getClass(str)->asClass();
LLVMClassInfo* LCI = getClassInfo(cl);
@@ -1442,6 +1463,9 @@ Constant* JavaAOTCompiler::CreateConstan
}
Constant* JavaAOTCompiler::CreateConstantFromObjectArray(const ArrayObject* val) {
+ JavaObject* obj = 0;
+ llvm_gcroot(obj, 0);
+ llvm_gcroot(val, 0);
assert(!useCooperativeGC());
std::vector<Type*> Elemts;
llvm::Type* Ty = JavaIntrinsics.JavaObjectType;
@@ -1461,8 +1485,9 @@ Constant* JavaAOTCompiler::CreateConstan
std::vector<Constant*> Vals;
for (sint32 i = 0; i < ArrayObject::getSize(val); ++i) {
- if (ArrayObject::getElement(val, i)) {
- Vals.push_back(getFinalObject(ArrayObject::getElement(val, i),
+ obj = ArrayObject::getElement(val, i);
+ if (obj) {
+ Vals.push_back(getFinalObject(obj,
JavaObject::getClass(val)->asArrayClass()->baseClass()));
} else {
Vals.push_back(Constant::getNullValue(JavaIntrinsics.JavaObjectType));
@@ -2496,12 +2521,14 @@ void JavaAOTCompiler::generateMain(const
extern std::set<gc*> __InternalSet__;
CommonClass* JavaAOTCompiler::getUniqueBaseClass(CommonClass* cl) {
+ JavaObject* obj = NULL;
+ llvm_gcroot(obj, 0);
std::set<gc*>::iterator I = __InternalSet__.begin();
std::set<gc*>::iterator E = __InternalSet__.end();
CommonClass* currentClass = 0;
for (; I != E; ++I) {
- JavaObject* obj = (JavaObject*)(*I);
+ obj = (JavaObject*)(*I);
if (!VMClassLoader::isVMClassLoader(obj) &&
!VMStaticInstance::isVMStaticInstance(obj) &&
JavaObject::instanceOf(obj, cl)) {
Modified: vmkit/trunk/lib/j3/Compiler/JavaJIT.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/Compiler/JavaJIT.cpp?rev=180391&r1=180390&r2=180391&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/Compiler/JavaJIT.cpp (original)
+++ vmkit/trunk/lib/j3/Compiler/JavaJIT.cpp Thu Apr 25 12:05:01 2013
@@ -127,6 +127,8 @@ bool JavaJIT::isThisReference(int stackI
}
void JavaJIT::invokeVirtual(uint16 index) {
+ JavaObject* source = 0;
+ llvm_gcroot(source, 0);
JavaConstantPool* ctpInfo = compilingClass->ctpInfo;
CommonClass* cl = 0;
@@ -168,7 +170,7 @@ void JavaJIT::invokeVirtual(uint16 index
if (TheCompiler->isStaticCompiling()) {
Value* obj = objectStack[stack.size() - signature->nbArguments - 1];
- JavaObject* source = TheCompiler->getFinalObject(obj);
+ source = TheCompiler->getFinalObject(obj);
if (source) {
canBeDirect = true;
CommonClass* sourceClass = JavaObject::getClass(source);
@@ -1317,13 +1319,15 @@ void JavaJIT::compareFP(Value* val1, Val
}
void JavaJIT::loadConstant(uint16 index) {
+ JavaString* str = NULL;
+ llvm_gcroot(str, 0);
JavaConstantPool* ctpInfo = compilingClass->ctpInfo;
uint8 type = ctpInfo->typeAt(index);
if (type == JavaConstantPool::ConstantString) {
if (TheCompiler->isStaticCompiling() && !TheCompiler->useCooperativeGC()) {
const UTF8* utf8 = ctpInfo->UTF8At(ctpInfo->ctpDef[index]);
- JavaString* str = *(compilingClass->classLoader->UTF8ToStr(utf8));
+ str = *(compilingClass->classLoader->UTF8ToStr(utf8));
Value* val = TheCompiler->getString(str);
push(val, false, upcalls->newString);
} else {
@@ -2012,6 +2016,9 @@ void JavaJIT::setStaticField(uint16 inde
}
void JavaJIT::getStaticField(uint16 index) {
+ JavaObject* val = 0;
+ llvm_gcroot(val, 0);
+
Typedef* sign = compilingClass->ctpInfo->infoOfField(index);
LLVMAssessorInfo& LAI = TheCompiler->getTypedefInfo(sign);
Type* type = LAI.llvmType;
@@ -2055,7 +2062,7 @@ void JavaJIT::getStaticField(uint16 inde
}
} else {
if (TheCompiler->isStaticCompiling() && !TheCompiler->useCooperativeGC()) {
- JavaObject* val = field->getStaticObjectField();
+ val = field->getStaticObjectField();
JnjvmClassLoader* JCL = field->classDef->classLoader;
Value* V = TheCompiler->getFinalObject(val, sign->assocClass(JCL));
CommonClass* cl = vmkit::Collector::begOf(val) ?
Modified: vmkit/trunk/lib/j3/VMCore/JavaArray.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JavaArray.h?rev=180391&r1=180390&r2=180391&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/JavaArray.h (original)
+++ vmkit/trunk/lib/j3/VMCore/JavaArray.h Thu Apr 25 12:05:01 2013
@@ -143,23 +143,35 @@ public:
static const unsigned int T_LONG;
static void setSize(JavaObject* array, int size) {
+ ArrayUInt8* obj = 0;
+ llvm_gcroot(obj, 0);
llvm_gcroot(array, 0);
- ((ArrayUInt8*)array)->size = size;
+ obj = (ArrayUInt8*)array;
+ obj->size = size;
}
static sint32 getSize(const JavaObject* array) {
+ const ArrayUInt8* obj = 0;
+ llvm_gcroot(obj, 0);
llvm_gcroot(array, 0);
- return ((const ArrayUInt8*)array)->size;
+ obj = (const ArrayUInt8*)array;
+ return obj->size;
}
static const unsigned char* getElements(const JavaObject* array) {
+ const ArrayUInt8* obj = 0;
+ llvm_gcroot(obj, 0);
llvm_gcroot(array, 0);
- return ((const ArrayUInt8*)array)->elements;
+ obj = (const ArrayUInt8*)array;
+ return obj->elements;
}
static unsigned char* getElements(JavaObject* array) {
+ ArrayUInt8* obj = 0;
+ llvm_gcroot(obj, 0);
llvm_gcroot(array, 0);
- return ((ArrayUInt8*)array)->elements;
+ obj = (ArrayUInt8*)array;
+ return obj->elements;
}
};
Modified: vmkit/trunk/lib/j3/VMCore/JavaClass.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JavaClass.cpp?rev=180391&r1=180390&r2=180391&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/JavaClass.cpp (original)
+++ vmkit/trunk/lib/j3/VMCore/JavaClass.cpp Thu Apr 25 12:05:01 2013
@@ -604,6 +604,9 @@ void JavaField::InitStaticField(float va
}
void JavaField::InitStaticField(Jnjvm* vm) {
+ JavaString* obj = 0;
+ llvm_gcroot(obj, 0);
+
const Typedef* type = getSignature();
JavaAttribute* attribute = lookupAttribute(JavaAttribute::constantAttribute);
@@ -626,7 +629,8 @@ void JavaField::InitStaticField(Jnjvm* v
}
} else if (type->isReference()) {
const UTF8* utf8 = ctpInfo->UTF8At(ctpInfo->ctpDef[idx]);
- InitStaticField((JavaObject*)ctpInfo->resolveString(utf8, idx));
+ obj = ctpInfo->resolveString(utf8, idx);
+ InitStaticField(obj);
} else {
fprintf(stderr, "I haven't verified your class file and it's malformed:"
" unknown constant %s!\n",
@@ -1033,9 +1037,12 @@ ArrayObject* JavaMethod::getParameterTyp
}
JavaObject* JavaMethod::getReturnType(JnjvmClassLoader* loader) {
+ JavaObject* obj = 0;
+ llvm_gcroot(obj, 0);
Jnjvm* vm = JavaThread::get()->getJVM();
Typedef* ret = getSignature()->getReturnType();
- return getClassType(vm, loader, ret);
+ obj = getClassType(vm, loader, ret);
+ return obj;
}
ArrayObject* JavaMethod::getExceptionTypes(JnjvmClassLoader* loader) {
@@ -1083,10 +1090,11 @@ JavaObject* CommonClass::setDelegatee(Ja
UserCommonClass* UserCommonClass::resolvedImplClass(Jnjvm* vm,
JavaObject* clazz,
bool doClinit) {
-
+ JavaObjectClass* jcl = 0;
llvm_gcroot(clazz, 0);
+ llvm_gcroot(jcl, 0);
- UserCommonClass* cl = JavaObjectClass::getClass((JavaObjectClass*)clazz);
+ UserCommonClass* cl = JavaObjectClass::getClass(jcl = (JavaObjectClass*)clazz);
assert(cl && "No class in Class object");
if (cl->isClass()) {
cl->asClass()->resolveClass();
@@ -1754,8 +1762,10 @@ JavaObject* AnnotationReader::createElem
uint8 tag = reader.readU1();
JavaObject* res = 0;
JavaObject* tmp = 0;
+ ArrayObject* arrayObj = 0;
llvm_gcroot(res, 0);
llvm_gcroot(tmp, 0);
+ llvm_gcroot(arrayObj, 0);
Jnjvm* vm = JavaThread::get()->getJVM();
Classpath* upcalls = JavaThread::get()->getJVM()->upcalls;
@@ -1836,7 +1846,8 @@ JavaObject* AnnotationReader::createElem
ddprintf("Tableau de %d elements\n", numValues);
for (uint32 i = 0; i < numValues; ++i) {
tmp = createElementValue();
- ArrayObject::setElement((ArrayObject *)res, tmp, i);
+ arrayObj = (ArrayObject *)res;
+ ArrayObject::setElement(arrayObj, tmp, i);
}
ddprintf("Fin du Tableau");
} else {
@@ -1858,7 +1869,7 @@ JavaObject* AnnotationReader::createAnno
llvm_gcroot(str, 0);
llvm_gcroot(newHashMap, 0);
- Jnjvm * vm = JavaThread::get()->getJVM();
+ Jnjvm * vm = JavaThread::get()->getJVM();
Classpath* upcalls = vm->upcalls;
UserClass* HashMap = upcalls->newHashMap;
newHashMap = HashMap->doNew(vm);
Modified: vmkit/trunk/lib/j3/VMCore/JavaClass.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JavaClass.h?rev=180391&r1=180390&r2=180391&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/JavaClass.h (original)
+++ vmkit/trunk/lib/j3/VMCore/JavaClass.h Thu Apr 25 12:05:01 2013
@@ -1076,6 +1076,7 @@ private:
template<class TYPE, class FUNC_TYPE_VIRTUAL_BUF>
TYPE invokeVirtualAP(Jnjvm* vm, UserClass* cl, JavaObject* obj, va_list ap) __attribute__((noinline)) {
llvm_gcroot(obj, 0);
+ assert(cl && "Class is NULL");
vmkit::ThreadAllocator allocator;
jvalue* buffer = marshalArguments(allocator, ap);
return invokeVirtualBuf<TYPE, FUNC_TYPE_VIRTUAL_BUF>(vm, cl, obj, buffer);
@@ -1084,6 +1085,7 @@ private:
template<class TYPE, class FUNC_TYPE_VIRTUAL_BUF>
TYPE invokeSpecialAP(Jnjvm* vm, UserClass* cl, JavaObject* obj, va_list ap) __attribute__((noinline)) {
llvm_gcroot(obj, 0);
+ assert(cl && "Class is NULL");
vmkit::ThreadAllocator allocator;
jvalue* buffer = marshalArguments(allocator, ap);
return invokeSpecialBuf<TYPE, FUNC_TYPE_VIRTUAL_BUF>(vm, cl, obj, buffer);
@@ -1091,6 +1093,7 @@ private:
template<class TYPE, class FUNC_TYPE_STATIC_BUF>
TYPE invokeStaticAP(Jnjvm* vm, UserClass* cl, va_list ap) __attribute__((noinline)) {
+ assert(cl && "Class is NULL");
vmkit::ThreadAllocator allocator;
jvalue* buffer = marshalArguments(allocator, ap);
return invokeStaticBuf<TYPE, FUNC_TYPE_STATIC_BUF>(vm, cl, buffer);
Modified: vmkit/trunk/lib/j3/VMCore/JavaObject.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JavaObject.cpp?rev=180391&r1=180390&r2=180391&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/JavaObject.cpp (original)
+++ vmkit/trunk/lib/j3/VMCore/JavaObject.cpp Thu Apr 25 12:05:01 2013
@@ -161,10 +161,14 @@ void JavaObject::notifyAll(JavaObject* s
JavaObject* JavaObject::clone(JavaObject* src) {
JavaObject* res = 0;
JavaObject* tmp = 0;
+ ArrayObject* srcArray = 0;
+ ArrayObject* resArray = 0;
llvm_gcroot(src, 0);
llvm_gcroot(res, 0);
llvm_gcroot(tmp, 0);
+ llvm_gcroot(srcArray, 0);
+ llvm_gcroot(resArray, 0);
UserCommonClass* cl = JavaObject::getClass(src);
Jnjvm* vm = JavaThread::get()->getJVM();
@@ -185,9 +189,11 @@ JavaObject* JavaObject::clone(JavaObject
(void*)((uintptr_t)src + sizeof(JavaObject) + sizeof(size_t)),
size);
} else {
+ srcArray = (ArrayObject*)src;
+ resArray = (ArrayObject*)res;
for (int i = 0; i < length; i++) {
- tmp = ArrayObject::getElement((ArrayObject*)src, i);
- ArrayObject::setElement((ArrayObject*)res, tmp, i);
+ tmp = ArrayObject::getElement(srcArray, i);
+ ArrayObject::setElement(resArray, tmp, i);
}
}
} else {
@@ -373,6 +379,9 @@ bool JavaObject::instanceOf(JavaObject*
std::ostream& j3::operator << (std::ostream& os, JavaObjectVMThread& threadObj)
{
+ JavaObject *obj = &threadObj;
+ llvm_gcroot(obj, 0);
+
for (int retries = 10; (!threadObj.vmdata) && (retries >= 0); --retries)
usleep(100);
@@ -384,9 +393,14 @@ std::ostream& j3::operator << (std::ostr
std::ostream& j3::operator << (std::ostream& os, const JavaObject& obj)
{
+ JavaObject* javaLoader = NULL;
+ JavaObject *o = const_cast<JavaObject*>(&obj);
+ llvm_gcroot(javaLoader, 0);
+ llvm_gcroot(o, 0);
+
if (VMClassLoader::isVMClassLoader(&obj)) {
JnjvmClassLoader* loader = ((const VMClassLoader&)obj).getClassLoader();
- JavaObject* javaLoader = loader->getJavaClassLoader();
+ javaLoader = loader->getJavaClassLoader();
CommonClass* javaCl = JavaObject::getClass(javaLoader);
os << &obj <<
"(class=j3::VMClassLoader" <<
Modified: vmkit/trunk/lib/j3/VMCore/JavaReferenceQueue.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JavaReferenceQueue.cpp?rev=180391&r1=180390&r2=180391&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/JavaReferenceQueue.cpp (original)
+++ vmkit/trunk/lib/j3/VMCore/JavaReferenceQueue.cpp Thu Apr 25 12:05:01 2013
@@ -16,9 +16,10 @@
using namespace j3;
bool enqueueReference(gc* _obj) {
- Jnjvm* vm = JavaThread::get()->getJVM();
JavaObject* obj = (JavaObject*)_obj;
llvm_gcroot(obj, 0);
+ llvm_gcroot(_obj, 0);
+ Jnjvm* vm = JavaThread::get()->getJVM();
JavaMethod* meth = vm->upcalls->EnqueueReference;
UserClass* cl = JavaObject::getClass(obj)->asClass();
return (bool)meth->invokeIntSpecialBuf(vm, cl, obj, 0);
@@ -35,28 +36,34 @@ void Jnjvm::invokeEnqueueReference(gc* r
gc** Jnjvm::getObjectReferentPtr(gc* _obj) {
JavaObjectReference* obj = (JavaObjectReference*)_obj;
llvm_gcroot(obj, 0);
+ llvm_gcroot(_obj, 0);
return (gc**)JavaObjectReference::getReferentPtr(obj);
}
void Jnjvm::setObjectReferent(gc* _obj, gc* val) {
JavaObjectReference* obj = (JavaObjectReference*)_obj;
+ JavaObject *_val = (JavaObject*)val;
llvm_gcroot(obj, 0);
+ llvm_gcroot(_obj, 0);
llvm_gcroot(val, 0);
- JavaObjectReference::setReferent(obj, (JavaObject*)val);
+ llvm_gcroot(_val, 0);
+ JavaObjectReference::setReferent(obj, _val);
}
void Jnjvm::clearObjectReferent(gc* _obj) {
JavaObjectReference* obj = (JavaObjectReference*)_obj;
llvm_gcroot(obj, 0);
+ llvm_gcroot(_obj, 0);
JavaObjectReference::setReferent(obj, NULL);
}
typedef void (*destructor_t)(void*);
void invokeFinalizer(gc* _obj) {
- Jnjvm* vm = JavaThread::get()->getJVM();
JavaObject* obj = (JavaObject*)_obj;
llvm_gcroot(obj, 0);
+ llvm_gcroot(_obj, 0);
+ Jnjvm* vm = JavaThread::get()->getJVM();
JavaMethod* meth = vm->upcalls->FinalizeObject;
UserClass* cl = JavaObject::getClass(obj)->asClass();
meth->invokeIntVirtualBuf(vm, cl, obj, 0);
@@ -71,10 +78,9 @@ void invokeFinalize(gc* res) {
}
void Jnjvm::finalizeObject(gc* object) {
- JavaObject* res = 0;
- llvm_gcroot(object, 0);
- llvm_gcroot(res, 0);
- res = (JavaObject*) object;
+ JavaObject* res = (JavaObject*)object;
+ llvm_gcroot(object, 0);
+ llvm_gcroot(res, 0);
JavaVirtualTable* VT = res->getVirtualTable();
if (VT->operatorDelete) {
destructor_t dest = (destructor_t)VT->destructor;
Modified: vmkit/trunk/lib/j3/VMCore/JavaRuntimeJIT.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JavaRuntimeJIT.cpp?rev=180391&r1=180390&r2=180391&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/JavaRuntimeJIT.cpp (original)
+++ vmkit/trunk/lib/j3/VMCore/JavaRuntimeJIT.cpp Thu Apr 25 12:05:01 2013
@@ -180,21 +180,26 @@ extern "C" UserCommonClass* j3RuntimeIni
// Calls Java code.
extern "C" JavaObject* j3RuntimeDelegatee(UserCommonClass* cl) {
- return cl->getClassDelegatee(JavaThread::get()->getJVM());
+ JavaObject* obj = 0;
+ llvm_gcroot(obj, 0);
+ obj = cl->getClassDelegatee(JavaThread::get()->getJVM());
+ return obj;
}
// Throws if one of the dimension is negative.
JavaObject* multiCallNewIntern(UserClassArray* cl, uint32 len,
sint32* dims, Jnjvm* vm) {
- assert(len > 0 && "Negative size given by VMKit");
-
- JavaObject* _res = cl->doNew(dims[0], vm);
+ JavaObject* _res = NULL;
ArrayObject* res = NULL;
JavaObject* temp = NULL;
llvm_gcroot(_res, 0);
llvm_gcroot(res, 0);
llvm_gcroot(temp, 0);
+ assert(len > 0 && "Negative size given by VMKit");
+
+ _res = cl->doNew(dims[0], vm);
+
if (len > 1) {
res = (ArrayObject*)_res;
UserCommonClass* _base = cl->baseClass();
@@ -501,6 +506,7 @@ extern "C" void* j3ResolveSpecialStub()
// Does not throw an exception.
extern "C" void* j3ResolveInterface(JavaObject* obj, JavaMethod* meth, uint32_t index) {
+ llvm_gcroot(obj, 0);
word_t result = 0;
InterfaceMethodTable* IMT = JavaObject::getClass(obj)->virtualVT->IMT;
if ((IMT->contents[index] & 1) == 0) {
Modified: vmkit/trunk/lib/j3/VMCore/JavaThread.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JavaThread.cpp?rev=180391&r1=180390&r2=180391&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/JavaThread.cpp (original)
+++ vmkit/trunk/lib/j3/VMCore/JavaThread.cpp Thu Apr 25 12:05:01 2013
@@ -170,12 +170,17 @@ void JNILocalReferences::removeJNIRefere
std::ostream& j3::operator << (std::ostream& os, const JavaThread& thread)
{
+ JavaObject* jThread = NULL;
+ JavaString* threadNameObj = NULL;
+ llvm_gcroot(jThread, 0);
+ llvm_gcroot(threadNameObj, 0);
+
os << '[' << (void*)(&thread);
Jnjvm* vm = thread.getJVM();
- JavaObject* jThread = thread.currentThread();
+ jThread = thread.currentThread();
if (vm && jThread) {
- JavaString* threadNameObj = static_cast<JavaString*>(
+ threadNameObj = static_cast<JavaString*>(
vm->upcalls->threadName->getInstanceObjectField(jThread));
char *threadName = JavaString::strToAsciiz(threadNameObj);
os << '(' << threadName << ')';
Modified: vmkit/trunk/lib/j3/VMCore/Jni.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/Jni.cpp?rev=180391&r1=180390&r2=180391&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/Jni.cpp (original)
+++ vmkit/trunk/lib/j3/VMCore/Jni.cpp Thu Apr 25 12:05:01 2013
@@ -54,10 +54,12 @@ jint GetVersion(JNIEnv *env) {
jclass DefineClass(JNIEnv *env, const char *name, jobject _loader,
const jbyte *buf, jsize len) {
+ JavaObject *loader = NULL;
+ llvm_gcroot(loader, 0);
+
BEGIN_JNI_EXCEPTION
- JavaObject * loader = _loader ? *(JavaObject**)_loader : 0;
- llvm_gcroot(loader, 0);
+ loader = _loader ? *(JavaObject**)_loader : 0;
jclass res = NULL;
@@ -105,12 +107,15 @@ jclass FindClass(JNIEnv *env, const char
jmethodID FromReflectedMethod(JNIEnv *env, jobject method) {
+ JavaObjectConstructor* methObj = 0;
+ JavaObject* meth = NULL;
+ llvm_gcroot(meth, 0);
+ llvm_gcroot(methObj, 0);
BEGIN_JNI_EXCEPTION
// Local object references.
- JavaObject* meth = *(JavaObject**)method;
- llvm_gcroot(meth, 0);
+ meth = *(JavaObject**)method;
Jnjvm* vm = myVM(env);
Classpath* upcalls = vm->upcalls;
@@ -119,7 +124,7 @@ jmethodID FromReflectedMethod(JNIEnv *en
jmethodID res = (jmethodID)JavaObjectMethod::getInternalMethod((JavaObjectMethod*)meth);
RETURN_FROM_JNI(res);
} else if (cl == upcalls->newMethod) {
- jmethodID res = (jmethodID)JavaObjectConstructor::getInternalMethod((JavaObjectConstructor*)meth);
+ jmethodID res = (jmethodID)JavaObjectConstructor::getInternalMethod(methObj = (JavaObjectConstructor*)meth);
RETURN_FROM_JNI(res);
}
@@ -130,13 +135,15 @@ jmethodID FromReflectedMethod(JNIEnv *en
jclass GetSuperclass(JNIEnv *env, jclass sub) {
- BEGIN_JNI_EXCEPTION
-
jclass res = 0;
- JavaObject* Cl = *(JavaObject**)sub;
+ JavaObject* Cl = NULL;
llvm_gcroot(Cl, 0);
llvm_gcroot(res, 0);
+ BEGIN_JNI_EXCEPTION
+
+ Cl = *(JavaObject**)sub;
+
Jnjvm* vm = JavaThread::get()->getJVM();
UserCommonClass* cl = UserCommonClass::resolvedImplClass(vm, Cl, false);
if (!cl->isInterface() && cl->getSuper() != NULL) {
@@ -151,14 +158,16 @@ jclass GetSuperclass(JNIEnv *env, jclass
jboolean IsSubclassOf(JNIEnv *env, jclass _sub, jclass _sup) {
+ JavaObject* sub = NULL;
+ JavaObject* sup = NULL;
+ llvm_gcroot(sub, 0);
+ llvm_gcroot(sup, 0);
BEGIN_JNI_EXCEPTION
// Local object references.
- JavaObject* sub = *(JavaObject**)_sub;
- JavaObject* sup = *(JavaObject**)_sup;
- llvm_gcroot(sub, 0);
- llvm_gcroot(sup, 0);
+ sub = *(JavaObject**)_sub;
+ sup = *(JavaObject**)_sup;
Jnjvm* vm = JavaThread::get()->getJVM();
UserCommonClass* cl2 =
@@ -189,18 +198,19 @@ jint Throw(JNIEnv *env, jthrowable obj)
jint ThrowNew(JNIEnv* env, jclass _Cl, const char *msg) {
-
- BEGIN_JNI_EXCEPTION
-
- verifyNull(_Cl);
- // Local object references.
- JavaObject* Cl = *(JavaObject**)_Cl;
+ JavaObject* Cl = NULL;
JavaObject* res = 0;
JavaString* str = 0;
llvm_gcroot(Cl, 0);
llvm_gcroot(res, 0);
llvm_gcroot(str, 0);
+ BEGIN_JNI_EXCEPTION
+
+ // Local object references.
+ verifyNull(_Cl);
+ Cl = *(JavaObject**)_Cl;
+
Jnjvm* vm = JavaThread::get()->getJVM();
UserCommonClass* cl = UserCommonClass::resolvedImplClass(vm, Cl, true);
@@ -224,11 +234,12 @@ jint ThrowNew(JNIEnv* env, jclass _Cl, c
jthrowable ExceptionOccurred(JNIEnv *env) {
+ JavaObject* obj = NULL;
+ llvm_gcroot(obj, 0);
BEGIN_JNI_EXCEPTION
- JavaObject* obj = JavaThread::get()->pendingException;
- llvm_gcroot(obj, 0);
+ obj = JavaThread::get()->pendingException;
if (obj == NULL) RETURN_FROM_JNI(NULL);
jthrowable res = (jthrowable)th->pushJNIRef(obj);
RETURN_FROM_JNI(res);
@@ -277,13 +288,15 @@ void DeleteLocalRef(JNIEnv *env, jobject
jboolean IsSameObject(JNIEnv *env, jobject ref1, jobject ref2) {
+ JavaObject* Ref1 = NULL;
+ JavaObject* Ref2 = NULL;
+ llvm_gcroot(Ref1, 0);
+ llvm_gcroot(Ref2, 0);
BEGIN_JNI_EXCEPTION
- JavaObject* Ref1 = ref1 ? *(JavaObject**)ref1 : NULL;
- JavaObject* Ref2 = ref2 ? *(JavaObject**)ref2 : NULL;
- llvm_gcroot(Ref1, 0);
- llvm_gcroot(Ref2, 0);
+ Ref1 = ref1 ? *(JavaObject**)ref1 : NULL;
+ Ref2 = ref2 ? *(JavaObject**)ref2 : NULL;
RETURN_FROM_JNI(Ref1 == Ref2);
@@ -306,14 +319,15 @@ jint EnsureLocalCapacity(JNIEnv* env, ji
jobject AllocObject(JNIEnv *env, jclass _clazz) {
+ JavaObject* clazz = 0;
+ JavaObject* res = 0;
+ llvm_gcroot(clazz, 0);
+ llvm_gcroot(res, 0);
BEGIN_JNI_EXCEPTION
// Local object references.
- JavaObject* clazz = *(JavaObject**)_clazz;
- JavaObject* res = 0;
- llvm_gcroot(clazz, 0);
- llvm_gcroot(res, 0);
+ clazz = *(JavaObject**)_clazz;
JavaThread* th = JavaThread::get();
Jnjvm* vm = th->getJVM();
@@ -333,14 +347,16 @@ jobject AllocObject(JNIEnv *env, jclass
jobject NewObject(JNIEnv *env, jclass _clazz, jmethodID methodID, ...) {
+ JavaObject* clazz = 0;
+ JavaObject* res = 0;
+ llvm_gcroot(clazz, 0);
+ llvm_gcroot(res, 0);
+
BEGIN_JNI_EXCEPTION
// Local object references
- JavaObject* clazz = *(JavaObject**)_clazz;
- JavaObject* res = 0;
- llvm_gcroot(clazz, 0);
- llvm_gcroot(res, 0);
+ clazz = *(JavaObject**)_clazz;
JavaMethod* meth = (JavaMethod*)methodID;
JavaThread* th = JavaThread::get();
@@ -366,14 +382,16 @@ jobject NewObject(JNIEnv *env, jclass _c
jobject NewObjectV(JNIEnv* env, jclass _clazz, jmethodID methodID,
va_list args) {
- BEGIN_JNI_EXCEPTION
-
- // Local object references
- JavaObject* clazz = *(JavaObject**)_clazz;
+ JavaObject* clazz = 0;
JavaObject* res = 0;
llvm_gcroot(clazz, 0);
llvm_gcroot(res, 0);
+ BEGIN_JNI_EXCEPTION
+
+ // Local object references
+ clazz = *(JavaObject**)_clazz;
+
JavaThread* th = JavaThread::get();
Jnjvm* vm = th->getJVM();
JavaMethod* meth = (JavaMethod*)methodID;
@@ -393,14 +411,16 @@ jobject NewObjectV(JNIEnv* env, jclass _
jobject NewObjectA(JNIEnv* env, jclass _clazz, jmethodID methodID,
const jvalue *args) {
+ JavaObject* clazz = 0;
+ JavaObject* res = 0;
+ llvm_gcroot(clazz, 0);
+ llvm_gcroot(res, 0);
+
BEGIN_JNI_EXCEPTION
// Local object references
- JavaObject* clazz = *(JavaObject**)_clazz;
- JavaObject* res = 0;
- llvm_gcroot(clazz, 0);
- llvm_gcroot(res, 0);
+ clazz = *(JavaObject**)_clazz;
JavaThread* th = JavaThread::get();
Jnjvm* vm = th->getJVM();
@@ -421,12 +441,13 @@ jobject NewObjectA(JNIEnv* env, jclass _
jclass GetObjectClass(JNIEnv *env, jobject _obj) {
+ JavaObject* obj = NULL;
+ llvm_gcroot(obj, 0);
BEGIN_JNI_EXCEPTION
// Local object references
- JavaObject* obj = *(JavaObject**)_obj;
- llvm_gcroot(obj, 0);
+ obj = *(JavaObject**)_obj;
JavaThread* th = JavaThread::get();
Jnjvm* vm = th->getJVM();
@@ -488,12 +509,13 @@ jobject ToReflectedField(JNIEnv* env, jc
jmethodID GetMethodID(JNIEnv* env, jclass _clazz, const char *aname,
const char *atype) {
+ JavaObject* clazz = NULL;
+ llvm_gcroot(clazz, 0);
BEGIN_JNI_EXCEPTION
// Local object references.
- JavaObject* clazz = *(JavaObject**)_clazz;
- llvm_gcroot(clazz, 0);
+ clazz = *(JavaObject**)_clazz;
Jnjvm* vm = JavaThread::get()->getJVM();
UserCommonClass* cl = UserCommonClass::resolvedImplClass(vm, clazz, true);
@@ -515,6 +537,10 @@ jmethodID GetMethodID(JNIEnv* env, jclas
jobject CallObjectMethod(JNIEnv *env, jobject _obj, jmethodID methodID, ...) {
+ JavaObject* obj = 0;
+ JavaObject* res = 0;
+ llvm_gcroot(obj, 0);
+ llvm_gcroot(res, 0);
BEGIN_JNI_EXCEPTION
@@ -524,10 +550,7 @@ jobject CallObjectMethod(JNIEnv *env, jo
va_start(ap, methodID);
// Local object references.
- JavaObject* obj = *(JavaObject**)_obj;
- JavaObject* res = 0;
- llvm_gcroot(obj, 0);
- llvm_gcroot(res, 0);
+ obj = *(JavaObject**)_obj;
JavaMethod* meth = (JavaMethod*)methodID;
JavaThread* th = JavaThread::get();
@@ -547,16 +570,17 @@ jobject CallObjectMethod(JNIEnv *env, jo
jobject CallObjectMethodV(JNIEnv *env, jobject _obj, jmethodID methodID,
va_list args) {
+ JavaObject* obj = 0;
+ JavaObject* res = 0;
+ llvm_gcroot(obj, 0);
+ llvm_gcroot(res, 0);
BEGIN_JNI_EXCEPTION
verifyNull(_obj);
// Local object references.
- JavaObject* obj = *(JavaObject**)_obj;
- JavaObject* res = 0;
- llvm_gcroot(obj, 0);
- llvm_gcroot(res, 0);
+ obj = *(JavaObject**)_obj;
JavaMethod* meth = (JavaMethod*)methodID;
JavaThread* th = JavaThread::get();
@@ -577,15 +601,17 @@ jobject CallObjectMethodV(JNIEnv *env, j
jobject CallObjectMethodA(JNIEnv *env, jobject _obj, jmethodID methodID,
const jvalue * args) {
+ JavaObject* obj = 0;
+ JavaObject* res = 0;
+ llvm_gcroot(obj, 0);
+ llvm_gcroot(res, 0);
+
BEGIN_JNI_EXCEPTION
verifyNull(_obj);
// Local object references.
- JavaObject* obj = *(JavaObject**)_obj;
- JavaObject* res = 0;
- llvm_gcroot(obj, 0);
- llvm_gcroot(res, 0);
+ obj = *(JavaObject**)_obj;
JavaMethod* meth = (JavaMethod*)methodID;
Jnjvm* vm = JavaThread::get()->getJVM();
@@ -602,6 +628,8 @@ jobject CallObjectMethodA(JNIEnv *env, j
jboolean CallBooleanMethod(JNIEnv *env, jobject _obj, jmethodID methodID, ...) {
+ JavaObject* self = 0;
+ llvm_gcroot(self, 0);
BEGIN_JNI_EXCEPTION
@@ -611,8 +639,7 @@ jboolean CallBooleanMethod(JNIEnv *env,
va_start(ap, methodID);
// Local object references.
- JavaObject* self = *(JavaObject**)_obj;
- llvm_gcroot(self, 0);
+ self = *(JavaObject**)_obj;
JavaMethod* meth = (JavaMethod*)methodID;
Jnjvm* vm = JavaThread::get()->getJVM();
@@ -631,14 +658,15 @@ jboolean CallBooleanMethod(JNIEnv *env,
jboolean CallBooleanMethodV(JNIEnv *env, jobject _obj, jmethodID methodID,
va_list args) {
+ JavaObject* obj = 0;
+ llvm_gcroot(obj, 0);
BEGIN_JNI_EXCEPTION
verifyNull(_obj);
// Local object references.
- JavaObject* obj = *(JavaObject**)_obj;
- llvm_gcroot(obj, 0);
+ obj = *(JavaObject**)_obj;
JavaMethod* meth = (JavaMethod*)methodID;
Jnjvm* vm = JavaThread::get()->getJVM();
@@ -654,13 +682,15 @@ jboolean CallBooleanMethodV(JNIEnv *env,
jboolean CallBooleanMethodA(JNIEnv *env, jobject _obj, jmethodID methodID,
const jvalue * args) {
+ JavaObject* obj = 0;
+ llvm_gcroot(obj, 0);
+
BEGIN_JNI_EXCEPTION
verifyNull(_obj);
// Local object references.
- JavaObject* obj = *(JavaObject**)_obj;
- llvm_gcroot(obj, 0);
+ obj = *(JavaObject**)_obj;
JavaMethod* meth = (JavaMethod*)methodID;
Jnjvm* vm = JavaThread::get()->getJVM();
@@ -683,14 +713,15 @@ jbyte CallByteMethod(JNIEnv *env, jobjec
jbyte CallByteMethodV(JNIEnv *env, jobject _obj, jmethodID methodID,
va_list args) {
+ JavaObject* obj = 0;
+ llvm_gcroot(obj, 0);
BEGIN_JNI_EXCEPTION
verifyNull(_obj);
// Local object references.
- JavaObject* obj = *(JavaObject**)_obj;
- llvm_gcroot(obj, 0);
+ obj = *(JavaObject**)_obj;
JavaMethod* meth = (JavaMethod*)methodID;
Jnjvm* vm = JavaThread::get()->getJVM();
@@ -706,13 +737,15 @@ jbyte CallByteMethodV(JNIEnv *env, jobje
jbyte CallByteMethodA(JNIEnv *env, jobject _obj, jmethodID methodID,
const jvalue *args) {
+ JavaObject* obj = 0;
+ llvm_gcroot(obj, 0);
+
BEGIN_JNI_EXCEPTION
verifyNull(_obj);
// Local object references.
- JavaObject* obj = *(JavaObject**)_obj;
- llvm_gcroot(obj, 0);
+ obj = *(JavaObject**)_obj;
JavaMethod* meth = (JavaMethod*)methodID;
Jnjvm* vm = JavaThread::get()->getJVM();
@@ -736,14 +769,15 @@ jchar CallCharMethod(JNIEnv *env, jobjec
jchar CallCharMethodV(JNIEnv *env, jobject _obj, jmethodID methodID,
va_list args) {
+ JavaObject* obj = 0;
+ llvm_gcroot(obj, 0);
BEGIN_JNI_EXCEPTION
verifyNull(_obj);
// Local object references.
- JavaObject* obj = *(JavaObject**)_obj;
- llvm_gcroot(obj, 0);
+ obj = *(JavaObject**)_obj;
JavaMethod* meth = (JavaMethod*)methodID;
Jnjvm* vm = JavaThread::get()->getJVM();
@@ -759,13 +793,15 @@ jchar CallCharMethodV(JNIEnv *env, jobje
jchar CallCharMethodA(JNIEnv *env, jobject _obj, jmethodID methodID,
const jvalue *args) {
+ JavaObject* obj = 0;
+ llvm_gcroot(obj, 0);
+
BEGIN_JNI_EXCEPTION
verifyNull(_obj);
// Local object references.
- JavaObject* obj = *(JavaObject**)_obj;
- llvm_gcroot(obj, 0);
+ obj = *(JavaObject**)_obj;
JavaMethod* meth = (JavaMethod*)methodID;
Jnjvm* vm = JavaThread::get()->getJVM();
@@ -789,14 +825,15 @@ jshort CallShortMethod(JNIEnv *env, jobj
jshort CallShortMethodV(JNIEnv *env, jobject _obj, jmethodID methodID,
va_list args) {
-
+ JavaObject* obj = 0;
+ llvm_gcroot(obj, 0);
+
BEGIN_JNI_EXCEPTION
verifyNull(_obj);
// Local object references.
- JavaObject* obj = *(JavaObject**)_obj;
- llvm_gcroot(obj, 0);
+ obj = *(JavaObject**)_obj;
JavaMethod* meth = (JavaMethod*)methodID;
Jnjvm* vm = JavaThread::get()->getJVM();
@@ -812,13 +849,15 @@ jshort CallShortMethodV(JNIEnv *env, job
jshort CallShortMethodA(JNIEnv *env, jobject _obj, jmethodID methodID,
const jvalue *args) {
+ JavaObject* obj = 0;
+ llvm_gcroot(obj, 0);
+
BEGIN_JNI_EXCEPTION
verifyNull(_obj);
// Local object references.
- JavaObject* obj = *(JavaObject**)_obj;
- llvm_gcroot(obj, 0);
+ obj = *(JavaObject**)_obj;
JavaMethod* meth = (JavaMethod*)methodID;
Jnjvm* vm = JavaThread::get()->getJVM();
@@ -835,6 +874,8 @@ jshort CallShortMethodA(JNIEnv *env, job
jint CallIntMethod(JNIEnv *env, jobject _obj, jmethodID methodID, ...) {
+ JavaObject* obj = 0;
+ llvm_gcroot(obj, 0);
BEGIN_JNI_EXCEPTION
@@ -844,8 +885,7 @@ jint CallIntMethod(JNIEnv *env, jobject
va_start(ap, methodID);
// Local object references.
- JavaObject* obj = *(JavaObject**)_obj;
- llvm_gcroot(obj, 0);
+ obj = *(JavaObject**)_obj;
JavaMethod* meth = (JavaMethod*)methodID;
Jnjvm* vm = JavaThread::get()->getJVM();
@@ -863,14 +903,15 @@ jint CallIntMethod(JNIEnv *env, jobject
jint CallIntMethodV(JNIEnv *env, jobject _obj, jmethodID methodID,
va_list args) {
-
+ JavaObject* obj = 0;
+ llvm_gcroot(obj, 0);
+
BEGIN_JNI_EXCEPTION
verifyNull(_obj);
// Local object references.
- JavaObject* obj = *(JavaObject**)_obj;
- llvm_gcroot(obj, 0);
+ obj = *(JavaObject**)_obj;
JavaMethod* meth = (JavaMethod*)methodID;
Jnjvm* vm = JavaThread::get()->getJVM();
@@ -887,13 +928,15 @@ jint CallIntMethodV(JNIEnv *env, jobject
jint CallIntMethodA(JNIEnv *env, jobject _obj, jmethodID methodID,
const jvalue *args) {
+ JavaObject* obj = 0;
+ llvm_gcroot(obj, 0);
+
BEGIN_JNI_EXCEPTION
verifyNull(_obj);
// Local object references.
- JavaObject* obj = *(JavaObject**)_obj;
- llvm_gcroot(obj, 0);
+ obj = *(JavaObject**)_obj;
JavaMethod* meth = (JavaMethod*)methodID;
Jnjvm* vm = JavaThread::get()->getJVM();
@@ -910,6 +953,9 @@ jint CallIntMethodA(JNIEnv *env, jobject
jlong CallLongMethod(JNIEnv *env, jobject _obj, jmethodID methodID, ...) {
+ JavaObject* obj = 0;
+ llvm_gcroot(obj, 0);
+
BEGIN_JNI_EXCEPTION
verifyNull(_obj);
@@ -918,8 +964,7 @@ jlong CallLongMethod(JNIEnv *env, jobjec
va_start(ap, methodID);
// Local object references.
- JavaObject* obj = *(JavaObject**)_obj;
- llvm_gcroot(obj, 0);
+ obj = *(JavaObject**)_obj;
JavaMethod* meth = (JavaMethod*)methodID;
Jnjvm* vm = JavaThread::get()->getJVM();
@@ -937,14 +982,15 @@ jlong CallLongMethod(JNIEnv *env, jobjec
jlong CallLongMethodV(JNIEnv *env, jobject _obj, jmethodID methodID,
va_list args) {
+ JavaObject* obj = 0;
+ llvm_gcroot(obj, 0);
BEGIN_JNI_EXCEPTION
verifyNull(_obj);
// Local object references.
- JavaObject* obj = *(JavaObject**)_obj;
- llvm_gcroot(obj, 0);
+ obj = *(JavaObject**)_obj;
JavaMethod* meth = (JavaMethod*)methodID;
Jnjvm* vm = JavaThread::get()->getJVM();
@@ -960,13 +1006,15 @@ jlong CallLongMethodV(JNIEnv *env, jobje
jlong CallLongMethodA(JNIEnv *env, jobject _obj, jmethodID methodID,
const jvalue *args) {
+ JavaObject* obj = 0;
+ llvm_gcroot(obj, 0);
+
BEGIN_JNI_EXCEPTION
verifyNull(_obj);
// Local object references.
- JavaObject* obj = *(JavaObject**)_obj;
- llvm_gcroot(obj, 0);
+ obj = *(JavaObject**)_obj;
JavaMethod* meth = (JavaMethod*)methodID;
Jnjvm* vm = JavaThread::get()->getJVM();
@@ -983,6 +1031,8 @@ jlong CallLongMethodA(JNIEnv *env, jobje
jfloat CallFloatMethod(JNIEnv *env, jobject _obj, jmethodID methodID, ...) {
+ JavaObject* obj = 0;
+ llvm_gcroot(obj, 0);
BEGIN_JNI_EXCEPTION
@@ -992,8 +1042,7 @@ jfloat CallFloatMethod(JNIEnv *env, jobj
va_start(ap, methodID);
// Local object references.
- JavaObject* obj = *(JavaObject**)_obj;
- llvm_gcroot(obj, 0);
+ obj = *(JavaObject**)_obj;
JavaMethod* meth = (JavaMethod*)methodID;
Jnjvm* vm = JavaThread::get()->getJVM();
@@ -1009,14 +1058,15 @@ jfloat CallFloatMethod(JNIEnv *env, jobj
jfloat CallFloatMethodV(JNIEnv *env, jobject _obj, jmethodID methodID,
va_list args) {
+ JavaObject* obj = 0;
+ llvm_gcroot(obj, 0);
BEGIN_JNI_EXCEPTION
verifyNull(_obj);
// Local object references.
- JavaObject* obj = *(JavaObject**)_obj;
- llvm_gcroot(obj, 0);
+ obj = *(JavaObject**)_obj;
JavaMethod* meth = (JavaMethod*)methodID;
Jnjvm* vm = JavaThread::get()->getJVM();
@@ -1032,13 +1082,15 @@ jfloat CallFloatMethodV(JNIEnv *env, job
jfloat CallFloatMethodA(JNIEnv *env, jobject _obj, jmethodID methodID,
const jvalue *args) {
+ JavaObject* obj = 0;
+ llvm_gcroot(obj, 0);
+
BEGIN_JNI_EXCEPTION
verifyNull(_obj);
// Local object references.
- JavaObject* obj = *(JavaObject**)_obj;
- llvm_gcroot(obj, 0);
+ obj = *(JavaObject**)_obj;
JavaMethod* meth = (JavaMethod*)methodID;
Jnjvm* vm = JavaThread::get()->getJVM();
@@ -1055,6 +1107,8 @@ jfloat CallFloatMethodA(JNIEnv *env, job
jdouble CallDoubleMethod(JNIEnv *env, jobject _obj, jmethodID methodID, ...) {
+ JavaObject* obj = 0;
+ llvm_gcroot(obj, 0);
BEGIN_JNI_EXCEPTION
@@ -1064,8 +1118,7 @@ jdouble CallDoubleMethod(JNIEnv *env, jo
va_start(ap, methodID);
// Local object references.
- JavaObject* obj = *(JavaObject**)_obj;
- llvm_gcroot(obj, 0);
+ obj = *(JavaObject**)_obj;
JavaMethod* meth = (JavaMethod*)methodID;
Jnjvm* vm = JavaThread::get()->getJVM();
@@ -1081,14 +1134,15 @@ jdouble CallDoubleMethod(JNIEnv *env, jo
jdouble CallDoubleMethodV(JNIEnv *env, jobject _obj, jmethodID methodID,
va_list args) {
+ JavaObject* obj = 0;
+ llvm_gcroot(obj, 0);
BEGIN_JNI_EXCEPTION
verifyNull(_obj);
// Local object references.
- JavaObject* obj = *(JavaObject**)_obj;
- llvm_gcroot(obj, 0);
+ obj = *(JavaObject**)_obj;
JavaMethod* meth = (JavaMethod*)methodID;
Jnjvm* vm = JavaThread::get()->getJVM();
@@ -1104,13 +1158,15 @@ jdouble CallDoubleMethodV(JNIEnv *env, j
jdouble CallDoubleMethodA(JNIEnv *env, jobject _obj, jmethodID methodID,
const jvalue *args) {
+ JavaObject* obj = 0;
+ llvm_gcroot(obj, 0);
+
BEGIN_JNI_EXCEPTION
verifyNull(_obj);
// Local object references.
- JavaObject* obj = *(JavaObject**)_obj;
- llvm_gcroot(obj, 0);
+ obj = *(JavaObject**)_obj;
JavaMethod* meth = (JavaMethod*)methodID;
Jnjvm* vm = JavaThread::get()->getJVM();
@@ -1127,6 +1183,8 @@ jdouble CallDoubleMethodA(JNIEnv *env, j
void CallVoidMethod(JNIEnv *env, jobject _obj, jmethodID methodID, ...) {
+ JavaObject* obj = 0;
+ llvm_gcroot(obj, 0);
BEGIN_JNI_EXCEPTION
@@ -1136,8 +1194,7 @@ void CallVoidMethod(JNIEnv *env, jobject
va_start(ap, methodID);
// Local object references.
- JavaObject* obj = *(JavaObject**)_obj;
- llvm_gcroot(obj, 0);
+ obj = *(JavaObject**)_obj;
JavaMethod* meth = (JavaMethod*)methodID;
Jnjvm* vm = JavaThread::get()->getJVM();
@@ -1155,14 +1212,15 @@ void CallVoidMethod(JNIEnv *env, jobject
void CallVoidMethodV(JNIEnv *env, jobject _obj, jmethodID methodID,
va_list args) {
+ JavaObject* obj = 0;
+ llvm_gcroot(obj, 0);
BEGIN_JNI_EXCEPTION
verifyNull(_obj);
// Local object references.
- JavaObject* obj = *(JavaObject**)_obj;
- llvm_gcroot(obj, 0);
+ obj = *(JavaObject**)_obj;
JavaMethod* meth = (JavaMethod*)methodID;
Jnjvm* vm = JavaThread::get()->getJVM();
@@ -1179,13 +1237,15 @@ void CallVoidMethodV(JNIEnv *env, jobjec
void CallVoidMethodA(JNIEnv *env, jobject _obj, jmethodID methodID,
const jvalue *args) {
+ JavaObject* obj = 0;
+ llvm_gcroot(obj, 0);
+
BEGIN_JNI_EXCEPTION
verifyNull(_obj);
// Local object references.
- JavaObject* obj = *(JavaObject**)_obj;
- llvm_gcroot(obj, 0);
+ obj = *(JavaObject**)_obj;
JavaMethod* meth = (JavaMethod*)methodID;
Jnjvm* vm = JavaThread::get()->getJVM();
@@ -1428,6 +1488,8 @@ jdouble CallNonvirtualDoubleMethodA(JNIE
void CallNonvirtualVoidMethod(JNIEnv *env, jobject _obj, jclass clazz,
jmethodID methodID, ...) {
+ JavaObject* obj = 0;
+ llvm_gcroot(obj, 0);
BEGIN_JNI_EXCEPTION
@@ -1437,8 +1499,7 @@ void CallNonvirtualVoidMethod(JNIEnv *en
va_start(ap, methodID);
// Local object references.
- JavaObject* obj = *(JavaObject**)_obj;
- llvm_gcroot(obj, 0);
+ obj = *(JavaObject**)_obj;
JavaMethod* meth = (JavaMethod*)methodID;
Jnjvm* vm = JavaThread::get()->getJVM();
@@ -1470,12 +1531,13 @@ void CallNonvirtualVoidMethodA(JNIEnv *e
jfieldID GetFieldID(JNIEnv *env, jclass _clazz, const char *aname,
const char *sig) {
+ JavaObject* clazz = 0;
+ llvm_gcroot(clazz, 0);
BEGIN_JNI_EXCEPTION
// Local object references.
- JavaObject* clazz = *(JavaObject**)_clazz;
- llvm_gcroot(clazz, 0);
+ clazz = *(JavaObject**)_clazz;
Jnjvm* vm = JavaThread::get()->getJVM();
UserCommonClass* cl = UserCommonClass::resolvedImplClass(vm, clazz, true);
@@ -1499,14 +1561,15 @@ jfieldID GetFieldID(JNIEnv *env, jclass
jobject GetObjectField(JNIEnv *env, jobject _obj, jfieldID fieldID) {
+ JavaObject* obj = 0;
+ JavaObject* res = 0;
+ llvm_gcroot(obj, 0);
+ llvm_gcroot(res, 0);
BEGIN_JNI_EXCEPTION
// Local object references.
- JavaObject* obj = *(JavaObject**)_obj;
- JavaObject* res = 0;
- llvm_gcroot(obj, 0);
- llvm_gcroot(res, 0);
+ obj = *(JavaObject**)_obj;
JavaField* field = (JavaField*)fieldID;
@@ -1523,12 +1586,13 @@ jobject GetObjectField(JNIEnv *env, jobj
jboolean GetBooleanField(JNIEnv *env, jobject _obj, jfieldID fieldID) {
+ JavaObject* obj = 0;
+ llvm_gcroot(obj, 0);
BEGIN_JNI_EXCEPTION
// Local object references.
- JavaObject* obj = *(JavaObject**)_obj;
- llvm_gcroot(obj, 0);
+ obj = *(JavaObject**)_obj;
JavaField* field = (JavaField*)fieldID;
uint8 res = (uint8)field->getInstanceInt8Field(obj);
@@ -1540,12 +1604,13 @@ jboolean GetBooleanField(JNIEnv *env, jo
jbyte GetByteField(JNIEnv *env, jobject _obj, jfieldID fieldID) {
+ JavaObject* obj = 0;
+ llvm_gcroot(obj, 0);
BEGIN_JNI_EXCEPTION
// Local object references.
- JavaObject* obj = *(JavaObject**)_obj;
- llvm_gcroot(obj, 0);
+ obj = *(JavaObject**)_obj;
JavaField* field = (JavaField*)fieldID;
sint8 res = (sint8)field->getInstanceInt8Field(obj);
@@ -1557,12 +1622,13 @@ jbyte GetByteField(JNIEnv *env, jobject
jchar GetCharField(JNIEnv *env, jobject _obj, jfieldID fieldID) {
+ JavaObject* obj = 0;
+ llvm_gcroot(obj, 0);
BEGIN_JNI_EXCEPTION
// Local object references.
- JavaObject* obj = *(JavaObject**)_obj;
- llvm_gcroot(obj, 0);
+ obj = *(JavaObject**)_obj;
JavaField* field = (JavaField*)fieldID;
uint16 res = (uint16)field->getInstanceInt16Field(obj);
@@ -1574,12 +1640,13 @@ jchar GetCharField(JNIEnv *env, jobject
jshort GetShortField(JNIEnv *env, jobject _obj, jfieldID fieldID) {
+ JavaObject* obj = 0;
+ llvm_gcroot(obj, 0);
BEGIN_JNI_EXCEPTION
// Local object references.
- JavaObject* obj = *(JavaObject**)_obj;
- llvm_gcroot(obj, 0);
+ obj = *(JavaObject**)_obj;
JavaField* field = (JavaField*)fieldID;
sint16 res = (sint16)field->getInstanceInt16Field(obj);
@@ -1591,12 +1658,13 @@ jshort GetShortField(JNIEnv *env, jobjec
jint GetIntField(JNIEnv *env, jobject _obj, jfieldID fieldID) {
+ JavaObject* obj = 0;
+ llvm_gcroot(obj, 0);
BEGIN_JNI_EXCEPTION
// Local object references.
- JavaObject* obj = *(JavaObject**)_obj;
- llvm_gcroot(obj, 0);
+ obj = *(JavaObject**)_obj;
JavaField* field = (JavaField*)fieldID;
sint32 res = (sint32)field->getInstanceInt32Field(obj);
@@ -1608,12 +1676,13 @@ jint GetIntField(JNIEnv *env, jobject _o
jlong GetLongField(JNIEnv *env, jobject _obj, jfieldID fieldID) {
+ JavaObject* obj = 0;
+ llvm_gcroot(obj, 0);
BEGIN_JNI_EXCEPTION
// Local object references.
- JavaObject* obj = *(JavaObject**)_obj;
- llvm_gcroot(obj, 0);
+ obj = *(JavaObject**)_obj;
JavaField* field = (JavaField*)fieldID;
sint64 res = (sint64)field->getInstanceLongField(obj);
@@ -1625,12 +1694,13 @@ jlong GetLongField(JNIEnv *env, jobject
jfloat GetFloatField(JNIEnv *env, jobject _obj, jfieldID fieldID) {
+ JavaObject* obj = 0;
+ llvm_gcroot(obj, 0);
BEGIN_JNI_EXCEPTION
// Local object references.
- JavaObject* obj = *(JavaObject**)_obj;
- llvm_gcroot(obj, 0);
+ obj = *(JavaObject**)_obj;
JavaField* field = (JavaField*)fieldID;
jfloat res = (jfloat)field->getInstanceFloatField(obj);
@@ -1642,12 +1712,13 @@ jfloat GetFloatField(JNIEnv *env, jobjec
jdouble GetDoubleField(JNIEnv *env, jobject _obj, jfieldID fieldID) {
+ JavaObject* obj = 0;
+ llvm_gcroot(obj, 0);
BEGIN_JNI_EXCEPTION
// Local object references.
- JavaObject* obj = *(JavaObject**)_obj;
- llvm_gcroot(obj, 0);
+ obj = *(JavaObject**)_obj;
JavaField* field = (JavaField*)fieldID;
jdouble res = (jdouble)field->getInstanceDoubleField(obj);
@@ -1659,14 +1730,16 @@ jdouble GetDoubleField(JNIEnv *env, jobj
void SetObjectField(JNIEnv *env, jobject _obj, jfieldID fieldID, jobject _value) {
+ JavaObject* obj = 0;
+ JavaObject* value = 0;
+ llvm_gcroot(obj, 0);
+ llvm_gcroot(value, 0);
BEGIN_JNI_EXCEPTION
// Local object references.
- JavaObject* obj = *(JavaObject**)_obj;
- JavaObject* value = *(JavaObject**)_value;
- llvm_gcroot(obj, 0);
- llvm_gcroot(value, 0);
+ obj = *(JavaObject**)_obj;
+ value = *(JavaObject**)_value;
JavaField* field = (JavaField*)fieldID;
field->setInstanceObjectField(obj, value);
@@ -1681,12 +1754,13 @@ void SetObjectField(JNIEnv *env, jobject
void SetBooleanField(JNIEnv *env, jobject _obj, jfieldID fieldID,
jboolean value) {
+ JavaObject* obj = 0;
+ llvm_gcroot(obj, 0);
BEGIN_JNI_EXCEPTION
// Local object references.
- JavaObject* obj = *(JavaObject**)_obj;
- llvm_gcroot(obj, 0);
+ obj = *(JavaObject**)_obj;
JavaField* field = (JavaField*)fieldID;
field->setInstanceInt8Field(obj, (uint8)value);
@@ -1700,12 +1774,13 @@ void SetBooleanField(JNIEnv *env, jobjec
void SetByteField(JNIEnv *env, jobject _obj, jfieldID fieldID, jbyte value) {
+ JavaObject* obj = 0;
+ llvm_gcroot(obj, 0);
BEGIN_JNI_EXCEPTION
// Local object references.
- JavaObject* obj = *(JavaObject**)_obj;
- llvm_gcroot(obj, 0);
+ obj = *(JavaObject**)_obj;
JavaField* field = (JavaField*)fieldID;
field->setInstanceInt8Field(obj, (uint8)value);
@@ -1719,12 +1794,13 @@ void SetByteField(JNIEnv *env, jobject _
void SetCharField(JNIEnv *env, jobject _obj, jfieldID fieldID, jchar value) {
+ JavaObject* obj = 0;
+ llvm_gcroot(obj, 0);
BEGIN_JNI_EXCEPTION
// Local object references.
- JavaObject* obj = *(JavaObject**)_obj;
- llvm_gcroot(obj, 0);
+ obj = *(JavaObject**)_obj;
JavaField* field = (JavaField*)fieldID;
field->setInstanceInt16Field(obj, (uint16)value);
@@ -1738,12 +1814,13 @@ void SetCharField(JNIEnv *env, jobject _
void SetShortField(JNIEnv *env, jobject _obj, jfieldID fieldID, jshort value) {
+ JavaObject* obj = 0;
+ llvm_gcroot(obj, 0);
BEGIN_JNI_EXCEPTION
// Local object references.
- JavaObject* obj = *(JavaObject**)_obj;
- llvm_gcroot(obj, 0);
+ obj = *(JavaObject**)_obj;
JavaField* field = (JavaField*)fieldID;
field->setInstanceInt16Field(obj, (sint16)value);
@@ -1757,12 +1834,13 @@ void SetShortField(JNIEnv *env, jobject
void SetIntField(JNIEnv *env, jobject _obj, jfieldID fieldID, jint value) {
+ JavaObject* obj = 0;
+ llvm_gcroot(obj, 0);
BEGIN_JNI_EXCEPTION
// Local object references.
- JavaObject* obj = *(JavaObject**)_obj;
- llvm_gcroot(obj, 0);
+ obj = *(JavaObject**)_obj;
JavaField* field = (JavaField*)fieldID;
field->setInstanceInt32Field(obj, (sint32)value);
@@ -1776,12 +1854,13 @@ void SetIntField(JNIEnv *env, jobject _o
void SetLongField(JNIEnv *env, jobject _obj, jfieldID fieldID, jlong value) {
+ JavaObject* obj = 0;
+ llvm_gcroot(obj, 0);
BEGIN_JNI_EXCEPTION
// Local object references.
- JavaObject* obj = *(JavaObject**)_obj;
- llvm_gcroot(obj, 0);
+ obj = *(JavaObject**)_obj;
JavaField* field = (JavaField*)fieldID;
field->setInstanceLongField(obj, (sint64)value);
@@ -1795,12 +1874,13 @@ void SetLongField(JNIEnv *env, jobject _
void SetFloatField(JNIEnv *env, jobject _obj, jfieldID fieldID, jfloat value) {
+ JavaObject* obj = 0;
+ llvm_gcroot(obj, 0);
BEGIN_JNI_EXCEPTION
// Local object references.
- JavaObject* obj = *(JavaObject**)_obj;
- llvm_gcroot(obj, 0);
+ obj = *(JavaObject**)_obj;
JavaField* field = (JavaField*)fieldID;
field->setInstanceFloatField(obj, (float)value);
@@ -1814,12 +1894,13 @@ void SetFloatField(JNIEnv *env, jobject
void SetDoubleField(JNIEnv *env, jobject _obj, jfieldID fieldID, jdouble value) {
+ JavaObject* obj = 0;
+ llvm_gcroot(obj, 0);
BEGIN_JNI_EXCEPTION
// Local object references.
- JavaObject* obj = *(JavaObject**)_obj;
- llvm_gcroot(obj, 0);
+ obj = *(JavaObject**)_obj;
JavaField* field = (JavaField*)fieldID;
field->setInstanceDoubleField(obj, (float)value);
@@ -1834,12 +1915,13 @@ void SetDoubleField(JNIEnv *env, jobject
jmethodID GetStaticMethodID(JNIEnv *env, jclass _clazz, const char *aname,
const char *atype) {
+ JavaObject* clazz = 0;
+ llvm_gcroot(clazz, 0);
BEGIN_JNI_EXCEPTION
// Local object references.
- JavaObject* clazz = *(JavaObject**)_clazz;
- llvm_gcroot(clazz, 0);
+ clazz = *(JavaObject**)_clazz;
Jnjvm* vm = JavaThread::get()->getJVM();
UserCommonClass* cl = UserCommonClass::resolvedImplClass(vm, clazz, true);
@@ -1863,6 +1945,10 @@ jmethodID GetStaticMethodID(JNIEnv *env,
jobject CallStaticObjectMethod(JNIEnv *env, jclass _clazz, jmethodID methodID,
...) {
+ JavaObject* clazz = 0;
+ JavaObject* res = 0;
+ llvm_gcroot(clazz, 0);
+ llvm_gcroot(res, 0);
BEGIN_JNI_EXCEPTION
@@ -1870,10 +1956,7 @@ jobject CallStaticObjectMethod(JNIEnv *e
va_start(ap, methodID);
// Local object references.
- JavaObject* clazz = *(JavaObject**)_clazz;
- JavaObject* res = 0;
- llvm_gcroot(clazz, 0);
- llvm_gcroot(res, 0);
+ clazz = *(JavaObject**)_clazz;
JavaMethod* meth = (JavaMethod*)methodID;
@@ -1895,13 +1978,15 @@ jobject CallStaticObjectMethod(JNIEnv *e
jobject CallStaticObjectMethodV(JNIEnv *env, jclass _clazz, jmethodID methodID,
va_list args) {
- BEGIN_JNI_EXCEPTION
-
- // Local object references.
- JavaObject* clazz = *(JavaObject**)_clazz;
+ JavaObject* clazz = 0;
JavaObject* res = 0;
llvm_gcroot(clazz, 0);
llvm_gcroot(res, 0);
+
+ BEGIN_JNI_EXCEPTION
+
+ // Local object references.
+ clazz = *(JavaObject**)_clazz;
JavaMethod* meth = (JavaMethod*)methodID;
JavaThread* th = JavaThread::get();
@@ -1921,14 +2006,16 @@ jobject CallStaticObjectMethodV(JNIEnv *
jobject CallStaticObjectMethodA(JNIEnv *env, jclass _clazz, jmethodID methodID,
const jvalue *args) {
- BEGIN_JNI_EXCEPTION
-
- // Local object references.
- JavaObject* clazz = *(JavaObject**)_clazz;
+ JavaObject* clazz = 0;
JavaObject* res = 0;
llvm_gcroot(clazz, 0);
llvm_gcroot(res, 0);
+ BEGIN_JNI_EXCEPTION
+
+ // Local object references.
+ clazz = *(JavaObject**)_clazz;
+
JavaMethod* meth = (JavaMethod*)methodID;
Jnjvm* vm = JavaThread::get()->getJVM();
UserClass* cl = getClassFromStaticMethod(vm, meth, clazz);
@@ -1945,6 +2032,8 @@ jobject CallStaticObjectMethodA(JNIEnv *
jboolean CallStaticBooleanMethod(JNIEnv *env, jclass _clazz, jmethodID methodID,
...) {
+ JavaObject* clazz = 0;
+ llvm_gcroot(clazz, 0);
BEGIN_JNI_EXCEPTION
@@ -1952,8 +2041,7 @@ jboolean CallStaticBooleanMethod(JNIEnv
va_start(ap, methodID);
// Local object references.
- JavaObject* clazz = *(JavaObject**)_clazz;
- llvm_gcroot(clazz, 0);
+ clazz = *(JavaObject**)_clazz;
JavaMethod* meth = (JavaMethod*)methodID;
Jnjvm* vm = JavaThread::get()->getJVM();
@@ -1969,12 +2057,13 @@ jboolean CallStaticBooleanMethod(JNIEnv
jboolean CallStaticBooleanMethodV(JNIEnv *env, jclass _clazz, jmethodID methodID,
va_list args) {
+ JavaObject* clazz = 0;
+ llvm_gcroot(clazz, 0);
BEGIN_JNI_EXCEPTION
// Local object references.
- JavaObject* clazz = *(JavaObject**)_clazz;
- llvm_gcroot(clazz, 0);
+ clazz = *(JavaObject**)_clazz;
JavaMethod* meth = (JavaMethod*)methodID;
Jnjvm* vm = JavaThread::get()->getJVM();
@@ -1989,11 +2078,13 @@ jboolean CallStaticBooleanMethodV(JNIEnv
jboolean CallStaticBooleanMethodA(JNIEnv *env, jclass _clazz, jmethodID methodID,
const jvalue *args) {
+ JavaObject* clazz = 0;
+ llvm_gcroot(clazz, 0);
+
BEGIN_JNI_EXCEPTION
// Local object references.
- JavaObject* clazz = *(JavaObject**)_clazz;
- llvm_gcroot(clazz, 0);
+ clazz = *(JavaObject**)_clazz;
JavaMethod* meth = (JavaMethod*)methodID;
Jnjvm* vm = JavaThread::get()->getJVM();
@@ -2008,12 +2099,13 @@ jboolean CallStaticBooleanMethodA(JNIEnv
jbyte CallStaticByteMethod(JNIEnv *env, jclass _clazz, jmethodID methodID, ...) {
+ JavaObject* clazz = 0;
+ llvm_gcroot(clazz, 0);
BEGIN_JNI_EXCEPTION
// Local object references.
- JavaObject* clazz = *(JavaObject**)_clazz;
- llvm_gcroot(clazz, 0);
+ clazz = *(JavaObject**)_clazz;
va_list ap;
va_start(ap, methodID);
@@ -2031,12 +2123,13 @@ jbyte CallStaticByteMethod(JNIEnv *env,
jbyte CallStaticByteMethodV(JNIEnv *env, jclass _clazz, jmethodID methodID,
va_list args) {
+ JavaObject* clazz = 0;
+ llvm_gcroot(clazz, 0);
BEGIN_JNI_EXCEPTION
// Local object references.
- JavaObject* clazz = *(JavaObject**)_clazz;
- llvm_gcroot(clazz, 0);
+ clazz = *(JavaObject**)_clazz;
JavaMethod* meth = (JavaMethod*)methodID;
Jnjvm* vm = JavaThread::get()->getJVM();
@@ -2051,11 +2144,13 @@ jbyte CallStaticByteMethodV(JNIEnv *env,
jbyte CallStaticByteMethodA(JNIEnv *env, jclass _clazz, jmethodID methodID,
const jvalue *args) {
+ JavaObject* clazz = 0;
+ llvm_gcroot(clazz, 0);
+
BEGIN_JNI_EXCEPTION
// Local object references.
- JavaObject* clazz = *(JavaObject**)_clazz;
- llvm_gcroot(clazz, 0);
+ clazz = *(JavaObject**)_clazz;
JavaMethod* meth = (JavaMethod*)methodID;
Jnjvm* vm = JavaThread::get()->getJVM();
@@ -2070,6 +2165,8 @@ jbyte CallStaticByteMethodA(JNIEnv *env,
jchar CallStaticCharMethod(JNIEnv *env, jclass _clazz, jmethodID methodID, ...) {
+ JavaObject* clazz = 0;
+ llvm_gcroot(clazz, 0);
BEGIN_JNI_EXCEPTION
@@ -2077,8 +2174,7 @@ jchar CallStaticCharMethod(JNIEnv *env,
va_start(ap, methodID);
// Local object references.
- JavaObject* clazz = *(JavaObject**)_clazz;
- llvm_gcroot(clazz, 0);
+ clazz = *(JavaObject**)_clazz;
JavaMethod* meth = (JavaMethod*)methodID;
Jnjvm* vm = JavaThread::get()->getJVM();
@@ -2094,11 +2190,13 @@ jchar CallStaticCharMethod(JNIEnv *env,
jchar CallStaticCharMethodV(JNIEnv *env, jclass _clazz, jmethodID methodID,
va_list args) {
+ JavaObject* clazz = 0;
+ llvm_gcroot(clazz, 0);
+
BEGIN_JNI_EXCEPTION
// Local object references.
- JavaObject* clazz = *(JavaObject**)_clazz;
- llvm_gcroot(clazz, 0);
+ clazz = *(JavaObject**)_clazz;
JavaMethod* meth = (JavaMethod*)methodID;
Jnjvm* vm = JavaThread::get()->getJVM();
@@ -2113,11 +2211,13 @@ jchar CallStaticCharMethodV(JNIEnv *env,
jchar CallStaticCharMethodA(JNIEnv *env, jclass _clazz, jmethodID methodID,
const jvalue *args) {
+ JavaObject* clazz = 0;
+ llvm_gcroot(clazz, 0);
+
BEGIN_JNI_EXCEPTION
// Local object references.
- JavaObject* clazz = *(JavaObject**)_clazz;
- llvm_gcroot(clazz, 0);
+ clazz = *(JavaObject**)_clazz;
JavaMethod* meth = (JavaMethod*)methodID;
Jnjvm* vm = JavaThread::get()->getJVM();
@@ -2133,6 +2233,8 @@ jchar CallStaticCharMethodA(JNIEnv *env,
jshort CallStaticShortMethod(JNIEnv *env, jclass _clazz, jmethodID methodID,
...) {
+ JavaObject* clazz = 0;
+ llvm_gcroot(clazz, 0);
BEGIN_JNI_EXCEPTION
@@ -2140,8 +2242,7 @@ jshort CallStaticShortMethod(JNIEnv *env
va_start(ap, methodID);
// Local object references.
- JavaObject* clazz = *(JavaObject**)_clazz;
- llvm_gcroot(clazz, 0);
+ clazz = *(JavaObject**)_clazz;
JavaMethod* meth = (JavaMethod*)methodID;
Jnjvm* vm = JavaThread::get()->getJVM();
@@ -2157,12 +2258,13 @@ jshort CallStaticShortMethod(JNIEnv *env
jshort CallStaticShortMethodV(JNIEnv *env, jclass _clazz, jmethodID methodID,
va_list args) {
+ JavaObject* clazz = 0;
+ llvm_gcroot(clazz, 0);
BEGIN_JNI_EXCEPTION
// Local object references.
- JavaObject* clazz = *(JavaObject**)_clazz;
- llvm_gcroot(clazz, 0);
+ clazz = *(JavaObject**)_clazz;
JavaMethod* meth = (JavaMethod*)methodID;
Jnjvm* vm = JavaThread::get()->getJVM();
@@ -2177,11 +2279,13 @@ jshort CallStaticShortMethodV(JNIEnv *en
jshort CallStaticShortMethodA(JNIEnv *env, jclass _clazz, jmethodID methodID,
const jvalue *args) {
+ JavaObject* clazz = 0;
+ llvm_gcroot(clazz, 0);
+
BEGIN_JNI_EXCEPTION
// Local object references.
- JavaObject* clazz = *(JavaObject**)_clazz;
- llvm_gcroot(clazz, 0);
+ clazz = *(JavaObject**)_clazz;
JavaMethod* meth = (JavaMethod*)methodID;
Jnjvm* vm = JavaThread::get()->getJVM();
@@ -2196,6 +2300,8 @@ jshort CallStaticShortMethodA(JNIEnv *en
jint CallStaticIntMethod(JNIEnv *env, jclass _clazz, jmethodID methodID, ...) {
+ JavaObject* clazz = 0;
+ llvm_gcroot(clazz, 0);
BEGIN_JNI_EXCEPTION
@@ -2203,8 +2309,7 @@ jint CallStaticIntMethod(JNIEnv *env, jc
va_start(ap, methodID);
// Local object references.
- JavaObject* clazz = *(JavaObject**)_clazz;
- llvm_gcroot(clazz, 0);
+ clazz = *(JavaObject**)_clazz;
JavaMethod* meth = (JavaMethod*)methodID;
Jnjvm* vm = JavaThread::get()->getJVM();
@@ -2220,11 +2325,13 @@ jint CallStaticIntMethod(JNIEnv *env, jc
jint CallStaticIntMethodV(JNIEnv *env, jclass _clazz, jmethodID methodID,
va_list args) {
+ JavaObject* clazz = 0;
+ llvm_gcroot(clazz, 0);
+
BEGIN_JNI_EXCEPTION
// Local object references.
- JavaObject* clazz = *(JavaObject**)_clazz;
- llvm_gcroot(clazz, 0);
+ clazz = *(JavaObject**)_clazz;
JavaMethod* meth = (JavaMethod*)methodID;
Jnjvm* vm = JavaThread::get()->getJVM();
@@ -2240,11 +2347,13 @@ jint CallStaticIntMethodV(JNIEnv *env, j
jint CallStaticIntMethodA(JNIEnv *env, jclass _clazz, jmethodID methodID,
const jvalue *args) {
+ JavaObject* clazz = 0;
+ llvm_gcroot(clazz, 0);
+
BEGIN_JNI_EXCEPTION
// Local object references.
- JavaObject* clazz = *(JavaObject**)_clazz;
- llvm_gcroot(clazz, 0);
+ clazz = *(JavaObject**)_clazz;
JavaMethod* meth = (JavaMethod*)methodID;
Jnjvm* vm = JavaThread::get()->getJVM();
@@ -2259,6 +2368,8 @@ jint CallStaticIntMethodA(JNIEnv *env, j
jlong CallStaticLongMethod(JNIEnv *env, jclass _clazz, jmethodID methodID, ...) {
+ JavaObject* clazz = 0;
+ llvm_gcroot(clazz, 0);
BEGIN_JNI_EXCEPTION
@@ -2266,8 +2377,7 @@ jlong CallStaticLongMethod(JNIEnv *env,
va_start(ap, methodID);
// Local object references.
- JavaObject* clazz = *(JavaObject**)_clazz;
- llvm_gcroot(clazz, 0);
+ clazz = *(JavaObject**)_clazz;
JavaMethod* meth = (JavaMethod*)methodID;
Jnjvm* vm = JavaThread::get()->getJVM();
@@ -2283,12 +2393,13 @@ jlong CallStaticLongMethod(JNIEnv *env,
jlong CallStaticLongMethodV(JNIEnv *env, jclass _clazz, jmethodID methodID,
va_list args) {
+ JavaObject* clazz = 0;
+ llvm_gcroot(clazz, 0);
BEGIN_JNI_EXCEPTION
// Local object references.
- JavaObject* clazz = *(JavaObject**)_clazz;
- llvm_gcroot(clazz, 0);
+ clazz = *(JavaObject**)_clazz;
JavaMethod* meth = (JavaMethod*)methodID;
Jnjvm* vm = JavaThread::get()->getJVM();
@@ -2304,11 +2415,13 @@ jlong CallStaticLongMethodV(JNIEnv *env,
jlong CallStaticLongMethodA(JNIEnv *env, jclass _clazz, jmethodID methodID,
const jvalue *args) {
+ JavaObject* clazz = 0;
+ llvm_gcroot(clazz, 0);
+
BEGIN_JNI_EXCEPTION
// Local object references.
- JavaObject* clazz = *(JavaObject**)_clazz;
- llvm_gcroot(clazz, 0);
+ clazz = *(JavaObject**)_clazz;
JavaMethod* meth = (JavaMethod*)methodID;
Jnjvm* vm = JavaThread::get()->getJVM();
@@ -2325,6 +2438,8 @@ jlong CallStaticLongMethodA(JNIEnv *env,
jfloat CallStaticFloatMethod(JNIEnv *env, jclass _clazz, jmethodID methodID,
...) {
+ JavaObject* clazz = 0;
+ llvm_gcroot(clazz, 0);
BEGIN_JNI_EXCEPTION
@@ -2332,8 +2447,7 @@ jfloat CallStaticFloatMethod(JNIEnv *env
va_start(ap, methodID);
// Local object references.
- JavaObject* clazz = *(JavaObject**)_clazz;
- llvm_gcroot(clazz, 0);
+ clazz = *(JavaObject**)_clazz;
JavaMethod* meth = (JavaMethod*)methodID;
Jnjvm* vm = JavaThread::get()->getJVM();
@@ -2349,12 +2463,13 @@ jfloat CallStaticFloatMethod(JNIEnv *env
jfloat CallStaticFloatMethodV(JNIEnv *env, jclass _clazz, jmethodID methodID,
va_list args) {
+ JavaObject* clazz = 0;
+ llvm_gcroot(clazz, 0);
BEGIN_JNI_EXCEPTION
// Local object references.
- JavaObject* clazz = *(JavaObject**)_clazz;
- llvm_gcroot(clazz, 0);
+ clazz = *(JavaObject**)_clazz;
JavaMethod* meth = (JavaMethod*)methodID;
Jnjvm* vm = JavaThread::get()->getJVM();
@@ -2370,11 +2485,13 @@ jfloat CallStaticFloatMethodV(JNIEnv *en
jfloat CallStaticFloatMethodA(JNIEnv *env, jclass _clazz, jmethodID methodID,
const jvalue *args) {
+ JavaObject* clazz = 0;
+ llvm_gcroot(clazz, 0);
+
BEGIN_JNI_EXCEPTION
// Local object references.
- JavaObject* clazz = *(JavaObject**)_clazz;
- llvm_gcroot(clazz, 0);
+ clazz = *(JavaObject**)_clazz;
JavaMethod* meth = (JavaMethod*)methodID;
Jnjvm* vm = JavaThread::get()->getJVM();
@@ -2390,6 +2507,8 @@ jfloat CallStaticFloatMethodA(JNIEnv *en
jdouble CallStaticDoubleMethod(JNIEnv *env, jclass _clazz, jmethodID methodID,
...) {
+ JavaObject* clazz = 0;
+ llvm_gcroot(clazz, 0);
BEGIN_JNI_EXCEPTION
@@ -2397,8 +2516,7 @@ jdouble CallStaticDoubleMethod(JNIEnv *e
va_start(ap, methodID);
// Local object references.
- JavaObject* clazz = *(JavaObject**)_clazz;
- llvm_gcroot(clazz, 0);
+ clazz = *(JavaObject**)_clazz;
JavaMethod* meth = (JavaMethod*)methodID;
Jnjvm* vm = JavaThread::get()->getJVM();
@@ -2414,11 +2532,13 @@ jdouble CallStaticDoubleMethod(JNIEnv *e
jdouble CallStaticDoubleMethodV(JNIEnv *env, jclass _clazz, jmethodID methodID,
va_list args) {
+ JavaObject* clazz = 0;
+ llvm_gcroot(clazz, 0);
+
BEGIN_JNI_EXCEPTION
// Local object references.
- JavaObject* clazz = *(JavaObject**)_clazz;
- llvm_gcroot(clazz, 0);
+ clazz = *(JavaObject**)_clazz;
JavaMethod* meth = (JavaMethod*)methodID;
Jnjvm* vm = JavaThread::get()->getJVM();
@@ -2434,11 +2554,13 @@ jdouble CallStaticDoubleMethodV(JNIEnv *
jdouble CallStaticDoubleMethodA(JNIEnv *env, jclass _clazz, jmethodID methodID,
const jvalue *args) {
+ JavaObject* clazz = 0;
+ llvm_gcroot(clazz, 0);
+
BEGIN_JNI_EXCEPTION
// Local object references.
- JavaObject* clazz = *(JavaObject**)_clazz;
- llvm_gcroot(clazz, 0);
+ clazz = *(JavaObject**)_clazz;
JavaMethod* meth = (JavaMethod*)methodID;
Jnjvm* vm = JavaThread::get()->getJVM();
@@ -2453,6 +2575,8 @@ jdouble CallStaticDoubleMethodA(JNIEnv *
void CallStaticVoidMethod(JNIEnv *env, jclass _clazz, jmethodID methodID, ...) {
+ JavaObject* clazz = 0;
+ llvm_gcroot(clazz, 0);
BEGIN_JNI_EXCEPTION
@@ -2460,8 +2584,7 @@ void CallStaticVoidMethod(JNIEnv *env, j
va_start(ap, methodID);
// Local object references.
- JavaObject* clazz = *(JavaObject**)_clazz;
- llvm_gcroot(clazz, 0);
+ clazz = *(JavaObject**)_clazz;
JavaMethod* meth = (JavaMethod*)methodID;
Jnjvm* vm = JavaThread::get()->getJVM();
@@ -2479,12 +2602,13 @@ void CallStaticVoidMethod(JNIEnv *env, j
void CallStaticVoidMethodV(JNIEnv *env, jclass _clazz, jmethodID methodID,
va_list args) {
-
+ JavaObject* clazz = 0;
+ llvm_gcroot(clazz, 0);
+
BEGIN_JNI_EXCEPTION
// Local object references.
- JavaObject* clazz = *(JavaObject**)_clazz;
- llvm_gcroot(clazz, 0);
+ clazz = *(JavaObject**)_clazz;
JavaMethod* meth = (JavaMethod*)methodID;
Jnjvm* vm = JavaThread::get()->getJVM();
@@ -2501,11 +2625,13 @@ void CallStaticVoidMethodV(JNIEnv *env,
void CallStaticVoidMethodA(JNIEnv *env, jclass _clazz, jmethodID methodID,
const jvalue * args) {
+ JavaObject* clazz = 0;
+ llvm_gcroot(clazz, 0);
+
BEGIN_JNI_EXCEPTION
// Local object references.
- JavaObject* clazz = *(JavaObject**)_clazz;
- llvm_gcroot(clazz, 0);
+ clazz = *(JavaObject**)_clazz;
JavaMethod* meth = (JavaMethod*)methodID;
Jnjvm* vm = JavaThread::get()->getJVM();
@@ -2522,12 +2648,13 @@ void CallStaticVoidMethodA(JNIEnv *env,
jfieldID GetStaticFieldID(JNIEnv *env, jclass _clazz, const char *aname,
const char *sig) {
+ JavaObject* clazz = 0;
+ llvm_gcroot(clazz, 0);
BEGIN_JNI_EXCEPTION
// Local object references.
- JavaObject* clazz = *(JavaObject**)_clazz;
- llvm_gcroot(clazz, 0);
+ clazz = *(JavaObject**)_clazz;
Jnjvm* vm = JavaThread::get()->getJVM();
UserCommonClass* cl = UserCommonClass::resolvedImplClass(vm, clazz, true);
@@ -2550,13 +2677,11 @@ jfieldID GetStaticFieldID(JNIEnv *env, j
jobject GetStaticObjectField(JNIEnv *env, jclass _clazz, jfieldID fieldID) {
-
- BEGIN_JNI_EXCEPTION
-
- // Local object references.
JavaObject* obj = 0;
llvm_gcroot(obj, 0);
+ BEGIN_JNI_EXCEPTION
+
JavaThread* th = JavaThread::get();
JavaField* field = (JavaField*)fieldID;
obj = field->getStaticObjectField();
@@ -2674,12 +2799,13 @@ jdouble GetStaticDoubleField(JNIEnv *env
void SetStaticObjectField(JNIEnv *env, jclass _clazz, jfieldID fieldID,
jobject _value) {
+ JavaObject* value = 0;
+ llvm_gcroot(value, 0);
BEGIN_JNI_EXCEPTION
// Local object references.
- JavaObject* value = *(JavaObject**)_value;
- llvm_gcroot(value, 0);
+ value = *(JavaObject**)_value;
JavaField* field = (JavaField*)fieldID;
field->setStaticObjectField(value);
@@ -2821,13 +2947,13 @@ void SetStaticDoubleField(JNIEnv *env, j
jstring NewString(JNIEnv *env, const jchar *buf, jsize len) {
- BEGIN_JNI_EXCEPTION
-
JavaString* obj = NULL;
ArrayUInt16* tmp = NULL;
llvm_gcroot(obj, 0);
llvm_gcroot(tmp, 0);
+ BEGIN_JNI_EXCEPTION
+
JavaThread* th = JavaThread::get();
Jnjvm* vm = th->getJVM();
@@ -2848,11 +2974,13 @@ jstring NewString(JNIEnv *env, const jch
jsize GetStringLength(JNIEnv *env, jstring _str) {
+ JavaString* str = 0;
+ llvm_gcroot(str, 0);
+
BEGIN_JNI_EXCEPTION
// Local object references.
- JavaString* str = *(JavaString**)_str;
- llvm_gcroot(str, 0);
+ str = *(JavaString**)_str;
RETURN_FROM_JNI(str->count);
@@ -2875,12 +3003,11 @@ void ReleaseStringChars(JNIEnv *env, jst
jstring NewStringUTF(JNIEnv *env, const char *bytes) {
-
- BEGIN_JNI_EXCEPTION
-
JavaObject* obj = NULL;
llvm_gcroot(obj, 0);
+ BEGIN_JNI_EXCEPTION
+
JavaThread* th = JavaThread::get();
Jnjvm* vm = th->getJVM();
obj = vm->asciizToStr(bytes);
@@ -2893,11 +3020,14 @@ jstring NewStringUTF(JNIEnv *env, const
jsize GetStringUTFLength (JNIEnv *env, jstring string) {
+ JavaString* s = NULL;
+ llvm_gcroot(s, 0);
+
BEGIN_JNI_EXCEPTION
JavaThread* th = JavaThread::get();
- JavaString * s = *(JavaString**)string;
- llvm_gcroot(s, 0);
+ s = *(JavaString**)string;
+
RETURN_FROM_JNI(s->count);
END_JNI_EXCEPTION
@@ -2906,12 +3036,13 @@ jsize GetStringUTFLength (JNIEnv *env, j
const char *GetStringUTFChars(JNIEnv *env, jstring _string, jboolean *isCopy) {
+ JavaString* string = 0;
+ llvm_gcroot(string, 0);
BEGIN_JNI_EXCEPTION
// Local object references.
- JavaString* string = *(JavaString**)_string;
- llvm_gcroot(string, 0);
+ string = *(JavaString**)_string;
if (isCopy != 0) (*isCopy) = true;
const char* res = JavaString::strToAsciiz(string);
@@ -2928,12 +3059,13 @@ void ReleaseStringUTFChars(JNIEnv *env,
jsize GetArrayLength(JNIEnv *env, jarray _array) {
+ JavaObject* array = 0;
+ llvm_gcroot(array, 0);
BEGIN_JNI_EXCEPTION
// Local object references.
- JavaObject* array = *(JavaObject**)_array;
- llvm_gcroot(array, 0);
+ array = *(JavaObject**)_array;
RETURN_FROM_JNI(JavaArray::getSize(array));
@@ -2944,17 +3076,20 @@ jsize GetArrayLength(JNIEnv *env, jarray
jobjectArray NewObjectArray(JNIEnv *env, jsize length, jclass _elementClass,
jobject _initialElement) {
- BEGIN_JNI_EXCEPTION
-
- // Local object references.
- JavaObject* elementClass = *(JavaObject**)_elementClass;
- JavaObject* initialElement = _initialElement ?
- *(JavaObject**)_initialElement : 0;
+ JavaObject* elementClass = 0;
+ JavaObject* initialElement = 0;
ArrayObject* res = 0;
llvm_gcroot(elementClass, 0);
llvm_gcroot(initialElement, 0);
llvm_gcroot(res, 0);
+ BEGIN_JNI_EXCEPTION
+
+ // Local object references.
+ elementClass = *(JavaObject**)_elementClass;
+ initialElement = _initialElement ?
+ *(JavaObject**)_initialElement : 0;
+
JavaThread* th = JavaThread::get();
Jnjvm* vm = th->getJVM();
@@ -2983,15 +3118,15 @@ jobjectArray NewObjectArray(JNIEnv *env,
jobject GetObjectArrayElement(JNIEnv *env, jobjectArray _array, jsize index) {
-
- BEGIN_JNI_EXCEPTION
-
- // Local object references.
- ArrayObject* array = *(ArrayObject**)_array;
+ ArrayObject* array = 0;
JavaObject* res = 0;
llvm_gcroot(array, 0);
llvm_gcroot(res, 0);
+ BEGIN_JNI_EXCEPTION
+
+ // Local object references.
+ array = *(ArrayObject**)_array;
JavaThread* th = JavaThread::get();
Jnjvm* vm = th->getJVM();
@@ -3013,14 +3148,16 @@ jobject GetObjectArrayElement(JNIEnv *en
void SetObjectArrayElement(JNIEnv *env, jobjectArray _array, jsize index,
jobject _val) {
-
+ ArrayObject* array = 0;
+ JavaObject* val = 0;
+ llvm_gcroot(array, 0);
+ llvm_gcroot(val, 0);
+
BEGIN_JNI_EXCEPTION
// Local object references.
- ArrayObject* array = *(ArrayObject**)_array;
- JavaObject* val = *(JavaObject**)_val;
- llvm_gcroot(array, 0);
- llvm_gcroot(val, 0);
+ array = *(ArrayObject**)_array;
+ val = *(JavaObject**)_val;
if (index >= ArrayObject::getSize(array)) {
JavaThread::get()->getJVM()->indexOutOfBounds(array, index);
@@ -3038,12 +3175,11 @@ void SetObjectArrayElement(JNIEnv *env,
jbooleanArray NewBooleanArray(JNIEnv *env, jsize len) {
-
- BEGIN_JNI_EXCEPTION
-
JavaObject* res = NULL;
llvm_gcroot(res, 0);
+ BEGIN_JNI_EXCEPTION
+
JavaThread* th = JavaThread::get();
Jnjvm* vm = th->getJVM();
res = vm->upcalls->ArrayOfBool->doNew(len, vm);
@@ -3057,12 +3193,11 @@ jbooleanArray NewBooleanArray(JNIEnv *en
jbyteArray NewByteArray(JNIEnv *env, jsize len) {
-
- BEGIN_JNI_EXCEPTION
-
JavaObject* res = NULL;
llvm_gcroot(res, 0);
+ BEGIN_JNI_EXCEPTION
+
JavaThread* th = JavaThread::get();
Jnjvm* vm = th->getJVM();
res = vm->upcalls->ArrayOfByte->doNew(len, vm);
@@ -3075,12 +3210,11 @@ jbyteArray NewByteArray(JNIEnv *env, jsi
jcharArray NewCharArray(JNIEnv *env, jsize len) {
-
- BEGIN_JNI_EXCEPTION
-
JavaObject* res = NULL;
llvm_gcroot(res, 0);
+ BEGIN_JNI_EXCEPTION
+
JavaThread* th = JavaThread::get();
Jnjvm* vm = th->getJVM();
res = vm->upcalls->ArrayOfChar->doNew(len, vm);
@@ -3093,12 +3227,11 @@ jcharArray NewCharArray(JNIEnv *env, jsi
jshortArray NewShortArray(JNIEnv *env, jsize len) {
-
- BEGIN_JNI_EXCEPTION
-
JavaObject* res = NULL;
llvm_gcroot(res, 0);
+ BEGIN_JNI_EXCEPTION
+
JavaThread* th = JavaThread::get();
Jnjvm* vm = th->getJVM();
res = vm->upcalls->ArrayOfShort->doNew(len, vm);
@@ -3111,12 +3244,11 @@ jshortArray NewShortArray(JNIEnv *env, j
jintArray NewIntArray(JNIEnv *env, jsize len) {
-
- BEGIN_JNI_EXCEPTION
-
JavaObject* res = NULL;
llvm_gcroot(res, 0);
+ BEGIN_JNI_EXCEPTION
+
JavaThread* th = JavaThread::get();
Jnjvm* vm = th->getJVM();
res = vm->upcalls->ArrayOfInt->doNew(len, vm);
@@ -3129,12 +3261,11 @@ jintArray NewIntArray(JNIEnv *env, jsize
jlongArray NewLongArray(JNIEnv *env, jsize len) {
-
- BEGIN_JNI_EXCEPTION
-
JavaObject* res = NULL;
llvm_gcroot(res, 0);
+ BEGIN_JNI_EXCEPTION
+
JavaThread* th = JavaThread::get();
Jnjvm* vm = th->getJVM();
res = vm->upcalls->ArrayOfLong->doNew(len, vm);
@@ -3147,12 +3278,11 @@ jlongArray NewLongArray(JNIEnv *env, jsi
jfloatArray NewFloatArray(JNIEnv *env, jsize len) {
-
- BEGIN_JNI_EXCEPTION
-
JavaObject* res = NULL;
llvm_gcroot(res, 0);
+ BEGIN_JNI_EXCEPTION
+
JavaThread* th = JavaThread::get();
Jnjvm* vm = th->getJVM();
res = vm->upcalls->ArrayOfFloat->doNew(len, vm);
@@ -3165,12 +3295,11 @@ jfloatArray NewFloatArray(JNIEnv *env, j
jdoubleArray NewDoubleArray(JNIEnv *env, jsize len) {
-
- BEGIN_JNI_EXCEPTION
-
JavaObject* res = NULL;
llvm_gcroot(res, 0);
+ BEGIN_JNI_EXCEPTION
+
JavaThread* th = JavaThread::get();
Jnjvm* vm = th->getJVM();
res = vm->upcalls->ArrayOfDouble->doNew(len, vm);
@@ -3184,12 +3313,13 @@ jdoubleArray NewDoubleArray(JNIEnv *env,
jboolean* GetBooleanArrayElements(JNIEnv *env, jbooleanArray _array,
jboolean *isCopy) {
+ ArrayUInt8* array = 0;
+ llvm_gcroot(array, 0);
BEGIN_JNI_EXCEPTION
// Local object references.
- ArrayUInt8* array = *(ArrayUInt8**)_array;
- llvm_gcroot(array, 0);
+ array = *(ArrayUInt8**)_array;
if (isCopy) (*isCopy) = true;
@@ -3205,12 +3335,13 @@ jboolean* GetBooleanArrayElements(JNIEnv
jbyte *GetByteArrayElements(JNIEnv *env, jbyteArray _array, jboolean *isCopy) {
+ ArraySInt8* array = 0;
+ llvm_gcroot(array, 0);
BEGIN_JNI_EXCEPTION
// Local object references.
- ArraySInt8* array = *(ArraySInt8**)_array;
- llvm_gcroot(array, 0);
+ array = *(ArraySInt8**)_array;
if (isCopy) (*isCopy) = true;
@@ -3226,12 +3357,13 @@ jbyte *GetByteArrayElements(JNIEnv *env,
jchar *GetCharArrayElements(JNIEnv *env, jcharArray _array, jboolean *isCopy) {
+ ArrayUInt16* array = 0;
+ llvm_gcroot(array, 0);
BEGIN_JNI_EXCEPTION
// Local object references.
- ArrayUInt16* array = *(ArrayUInt16**)_array;
- llvm_gcroot(array, 0);
+ array = *(ArrayUInt16**)_array;
if (isCopy) (*isCopy) = true;
@@ -3248,12 +3380,13 @@ jchar *GetCharArrayElements(JNIEnv *env,
jshort *GetShortArrayElements(JNIEnv *env, jshortArray _array,
jboolean *isCopy) {
+ ArraySInt16* array = 0;
+ llvm_gcroot(array, 0);
BEGIN_JNI_EXCEPTION
// Local object references.
- ArraySInt16* array = *(ArraySInt16**)_array;
- llvm_gcroot(array, 0);
+ array = *(ArraySInt16**)_array;
if (isCopy) (*isCopy) = true;
@@ -3269,12 +3402,13 @@ jshort *GetShortArrayElements(JNIEnv *en
jint *GetIntArrayElements(JNIEnv *env, jintArray _array, jboolean *isCopy) {
+ ArraySInt32* array = 0;
+ llvm_gcroot(array, 0);
BEGIN_JNI_EXCEPTION
// Local object references.
- ArraySInt32* array = *(ArraySInt32**)_array;
- llvm_gcroot(array, 0);
+ array = *(ArraySInt32**)_array;
if (isCopy) (*isCopy) = true;
@@ -3290,12 +3424,13 @@ jint *GetIntArrayElements(JNIEnv *env, j
jlong *GetLongArrayElements(JNIEnv *env, jlongArray _array, jboolean *isCopy) {
+ ArrayLong* array = 0;
+ llvm_gcroot(array, 0);
BEGIN_JNI_EXCEPTION
// Local object references.
- ArrayLong* array = *(ArrayLong**)_array;
- llvm_gcroot(array, 0);
+ array = *(ArrayLong**)_array;
if (isCopy) (*isCopy) = true;
@@ -3312,12 +3447,13 @@ jlong *GetLongArrayElements(JNIEnv *env,
jfloat *GetFloatArrayElements(JNIEnv *env, jfloatArray _array,
jboolean *isCopy) {
+ ArrayFloat* array = 0;
+ llvm_gcroot(array, 0);
BEGIN_JNI_EXCEPTION
// Local object references.
- ArrayFloat* array = *(ArrayFloat**)_array;
- llvm_gcroot(array, 0);
+ array = *(ArrayFloat**)_array;
if (isCopy) (*isCopy) = true;
@@ -3334,12 +3470,13 @@ jfloat *GetFloatArrayElements(JNIEnv *en
jdouble *GetDoubleArrayElements(JNIEnv *env, jdoubleArray _array,
jboolean *isCopy) {
+ ArrayDouble* array = 0;
+ llvm_gcroot(array, 0);
BEGIN_JNI_EXCEPTION
// Local object references.
- ArrayDouble* array = *(ArrayDouble**)_array;
- llvm_gcroot(array, 0);
+ array = *(ArrayDouble**)_array;
if (isCopy) (*isCopy) = true;
@@ -3356,11 +3493,12 @@ jdouble *GetDoubleArrayElements(JNIEnv *
void ReleaseBooleanArrayElements(JNIEnv *env, jbooleanArray _array,
jboolean *elems, jint mode) {
+ ArrayUInt8* array = 0;
+ llvm_gcroot(array, 0);
BEGIN_JNI_EXCEPTION
- ArrayUInt8* array = *(ArrayUInt8**)_array;
- llvm_gcroot(array, 0);
+ array = *(ArrayUInt8**)_array;
if (mode == JNI_ABORT) {
free(elems);
@@ -3379,11 +3517,12 @@ void ReleaseBooleanArrayElements(JNIEnv
void ReleaseByteArrayElements(JNIEnv *env, jbyteArray _array, jbyte *elems,
jint mode) {
+ ArraySInt16* array = 0;
+ llvm_gcroot(array, 0);
BEGIN_JNI_EXCEPTION
- ArraySInt16* array = *(ArraySInt16**)_array;
- llvm_gcroot(array, 0);
+ array = *(ArraySInt16**)_array;
if (mode == JNI_ABORT) {
free(elems);
@@ -3402,11 +3541,12 @@ void ReleaseByteArrayElements(JNIEnv *en
void ReleaseCharArrayElements(JNIEnv *env, jcharArray _array, jchar *elems,
jint mode) {
+ ArrayUInt16* array = 0;
+ llvm_gcroot(array, 0);
BEGIN_JNI_EXCEPTION
- ArrayUInt16* array = *(ArrayUInt16**)_array;
- llvm_gcroot(array, 0);
+ array = *(ArrayUInt16**)_array;
if (mode == JNI_ABORT) {
free(elems);
@@ -3425,11 +3565,12 @@ void ReleaseCharArrayElements(JNIEnv *en
void ReleaseShortArrayElements(JNIEnv *env, jshortArray _array, jshort *elems,
jint mode) {
+ ArraySInt16* array = 0;
+ llvm_gcroot(array, 0);
BEGIN_JNI_EXCEPTION
- ArraySInt16* array = *(ArraySInt16**)_array;
- llvm_gcroot(array, 0);
+ array = *(ArraySInt16**)_array;
if (mode == JNI_ABORT) {
free(elems);
@@ -3448,11 +3589,12 @@ void ReleaseShortArrayElements(JNIEnv *e
void ReleaseIntArrayElements(JNIEnv *env, jintArray _array, jint *elems,
jint mode) {
+ ArraySInt32* array = 0;
+ llvm_gcroot(array, 0);
BEGIN_JNI_EXCEPTION
- ArraySInt32* array = *(ArraySInt32**)_array;
- llvm_gcroot(array, 0);
+ array = *(ArraySInt32**)_array;
if (mode == JNI_ABORT) {
free(elems);
@@ -3471,11 +3613,12 @@ void ReleaseIntArrayElements(JNIEnv *env
void ReleaseLongArrayElements(JNIEnv *env, jlongArray _array, jlong *elems,
jint mode) {
+ ArrayLong* array = 0;
+ llvm_gcroot(array, 0);
BEGIN_JNI_EXCEPTION
- ArrayLong* array = *(ArrayLong**)_array;
- llvm_gcroot(array, 0);
+ array = *(ArrayLong**)_array;
if (mode == JNI_ABORT) {
free(elems);
@@ -3494,10 +3637,12 @@ void ReleaseLongArrayElements(JNIEnv *en
void ReleaseFloatArrayElements(JNIEnv *env, jfloatArray _array, jfloat *elems,
jint mode) {
+ ArrayFloat* array = 0;
+ llvm_gcroot(array, 0);
+
BEGIN_JNI_EXCEPTION
- ArrayFloat* array = *(ArrayFloat**)_array;
- llvm_gcroot(array, 0);
+ array = *(ArrayFloat**)_array;
if (mode == JNI_ABORT) {
free(elems);
@@ -3516,11 +3661,12 @@ void ReleaseFloatArrayElements(JNIEnv *e
void ReleaseDoubleArrayElements(JNIEnv *env, jdoubleArray _array,
jdouble *elems, jint mode) {
+ ArrayDouble* array = 0;
+ llvm_gcroot(array, 0);
BEGIN_JNI_EXCEPTION
- ArrayDouble* array = *(ArrayDouble**)_array;
- llvm_gcroot(array, 0);
+ array = *(ArrayDouble**)_array;
if (mode == JNI_ABORT) {
free(elems);
@@ -3539,10 +3685,12 @@ void ReleaseDoubleArrayElements(JNIEnv *
void GetBooleanArrayRegion(JNIEnv *env, jbooleanArray array, jsize start,
jsize len, jboolean *buf) {
+ ArrayUInt8* Array = 0;
+ llvm_gcroot(Array, 0);
+
BEGIN_JNI_EXCEPTION
- ArrayUInt8* Array = *(ArrayUInt8**)array;
- llvm_gcroot(Array, 0);
+ Array = *(ArrayUInt8**)array;
memcpy(buf, ArrayUInt8::getElements(Array) + start, len * sizeof(uint8));
END_JNI_EXCEPTION
@@ -3553,11 +3701,12 @@ void GetBooleanArrayRegion(JNIEnv *env,
void GetByteArrayRegion(JNIEnv *env, jbyteArray array, jsize start, jsize len,
jbyte *buf) {
+ ArraySInt8* Array = 0;
+ llvm_gcroot(Array, 0);
BEGIN_JNI_EXCEPTION
- ArraySInt8* Array = *(ArraySInt8**)array;
- llvm_gcroot(Array, 0);
+ Array = *(ArraySInt8**)array;
memcpy(buf, ArraySInt8::getElements(Array) + start, len * sizeof(uint8));
END_JNI_EXCEPTION
@@ -3568,11 +3717,12 @@ void GetByteArrayRegion(JNIEnv *env, jby
void GetCharArrayRegion(JNIEnv *env, jcharArray array, jsize start, jsize len,
jchar *buf) {
+ ArrayUInt16* Array = 0;
+ llvm_gcroot(Array, 0);
BEGIN_JNI_EXCEPTION
- ArrayUInt16* Array = *(ArrayUInt16**)array;
- llvm_gcroot(Array, 0);
+ Array = *(ArrayUInt16**)array;
memcpy(buf, ArrayUInt16::getElements(Array) + start, len * sizeof(uint16));
END_JNI_EXCEPTION
@@ -3583,11 +3733,12 @@ void GetCharArrayRegion(JNIEnv *env, jch
void GetShortArrayRegion(JNIEnv *env, jshortArray array, jsize start,
jsize len, jshort *buf) {
+ ArraySInt16* Array = 0;
+ llvm_gcroot(Array, 0);
BEGIN_JNI_EXCEPTION
- ArraySInt16* Array = *(ArraySInt16**)array;
- llvm_gcroot(Array, 0);
+ Array = *(ArraySInt16**)array;
memcpy(buf, ArraySInt16::getElements(Array) + start, len * sizeof(sint16));
END_JNI_EXCEPTION
@@ -3598,11 +3749,12 @@ void GetShortArrayRegion(JNIEnv *env, js
void GetIntArrayRegion(JNIEnv *env, jintArray array, jsize start, jsize len,
jint *buf) {
+ ArraySInt32* Array = 0;
+ llvm_gcroot(Array, 0);
BEGIN_JNI_EXCEPTION
- ArraySInt32* Array = *(ArraySInt32**)array;
- llvm_gcroot(Array, 0);
+ Array = *(ArraySInt32**)array;
memcpy(buf, ArraySInt32::getElements(Array) + start, len * sizeof(sint32));
END_JNI_EXCEPTION
@@ -3613,11 +3765,12 @@ void GetIntArrayRegion(JNIEnv *env, jint
void GetLongArrayRegion(JNIEnv *env, jlongArray array, jsize start, jsize len,
jlong *buf) {
+ ArrayLong* Array = 0;
+ llvm_gcroot(Array, 0);
BEGIN_JNI_EXCEPTION
- ArrayLong* Array = *(ArrayLong**)array;
- llvm_gcroot(Array, 0);
+ Array = *(ArrayLong**)array;
memcpy(buf, ArrayLong::getElements(Array) + start, len * sizeof(sint64));
END_JNI_EXCEPTION
@@ -3628,11 +3781,12 @@ void GetLongArrayRegion(JNIEnv *env, jlo
void GetFloatArrayRegion(JNIEnv *env, jfloatArray array, jsize start,
jsize len, jfloat *buf) {
+ ArrayFloat* Array = 0;
+ llvm_gcroot(Array, 0);
BEGIN_JNI_EXCEPTION
- ArrayFloat* Array = *(ArrayFloat**)array;
- llvm_gcroot(Array, 0);
+ Array = *(ArrayFloat**)array;
memcpy(buf, ArrayFloat::getElements(Array) + start, len * sizeof(float));
END_JNI_EXCEPTION
@@ -3643,11 +3797,12 @@ void GetFloatArrayRegion(JNIEnv *env, jf
void GetDoubleArrayRegion(JNIEnv *env, jdoubleArray array, jsize start,
jsize len, jdouble *buf) {
+ ArrayDouble* Array = 0;
+ llvm_gcroot(Array, 0);
BEGIN_JNI_EXCEPTION
- ArrayDouble* Array = *(ArrayDouble**)array;
- llvm_gcroot(Array, 0);
+ Array = *(ArrayDouble**)array;
memcpy(buf, ArrayDouble::getElements(Array) + start, len * sizeof(double));
END_JNI_EXCEPTION
@@ -3658,11 +3813,12 @@ void GetDoubleArrayRegion(JNIEnv *env, j
void SetBooleanArrayRegion(JNIEnv *env, jbooleanArray array, jsize start,
jsize len, const jboolean *buf) {
+ ArrayUInt8* Array = 0;
+ llvm_gcroot(Array, 0);
BEGIN_JNI_EXCEPTION
- ArrayUInt8* Array = *(ArrayUInt8**)array;
- llvm_gcroot(Array, 0);
+ Array = *(ArrayUInt8**)array;
memcpy(ArrayUInt8::getElements(Array) + start, buf, len * sizeof(uint8));
END_JNI_EXCEPTION
@@ -3673,11 +3829,12 @@ void SetBooleanArrayRegion(JNIEnv *env,
void SetByteArrayRegion(JNIEnv *env, jbyteArray array, jsize start, jsize len,
const jbyte *buf) {
+ ArraySInt8* Array = 0;
+ llvm_gcroot(Array, 0);
BEGIN_JNI_EXCEPTION
- ArraySInt8* Array = *(ArraySInt8**)array;
- llvm_gcroot(Array, 0);
+ Array = *(ArraySInt8**)array;
memcpy(ArraySInt8::getElements(Array) + start, buf, len * sizeof(sint8));
END_JNI_EXCEPTION
@@ -3688,11 +3845,12 @@ void SetByteArrayRegion(JNIEnv *env, jby
void SetCharArrayRegion(JNIEnv *env, jcharArray array, jsize start, jsize len,
const jchar *buf) {
+ ArrayUInt16* Array = 0;
+ llvm_gcroot(Array, 0);
BEGIN_JNI_EXCEPTION
- ArrayUInt16* Array = *(ArrayUInt16**)array;
- llvm_gcroot(Array, 0);
+ Array = *(ArrayUInt16**)array;
memcpy(ArrayUInt16::getElements(Array) + start, buf, len * sizeof(uint16));
END_JNI_EXCEPTION
@@ -3703,11 +3861,12 @@ void SetCharArrayRegion(JNIEnv *env, jch
void SetShortArrayRegion(JNIEnv *env, jshortArray array, jsize start,
jsize len, const jshort *buf) {
+ ArraySInt16* Array = 0;
+ llvm_gcroot(Array, 0);
BEGIN_JNI_EXCEPTION
- ArraySInt16* Array = *(ArraySInt16**)array;
- llvm_gcroot(Array, 0);
+ Array = *(ArraySInt16**)array;
memcpy(ArraySInt16::getElements(Array) + start, buf, len * sizeof(sint16));
END_JNI_EXCEPTION
@@ -3718,11 +3877,12 @@ void SetShortArrayRegion(JNIEnv *env, js
void SetIntArrayRegion(JNIEnv *env, jintArray array, jsize start, jsize len,
const jint *buf) {
+ ArraySInt32* Array = 0;
+ llvm_gcroot(Array, 0);
BEGIN_JNI_EXCEPTION
- ArraySInt32* Array = *(ArraySInt32**)array;
- llvm_gcroot(Array, 0);
+ Array = *(ArraySInt32**)array;
memcpy(ArraySInt32::getElements(Array) + start, buf, len * sizeof(sint32));
END_JNI_EXCEPTION
@@ -3733,11 +3893,12 @@ void SetIntArrayRegion(JNIEnv *env, jint
void SetLongArrayRegion(JNIEnv* env, jlongArray array, jsize start, jsize len,
const jlong *buf) {
+ ArrayLong* Array = 0;
+ llvm_gcroot(Array, 0);
BEGIN_JNI_EXCEPTION
- ArrayLong* Array = *(ArrayLong**)array;
- llvm_gcroot(Array, 0);
+ Array = *(ArrayLong**)array;
memcpy(ArrayLong::getElements(Array) + start, buf, len * sizeof(sint64));
END_JNI_EXCEPTION
@@ -3748,11 +3909,12 @@ void SetLongArrayRegion(JNIEnv* env, jlo
void SetFloatArrayRegion(JNIEnv *env, jfloatArray array, jsize start,
jsize len, const jfloat *buf) {
+ ArrayFloat* Array = 0;
+ llvm_gcroot(Array, 0);
BEGIN_JNI_EXCEPTION
- ArrayFloat* Array = *(ArrayFloat**)array;
- llvm_gcroot(Array, 0);
+ Array = *(ArrayFloat**)array;
memcpy(ArrayFloat::getElements(Array) + start, buf, len * sizeof(float));
END_JNI_EXCEPTION
@@ -3763,11 +3925,12 @@ void SetFloatArrayRegion(JNIEnv *env, jf
void SetDoubleArrayRegion(JNIEnv *env, jdoubleArray array, jsize start,
jsize len, const jdouble *buf) {
+ ArrayDouble* Array = 0;
+ llvm_gcroot(Array, 0);
BEGIN_JNI_EXCEPTION
- ArrayDouble* Array = *(ArrayDouble**)array;
- llvm_gcroot(Array, 0);
+ Array = *(ArrayDouble**)array;
memcpy(ArrayDouble::getElements(Array) + start, buf, len * sizeof(double));
END_JNI_EXCEPTION
@@ -3778,10 +3941,11 @@ void SetDoubleArrayRegion(JNIEnv *env, j
jint RegisterNatives(JNIEnv *env, jclass _clazz, const JNINativeMethod *methods,
jint nMethods) {
- BEGIN_JNI_EXCEPTION
-
JavaObject * clazz = 0;
llvm_gcroot(clazz, 0);
+
+ BEGIN_JNI_EXCEPTION
+
clazz = *(JavaObject**)_clazz;
Jnjvm* vm = JavaThread::get()->getJVM();
@@ -3822,11 +3986,12 @@ jint UnregisterNatives(JNIEnv *env, jcla
}
jint MonitorEnter(JNIEnv *env, jobject _obj) {
+ JavaObject* Obj = 0;
+ llvm_gcroot(Obj, 0);
BEGIN_JNI_EXCEPTION
- JavaObject* Obj = *(JavaObject**)_obj;
- llvm_gcroot(Obj, 0);
+ Obj = *(JavaObject**)_obj;
if (Obj != NULL) {
JavaObject::acquire(Obj);
@@ -3842,11 +4007,12 @@ jint MonitorEnter(JNIEnv *env, jobject _
jint MonitorExit(JNIEnv *env, jobject _obj) {
+ JavaObject* Obj = 0;
+ llvm_gcroot(Obj, 0);
BEGIN_JNI_EXCEPTION
- JavaObject* Obj = *(JavaObject**)_obj;
- llvm_gcroot(Obj, 0);
+ Obj = *(JavaObject**)_obj;
if (Obj != NULL) {
@@ -3878,10 +4044,12 @@ jint GetJavaVM(JNIEnv *env, JavaVM **vm)
void GetStringRegion(JNIEnv* env, jstring str, jsize start, jsize len,
jchar *buf) {
+ JavaString * s = 0;
+ llvm_gcroot(s, 0);
+
BEGIN_JNI_EXCEPTION
- JavaString * s = *(JavaString**)str;
- llvm_gcroot(s, 0);
+ s = *(JavaString**)str;
UserClass * cl = JavaObject::getClass(s)->asClass();
const UTF8 * utf = JavaString::javaToInternal(s, cl->classLoader->hashUTF8);
@@ -3906,10 +4074,12 @@ void GetStringRegion(JNIEnv* env, jstrin
void GetStringUTFRegion(JNIEnv* env, jstring str, jsize start, jsize len,
char *buf) {
+ JavaString * s = 0;
+ llvm_gcroot(s, 0);
+
BEGIN_JNI_EXCEPTION
- JavaString * s = *(JavaString**)str;
- llvm_gcroot(s, 0);
+ s = *(JavaString**)str;
int end = start+len;
if (end > s->count) {
@@ -3927,10 +4097,12 @@ void GetStringUTFRegion(JNIEnv* env, jst
void *GetPrimitiveArrayCritical(JNIEnv *env, jarray _array, jboolean *isCopy) {
+ JavaObject* array = 0;
+ llvm_gcroot(array, 0);
+
BEGIN_JNI_EXCEPTION
- JavaObject* array = *(JavaObject**)_array;
- llvm_gcroot(array, 0);
+ array = *(JavaObject**)_array;
if (isCopy) (*isCopy) = true;
@@ -3949,11 +4121,12 @@ void *GetPrimitiveArrayCritical(JNIEnv *
void ReleasePrimitiveArrayCritical(JNIEnv *env, jarray _array, void *carray,
jint mode) {
-
+ JavaObject* array = 0;
+ llvm_gcroot(array, 0);
+
BEGIN_JNI_EXCEPTION
- JavaObject* array = *(JavaObject**)_array;
- llvm_gcroot(array, 0);
+ array = *(JavaObject**)_array;
if (mode == JNI_ABORT) {
free(carray);
@@ -3999,16 +4172,14 @@ void DeleteWeakGlobalRef(JNIEnv* env, jw
jobject NewGlobalRef(JNIEnv* env, jobject obj) {
-
- BEGIN_JNI_EXCEPTION
-
JavaObject* Obj = NULL;
llvm_gcroot(Obj, 0);
+ BEGIN_JNI_EXCEPTION
+
// Local object references.
if (obj) {
Obj = *(JavaObject**)obj;
- llvm_gcroot(Obj, 0);
Jnjvm* vm = JavaThread::get()->getJVM();
@@ -4094,12 +4265,13 @@ jint DetachCurrentThread(JavaVM *vm) {
jint GetEnv(JavaVM *vm, void **env, jint version) {
+ JavaObject* obj = 0;
+ llvm_gcroot(obj, 0);
BEGIN_JNI_EXCEPTION
JavaThread* _th = JavaThread::get();
- JavaObject* obj = _th->currentThread();
- llvm_gcroot(obj, 0);
+ obj = _th->currentThread();
Jnjvm* myvm = _th->getJVM();
if (obj != 0) {
Modified: vmkit/trunk/lib/j3/VMCore/JniClasspath.inc
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JniClasspath.inc?rev=180391&r1=180390&r2=180391&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/JniClasspath.inc (original)
+++ vmkit/trunk/lib/j3/VMCore/JniClasspath.inc Thu Apr 25 12:05:01 2013
@@ -1,13 +1,14 @@
// GNUClasspath-specific JNI implementation
jobject NewDirectByteBuffer(JNIEnv *env, void *address, jlong capacity) {
-
- BEGIN_JNI_EXCEPTION
-
JavaObject* res = 0;
JavaObject* p = 0;
+ jobject ret = 0;
llvm_gcroot(res, 0);
llvm_gcroot(p, 0);
+ llvm_gcroot(ret, 0);
+
+ BEGIN_JNI_EXCEPTION
JavaThread* th = JavaThread::get();
Jnjvm* myvm = th->getJVM();
@@ -29,7 +30,7 @@ jobject NewDirectByteBuffer(JNIEnv *env,
(uint32)capacity,
(uint32)capacity, 0);
- jobject ret = (jobject)th->pushJNIRef(res);
+ ret = (jobject)th->pushJNIRef(res);
RETURN_FROM_JNI(ret);
END_JNI_EXCEPTION
@@ -38,14 +39,15 @@ jobject NewDirectByteBuffer(JNIEnv *env,
void *GetDirectBufferAddress(JNIEnv *env, jobject _buf) {
+ JavaObject* buf = 0;
+ JavaObject* address = 0;
+ llvm_gcroot(buf, 0);
+ llvm_gcroot(address, 0);
BEGIN_JNI_EXCEPTION
// Local object references.
- JavaObject* buf = *(JavaObject**)_buf;
- JavaObject* address = 0;
- llvm_gcroot(buf, 0);
- llvm_gcroot(address, 0);
+ buf = *(JavaObject**)_buf;
Jnjvm* vm = myVM(env);
address = vm->upcalls->bufferAddress->getInstanceObjectField(buf);
Modified: vmkit/trunk/lib/j3/VMCore/JniOpenJDK.inc
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JniOpenJDK.inc?rev=180391&r1=180390&r2=180391&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/JniOpenJDK.inc (original)
+++ vmkit/trunk/lib/j3/VMCore/JniOpenJDK.inc Thu Apr 25 12:05:01 2013
@@ -1,11 +1,11 @@
// OpenJDK-specific JNI implementation
jobject NewDirectByteBuffer(JNIEnv *env, void *address, jlong capacity) {
- BEGIN_JNI_EXCEPTION
-
JavaObject* res = 0;
llvm_gcroot(res, 0);
+ BEGIN_JNI_EXCEPTION
+
JavaThread* th = JavaThread::get();
Jnjvm* myvm = th->getJVM();
UserClass* BB = myvm->upcalls->newDirectByteBuffer;
@@ -23,11 +23,13 @@ jobject NewDirectByteBuffer(JNIEnv *env,
}
void *GetDirectBufferAddress(JNIEnv *env, jobject _buf) {
+ JavaObject* buf = 0;
+ llvm_gcroot(buf, 0);
+
BEGIN_JNI_EXCEPTION
// Local object references.
- JavaObject* buf = *(JavaObject**)_buf;
- llvm_gcroot(buf, 0);
+ buf = *(JavaObject**)_buf;
jlong address;
Jnjvm* vm = myVM(env);
Modified: vmkit/trunk/lib/j3/VMCore/Jnjvm.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/Jnjvm.cpp?rev=180391&r1=180390&r2=180391&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/Jnjvm.cpp (original)
+++ vmkit/trunk/lib/j3/VMCore/Jnjvm.cpp Thu Apr 25 12:05:01 2013
@@ -355,10 +355,10 @@ JavaObject* Jnjvm::CreateOutOfMemoryErro
JavaObject* Jnjvm::CreateStackOverflowError() {
// Don't call init, or else we'll get a new stack overflow error.
- JavaObject* obj = NULL;
+ JavaObjectThrowable* obj = NULL;
llvm_gcroot(obj, 0);
- obj = upcalls->StackOverflowError->doNew(this);
- JavaObjectThrowable::fillInStackTrace((JavaObjectThrowable*)obj);
+ obj = (JavaObjectThrowable*)upcalls->StackOverflowError->doNew(this);
+ JavaObjectThrowable::fillInStackTrace(obj);
return obj;
}
@@ -1282,7 +1282,8 @@ void Jnjvm::mainJavaStart(JavaThread* th
UserClassArray* array = vm->bootstrapLoader->upcalls->ArrayOfString;
args = (ArrayObject*)array->doNew(info.argc - 2, vm);
for (int i = 2; i < info.argc; ++i) {
- ArrayObject::setElement(args, (JavaObject*)vm->asciizToStr(info.argv[i]), i - 2);
+ str = vm->asciizToStr(info.argv[i]);
+ ArrayObject::setElement(args, str, i - 2);
}
vm->executeClass(info.className, args);
@@ -1399,7 +1400,7 @@ void Jnjvm::setType(gc* header, void* ty
JavaObject* src = 0;
llvm_gcroot(src, 0);
llvm_gcroot(header, 0);
- src = (JavaObject*) header;
+ src = (JavaObject*)header;
src->setVirtualTable((JavaVirtualTable*)type);
}
@@ -1407,14 +1408,16 @@ void* Jnjvm::getType(gc* header) {
JavaObject* src = 0;
llvm_gcroot(src, 0);
llvm_gcroot(header, 0);
- src = (JavaObject*) header;
+ src = (JavaObject*)header;
return src->getVirtualTable();
}
// This method is called during GC so no llvm_gcroot needed.
void Jnjvm::traceObject(gc* _obj, word_t closure) {
- JavaObject* obj = 0;
- obj = (JavaObject*)_obj;
+ JavaObject* obj = 0;
+ llvm_gcroot(obj, 0);
+ llvm_gcroot(_obj, 0);
+ obj = (JavaObject*)_obj;
assert(obj && "No object to trace");
assert(obj->getVirtualTable() && "No virtual table");
assert(obj->getVirtualTable()->tracer && "No tracer in VT");
@@ -1423,7 +1426,11 @@ void Jnjvm::traceObject(gc* _obj, word_t
// This method is called during GC so no llvm_gcroot needed.
bool Jnjvm::isCorruptedType(gc* obj) {
- return ((JavaObject*)obj)->getVirtualTable();
+ JavaObject* _obj = 0;
+ llvm_gcroot(_obj, 0);
+ llvm_gcroot(obj, 0);
+ _obj = (JavaObject*)obj;
+ return _obj->getVirtualTable();
}
size_t Jnjvm::getObjectSize(gc* object) {
@@ -1431,7 +1438,10 @@ size_t Jnjvm::getObjectSize(gc* object)
// llvm_gcroot. For clarity, it may be useful to have a special type
// in this case.
size_t size = 0;
- JavaObject* src = (JavaObject*)object;
+ JavaObject* src = 0;
+ llvm_gcroot(object, 0);
+ llvm_gcroot(src, 0);
+ src = (JavaObject*)object;
if (VMClassLoader::isVMClassLoader(src)) {
size = sizeof(VMClassLoader);
} else if (VMStaticInstance::isVMStaticInstance(src)) {
@@ -1455,7 +1465,10 @@ size_t Jnjvm::getObjectSize(gc* object)
}
const char* Jnjvm::getObjectTypeName(gc* object) {
- JavaObject* src = (JavaObject*)object;
+ JavaObject* src = 0;
+ llvm_gcroot(object, 0);
+ llvm_gcroot(src, 0);
+ src = (JavaObject*)object;
if (VMClassLoader::isVMClassLoader(src)) {
return "VMClassLoader";
} else if (VMStaticInstance::isVMStaticInstance(src)) {
Modified: vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.cpp?rev=180391&r1=180390&r2=180391&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.cpp (original)
+++ vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.cpp Thu Apr 25 12:05:01 2013
@@ -337,9 +337,11 @@ UserClass* JnjvmBootstrapLoader::interna
UserCommonClass* JnjvmClassLoader::internalLoadCreateClass(const UTF8* name, JavaString* strName)
{
+ JavaObjectClass* jcl = 0;
JavaObject* obj = 0;
llvm_gcroot(strName, 0);
llvm_gcroot(obj, 0);
+ llvm_gcroot(jcl, 0);
UserClass* forCtp = loadClass;
if (strName == NULL) {
@@ -347,7 +349,7 @@ UserCommonClass* JnjvmClassLoader::inter
}
obj = loadClassMethod->invokeJavaObjectVirtual(vm, forCtp, javaLoader, &strName);
- return JavaObjectClass::getClass(((JavaObjectClass*)obj));
+ return JavaObjectClass::getClass(jcl = (JavaObjectClass*)obj);
}
UserClass* JnjvmClassLoader::internalLoad(const UTF8* name, bool doResolve,
Modified: vmkit/trunk/lib/j3/VMCore/JnjvmStaleRef.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JnjvmStaleRef.cpp?rev=180391&r1=180390&r2=180391&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/JnjvmStaleRef.cpp (original)
+++ vmkit/trunk/lib/j3/VMCore/JnjvmStaleRef.cpp Thu Apr 25 12:05:01 2013
@@ -27,9 +27,15 @@ void Jnjvm::resetReferencesToBundle(int6
void Jnjvm::resetReferenceIfStale(const void* source, void** ref)
{
+ JavaObject *src = NULL;
+ llvm_gcroot(src, 0);
+
if (!ref || !(*ref)) return; // Invalid or null reference
- const JavaObject* src = reinterpret_cast<const JavaObject*>(source);
- JavaObject** objRef = reinterpret_cast<JavaObject**>(ref);
+
+ src = const_cast<JavaObject*>(reinterpret_cast<const JavaObject*>(source));
+ JavaObject **objRef = reinterpret_cast<JavaObject**>(ref);
+
+ return;
// Check the type of Java object. Some Java objects are not real object, but
// are bridges between Java and the VM objects.
@@ -43,6 +49,8 @@ void Jnjvm::resetReferenceIfStale(const
void Jnjvm::resetReferenceIfStale(const JavaObject *source, VMClassLoader** ref)
{
+ llvm_gcroot(source, 0);
+
// Don't touch fake Java objects that exist only as bridges between the
// Java object model and the C++ object model.
@@ -60,6 +68,8 @@ void Jnjvm::resetReferenceIfStale(const
void Jnjvm::resetReferenceIfStale(const JavaObject *source, VMStaticInstance** ref)
{
+ llvm_gcroot(source, 0);
+
// Don't touch fake Java objects that exist only as bridges between the
// Java object model and the C++ object model.
@@ -77,6 +87,8 @@ void Jnjvm::resetReferenceIfStale(const
void Jnjvm::resetReferenceIfStale(const JavaObject *source, JavaObject** ref)
{
+ llvm_gcroot(source, 0);
+
#if DEBUG_VERBOSE_STALE_REF
if (source) {
Modified: vmkit/trunk/lib/j3/VMCore/VirtualTables.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/VirtualTables.cpp?rev=180391&r1=180390&r2=180391&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/VirtualTables.cpp (original)
+++ vmkit/trunk/lib/j3/VMCore/VirtualTables.cpp Thu Apr 25 12:05:01 2013
@@ -80,10 +80,12 @@ VirtualTable VMStaticInstance::VT((word_
/// Scanning java.lang.Object and primitive arrays.
extern "C" void JavaObjectTracer(JavaObject* obj, word_t closure) {
+ llvm_gcroot(obj, 0);
}
/// Method for scanning regular objects.
extern "C" void RegularObjectTracer(JavaObject* obj, word_t closure) {
+ llvm_gcroot(obj, 0);
Class* cl = JavaObject::getClass(obj)->asClass();
assert(cl && "Not a class in regular tracer");
vmkit::Collector::markAndTraceRoot(obj,
@@ -104,6 +106,9 @@ extern "C" void RegularObjectTracer(Java
/// Method for scanning an array whose elements are JavaObjects. This method is
/// called for all non-native Java arrays.
extern "C" void ArrayObjectTracer(ArrayObject* obj, word_t closure) {
+ JavaObject* elt = 0;
+ llvm_gcroot(elt, 0);
+ llvm_gcroot(obj, 0);
CommonClass* cl = JavaObject::getClass(obj);
assert(cl && "No class");
vmkit::Collector::markAndTraceRoot(obj,
@@ -111,7 +116,8 @@ extern "C" void ArrayObjectTracer(ArrayO
for (sint32 i = 0; i < ArrayObject::getSize(obj); i++) {
- if (ArrayObject::getElement(obj, i) != NULL) {
+ elt = ArrayObject::getElement(obj, i);
+ if (elt != NULL) {
vmkit::Collector::markAndTrace(
obj, ArrayObject::getElements(obj) + i, closure);
}
@@ -121,6 +127,7 @@ extern "C" void ArrayObjectTracer(ArrayO
/// Method for scanning Java java.lang.ref.Reference objects.
extern "C" void ReferenceObjectTracer(
JavaObjectReference* obj, word_t closure) {
+ llvm_gcroot(obj, 0);
Class* cl = JavaObject::getClass(obj)->asClass();
assert(cl && "Not a class in reference tracer");
vmkit::Collector::markAndTraceRoot(obj,
Modified: vmkit/trunk/lib/vmkit/CommonThread/ObjectLocks.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/vmkit/CommonThread/ObjectLocks.cpp?rev=180391&r1=180390&r2=180391&view=diff
==============================================================================
--- vmkit/trunk/lib/vmkit/CommonThread/ObjectLocks.cpp (original)
+++ vmkit/trunk/lib/vmkit/CommonThread/ObjectLocks.cpp Thu Apr 25 12:05:01 2013
@@ -91,6 +91,8 @@ FatLock* ThinLock::changeToFatlock(gc* o
}
void printDebugMessage(gc* object, LockSystem& table) {
+ gc* assObj = NULL;
+ llvm_gcroot(assObj, 0);
llvm_gcroot(object, 0);
fprintf(stderr,
"WARNING: [%p] has been waiting really long for %p (header = %p)\n",
@@ -104,7 +106,7 @@ void printDebugMessage(gc* object, LockS
"Its associated object is %p. The owner is %p\n",
(void*)vmkit::Thread::get(),
(void*)obj,
- (void*)obj->getAssociatedObject(),
+ (void*)(assObj = obj->getAssociatedObject()),
(void*)obj->owner());
}
}
@@ -265,8 +267,8 @@ FatLock* ThinLock::getFatLock(gc* object
}
void FatLock::acquireAll(gc* object, word_t nb) {
- assert(associatedObject == object);
llvm_gcroot(object, 0);
+ assert(associatedObject == object);
internalLock.lockAll(nb);
}
Modified: vmkit/trunk/lib/vmkit/MMTk/VmkitGC.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/vmkit/MMTk/VmkitGC.cpp?rev=180391&r1=180390&r2=180391&view=diff
==============================================================================
--- vmkit/trunk/lib/vmkit/MMTk/VmkitGC.cpp (original)
+++ vmkit/trunk/lib/vmkit/MMTk/VmkitGC.cpp Thu Apr 25 12:05:01 2013
@@ -20,7 +20,8 @@ std::set<gc*> __InternalSet__;
int Collector::verbose = 0;
extern "C" void* prealloc(uint32_t sz) {
- gc* res = 0;
+ gc* res = 0;
+ llvm_gcroot(res, 0);
gcHeader* head = 0;
sz = llvm::RoundUpToAlignment(sz, sizeof(void*));
@@ -36,11 +37,13 @@ extern "C" void* prealloc(uint32_t sz) {
}
extern "C" void postalloc(gc* obj, void* type, uint32_t size) {
+ llvm_gcroot(obj, 0);
vmkit::Thread::get()->MyVM->setType(obj, type);
}
extern "C" void* vmkitgcmalloc(uint32_t sz, void* type) {
gc* res = 0;
+ llvm_gcroot(res, 0);
sz += gcHeader::hiddenHeaderSize();
res = (gc*) prealloc(sz);
postalloc(res, type, sz);
@@ -48,7 +51,9 @@ extern "C" void* vmkitgcmalloc(uint32_t
}
extern "C" void* vmkitgcmallocUnresolved(uint32_t sz, void* type) {
- gc* res = (gc*)vmkitgcmalloc(sz, type);
+ gc* res = NULL;
+ llvm_gcroot(res, 0);
+ res = (gc*)vmkitgcmalloc(sz, type);
vmkit::Thread::get()->MyVM->addFinalizationCandidate(res);
return res;
}
@@ -59,6 +64,7 @@ extern "C" void* vmkitgcmallocUnresolved
extern "C" void* VTgcmalloc(uint32_t sz, VirtualTable* VT) {
gc* res = 0;
+ llvm_gcroot(res, 0);
gcHeader* head = 0;
sz += gcHeader::hiddenHeaderSize();
sz = llvm::RoundUpToAlignment(sz, sizeof(void*));
@@ -75,7 +81,9 @@ extern "C" void* VTgcmalloc(uint32_t sz,
}
extern "C" void* VTgcmallocUnresolved(uint32_t sz, VirtualTable* VT) {
- gc* res = (gc*)VTgcmalloc(sz, VT);
+ gc* res = NULL;
+ llvm_gcroot(res, 0);
+ res = (gc*)VTgcmalloc(sz, VT);
if (VT->hasDestructor())
vmkit::Thread::get()->MyVM->addFinalizationCandidate(res);
return res;
@@ -85,21 +93,24 @@ extern "C" void* VTgcmallocUnresolved(ui
// Do not insert MagicArray ref to InternalSet of references.
extern "C" void* AllocateMagicArray(int32_t sz, void* length) {
+ gc* res = 0;
+ llvm_gcroot(res, 0);
gcHeader* head = 0;
- gc* res = 0;
sz += gcHeader::hiddenHeaderSize();
head = (gcHeader*)malloc(sz);
memset((void*)head, 0, sz);
res = head->toReference();
vmkit::Thread::get()->MyVM->setType(res, length);
- return res;
+ return res;
}
extern "C" void addFinalizationCandidate(gc* obj) {
+ llvm_gcroot(obj, 0);
vmkit::Thread::get()->MyVM->addFinalizationCandidate(obj);
}
void* Collector::begOf(gc* obj) {
+ llvm_gcroot(obj, 0);
lock.acquire();
std::set<gc*>::iterator I = __InternalSet__.find(obj);
std::set<gc*>::iterator E = __InternalSet__.end();
@@ -170,19 +181,29 @@ extern "C" void nonHeapWriteBarrier(void
void Collector::objectReferenceWriteBarrier(gc* ref, gc** slot, gc* value) {
+ llvm_gcroot(ref, 0);
+ llvm_gcroot(value, 0);
*slot = value;
}
void Collector::objectReferenceArrayWriteBarrier(gc* ref, gc** slot, gc* value) {
+ llvm_gcroot(ref, 0);
+ llvm_gcroot(value, 0);
*slot = value;
}
void Collector::objectReferenceNonHeapWriteBarrier(gc** slot, gc* value) {
+ llvm_gcroot(value, 0);
*slot = value;
}
bool Collector::objectReferenceTryCASBarrier(gc*ref, gc** slot, gc* old, gc* value) {
- gc* res = __sync_val_compare_and_swap(slot, old, value);
+ gc* res = NULL;
+ llvm_gcroot(res, 0);
+ llvm_gcroot(ref, 0);
+ llvm_gcroot(old, 0);
+ llvm_gcroot(value, 0);
+ res = __sync_val_compare_and_swap(slot, old, value);
return (old == res);
}
Modified: vmkit/trunk/lib/vmkit/MMTk/VmkitGC.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/vmkit/MMTk/VmkitGC.h?rev=180391&r1=180390&r2=180391&view=diff
==============================================================================
--- vmkit/trunk/lib/vmkit/MMTk/VmkitGC.h (original)
+++ vmkit/trunk/lib/vmkit/MMTk/VmkitGC.h Thu Apr 25 12:05:01 2013
@@ -147,12 +147,14 @@ class VirtualTable {
/// getVirtualTable - Returns the virtual table of this reference.
///
static const VirtualTable* getVirtualTable(gc* ref) {
+ llvm_gcroot(ref, 0);
return ((VirtualTable**)(ref))[0];
}
/// setVirtualTable - Sets the virtual table of this reference.
///
static void setVirtualTable(gc* ref, VirtualTable* VT) {
+ llvm_gcroot(ref, 0);
((VirtualTable**)(ref))[0] = VT;
}
Modified: vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp?rev=180391&r1=180390&r2=180391&view=diff
==============================================================================
--- vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp (original)
+++ vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp Thu Apr 25 12:05:01 2013
@@ -82,7 +82,8 @@ extern "C" void* vmkitgcmalloc(uint32_t
}
*/
extern "C" void* prealloc(uint32_t size) {
- gc* res = 0;
+ gc* res = 0;
+ llvm_gcroot(res, 0);
gcHeader* head = 0;
llvm_gcroot(res, 0);
size = llvm::RoundUpToAlignment(size, sizeof(void*));
@@ -92,13 +93,14 @@ extern "C" void* prealloc(uint32_t size)
}
extern "C" void postalloc(gc* obj, void* type, uint32_t size) {
+ llvm_gcroot(obj, 0);
vmkit::Thread::get()->MyVM->setType(obj, type);
JnJVM_org_j3_bindings_Bindings_postalloc__Lorg_vmmagic_unboxed_ObjectReference_2Lorg_vmmagic_unboxed_ObjectReference_2I(obj, type, size);
}
extern "C" void* vmkitgcmalloc(uint32_t sz, void* type) {
- gc* res = 0;
- llvm_gcroot(res, 0);
+ gc* res = 0;
+ llvm_gcroot(res, 0);
sz += gcHeader::hiddenHeaderSize();
sz = llvm::RoundUpToAlignment(sz, sizeof(void*));
res = ((gcHeader*)JnJVM_org_j3_bindings_Bindings_vmkitgcmalloc__ILorg_vmmagic_unboxed_ObjectReference_2(sz, type))->toReference();
@@ -118,8 +120,8 @@ extern "C" void* vmkitgcmallocUnresolved
*****************************************************************************/
extern "C" void* VTgcmalloc(uint32_t sz, VirtualTable* VT) {
- gc* res = 0;
- llvm_gcroot(res, 0);
+ gc* res = 0;
+ llvm_gcroot(res, 0);
sz += gcHeader::hiddenHeaderSize();
sz = llvm::RoundUpToAlignment(sz, sizeof(void*));
res = ((gcHeader*)JnJVM_org_j3_bindings_Bindings_VTgcmalloc__ILorg_vmmagic_unboxed_ObjectReference_2(sz, VT))->toReference();
@@ -142,18 +144,23 @@ extern "C" void addFinalizationCandidate
}
extern "C" void arrayWriteBarrier(void* ref, void** ptr, void* value) {
+ llvm_gcroot(ref, 0);
+ llvm_gcroot(value, 0);
JnJVM_org_j3_bindings_Bindings_arrayWriteBarrier__Lorg_vmmagic_unboxed_ObjectReference_2Lorg_vmmagic_unboxed_Address_2Lorg_vmmagic_unboxed_ObjectReference_2(
(gc*)ref, (gc**)ptr, (gc*)value);
if (vmkit::Thread::get()->doYield) vmkit::Collector::collect();
}
extern "C" void fieldWriteBarrier(void* ref, void** ptr, void* value) {
+ llvm_gcroot(ref, 0);
+ llvm_gcroot(value, 0);
JnJVM_org_j3_bindings_Bindings_fieldWriteBarrier__Lorg_vmmagic_unboxed_ObjectReference_2Lorg_vmmagic_unboxed_Address_2Lorg_vmmagic_unboxed_ObjectReference_2(
(gc*)ref, (gc**)ptr, (gc*)value);
if (vmkit::Thread::get()->doYield) vmkit::Collector::collect();
}
extern "C" void nonHeapWriteBarrier(void** ptr, void* value) {
+ llvm_gcroot(value, 0);
JnJVM_org_j3_bindings_Bindings_nonHeapWriteBarrier__Lorg_vmmagic_unboxed_Address_2Lorg_vmmagic_unboxed_ObjectReference_2((gc**)ptr, (gc*)value);
if (vmkit::Thread::get()->doYield) vmkit::Collector::collect();
}
@@ -169,6 +176,7 @@ void MutatorThread::init(Thread* _th) {
}
bool Collector::isLive(gc* ptr, word_t closure) {
+ llvm_gcroot(ptr, 0);
return JnJVM_org_j3_bindings_Bindings_isLive__Lorg_mmtk_plan_TraceLocal_2Lorg_vmmagic_unboxed_ObjectReference_2(closure, ptr);
}
@@ -176,43 +184,62 @@ void Collector::scanObject(void** ptr, w
if ((*ptr) != NULL) {
assert(vmkit::Thread::get()->MyVM->isCorruptedType((gc*)(*ptr)));
}
+#if RESET_STALE_REFERENCES
+ // Allow the VM to reset references if needed
+ vmkit::Thread::get()->MyVM->resetReferenceIfStale(NULL, ptr);
+#endif
JnJVM_org_j3_bindings_Bindings_reportDelayedRootEdge__Lorg_mmtk_plan_TraceLocal_2Lorg_vmmagic_unboxed_Address_2(closure, ptr);
}
void Collector::markAndTrace(void* source, void* ptr, word_t closure) {
- void** ptr_ = (void**)ptr;
- if ((*ptr_) != NULL) {
- assert(vmkit::Thread::get()->MyVM->isCorruptedType((gc*)(*ptr_)));
- }
- if ((*(void**)ptr) != NULL) assert(vmkit::Thread::get()->MyVM->isCorruptedType((gc*)(*(void**)ptr)));
- JnJVM_org_j3_bindings_Bindings_processEdge__Lorg_mmtk_plan_TransitiveClosure_2Lorg_vmmagic_unboxed_ObjectReference_2Lorg_vmmagic_unboxed_Address_2(closure, source, ptr);
+ llvm_gcroot(source, 0);
+ void** ptr_ = (void**)ptr;
+ if ((*ptr_) != NULL) {
+ assert(vmkit::Thread::get()->MyVM->isCorruptedType((gc*)(*ptr_)));
+ }
+ if ((*(void**)ptr) != NULL) assert(vmkit::Thread::get()->MyVM->isCorruptedType((gc*)(*(void**)ptr)));
+#if RESET_STALE_REFERENCES
+ // Allow the VM to reset references if needed
+ vmkit::Thread::get()->MyVM->resetReferenceIfStale(source, ptr_);
+#endif
+ JnJVM_org_j3_bindings_Bindings_processEdge__Lorg_mmtk_plan_TransitiveClosure_2Lorg_vmmagic_unboxed_ObjectReference_2Lorg_vmmagic_unboxed_Address_2(closure, source, ptr);
}
-void Collector::markAndTraceRoot(void* ptr, word_t closure) {
+void Collector::markAndTraceRoot(void* source, void* ptr, word_t closure) {
+ llvm_gcroot(source, 0);
void** ptr_ = (void**)ptr;
if ((*ptr_) != NULL) {
assert(vmkit::Thread::get()->MyVM->isCorruptedType((gc*)(*ptr_)));
}
+#if RESET_STALE_REFERENCES
+ // Allow the VM to reset references if needed
+ vmkit::Thread::get()->MyVM->resetReferenceIfStale(source, ptr_);
+#endif
JnJVM_org_j3_bindings_Bindings_processRootEdge__Lorg_mmtk_plan_TraceLocal_2Lorg_vmmagic_unboxed_Address_2Z(closure, ptr, true);
}
gc* Collector::retainForFinalize(gc* val, word_t closure) {
+ llvm_gcroot(val, 0);
return JnJVM_org_j3_bindings_Bindings_retainForFinalize__Lorg_mmtk_plan_TraceLocal_2Lorg_vmmagic_unboxed_ObjectReference_2(closure, val);
}
gc* Collector::retainReferent(gc* val, word_t closure) {
+ llvm_gcroot(val, 0);
return JnJVM_org_j3_bindings_Bindings_retainReferent__Lorg_mmtk_plan_TraceLocal_2Lorg_vmmagic_unboxed_ObjectReference_2(closure, val);
}
gc* Collector::getForwardedFinalizable(gc* val, word_t closure) {
+ llvm_gcroot(val, 0);
return JnJVM_org_j3_bindings_Bindings_getForwardedFinalizable__Lorg_mmtk_plan_TraceLocal_2Lorg_vmmagic_unboxed_ObjectReference_2(closure, val);
}
gc* Collector::getForwardedReference(gc* val, word_t closure) {
+ llvm_gcroot(val, 0);
return JnJVM_org_j3_bindings_Bindings_getForwardedReference__Lorg_mmtk_plan_TraceLocal_2Lorg_vmmagic_unboxed_ObjectReference_2(closure, val);
}
gc* Collector::getForwardedReferent(gc* val, word_t closure) {
+ llvm_gcroot(val, 0);
return JnJVM_org_j3_bindings_Bindings_getForwardedReferent__Lorg_mmtk_plan_TraceLocal_2Lorg_vmmagic_unboxed_ObjectReference_2(closure, val);
}
@@ -266,24 +293,34 @@ void Collector::initialise(int argc, cha
}
extern "C" void* MMTkMutatorAllocate(uint32_t size, void* type) {
- gc* val = (gc*)MutatorThread::get()->Allocator.Allocate(size);
+ gc* val = NULL;
+ llvm_gcroot(val, 0);
+ val = (gc*)MutatorThread::get()->Allocator.Allocate(size);
vmkit::Thread::get()->MyVM->setType(val, type);
return val;
}
void Collector::objectReferenceWriteBarrier(gc* ref, gc** slot, gc* value) {
+ llvm_gcroot(ref, 0);
+ llvm_gcroot(value, 0);
fieldWriteBarrier((void*)ref, (void**)slot, (void*)value);
}
void Collector::objectReferenceArrayWriteBarrier(gc* ref, gc** slot, gc* value) {
+ llvm_gcroot(ref, 0);
+ llvm_gcroot(value, 0);
arrayWriteBarrier((void*)ref, (void**)slot, (void*)value);
}
void Collector::objectReferenceNonHeapWriteBarrier(gc** slot, gc* value) {
+ llvm_gcroot(value, 0);
nonHeapWriteBarrier((void**)slot, (void*)value);
}
bool Collector::objectReferenceTryCASBarrier(gc* ref, gc** slot, gc* old, gc* value) {
+ llvm_gcroot(ref, 0);
+ llvm_gcroot(old, 0);
+ llvm_gcroot(value, 0);
bool res = JnJVM_org_j3_bindings_Bindings_writeBarrierCAS__Lorg_vmmagic_unboxed_ObjectReference_2Lorg_vmmagic_unboxed_Address_2Lorg_vmmagic_unboxed_ObjectReference_2Lorg_vmmagic_unboxed_ObjectReference_2(ref, slot, old, value);
if (vmkit::Thread::get()->doYield) vmkit::Collector::collect();
return res;
Modified: vmkit/trunk/mmtk/mmtk-j3/ObjectModel.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/mmtk-j3/ObjectModel.cpp?rev=180391&r1=180390&r2=180391&view=diff
==============================================================================
--- vmkit/trunk/mmtk/mmtk-j3/ObjectModel.cpp (original)
+++ vmkit/trunk/mmtk/mmtk-j3/ObjectModel.cpp Thu Apr 25 12:05:01 2013
@@ -28,22 +28,27 @@ extern "C" word_t Java_org_j3_mmtk_Objec
extern "C" void Java_org_j3_mmtk_ObjectModel_writeAvailableBitsWord__Lorg_vmmagic_unboxed_ObjectReference_2Lorg_vmmagic_unboxed_Word_2 (
MMTkObject* OM, gc* obj, word_t val) {
+ llvm_gcroot(obj, 0);
obj->header() = val;
}
extern "C" gcHeader* Java_org_j3_mmtk_ObjectModel_objectStartRef__Lorg_vmmagic_unboxed_ObjectReference_2 (MMTkObject* OM, gc* obj) {
+ llvm_gcroot(obj, 0);
return obj ? obj->toHeader() : 0;
}
extern "C" gcHeader* Java_org_j3_mmtk_ObjectModel_refToAddress__Lorg_vmmagic_unboxed_ObjectReference_2 (MMTkObject* OM, gc* obj) {
+ llvm_gcroot(obj, 0);
return obj ? obj->toHeader() : 0;
}
extern "C" uint8_t Java_org_j3_mmtk_ObjectModel_readAvailableByte__Lorg_vmmagic_unboxed_ObjectReference_2 (MMTkObject* OM, gc* obj) {
+ llvm_gcroot(obj, 0);
return *vmkit::System::GetLastBytePtr(reinterpret_cast<word_t>(&(obj->header())));
}
extern "C" void Java_org_j3_mmtk_ObjectModel_writeAvailableByte__Lorg_vmmagic_unboxed_ObjectReference_2B (MMTkObject* OM, gc* obj, uint8_t val) {
+ llvm_gcroot(obj, 0);
*vmkit::System::GetLastBytePtr(reinterpret_cast<word_t>(&(obj->header()))) = val;
}
@@ -52,12 +57,14 @@ extern "C" gc* Java_org_j3_mmtk_ObjectMo
}
extern "C" word_t Java_org_j3_mmtk_ObjectModel_prepareAvailableBits__Lorg_vmmagic_unboxed_ObjectReference_2 (MMTkObject* OM, gc* obj) {
+ llvm_gcroot(obj, 0);
return obj->header();
}
extern "C" uint8_t
Java_org_j3_mmtk_ObjectModel_attemptAvailableBits__Lorg_vmmagic_unboxed_ObjectReference_2Lorg_vmmagic_unboxed_Word_2Lorg_vmmagic_unboxed_Word_2(
MMTkObject* OM, gc* obj, word_t oldValue, word_t newValue) {
+ llvm_gcroot(obj, 0);
word_t val = __sync_val_compare_and_swap(&(obj->header()), oldValue, newValue);
return (val == oldValue);
}
@@ -67,6 +74,7 @@ extern "C" void Java_org_j3_bindings_Bin
extern "C" void Java_org_j3_bindings_Bindings_setType__Lorg_vmmagic_unboxed_ObjectReference_2Lorg_vmmagic_unboxed_ObjectReference_2(
gc* obj, void* type) {
+ llvm_gcroot(obj, 0);
vmkit::Thread::get()->MyVM->setType(obj, type);
}
@@ -101,9 +109,12 @@ extern "C" word_t Java_org_j3_mmtk_Objec
extern "C" word_t Java_org_j3_mmtk_ObjectModel_copy__Lorg_vmmagic_unboxed_ObjectReference_2I (
MMTkObject* OM, gc* src, int allocator) {
+ gc* res = NULL;
+ llvm_gcroot(res, 0);
+ llvm_gcroot(src, 0);
size_t size = vmkit::Thread::get()->MyVM->getObjectSize(src);
size = llvm::RoundUpToAlignment(size, sizeof(void*));
- gc* res = (gc*)JnJVM_org_j3_bindings_Bindings_copy__Lorg_vmmagic_unboxed_ObjectReference_2Lorg_vmmagic_unboxed_ObjectReference_2II(
+ res = (gc*)JnJVM_org_j3_bindings_Bindings_copy__Lorg_vmmagic_unboxed_ObjectReference_2Lorg_vmmagic_unboxed_ObjectReference_2II(
src, vmkit::Thread::get()->MyVM->getType(src), size, allocator);
assert((res->header() & ~vmkit::GCBitMask) == (src->header() & ~vmkit::GCBitMask));
return (word_t)res;
@@ -117,6 +128,7 @@ extern "C" void Java_org_j3_mmtk_ObjectM
extern "C" word_t Java_org_j3_mmtk_ObjectModel_getObjectEndAddress__Lorg_vmmagic_unboxed_ObjectReference_2 (
MMTkObject* OM, gc* object) {
+ llvm_gcroot(object, 0);
size_t size = vmkit::Thread::get()->MyVM->getObjectSize(object);
size = llvm::RoundUpToAlignment(size, sizeof(void*));
return reinterpret_cast<word_t>(object) + size;
@@ -157,6 +169,7 @@ class FakeByteArray : public MMTkObject
extern "C" FakeByteArray* Java_org_j3_mmtk_ObjectModel_getTypeDescriptor__Lorg_vmmagic_unboxed_ObjectReference_2 (
MMTkObject* OM, gc* src) {
+ llvm_gcroot(src, 0);
const char* name = vmkit::Thread::get()->MyVM->getObjectTypeName(src);
// This code is only used for debugging on a fatal error. It is fine to
// allocate in the C++ heap.
More information about the vmkit-commits
mailing list