[vmkit-commits] [vmkit] r107855 - in /vmkit/trunk/lib/J3/VMCore: JavaClass.cpp JavaClass.h JavaConstantPool.h JavaLocks.cpp JavaMetaJIT.cpp JavaObject.cpp JavaRuntimeJIT.cpp JavaString.cpp Jni.cpp VirtualTables.cpp
Nicolas Geoffray
nicolas.geoffray at lip6.fr
Wed Jul 7 22:58:04 PDT 2010
Author: geoffray
Date: Thu Jul 8 00:58:04 2010
New Revision: 107855
URL: http://llvm.org/viewvc/llvm-project?rev=107855&view=rev
Log:
Continue fixing some llvm_gcroot, and fix a bug in the LockSystem.
Modified:
vmkit/trunk/lib/J3/VMCore/JavaClass.cpp
vmkit/trunk/lib/J3/VMCore/JavaClass.h
vmkit/trunk/lib/J3/VMCore/JavaConstantPool.h
vmkit/trunk/lib/J3/VMCore/JavaLocks.cpp
vmkit/trunk/lib/J3/VMCore/JavaMetaJIT.cpp
vmkit/trunk/lib/J3/VMCore/JavaObject.cpp
vmkit/trunk/lib/J3/VMCore/JavaRuntimeJIT.cpp
vmkit/trunk/lib/J3/VMCore/JavaString.cpp
vmkit/trunk/lib/J3/VMCore/Jni.cpp
vmkit/trunk/lib/J3/VMCore/VirtualTables.cpp
Modified: vmkit/trunk/lib/J3/VMCore/JavaClass.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/JavaClass.cpp?rev=107855&r1=107854&r2=107855&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/VMCore/JavaClass.cpp (original)
+++ vmkit/trunk/lib/J3/VMCore/JavaClass.cpp Thu Jul 8 00:58:04 2010
@@ -219,6 +219,7 @@
Class::Class(JnjvmClassLoader* loader, const UTF8* n, ArrayUInt8* B) :
CommonClass(loader, n) {
+ llvm_gcroot(B, 0);
virtualVT = 0;
bytes = B;
super = 0;
@@ -254,13 +255,13 @@
}
JavaObject* UserClassArray::doNew(sint32 n, Jnjvm* vm) {
+ JavaObject* res = NULL;
+ llvm_gcroot(res, 0);
if (n < 0) {
vm->negativeArraySizeException(n);
} else if (n > JavaArray::MaxArraySize) {
vm->outOfMemoryError();
}
- JavaObject* res = NULL;
- llvm_gcroot(res, 0);
UserCommonClass* cl = baseClass();
uint32 logSize = cl->isPrimitive() ?
cl->asPrimitiveClass()->logSize : (sizeof(JavaObject*) == 8 ? 3 : 2);
@@ -471,7 +472,7 @@
}
JavaObject* UserClass::doNew(Jnjvm* vm) {
- JavaObject* res = 0;
+ JavaObject* res = NULL;
llvm_gcroot(res, 0);
assert(this && "No class when allocating.");
assert((this->isInitializing() ||
@@ -1075,8 +1076,10 @@
ArrayObject* JavaMethod::getParameterTypes(JnjvmClassLoader* loader) {
- ArrayObject* res = 0;
+ ArrayObject* res = NULL;
+ JavaObject* delegatee = NULL;
llvm_gcroot(res, 0);
+ llvm_gcroot(delegatee, 0);
Jnjvm* vm = JavaThread::get()->getJVM();
Signdef* sign = getSignature();
@@ -1084,7 +1087,8 @@
res = (ArrayObject*)vm->upcalls->classArrayClass->doNew(sign->nbArguments,vm);
for (uint32 index = 0; index < sign->nbArguments; ++index) {
- ArrayObject::setElement(res, getClassType(vm, loader, arguments[index]), index);
+ delegatee = getClassType(vm, loader, arguments[index]);
+ ArrayObject::setElement(res, delegatee, index);
}
return res;
@@ -1099,8 +1103,10 @@
ArrayObject* JavaMethod::getExceptionTypes(JnjvmClassLoader* loader) {
- ArrayObject* res = 0;
+ ArrayObject* res = NULL;
+ JavaObject* delegatee = NULL;
llvm_gcroot(res, 0);
+ llvm_gcroot(delegatee, 0);
Attribut* exceptionAtt = lookupAttribut(Attribut::exceptionsAttribut);
Jnjvm* vm = JavaThread::get()->getJVM();
@@ -1117,7 +1123,8 @@
UserCommonClass* cl = ctp->loadClass(idx);
assert(cl->asClass() && "Wrong exception type");
cl->asClass()->resolveClass();
- ArrayObject::setElement(res, cl->getClassDelegatee(vm), i);
+ delegatee = cl->getClassDelegatee(vm);
+ ArrayObject::setElement(res, delegatee, i);
}
return res;
}
Modified: vmkit/trunk/lib/J3/VMCore/JavaClass.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/JavaClass.h?rev=107855&r1=107854&r2=107855&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/VMCore/JavaClass.h (original)
+++ vmkit/trunk/lib/J3/VMCore/JavaClass.h Thu Jul 8 00:58:04 2010
@@ -1284,7 +1284,7 @@
///
void initialise(Class* cl, const UTF8* name, const UTF8* type, uint16 access);
- /// ~JavaField - Destroy the field as well as its attributs.
+ /// ~JavaField - Destroy the field as well as its attributes.
///
~JavaField();
Modified: vmkit/trunk/lib/J3/VMCore/JavaConstantPool.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/JavaConstantPool.h?rev=107855&r1=107854&r2=107855&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/VMCore/JavaConstantPool.h (original)
+++ vmkit/trunk/lib/J3/VMCore/JavaConstantPool.h Thu Jul 8 00:58:04 2010
@@ -50,7 +50,7 @@
sint32* ctpDef;
/// ctpRes - Objects resolved dynamically, e.g. UTF8s, classes, methods,
- /// fields, strings.
+ /// fields, string pointers.
///
void** ctpRes;
Modified: vmkit/trunk/lib/J3/VMCore/JavaLocks.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/JavaLocks.cpp?rev=107855&r1=107854&r2=107855&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/VMCore/JavaLocks.cpp (original)
+++ vmkit/trunk/lib/J3/VMCore/JavaLocks.cpp Thu Jul 8 00:58:04 2010
@@ -48,9 +48,10 @@
JavaLock** tab = LockTable[index >> BitIndex];
- if (tab == NULL)
- tab = (JavaLock**)associatedVM->allocator.Allocate(IndexSize,
- "Index LockTable");
+ if (tab == NULL) {
+ tab = (JavaLock**)associatedVM->allocator.Allocate(
+ IndexSize * sizeof(JavaLock*), "Index LockTable");
+ }
threadLock.unlock();
// Allocate the lock.
@@ -68,9 +69,9 @@
LockSystem::LockSystem(Jnjvm* vm) {
associatedVM = vm;
LockTable = (JavaLock* **)
- vm->allocator.Allocate(GlobalSize, "Global LockTable");
+ vm->allocator.Allocate(GlobalSize * sizeof(JavaLock**), "Global LockTable");
LockTable[0] = (JavaLock**)
- vm->allocator.Allocate(IndexSize, "Index LockTable");
+ vm->allocator.Allocate(IndexSize * sizeof(JavaLock*), "Index LockTable");
currentIndex = 0;
}
Modified: vmkit/trunk/lib/J3/VMCore/JavaMetaJIT.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/JavaMetaJIT.cpp?rev=107855&r1=107854&r2=107855&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/VMCore/JavaMetaJIT.cpp (original)
+++ vmkit/trunk/lib/J3/VMCore/JavaMetaJIT.cpp Thu Jul 8 00:58:04 2010
@@ -230,7 +230,6 @@
llvm_gcroot(obj, 0); \
va_list ap;\
va_start(ap, obj);\
- llvm_gcroot(obj, 0); \
TYPE res = invoke##TYPE_NAME##VirtualAP(vm, cl, obj, ap);\
va_end(ap); \
return res; \
Modified: vmkit/trunk/lib/J3/VMCore/JavaObject.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/JavaObject.cpp?rev=107855&r1=107854&r2=107855&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/VMCore/JavaObject.cpp (original)
+++ vmkit/trunk/lib/J3/VMCore/JavaObject.cpp Thu Jul 8 00:58:04 2010
@@ -24,8 +24,8 @@
void JavaObject::waitIntern(
JavaObject* self, struct timeval* info, bool timed) {
- JavaLock* l = 0;
llvm_gcroot(self, 0);
+ JavaLock* l = 0;
if (owner(self)) {
l = self->lock.changeToFatlock(self);
@@ -135,8 +135,8 @@
}
void JavaObject::notify(JavaObject* self) {
- JavaLock* l = 0;
llvm_gcroot(self, 0);
+ JavaLock* l = 0;
if (owner(self)) {
l = self->lock.getFatLock();
@@ -179,8 +179,8 @@
}
void JavaObject::notifyAll(JavaObject* self) {
- JavaLock* l = 0;
llvm_gcroot(self, 0);
+ JavaLock* l = 0;
if (owner(self)) {
l = self->lock.getFatLock();
Modified: vmkit/trunk/lib/J3/VMCore/JavaRuntimeJIT.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/JavaRuntimeJIT.cpp?rev=107855&r1=107854&r2=107855&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/VMCore/JavaRuntimeJIT.cpp (original)
+++ vmkit/trunk/lib/J3/VMCore/JavaRuntimeJIT.cpp Thu Jul 8 00:58:04 2010
@@ -257,9 +257,11 @@
assert(len > 0 && "Negative size given by VMKit");
JavaObject* _res = cl->doNew(dims[0], vm);
- ArrayObject* res = 0;
+ ArrayObject* res = NULL;
+ JavaObject* temp = NULL;
llvm_gcroot(_res, 0);
llvm_gcroot(res, 0);
+ llvm_gcroot(temp, 0);
if (len > 1) {
res = (ArrayObject*)_res;
@@ -268,8 +270,8 @@
UserClassArray* base = (UserClassArray*)_base;
if (dims[0] > 0) {
for (sint32 i = 0; i < dims[0]; ++i) {
- ArrayObject::setElement(
- res, multiCallNewIntern(base, (len - 1), &dims[1], vm), i);
+ temp = multiCallNewIntern(base, (len - 1), &dims[1], vm);
+ ArrayObject::setElement(res, temp, i);
}
} else {
for (uint32 i = 1; i < len; ++i) {
Modified: vmkit/trunk/lib/J3/VMCore/JavaString.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/JavaString.cpp?rev=107855&r1=107854&r2=107855&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/VMCore/JavaString.cpp (original)
+++ vmkit/trunk/lib/J3/VMCore/JavaString.cpp Thu Jul 8 00:58:04 2010
@@ -36,7 +36,7 @@
// No need to call the Java function: both the Java function and
// this function do the same thing.
- setValue(res, array);
+ JavaString::setValue(res, array);
res->count = ArrayUInt16::getSize(array);
res->offset = 0;
res->cachedHashCode = 0;
@@ -44,39 +44,48 @@
}
char* JavaString::strToAsciiz(JavaString* self) {
+ const ArrayUInt16* value = NULL;
llvm_gcroot(self, 0);
+ llvm_gcroot(value, 0);
+ value = JavaString::getValue(self);
char* buf = new char[self->count + 1];
for (sint32 i = 0; i < self->count; ++i) {
- buf[i] = ArrayUInt16::getElement(getValue(self), i + self->offset);
+ buf[i] = ArrayUInt16::getElement(value, i + self->offset);
}
buf[self->count] = 0;
return buf;
}
const ArrayUInt16* JavaString::strToArray(JavaString* self, Jnjvm* vm) {
- ArrayUInt16* array = 0;
+ ArrayUInt16* array = NULL;
+ const ArrayUInt16* value = NULL;
llvm_gcroot(self, 0);
llvm_gcroot(array, 0);
+ llvm_gcroot(value, 0);
+ value = JavaString::getValue(self);
assert(getValue(self) && "String without an array?");
if (self->offset || (self->count != ArrayUInt16::getSize(getValue(self)))) {
array = (ArrayUInt16*)vm->upcalls->ArrayOfChar->doNew(self->count, vm);
for (sint32 i = 0; i < self->count; i++) {
ArrayUInt16::setElement(
- array, ArrayUInt16::getElement(getValue(self), i + self->offset), i);
+ array, ArrayUInt16::getElement(value, i + self->offset), i);
}
return array;
} else {
- return getValue(self);
+ return value;
}
}
void JavaString::stringDestructor(JavaString* str) {
+ const ArrayUInt16* value = NULL;
llvm_gcroot(str, 0);
+ llvm_gcroot(value, 0);
+ value = JavaString::getValue(str);
Jnjvm* vm = JavaThread::get()->getJVM();
assert(vm && "No vm when destroying a string");
- if (getValue(str) != NULL) vm->hashStr.removeUnlocked(getValue(str), str);
+ if (value != NULL) vm->hashStr.removeUnlocked(value, str);
}
JavaString* JavaString::internalToJava(const UTF8* name, Jnjvm* vm) {
@@ -99,12 +108,15 @@
}
const UTF8* JavaString::javaToInternal(const JavaString* self, UTF8Map* map) {
+ const ArrayUInt16* value = NULL;
llvm_gcroot(self, 0);
+ llvm_gcroot(value, 0);
+ value = JavaString::getValue(self);
uint16* java = new uint16[self->count];
for (sint32 i = 0; i < self->count; ++i) {
- uint16 cur = ArrayUInt16::getElement(getValue(self), self->offset + i);
+ uint16 cur = ArrayUInt16::getElement(value, self->offset + i);
if (cur == '.') java[i] = '/';
else java[i] = cur;
}
Modified: vmkit/trunk/lib/J3/VMCore/Jni.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/Jni.cpp?rev=107855&r1=107854&r2=107855&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/VMCore/Jni.cpp (original)
+++ vmkit/trunk/lib/J3/VMCore/Jni.cpp Thu Jul 8 00:58:04 2010
@@ -2488,10 +2488,12 @@
BEGIN_JNI_EXCEPTION
+ JavaObject* obj = NULL;
+ llvm_gcroot(obj, 0);
+
JavaThread* th = JavaThread::get();
Jnjvm* vm = th->getJVM();
- JavaObject* obj = vm->asciizToStr(bytes);
- llvm_gcroot(obj, 0);
+ obj = vm->asciizToStr(bytes);
jstring ret = (jstring)th->pushJNIRef(obj);
RETURN_FROM_JNI(ret);
@@ -2643,10 +2645,12 @@
BEGIN_JNI_EXCEPTION
+ JavaObject* res = NULL;
+ llvm_gcroot(res, 0);
+
JavaThread* th = JavaThread::get();
Jnjvm* vm = th->getJVM();
- JavaObject* res = vm->upcalls->ArrayOfBool->doNew(len, vm);
- llvm_gcroot(res, 0);
+ res = vm->upcalls->ArrayOfBool->doNew(len, vm);
jbooleanArray ret = (jbooleanArray)th->pushJNIRef(res);
RETURN_FROM_JNI(ret);
@@ -2659,11 +2663,13 @@
jbyteArray NewByteArray(JNIEnv *env, jsize len) {
BEGIN_JNI_EXCEPTION
+
+ JavaObject* res = NULL;
+ llvm_gcroot(res, 0);
JavaThread* th = JavaThread::get();
Jnjvm* vm = th->getJVM();
- JavaObject* res = vm->upcalls->ArrayOfByte->doNew(len, vm);
- llvm_gcroot(res, 0);
+ res = vm->upcalls->ArrayOfByte->doNew(len, vm);
jbyteArray ret = (jbyteArray)th->pushJNIRef(res);
RETURN_FROM_JNI(ret);
@@ -2675,11 +2681,13 @@
jcharArray NewCharArray(JNIEnv *env, jsize len) {
BEGIN_JNI_EXCEPTION
+
+ JavaObject* res = NULL;
+ llvm_gcroot(res, 0);
JavaThread* th = JavaThread::get();
Jnjvm* vm = th->getJVM();
- JavaObject* res = vm->upcalls->ArrayOfChar->doNew(len, vm);
- llvm_gcroot(res, 0);
+ res = vm->upcalls->ArrayOfChar->doNew(len, vm);
jcharArray ret = (jcharArray)th->pushJNIRef(res);
RETURN_FROM_JNI(ret);
@@ -2691,11 +2699,13 @@
jshortArray NewShortArray(JNIEnv *env, jsize len) {
BEGIN_JNI_EXCEPTION
+
+ JavaObject* res = NULL;
+ llvm_gcroot(res, 0);
JavaThread* th = JavaThread::get();
Jnjvm* vm = th->getJVM();
- JavaObject* res = vm->upcalls->ArrayOfShort->doNew(len, vm);
- llvm_gcroot(res, 0);
+ res = vm->upcalls->ArrayOfShort->doNew(len, vm);
jshortArray ret = (jshortArray)th->pushJNIRef(res);
RETURN_FROM_JNI(ret);
@@ -2707,11 +2717,13 @@
jintArray NewIntArray(JNIEnv *env, jsize len) {
BEGIN_JNI_EXCEPTION
+
+ JavaObject* res = NULL;
+ llvm_gcroot(res, 0);
JavaThread* th = JavaThread::get();
Jnjvm* vm = th->getJVM();
- JavaObject* res = vm->upcalls->ArrayOfInt->doNew(len, vm);
- llvm_gcroot(res, 0);
+ res = vm->upcalls->ArrayOfInt->doNew(len, vm);
jintArray ret = (jintArray)th->pushJNIRef(res);
RETURN_FROM_JNI(ret);
@@ -2723,11 +2735,13 @@
jlongArray NewLongArray(JNIEnv *env, jsize len) {
BEGIN_JNI_EXCEPTION
+
+ JavaObject* res = NULL;
+ llvm_gcroot(res, 0);
JavaThread* th = JavaThread::get();
Jnjvm* vm = th->getJVM();
- JavaObject* res = vm->upcalls->ArrayOfLong->doNew(len, vm);
- llvm_gcroot(res, 0);
+ res = vm->upcalls->ArrayOfLong->doNew(len, vm);
jlongArray ret = (jlongArray)th->pushJNIRef(res);
RETURN_FROM_JNI(ret);
@@ -2739,11 +2753,13 @@
jfloatArray NewFloatArray(JNIEnv *env, jsize len) {
BEGIN_JNI_EXCEPTION
+
+ JavaObject* res = NULL;
+ llvm_gcroot(res, 0);
JavaThread* th = JavaThread::get();
Jnjvm* vm = th->getJVM();
- JavaObject* res = vm->upcalls->ArrayOfFloat->doNew(len, vm);
- llvm_gcroot(res, 0);
+ res = vm->upcalls->ArrayOfFloat->doNew(len, vm);
jfloatArray ret = (jfloatArray)th->pushJNIRef(res);
RETURN_FROM_JNI(ret);
@@ -2755,11 +2771,13 @@
jdoubleArray NewDoubleArray(JNIEnv *env, jsize len) {
BEGIN_JNI_EXCEPTION
+
+ JavaObject* res = NULL;
+ llvm_gcroot(res, 0);
JavaThread* th = JavaThread::get();
Jnjvm* vm = th->getJVM();
- JavaObject* res = vm->upcalls->ArrayOfDouble->doNew(len, vm);
- llvm_gcroot(res, 0);
+ res = vm->upcalls->ArrayOfDouble->doNew(len, vm);
jdoubleArray ret = (jdoubleArray)th->pushJNIRef(res);
RETURN_FROM_JNI(ret);
@@ -2945,12 +2963,12 @@
BEGIN_JNI_EXCEPTION
+ ArrayUInt8* array = *(ArrayUInt8**)_array;
+ llvm_gcroot(array, 0);
+
if (mode == JNI_ABORT) {
free(elems);
} else {
- ArrayUInt8* array = *(ArrayUInt8**)_array;
- llvm_gcroot(array, 0);
-
sint32 len = ArrayUInt8::getSize(array);
memcpy(ArrayUInt8::getElements(array), elems, len);
@@ -2967,13 +2985,13 @@
jint mode) {
BEGIN_JNI_EXCEPTION
+
+ ArraySInt16* array = *(ArraySInt16**)_array;
+ llvm_gcroot(array, 0);
if (mode == JNI_ABORT) {
free(elems);
} else {
- ArraySInt16* array = *(ArraySInt16**)_array;
- llvm_gcroot(array, 0);
-
sint32 len = ArraySInt16::getSize(array);
memcpy(ArraySInt16::getElements(array), elems, len);
@@ -2990,13 +3008,13 @@
jint mode) {
BEGIN_JNI_EXCEPTION
-
+
+ ArrayUInt16* array = *(ArrayUInt16**)_array;
+ llvm_gcroot(array, 0);
+
if (mode == JNI_ABORT) {
free(elems);
} else {
- ArrayUInt16* array = *(ArrayUInt16**)_array;
- llvm_gcroot(array, 0);
-
sint32 len = ArrayUInt16::getSize(array) << 1;
memcpy(ArrayUInt16::getElements(array), elems, len);
@@ -3013,13 +3031,13 @@
jint mode) {
BEGIN_JNI_EXCEPTION
+
+ ArraySInt16* array = *(ArraySInt16**)_array;
+ llvm_gcroot(array, 0);
if (mode == JNI_ABORT) {
free(elems);
} else {
- ArraySInt16* array = *(ArraySInt16**)_array;
- llvm_gcroot(array, 0);
-
sint32 len = ArraySInt16::getSize(array) << 1;
memcpy(ArraySInt16::getElements(array), elems, len);
@@ -3036,13 +3054,13 @@
jint mode) {
BEGIN_JNI_EXCEPTION
+
+ ArraySInt32* array = *(ArraySInt32**)_array;
+ llvm_gcroot(array, 0);
if (mode == JNI_ABORT) {
free(elems);
} else {
- ArraySInt32* array = *(ArraySInt32**)_array;
- llvm_gcroot(array, 0);
-
sint32 len = ArraySInt32::getSize(array) << 2;
memcpy(ArraySInt32::getElements(array), elems, len);
@@ -3059,13 +3077,13 @@
jint mode) {
BEGIN_JNI_EXCEPTION
+
+ ArrayLong* array = *(ArrayLong**)_array;
+ llvm_gcroot(array, 0);
if (mode == JNI_ABORT) {
free(elems);
} else {
- ArrayLong* array = *(ArrayLong**)_array;
- llvm_gcroot(array, 0);
-
sint32 len = ArrayLong::getSize(array) << 3;
memcpy(ArrayLong::getElements(array), elems, len);
@@ -3081,13 +3099,13 @@
void ReleaseFloatArrayElements(JNIEnv *env, jfloatArray _array, jfloat *elems,
jint mode) {
BEGIN_JNI_EXCEPTION
+
+ ArrayFloat* array = *(ArrayFloat**)_array;
+ llvm_gcroot(array, 0);
if (mode == JNI_ABORT) {
free(elems);
} else {
- ArrayFloat* array = *(ArrayFloat**)_array;
- llvm_gcroot(array, 0);
-
sint32 len = ArrayFloat::getSize(array) << 2;
memcpy(ArrayFloat::getElements(array), elems, len);
@@ -3104,13 +3122,13 @@
jdouble *elems, jint mode) {
BEGIN_JNI_EXCEPTION
+
+ ArrayDouble* array = *(ArrayDouble**)_array;
+ llvm_gcroot(array, 0);
if (mode == JNI_ABORT) {
free(elems);
} else {
- ArrayDouble* array = *(ArrayDouble**)_array;
- llvm_gcroot(array, 0);
-
sint32 len = ArrayDouble::getSize(array) << 3;
memcpy(ArrayDouble::getElements(array), elems, len);
@@ -3470,12 +3488,12 @@
BEGIN_JNI_EXCEPTION
+ JavaObject* array = *(JavaObject**)_array;
+ llvm_gcroot(array, 0);
+
if (mode == JNI_ABORT) {
free(carray);
} else {
- JavaObject* array = *(JavaObject**)_array;
- llvm_gcroot(array, 0);
-
UserClassArray* cl = JavaObject::getClass(array)->asArrayClass();
uint32 logSize = cl->baseClass()->asPrimitiveClass()->logSize;
sint32 len = JavaArray::getSize(array) << logSize;
@@ -3519,10 +3537,13 @@
jobject NewGlobalRef(JNIEnv* env, jobject obj) {
BEGIN_JNI_EXCEPTION
+
+ JavaObject* Obj = NULL;
+ llvm_gcroot(Obj, 0);
// Local object references.
if (obj) {
- JavaObject* Obj = *(JavaObject**)obj;
+ Obj = *(JavaObject**)obj;
llvm_gcroot(Obj, 0);
Jnjvm* vm = JavaThread::get()->getJVM();
Modified: vmkit/trunk/lib/J3/VMCore/VirtualTables.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/VirtualTables.cpp?rev=107855&r1=107854&r2=107855&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/VMCore/VirtualTables.cpp (original)
+++ vmkit/trunk/lib/J3/VMCore/VirtualTables.cpp Thu Jul 8 00:58:04 2010
@@ -285,14 +285,22 @@
mvm::Collector::markAndTraceRoot(key, closure);
}
- for (uint32 i = 0; i < LockSystem::GlobalSize; i++) {
+ uint32 i = 0;
+ for (; i < LockSystem::GlobalSize; i++) {
JavaLock** array = lockSystem.LockTable[i];
if (array == NULL) break;
- for (uint32 j = 0; j < LockSystem::IndexSize; j++) {
+ uint32 j = 0;
+ for (; j < LockSystem::IndexSize; j++) {
if (array[j] == NULL) break;
JavaLock* lock = array[j];
mvm::Collector::markAndTraceRoot(lock->getAssociatedObjectPtr(), closure);
}
+ for (j = j + 1; j < LockSystem::IndexSize; j++) {
+ assert(array[j] == NULL);
+ }
+ }
+ for (i = i + 1; i < LockSystem::GlobalSize; i++) {
+ assert(lockSystem.LockTable[i] == NULL);
}
#if defined(ISOLATE_SHARING)
mvm::Collector::markAndTraceRoot(&JnjvmSharedLoader::sharedLoader, closure);
More information about the vmkit-commits
mailing list