From nicolas.geoffray at lip6.fr Tue Jun 1 12:54:14 2010 From: nicolas.geoffray at lip6.fr (Nicolas Geoffray) Date: Tue, 01 Jun 2010 19:54:14 -0000 Subject: [vmkit-commits] [vmkit] r105284 - in /vmkit/trunk: lib/J3/Classpath/ lib/J3/Compiler/ lib/J3/VMCore/ mmtk/mmtk-j3/ Message-ID: <20100601195414.787D7312800A@llvm.org> Author: geoffray Date: Tue Jun 1 14:54:14 2010 New Revision: 105284 URL: http://llvm.org/viewvc/llvm-project?rev=105284&view=rev Log: Make JavaObject virtual functions static in order to make less errors wrt to GC. Modified: vmkit/trunk/lib/J3/Classpath/ClasspathConstructor.inc vmkit/trunk/lib/J3/Classpath/ClasspathField.inc vmkit/trunk/lib/J3/Classpath/ClasspathMethod.inc vmkit/trunk/lib/J3/Classpath/ClasspathVMClass.inc vmkit/trunk/lib/J3/Classpath/ClasspathVMObject.inc vmkit/trunk/lib/J3/Classpath/ClasspathVMSystem.inc vmkit/trunk/lib/J3/Classpath/ClasspathVMSystemProperties.inc vmkit/trunk/lib/J3/Classpath/ClasspathVMThread.inc vmkit/trunk/lib/J3/Compiler/JavaAOTCompiler.cpp vmkit/trunk/lib/J3/Compiler/JavaJIT.cpp vmkit/trunk/lib/J3/VMCore/JavaMetaJIT.cpp vmkit/trunk/lib/J3/VMCore/JavaObject.cpp vmkit/trunk/lib/J3/VMCore/JavaObject.h vmkit/trunk/lib/J3/VMCore/JavaRuntimeJIT.cpp vmkit/trunk/lib/J3/VMCore/Jni.cpp vmkit/trunk/lib/J3/VMCore/Jnjvm.cpp vmkit/trunk/lib/J3/VMCore/JnjvmClassLoader.cpp vmkit/trunk/lib/J3/VMCore/VirtualTables.cpp vmkit/trunk/mmtk/mmtk-j3/RuntimeHelpers.cpp Modified: vmkit/trunk/lib/J3/Classpath/ClasspathConstructor.inc URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/Classpath/ClasspathConstructor.inc?rev=105284&r1=105283&r2=105284&view=diff ============================================================================== --- vmkit/trunk/lib/J3/Classpath/ClasspathConstructor.inc (original) +++ vmkit/trunk/lib/J3/Classpath/ClasspathConstructor.inc Tue Jun 1 14:54:14 2010 @@ -110,7 +110,7 @@ Typedef* const* arguments = sign->getArgumentsType(); // Store the arguments, unboxing primitives if necessary. for (sint32 i = 0; i < size; ++i) { - ptr[i]->decapsulePrimitive(vm, &buf[i], arguments[i]); + JavaObject::decapsulePrimitive(ptr[i], vm, &buf[i], arguments[i]); if (buf[i].l == reinterpret_cast(ptr[i])) { buf[i].l = reinterpret_cast(&ptr[i]); } @@ -123,7 +123,7 @@ excp = th->getJavaException(); } END_CATCH; if (excp) { - if (excp->getClass()->isAssignableFrom(vm->upcalls->newException)) { + if (JavaObject::getClass(excp)->isAssignableFrom(vm->upcalls->newException)) { th->clearException(); // If it's an exception, we encapsule it in an // invocationTargetException Modified: vmkit/trunk/lib/J3/Classpath/ClasspathField.inc URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/Classpath/ClasspathField.inc?rev=105284&r1=105283&r2=105284&view=diff ============================================================================== --- vmkit/trunk/lib/J3/Classpath/ClasspathField.inc (original) +++ vmkit/trunk/lib/J3/Classpath/ClasspathField.inc Tue Jun 1 14:54:14 2010 @@ -547,7 +547,7 @@ } const Typedef* type = field->getSignature(); - val->decapsulePrimitive(vm, &buf, type); + JavaObject::decapsulePrimitive(val, vm, &buf, type); if (type->isPrimitive()) { Modified: vmkit/trunk/lib/J3/Classpath/ClasspathMethod.inc URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/Classpath/ClasspathMethod.inc?rev=105284&r1=105283&r2=105284&view=diff ============================================================================== --- vmkit/trunk/lib/J3/Classpath/ClasspathMethod.inc (original) +++ vmkit/trunk/lib/J3/Classpath/ClasspathMethod.inc Tue Jun 1 14:54:14 2010 @@ -124,7 +124,7 @@ if (isVirtual(meth->access)) { verifyNull(obj); - UserCommonClass* objCl = obj->getClass(); + UserCommonClass* objCl = JavaObject::getClass(obj); if (!(objCl->isAssignableFrom(cl))) { vm->illegalArgumentException(" is not a valid type"); } @@ -143,7 +143,7 @@ JavaObject** ptr = (JavaObject**)(void*)(args->elements); Typedef* const* arguments = sign->getArgumentsType(); for (sint32 i = 0; i < size; ++i) { - ptr[i]->decapsulePrimitive(vm, &buf[i], arguments[i]); + JavaObject::decapsulePrimitive(ptr[i], vm, &buf[i], arguments[i]); if (buf[i].l == reinterpret_cast(ptr[i])) { buf[i].l = reinterpret_cast(&ptr[i]); } @@ -167,7 +167,8 @@ exc = th->getJavaException(); \ } END_CATCH; \ if (exc) { \ - if (exc->getClass()->isAssignableFrom(vm->upcalls->newException)) { \ + if (JavaObject::getClass(exc)->isAssignableFrom( \ + vm->upcalls->newException)) { \ th->clearException(); \ th->getJVM()->invocationTargetException(exc); \ } else { \ Modified: vmkit/trunk/lib/J3/Classpath/ClasspathVMClass.inc URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/Classpath/ClasspathVMClass.inc?rev=105284&r1=105283&r2=105284&view=diff ============================================================================== --- vmkit/trunk/lib/J3/Classpath/ClasspathVMClass.inc (original) +++ vmkit/trunk/lib/J3/Classpath/ClasspathVMClass.inc Tue Jun 1 14:54:14 2010 @@ -404,7 +404,7 @@ Jnjvm* vm = JavaThread::get()->getJVM(); UserCommonClass* cl = UserCommonClass::resolvedImplClass(vm, Cl, false); - res = obj->instanceOf(cl); + res = JavaObject::instanceOf(obj, cl); END_NATIVE_EXCEPTION Modified: vmkit/trunk/lib/J3/Classpath/ClasspathVMObject.inc URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/Classpath/ClasspathVMObject.inc?rev=105284&r1=105283&r2=105284&view=diff ============================================================================== --- vmkit/trunk/lib/J3/Classpath/ClasspathVMObject.inc (original) +++ vmkit/trunk/lib/J3/Classpath/ClasspathVMObject.inc Tue Jun 1 14:54:14 2010 @@ -33,7 +33,7 @@ BEGIN_NATIVE_EXCEPTION(0) - UserCommonClass* cl = src->getClass(); + UserCommonClass* cl = JavaObject::getClass(src); size_t size = 0; if (cl->isArray()) { UserClassArray* array = cl->asArrayClass(); @@ -71,7 +71,7 @@ BEGIN_NATIVE_EXCEPTION(0) Jnjvm* vm = JavaThread::get()->getJVM(); - res = obj->getClass()->getClassDelegatee(vm); + res = JavaObject::getClass(obj)->getClassDelegatee(vm); END_NATIVE_EXCEPTION @@ -89,7 +89,7 @@ BEGIN_NATIVE_EXCEPTION(0) - obj->notifyAll(); + JavaObject::notifyAll(obj); END_NATIVE_EXCEPTION } @@ -113,9 +113,9 @@ struct timeval t; t.tv_sec = sec; t.tv_usec = usec; - obj->timedWait(t); + JavaObject::timedWait(obj, t); } else { - obj->wait(); + JavaObject::wait(obj); } END_NATIVE_EXCEPTION @@ -132,7 +132,7 @@ BEGIN_NATIVE_EXCEPTION(0) - obj->notify(); + JavaObject::notify(obj); END_NATIVE_EXCEPTION } Modified: vmkit/trunk/lib/J3/Classpath/ClasspathVMSystem.inc URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/Classpath/ClasspathVMSystem.inc?rev=105284&r1=105283&r2=105284&view=diff ============================================================================== --- vmkit/trunk/lib/J3/Classpath/ClasspathVMSystem.inc (original) +++ vmkit/trunk/lib/J3/Classpath/ClasspathVMSystem.inc Tue Jun 1 14:54:14 2010 @@ -44,14 +44,15 @@ return; } - if (!(src->getClass()->isArray() && dst->getClass()->isArray())) { + if (!(JavaObject::getClass(src)->isArray() && + JavaObject::getClass(dst)->isArray())) { th->pendingException = vm->CreateArrayStoreException( (JavaVirtualTable*)dst->getVirtualTable()); return; } - UserClassArray* ts = (UserClassArray*)src->getClass(); - UserClassArray* td = (UserClassArray*)dst->getClass(); + UserClassArray* ts = (UserClassArray*)JavaObject::getClass(src); + UserClassArray* td = (UserClassArray*)JavaObject::getClass(dst); UserCommonClass* dstType = td->baseClass(); UserCommonClass* srcType = ts->baseClass(); @@ -83,7 +84,7 @@ while (i < sstart + len && !doThrow) { cur = ((ArrayObject*)src)->elements[i]; if (cur) { - if (!(cur->getClass()->isAssignableFrom(dstType))) { + if (!(JavaObject::getClass(cur)->isAssignableFrom(dstType))) { doThrow = true; length = i; } @@ -114,7 +115,7 @@ llvm_gcroot(obj, 0); if (obj == NULL) return 0; - return obj->hashCode(); + return JavaObject::hashCode(obj); } } Modified: vmkit/trunk/lib/J3/Classpath/ClasspathVMSystemProperties.inc URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/Classpath/ClasspathVMSystemProperties.inc?rev=105284&r1=105283&r2=105284&view=diff ============================================================================== --- vmkit/trunk/lib/J3/Classpath/ClasspathVMSystemProperties.inc (original) +++ vmkit/trunk/lib/J3/Classpath/ClasspathVMSystemProperties.inc Tue Jun 1 14:54:14 2010 @@ -36,8 +36,8 @@ Val = vm->asciizToStr(val); Key = vm->asciizToStr(key); - vm->upcalls->setProperty->invokeIntSpecial(vm, (UserClass*)prop->getClass(), - prop, &Key, &Val); + vm->upcalls->setProperty->invokeIntSpecial( + vm, (UserClass*)JavaObject::getClass(prop), prop, &Key, &Val); } static void setUnameProp(Jnjvm* vm, JavaObject* prop) { Modified: vmkit/trunk/lib/J3/Classpath/ClasspathVMThread.inc URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/Classpath/ClasspathVMThread.inc?rev=105284&r1=105283&r2=105284&view=diff ============================================================================== --- vmkit/trunk/lib/J3/Classpath/ClasspathVMThread.inc (original) +++ vmkit/trunk/lib/J3/Classpath/ClasspathVMThread.inc Tue Jun 1 14:54:14 2010 @@ -48,7 +48,7 @@ assert(javaThread && "Didn't fix the javaThread of a j3 thread"); field->setObjectField(vmThread, (JavaObject*)(void*)thread); - UserClass* vmthClass = (UserClass*)vmThread->getClass(); + UserClass* vmthClass = (UserClass*)JavaObject::getClass(vmThread); ThreadSystem& ts = vm->threadSystem; Modified: vmkit/trunk/lib/J3/Compiler/JavaAOTCompiler.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/Compiler/JavaAOTCompiler.cpp?rev=105284&r1=105283&r2=105284&view=diff ============================================================================== --- vmkit/trunk/lib/J3/Compiler/JavaAOTCompiler.cpp (original) +++ vmkit/trunk/lib/J3/Compiler/JavaAOTCompiler.cpp Tue Jun 1 14:54:14 2010 @@ -172,7 +172,7 @@ return SI->second; } else { assert(str && "No string given"); - LLVMClassInfo* LCI = getClassInfo(str->getClass()->asClass()); + LLVMClassInfo* LCI = getClassInfo(JavaObject::getClass(str)->asClass()); const llvm::Type* Ty = LCI->getVirtualType(); Module& Mod = *getLLVMModule(); @@ -311,7 +311,7 @@ if (mvm::Collector::begOf(obj)) { const Type* Ty = 0; - CommonClass* cl = obj->getClass(); + CommonClass* cl = JavaObject::getClass(obj); if (cl->isArray()) { Classpath* upcalls = cl->classLoader->bootstrapLoader->upcalls; @@ -616,7 +616,7 @@ } Constant* JavaAOTCompiler::CreateConstantFromJavaObject(JavaObject* obj) { - CommonClass* cl = obj->getClass(); + CommonClass* cl = JavaObject::getClass(obj); if (cl->isArray()) { Classpath* upcalls = cl->classLoader->bootstrapLoader->upcalls; @@ -657,7 +657,8 @@ std::vector Elmts; // JavaObject - Constant* CurConstant = CreateConstantForBaseObject(obj->getClass()); + Constant* CurConstant = + CreateConstantForBaseObject(JavaObject::getClass(obj)); for (uint32 j = 1; j <= cl->virtualVT->depth; ++j) { std::vector TempElts; @@ -721,7 +722,7 @@ } Constant* JavaAOTCompiler::CreateConstantFromJavaString(JavaString* str) { - Class* cl = str->getClass()->asClass(); + Class* cl = JavaObject::getClass(str)->asClass(); LLVMClassInfo* LCI = getClassInfo(cl); const StructType* STy = dyn_cast(LCI->getVirtualType()->getContainedType(0)); @@ -1249,7 +1250,7 @@ const StructType* STy = StructType::get(getLLVMModule()->getContext(), Elemts); std::vector Cts; - Cts.push_back(CreateConstantForBaseObject(val->getClass())); + Cts.push_back(CreateConstantForBaseObject(JavaObject::getClass(val))); Cts.push_back(ConstantInt::get(JavaIntrinsics.pointerSizeType, val->size)); std::vector Vals; @@ -1275,7 +1276,7 @@ const StructType* STy = StructType::get(getLLVMModule()->getContext(), Elemts); std::vector Cts; - Cts.push_back(CreateConstantForBaseObject(val->getClass())); + Cts.push_back(CreateConstantForBaseObject(JavaObject::getClass(val))); Cts.push_back(ConstantInt::get(JavaIntrinsics.pointerSizeType, val->size)); std::vector Vals; @@ -1301,14 +1302,14 @@ const StructType* STy = StructType::get(getLLVMModule()->getContext(), Elemts); std::vector Cts; - Cts.push_back(CreateConstantForBaseObject(val->getClass())); + Cts.push_back(CreateConstantForBaseObject(JavaObject::getClass(val))); Cts.push_back(ConstantInt::get(JavaIntrinsics.pointerSizeType, val->size)); std::vector Vals; for (sint32 i = 0; i < val->size; ++i) { if (val->elements[i]) { Vals.push_back(getFinalObject(val->elements[i], - val->getClass()->asArrayClass()->baseClass())); + JavaObject::getClass(val)->asArrayClass()->baseClass())); } else { Vals.push_back(Constant::getNullValue(JavaIntrinsics.JavaObjectType)); } @@ -2191,13 +2192,13 @@ for (; I != E; ++I) { JavaObject* obj = (JavaObject*)(*I); - if (!VMClassLoader::isVMClassLoader(obj) && obj->instanceOf(cl)) { - if (currentClass) { - if (obj->getClass() != currentClass) { + if (!VMClassLoader::isVMClassLoader(obj) && JavaObject::instanceOf(obj, cl)) { + if (currentClass != NULL) { + if (JavaObject::getClass(obj) != currentClass) { return 0; } } else { - currentClass = obj->getClass(); + currentClass = JavaObject::getClass(obj); } } } Modified: vmkit/trunk/lib/J3/Compiler/JavaJIT.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/Compiler/JavaJIT.cpp?rev=105284&r1=105283&r2=105284&view=diff ============================================================================== --- vmkit/trunk/lib/J3/Compiler/JavaJIT.cpp (original) +++ vmkit/trunk/lib/J3/Compiler/JavaJIT.cpp Tue Jun 1 14:54:14 2010 @@ -100,7 +100,7 @@ JavaObject* source = TheCompiler->getFinalObject(obj); if (source) { canBeDirect = true; - CommonClass* sourceClass = source->getClass(); + CommonClass* sourceClass = JavaObject::getClass(source); Class* lookup = sourceClass->isArray() ? sourceClass->super : sourceClass->asClass(); meth = lookup->lookupMethodDontThrow(name, signature->keyName, false, @@ -2125,7 +2125,8 @@ JavaObject* val = field->getObjectField(Obj); JnjvmClassLoader* JCL = field->classDef->classLoader; Value* V = TheCompiler->getFinalObject(val, sign->assocClass(JCL)); - CommonClass* cl = mvm::Collector::begOf(val) ? val->getClass() : NULL; + CommonClass* cl = mvm::Collector::begOf(val) ? + JavaObject::getClass(val) : NULL; push(V, false, cl); } else { Value* V = CallInst::Create(intrinsics->GetFinalObjectFieldFunction, ptr, Modified: vmkit/trunk/lib/J3/VMCore/JavaMetaJIT.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/JavaMetaJIT.cpp?rev=105284&r1=105283&r2=105284&view=diff ============================================================================== --- vmkit/trunk/lib/J3/VMCore/JavaMetaJIT.cpp (original) +++ vmkit/trunk/lib/J3/VMCore/JavaMetaJIT.cpp Tue Jun 1 14:54:14 2010 @@ -108,7 +108,7 @@ TYPE JavaMethod::invoke##TYPE_NAME##VirtualAP(Jnjvm* vm, UserClass* cl, JavaObject* obj, va_list ap) { \ llvm_gcroot(obj, 0); \ verifyNull(obj); \ - UserClass* objCl = obj->getClass()->isArray() ? obj->getClass()->super : obj->getClass()->asClass(); \ + UserClass* objCl = JavaObject::getClass(obj)->isArray() ? JavaObject::getClass(obj)->super : JavaObject::getClass(obj)->asClass(); \ if (objCl == classDef || isFinal(access)) { \ meth = this; \ } else { \ @@ -170,7 +170,7 @@ llvm_gcroot(obj, 0); \ verifyNull(obj);\ Signdef* sign = getSignature(); \ - UserClass* objCl = obj->getClass()->isArray() ? obj->getClass()->super : obj->getClass()->asClass(); \ + UserClass* objCl = JavaObject::getClass(obj)->isArray() ? JavaObject::getClass(obj)->super : JavaObject::getClass(obj)->asClass(); \ JavaMethod* meth = NULL; \ if (objCl == classDef || isFinal(access)) { \ meth = this; \ @@ -290,7 +290,7 @@ JavaObject* obj = (JavaObject*)_obj; llvm_gcroot(obj, 0); JavaMethod* meth = upcalls->FinalizeObject; - UserClass* cl = obj->getClass()->asClass(); + UserClass* cl = JavaObject::getClass(obj)->asClass(); meth->invokeIntVirtualBuf(this, cl, obj, 0); } @@ -298,6 +298,6 @@ JavaObject* obj = (JavaObject*)_obj; llvm_gcroot(obj, 0); JavaMethod* meth = upcalls->EnqueueReference; - UserClass* cl = obj->getClass()->asClass(); + UserClass* cl = JavaObject::getClass(obj)->asClass(); return (bool)meth->invokeIntSpecialBuf(this, cl, obj, 0); } Modified: vmkit/trunk/lib/J3/VMCore/JavaObject.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/JavaObject.cpp?rev=105284&r1=105283&r2=105284&view=diff ============================================================================== --- vmkit/trunk/lib/J3/VMCore/JavaObject.cpp (original) +++ vmkit/trunk/lib/J3/VMCore/JavaObject.cpp Tue Jun 1 14:54:14 2010 @@ -22,12 +22,12 @@ uint16_t JavaObject::hashCodeGenerator = 1; -void JavaObject::waitIntern(struct timeval* info, bool timed) { +void JavaObject::waitIntern( + JavaObject* self, struct timeval* info, bool timed) { JavaLock* l = 0; - JavaObject* self = this; llvm_gcroot(self, 0); - if (owner()) { + if (owner(self)) { l = self->lock.changeToFatlock(self); JavaThread* thread = JavaThread::get(); thread->waitsOn = l; @@ -102,7 +102,7 @@ } else { assert(!thread->prevWaiting && "Inconstitent state"); // Notify lost, notify someone else. - notify(); + notify(self); } } else { assert(!thread->prevWaiting && !thread->nextWaiting && @@ -121,27 +121,24 @@ JavaThread::get()->getJVM()->illegalMonitorStateException(self); } - assert(owner() && "Not owner after wait"); + assert(owner(self) && "Not owner after wait"); } -void JavaObject::wait() { - JavaObject* self = this; +void JavaObject::wait(JavaObject* self) { llvm_gcroot(self, 0); - self->waitIntern(0, false); + waitIntern(self, NULL, false); } -void JavaObject::timedWait(struct timeval& info) { - JavaObject* self = this; +void JavaObject::timedWait(JavaObject* self, struct timeval& info) { llvm_gcroot(self, 0); - self->waitIntern(&info, true); + waitIntern(self, &info, true); } -void JavaObject::notify() { +void JavaObject::notify(JavaObject* self) { JavaLock* l = 0; - JavaObject* self = this; llvm_gcroot(self, 0); - if (owner()) { + if (owner(self)) { l = self->lock.getFatLock(); if (l) { JavaThread* cur = l->firstThread; @@ -178,15 +175,14 @@ } else { JavaThread::get()->getJVM()->illegalMonitorStateException(self); } - assert(owner() && "Not owner after notify"); + assert(owner(self) && "Not owner after notify"); } -void JavaObject::notifyAll() { +void JavaObject::notifyAll(JavaObject* self) { JavaLock* l = 0; - JavaObject* self = this; llvm_gcroot(self, 0); - if (owner()) { + if (owner(self)) { l = self->lock.getFatLock(); if (l) { JavaThread* cur = l->firstThread; @@ -205,17 +201,16 @@ JavaThread::get()->getJVM()->illegalMonitorStateException(self); } - assert(owner() && "Not owner after notifyAll"); + assert(owner(self) && "Not owner after notifyAll"); } -void JavaObject::decapsulePrimitive(Jnjvm *vm, jvalue* buf, +void JavaObject::decapsulePrimitive(JavaObject* obj, Jnjvm *vm, jvalue* buf, const Typedef* signature) { - JavaObject* obj = this; llvm_gcroot(obj, 0); if (!signature->isPrimitive()) { - if (obj && !(obj->getClass()->isOfTypeName(signature->getName()))) { + if (obj && !(getClass(obj)->isOfTypeName(signature->getName()))) { vm->illegalArgumentException("wrong type argument"); } (*buf).l = reinterpret_cast(obj); @@ -223,7 +218,7 @@ } else if (obj == 0) { vm->illegalArgumentException(""); } else { - UserCommonClass* cl = obj->getClass(); + UserCommonClass* cl = getClass(obj); UserClassPrimitive* value = cl->toPrimitive(vm); const PrimitiveTypedef* prim = (const PrimitiveTypedef*)signature; @@ -332,10 +327,8 @@ return; } -bool JavaObject::instanceOf(UserCommonClass* cl) { - JavaObject* self = this; +bool JavaObject::instanceOf(JavaObject* self, UserCommonClass* cl) { llvm_gcroot(self, 0); - - if (!self) return false; - else return self->getClass()->isAssignableFrom(cl); + if (self == NULL) return false; + else return getClass(self)->isAssignableFrom(cl); } Modified: vmkit/trunk/lib/J3/VMCore/JavaObject.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/JavaObject.h?rev=105284&r1=105283&r2=105284&view=diff ============================================================================== --- vmkit/trunk/lib/J3/VMCore/JavaObject.h (original) +++ vmkit/trunk/lib/J3/VMCore/JavaObject.h Tue Jun 1 14:54:14 2010 @@ -234,14 +234,14 @@ /// waitIntern - internal wait on a monitor /// - void waitIntern(struct timeval *info, bool timed); + static void waitIntern(JavaObject* self, struct timeval *info, bool timed); public: /// getClass - Returns the class of this object. /// - UserCommonClass* getClass() const { - return ((JavaVirtualTable*)getVirtualTable())->cl; + static UserCommonClass* getClass(const JavaObject* self) { + return ((JavaVirtualTable*)self->getVirtualTable())->cl; } /// lock - The monitor of this object. Most of the time null. @@ -250,51 +250,51 @@ /// wait - Java wait. Makes the current thread waiting on a monitor. /// - void wait(); + static void wait(JavaObject* self); /// timedWait - Java timed wait. Makes the current thread waiting on a /// monitor for the given amount of time. /// - void timedWait(struct timeval &info); + static void timedWait(JavaObject* self, struct timeval &info); /// notify - Java notify. Notifies a thread from the availability of the /// monitor. /// - void notify(); + static void notify(JavaObject* self); /// notifyAll - Java notifyAll. Notifies all threads from the availability of /// the monitor. /// - void notifyAll(); + static void notifyAll(JavaObject* self); /// overflowThinLock - Notify that the thin lock has overflowed. /// - void overflowThinLock() { - lock.overflowThinLock(this); + static void overflowThinLock(JavaObject* self) { + llvm_gcroot(self, 0); + self->lock.overflowThinLock(self); } /// instanceOf - Is this object's class of type the given class? /// - bool instanceOf(UserCommonClass* cl); + static bool instanceOf(JavaObject* self, UserCommonClass* cl); /// acquire - Acquire the lock on this object. - void acquire() { - JavaObject* self = this; + static void acquire(JavaObject* self) { llvm_gcroot(self, 0); self->lock.acquire(self); } /// release - Release the lock on this object - void release() { - JavaObject* self = this; + static void release(JavaObject* self) { llvm_gcroot(self, 0); - lock.release(self); + self->lock.release(self); } /// owner - Returns true if the current thread is the owner of this object's /// lock. - bool owner() { - return lock.owner(); + static bool owner(JavaObject* self) { + llvm_gcroot(self, 0); + return self->lock.owner(); } #ifdef SIGSEGV_THROW_NULL @@ -305,24 +305,25 @@ #endif /// lockObj - Get the LockObj if the lock is a fat lock. - JavaLock* lockObj() { - return lock.getFatLock(); + static JavaLock* lockObj(JavaObject* self) { + llvm_gcroot(self, 0); + return self->lock.getFatLock(); } /// decapsulePrimitive - Based on the signature argument, decapsule /// obj as a primitive and put it in the buffer. /// - void decapsulePrimitive(Jnjvm* vm, jvalue* buf, const Typedef* signature); + static void decapsulePrimitive(JavaObject* self, Jnjvm* vm, jvalue* buf, + const Typedef* signature); static uint16_t hashCodeGenerator; /// hashCode - Return the hash code of this object. - uint32_t hashCode() { - JavaObject* self = this; + static uint32_t hashCode(JavaObject* self) { llvm_gcroot(self, 0); uintptr_t oldLock = self->lock.lock; uintptr_t val = (oldLock & mvm::HashMask) >> LockSystem::BitGC; - if (val) return val ^ (uintptr_t)getClass(); + if (val) return val ^ (uintptr_t)getClass(self); else { if (hashCodeGenerator >= (mvm::HashMask >> LockSystem::BitGC)) val = hashCodeGenerator = 1; @@ -335,7 +336,7 @@ __sync_val_compare_and_swap(&(self->lock.lock), oldLock, newLock); } while ((self->lock.lock & mvm::HashMask) == 0); return ((self->lock.lock & mvm::HashMask) >> LockSystem::BitGC) ^ - (uintptr_t)getClass(); + (uintptr_t)getClass(self); } }; Modified: vmkit/trunk/lib/J3/VMCore/JavaRuntimeJIT.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/JavaRuntimeJIT.cpp?rev=105284&r1=105283&r2=105284&view=diff ============================================================================== --- vmkit/trunk/lib/J3/VMCore/JavaRuntimeJIT.cpp (original) +++ vmkit/trunk/lib/J3/VMCore/JavaRuntimeJIT.cpp Tue Jun 1 14:54:14 2010 @@ -155,13 +155,14 @@ JavaMethod* dmeth = lookup->lookupMethodDontThrow(utf8, sign->keyName, false, true, 0); if (!dmeth) { - assert((obj->getClass()->isClass() && - obj->getClass()->asClass()->isInitializing()) && + assert((JavaObject::getClass(obj)->isClass() && + JavaObject::getClass(obj)->asClass()->isInitializing()) && "Class not ready in a virtual lookup."); // Arg, the bytecode is buggy! Perform the lookup on the object class // and do not update offset. - lookup = obj->getClass()->isArray() ? obj->getClass()->super : - obj->getClass()->asClass(); + lookup = JavaObject::getClass(obj)->isArray() ? + JavaObject::getClass(obj)->super : + JavaObject::getClass(obj)->asClass(); dmeth = lookup->lookupMethod(utf8, sign->keyName, false, true, 0); } else { *offset = dmeth->offset; @@ -366,28 +367,31 @@ // Never throws. extern "C" void j3JavaObjectAquire(JavaObject* obj) { llvm_gcroot(obj, 0); - obj->acquire(); + JavaObject::acquire(obj); } // Never throws. extern "C" void j3JavaObjectRelease(JavaObject* obj) { llvm_gcroot(obj, 0); - obj->release(); + JavaObject::release(obj); } // Does not call any Java code. Can not yield a GC. extern "C" void j3ThrowException(JavaObject* obj) { + llvm_gcroot(obj, 0); return JavaThread::get()->throwException(obj); } // Never throws. extern "C" void j3OverflowThinLock(JavaObject* obj) { - obj->overflowThinLock(); + llvm_gcroot(obj, 0); + JavaObject::overflowThinLock(obj); } // Creates a Java object and then throws it. extern "C" JavaObject* j3NullPointerException() { JavaObject *exc = 0; + llvm_gcroot(exc, 0); JavaThread *th = JavaThread::get(); BEGIN_NATIVE_EXCEPTION(1) @@ -408,6 +412,7 @@ // Creates a Java object and then throws it. extern "C" JavaObject* j3NegativeArraySizeException(sint32 val) { JavaObject *exc = 0; + llvm_gcroot(exc, 0); JavaThread *th = JavaThread::get(); BEGIN_NATIVE_EXCEPTION(1) @@ -428,6 +433,7 @@ // Creates a Java object and then throws it. extern "C" JavaObject* j3OutOfMemoryError(sint32 val) { JavaObject *exc = 0; + llvm_gcroot(exc, 0); JavaThread *th = JavaThread::get(); BEGIN_NATIVE_EXCEPTION(1) @@ -448,6 +454,7 @@ // Creates a Java object and then throws it. extern "C" JavaObject* j3StackOverflowError() { JavaObject *exc = 0; + llvm_gcroot(exc, 0); JavaThread *th = JavaThread::get(); BEGIN_NATIVE_EXCEPTION(1) @@ -468,6 +475,7 @@ // Creates a Java object and then throws it. extern "C" JavaObject* j3ArithmeticException() { JavaObject *exc = 0; + llvm_gcroot(exc, 0); JavaThread *th = JavaThread::get(); BEGIN_NATIVE_EXCEPTION(1) @@ -537,6 +545,7 @@ extern "C" JavaObject* j3ArrayStoreException(JavaVirtualTable* VT, JavaVirtualTable* VT2) { JavaObject *exc = 0; + llvm_gcroot(exc, 0); JavaThread *th = JavaThread::get(); BEGIN_NATIVE_EXCEPTION(1) @@ -556,6 +565,7 @@ // Create an exception then throws it. extern "C" void j3ThrowExceptionFromJIT() { JavaObject *exc = 0; + llvm_gcroot(exc, 0); JavaThread *th = JavaThread::get(); BEGIN_NATIVE_EXCEPTION(1) @@ -594,7 +604,7 @@ extern "C" void* j3ResolveVirtualStub(JavaObject* obj) { llvm_gcroot(obj, 0); JavaThread *th = JavaThread::get(); - UserCommonClass* cl = obj->getClass(); + UserCommonClass* cl = JavaObject::getClass(obj); void* result = NULL; BEGIN_NATIVE_EXCEPTION(1) Modified: vmkit/trunk/lib/J3/VMCore/Jni.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/Jni.cpp?rev=105284&r1=105283&r2=105284&view=diff ============================================================================== --- vmkit/trunk/lib/J3/VMCore/Jni.cpp (original) +++ vmkit/trunk/lib/J3/VMCore/Jni.cpp Tue Jun 1 14:54:14 2010 @@ -91,7 +91,7 @@ Jnjvm* vm = myVM(env); Classpath* upcalls = vm->upcalls; - UserCommonClass* cl = meth->getClass(); + UserCommonClass* cl = JavaObject::getClass(meth); if (cl == upcalls->newConstructor) { jmethodID res = (jmethodID)((JavaObjectMethod*)meth)->getInternalMethod(); RETURN_FROM_JNI(res); @@ -367,7 +367,7 @@ Jnjvm* vm = th->getJVM(); // Store local reference - jclass res = (jclass)obj->getClass()->getClassDelegateePtr(vm); + jclass res = (jclass)JavaObject::getClass(obj)->getClassDelegateePtr(vm); RETURN_FROM_JNI(res); END_JNI_EXCEPTION @@ -451,7 +451,7 @@ JavaMethod* meth = (JavaMethod*)methodID; JavaThread* th = JavaThread::get(); Jnjvm* vm = th->getJVM(); - UserClass* cl = getClassFromVirtualMethod(vm, meth, obj->getClass()); + UserClass* cl = getClassFromVirtualMethod(vm, meth, JavaObject::getClass(obj)); res = meth->invokeJavaObjectVirtualAP(vm, cl, obj, ap); va_end(ap); @@ -480,7 +480,7 @@ JavaMethod* meth = (JavaMethod*)methodID; JavaThread* th = JavaThread::get(); Jnjvm* vm = JavaThread::get()->getJVM(); - UserClass* cl = getClassFromVirtualMethod(vm, meth, obj->getClass()); + UserClass* cl = getClassFromVirtualMethod(vm, meth, JavaObject::getClass(obj)); // Store local reference. res = meth->invokeJavaObjectVirtualAP(vm, cl, obj, args); @@ -517,7 +517,8 @@ JavaMethod* meth = (JavaMethod*)methodID; Jnjvm* vm = JavaThread::get()->getJVM(); - UserClass* cl = getClassFromVirtualMethod(vm, meth, self->getClass()); + UserClass* cl = + getClassFromVirtualMethod(vm, meth, JavaObject::getClass(self)); uint32 res = meth->invokeIntVirtualAP(vm, cl, self, ap); va_end(ap); @@ -542,7 +543,7 @@ JavaMethod* meth = (JavaMethod*)methodID; Jnjvm* vm = JavaThread::get()->getJVM(); - UserClass* cl = getClassFromVirtualMethod(vm, meth, obj->getClass()); + UserClass* cl = getClassFromVirtualMethod(vm, meth, JavaObject::getClass(obj)); jboolean res = (jboolean)meth->invokeIntVirtualAP(vm, cl, obj, args); RETURN_FROM_JNI(res); @@ -579,7 +580,7 @@ JavaMethod* meth = (JavaMethod*)methodID; Jnjvm* vm = JavaThread::get()->getJVM(); - UserClass* cl = getClassFromVirtualMethod(vm, meth, obj->getClass()); + UserClass* cl = getClassFromVirtualMethod(vm, meth, JavaObject::getClass(obj)); jbyte res = (jbyte)meth->invokeIntVirtualAP(vm, cl, obj, args); RETURN_FROM_JNI(res); @@ -617,7 +618,7 @@ JavaMethod* meth = (JavaMethod*)methodID; Jnjvm* vm = JavaThread::get()->getJVM(); - UserClass* cl = getClassFromVirtualMethod(vm, meth, obj->getClass()); + UserClass* cl = getClassFromVirtualMethod(vm, meth, JavaObject::getClass(obj)); jchar res = (jchar)meth->invokeIntVirtualAP(vm, cl, obj, args); RETURN_FROM_JNI(res); @@ -655,7 +656,7 @@ JavaMethod* meth = (JavaMethod*)methodID; Jnjvm* vm = JavaThread::get()->getJVM(); - UserClass* cl = getClassFromVirtualMethod(vm, meth, obj->getClass()); + UserClass* cl = getClassFromVirtualMethod(vm, meth, JavaObject::getClass(obj)); jshort res = (jshort)meth->invokeIntVirtualAP(vm, cl, obj, args); RETURN_FROM_JNI(res); @@ -689,7 +690,7 @@ JavaMethod* meth = (JavaMethod*)methodID; Jnjvm* vm = JavaThread::get()->getJVM(); - UserClass* cl = getClassFromVirtualMethod(vm, meth, obj->getClass()); + UserClass* cl = getClassFromVirtualMethod(vm, meth, JavaObject::getClass(obj)); uint32 res = meth->invokeIntVirtualAP(vm, cl, obj, ap); va_end(ap); @@ -714,7 +715,7 @@ JavaMethod* meth = (JavaMethod*)methodID; Jnjvm* vm = JavaThread::get()->getJVM(); - UserClass* cl = getClassFromVirtualMethod(vm, meth, obj->getClass()); + UserClass* cl = getClassFromVirtualMethod(vm, meth, JavaObject::getClass(obj)); jint res = (jint)meth->invokeIntVirtualAP(vm, cl, obj, args); RETURN_FROM_JNI(res); @@ -754,7 +755,7 @@ JavaMethod* meth = (JavaMethod*)methodID; Jnjvm* vm = JavaThread::get()->getJVM(); - UserClass* cl = getClassFromVirtualMethod(vm, meth, obj->getClass()); + UserClass* cl = getClassFromVirtualMethod(vm, meth, JavaObject::getClass(obj)); jlong res = (jlong)meth->invokeLongVirtualAP(vm, cl, obj, args); RETURN_FROM_JNI(res); @@ -788,7 +789,7 @@ JavaMethod* meth = (JavaMethod*)methodID; Jnjvm* vm = JavaThread::get()->getJVM(); - UserClass* cl = getClassFromVirtualMethod(vm, meth, obj->getClass()); + UserClass* cl = getClassFromVirtualMethod(vm, meth, JavaObject::getClass(obj)); jfloat res = meth->invokeFloatVirtualAP(vm, cl, obj, ap); va_end(ap); RETURN_FROM_JNI(res); @@ -811,7 +812,7 @@ JavaMethod* meth = (JavaMethod*)methodID; Jnjvm* vm = JavaThread::get()->getJVM(); - UserClass* cl = getClassFromVirtualMethod(vm, meth, obj->getClass()); + UserClass* cl = getClassFromVirtualMethod(vm, meth, JavaObject::getClass(obj)); jfloat res = (jfloat)meth->invokeFloatVirtualAP(vm, cl, obj, args); RETURN_FROM_JNI(res); @@ -845,7 +846,7 @@ JavaMethod* meth = (JavaMethod*)methodID; Jnjvm* vm = JavaThread::get()->getJVM(); - UserClass* cl = getClassFromVirtualMethod(vm, meth, obj->getClass()); + UserClass* cl = getClassFromVirtualMethod(vm, meth, JavaObject::getClass(obj)); jdouble res = meth->invokeDoubleVirtualAP(vm, cl, obj, ap); va_end(ap); RETURN_FROM_JNI(res); @@ -868,7 +869,7 @@ JavaMethod* meth = (JavaMethod*)methodID; Jnjvm* vm = JavaThread::get()->getJVM(); - UserClass* cl = getClassFromVirtualMethod(vm, meth, obj->getClass()); + UserClass* cl = getClassFromVirtualMethod(vm, meth, JavaObject::getClass(obj)); jdouble res = (jdouble)meth->invokeDoubleVirtualAP(vm, cl, obj, args); RETURN_FROM_JNI(res); @@ -902,7 +903,7 @@ JavaMethod* meth = (JavaMethod*)methodID; Jnjvm* vm = JavaThread::get()->getJVM(); - UserClass* cl = getClassFromVirtualMethod(vm, meth, obj->getClass()); + UserClass* cl = getClassFromVirtualMethod(vm, meth, JavaObject::getClass(obj)); meth->invokeIntVirtualAP(vm, cl, obj, ap); va_end(ap); @@ -927,7 +928,7 @@ JavaMethod* meth = (JavaMethod*)methodID; Jnjvm* vm = JavaThread::get()->getJVM(); - UserClass* cl = getClassFromVirtualMethod(vm, meth, obj->getClass()); + UserClass* cl = getClassFromVirtualMethod(vm, meth, JavaObject::getClass(obj)); meth->invokeIntVirtualAP(vm, cl, obj, args); RETURN_VOID_FROM_JNI; @@ -950,7 +951,7 @@ JavaMethod* meth = (JavaMethod*)methodID; Jnjvm* vm = JavaThread::get()->getJVM(); - UserClass* cl = getClassFromVirtualMethod(vm, meth, obj->getClass()); + UserClass* cl = getClassFromVirtualMethod(vm, meth, JavaObject::getClass(obj)); meth->invokeIntVirtualBuf(vm, cl, obj, (void*)args); @@ -1203,7 +1204,7 @@ JavaMethod* meth = (JavaMethod*)methodID; Jnjvm* vm = JavaThread::get()->getJVM(); - UserClass* cl = getClassFromVirtualMethod(vm, meth, obj->getClass()); + UserClass* cl = getClassFromVirtualMethod(vm, meth, JavaObject::getClass(obj)); meth->invokeIntSpecialAP(vm, cl, obj, ap); va_end(ap); @@ -3499,8 +3500,8 @@ JavaObject* Obj = *(JavaObject**)_obj; llvm_gcroot(Obj, 0); - if (Obj) { - Obj->acquire(); + if (Obj != NULL) { + JavaObject::acquire(Obj); RETURN_FROM_JNI(0); } else { RETURN_FROM_JNI(-1); @@ -3519,13 +3520,13 @@ JavaObject* Obj = *(JavaObject**)_obj; llvm_gcroot(Obj, 0); - if (Obj) { + if (Obj != NULL) { - if (!Obj->owner()) { + if (!JavaObject::owner(Obj)) { JavaThread::get()->getJVM()->illegalMonitorStateException(Obj); } - Obj->release(); + JavaObject::release(Obj); RETURN_FROM_JNI(0); } else { RETURN_FROM_JNI(-1); @@ -3568,7 +3569,7 @@ if (isCopy) (*isCopy) = true; - UserClassArray* cl = array->getClass()->asArrayClass(); + UserClassArray* cl = JavaObject::getClass(array)->asArrayClass(); uint32 logSize = cl->baseClass()->asPrimitiveClass()->logSize; sint32 len = array->size << logSize; void* buffer = malloc(len); @@ -3592,7 +3593,7 @@ JavaArray* array = *(JavaArray**)_array; llvm_gcroot(array, 0); - UserClassArray* cl = array->getClass()->asArrayClass(); + UserClassArray* cl = JavaObject::getClass(array)->asArrayClass(); uint32 logSize = cl->baseClass()->asPrimitiveClass()->logSize; sint32 len = array->size << logSize; memcpy(array->elements, carray, len); Modified: vmkit/trunk/lib/J3/VMCore/Jnjvm.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/Jnjvm.cpp?rev=105284&r1=105283&r2=105284&view=diff ============================================================================== --- vmkit/trunk/lib/J3/VMCore/Jnjvm.cpp (original) +++ vmkit/trunk/lib/J3/VMCore/Jnjvm.cpp Tue Jun 1 14:54:14 2010 @@ -225,12 +225,12 @@ // ExceptionInInitializerError cannot be created because an // OutOfMemoryError occurs, then instead use an OutOfMemoryError object // in place of E in the following step. - if (exc->getClass()->isAssignableFrom(vm->upcalls->newException)) { + if (JavaObject::getClass(exc)->isAssignableFrom(vm->upcalls->newException)) { Classpath* upcalls = classLoader->bootstrapLoader->upcalls; UserClass* clExcp = upcalls->ExceptionInInitializerError; Jnjvm* vm = self->getJVM(); obj = clExcp->doNew(vm); - if (!obj) { + if (obj == NULL) { fprintf(stderr, "implement me"); abort(); } @@ -1244,7 +1244,7 @@ if (exc != NULL) { fprintf(stderr, "Exception %s while bootstrapping VM.", - UTF8Buffer(exc->getClass()->name).cString()); + UTF8Buffer(JavaObject::getClass(exc)->name).cString()); } else { #ifdef SERVICE thread->ServiceException = vm->upcalls->newThrowable->doNew(vm); Modified: vmkit/trunk/lib/J3/VMCore/JnjvmClassLoader.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/JnjvmClassLoader.cpp?rev=105284&r1=105283&r2=105284&view=diff ============================================================================== --- vmkit/trunk/lib/J3/VMCore/JnjvmClassLoader.cpp (original) +++ vmkit/trunk/lib/J3/VMCore/JnjvmClassLoader.cpp Tue Jun 1 14:54:14 2010 @@ -267,6 +267,7 @@ JnjvmClassLoader::JnjvmClassLoader(mvm::BumpPtrAllocator& Alloc, JnjvmClassLoader& JCL, JavaObject* loader, Jnjvm* I) : allocator(Alloc) { + llvm_gcroot(loader, 0); bootstrapLoader = JCL.bootstrapLoader; TheCompiler = bootstrapLoader->getCompiler()->Create("Applicative loader"); @@ -281,7 +282,7 @@ JavaMethod* meth = bootstrapLoader->upcalls->loadInClassLoader; loadClassMethod = - loader->getClass()->asClass()->lookupMethodDontThrow( + JavaObject::getClass(loader)->asClass()->lookupMethodDontThrow( meth->name, meth->type, false, true, &loadClass); assert(loadClass && "Loader does not have a loadClass function"); @@ -855,8 +856,8 @@ vmdata = (VMClassLoader*)(upcalls->vmdataClassLoader->getObjectField(loader)); - if (!vmdata) { - loader->acquire(); + if (vmdata == NULL) { + JavaObject::acquire(loader); vmdata = (VMClassLoader*)(upcalls->vmdataClassLoader->getObjectField(loader)); if (!vmdata) { @@ -864,9 +865,9 @@ JCL = new(*A, "Class loader") JnjvmClassLoader(*A, *vm->bootstrapLoader, loader, vm); vmdata = VMClassLoader::allocate(JCL); - (upcalls->vmdataClassLoader->setObjectField(loader, (JavaObject*)vmdata)); + upcalls->vmdataClassLoader->setObjectField(loader, (JavaObject*)vmdata); } - loader->release(); + JavaObject::release(loader); } else { JCL = vmdata->getClassLoader(); } Modified: vmkit/trunk/lib/J3/VMCore/VirtualTables.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/VirtualTables.cpp?rev=105284&r1=105283&r2=105284&view=diff ============================================================================== --- vmkit/trunk/lib/J3/VMCore/VirtualTables.cpp (original) +++ vmkit/trunk/lib/J3/VMCore/VirtualTables.cpp Tue Jun 1 14:54:14 2010 @@ -76,7 +76,7 @@ /// Method for scanning the root of an object. extern "C" void JavaObjectTracer(JavaObject* obj, uintptr_t closure) { - CommonClass* cl = obj->getClass(); + CommonClass* cl = JavaObject::getClass(obj); assert(cl && "No class"); mvm::Collector::markAndTraceRoot( cl->classLoader->getJavaClassLoaderPtr(), closure); @@ -85,7 +85,7 @@ /// Method for scanning an array whose elements are JavaObjects. This method is /// called by all non-native Java arrays. extern "C" void ArrayObjectTracer(ArrayObject* obj, uintptr_t closure) { - CommonClass* cl = obj->getClass(); + CommonClass* cl = JavaObject::getClass(obj); assert(cl && "No class"); mvm::Collector::markAndTraceRoot( cl->classLoader->getJavaClassLoaderPtr(), closure); @@ -106,7 +106,7 @@ /// Method for scanning regular objects. extern "C" void RegularObjectTracer(JavaObject* obj, uintptr_t closure) { - Class* cl = obj->getClass()->asClass(); + Class* cl = JavaObject::getClass(obj)->asClass(); assert(cl && "Not a class in regular tracer"); mvm::Collector::markAndTraceRoot( cl->classLoader->getJavaClassLoaderPtr(), closure); Modified: vmkit/trunk/mmtk/mmtk-j3/RuntimeHelpers.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/mmtk-j3/RuntimeHelpers.cpp?rev=105284&r1=105283&r2=105284&view=diff ============================================================================== --- vmkit/trunk/mmtk/mmtk-j3/RuntimeHelpers.cpp (original) +++ vmkit/trunk/mmtk/mmtk-j3/RuntimeHelpers.cpp Tue Jun 1 14:54:14 2010 @@ -18,5 +18,5 @@ } extern "C" JavaObject* MMTkGetClass(JavaObject* obj) { - return obj->getClass()->delegatee[0]; + return JavaObject::getClass(obj)->delegatee[0]; } From nicolas.geoffray at lip6.fr Tue Jun 1 13:51:31 2010 From: nicolas.geoffray at lip6.fr (Nicolas Geoffray) Date: Tue, 01 Jun 2010 20:51:31 -0000 Subject: [vmkit-commits] [vmkit] r105287 - in /vmkit/trunk/lib/J3: Classpath/Classpath.inc Classpath/ClasspathConstructor.inc Classpath/ClasspathField.inc Classpath/ClasspathMethod.inc Classpath/ClasspathReflect.h Classpath/ClasspathVMClass.inc Classpath/JavaUpcalls.cpp VMCore/JavaClass.cpp VMCore/Jni.cpp VMCore/Jnjvm.cpp VMCore/JnjvmClassLoader.cpp Message-ID: <20100601205132.0F5C5312800A@llvm.org> Author: geoffray Date: Tue Jun 1 15:51:31 2010 New Revision: 105287 URL: http://llvm.org/viewvc/llvm-project?rev=105287&view=rev Log: Make virtual methods static in JavaObject classes. Modified: vmkit/trunk/lib/J3/Classpath/Classpath.inc vmkit/trunk/lib/J3/Classpath/ClasspathConstructor.inc vmkit/trunk/lib/J3/Classpath/ClasspathField.inc vmkit/trunk/lib/J3/Classpath/ClasspathMethod.inc vmkit/trunk/lib/J3/Classpath/ClasspathReflect.h vmkit/trunk/lib/J3/Classpath/ClasspathVMClass.inc vmkit/trunk/lib/J3/Classpath/JavaUpcalls.cpp vmkit/trunk/lib/J3/VMCore/JavaClass.cpp vmkit/trunk/lib/J3/VMCore/Jni.cpp vmkit/trunk/lib/J3/VMCore/Jnjvm.cpp vmkit/trunk/lib/J3/VMCore/JnjvmClassLoader.cpp Modified: vmkit/trunk/lib/J3/Classpath/Classpath.inc URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/Classpath/Classpath.inc?rev=105287&r1=105286&r2=105287&view=diff ============================================================================== --- vmkit/trunk/lib/J3/Classpath/Classpath.inc (original) +++ vmkit/trunk/lib/J3/Classpath/Classpath.inc Tue Jun 1 15:51:31 2010 @@ -57,13 +57,15 @@ JNIEnv *env, jclass clazz, #endif -JavaObjectField* Field, jobject obj, jboolean val) { +JavaObjectField* Field, JavaObject* obj, jboolean val) { + llvm_gcroot(Field, 0); + llvm_gcroot(obj, 0); BEGIN_NATIVE_EXCEPTION(0) verifyNull(obj); - JavaField* field = Field->getInternalField(); - field->setInt8Field((JavaObject*)obj, (uint8)val); + JavaField* field = JavaObjectField::getInternalField(Field); + field->setInt8Field(obj, (uint8)val); END_NATIVE_EXCEPTION } @@ -73,13 +75,15 @@ JNIEnv *env, jclass clazz, #endif -JavaObjectField* Field, jobject obj, jbyte val) { +JavaObjectField* Field, JavaObject* obj, jbyte val) { + llvm_gcroot(Field, 0); + llvm_gcroot(obj, 0); BEGIN_NATIVE_EXCEPTION(0) verifyNull(obj); - JavaField* field = Field->getInternalField(); - field->setInt8Field((JavaObject*)obj, (uint8)val); + JavaField* field = JavaObjectField::getInternalField(Field); + field->setInt8Field(obj, (uint8)val); END_NATIVE_EXCEPTION } @@ -89,12 +93,14 @@ JNIEnv *env, jclass clazz, #endif -JavaObjectField* Field, jobject obj, jchar val) { +JavaObjectField* Field, JavaObject* obj, jchar val) { + llvm_gcroot(Field, 0); + llvm_gcroot(obj, 0); BEGIN_NATIVE_EXCEPTION(0) verifyNull(obj); - JavaField* field = Field->getInternalField(); + JavaField* field = JavaObjectField::getInternalField(Field); field->setInt16Field((JavaObject*)obj, (uint16)val); END_NATIVE_EXCEPTION @@ -105,13 +111,15 @@ JNIEnv *env, jclass clazz, #endif -JavaObjectField* Field, jobject obj, jshort val) { +JavaObjectField* Field, JavaObject* obj, jshort val) { + llvm_gcroot(Field, 0); + llvm_gcroot(obj, 0); BEGIN_NATIVE_EXCEPTION(0) verifyNull(obj); - JavaField* field = Field->getInternalField(); - field->setInt16Field((JavaObject*)obj, (sint16)val); + JavaField* field = JavaObjectField::getInternalField(Field); + field->setInt16Field(obj, (sint16)val); END_NATIVE_EXCEPTION } @@ -121,13 +129,15 @@ JNIEnv *env, jclass clazz, #endif -JavaObjectField* Field, jobject obj, jint val) { +JavaObjectField* Field, JavaObject* obj, jint val) { + llvm_gcroot(Field, 0); + llvm_gcroot(obj, 0); BEGIN_NATIVE_EXCEPTION(0) verifyNull(obj); - JavaField* field = Field->getInternalField(); - field->setInt32Field((JavaObject*)obj, (sint32)val); + JavaField* field = JavaObjectField::getInternalField(Field); + field->setInt32Field(obj, (sint32)val); END_NATIVE_EXCEPTION } @@ -137,13 +147,15 @@ JNIEnv *env, jclass clazz, #endif -JavaObjectField* Field, jobject obj, jlong val) { +JavaObjectField* Field, JavaObject* obj, jlong val) { + llvm_gcroot(Field, 0); + llvm_gcroot(obj, 0); BEGIN_NATIVE_EXCEPTION(0) verifyNull(obj); - JavaField* field = Field->getInternalField(); - field->setLongField((JavaObject*)obj, (sint64)val); + JavaField* field = JavaObjectField::getInternalField(Field); + field->setLongField(obj, (sint64)val); END_NATIVE_EXCEPTION } @@ -153,13 +165,15 @@ JNIEnv *env, jclass clazz, #endif -JavaObjectField* Field, jobject obj, jfloat val) { +JavaObjectField* Field, JavaObject* obj, jfloat val) { + llvm_gcroot(Field, 0); + llvm_gcroot(obj, 0); BEGIN_NATIVE_EXCEPTION(0) verifyNull(obj); - JavaField* field = Field->getInternalField(); - field->setFloatField((JavaObject*)obj, (float)val); + JavaField* field = JavaObjectField::getInternalField(Field); + field->setFloatField(obj, (float)val); END_NATIVE_EXCEPTION } @@ -169,13 +183,15 @@ JNIEnv *env, jclass clazz, #endif -JavaObjectField* Field, jobject obj, jdouble val) { +JavaObjectField* Field, JavaObject* obj, jdouble val) { + llvm_gcroot(Field, 0); + llvm_gcroot(obj, 0); BEGIN_NATIVE_EXCEPTION(0) verifyNull(obj); - JavaField* field = Field->getInternalField(); - field->setDoubleField((JavaObject*)obj, (double)val); + JavaField* field = JavaObjectField::getInternalField(Field); + field->setDoubleField(obj, (double)val); END_NATIVE_EXCEPTION } @@ -185,60 +201,67 @@ JNIEnv *env, jclass clazz, #endif -JavaObjectField* Field, jobject obj, jobject val) { +JavaObjectField* Field, JavaObject* obj, JavaObject* val) { + llvm_gcroot(Field, 0); + llvm_gcroot(obj, 0); + llvm_gcroot(val, 0); BEGIN_NATIVE_EXCEPTION(0) verifyNull(obj); - JavaField* field = Field->getInternalField(); - field->setObjectField((JavaObject*)obj, (JavaObject*)val); + JavaField* field = JavaObjectField::getInternalField(Field); + field->setObjectField(obj, val); END_NATIVE_EXCEPTION } -JNIEXPORT jobject JNICALL Java_java_io_VMObjectInputStream_allocateObject( +JNIEXPORT JavaObject* JNICALL Java_java_io_VMObjectInputStream_allocateObject( #ifdef NATIVE_JNI JNIEnv *env, jclass clazz, #endif -jclass target, jclass constr, JavaObjectConstructor* cons) { +JavaObject* target, JavaObject* constr, JavaObjectConstructor* cons) { - jobject res = 0; + JavaObject* res = 0; + llvm_gcroot(res, 0); + llvm_gcroot(target, 0); + llvm_gcroot(constr, 0); BEGIN_NATIVE_EXCEPTION(0) Jnjvm* vm = JavaThread::get()->getJVM(); UserClass* cl = - (UserClass*)UserCommonClass::resolvedImplClass(vm, (JavaObject*)target, true); - JavaObject* obj = cl->doNew(vm); - JavaMethod* meth = cons->getInternalMethod(); - meth->invokeIntSpecial(vm, cl, obj); - res = (jobject)obj; + (UserClass*)UserCommonClass::resolvedImplClass(vm, target, true); + res = cl->doNew(vm); + JavaMethod* meth = JavaObjectConstructor::getInternalMethod(cons); + meth->invokeIntSpecial(vm, cl, res); END_NATIVE_EXCEPTION return res; } -JNIEXPORT jobject JNICALL Java_java_lang_reflect_VMArray_createObjectArray( +JNIEXPORT JavaObject* JNICALL Java_java_lang_reflect_VMArray_createObjectArray( #ifdef NATIVE_JNI JNIEnv * env, jclass thisClass, #endif -jclass arrayType, jint arrayLength) { +JavaObject* arrayType, jint arrayLength) { - jobject res = 0; + JavaObject* res = 0; + llvm_gcroot(arrayType, 0); + llvm_gcroot(res, 0); BEGIN_NATIVE_EXCEPTION(0) Jnjvm* vm = JavaThread::get()->getJVM(); UserCommonClass* base = - UserCommonClass::resolvedImplClass(vm, (JavaObject*)arrayType, true); + UserCommonClass::resolvedImplClass(vm, arrayType, true); JnjvmClassLoader* loader = base->classLoader; const UTF8* name = base->getName(); const UTF8* arrayName = loader->constructArrayName(1, name); UserClassArray* array = loader->constructArray(arrayName, base); - res = (jobject)array->doNew(arrayLength, vm); + res = array->doNew(arrayLength, vm); END_NATIVE_EXCEPTION @@ -264,6 +287,8 @@ #endif JavaObject* unsafe, JavaObject* obj, jlong offset, jlong expect, jlong update) { + llvm_gcroot(unsafe, 0); + llvm_gcroot(obj, 0); jlong *ptr; jlong value; @@ -287,6 +312,8 @@ #endif JavaObject* unsafe, JavaObject* obj, jlong offset, jint expect, jint update) { + llvm_gcroot(unsafe, 0); + llvm_gcroot(obj, 0); jint *ptr; ptr = (jint *) (((uint8 *) obj) + offset); @@ -299,8 +326,12 @@ #ifdef NATIVE_JNI JNIEnv *env, #endif -JavaObject* unsafe, JavaObject* obj, jlong offset, jobject expect, -jobject update) { +JavaObject* unsafe, JavaObject* obj, jlong offset, JavaObject* expect, +JavaObject* update) { + llvm_gcroot(unsafe, 0); + llvm_gcroot(obj, 0); + llvm_gcroot(expect, 0); + llvm_gcroot(update, 0); jobject *ptr; @@ -314,14 +345,16 @@ #ifdef NATIVE_JNI JNIEnv *env, #endif -jobject unsafe, jobject obj, jlong offset, jobject value) { +JavaObject* unsafe, JavaObject* obj, jlong offset, JavaObject* value) { + llvm_gcroot(unsafe, 0); + llvm_gcroot(obj, 0); + llvm_gcroot(value, 0); - jobject *ptr; + JavaObject** ptr; - ptr = (jobject *) (((uint8 *) obj) + offset); + ptr = (JavaObject**) (((uint8 *) obj) + offset); *ptr = value; } - } Modified: vmkit/trunk/lib/J3/Classpath/ClasspathConstructor.inc URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/Classpath/ClasspathConstructor.inc?rev=105287&r1=105286&r2=105287&view=diff ============================================================================== --- vmkit/trunk/lib/J3/Classpath/ClasspathConstructor.inc (original) +++ vmkit/trunk/lib/J3/Classpath/ClasspathConstructor.inc Tue Jun 1 15:51:31 2010 @@ -39,8 +39,8 @@ BEGIN_NATIVE_EXCEPTION(0) verifyNull(cons); - UserClass* cl = cons->getClass(); - JavaMethod* meth = cons->getInternalMethod(); + UserClass* cl = JavaObjectConstructor::getClass(cons); + JavaMethod* meth = JavaObjectConstructor::getInternalMethod(cons); JnjvmClassLoader* loader = cl->classLoader; res = meth->getParameterTypes(loader); @@ -61,7 +61,7 @@ BEGIN_NATIVE_EXCEPTION(0) verifyNull(cons); - JavaMethod* meth = cons->getInternalMethod(); + JavaMethod* meth = JavaObjectConstructor::getInternalMethod(cons); res = meth->access; END_NATIVE_EXCEPTION @@ -87,8 +87,8 @@ llvm_gcroot(excp, 0); Jnjvm* vm = JavaThread::get()->getJVM(); - JavaMethod* meth = cons->getInternalMethod(); - UserClass* cl = cons->getClass(); + JavaMethod* meth = JavaObjectConstructor::getInternalMethod(cons); + UserClass* cl = JavaObjectConstructor::getClass(cons); sint32 nbArgs = args ? args->size : 0; Signdef* sign = meth->getSignature(); sint32 size = sign->nbArguments; @@ -182,8 +182,8 @@ BEGIN_NATIVE_EXCEPTION(0) verifyNull(cons); - UserClass* cl = cons->getClass(); - JavaMethod* meth = cons->getInternalMethod(); + UserClass* cl = JavaObjectConstructor::getClass(cons); + JavaMethod* meth = JavaObjectConstructor::getInternalMethod(cons); JnjvmClassLoader* loader = cl->classLoader; res = (ArrayObject*)meth->getExceptionTypes(loader); @@ -207,7 +207,7 @@ BEGIN_NATIVE_EXCEPTION(0) verifyNull(Meth); - JavaMethod* meth = Meth->getInternalMethod(); + JavaMethod* meth = JavaObjectConstructor::getInternalMethod(Meth); Jnjvm* vm = JavaThread::get()->getJVM(); result = vm->internalUTF8ToStr(meth->type); Modified: vmkit/trunk/lib/J3/Classpath/ClasspathField.inc URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/Classpath/ClasspathField.inc?rev=105287&r1=105286&r2=105287&view=diff ============================================================================== --- vmkit/trunk/lib/J3/Classpath/ClasspathField.inc (original) +++ vmkit/trunk/lib/J3/Classpath/ClasspathField.inc Tue Jun 1 15:51:31 2010 @@ -31,7 +31,7 @@ BEGIN_NATIVE_EXCEPTION(0) - JavaField* field = Field->getInternalField(); + JavaField* field = JavaObjectField::getInternalField(Field); res = field->access; END_NATIVE_EXCEPTION @@ -53,8 +53,8 @@ BEGIN_NATIVE_EXCEPTION(0) Jnjvm* vm = JavaThread::get()->getJVM(); - UserClass* cl = Field->getClass(); - JavaField* field = Field->getInternalField(); + UserClass* cl = JavaObjectField::getClass(Field); + JavaField* field = JavaObjectField::getInternalField(Field); JnjvmClassLoader* loader = cl->classLoader; UserCommonClass* fieldCl = field->getSignature()->assocClass(loader); res = fieldCl->getClassDelegatee(vm); @@ -78,8 +78,8 @@ BEGIN_NATIVE_EXCEPTION(0) Jnjvm* vm = JavaThread::get()->getJVM(); - UserClass* cl = Field->getClass(); - JavaField* field = Field->getInternalField(); + UserClass* cl = JavaObjectField::getClass(Field); + JavaField* field = JavaObjectField::getInternalField(Field); const Typedef* type = field->getSignature(); bool stat = isStatic(field->access); void* StatPtr = 0; @@ -128,8 +128,8 @@ BEGIN_NATIVE_EXCEPTION(0) Jnjvm* vm = JavaThread::get()->getJVM(); - UserClass* cl = Field->getClass(); - JavaField* field = Field->getInternalField(); + UserClass* cl = JavaObjectField::getClass(Field); + JavaField* field = JavaObjectField::getInternalField(Field); bool stat = isStatic(field->access); void* StatPtr = 0; @@ -179,8 +179,8 @@ BEGIN_NATIVE_EXCEPTION(0) Jnjvm* vm = JavaThread::get()->getJVM(); - UserClass* cl = Field->getClass(); - JavaField* field = Field->getInternalField(); + UserClass* cl = JavaObjectField::getClass(Field); + JavaField* field = JavaObjectField::getInternalField(Field); bool stat = isStatic(field->access); void* StatPtr = 0; @@ -221,8 +221,8 @@ BEGIN_NATIVE_EXCEPTION(0) Jnjvm* vm = JavaThread::get()->getJVM(); - UserClass* cl = Field->getClass(); - JavaField* field = Field->getInternalField(); + UserClass* cl = JavaObjectField::getClass(Field); + JavaField* field = JavaObjectField::getInternalField(Field); bool stat = isStatic(field->access); void* StatPtr = 0; @@ -273,8 +273,8 @@ BEGIN_NATIVE_EXCEPTION(0) Jnjvm* vm = JavaThread::get()->getJVM(); - UserClass* cl = Field->getClass(); - JavaField* field = Field->getInternalField(); + UserClass* cl = JavaObjectField::getClass(Field); + JavaField* field = JavaObjectField::getInternalField(Field); bool stat = isStatic(field->access); void* StatPtr = 0; @@ -314,8 +314,8 @@ BEGIN_NATIVE_EXCEPTION(0) Jnjvm* vm = JavaThread::get()->getJVM(); - UserClass* cl = Field->getClass(); - JavaField* field = Field->getInternalField(); + UserClass* cl = JavaObjectField::getClass(Field); + JavaField* field = JavaObjectField::getInternalField(Field); bool stat = isStatic(field->access); void* StatPtr = 0; @@ -357,8 +357,8 @@ BEGIN_NATIVE_EXCEPTION(0) Jnjvm* vm = JavaThread::get()->getJVM(); - UserClass* cl = Field->getClass(); - JavaField* field = Field->getInternalField(); + UserClass* cl = JavaObjectField::getClass(Field); + JavaField* field = JavaObjectField::getInternalField(Field); bool stat = isStatic(field->access); void* StatPtr = 0; @@ -400,8 +400,8 @@ BEGIN_NATIVE_EXCEPTION(0) Jnjvm* vm = JavaThread::get()->getJVM(); - UserClass* cl = Field->getClass(); - JavaField* field = Field->getInternalField(); + UserClass* cl = JavaObjectField::getClass(Field); + JavaField* field = JavaObjectField::getInternalField(Field); bool stat = isStatic(field->access); void* StatPtr = 0; @@ -455,8 +455,8 @@ BEGIN_NATIVE_EXCEPTION(0) Jnjvm* vm = JavaThread::get()->getJVM(); - UserClass* cl = Field->getClass(); - JavaField* field = Field->getInternalField(); + UserClass* cl = JavaObjectField::getClass(Field); + JavaField* field = JavaObjectField::getInternalField(Field); bool stat = isStatic(field->access); void* StatPtr = 0; @@ -532,8 +532,8 @@ BEGIN_NATIVE_EXCEPTION(0) Jnjvm* vm = JavaThread::get()->getJVM(); - UserClass* cl = Field->getClass(); - JavaField* field = Field->getInternalField(); + UserClass* cl = JavaObjectField::getClass(Field); + JavaField* field = JavaObjectField::getInternalField(Field); jvalue buf; bool stat = isStatic(field->access); void* StatPtr = 0; @@ -587,8 +587,8 @@ BEGIN_NATIVE_EXCEPTION(0) Jnjvm* vm = JavaThread::get()->getJVM(); - UserClass* cl = Field->getClass(); - JavaField* field = Field->getInternalField(); + UserClass* cl = JavaObjectField::getClass(Field); + JavaField* field = JavaObjectField::getInternalField(Field); bool stat = isStatic(field->access); void* StatPtr = 0; @@ -626,8 +626,8 @@ BEGIN_NATIVE_EXCEPTION(0) Jnjvm* vm = JavaThread::get()->getJVM(); - UserClass* cl = Field->getClass(); - JavaField* field = Field->getInternalField(); + UserClass* cl = JavaObjectField::getClass(Field); + JavaField* field = JavaObjectField::getInternalField(Field); bool stat = isStatic(field->access); void* StatPtr = 0; @@ -674,8 +674,8 @@ BEGIN_NATIVE_EXCEPTION(0) Jnjvm* vm = JavaThread::get()->getJVM(); - UserClass* cl = Field->getClass(); - JavaField* field = Field->getInternalField(); + UserClass* cl = JavaObjectField::getClass(Field); + JavaField* field = JavaObjectField::getInternalField(Field); bool stat = isStatic(field->access); void* StatPtr = 0; @@ -719,8 +719,8 @@ BEGIN_NATIVE_EXCEPTION(0) Jnjvm* vm = JavaThread::get()->getJVM(); - UserClass* cl = Field->getClass(); - JavaField* field = Field->getInternalField(); + UserClass* cl = JavaObjectField::getClass(Field); + JavaField* field = JavaObjectField::getInternalField(Field); bool stat = isStatic(field->access); void* StatPtr = 0; @@ -765,8 +765,8 @@ BEGIN_NATIVE_EXCEPTION(0) Jnjvm* vm = JavaThread::get()->getJVM(); - UserClass* cl = Field->getClass(); - JavaField* field = Field->getInternalField(); + UserClass* cl = JavaObjectField::getClass(Field); + JavaField* field = JavaObjectField::getInternalField(Field); bool stat = isStatic(field->access); void* StatPtr = 0; @@ -809,8 +809,8 @@ BEGIN_NATIVE_EXCEPTION(0) Jnjvm* vm = JavaThread::get()->getJVM(); - UserClass* cl = Field->getClass(); - JavaField* field = Field->getInternalField(); + UserClass* cl = JavaObjectField::getClass(Field); + JavaField* field = JavaObjectField::getInternalField(Field); bool stat = isStatic(field->access); void* StatPtr = 0; @@ -851,8 +851,8 @@ BEGIN_NATIVE_EXCEPTION(0) Jnjvm* vm = JavaThread::get()->getJVM(); - UserClass* cl = Field->getClass(); - JavaField* field = Field->getInternalField(); + UserClass* cl = JavaObjectField::getClass(Field); + JavaField* field = JavaObjectField::getInternalField(Field); bool stat = isStatic(field->access); void* StatPtr = 0; @@ -891,8 +891,8 @@ BEGIN_NATIVE_EXCEPTION(0) Jnjvm* vm = JavaThread::get()->getJVM(); - UserClass* cl = Field->getClass(); - JavaField* field = Field->getInternalField(); + UserClass* cl = JavaObjectField::getClass(Field); + JavaField* field = JavaObjectField::getInternalField(Field); bool stat = isStatic(field->access); void* StatPtr = 0; @@ -927,7 +927,7 @@ llvm_gcroot(Field, 0); llvm_gcroot(Unsafe, 0); - JavaField* field = Field->getInternalField(); + JavaField* field = JavaObjectField::getInternalField(Field); return (jlong)field->ptrOffset; } Modified: vmkit/trunk/lib/J3/Classpath/ClasspathMethod.inc URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/Classpath/ClasspathMethod.inc?rev=105287&r1=105286&r2=105287&view=diff ============================================================================== --- vmkit/trunk/lib/J3/Classpath/ClasspathMethod.inc (original) +++ vmkit/trunk/lib/J3/Classpath/ClasspathMethod.inc Tue Jun 1 15:51:31 2010 @@ -36,7 +36,7 @@ BEGIN_NATIVE_EXCEPTION(0) - JavaMethod* meth = Meth->getInternalMethod(); + JavaMethod* meth = JavaObjectMethod::getInternalMethod(Meth); res = meth->access; END_NATIVE_EXCEPTION @@ -56,8 +56,8 @@ BEGIN_NATIVE_EXCEPTION(0) - UserClass* cl = Meth->getClass(); - JavaMethod* meth = Meth->getInternalMethod(); + UserClass* cl = JavaObjectMethod::getClass(Meth); + JavaMethod* meth = JavaObjectMethod::getInternalMethod(Meth); JnjvmClassLoader* loader = cl->classLoader; res = meth->getReturnType(loader); @@ -79,8 +79,8 @@ BEGIN_NATIVE_EXCEPTION(0) - UserClass* cl = Meth->getClass(); - JavaMethod* meth = Meth->getInternalMethod(); + UserClass* cl = JavaObjectMethod::getClass(Meth); + JavaMethod* meth = JavaObjectMethod::getInternalMethod(Meth); JnjvmClassLoader* loader = cl->classLoader; res = (meth->getParameterTypes(loader)); @@ -109,7 +109,7 @@ Jnjvm* vm = JavaThread::get()->getJVM(); - JavaMethod* meth = Meth->getInternalMethod(); + JavaMethod* meth = JavaObjectMethod::getInternalMethod(Meth); sint32 nbArgs = args ? args->size : 0; Signdef* sign = meth->getSignature(); @@ -274,8 +274,8 @@ BEGIN_NATIVE_EXCEPTION(0) verifyNull(Meth); - UserClass* cl = Meth->getClass(); - JavaMethod* meth = Meth->getInternalMethod(); + UserClass* cl = JavaObjectMethod::getClass(Meth); + JavaMethod* meth = JavaObjectMethod::getInternalMethod(Meth); JnjvmClassLoader* loader = cl->classLoader; res = meth->getExceptionTypes(loader); @@ -297,7 +297,7 @@ BEGIN_NATIVE_EXCEPTION(0) verifyNull(Meth); - JavaMethod* meth = Meth->getInternalMethod(); + JavaMethod* meth = JavaObjectMethod::getInternalMethod(Meth); Jnjvm* vm = JavaThread::get()->getJVM(); result = vm->internalUTF8ToStr(meth->type); Modified: vmkit/trunk/lib/J3/Classpath/ClasspathReflect.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/Classpath/ClasspathReflect.h?rev=105287&r1=105286&r2=105287&view=diff ============================================================================== --- vmkit/trunk/lib/J3/Classpath/ClasspathReflect.h (original) +++ vmkit/trunk/lib/J3/Classpath/ClasspathReflect.h Tue Jun 1 15:51:31 2010 @@ -22,7 +22,7 @@ namespace j3 { class JavaObjectClass : public JavaObject { -public: +private: JavaObject* signers; JavaObject* pd; UserCommonClass* vmdata; @@ -30,8 +30,25 @@ public: - UserCommonClass* getClass() { - return vmdata; + static UserCommonClass* getClass(JavaObjectClass* cl) { + llvm_gcroot(cl, 0); + return cl->vmdata; + } + + static void setClass(JavaObjectClass* cl, UserCommonClass* vmdata) { + llvm_gcroot(cl, 0); + cl->vmdata = vmdata; + } + + static void setProtectionDomain(JavaObjectClass* cl, JavaObject* pd) { + llvm_gcroot(cl, 0); + llvm_gcroot(pd, 0); + cl->pd = pd; + } + + static JavaObject* getProtectionDomain(JavaObjectClass* cl) { + llvm_gcroot(cl, 0); + return cl->pd; } static void staticTracer(JavaObjectClass* obj, uintptr_t closure) { @@ -59,12 +76,16 @@ mvm::Collector::markAndTrace(obj, &obj->declaringClass, closure); } - JavaField* getInternalField() { - return &(((UserClass*)declaringClass->vmdata)->virtualFields[slot]); + static JavaField* getInternalField(JavaObjectField* self) { + llvm_gcroot(self, 0); + UserCommonClass* cls = JavaObjectClass::getClass(self->declaringClass); + return &(cls->asClass()->virtualFields[self->slot]); } - UserClass* getClass() { - return declaringClass->vmdata->asClass(); + static UserClass* getClass(JavaObjectField* self) { + llvm_gcroot(self, 0); + UserCommonClass* cls = JavaObjectClass::getClass(self->declaringClass); + return cls->asClass(); } }; @@ -83,12 +104,16 @@ mvm::Collector::markAndTrace(obj, &obj->declaringClass, closure); } - JavaMethod* getInternalMethod() { - return &(((UserClass*)declaringClass->vmdata)->virtualMethods[slot]); + static JavaMethod* getInternalMethod(JavaObjectMethod* self) { + llvm_gcroot(self, 0); + UserCommonClass* cls = JavaObjectClass::getClass(self->declaringClass); + return &(cls->asClass()->virtualMethods[self->slot]); } - UserClass* getClass() { - return declaringClass->vmdata->asClass(); + static UserClass* getClass(JavaObjectMethod* self) { + llvm_gcroot(self, 0); + UserCommonClass* cls = JavaObjectClass::getClass(self->declaringClass); + return cls->asClass(); } }; @@ -96,20 +121,24 @@ class JavaObjectConstructor : public JavaObject { private: uint8 flag; - JavaObjectClass* clazz; + JavaObjectClass* declaringClass; uint32 slot; public: static void staticTracer(JavaObjectConstructor* obj, uintptr_t closure) { - mvm::Collector::markAndTrace(obj, &obj->clazz, closure); + mvm::Collector::markAndTrace(obj, &obj->declaringClass, closure); } - JavaMethod* getInternalMethod() { - return &(((UserClass*)clazz->vmdata)->virtualMethods[slot]); + static JavaMethod* getInternalMethod(JavaObjectConstructor* self) { + llvm_gcroot(self, 0); + UserCommonClass* cls = JavaObjectClass::getClass(self->declaringClass); + return &(cls->asClass()->virtualMethods[self->slot]); } - UserClass* getClass() { - return clazz->vmdata->asClass(); + static UserClass* getClass(JavaObjectConstructor* self) { + llvm_gcroot(self, 0); + UserCommonClass* cls = JavaObjectClass::getClass(self->declaringClass); + return cls->asClass(); } }; @@ -141,14 +170,17 @@ public: - void setDetailedMessage(JavaObject* obj) { - detailedMessage = obj; + static void setDetailedMessage(JavaObjectThrowable* self, JavaObject* obj) { + llvm_gcroot(self, 0); + llvm_gcroot(obj, 0); + self->detailedMessage = obj; } - void fillInStackTrace() { - cause = this; - vmState = internalFillInStackTrace(this); - stackTrace = 0; + static void fillInStackTrace(JavaObjectThrowable* self) { + llvm_gcroot(self, 0); + self->cause = self; + self->vmState = internalFillInStackTrace(self); + self->stackTrace = NULL; } }; @@ -159,13 +191,23 @@ JavaObject* nextOnQueue; public: - void init(JavaObject* r, JavaObject* q) { - referent = r; - queue = q; + static void init(JavaObjectReference* self, JavaObject* r, JavaObject* q) { + llvm_gcroot(self, 0); + llvm_gcroot(r, 0); + llvm_gcroot(q, 0); + self->referent = r; + self->queue = q; + } + + static JavaObject** getReferentPtr(JavaObjectReference* self) { + llvm_gcroot(self, 0); + return &(self->referent); + } + static void setReferent(JavaObjectReference* self, JavaObject* r) { + llvm_gcroot(self, 0); + llvm_gcroot(r, 0); + self->referent = r; } - - JavaObject** getReferentPtr() { return &referent; } - void setReferent(JavaObject* r) { referent = r; } static void staticTracer(JavaObjectReference* obj, uintptr_t closure) { mvm::Collector::markAndTrace(obj, &obj->queue, closure); Modified: vmkit/trunk/lib/J3/Classpath/ClasspathVMClass.inc URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/Classpath/ClasspathVMClass.inc?rev=105287&r1=105286&r2=105287&view=diff ============================================================================== --- vmkit/trunk/lib/J3/Classpath/ClasspathVMClass.inc (original) +++ vmkit/trunk/lib/J3/Classpath/ClasspathVMClass.inc Tue Jun 1 15:51:31 2010 @@ -35,7 +35,7 @@ llvm_gcroot(klass, 0); - UserCommonClass* cl = klass->getClass(); + UserCommonClass* cl = JavaObjectClass::getClass(klass); return cl->isArray(); Modified: vmkit/trunk/lib/J3/Classpath/JavaUpcalls.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/Classpath/JavaUpcalls.cpp?rev=105287&r1=105286&r2=105287&view=diff ============================================================================== --- vmkit/trunk/lib/J3/Classpath/JavaUpcalls.cpp (original) +++ vmkit/trunk/lib/J3/Classpath/JavaUpcalls.cpp Tue Jun 1 15:51:31 2010 @@ -302,7 +302,7 @@ BEGIN_NATIVE_EXCEPTION(0) - reference->init(referent, 0); + JavaObjectReference::init(reference, referent, 0); JavaThread::get()->getJVM()->addWeakReference(reference); END_NATIVE_EXCEPTION @@ -318,7 +318,7 @@ BEGIN_NATIVE_EXCEPTION(0) - reference->init(referent, queue); + JavaObjectReference::init(reference, referent, queue); JavaThread::get()->getJVM()->addWeakReference(reference); END_NATIVE_EXCEPTION @@ -332,7 +332,7 @@ BEGIN_NATIVE_EXCEPTION(0) - reference->init(referent, 0); + JavaObjectReference::init(reference, referent, 0); JavaThread::get()->getJVM()->addSoftReference(reference); END_NATIVE_EXCEPTION @@ -348,7 +348,7 @@ BEGIN_NATIVE_EXCEPTION(0) - reference->init(referent, queue); + JavaObjectReference::init(reference, referent, queue); JavaThread::get()->getJVM()->addSoftReference(reference); END_NATIVE_EXCEPTION @@ -364,7 +364,7 @@ BEGIN_NATIVE_EXCEPTION(0) - reference->init(referent, queue); + JavaObjectReference::init(reference, referent, queue); JavaThread::get()->getJVM()->addPhantomReference(reference); END_NATIVE_EXCEPTION @@ -396,7 +396,7 @@ BEGIN_NATIVE_EXCEPTION(0) - cl = klass->getClass(); + cl = JavaObjectClass::getClass(klass); END_NATIVE_EXCEPTION @@ -412,7 +412,7 @@ JavaThread* th = JavaThread::get(); UserClass* cl = th->getCallingClassLevel(2); - if (cl) res = cl->getClassDelegatee(th->getJVM()); + if (cl != NULL) res = cl->getClassDelegatee(th->getJVM()); END_NATIVE_EXCEPTION @@ -1088,16 +1088,21 @@ gc** Jnjvm::getReferentPtr(gc* _obj) { JavaObjectReference* obj = (JavaObjectReference*)_obj; - return (gc**)obj->getReferentPtr(); + llvm_gcroot(obj, 0); + return (gc**)JavaObjectReference::getReferentPtr(obj); } -void Jnjvm::setReferent(gc* obj, gc* val) { - ((JavaObjectReference*)obj)->setReferent((JavaObject*)val); +void Jnjvm::setReferent(gc* _obj, gc* val) { + JavaObjectReference* obj = (JavaObjectReference*)_obj; + llvm_gcroot(obj, 0); + llvm_gcroot(val, 0); + JavaObjectReference::setReferent(obj, (JavaObject*)val); } void Jnjvm::clearReferent(gc* _obj) { JavaObjectReference* obj = (JavaObjectReference*)_obj; - obj->setReferent(0); + llvm_gcroot(obj, 0); + JavaObjectReference::setReferent(obj, NULL); } #include "ClasspathConstructor.inc" Modified: vmkit/trunk/lib/J3/VMCore/JavaClass.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/JavaClass.cpp?rev=105287&r1=105286&r2=105287&view=diff ============================================================================== --- vmkit/trunk/lib/J3/VMCore/JavaClass.cpp (original) +++ vmkit/trunk/lib/J3/VMCore/JavaClass.cpp Tue Jun 1 15:51:31 2010 @@ -1165,7 +1165,7 @@ llvm_gcroot(clazz, 0); - UserCommonClass* cl = ((JavaObjectClass*)clazz)->getClass(); + UserCommonClass* cl = JavaObjectClass::getClass((JavaObjectClass*)clazz); assert(cl && "No class in Class object"); if (cl->isClass()) { cl->asClass()->resolveClass(); Modified: vmkit/trunk/lib/J3/VMCore/Jni.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/Jni.cpp?rev=105287&r1=105286&r2=105287&view=diff ============================================================================== --- vmkit/trunk/lib/J3/VMCore/Jni.cpp (original) +++ vmkit/trunk/lib/J3/VMCore/Jni.cpp Tue Jun 1 15:51:31 2010 @@ -93,10 +93,10 @@ Classpath* upcalls = vm->upcalls; UserCommonClass* cl = JavaObject::getClass(meth); if (cl == upcalls->newConstructor) { - jmethodID res = (jmethodID)((JavaObjectMethod*)meth)->getInternalMethod(); + jmethodID res = (jmethodID)JavaObjectMethod::getInternalMethod((JavaObjectMethod*)meth); RETURN_FROM_JNI(res); } else if (cl == upcalls->newMethod) { - jmethodID res = (jmethodID)((JavaObjectConstructor*)meth)->getInternalMethod(); + jmethodID res = (jmethodID)JavaObjectConstructor::getInternalMethod((JavaObjectConstructor*)meth); RETURN_FROM_JNI(res); } Modified: vmkit/trunk/lib/J3/VMCore/Jnjvm.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/Jnjvm.cpp?rev=105287&r1=105286&r2=105287&view=diff ============================================================================== --- vmkit/trunk/lib/J3/VMCore/Jnjvm.cpp (original) +++ vmkit/trunk/lib/J3/VMCore/Jnjvm.cpp Tue Jun 1 15:51:31 2010 @@ -365,7 +365,7 @@ // Don't call init, or else we'll get a new stack overflow error. JavaObject* obj = upcalls->StackOverflowError->doNew(this); llvm_gcroot(obj, 0); - ((JavaObjectThrowable*)obj)->fillInStackTrace(); + JavaObjectThrowable::fillInStackTrace((JavaObjectThrowable*)obj); return obj; } @@ -733,13 +733,14 @@ if (!getDelegatee()) { UserClass* cl = vm->upcalls->newClass; delegatee = (JavaObjectClass*)cl->doNew(vm); - delegatee->vmdata = this; + JavaObjectClass::setClass(delegatee, this); if (!pd && isArray()) { base = (JavaObjectClass*) asArrayClass()->baseClass()->getClassDelegatee(vm, pd); - delegatee->pd = base->pd; + JavaObjectClass::setProtectionDomain( + delegatee, JavaObjectClass::getProtectionDomain(base)); } else { - delegatee->pd = pd; + JavaObjectClass::setProtectionDomain(delegatee, pd); } setDelegatee(delegatee); } Modified: vmkit/trunk/lib/J3/VMCore/JnjvmClassLoader.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/JnjvmClassLoader.cpp?rev=105287&r1=105286&r2=105287&view=diff ============================================================================== --- vmkit/trunk/lib/J3/VMCore/JnjvmClassLoader.cpp (original) +++ vmkit/trunk/lib/J3/VMCore/JnjvmClassLoader.cpp Tue Jun 1 15:51:31 2010 @@ -389,7 +389,7 @@ } obj = loadClassMethod->invokeJavaObjectVirtual(isolate, forCtp, javaLoader, &strName, doResolve); - cl = (UserCommonClass*)((JavaObjectClass*)obj)->getClass(); + cl = JavaObjectClass::getClass(((JavaObjectClass*)obj)); } if (cl) { From nicolas.geoffray at lip6.fr Wed Jun 2 14:27:17 2010 From: nicolas.geoffray at lip6.fr (Nicolas Geoffray) Date: Wed, 02 Jun 2010 21:27:17 -0000 Subject: [vmkit-commits] [vmkit] r105346 - in /vmkit/trunk: lib/J3/Classpath/ lib/J3/Compiler/ lib/J3/VMCore/ mmtk/mmtk-j3/ Message-ID: <20100602212717.D2B19312800A@llvm.org> Author: geoffray Date: Wed Jun 2 16:27:17 2010 New Revision: 105346 URL: http://llvm.org/viewvc/llvm-project?rev=105346&view=rev Log: Make JavaArray virtual functions static. Modified: vmkit/trunk/lib/J3/Classpath/ClasspathConstructor.inc vmkit/trunk/lib/J3/Classpath/ClasspathMethod.inc vmkit/trunk/lib/J3/Classpath/ClasspathVMClass.inc vmkit/trunk/lib/J3/Classpath/ClasspathVMClassLoader.inc vmkit/trunk/lib/J3/Classpath/ClasspathVMObject.inc vmkit/trunk/lib/J3/Classpath/ClasspathVMRuntime.inc vmkit/trunk/lib/J3/Classpath/ClasspathVMStackWalker.inc vmkit/trunk/lib/J3/Classpath/ClasspathVMSystem.inc vmkit/trunk/lib/J3/Classpath/ClasspathVMThrowable.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/JavaRuntimeJIT.cpp vmkit/trunk/lib/J3/VMCore/JavaString.cpp vmkit/trunk/lib/J3/VMCore/Jni.cpp vmkit/trunk/lib/J3/VMCore/Jnjvm.cpp vmkit/trunk/lib/J3/VMCore/JnjvmClassLoader.cpp vmkit/trunk/lib/J3/VMCore/LockedMap.h vmkit/trunk/lib/J3/VMCore/Reader.cpp vmkit/trunk/lib/J3/VMCore/Reader.h vmkit/trunk/lib/J3/VMCore/VirtualTables.cpp vmkit/trunk/lib/J3/VMCore/Zip.cpp vmkit/trunk/mmtk/mmtk-j3/RuntimeHelpers.cpp vmkit/trunk/mmtk/mmtk-j3/Strings.cpp Modified: vmkit/trunk/lib/J3/Classpath/ClasspathConstructor.inc URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/Classpath/ClasspathConstructor.inc?rev=105346&r1=105345&r2=105346&view=diff ============================================================================== --- vmkit/trunk/lib/J3/Classpath/ClasspathConstructor.inc (original) +++ vmkit/trunk/lib/J3/Classpath/ClasspathConstructor.inc Wed Jun 2 16:27:17 2010 @@ -70,12 +70,12 @@ } static JavaObject* proceedConstructor(JavaObjectConstructor* cons, - JavaArray* args, + ArrayObject* args, JavaObject* Clazz, jint index) __attribute__ ((noinline)); static JavaObject* proceedConstructor(JavaObjectConstructor* cons, - JavaArray* args, + ArrayObject* args, JavaObject* Clazz, jint index) { JavaObject* res = 0; JavaObject* excp = 0; @@ -89,7 +89,7 @@ Jnjvm* vm = JavaThread::get()->getJVM(); JavaMethod* meth = JavaObjectConstructor::getInternalMethod(cons); UserClass* cl = JavaObjectConstructor::getClass(cons); - sint32 nbArgs = args ? args->size : 0; + sint32 nbArgs = args ? ArrayObject::getSize(args) : 0; Signdef* sign = meth->getSignature(); sint32 size = sign->nbArguments; @@ -105,7 +105,7 @@ if (cl) { cl->initialiseClass(vm); res = cl->doNew(vm); - JavaObject** ptr = (JavaObject**)(void*)(args->elements); + JavaObject** ptr = (JavaObject**)ArrayObject::getElements(args); Typedef* const* arguments = sign->getArgumentsType(); // Store the arguments, unboxing primitives if necessary. @@ -148,7 +148,7 @@ #ifdef NATIVE_JNI JNIEnv *env, #endif -JavaObjectConstructor* cons, JavaArray* args, JavaObject* Clazz, jint index) { +JavaObjectConstructor* cons, ArrayObject* args, JavaObject* Clazz, jint index) { JavaObject* res = 0; Modified: vmkit/trunk/lib/J3/Classpath/ClasspathMethod.inc URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/Classpath/ClasspathMethod.inc?rev=105346&r1=105345&r2=105346&view=diff ============================================================================== --- vmkit/trunk/lib/J3/Classpath/ClasspathMethod.inc (original) +++ vmkit/trunk/lib/J3/Classpath/ClasspathMethod.inc Wed Jun 2 16:27:17 2010 @@ -91,11 +91,11 @@ } static JavaObject* proceedMethod(JavaObjectMethod* Meth, JavaObject* obj, - JavaArray* args, JavaObject* Cl, jint index) + ArrayObject* args, JavaObject* Cl, jint index) __attribute__((noinline)); static JavaObject* proceedMethod(JavaObjectMethod* Meth, JavaObject* obj, - JavaArray* args, JavaObject* Cl, jint index) { + ArrayObject* args, JavaObject* Cl, jint index) { JavaObject* res = 0; JavaObject* exc = 0; @@ -111,7 +111,7 @@ JavaMethod* meth = JavaObjectMethod::getInternalMethod(Meth); - sint32 nbArgs = args ? args->size : 0; + sint32 nbArgs = args ? ArrayObject::getSize(args) : 0; Signdef* sign = meth->getSignature(); sint32 size = sign->nbArguments; @@ -140,7 +140,7 @@ cl->initialiseClass(vm); } - JavaObject** ptr = (JavaObject**)(void*)(args->elements); + JavaObject** ptr = ArrayObject::getElements(args); Typedef* const* arguments = sign->getArgumentsType(); for (sint32 i = 0; i < size; ++i) { JavaObject::decapsulePrimitive(ptr[i], vm, &buf[i], arguments[i]); @@ -242,7 +242,7 @@ #ifdef NATIVE_JNI JNIEnv *env, #endif -JavaObjectMethod* Meth, JavaObject* obj, JavaArray* args, JavaObject* Cl, jint index) { +JavaObjectMethod* Meth, JavaObject* obj, ArrayObject* args, JavaObject* Cl, jint index) { JavaObject* res = 0; llvm_gcroot(res, 0); Modified: vmkit/trunk/lib/J3/Classpath/ClasspathVMClass.inc URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/Classpath/ClasspathVMClass.inc?rev=105346&r1=105345&r2=105346&view=diff ============================================================================== --- vmkit/trunk/lib/J3/Classpath/ClasspathVMClass.inc (original) +++ vmkit/trunk/lib/J3/Classpath/ClasspathVMClass.inc Wed Jun 2 16:27:17 2010 @@ -123,7 +123,8 @@ UserClass* Cons = vm->upcalls->newConstructor; tmp = Cons->doNew(vm); vm->upcalls->initConstructor->invokeIntSpecial(vm, Cons, tmp, &Cl, i); - ret->elements[index++] = tmp; + ArrayObject::setElement(ret, tmp, index); + index++; } } } @@ -187,7 +188,8 @@ tmp = Meth->doNew(vm); str = vm->internalUTF8ToStr(meth->name); upcalls->initMethod->invokeIntSpecial(vm, Meth, tmp, &Cl, &str, i); - ret->elements[index++] = tmp; + ArrayObject::setElement(ret, tmp, index); + index++; } } } @@ -457,7 +459,8 @@ tmp = Field->doNew(vm); name = vm->internalUTF8ToStr(field->name); vm->upcalls->initField->invokeIntSpecial(vm, Field, tmp, &Cl, &name, i); - ret->elements[index++] = tmp; + ArrayObject::setElement(ret, tmp, index); + index++; } } } @@ -486,7 +489,7 @@ for (uint16 i = 0; i < cl->nbInterfaces; ++i) { UserClass* klass = cl->interfaces[i]; - res->elements[i] = klass->getClassDelegatee(vm); + ArrayObject::setElement(res, klass->getClassDelegatee(vm), i); } END_NATIVE_EXCEPTION @@ -560,7 +563,7 @@ for (uint16 i = 0; i < cl->nbInnerClasses; ++i) { UserClass* klass = cl->innerClasses[i]; if (!publicOnly || isPublic(klass->innerAccess)) - result->elements[i] = klass->getClassDelegatee(vm); + ArrayObject::setElement(result, klass->getClassDelegatee(vm), i); } } Modified: vmkit/trunk/lib/J3/Classpath/ClasspathVMClassLoader.inc URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/Classpath/ClasspathVMClassLoader.inc?rev=105346&r1=105345&r2=105346&view=diff ============================================================================== --- vmkit/trunk/lib/J3/Classpath/ClasspathVMClassLoader.inc (original) +++ vmkit/trunk/lib/J3/Classpath/ClasspathVMClassLoader.inc Wed Jun 2 16:27:17 2010 @@ -357,7 +357,7 @@ Jnjvm* vm = JavaThread::get()->getJVM(); obj = (ArrayObject*)vm->upcalls->ArrayOfString->doNew(NUM_BOOT_PACKAGES, vm); for (uint32 i = 0; i < NUM_BOOT_PACKAGES; ++i) { - obj->elements[i] = vm->asciizToStr(bootPackages[i]); + ArrayObject::setElement(obj, vm->asciizToStr(bootPackages[i]), i); } END_NATIVE_EXCEPTION Modified: vmkit/trunk/lib/J3/Classpath/ClasspathVMObject.inc URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/Classpath/ClasspathVMObject.inc?rev=105346&r1=105345&r2=105346&view=diff ============================================================================== --- vmkit/trunk/lib/J3/Classpath/ClasspathVMObject.inc (original) +++ vmkit/trunk/lib/J3/Classpath/ClasspathVMObject.inc Wed Jun 2 16:27:17 2010 @@ -42,7 +42,7 @@ base->asPrimitiveClass()->logSize : (sizeof(JavaObject*) == 8 ? 3 : 2); size = sizeof(JavaObject) + sizeof(ssize_t) + - (((JavaArray*)src)->size << logSize); + (JavaArray::getSize(src) << logSize); } else { assert(cl->isClass() && "Not a class!"); size = cl->asClass()->getVirtualSize(); Modified: vmkit/trunk/lib/J3/Classpath/ClasspathVMRuntime.inc URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/Classpath/ClasspathVMRuntime.inc?rev=105346&r1=105345&r2=105346&view=diff ============================================================================== --- vmkit/trunk/lib/J3/Classpath/ClasspathVMRuntime.inc (original) +++ vmkit/trunk/lib/J3/Classpath/ClasspathVMRuntime.inc Wed Jun 2 16:27:17 2010 @@ -57,11 +57,11 @@ uint32 size = (uint32)(lgPre + lgLib + lgPost); array = (ArrayUInt16*)vm->upcalls->ArrayOfChar->doNew(size, vm); - uint16* elements = array->elements; + uint16* elements = ArrayUInt16::getElements(array); memmove(elements, vm->bootstrapLoader->prelib->elements, lgPre * sizeof(uint16)); - memmove(&(elements[lgPre]), &(utf8Lib->elements[stLib]), + memmove(&(elements[lgPre]), ArrayUInt16::getElements(utf8Lib) + stLib, lgLib * sizeof(uint16)); memmove(&(elements[lgPre + lgLib]), vm->bootstrapLoader->postlib->elements, lgPost * sizeof(uint16)); @@ -74,12 +74,6 @@ } -#if defined(__MACH__) -typedef int* jumpbuf_t; -#else -typedef __jmp_buf_tag* jumpbuf_t; -#endif - typedef int (*onLoad_t)(const void**, void*); extern "C" void j3EndJNI(uint32** old); extern "C" void j3StartJNI(uint32* num, uint32** old, mvm::KnownFrame* Frame); Modified: vmkit/trunk/lib/J3/Classpath/ClasspathVMStackWalker.inc URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/Classpath/ClasspathVMStackWalker.inc?rev=105346&r1=105345&r2=105346&view=diff ============================================================================== --- vmkit/trunk/lib/J3/Classpath/ClasspathVMStackWalker.inc (original) +++ vmkit/trunk/lib/J3/Classpath/ClasspathVMStackWalker.inc Wed Jun 2 16:27:17 2010 @@ -49,7 +49,7 @@ for (uint32 i = 0; i != finalSize; ++i) { JavaMethod* meth = (JavaMethod*)buffer[i]; assert(meth && "Wrong stack trace"); - result->elements[i] = meth->classDef->getClassDelegatee(vm); + ArrayObject::setElement(result, meth->classDef->getClassDelegatee(vm), i); } END_NATIVE_EXCEPTION Modified: vmkit/trunk/lib/J3/Classpath/ClasspathVMSystem.inc URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/Classpath/ClasspathVMSystem.inc?rev=105346&r1=105345&r2=105346&view=diff ============================================================================== --- vmkit/trunk/lib/J3/Classpath/ClasspathVMSystem.inc (original) +++ vmkit/trunk/lib/J3/Classpath/ClasspathVMSystem.inc Wed Jun 2 16:27:17 2010 @@ -25,9 +25,9 @@ JNIEnv *env, jclass _cl, #endif -JavaArray* src, +JavaObject* src, jint sstart, -JavaArray* dst, +JavaObject* dst, jint dstart, jint len) { @@ -56,13 +56,16 @@ UserCommonClass* dstType = td->baseClass(); UserCommonClass* srcType = ts->baseClass(); - if (len > src->size) { + sint32 srcSize = JavaArray::getSize(src); + sint32 dstSize = JavaArray::getSize(dst); + + if (len > srcSize) { th->pendingException = vm->CreateIndexOutOfBoundsException(len); - } else if (len > dst->size) { + } else if (len > dstSize) { th->pendingException = vm->CreateIndexOutOfBoundsException(len); - } else if (len + sstart > src->size) { + } else if (len + sstart > srcSize) { th->pendingException = vm->CreateIndexOutOfBoundsException(len + sstart); - } else if (len + dstart > dst->size) { + } else if (len + dstart > dstSize) { th->pendingException = vm->CreateIndexOutOfBoundsException(len + dstart); } else if (dstart < 0) { th->pendingException = vm->CreateIndexOutOfBoundsException(dstart); @@ -82,7 +85,7 @@ bool doThrow = false; if (!(dstType->isPrimitive())) { while (i < sstart + len && !doThrow) { - cur = ((ArrayObject*)src)->elements[i]; + cur = ArrayObject::getElement((ArrayObject*)src, i); if (cur) { if (!(JavaObject::getClass(cur)->isAssignableFrom(dstType))) { doThrow = true; @@ -96,8 +99,8 @@ uint32 logSize = dstType->isPrimitive() ? dstType->asPrimitiveClass()->logSize : (sizeof(JavaObject*) == 8 ? 3 : 2); - void* ptrDst = (void*)((int64_t)(dst->elements) + (dstart << logSize)); - void* ptrSrc = (void*)((int64_t)(src->elements) + (sstart << logSize)); + void* ptrDst = (void*)((int64_t)JavaArray::getElements(dst) + (dstart << logSize)); + void* ptrSrc = (void*)((int64_t)JavaArray::getElements(src) + (sstart << logSize)); memmove(ptrDst, ptrSrc, length << logSize); if (doThrow) { Modified: vmkit/trunk/lib/J3/Classpath/ClasspathVMThrowable.inc URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/Classpath/ClasspathVMThrowable.inc?rev=105346&r1=105345&r2=105346&view=diff ============================================================================== --- vmkit/trunk/lib/J3/Classpath/ClasspathVMThrowable.inc (original) +++ vmkit/trunk/lib/J3/Classpath/ClasspathVMThrowable.inc Wed Jun 2 16:27:17 2010 @@ -38,16 +38,15 @@ ClassArray* cl = sizeof(void*) == 4 ? vm->upcalls->ArrayOfInt : vm->upcalls->ArrayOfLong; - JavaArray* result = (JavaArray*) cl->doNew(length, vm); - void** tab = (void**)result->elements; + JavaObject* result = (JavaObject*) cl->doNew(length, vm); + void** tab = (void**)JavaArray::getElements(result); // Get the frame context. th->getFrameContext(tab); // Set the tempory data in the new VMThrowable object. vmThrowable = vm->upcalls->newVMThrowable->doNew(vm); - uint64 ptr = (uint64)vmThrowable + vm->upcalls->vmDataVMThrowable->ptrOffset; - ((JavaObject**)ptr)[0] = result; + vm->upcalls->vmDataVMThrowable->setObjectField(vmThrowable, result); return vmThrowable; } @@ -116,21 +115,23 @@ #endif JavaObject* vmthrow, JavaObject* throwable) { - ArrayObject* result = 0; + ArrayObject* result = NULL; + JavaObject* stack = NULL; llvm_gcroot(vmthrow, 0); llvm_gcroot(throwable, 0); llvm_gcroot(result, 0); + llvm_gcroot(stack, 0); BEGIN_NATIVE_EXCEPTION(0) Jnjvm* vm = JavaThread::get()->getJVM(); JavaField* field = vm->upcalls->vmDataVMThrowable; - JavaArray* stack = (JavaArray*)field->getObjectField(vmthrow); + stack = field->getObjectField(vmthrow); // remove the VMThrowable.fillInStackTrace method and the last method // on the stack. sint32 index = 2;; - while (index != stack->size) { - mvm::MethodInfo* MI = vm->IPToMethodInfo(stack->elements[index]); + while (index != JavaArray::getSize(stack)) { + mvm::MethodInfo* MI = vm->IPToMethodInfo(ArrayPtr::getElement((ArrayPtr*)stack, index)); if (MI->MethodType != 1) ++index; else { JavaMethod* meth = (JavaMethod*)MI->getMetaInfo(); @@ -143,8 +144,8 @@ sint32 size = 0; sint32 cur = index; - while (cur < stack->size) { - mvm::MethodInfo* MI = vm->IPToMethodInfo(stack->elements[cur]); + while (cur < JavaArray::getSize(stack)) { + mvm::MethodInfo* MI = vm->IPToMethodInfo(ArrayPtr::getElement((ArrayPtr*)stack, cur)); ++cur; if (MI->MethodType == 1) ++size; } @@ -153,11 +154,11 @@ vm->upcalls->stackTraceArray->doNew(size, vm); cur = 0; - for (sint32 i = index; i < stack->size; ++i) { - mvm::MethodInfo* MI = vm->IPToMethodInfo(stack->elements[i]); + for (sint32 i = index; i < JavaArray::getSize(stack); ++i) { + mvm::MethodInfo* MI = vm->IPToMethodInfo(ArrayPtr::getElement((ArrayPtr*)stack, i)); if (MI->MethodType == 1) { JavaMethod* meth = (JavaMethod*)MI->getMetaInfo(); - result->elements[cur] = consStackElement(meth, stack->elements[i]); + ArrayObject::setElement(result, consStackElement(meth, ArrayPtr::getElement((ArrayPtr*)stack, i)), cur); cur++; } } @@ -168,4 +169,3 @@ } } - Modified: vmkit/trunk/lib/J3/Compiler/JavaAOTCompiler.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/Compiler/JavaAOTCompiler.cpp?rev=105346&r1=105345&r2=105346&view=diff ============================================================================== --- vmkit/trunk/lib/J3/Compiler/JavaAOTCompiler.cpp (original) +++ vmkit/trunk/lib/J3/Compiler/JavaAOTCompiler.cpp Wed Jun 2 16:27:17 2010 @@ -341,7 +341,7 @@ } std::vector Elemts; - const ArrayType* ATy = ArrayType::get(Ty, ((JavaArray*)obj)->size); + const ArrayType* ATy = ArrayType::get(Ty, JavaArray::getSize(obj)); Elemts.push_back(JavaIntrinsics.JavaObjectType->getContainedType(0)); Elemts.push_back(JavaIntrinsics.pointerSizeType); Elemts.push_back(ATy); @@ -1240,7 +1240,7 @@ template Constant* JavaAOTCompiler::CreateConstantFromIntArray(const T* val, const Type* Ty) { std::vector Elemts; - const ArrayType* ATy = ArrayType::get(Ty, val->size); + const ArrayType* ATy = ArrayType::get(Ty, T::getSize(val)); Elemts.push_back(JavaIntrinsics.JavaObjectType->getContainedType(0)); Elemts.push_back(JavaIntrinsics.pointerSizeType); @@ -1251,11 +1251,11 @@ std::vector Cts; Cts.push_back(CreateConstantForBaseObject(JavaObject::getClass(val))); - Cts.push_back(ConstantInt::get(JavaIntrinsics.pointerSizeType, val->size)); + Cts.push_back(ConstantInt::get(JavaIntrinsics.pointerSizeType, T::getSize(val))); std::vector Vals; - for (sint32 i = 0; i < val->size; ++i) { - Vals.push_back(ConstantInt::get(Ty, (uint64)val->elements[i])); + for (sint32 i = 0; i < T::getSize(val); ++i) { + Vals.push_back(ConstantInt::get(Ty, (uint64)T::getElement(val, i))); } Cts.push_back(ConstantArray::get(ATy, Vals)); @@ -1266,7 +1266,7 @@ template Constant* JavaAOTCompiler::CreateConstantFromFPArray(const T* val, const Type* Ty) { std::vector Elemts; - const ArrayType* ATy = ArrayType::get(Ty, val->size); + const ArrayType* ATy = ArrayType::get(Ty, T::getSize(val)); Elemts.push_back(JavaIntrinsics.JavaObjectType->getContainedType(0)); Elemts.push_back(JavaIntrinsics.pointerSizeType); @@ -1277,11 +1277,11 @@ std::vector Cts; Cts.push_back(CreateConstantForBaseObject(JavaObject::getClass(val))); - Cts.push_back(ConstantInt::get(JavaIntrinsics.pointerSizeType, val->size)); + Cts.push_back(ConstantInt::get(JavaIntrinsics.pointerSizeType, T::getSize(val))); std::vector Vals; - for (sint32 i = 0; i < val->size; ++i) { - Vals.push_back(ConstantFP::get(Ty, (double)val->elements[i])); + for (sint32 i = 0; i < T::getSize(val); ++i) { + Vals.push_back(ConstantFP::get(Ty, (double)T::getElement(val, i))); } Cts.push_back(ConstantArray::get(ATy, Vals)); @@ -1292,7 +1292,7 @@ Constant* JavaAOTCompiler::CreateConstantFromObjectArray(const ArrayObject* val) { std::vector Elemts; const llvm::Type* Ty = JavaIntrinsics.JavaObjectType; - const ArrayType* ATy = ArrayType::get(Ty, val->size); + const ArrayType* ATy = ArrayType::get(Ty, ArrayObject::getSize(val)); Elemts.push_back(JavaIntrinsics.JavaObjectType->getContainedType(0)); Elemts.push_back(JavaIntrinsics.pointerSizeType); @@ -1303,12 +1303,13 @@ std::vector Cts; Cts.push_back(CreateConstantForBaseObject(JavaObject::getClass(val))); - Cts.push_back(ConstantInt::get(JavaIntrinsics.pointerSizeType, val->size)); + Cts.push_back(ConstantInt::get(JavaIntrinsics.pointerSizeType, + ArrayObject::getSize(val))); std::vector Vals; - for (sint32 i = 0; i < val->size; ++i) { - if (val->elements[i]) { - Vals.push_back(getFinalObject(val->elements[i], + for (sint32 i = 0; i < ArrayObject::getSize(val); ++i) { + if (ArrayObject::getElement(val, i)) { + Vals.push_back(getFinalObject(ArrayObject::getElement(val, i), JavaObject::getClass(val)->asArrayClass()->baseClass())); } else { Vals.push_back(Constant::getNullValue(JavaIntrinsics.JavaObjectType)); Modified: vmkit/trunk/lib/J3/Compiler/JavaJIT.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/Compiler/JavaJIT.cpp?rev=105346&r1=105345&r2=105346&view=diff ============================================================================== --- vmkit/trunk/lib/J3/Compiler/JavaJIT.cpp (original) +++ vmkit/trunk/lib/J3/Compiler/JavaJIT.cpp Wed Jun 2 16:27:17 2010 @@ -950,13 +950,14 @@ } } - exploreOpcodes(&compilingClass->bytes->elements[start], codeLen); + // TODO: THIS IS UNSAFE! + exploreOpcodes(ArrayUInt8::getElements(compilingClass->bytes) + start, codeLen); if (returnType != Type::getVoidTy(*llvmContext)) { endNode = PHINode::Create(returnType, "", endBlock); } - compileOpcodes(&compilingClass->bytes->elements[start], codeLen); + compileOpcodes(ArrayUInt8::getElements(compilingClass->bytes) + start, codeLen); PRINT_DEBUG(JNJVM_COMPILE, 1, COLOR_NORMAL, "--> end inline compiling %s.%s\n", @@ -1185,7 +1186,8 @@ } } - exploreOpcodes(&compilingClass->bytes->elements[start], codeLen); + // TODO: THIS IS UNSAFE! + exploreOpcodes(ArrayUInt8::getElements(compilingClass->bytes) + start, codeLen); endBlock = createBasicBlock("end"); @@ -1241,7 +1243,8 @@ currentBlock = noStackOverflow; } - compileOpcodes(&compilingClass->bytes->elements[start], codeLen); + // TODO: THIS IS UNSAFE! + compileOpcodes(ArrayUInt8::getElements(compilingClass->bytes) + start, codeLen); assert(stack.size() == 0 && "Stack not empty after compiling bytecode"); // Fix a javac(?) bug where a method only throws an exception and does Modified: vmkit/trunk/lib/J3/VMCore/JavaArray.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/JavaArray.h?rev=105346&r1=105345&r2=105346&view=diff ============================================================================== --- vmkit/trunk/lib/J3/VMCore/JavaArray.h (original) +++ vmkit/trunk/lib/J3/VMCore/JavaArray.h Wed Jun 2 16:27:17 2010 @@ -36,7 +36,7 @@ /// {JavaObject, size, [0 * T]}. template class TJavaArray : public JavaObject { -public: +private: /// size - The (constant) size of the array. ssize_t size; @@ -44,28 +44,67 @@ /// actual size of the Java array. This is to facilitate Java array accesses /// in JnJVM code. The size should be set to zero, but this is invalid C99. T elements[1]; -}; -/// JavaArray - This class is just a placeholder for constants and for the -/// virtual table of arrays. -class JavaArray : public TJavaArray { public: - - /// MaxArraySize - The maximum size a Java array can have. Allocating an - /// array with a bigger size than MaxArraySize raises an out of memory - /// error. - static const sint32 MaxArraySize; + static int32_t getSize(const TJavaArray* self) { + llvm_gcroot(self, 0); + return self->size; + } - /// JVM representation of Java arrays of primitive types. - static const unsigned int T_BOOLEAN; - static const unsigned int T_CHAR; - static const unsigned int T_FLOAT; - static const unsigned int T_DOUBLE; - static const unsigned int T_BYTE; - static const unsigned int T_SHORT; - static const unsigned int T_INT; - static const unsigned int T_LONG; + static T getElement(const TJavaArray* self, uint32_t i) { + llvm_gcroot(self, 0); + return self->elements[i]; + } + + static void setElement(TJavaArray* self, T value, uint32_t i) { + llvm_gcroot(self, 0); + self->elements[i] = value; + } + + static const T* getElements(const TJavaArray* self) { + llvm_gcroot(self, 0); + return self->elements; + } + + static T* getElements(TJavaArray* self) { + llvm_gcroot(self, 0); + return self->elements; + } + + friend class JavaArray; +}; + +class ArrayObject : public JavaObject { +private: + /// size - The (constant) size of the array. + ssize_t size; + + /// elements - Elements of this array. The size here is different than the + /// actual size of the Java array. This is to facilitate Java array accesses + /// in JnJVM code. The size should be set to zero, but this is invalid C99. + JavaObject* elements[1]; + +public: + static int32_t getSize(const ArrayObject* self) { + llvm_gcroot(self, 0); + return self->size; + } + static JavaObject* getElement(const ArrayObject* self, uint32_t i) { + llvm_gcroot(self, 0); + return self->elements[i]; + } + + static void setElement(ArrayObject* self, JavaObject* value, uint32_t i) { + llvm_gcroot(self, 0); + llvm_gcroot(value, 0); + self->elements[i] = value; + } + + static JavaObject** getElements(ArrayObject* self) { + llvm_gcroot(self, 0); + return self->elements; + } }; /// Instantiation of the TJavaArray class for Java arrays. @@ -82,10 +121,49 @@ ARRAYCLASS(ArrayLong, sint64); ARRAYCLASS(ArrayFloat, float); ARRAYCLASS(ArrayDouble, double); -ARRAYCLASS(ArrayObject, JavaObject*); +ARRAYCLASS(ArrayPtr, void*); #undef ARRAYCLASS +/// JavaArray - This class is just a placeholder for constants. +class JavaArray { +public: + /// MaxArraySize - The maximum size a Java array can have. Allocating an + /// array with a bigger size than MaxArraySize raises an out of memory + /// error. + static const sint32 MaxArraySize; + + /// JVM representation of Java arrays of primitive types. + static const unsigned int T_BOOLEAN; + static const unsigned int T_CHAR; + static const unsigned int T_FLOAT; + static const unsigned int T_DOUBLE; + static const unsigned int T_BYTE; + static const unsigned int T_SHORT; + static const unsigned int T_INT; + static const unsigned int T_LONG; + + static void setSize(JavaObject* array, int size) { + llvm_gcroot(array, 0); + ((ArrayUInt8*)array)->size = size; + } + + static sint32 getSize(const JavaObject* array) { + llvm_gcroot(array, 0); + return ((const ArrayUInt8*)array)->size; + } + + static const unsigned char* getElements(const JavaObject* array) { + llvm_gcroot(array, 0); + return ((const ArrayUInt8*)array)->elements; + } + + static unsigned char* getElements(JavaObject* array) { + llvm_gcroot(array, 0); + return ((ArrayUInt8*)array)->elements; + } +}; + } // end namespace j3 #endif Modified: vmkit/trunk/lib/J3/VMCore/JavaClass.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/JavaClass.cpp?rev=105346&r1=105345&r2=105346&view=diff ============================================================================== --- vmkit/trunk/lib/J3/VMCore/JavaClass.cpp (original) +++ vmkit/trunk/lib/J3/VMCore/JavaClass.cpp Wed Jun 2 16:27:17 2010 @@ -253,7 +253,7 @@ access = ACC_FINAL | ACC_ABSTRACT | ACC_PUBLIC | JNJVM_ARRAY; } -JavaArray* UserClassArray::doNew(sint32 n, Jnjvm* vm) { +JavaObject* UserClassArray::doNew(sint32 n, Jnjvm* vm) { if (n < 0) vm->negativeArraySizeException(n); else if (n > JavaArray::MaxArraySize) @@ -262,20 +262,21 @@ return doNew(n); } -JavaArray* UserClassArray::doNew(sint32 n) { +JavaObject* UserClassArray::doNew(sint32 n) { + JavaObject* res = NULL; + llvm_gcroot(res, 0); UserCommonClass* cl = baseClass(); - uint32 logSize = cl->isPrimitive() ? cl->asPrimitiveClass()->logSize : (sizeof(JavaObject*) == 8 ? 3 : 2); VirtualTable* VT = virtualVT; uint32 size = sizeof(JavaObject) + sizeof(ssize_t) + (n << logSize); - JavaArray* res = (JavaArray*)gc::operator new(size, VT); - res->size = n; + res = (JavaObject*)gc::operator new(size, VT); + JavaArray::setSize(res, n); return res; } -JavaArray* UserClassArray::doNew(sint32 n, mvm::BumpPtrAllocator& allocator, - bool temp) { +JavaObject* UserClassArray::doNew(sint32 n, mvm::BumpPtrAllocator& allocator, + bool temp) { UserCommonClass* cl = baseClass(); uint32 logSize = cl->isPrimitive() ? @@ -283,17 +284,17 @@ VirtualTable* VT = virtualVT; uint32 size = sizeof(JavaObject) + sizeof(ssize_t) + (n << logSize); - JavaArray* res = 0; + JavaObject* res = 0; // If the array is not temporary, use the allocator. if (!temp) { - res = (JavaArray*)allocator.Allocate(size, "Array"); + res = (JavaObject*)allocator.Allocate(size, "Array"); } else { // Otherwise, allocate with the malloc - res = (JavaArray*)malloc(size); + res = (JavaObject*)malloc(size); } ((void**)res)[0] = VT; - res->size = n; + JavaArray::setSize(res, n); return res; } @@ -1082,7 +1083,7 @@ res = (ArrayObject*)vm->upcalls->classArrayClass->doNew(sign->nbArguments,vm); for (uint32 index = 0; index < sign->nbArguments; ++index) { - res->elements[index] = getClassType(vm, loader, arguments[index]); + ArrayObject::setElement(res, getClassType(vm, loader, arguments[index]), index); } return res; @@ -1115,7 +1116,7 @@ UserCommonClass* cl = ctp->loadClass(idx); assert(cl->asClass() && "Wrong exception type"); cl->asClass()->resolveClass(); - res->elements[i] = cl->getClassDelegatee(vm); + ArrayObject::setElement(res, cl->getClassDelegatee(vm), i); } return res; } @@ -1359,18 +1360,25 @@ uint32 i = 0; for (sint32 j = 0; j < classDef->name->size; ++j) { - if (classDef->name->elements[j] == '/') res->elements[i++] = '.'; - else res->elements[i++] = classDef->name->elements[j]; + if (classDef->name->elements[j] == '/') { + ArrayUInt16::setElement(res, '.', i); + } else { + ArrayUInt16::setElement(res, classDef->name->elements[j], i); + } + i++; } - res->elements[i++] = '.'; + ArrayUInt16::setElement(res, '.', i); + i++; for (sint32 j = 0; j < name->size; ++j) { - res->elements[i++] = name->elements[j]; + ArrayUInt16::setElement(res, name->elements[j], i); + i++; } for (sint32 j = 0; j < type->size; ++j) { - res->elements[i++] = type->elements[j]; + ArrayUInt16::setElement(res, type->elements[j], i); + 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=105346&r1=105345&r2=105346&view=diff ============================================================================== --- vmkit/trunk/lib/J3/VMCore/JavaClass.h (original) +++ vmkit/trunk/lib/J3/VMCore/JavaClass.h Wed Jun 2 16:27:17 2010 @@ -928,9 +928,9 @@ /// doNew - Allocate a new array with the given allocator. /// - JavaArray* doNew(sint32 n, mvm::BumpPtrAllocator& allocator, + JavaObject* doNew(sint32 n, mvm::BumpPtrAllocator& allocator, bool temp = false); - JavaArray* doNew(sint32 n); + JavaObject* doNew(sint32 n); /// _baseClass - The base class of the array. /// @@ -944,7 +944,7 @@ /// doNew - Allocate a new array in the given vm. /// - JavaArray* doNew(sint32 n, Jnjvm* vm); + JavaObject* doNew(sint32 n, Jnjvm* vm); /// ClassArray - Construct a Java array class with the given name. /// Modified: vmkit/trunk/lib/J3/VMCore/JavaRuntimeJIT.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/JavaRuntimeJIT.cpp?rev=105346&r1=105345&r2=105346&view=diff ============================================================================== --- vmkit/trunk/lib/J3/VMCore/JavaRuntimeJIT.cpp (original) +++ vmkit/trunk/lib/J3/VMCore/JavaRuntimeJIT.cpp Wed Jun 2 16:27:17 2010 @@ -252,11 +252,11 @@ } // Throws if one of the dimension is negative. -static JavaArray* multiCallNewIntern(UserClassArray* cl, uint32 len, - sint32* dims, Jnjvm* vm) { +static JavaObject* multiCallNewIntern(UserClassArray* cl, uint32 len, + sint32* dims, Jnjvm* vm) { assert(len > 0 && "Negative size given by VMKit"); - JavaArray* _res = cl->doNew(dims[0], vm); + JavaObject* _res = cl->doNew(dims[0], vm); ArrayObject* res = 0; llvm_gcroot(_res, 0); llvm_gcroot(res, 0); @@ -268,13 +268,15 @@ UserClassArray* base = (UserClassArray*)_base; if (dims[0] > 0) { for (sint32 i = 0; i < dims[0]; ++i) { - res->elements[i] = multiCallNewIntern(base, (len - 1), - &dims[1], vm); + ArrayObject::setElement( + res, multiCallNewIntern(base, (len - 1), &dims[1], vm), i); } } else { for (uint32 i = 1; i < len; ++i) { sint32 p = dims[i]; - if (p < 0) JavaThread::get()->getJVM()->negativeArraySizeException(p); + if (p < 0) { + JavaThread::get()->getJVM()->negativeArraySizeException(p); + } } } } @@ -282,8 +284,8 @@ } // Throws if one of the dimension is negative. -extern "C" JavaArray* j3MultiCallNew(UserClassArray* cl, uint32 len, ...) { - JavaArray* res = 0; +extern "C" JavaObject* j3MultiCallNew(UserClassArray* cl, uint32 len, ...) { + JavaObject* res = 0; llvm_gcroot(res, 0); BEGIN_NATIVE_EXCEPTION(1) Modified: vmkit/trunk/lib/J3/VMCore/JavaString.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/JavaString.cpp?rev=105346&r1=105345&r2=105346&view=diff ============================================================================== --- vmkit/trunk/lib/J3/VMCore/JavaString.cpp (original) +++ vmkit/trunk/lib/J3/VMCore/JavaString.cpp Wed Jun 2 16:27:17 2010 @@ -38,7 +38,7 @@ // No need to call the Java function: both the Java function and // this function do the same thing. res->value = array; - res->count = array->size; + res->count = ArrayUInt16::getSize(array); res->offset = 0; res->cachedHashCode = 0; return res; @@ -47,7 +47,7 @@ char* JavaString::strToAsciiz() { char* buf = new char[count + 1]; for (sint32 i = 0; i < count; ++i) { - buf[i] = value->elements[i + offset]; + buf[i] = ArrayUInt16::getElement(value, i + offset); } buf[count] = 0; return buf; @@ -60,12 +60,11 @@ llvm_gcroot(array, 0); assert(self->value && "String without an array?"); - if (self->offset || (self->count != self->value->size)) { + if (self->offset || (self->count != ArrayUInt16::getSize(self->value))) { array = (ArrayUInt16*)vm->upcalls->ArrayOfChar->doNew(self->count, vm); - uint16* buf = array->elements; - for (sint32 i = 0; i < count; i++) { - buf[i] = self->value->elements[i + self->offset]; + ArrayUInt16::setElement( + array, ArrayUInt16::getElement(value, i + self->offset), i); } return array; } else { @@ -88,11 +87,13 @@ array = (ArrayUInt16*)vm->upcalls->ArrayOfChar->doNew(name->size, vm); - uint16* java = array->elements; for (sint32 i = 0; i < name->size; i++) { uint16 cur = name->elements[i]; - if (cur == '/') java[i] = '.'; - else java[i] = cur; + if (cur == '/') { + ArrayUInt16::setElement(array, '.', i); + } else { + ArrayUInt16::setElement(array, cur, i); + } } return vm->constructString(array); @@ -102,13 +103,15 @@ const JavaString* self = this; llvm_gcroot(self, 0); - uint16* java = (uint16*)alloca(sizeof(uint16) * self->count); + uint16* java = new uint16[self->count]; for (sint32 i = 0; i < count; ++i) { - uint16 cur = self->value->elements[offset + i]; + uint16 cur = ArrayUInt16::getElement(self->value, offset + i); if (cur == '.') java[i] = '/'; else java[i] = cur; } - return map->lookupOrCreateReader(java, self->count); + const UTF8* res = map->lookupOrCreateReader(java, self->count); + delete[] java; + return res; } Modified: vmkit/trunk/lib/J3/VMCore/Jni.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/Jni.cpp?rev=105346&r1=105345&r2=105346&view=diff ============================================================================== --- vmkit/trunk/lib/J3/VMCore/Jni.cpp (original) +++ vmkit/trunk/lib/J3/VMCore/Jni.cpp Wed Jun 2 16:27:17 2010 @@ -2654,10 +2654,10 @@ BEGIN_JNI_EXCEPTION // Local object references. - JavaArray* array = *(JavaArray**)_array; + JavaObject* array = *(JavaObject**)_array; llvm_gcroot(array, 0); - RETURN_FROM_JNI(array->size); + RETURN_FROM_JNI(JavaArray::getSize(array)); END_JNI_EXCEPTION RETURN_FROM_JNI(0); @@ -2692,7 +2692,7 @@ if (initialElement) { for (sint32 i = 0; i < length; ++i) { - res->elements[i] = initialElement; + ArrayObject::setElement(res, initialElement, i); } } @@ -2717,10 +2717,12 @@ JavaThread* th = JavaThread::get(); Jnjvm* vm = th->getJVM(); - if (index >= array->size) vm->indexOutOfBounds(array, index); + if (index >= ArrayObject::getSize(array)) { + vm->indexOutOfBounds(array, index); + } // Store local refererence. - res = array->elements[index]; + res = ArrayObject::getElement(array, index); jobject ret = (jobject)th->pushJNIRef(res); RETURN_FROM_JNI(ret); @@ -2742,11 +2744,12 @@ llvm_gcroot(array, 0); llvm_gcroot(val, 0); - if (index >= array->size) + if (index >= ArrayObject::getSize(array)) { JavaThread::get()->getJVM()->indexOutOfBounds(array, index); + } // Store global reference. - array->elements[index] = val; + ArrayObject::setElement(array, val, index); RETURN_VOID_FROM_JNI; @@ -2896,9 +2899,9 @@ if (isCopy) (*isCopy) = true; - sint32 len = array->size * sizeof(uint8); + sint32 len = ArrayUInt8::getSize(array) * sizeof(uint8); void* buffer = malloc(len); - memcpy(buffer, array->elements, len); + memcpy(buffer, ArrayUInt8::getElements(array), len); RETURN_FROM_JNI((jboolean*)buffer); @@ -2917,9 +2920,9 @@ if (isCopy) (*isCopy) = true; - sint32 len = array->size * sizeof(uint8); + sint32 len = ArraySInt8::getSize(array) * sizeof(uint8); void* buffer = malloc(len); - memcpy(buffer, array->elements, len); + memcpy(buffer, ArraySInt8::getElements(array), len); RETURN_FROM_JNI((jbyte*)buffer); @@ -2938,9 +2941,9 @@ if (isCopy) (*isCopy) = true; - sint32 len = array->size * sizeof(uint16); + sint32 len = ArrayUInt16::getSize(array) * sizeof(uint16); void* buffer = malloc(len); - memcpy(buffer, array->elements, len); + memcpy(buffer, ArrayUInt16::getElements(array), len); RETURN_FROM_JNI((jchar*)buffer); @@ -2960,9 +2963,9 @@ if (isCopy) (*isCopy) = true; - sint32 len = array->size * sizeof(sint16); + sint32 len = ArraySInt16::getSize(array) * sizeof(sint16); void* buffer = malloc(len); - memcpy(buffer, array->elements, len); + memcpy(buffer, ArraySInt16::getElements(array), len); RETURN_FROM_JNI((jshort*)buffer); @@ -2981,9 +2984,9 @@ if (isCopy) (*isCopy) = true; - sint32 len = array->size * sizeof(sint32); + sint32 len = ArraySInt32::getSize(array) * sizeof(sint32); void* buffer = malloc(len); - memcpy(buffer, array->elements, len); + memcpy(buffer, ArraySInt32::getElements(array), len); RETURN_FROM_JNI((jint*)buffer); @@ -3002,9 +3005,9 @@ if (isCopy) (*isCopy) = true; - sint32 len = array->size * sizeof(sint64); + sint32 len = ArrayLong::getSize(array) * sizeof(sint64); void* buffer = malloc(len); - memcpy(buffer, array->elements, len); + memcpy(buffer, ArrayLong::getElements(array), len); RETURN_FROM_JNI((jlong*)buffer); @@ -3024,9 +3027,9 @@ if (isCopy) (*isCopy) = true; - sint32 len = array->size * sizeof(float); + sint32 len = ArrayFloat::getSize(array) * sizeof(float); void* buffer = malloc(len); - memcpy(buffer, array->elements, len); + memcpy(buffer, ArrayFloat::getElements(array), len); RETURN_FROM_JNI((jfloat*)buffer); @@ -3046,9 +3049,9 @@ if (isCopy) (*isCopy) = true; - sint32 len = array->size * sizeof(double); + sint32 len = ArrayDouble::getSize(array) * sizeof(double); void* buffer = malloc(len); - memcpy(buffer, array->elements, len); + memcpy(buffer, ArrayDouble::getElements(array), len); RETURN_FROM_JNI((jdouble*)buffer); @@ -3065,11 +3068,11 @@ if (mode == JNI_ABORT) { free(elems); } else { - JavaArray* array = *(JavaArray**)_array; + ArrayUInt8* array = *(ArrayUInt8**)_array; llvm_gcroot(array, 0); - sint32 len = array->size; - memcpy(array->elements, elems, len); + sint32 len = ArrayUInt8::getSize(array); + memcpy(ArrayUInt8::getElements(array), elems, len); if (mode == 0) free(elems); } @@ -3088,11 +3091,11 @@ if (mode == JNI_ABORT) { free(elems); } else { - JavaArray* array = *(JavaArray**)_array; + ArraySInt16* array = *(ArraySInt16**)_array; llvm_gcroot(array, 0); - sint32 len = array->size; - memcpy(array->elements, elems, len); + sint32 len = ArraySInt16::getSize(array); + memcpy(ArraySInt16::getElements(array), elems, len); if (mode == 0) free(elems); } @@ -3111,11 +3114,11 @@ if (mode == JNI_ABORT) { free(elems); } else { - JavaArray* array = *(JavaArray**)_array; + ArrayUInt16* array = *(ArrayUInt16**)_array; llvm_gcroot(array, 0); - sint32 len = array->size << 1; - memcpy(array->elements, elems, len); + sint32 len = ArrayUInt16::getSize(array) << 1; + memcpy(ArrayUInt16::getElements(array), elems, len); if (mode == 0) free(elems); } @@ -3134,11 +3137,11 @@ if (mode == JNI_ABORT) { free(elems); } else { - JavaArray* array = *(JavaArray**)_array; + ArraySInt16* array = *(ArraySInt16**)_array; llvm_gcroot(array, 0); - sint32 len = array->size << 1; - memcpy(array->elements, elems, len); + sint32 len = ArraySInt16::getSize(array) << 1; + memcpy(ArraySInt16::getElements(array), elems, len); if (mode == 0) free(elems); } @@ -3157,11 +3160,11 @@ if (mode == JNI_ABORT) { free(elems); } else { - JavaArray* array = *(JavaArray**)_array; + ArraySInt32* array = *(ArraySInt32**)_array; llvm_gcroot(array, 0); - sint32 len = array->size << 2; - memcpy(array->elements, elems, len); + sint32 len = ArraySInt32::getSize(array) << 2; + memcpy(ArraySInt32::getElements(array), elems, len); if (mode == 0) free(elems); } @@ -3180,11 +3183,11 @@ if (mode == JNI_ABORT) { free(elems); } else { - JavaArray* array = *(JavaArray**)_array; + ArrayLong* array = *(ArrayLong**)_array; llvm_gcroot(array, 0); - sint32 len = array->size << 3; - memcpy(array->elements, elems, len); + sint32 len = ArrayLong::getSize(array) << 3; + memcpy(ArrayLong::getElements(array), elems, len); if (mode == 0) free(elems); } @@ -3202,11 +3205,11 @@ if (mode == JNI_ABORT) { free(elems); } else { - JavaArray* array = *(JavaArray**)_array; + ArrayFloat* array = *(ArrayFloat**)_array; llvm_gcroot(array, 0); - sint32 len = array->size << 2; - memcpy(array->elements, elems, len); + sint32 len = ArrayFloat::getSize(array) << 2; + memcpy(ArrayFloat::getElements(array), elems, len); if (mode == 0) free(elems); } @@ -3225,11 +3228,11 @@ if (mode == JNI_ABORT) { free(elems); } else { - JavaArray* array = *(JavaArray**)_array; + ArrayDouble* array = *(ArrayDouble**)_array; llvm_gcroot(array, 0); - sint32 len = array->size << 3; - memcpy(array->elements, elems, len); + sint32 len = ArrayDouble::getSize(array) << 3; + memcpy(ArrayDouble::getElements(array), elems, len); if (mode == 0) free(elems); } @@ -3246,7 +3249,7 @@ ArrayUInt8* Array = *(ArrayUInt8**)array; llvm_gcroot(Array, 0); - memcpy(buf, &(Array->elements[start]), len * sizeof(uint8)); + memcpy(buf, ArrayUInt8::getElements(Array) + start, len * sizeof(uint8)); END_JNI_EXCEPTION @@ -3261,7 +3264,7 @@ ArraySInt8* Array = *(ArraySInt8**)array; llvm_gcroot(Array, 0); - memcpy(buf, &(Array->elements[start]), len * sizeof(sint8)); + memcpy(buf, ArraySInt8::getElements(Array) + start, len * sizeof(uint8)); END_JNI_EXCEPTION @@ -3276,7 +3279,7 @@ ArrayUInt16* Array = *(ArrayUInt16**)array; llvm_gcroot(Array, 0); - memcpy(buf, &(Array->elements[start]), len * sizeof(uint16)); + memcpy(buf, ArrayUInt16::getElements(Array) + start, len * sizeof(uint16)); END_JNI_EXCEPTION @@ -3291,7 +3294,7 @@ ArraySInt16* Array = *(ArraySInt16**)array; llvm_gcroot(Array, 0); - memcpy(buf, &(Array->elements[start]), len * sizeof(sint16)); + memcpy(buf, ArraySInt16::getElements(Array) + start, len * sizeof(sint16)); END_JNI_EXCEPTION @@ -3306,7 +3309,7 @@ ArraySInt32* Array = *(ArraySInt32**)array; llvm_gcroot(Array, 0); - memcpy(buf, &(Array->elements[start]), len * sizeof(sint32)); + memcpy(buf, ArraySInt32::getElements(Array) + start, len * sizeof(sint32)); END_JNI_EXCEPTION @@ -3321,7 +3324,7 @@ ArrayLong* Array = *(ArrayLong**)array; llvm_gcroot(Array, 0); - memcpy(buf, &(Array->elements[start]), len * sizeof(sint64)); + memcpy(buf, ArrayLong::getElements(Array) + start, len * sizeof(sint64)); END_JNI_EXCEPTION @@ -3336,7 +3339,7 @@ ArrayFloat* Array = *(ArrayFloat**)array; llvm_gcroot(Array, 0); - memcpy(buf, &(Array->elements[start]), len * sizeof(float)); + memcpy(buf, ArrayFloat::getElements(Array) + start, len * sizeof(float)); END_JNI_EXCEPTION @@ -3351,7 +3354,7 @@ ArrayDouble* Array = *(ArrayDouble**)array; llvm_gcroot(Array, 0); - memcpy(buf, &(Array->elements[start]), len * sizeof(double)); + memcpy(buf, ArrayDouble::getElements(Array) + start, len * sizeof(double)); END_JNI_EXCEPTION @@ -3366,7 +3369,7 @@ ArrayUInt8* Array = *(ArrayUInt8**)array; llvm_gcroot(Array, 0); - memcpy(&(Array->elements[start]), buf, len * sizeof(uint8)); + memcpy(ArrayUInt8::getElements(Array) + start, buf, len * sizeof(uint8)); END_JNI_EXCEPTION @@ -3381,7 +3384,7 @@ ArraySInt8* Array = *(ArraySInt8**)array; llvm_gcroot(Array, 0); - memcpy(&(Array->elements[start]), buf, len * sizeof(sint8)); + memcpy(ArraySInt8::getElements(Array) + start, buf, len * sizeof(sint8)); END_JNI_EXCEPTION @@ -3396,7 +3399,7 @@ ArrayUInt16* Array = *(ArrayUInt16**)array; llvm_gcroot(Array, 0); - memcpy(&(Array->elements[start]), buf, len * sizeof(uint16)); + memcpy(ArrayUInt16::getElements(Array) + start, buf, len * sizeof(uint16)); END_JNI_EXCEPTION @@ -3411,7 +3414,7 @@ ArraySInt16* Array = *(ArraySInt16**)array; llvm_gcroot(Array, 0); - memcpy(&(Array->elements[start]), buf, len * sizeof(sint16)); + memcpy(ArraySInt16::getElements(Array) + start, buf, len * sizeof(sint16)); END_JNI_EXCEPTION @@ -3426,7 +3429,7 @@ ArraySInt32* Array = *(ArraySInt32**)array; llvm_gcroot(Array, 0); - memcpy(&(Array->elements[start]), buf, len * sizeof(sint32)); + memcpy(ArraySInt32::getElements(Array) + start, buf, len * sizeof(sint32)); END_JNI_EXCEPTION @@ -3441,7 +3444,7 @@ ArrayLong* Array = *(ArrayLong**)array; llvm_gcroot(Array, 0); - memcpy(&(Array->elements[start]), buf, len * sizeof(sint64)); + memcpy(ArrayLong::getElements(Array) + start, buf, len * sizeof(sint64)); END_JNI_EXCEPTION @@ -3456,7 +3459,7 @@ ArrayFloat* Array = *(ArrayFloat**)array; llvm_gcroot(Array, 0); - memcpy(&(Array->elements[start]), buf, len * sizeof(float)); + memcpy(ArrayFloat::getElements(Array) + start, buf, len * sizeof(float)); END_JNI_EXCEPTION @@ -3471,7 +3474,7 @@ ArrayDouble* Array = *(ArrayDouble**)array; llvm_gcroot(Array, 0); - memcpy(&(Array->elements[start]), buf, len * sizeof(double)); + memcpy(ArrayDouble::getElements(Array) + start, buf, len * sizeof(double)); END_JNI_EXCEPTION @@ -3564,16 +3567,16 @@ void *GetPrimitiveArrayCritical(JNIEnv *env, jarray _array, jboolean *isCopy) { BEGIN_JNI_EXCEPTION - JavaArray* array = *(JavaArray**)_array; + JavaObject* array = *(JavaObject**)_array; llvm_gcroot(array, 0); if (isCopy) (*isCopy) = true; UserClassArray* cl = JavaObject::getClass(array)->asArrayClass(); uint32 logSize = cl->baseClass()->asPrimitiveClass()->logSize; - sint32 len = array->size << logSize; + sint32 len = JavaArray::getSize(array) << logSize; void* buffer = malloc(len); - memcpy(buffer, array->elements, len); + memcpy(buffer, JavaArray::getElements(array), len); RETURN_FROM_JNI((jchar*)buffer); @@ -3590,13 +3593,13 @@ if (mode == JNI_ABORT) { free(carray); } else { - JavaArray* array = *(JavaArray**)_array; + JavaObject* array = *(JavaObject**)_array; llvm_gcroot(array, 0); UserClassArray* cl = JavaObject::getClass(array)->asArrayClass(); uint32 logSize = cl->baseClass()->asPrimitiveClass()->logSize; - sint32 len = array->size << logSize; - memcpy(array->elements, carray, len); + sint32 len = JavaArray::getSize(array) << logSize; + memcpy(JavaArray::getElements(array), carray, len); if (mode == 0) free(carray); } Modified: vmkit/trunk/lib/J3/VMCore/Jnjvm.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/Jnjvm.cpp?rev=105346&r1=105345&r2=105346&view=diff ============================================================================== --- vmkit/trunk/lib/J3/VMCore/Jnjvm.cpp (original) +++ vmkit/trunk/lib/J3/VMCore/Jnjvm.cpp Wed Jun 2 16:27:17 2010 @@ -480,33 +480,40 @@ uint32 i = 0; - msg->elements[i++] = 'u'; - msg->elements[i++] = 'n'; - msg->elements[i++] = 'a'; - msg->elements[i++] = 'b'; - msg->elements[i++] = 'l'; - msg->elements[i++] = 'e'; - msg->elements[i++] = ' '; - msg->elements[i++] = 't'; - msg->elements[i++] = 'o'; - msg->elements[i++] = ' '; - msg->elements[i++] = 'f'; - msg->elements[i++] = 'i'; - msg->elements[i++] = 'n'; - msg->elements[i++] = 'd'; - msg->elements[i++] = ' '; - - for (sint32 j = 0; j < name->size; ++j) - msg->elements[i++] = name->elements[j]; - - msg->elements[i++] = ' '; - msg->elements[i++] = 'i'; - msg->elements[i++] = 'n'; - msg->elements[i++] = ' '; + ArrayUInt16::setElement(msg, 'u', i); i++; + ArrayUInt16::setElement(msg, 'n', i); i++; + ArrayUInt16::setElement(msg, 'a', i); i++; + ArrayUInt16::setElement(msg, 'b', i); i++; + ArrayUInt16::setElement(msg, 'l', i); i++; + ArrayUInt16::setElement(msg, 'e', i); i++; + ArrayUInt16::setElement(msg, ' ', i); i++; + ArrayUInt16::setElement(msg, 't', i); i++; + ArrayUInt16::setElement(msg, 'o', i); i++; + ArrayUInt16::setElement(msg, ' ', i); i++; + ArrayUInt16::setElement(msg, 'f', i); i++; + ArrayUInt16::setElement(msg, 'i', i); i++; + ArrayUInt16::setElement(msg, 'n', i); i++; + ArrayUInt16::setElement(msg, 'd', i); i++; + ArrayUInt16::setElement(msg, ' ', i); i++; + + for (sint32 j = 0; j < name->size; ++j) { + ArrayUInt16::setElement(msg, name->elements[j], i); + i++; + } + + ArrayUInt16::setElement(msg, ' ', i); i++; + ArrayUInt16::setElement(msg, 'i', i); i++; + ArrayUInt16::setElement(msg, 'n', i); i++; + ArrayUInt16::setElement(msg, ' ', i); i++; for (sint32 j = 0; j < cl->name->size; ++j) { - if (cl->name->elements[j] == '/') msg->elements[i++] = '.'; - else msg->elements[i++] = cl->name->elements[j]; + if (cl->name->elements[j] == '/') { + ArrayUInt16::setElement(msg, '.', i); + i++; + } else { + ArrayUInt16::setElement(msg, cl->name->elements[i], i); + i++; + } } str = vm->constructString(msg); @@ -544,25 +551,28 @@ uint32 i = 0; - msg->elements[i++] = 'u'; - msg->elements[i++] = 'n'; - msg->elements[i++] = 'a'; - msg->elements[i++] = 'b'; - msg->elements[i++] = 'l'; - msg->elements[i++] = 'e'; - msg->elements[i++] = ' '; - msg->elements[i++] = 't'; - msg->elements[i++] = 'o'; - msg->elements[i++] = ' '; - msg->elements[i++] = 'l'; - msg->elements[i++] = 'o'; - msg->elements[i++] = 'a'; - msg->elements[i++] = 'd'; - msg->elements[i++] = ' '; + ArrayUInt16::setElement(msg, 'u', i); i++; + ArrayUInt16::setElement(msg, 'n', i); i++; + ArrayUInt16::setElement(msg, 'a', i); i++; + ArrayUInt16::setElement(msg, 'b', i); i++; + ArrayUInt16::setElement(msg, 'l', i); i++; + ArrayUInt16::setElement(msg, 'e', i); i++; + ArrayUInt16::setElement(msg, ' ', i); i++; + ArrayUInt16::setElement(msg, 't', i); i++; + ArrayUInt16::setElement(msg, 'o', i); i++; + ArrayUInt16::setElement(msg, ' ', i); i++; + ArrayUInt16::setElement(msg, 'l', i); i++; + ArrayUInt16::setElement(msg, 'o', i); i++; + ArrayUInt16::setElement(msg, 'a', i); i++; + ArrayUInt16::setElement(msg, 'd', i); i++; + ArrayUInt16::setElement(msg, ' ', i); i++; for (sint32 j = 0; j < name->size; ++j) { - if (name->elements[j] == '/') msg->elements[i++] = '.'; - else msg->elements[i++] = name->elements[j]; + if (name->elements[j] == '/') { + ArrayUInt16::setElement(msg, '.', i); i++; + } else { + ArrayUInt16::setElement(msg, name->elements[i], i); i++; + } } str = vm->constructString(msg); @@ -579,25 +589,28 @@ uint32 i = 0; - msg->elements[i++] = 'u'; - msg->elements[i++] = 'n'; - msg->elements[i++] = 'a'; - msg->elements[i++] = 'b'; - msg->elements[i++] = 'l'; - msg->elements[i++] = 'e'; - msg->elements[i++] = ' '; - msg->elements[i++] = 't'; - msg->elements[i++] = 'o'; - msg->elements[i++] = ' '; - msg->elements[i++] = 'l'; - msg->elements[i++] = 'o'; - msg->elements[i++] = 'a'; - msg->elements[i++] = 'd'; - msg->elements[i++] = ' '; + ArrayUInt16::setElement(msg, 'u', i); i++; + ArrayUInt16::setElement(msg, 'n', i); i++; + ArrayUInt16::setElement(msg, 'a', i); i++; + ArrayUInt16::setElement(msg, 'b', i); i++; + ArrayUInt16::setElement(msg, 'l', i); i++; + ArrayUInt16::setElement(msg, 'e', i); i++; + ArrayUInt16::setElement(msg, ' ', i); i++; + ArrayUInt16::setElement(msg, 't', i); i++; + ArrayUInt16::setElement(msg, 'o', i); i++; + ArrayUInt16::setElement(msg, ' ', i); i++; + ArrayUInt16::setElement(msg, 'l', i); i++; + ArrayUInt16::setElement(msg, 'o', i); i++; + ArrayUInt16::setElement(msg, 'a', i); i++; + ArrayUInt16::setElement(msg, 'd', i); i++; + ArrayUInt16::setElement(msg, ' ', i); i++; for (sint32 j = name->offset; j < name->offset + name->count; ++j) { - if (name->value->elements[j] == '/') msg->elements[i++] = '.'; - else msg->elements[i++] = name->value->elements[j]; + if (ArrayUInt16::getElement(name->value, j) == '/') { + ArrayUInt16::setElement(msg, '.', i); i++; + } else { + ArrayUInt16::setElement(msg, ArrayUInt16::getElement(name->value, j), i); + } } str = vm->constructString(msg); @@ -630,51 +643,57 @@ uint32 i = 0; - msg->elements[i++] = 't'; - msg->elements[i++] = 'r'; - msg->elements[i++] = 'y'; - msg->elements[i++] = ' '; - msg->elements[i++] = 't'; - msg->elements[i++] = 'o'; - msg->elements[i++] = ' '; - msg->elements[i++] = 'l'; - msg->elements[i++] = 'o'; - msg->elements[i++] = 'a'; - msg->elements[i++] = 'd'; - msg->elements[i++] = ' '; + ArrayUInt16::setElement(msg, 't', i); + ArrayUInt16::setElement(msg, 'r', i); + ArrayUInt16::setElement(msg, 'y', i); + ArrayUInt16::setElement(msg, ' ', i); + ArrayUInt16::setElement(msg, 't', i); + ArrayUInt16::setElement(msg, 'o', i); + ArrayUInt16::setElement(msg, ' ', i); + ArrayUInt16::setElement(msg, 'l', i); + ArrayUInt16::setElement(msg, 'o', i); + ArrayUInt16::setElement(msg, 'a', i); + ArrayUInt16::setElement(msg, 'd', i); + ArrayUInt16::setElement(msg, ' ', i); for (sint32 j = 0; j < cl->name->size; ++j) { - if (cl->name->elements[j] == '/') msg->elements[i++] = '.'; - else msg->elements[i++] = cl->name->elements[j]; + if (cl->name->elements[j] == '/') { + ArrayUInt16::setElement(msg, '.', i); i++; + } else { + ArrayUInt16::setElement(msg, cl->name->elements[j], i); i++; + } } - msg->elements[i++] = ' '; - msg->elements[i++] = 'a'; - msg->elements[i++] = 'n'; - msg->elements[i++] = 'd'; - msg->elements[i++] = ' '; - msg->elements[i++] = 'f'; - msg->elements[i++] = 'o'; - msg->elements[i++] = 'u'; - msg->elements[i++] = 'n'; - msg->elements[i++] = 'd'; - msg->elements[i++] = ' '; - msg->elements[i++] = 'c'; - msg->elements[i++] = 'l'; - msg->elements[i++] = 'a'; - msg->elements[i++] = 's'; - msg->elements[i++] = 's'; - msg->elements[i++] = ' '; - msg->elements[i++] = 'n'; - msg->elements[i++] = 'a'; - msg->elements[i++] = 'm'; - msg->elements[i++] = 'e'; - msg->elements[i++] = 'd'; - msg->elements[i++] = ' '; + ArrayUInt16::setElement(msg, ' ', i); i++; + ArrayUInt16::setElement(msg, 'a', i); i++; + ArrayUInt16::setElement(msg, 'n', i); i++; + ArrayUInt16::setElement(msg, 'd', i); i++; + ArrayUInt16::setElement(msg, ' ', i); i++; + ArrayUInt16::setElement(msg, 'f', i); i++; + ArrayUInt16::setElement(msg, 'o', i); i++; + ArrayUInt16::setElement(msg, 'u', i); i++; + ArrayUInt16::setElement(msg, 'n', i); i++; + ArrayUInt16::setElement(msg, 'd', i); i++; + ArrayUInt16::setElement(msg, ' ', i); i++; + ArrayUInt16::setElement(msg, 'c', i); i++; + ArrayUInt16::setElement(msg, 'l', i); i++; + ArrayUInt16::setElement(msg, 'a', i); i++; + ArrayUInt16::setElement(msg, 's', i); i++; + ArrayUInt16::setElement(msg, 's', i); i++; + ArrayUInt16::setElement(msg, ' ', i); i++; + ArrayUInt16::setElement(msg, 'n', i); i++; + ArrayUInt16::setElement(msg, 'a', i); i++; + ArrayUInt16::setElement(msg, 'm', i); i++; + ArrayUInt16::setElement(msg, 'e', i); i++; + ArrayUInt16::setElement(msg, 'd', i); i++; + ArrayUInt16::setElement(msg, ' ', i); i++; for (sint32 j = 0; j < name->size; ++j) { - if (name->elements[j] == '/') msg->elements[i++] = '.'; - else msg->elements[i++] = name->elements[j]; + if (name->elements[j] == '/') { + ArrayUInt16::setElement(msg, '.', i); i++; + } else { + ArrayUInt16::setElement(msg, name->elements[j], i); i++; + } } assert(i == size && "Array overflow"); @@ -694,10 +713,9 @@ uint32 size = utf8->size; ArrayUInt16* tmp = (ArrayUInt16*)upcalls->ArrayOfChar->doNew(size, this); llvm_gcroot(tmp, 0); - uint16* buf = tmp->elements; for (uint32 i = 0; i < size; i++) { - buf[i] = utf8->elements[i]; + ArrayUInt16::setElement(tmp, utf8->elements[i], i); } return hashStr.lookupOrCreate(const_cast(tmp), this, @@ -786,17 +804,17 @@ static char* findInformation(Jnjvm* vm, ArrayUInt8* manifest, const char* entry, uint32 len) { - uint8* ptr = manifest->elements; - sint32 index = sys_strnstr((char*)ptr, entry); + llvm_gcroot(manifest, 0); + sint32 index = sys_strnstr((char*)ArrayUInt8::getElements(manifest), entry); if (index != -1) { index += len; - sint32 end = sys_strnstr((char*)&(ptr[index]), "\n"); - if (end == -1) end = manifest->size; + sint32 end = sys_strnstr((char*)ArrayUInt8::getElements(manifest) + index, "\n"); + if (end == -1) end = ArrayUInt8::getSize(manifest); else end += index; sint32 length = end - index - 1; char* name = (char*)vm->allocator.Allocate(length + 1, "class name"); - memcpy(name, &(ptr[index]), length); + memcpy(name, ArrayUInt8::getElements(manifest) + index, length); name[length] = 0; return name; } else { @@ -806,13 +824,15 @@ void ClArgumentsInfo::extractClassFromJar(Jnjvm* vm, int argc, char** argv, int i) { + ArrayUInt8* bytes = NULL; + llvm_gcroot(bytes, 0); jarFile = argv[i]; vm->setClasspath(jarFile); - ArrayUInt8* bytes = Reader::openFile(vm->bootstrapLoader, jarFile, true); + bytes = Reader::openFile(vm->bootstrapLoader, jarFile, true); - if (!bytes) { + if (bytes == NULL) { printf("Unable to access jarfile %s\n", jarFile); return; } @@ -1266,7 +1286,7 @@ UserClassArray* array = vm->bootstrapLoader->upcalls->ArrayOfString; args = (ArrayObject*)array->doNew(info.argc - 2, vm); for (int i = 2; i < info.argc; ++i) { - args->elements[i - 2] = (JavaObject*)vm->asciizToStr(info.argv[i]); + ArrayObject::setElement(args, (JavaObject*)vm->asciizToStr(info.argv[i]), i - 2); } vm->executeClass(info.className, args); @@ -1394,10 +1414,9 @@ ArrayUInt16* Jnjvm::asciizToArray(const char* asciiz) { uint32 size = strlen(asciiz); ArrayUInt16* tmp = (ArrayUInt16*)upcalls->ArrayOfChar->doNew(size, this); - uint16* buf = tmp->elements; for (uint32 i = 0; i < size; i++) { - buf[i] = asciiz[i]; + ArrayUInt16::setElement(tmp, asciiz[i], i); } return tmp; } Modified: vmkit/trunk/lib/J3/VMCore/JnjvmClassLoader.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/JnjvmClassLoader.cpp?rev=105346&r1=105345&r2=105346&view=diff ============================================================================== --- vmkit/trunk/lib/J3/VMCore/JnjvmClassLoader.cpp (original) +++ vmkit/trunk/lib/J3/VMCore/JnjvmClassLoader.cpp Wed Jun 2 16:27:17 2010 @@ -569,47 +569,44 @@ llvm_gcroot(str, 0); - UTF8* name = (UTF8*)alloca(sizeof(UTF8) + str->count * sizeof(uint16)); + UTF8* name = (UTF8*)malloc(sizeof(UTF8) + str->count * sizeof(uint16)); - if (name) { - name->size = str->count; - if (str->value->elements[str->offset] != I_TAB) { - for (sint32 i = 0; i < str->count; ++i) { - uint16 cur = str->value->elements[str->offset + i]; - if (cur == '.') name->elements[i] = '/'; - else if (cur == '/') return 0; - else name->elements[i] = cur; - } - } else { - for (sint32 i = 0; i < str->count; ++i) { - uint16 cur = str->value->elements[str->offset + i]; - if (cur == '.') name->elements[i] = '/'; - else if (cur == '/') return 0; - else name->elements[i] = cur; - } + name->size = str->count; + if (ArrayUInt16::getElement(str->value, str->offset) != I_TAB) { + for (sint32 i = 0; i < str->count; ++i) { + uint16 cur = ArrayUInt16::getElement(str->value, str->offset + i); + if (cur == '.') name->elements[i] = '/'; + else if (cur == '/') return 0; + else name->elements[i] = cur; + } + } else { + for (sint32 i = 0; i < str->count; ++i) { + uint16 cur = ArrayUInt16::getElement(str->value, str->offset + i); + if (cur == '.') name->elements[i] = '/'; + else if (cur == '/') return 0; + else name->elements[i] = cur; } - - return loadClassFromUserUTF8(name, doResolve, doThrow, str); } - - return 0; + + UserCommonClass* cls = loadClassFromUserUTF8(name, doResolve, doThrow, str); + free(name); + return cls; } UserCommonClass* JnjvmClassLoader::lookupClassFromJavaString(JavaString* str) { llvm_gcroot(str, 0); - UTF8* name = (UTF8*)alloca(sizeof(UTF8) + str->count * sizeof(uint16)); - if (name) { - name->size = str->count; - for (sint32 i = 0; i < str->count; ++i) { - uint16 cur = str->value->elements[str->offset + i]; - if (cur == '.') name->elements[i] = '/'; - else name->elements[i] = cur; - } - return lookupClass(name); - } - return 0; + UTF8* name = (UTF8*)malloc(sizeof(UTF8) + str->count * sizeof(uint16)); + name->size = str->count; + for (sint32 i = 0; i < str->count; ++i) { + uint16 cur = ArrayUInt16::getElement(str->value, str->offset + i); + if (cur == '.') name->elements[i] = '/'; + else name->elements[i] = cur; + } + UserCommonClass* cls = lookupClass(name); + free(name); + return cls; } UserCommonClass* JnjvmClassLoader::lookupClass(const UTF8* utf8) { Modified: vmkit/trunk/lib/J3/VMCore/LockedMap.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/LockedMap.h?rev=105346&r1=105345&r2=105346&view=diff ============================================================================== --- vmkit/trunk/lib/J3/VMCore/LockedMap.h (original) +++ vmkit/trunk/lib/J3/VMCore/LockedMap.h Wed Jun 2 16:27:17 2010 @@ -48,10 +48,11 @@ { bool operator()(const ArrayUInt16* s1, const ArrayUInt16* s2) const { - if (s1->size < s2->size) return true; - else if (s1->size > s2->size) return false; - else return memcmp((const char*)s1->elements, (const char*)s2->elements, - s1->size * sizeof(uint16)) < 0; + if (ArrayUInt16::getSize(s1) < ArrayUInt16::getSize(s2)) return true; + else if (ArrayUInt16::getSize(s1) > ArrayUInt16::getSize(s2)) return false; + else return memcmp((const char*)ArrayUInt16::getElements(s1), + (const char*)ArrayUInt16::getElements(s2), + ArrayUInt16::getSize(s1) * sizeof(uint16)) < 0; } }; Modified: vmkit/trunk/lib/J3/VMCore/Reader.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/Reader.cpp?rev=105346&r1=105345&r2=105346&view=diff ============================================================================== --- vmkit/trunk/lib/J3/VMCore/Reader.cpp (original) +++ vmkit/trunk/lib/J3/VMCore/Reader.cpp Wed Jun 2 16:27:17 2010 @@ -28,14 +28,15 @@ ArrayUInt8* Reader::openFile(JnjvmBootstrapLoader* loader, const char* path, bool temp) { FILE* fp = fopen(path, "r"); - ArrayUInt8* res = 0; + ArrayUInt8* res = NULL; + llvm_gcroot(res, 0); if (fp != 0) { fseek(fp, 0, SeekEnd); long nbb = ftell(fp); fseek(fp, 0, SeekSet); UserClassArray* array = loader->upcalls->ArrayOfByte; res = (ArrayUInt8*)array->doNew((sint32)nbb, loader->allocator, temp); - if (fread(res->elements, nbb, 1, fp) == 0) { + if (fread(ArrayUInt8::getElements(res), nbb, 1, fp) == 0) { fprintf(stderr, "fread error\n"); abort(); } @@ -46,17 +47,17 @@ ArrayUInt8* Reader::openZip(JnjvmBootstrapLoader* loader, ZipArchive* archive, const char* filename) { - ArrayUInt8* ret = 0; + ArrayUInt8* res = 0; + llvm_gcroot(res, 0); ZipFile* file = archive->getFile(filename); if (file != 0) { UserClassArray* array = loader->upcalls->ArrayOfByte; - ArrayUInt8* res = - (ArrayUInt8*)array->doNew((sint32)file->ucsize, loader->allocator); + res = (ArrayUInt8*)array->doNew((sint32)file->ucsize, loader->allocator); if (archive->readFile(res, file) != 0) { - ret = res; + return res; } } - return ret; + return NULL; } void Reader::seek(uint32 pos, int from) { Modified: vmkit/trunk/lib/J3/VMCore/Reader.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/Reader.h?rev=105346&r1=105345&r2=105346&view=diff ============================================================================== --- vmkit/trunk/lib/J3/VMCore/Reader.h (original) +++ vmkit/trunk/lib/J3/VMCore/Reader.h Wed Jun 2 16:27:17 2010 @@ -84,11 +84,13 @@ const char* filename); uint8 readU1() { - return (*bytes)->elements[cursor++]; + ++cursor; + return ArrayUInt8::getElement(*bytes, cursor - 1); } sint8 readS1() { - return (*bytes)->elements[cursor++]; + ++cursor; + return ArrayUInt8::getElement(*bytes, cursor - 1); } uint16 readU2() { @@ -122,7 +124,7 @@ } Reader(ArrayUInt8** array, uint32 start = 0, uint32 end = 0) { - if (!end) end = (*array)->size; + if (!end) end = ArrayUInt8::getSize(*array); this->bytes = array; this->cursor = start; this->min = start; Modified: vmkit/trunk/lib/J3/VMCore/VirtualTables.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/VirtualTables.cpp?rev=105346&r1=105345&r2=105346&view=diff ============================================================================== --- vmkit/trunk/lib/J3/VMCore/VirtualTables.cpp (original) +++ vmkit/trunk/lib/J3/VMCore/VirtualTables.cpp Wed Jun 2 16:27:17 2010 @@ -91,9 +91,10 @@ cl->classLoader->getJavaClassLoaderPtr(), closure); - for (sint32 i = 0; i < obj->size; i++) { - if (obj->elements[i]) { - mvm::Collector::markAndTrace(obj, obj->elements + i, closure); + for (sint32 i = 0; i < ArrayObject::getSize(obj); i++) { + if (ArrayObject::getElement(obj, i) != NULL) { + mvm::Collector::markAndTrace( + obj, ArrayObject::getElements(obj) + i, closure); } } } Modified: vmkit/trunk/lib/J3/VMCore/Zip.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/Zip.cpp?rev=105346&r1=105345&r2=105346&view=diff ============================================================================== --- vmkit/trunk/lib/J3/VMCore/Zip.cpp (original) +++ vmkit/trunk/lib/J3/VMCore/Zip.cpp Wed Jun 2 16:27:17 2010 @@ -103,8 +103,8 @@ if (searchPos >= st) { sint32 searchPtr = temp + (searchPos - st); while (searchPtr > temp) { - if ((*(reader.bytes))->elements[searchPtr] == 'P' && - !(memcmp(&((*(reader.bytes))->elements[searchPtr]), HDR_ENDCENTRAL, 4))) { + if (ArrayUInt8::getElement(*(reader.bytes), searchPtr) == 'P' && + !(memcmp(ArrayUInt8::getElements(*(reader.bytes)) + searchPtr, HDR_ENDCENTRAL, 4))) { sint32 offset = searchPtr + 4 + E_OFFSET_START_CENTRAL_DIRECTORY; reader.cursor = offset; this->ofscd = readEndianDep4(reader); @@ -123,7 +123,7 @@ reader.cursor = temp; while (true) { - if (memcmp(&((*(reader.bytes))->elements[temp]), HDR_CENTRAL, 4)) return; + if (memcmp(ArrayUInt8::getElements(*(reader.bytes)) + temp, HDR_CENTRAL, 4)) return; ZipFile* ptr = new(allocator, "ZipFile") ZipFile(); reader.cursor = temp + 4 + C_COMPRESSION_METHOD; ptr->compressionMethod = readEndianDep2(reader); @@ -147,7 +147,7 @@ ptr->filename = (char*)allocator.Allocate(ptr->filenameLength + 1, "Zip file name"); - memcpy(ptr->filename, &((*(reader.bytes))->elements[temp]), + memcpy(ptr->filename, ArrayUInt8::getElements(*(reader.bytes)) + temp, ptr->filenameLength); ptr->filename[ptr->filenameLength] = 0; @@ -161,16 +161,16 @@ } sint32 ZipArchive::readFile(ArrayUInt8* array, const ZipFile* file) { + llvm_gcroot(array, 0); uint32 bytesLeft = 0; uint32 filenameLength = 0; uint32 extraFieldLength = 0; - char* ptr = (char*)array->elements; uint32 temp = 0; Reader reader(&bytes); reader.cursor = file->rolh; - if (!(memcmp(&((*(reader.bytes))->elements[file->rolh]), HDR_LOCAL, 4))) { + if (!(memcmp(ArrayUInt8::getElements(*(reader.bytes)) + file->rolh, HDR_LOCAL, 4))) { reader.cursor += 4; temp = reader.cursor; reader.cursor += L_FILENAME_LENGTH; @@ -181,14 +181,14 @@ temp + extraFieldLength + filenameLength + LOCAL_FILE_HEADER_SIZE; if (file->compressionMethod == ZIP_STORE) { - memcpy(ptr, &((*(reader.bytes))->elements[reader.cursor]), file->ucsize); + memcpy(ArrayUInt8::getElements(array), ArrayUInt8::getElements(*(reader.bytes)) + reader.cursor, file->ucsize); return 1; } else if (file->compressionMethod == ZIP_DEFLATE) { z_stream stre; sint32 err = 0; bytesLeft = file->csize; - stre.next_out = (Bytef*)ptr; + stre.next_out = (Bytef*)ArrayUInt8::getElements(array); stre.avail_out = file->ucsize; stre.zalloc = 0; stre.zfree = 0; @@ -201,7 +201,7 @@ while (bytesLeft) { uint32 size = 0; - stre.next_in = &((*(reader.bytes))->elements[reader.cursor]); + stre.next_in = ArrayUInt8::getElements(*(reader.bytes)) + reader.cursor; if (bytesLeft > 1024) size = 1024; else size = bytesLeft; Modified: vmkit/trunk/mmtk/mmtk-j3/RuntimeHelpers.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/mmtk-j3/RuntimeHelpers.cpp?rev=105346&r1=105345&r2=105346&view=diff ============================================================================== --- vmkit/trunk/mmtk/mmtk-j3/RuntimeHelpers.cpp (original) +++ vmkit/trunk/mmtk/mmtk-j3/RuntimeHelpers.cpp Wed Jun 2 16:27:17 2010 @@ -14,7 +14,7 @@ using namespace j3; extern "C" uint16_t MMTkCharAt(JavaString* str, uint32_t index) { - return str->value->elements[index]; + return ArrayUInt16::getElement(str->value, index); } extern "C" JavaObject* MMTkGetClass(JavaObject* obj) { Modified: vmkit/trunk/mmtk/mmtk-j3/Strings.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/mmtk-j3/Strings.cpp?rev=105346&r1=105345&r2=105346&view=diff ============================================================================== --- vmkit/trunk/mmtk/mmtk-j3/Strings.cpp (original) +++ vmkit/trunk/mmtk/mmtk-j3/Strings.cpp Wed Jun 2 16:27:17 2010 @@ -17,8 +17,9 @@ extern "C" void Java_org_j3_mmtk_Strings_write___3CI(JavaObject* str, ArrayUInt16* msg, sint32 len) { - for (sint32 i = 0; i < len; ++i) - fprintf(stderr, "%c", msg->elements[i]); + for (sint32 i = 0; i < len; ++i) { + fprintf(stderr, "%c", ArrayUInt16::getElement(msg, i)); + } } extern "C" void Java_org_j3_mmtk_Strings_writeThreadId___3CI(JavaObject*str, @@ -27,8 +28,9 @@ fprintf(stderr, "[%p] ", (void*)JavaThread::get()); - for (sint32 i = 0; i < len; ++i) - fprintf(stderr, "%c", msg->elements[i]); + for (sint32 i = 0; i < len; ++i) { + fprintf(stderr, "%c", ArrayUInt16::getElement(msg, i)); + } } @@ -41,7 +43,8 @@ sint32 n = (dstBegin + len <= dstEnd) ? len : (dstEnd - dstBegin); for (sint32 i = 0; i < n; i++) { - dst->elements[dstBegin + i] = str->value->elements[str->offset + i]; + ArrayUInt16::setElement(dst, + ArrayUInt16::getElement(str->value, str->offset + i), dstBegin + i); } return n; From nicolas.geoffray at lip6.fr Thu Jun 3 13:57:35 2010 From: nicolas.geoffray at lip6.fr (Nicolas Geoffray) Date: Thu, 03 Jun 2010 20:57:35 -0000 Subject: [vmkit-commits] [vmkit] r105410 - in /vmkit/trunk/lib/J3: Compiler/JavaAOTCompiler.cpp VMCore/JavaClass.cpp VMCore/JavaClass.h VMCore/Jnjvm.cpp VMCore/JnjvmClassLoader.cpp VMCore/Reader.cpp VMCore/VirtualTables.cpp VMCore/Zip.cpp VMCore/Zip.h Message-ID: <20100603205735.CB4DA312800A@llvm.org> Author: geoffray Date: Thu Jun 3 15:57:35 2010 New Revision: 105410 URL: http://llvm.org/viewvc/llvm-project?rev=105410&view=rev Log: Arrays of bytes can only be GC-allocated now. Modified: vmkit/trunk/lib/J3/Compiler/JavaAOTCompiler.cpp vmkit/trunk/lib/J3/VMCore/JavaClass.cpp vmkit/trunk/lib/J3/VMCore/JavaClass.h vmkit/trunk/lib/J3/VMCore/Jnjvm.cpp vmkit/trunk/lib/J3/VMCore/JnjvmClassLoader.cpp vmkit/trunk/lib/J3/VMCore/Reader.cpp vmkit/trunk/lib/J3/VMCore/VirtualTables.cpp vmkit/trunk/lib/J3/VMCore/Zip.cpp vmkit/trunk/lib/J3/VMCore/Zip.h Modified: vmkit/trunk/lib/J3/Compiler/JavaAOTCompiler.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/Compiler/JavaAOTCompiler.cpp?rev=105410&r1=105409&r2=105410&view=diff ============================================================================== --- vmkit/trunk/lib/J3/Compiler/JavaAOTCompiler.cpp (original) +++ vmkit/trunk/lib/J3/Compiler/JavaAOTCompiler.cpp Thu Jun 3 15:57:35 2010 @@ -1885,8 +1885,7 @@ JavaAOTCompiler* M, JnjvmBootstrapLoader* bootstrapLoader, std::vector& classes) { - - ZipArchive archive(bytes, bootstrapLoader->allocator); + ZipArchive archive(&bytes, bootstrapLoader->allocator); char* realName = (char*)alloca(4096); for (ZipArchive::table_iterator i = archive.filetable.begin(), @@ -1898,7 +1897,7 @@ if (size > 6 && !strcmp(&(name[size - 6]), ".class")) { UserClassArray* array = bootstrapLoader->upcalls->ArrayOfByte; ArrayUInt8* res = - (ArrayUInt8*)array->doNew(file->ucsize, bootstrapLoader->allocator); + (ArrayUInt8*)array->doNew(file->ucsize, JavaThread::get()->getJVM()); int ok = archive.readFile(res, file); if (!ok) return; @@ -1912,7 +1911,7 @@ !strcmp(&name[size - 4], ".zip"))) { UserClassArray* array = bootstrapLoader->upcalls->ArrayOfByte; ArrayUInt8* res = - (ArrayUInt8*)array->doNew(file->ucsize, bootstrapLoader->allocator); + (ArrayUInt8*)array->doNew(file->ucsize, JavaThread::get()->getJVM()); int ok = archive.readFile(res, file); if (!ok) return; Modified: vmkit/trunk/lib/J3/VMCore/JavaClass.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/JavaClass.cpp?rev=105410&r1=105409&r2=105410&view=diff ============================================================================== --- vmkit/trunk/lib/J3/VMCore/JavaClass.cpp (original) +++ vmkit/trunk/lib/J3/VMCore/JavaClass.cpp Thu Jun 3 15:57:35 2010 @@ -254,15 +254,11 @@ } JavaObject* UserClassArray::doNew(sint32 n, Jnjvm* vm) { - if (n < 0) + if (n < 0) { vm->negativeArraySizeException(n); - else if (n > JavaArray::MaxArraySize) + } else if (n > JavaArray::MaxArraySize) { vm->outOfMemoryError(); - - return doNew(n); -} - -JavaObject* UserClassArray::doNew(sint32 n) { + } JavaObject* res = NULL; llvm_gcroot(res, 0); UserCommonClass* cl = baseClass(); @@ -275,29 +271,6 @@ return res; } -JavaObject* UserClassArray::doNew(sint32 n, mvm::BumpPtrAllocator& allocator, - bool temp) { - UserCommonClass* cl = baseClass(); - - uint32 logSize = cl->isPrimitive() ? - cl->asPrimitiveClass()->logSize : (sizeof(JavaObject*) == 8 ? 3 : 2); - VirtualTable* VT = virtualVT; - uint32 size = sizeof(JavaObject) + sizeof(ssize_t) + (n << logSize); - - JavaObject* res = 0; - - // If the array is not temporary, use the allocator. - if (!temp) { - res = (JavaObject*)allocator.Allocate(size, "Array"); - } else { - // Otherwise, allocate with the malloc - res = (JavaObject*)malloc(size); - } - ((void**)res)[0] = VT; - JavaArray::setSize(res, n); - return res; -} - void* JavaMethod::compiledPtr() { if (code != 0) return code; else { Modified: vmkit/trunk/lib/J3/VMCore/JavaClass.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/JavaClass.h?rev=105410&r1=105409&r2=105410&view=diff ============================================================================== --- vmkit/trunk/lib/J3/VMCore/JavaClass.h (original) +++ vmkit/trunk/lib/J3/VMCore/JavaClass.h Thu Jun 3 15:57:35 2010 @@ -926,12 +926,6 @@ public: - /// doNew - Allocate a new array with the given allocator. - /// - JavaObject* doNew(sint32 n, mvm::BumpPtrAllocator& allocator, - bool temp = false); - JavaObject* doNew(sint32 n); - /// _baseClass - The base class of the array. /// CommonClass* _baseClass; Modified: vmkit/trunk/lib/J3/VMCore/Jnjvm.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/Jnjvm.cpp?rev=105410&r1=105409&r2=105410&view=diff ============================================================================== --- vmkit/trunk/lib/J3/VMCore/Jnjvm.cpp (original) +++ vmkit/trunk/lib/J3/VMCore/Jnjvm.cpp Thu Jun 3 15:57:35 2010 @@ -825,7 +825,9 @@ void ClArgumentsInfo::extractClassFromJar(Jnjvm* vm, int argc, char** argv, int i) { ArrayUInt8* bytes = NULL; + ArrayUInt8* res = NULL; llvm_gcroot(bytes, 0); + llvm_gcroot(res, 0); jarFile = argv[i]; vm->setClasspath(jarFile); @@ -837,13 +839,12 @@ return; } - ZipArchive archive(bytes, vm->allocator); + ZipArchive archive(&bytes, vm->allocator); if (archive.getOfscd() != -1) { ZipFile* file = archive.getFile(PATH_MANIFEST); if (file) { UserClassArray* array = vm->bootstrapLoader->upcalls->ArrayOfByte; - ArrayUInt8* res = (ArrayUInt8*)array->doNew(file->ucsize, vm->allocator, - true); + res = (ArrayUInt8*)array->doNew(file->ucsize, vm); int ok = archive.readFile(res, file); if (ok) { char* mainClass = findInformation(vm, res, MAIN_CLASS, @@ -859,14 +860,12 @@ } else { printf("Can't extract Manifest file from archive %s\n", jarFile); } - free(res); } else { printf("Can't find Manifest file in archive %s\n", jarFile); } } else { printf("Can't find archive %s\n", jarFile); } - free(bytes); } void ClArgumentsInfo::nyi() { @@ -1255,6 +1254,15 @@ llvm_gcroot(exc, 0); Jnjvm* vm = thread->getJVM(); + vm->argumentsInfo.readArgs(vm); + if (vm->argumentsInfo.className == NULL) { + vm->threadSystem.nonDaemonThreads = 0; + return; + } + int pos = vm->argumentsInfo.appArgumentsPos; + vm->argumentsInfo.argv = vm->argumentsInfo.argv + pos - 1; + vm->argumentsInfo.argc = vm->argumentsInfo.argc - pos + 1; + vm->mainThread = thread; TRY { @@ -1323,31 +1331,22 @@ void Jnjvm::runApplication(int argc, char** argv) { argumentsInfo.argc = argc; argumentsInfo.argv = argv; - argumentsInfo.readArgs(this); - if (argumentsInfo.className) { - int pos = argumentsInfo.appArgumentsPos; - - argumentsInfo.argv = argumentsInfo.argv + pos - 1; - argumentsInfo.argc = argumentsInfo.argc - pos + 1; #ifdef SERVICE - struct sigaction sa; - sigset_t mask; - sigfillset(&mask); - sigaction(SIGUSR1, 0, &sa); - sa.sa_mask = mask; - sa.sa_handler = terminationHandler; - sa.sa_flags |= SA_RESTART; - sigaction(SIGUSR1, &sa, NULL); + struct sigaction sa; + sigset_t mask; + sigfillset(&mask); + sigaction(SIGUSR1, 0, &sa); + sa.sa_mask = mask; + sa.sa_handler = terminationHandler; + sa.sa_flags |= SA_RESTART; + sigaction(SIGUSR1, &sa, NULL); - mvm::Thread* th = new JavaThread(0, 0, this); - th->start(serviceCPUMonitor); + mvm::Thread* th = new JavaThread(0, 0, this); + th->start(serviceCPUMonitor); #endif - mainThread = new JavaThread(0, 0, this); - mainThread->start((void (*)(mvm::Thread*))mainJavaStart); - } else { - threadSystem.nonDaemonThreads = 0; - } + mainThread = new JavaThread(0, 0, this); + mainThread->start((void (*)(mvm::Thread*))mainJavaStart); } Jnjvm::Jnjvm(mvm::BumpPtrAllocator& Alloc, JnjvmBootstrapLoader* loader) : Modified: vmkit/trunk/lib/J3/VMCore/JnjvmClassLoader.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/JnjvmClassLoader.cpp?rev=105410&r1=105409&r2=105410&view=diff ============================================================================== --- vmkit/trunk/lib/J3/VMCore/JnjvmClassLoader.cpp (original) +++ vmkit/trunk/lib/J3/VMCore/JnjvmClassLoader.cpp Thu Jun 3 15:57:35 2010 @@ -658,9 +658,7 @@ UserClass* JnjvmClassLoader::constructClass(const UTF8* name, ArrayUInt8* bytes) { - - // The array of bytes might be GC-allocated or malloc'd. Consider - // that this function can never be interrupted. + llvm_gcroot(bytes, 0); assert(bytes && "constructing a class without bytes"); classes->lock.lock(); ClassMap::iterator End = classes->map.end(); @@ -960,11 +958,10 @@ temp[len + 1] = 0; bootClasspath.push_back(temp); } else { - ArrayUInt8* bytes = - Reader::openFile(this, rp); + ArrayUInt8* bytes = Reader::openFile(this, rp); if (bytes) { ZipArchive *archive = new(allocator, "ZipArchive") - ZipArchive(bytes, allocator); + ZipArchive(&bytes, allocator); if (archive) { bootArchives.push_back(archive); } Modified: vmkit/trunk/lib/J3/VMCore/Reader.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/Reader.cpp?rev=105410&r1=105409&r2=105410&view=diff ============================================================================== --- vmkit/trunk/lib/J3/VMCore/Reader.cpp (original) +++ vmkit/trunk/lib/J3/VMCore/Reader.cpp Thu Jun 3 15:57:35 2010 @@ -35,7 +35,7 @@ long nbb = ftell(fp); fseek(fp, 0, SeekSet); UserClassArray* array = loader->upcalls->ArrayOfByte; - res = (ArrayUInt8*)array->doNew((sint32)nbb, loader->allocator, temp); + res = (ArrayUInt8*)array->doNew((sint32)nbb, JavaThread::get()->getJVM()); if (fread(ArrayUInt8::getElements(res), nbb, 1, fp) == 0) { fprintf(stderr, "fread error\n"); abort(); @@ -52,7 +52,7 @@ ZipFile* file = archive->getFile(filename); if (file != 0) { UserClassArray* array = loader->upcalls->ArrayOfByte; - res = (ArrayUInt8*)array->doNew((sint32)file->ucsize, loader->allocator); + res = (ArrayUInt8*)array->doNew((sint32)file->ucsize, JavaThread::get()->getJVM()); if (archive->readFile(res, file) != 0) { return res; } Modified: vmkit/trunk/lib/J3/VMCore/VirtualTables.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/VirtualTables.cpp?rev=105410&r1=105409&r2=105410&view=diff ============================================================================== --- vmkit/trunk/lib/J3/VMCore/VirtualTables.cpp (original) +++ vmkit/trunk/lib/J3/VMCore/VirtualTables.cpp Thu Jun 3 15:57:35 2010 @@ -29,6 +29,7 @@ #include "Jnjvm.h" #include "JnjvmClassLoader.h" #include "LockedMap.h" +#include "Zip.h" using namespace j3; @@ -38,9 +39,9 @@ // absolutely necessary. If there is an easy way to avoid it, do it! Only // Java classes should be GC classes. // Having many GC classes gives more work to the GC for the scanning phase -// and for the relocation phase (for copying collectors. +// and for the relocation phase (for copying collectors). // -// In JnJVM, there is only one internal gc object, the class loader. +// In J3, there is only one internal gc object, the class loader. // We decided that this was the best solution because // otherwise it would involve hacks on the java.lang.Classloader class. // Therefore, we create a new GC class with a finalize method that will @@ -99,7 +100,7 @@ } } -/// Method for scanning a native array. Only scan the lock. The classloader of +/// Method for scanning a native array. The classloader of /// the class is the bootstrap loader and therefore does not need to be /// scanned here. extern "C" void JavaArrayTracer(JavaArray* obj, uintptr_t closure) { @@ -167,9 +168,7 @@ void Class::tracer(uintptr_t closure) { CommonClass::tracer(closure); - if (classLoader != classLoader->bootstrapLoader) { - mvm::Collector::markAndTraceRoot(&bytes, closure); - } + mvm::Collector::markAndTraceRoot(&bytes, closure); for (uint32 i = 0; i < NR_ISOLATES; ++i) { TaskClassMirror &M = IsolateInfo[i]; @@ -238,6 +237,11 @@ TRACE_DELEGATEE(upcalls->OfLong); TRACE_DELEGATEE(upcalls->OfDouble); #undef TRACE_DELEGATEE + + for (std::vector::iterator i = bootArchives.begin(), + e = bootArchives.end(); i != e; i++) { + mvm::Collector::markAndTraceRoot((*i)->bytes, closure); + } } //===----------------------------------------------------------------------===// Modified: vmkit/trunk/lib/J3/VMCore/Zip.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/Zip.cpp?rev=105410&r1=105409&r2=105410&view=diff ============================================================================== --- vmkit/trunk/lib/J3/VMCore/Zip.cpp (original) +++ vmkit/trunk/lib/J3/VMCore/Zip.cpp Thu Jun 3 15:57:35 2010 @@ -17,7 +17,7 @@ using namespace j3; -ZipArchive::ZipArchive(ArrayUInt8* bytes, mvm::BumpPtrAllocator& A) : allocator(A) { +ZipArchive::ZipArchive(ArrayUInt8** bytes, mvm::BumpPtrAllocator& A) : allocator(A) { this->bytes = bytes; findOfscd(); if (ofscd > -1) addFiles(); @@ -73,7 +73,7 @@ sint32 minOffs = 0; sint32 st = END_CENTRAL_DIRECTORY_FILE_HEADER_SIZE + 4; - Reader reader(&bytes); + Reader reader(bytes); curOffs = reader.max; if (curOffs >= (65535 + END_CENTRAL_DIRECTORY_FILE_HEADER_SIZE + 4)) { minOffs = curOffs - (65535 + END_CENTRAL_DIRECTORY_FILE_HEADER_SIZE + 4); @@ -119,7 +119,7 @@ void ZipArchive::addFiles() { sint32 temp = ofscd; - Reader reader(&bytes); + Reader reader(bytes); reader.cursor = temp; while (true) { @@ -167,7 +167,7 @@ uint32 extraFieldLength = 0; uint32 temp = 0; - Reader reader(&bytes); + Reader reader(bytes); reader.cursor = file->rolh; if (!(memcmp(ArrayUInt8::getElements(*(reader.bytes)) + file->rolh, HDR_LOCAL, 4))) { Modified: vmkit/trunk/lib/J3/VMCore/Zip.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/Zip.h?rev=105410&r1=105409&r2=105410&view=diff ============================================================================== --- vmkit/trunk/lib/J3/VMCore/Zip.h (original) +++ vmkit/trunk/lib/J3/VMCore/Zip.h Thu Jun 3 15:57:35 2010 @@ -49,9 +49,9 @@ public: std::map filetable; typedef std::map::iterator table_iterator; + ArrayUInt8** bytes; private: - ArrayUInt8* bytes; void findOfscd(); void addFiles(); @@ -70,7 +70,7 @@ } int getOfscd() { return ofscd; } - ZipArchive(ArrayUInt8* bytes, mvm::BumpPtrAllocator& allocator); + ZipArchive(ArrayUInt8** bytes, mvm::BumpPtrAllocator& allocator); ZipFile* getFile(const char* filename); int readFile(ArrayUInt8* array, const ZipFile* file); From nicolas.geoffray at lip6.fr Mon Jun 7 11:15:20 2010 From: nicolas.geoffray at lip6.fr (Nicolas Geoffray) Date: Mon, 07 Jun 2010 18:15:20 -0000 Subject: [vmkit-commits] [vmkit] r105538 - in /vmkit/trunk: include/mvm/MethodInfo.h include/mvm/VirtualMachine.h lib/J3/VMCore/JavaClass.cpp lib/J3/VMCore/JavaClass.h Message-ID: <20100607181520.D6E132A6C12C@llvm.org> Author: geoffray Date: Mon Jun 7 13:15:20 2010 New Revision: 105538 URL: http://llvm.org/viewvc/llvm-project?rev=105538&view=rev Log: Give the CamlFrame info to a static Java method. Modified: vmkit/trunk/include/mvm/MethodInfo.h vmkit/trunk/include/mvm/VirtualMachine.h vmkit/trunk/lib/J3/VMCore/JavaClass.cpp vmkit/trunk/lib/J3/VMCore/JavaClass.h Modified: vmkit/trunk/include/mvm/MethodInfo.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/mvm/MethodInfo.h?rev=105538&r1=105537&r2=105538&view=diff ============================================================================== --- vmkit/trunk/include/mvm/MethodInfo.h (original) +++ vmkit/trunk/include/mvm/MethodInfo.h Mon Jun 7 13:15:20 2010 @@ -44,8 +44,8 @@ }; class CamlMethodInfo : public MethodInfo { - CamlFrame* CF; public: + CamlFrame* CF; virtual void scan(uintptr_t closure, void* ip, void* addr); CamlMethodInfo(CamlFrame* C, void* ip); }; Modified: vmkit/trunk/include/mvm/VirtualMachine.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/mvm/VirtualMachine.h?rev=105538&r1=105537&r2=105538&view=diff ============================================================================== --- vmkit/trunk/include/mvm/VirtualMachine.h (original) +++ vmkit/trunk/include/mvm/VirtualMachine.h Mon Jun 7 13:15:20 2010 @@ -45,6 +45,19 @@ /// FunctionMapLock - Spin lock to protect the Functions map. /// mvm::SpinLock FunctionMapLock; + + /// IPToMethodInfo - Map a code start instruction instruction to the MethodInfo. + /// + MethodInfo* CodeStartToMethodInfo(void* ip) { + FunctionMapLock.acquire(); + std::map::iterator I = Functions.find(ip); + MethodInfo* res = NULL; + if (I != Functions.end()) { + res = I->second; + } + FunctionMapLock.release(); + return res; + } }; /// StartEndFunctionMap - This map is for functions for which we have Modified: vmkit/trunk/lib/J3/VMCore/JavaClass.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/JavaClass.cpp?rev=105538&r1=105537&r2=105538&view=diff ============================================================================== --- vmkit/trunk/lib/J3/VMCore/JavaClass.cpp (original) +++ vmkit/trunk/lib/J3/VMCore/JavaClass.cpp Mon Jun 7 13:15:20 2010 @@ -302,10 +302,11 @@ if (code == 0) { code = ptr; Jnjvm* vm = JavaThread::get()->getJVM(); - JavaStaticMethodInfo* MI = + mvm::MethodInfo* MI = vm->SharedStaticFunctions.CodeStartToMethodInfo(ptr); + JavaStaticMethodInfo* JMI = new (classDef->classLoader->allocator, "JavaStaticMethodInfo") - JavaStaticMethodInfo(0, code, this); - vm->StaticFunctions.addMethodInfo(MI, code); + JavaStaticMethodInfo((mvm::CamlMethodInfo*)MI, code, this); + vm->StaticFunctions.addMethodInfo(JMI, code); classDef->classLoader->getCompiler()->setMethod(this, ptr, name); } access |= ACC_NATIVE; Modified: vmkit/trunk/lib/J3/VMCore/JavaClass.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/JavaClass.h?rev=105538&r1=105537&r2=105538&view=diff ============================================================================== --- vmkit/trunk/lib/J3/VMCore/JavaClass.h (original) +++ vmkit/trunk/lib/J3/VMCore/JavaClass.h Mon Jun 7 13:15:20 2010 @@ -963,11 +963,12 @@ class JavaStaticMethodInfo : public mvm::CamlMethodInfo { protected: JavaMethod* meth; + public: virtual void print(void* ip, void* addr); - JavaStaticMethodInfo(mvm::CamlFrame* CF, void* ip, JavaMethod* M) : - mvm::CamlMethodInfo(CF, ip) { + JavaStaticMethodInfo(mvm::CamlMethodInfo* super, void* ip, JavaMethod* M) : + mvm::CamlMethodInfo(super != NULL ? super->CF : NULL, ip) { meth = M; MethodType = 1; } From nicolas.geoffray at lip6.fr Tue Jun 8 10:57:59 2010 From: nicolas.geoffray at lip6.fr (Nicolas Geoffray) Date: Tue, 08 Jun 2010 17:57:59 -0000 Subject: [vmkit-commits] [vmkit] r105623 - in /vmkit/trunk/lib/J3/VMCore: JavaClass.cpp JavaClass.h Jnjvm.cpp Message-ID: <20100608175759.DAB402A6C12C@llvm.org> Author: geoffray Date: Tue Jun 8 12:57:59 2010 New Revision: 105623 URL: http://llvm.org/viewvc/llvm-project?rev=105623&view=rev Log: Rename InitField to InitStaticField, as it should only be used for static fields. Modified: vmkit/trunk/lib/J3/VMCore/JavaClass.cpp vmkit/trunk/lib/J3/VMCore/JavaClass.h vmkit/trunk/lib/J3/VMCore/Jnjvm.cpp Modified: vmkit/trunk/lib/J3/VMCore/JavaClass.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/JavaClass.cpp?rev=105623&r1=105622&r2=105623&view=diff ============================================================================== --- vmkit/trunk/lib/J3/VMCore/JavaClass.cpp (original) +++ vmkit/trunk/lib/J3/VMCore/JavaClass.cpp Tue Jun 8 12:57:59 2010 @@ -545,16 +545,43 @@ return false; } -void JavaField::InitField(void* obj, uint64 val) { +void JavaField::InitNullStaticField() { Typedef* type = getSignature(); + void* obj = classDef->getStaticInstance(); if (!type->isPrimitive()) { - ((JavaObject**)((uint64)obj + ptrOffset))[0] = (JavaObject*)val; + ((JavaObject**)((uint64)obj + ptrOffset))[0] = NULL; return; } PrimitiveTypedef* prim = (PrimitiveTypedef*)type; if (prim->isLong()) { + ((sint64*)((uint64)obj + ptrOffset))[0] = 0; + } else if (prim->isInt()) { + ((sint32*)((uint64)obj + ptrOffset))[0] = 0; + } else if (prim->isChar()) { + ((uint16*)((uint64)obj + ptrOffset))[0] = 0; + } else if (prim->isShort()) { + ((sint16*)((uint64)obj + ptrOffset))[0] = 0; + } else if (prim->isByte()) { + ((sint8*)((uint64)obj + ptrOffset))[0] = 0; + } else if (prim->isBool()) { + ((uint8*)((uint64)obj + ptrOffset))[0] = 0; + } else if (prim->isDouble()) { + ((double*)((uint64)obj + ptrOffset))[0] = 0.0; + } else if (prim->isFloat()) { + ((float*)((uint64)obj + ptrOffset))[0] = 0.0; + } else { + abort(); + } +} + +void JavaField::InitStaticField(uint64 val) { + Typedef* type = getSignature(); + void* obj = classDef->getStaticInstance(); + assert(type->isPrimitive() && "Non primitive field"); + PrimitiveTypedef* prim = (PrimitiveTypedef*)type; + if (prim->isLong()) { ((sint64*)((uint64)obj + ptrOffset))[0] = val; } else if (prim->isInt()) { ((sint32*)((uint64)obj + ptrOffset))[0] = (sint32)val; @@ -567,29 +594,33 @@ } else if (prim->isBool()) { ((uint8*)((uint64)obj + ptrOffset))[0] = (uint8)val; } else { - // 0 value for everything else - ((sint32*)((uint64)obj + ptrOffset))[0] = (sint32)val; + // Should never be here. + abort(); } } -void JavaField::InitField(void* obj, JavaObject* val) { +void JavaField::InitStaticField(JavaObject* val) { + llvm_gcroot(val, 0); + void* obj = classDef->getStaticInstance(); ((JavaObject**)((uint64)obj + ptrOffset))[0] = val; } -void JavaField::InitField(void* obj, double val) { +void JavaField::InitStaticField(double val) { + void* obj = classDef->getStaticInstance(); ((double*)((uint64)obj + ptrOffset))[0] = val; } -void JavaField::InitField(void* obj, float val) { +void JavaField::InitStaticField(float val) { + void* obj = classDef->getStaticInstance(); ((float*)((uint64)obj + ptrOffset))[0] = val; } -void JavaField::initField(void* obj, Jnjvm* vm) { +void JavaField::InitStaticField(Jnjvm* vm) { const Typedef* type = getSignature(); Attribut* attribut = lookupAttribut(Attribut::constantAttribut); if (!attribut) { - InitField(obj); + InitNullStaticField(); } else { Reader reader(attribut, &(classDef->bytes)); JavaConstantPool * ctpInfo = classDef->ctpInfo; @@ -597,17 +628,17 @@ if (type->isPrimitive()) { UserCommonClass* cl = type->assocClass(vm->bootstrapLoader); if (cl == vm->upcalls->OfLong) { - InitField(obj, (uint64)ctpInfo->LongAt(idx)); + InitStaticField((uint64)ctpInfo->LongAt(idx)); } else if (cl == vm->upcalls->OfDouble) { - InitField(obj, ctpInfo->DoubleAt(idx)); + InitStaticField(ctpInfo->DoubleAt(idx)); } else if (cl == vm->upcalls->OfFloat) { - InitField(obj, ctpInfo->FloatAt(idx)); + InitStaticField(ctpInfo->FloatAt(idx)); } else { - InitField(obj, (uint64)ctpInfo->IntegerAt(idx)); + InitStaticField((uint64)ctpInfo->IntegerAt(idx)); } } else if (type->isReference()){ const UTF8* utf8 = ctpInfo->UTF8At(ctpInfo->ctpDef[idx]); - InitField(obj, (JavaObject*)ctpInfo->resolveString(utf8, idx)); + InitStaticField((JavaObject*)ctpInfo->resolveString(utf8, idx)); } else { fprintf(stderr, "I haven't verified your class file and it's malformed:" " unknown constant %s!\n", Modified: vmkit/trunk/lib/J3/VMCore/JavaClass.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/JavaClass.h?rev=105623&r1=105622&r2=105623&view=diff ============================================================================== --- vmkit/trunk/lib/J3/VMCore/JavaClass.h (original) +++ vmkit/trunk/lib/J3/VMCore/JavaClass.h Tue Jun 8 12:57:59 2010 @@ -1270,12 +1270,13 @@ /// Typedef* _signature; - /// InitField - Set an initial value to the field of an object. + /// InitField - Set an initial value to the field. /// - void InitField(void* obj, uint64 val = 0); - void InitField(void* obj, JavaObject* val); - void InitField(void* obj, double val); - void InitField(void* obj, float val); + void InitStaticField(uint64 val); + void InitStaticField(JavaObject* val); + void InitStaticField(double val); + void InitStaticField(float val); + void InitNullStaticField(); public: @@ -1329,10 +1330,10 @@ return _signature; } - /// initField - Init the value of the field in the given object. This is + /// InitStaticField - Init the value of the field in the given object. This is /// used for static fields which have a default value. /// - void initField(void* obj, Jnjvm* vm); + void InitStaticField(Jnjvm* vm); /// lookupAttribut - Look up the attribut in the field's list of attributs. /// Modified: vmkit/trunk/lib/J3/VMCore/Jnjvm.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/Jnjvm.cpp?rev=105623&r1=105622&r2=105623&view=diff ============================================================================== --- vmkit/trunk/lib/J3/VMCore/Jnjvm.cpp (original) +++ vmkit/trunk/lib/J3/VMCore/Jnjvm.cpp Tue Jun 8 12:57:59 2010 @@ -182,7 +182,7 @@ JavaField* fields = cl->getStaticFields(); void* val = cl->getStaticInstance(); for (uint32 i = 0; i < cl->nbStaticFields; ++i) { - fields[i].initField(val, vm); + fields[i].InitStaticField(vm); } } From nicolas.geoffray at lip6.fr Sun Jun 13 00:40:56 2010 From: nicolas.geoffray at lip6.fr (Nicolas Geoffray) Date: Sun, 13 Jun 2010 07:40:56 -0000 Subject: [vmkit-commits] [vmkit] r105910 - in /vmkit/trunk/lib/J3: Classpath/Classpath.inc Classpath/ClasspathField.inc Classpath/ClasspathMethod.inc Classpath/ClasspathReflect.h Classpath/ClasspathVMThread.inc Classpath/ClasspathVMThrowable.inc Classpath/JavaUpcalls.cpp Compiler/JavaAOTCompiler.cpp Compiler/JavaJIT.cpp VMCore/JavaClass.cpp VMCore/JavaClass.h VMCore/JavaObject.cpp VMCore/Jni.cpp VMCore/Jnjvm.cpp VMCore/JnjvmClassLoader.cpp VMCore/VirtualTables.cpp Message-ID: <20100613074056.61F3E2A6C12D@llvm.org> Author: geoffray Date: Sun Jun 13 02:40:55 2010 New Revision: 105910 URL: http://llvm.org/viewvc/llvm-project?rev=105910&view=rev Log: Make two distinct methods for accessing fields in J3: static and instance. Modified: vmkit/trunk/lib/J3/Classpath/Classpath.inc vmkit/trunk/lib/J3/Classpath/ClasspathField.inc vmkit/trunk/lib/J3/Classpath/ClasspathMethod.inc vmkit/trunk/lib/J3/Classpath/ClasspathReflect.h vmkit/trunk/lib/J3/Classpath/ClasspathVMThread.inc vmkit/trunk/lib/J3/Classpath/ClasspathVMThrowable.inc vmkit/trunk/lib/J3/Classpath/JavaUpcalls.cpp vmkit/trunk/lib/J3/Compiler/JavaAOTCompiler.cpp vmkit/trunk/lib/J3/Compiler/JavaJIT.cpp 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/Jni.cpp vmkit/trunk/lib/J3/VMCore/Jnjvm.cpp vmkit/trunk/lib/J3/VMCore/JnjvmClassLoader.cpp vmkit/trunk/lib/J3/VMCore/VirtualTables.cpp Modified: vmkit/trunk/lib/J3/Classpath/Classpath.inc URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/Classpath/Classpath.inc?rev=105910&r1=105909&r2=105910&view=diff ============================================================================== --- vmkit/trunk/lib/J3/Classpath/Classpath.inc (original) +++ vmkit/trunk/lib/J3/Classpath/Classpath.inc Sun Jun 13 02:40:55 2010 @@ -65,7 +65,7 @@ verifyNull(obj); JavaField* field = JavaObjectField::getInternalField(Field); - field->setInt8Field(obj, (uint8)val); + field->setInstanceInt8Field(obj, (uint8)val); END_NATIVE_EXCEPTION } @@ -83,7 +83,7 @@ verifyNull(obj); JavaField* field = JavaObjectField::getInternalField(Field); - field->setInt8Field(obj, (uint8)val); + field->setInstanceInt8Field(obj, (uint8)val); END_NATIVE_EXCEPTION } @@ -101,7 +101,7 @@ verifyNull(obj); JavaField* field = JavaObjectField::getInternalField(Field); - field->setInt16Field((JavaObject*)obj, (uint16)val); + field->setInstanceInt16Field((JavaObject*)obj, (uint16)val); END_NATIVE_EXCEPTION } @@ -119,7 +119,7 @@ verifyNull(obj); JavaField* field = JavaObjectField::getInternalField(Field); - field->setInt16Field(obj, (sint16)val); + field->setInstanceInt16Field(obj, (sint16)val); END_NATIVE_EXCEPTION } @@ -137,7 +137,7 @@ verifyNull(obj); JavaField* field = JavaObjectField::getInternalField(Field); - field->setInt32Field(obj, (sint32)val); + field->setInstanceInt32Field(obj, (sint32)val); END_NATIVE_EXCEPTION } @@ -155,7 +155,7 @@ verifyNull(obj); JavaField* field = JavaObjectField::getInternalField(Field); - field->setLongField(obj, (sint64)val); + field->setInstanceLongField(obj, (sint64)val); END_NATIVE_EXCEPTION } @@ -173,7 +173,7 @@ verifyNull(obj); JavaField* field = JavaObjectField::getInternalField(Field); - field->setFloatField(obj, (float)val); + field->setInstanceFloatField(obj, (float)val); END_NATIVE_EXCEPTION } @@ -191,7 +191,7 @@ verifyNull(obj); JavaField* field = JavaObjectField::getInternalField(Field); - field->setDoubleField(obj, (double)val); + field->setInstanceDoubleField(obj, (double)val); END_NATIVE_EXCEPTION } @@ -210,7 +210,7 @@ verifyNull(obj); JavaField* field = JavaObjectField::getInternalField(Field); - field->setObjectField(obj, val); + field->setInstanceObjectField(obj, val); END_NATIVE_EXCEPTION } Modified: vmkit/trunk/lib/J3/Classpath/ClasspathField.inc URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/Classpath/ClasspathField.inc?rev=105910&r1=105909&r2=105910&view=diff ============================================================================== --- vmkit/trunk/lib/J3/Classpath/ClasspathField.inc (original) +++ vmkit/trunk/lib/J3/Classpath/ClasspathField.inc Sun Jun 13 02:40:55 2010 @@ -82,11 +82,9 @@ JavaField* field = JavaObjectField::getInternalField(Field); const Typedef* type = field->getSignature(); bool stat = isStatic(field->access); - void* StatPtr = 0; if (stat) { cl->initialiseClass(vm); - StatPtr = cl->getStaticInstance(); } else { verifyNull(obj); } @@ -94,16 +92,33 @@ if (type->isPrimitive()) { const PrimitiveTypedef* prim = (const PrimitiveTypedef*)type; - if (prim->isInt()) - res = (sint32)field->getInt32Field(stat ? StatPtr : obj); - else if (prim->isChar()) - res = (uint32)field->getInt16Field(stat ? StatPtr : obj); - else if (prim->isByte()) - res = (sint32)field->getInt8Field(stat ? StatPtr : obj); - else if (prim->isShort()) - res = (sint32)field->getInt16Field(stat ? StatPtr : obj); - else + if (prim->isInt()) { + if (stat) { + res = (sint32)field->getStaticInt32Field(); + } else { + res = (sint32)field->getInstanceInt32Field(obj); + } + } else if (prim->isChar()) { + if (stat) { + res = (uint32)field->getStaticInt16Field(); + } else { + res = (uint32)field->getInstanceInt16Field(obj); + } + } else if (prim->isByte()) { + if (stat) { + res = (sint32)field->getStaticInt8Field(); + } else { + res = (sint32)field->getInstanceInt8Field(obj); + } + } else if (prim->isShort()) { + if (stat) { + res = (sint32)field->getStaticInt16Field(); + } else { + res = (sint32)field->getInstanceInt16Field(obj); + } + } else { vm->illegalArgumentException("wrong type"); + } } else { vm->illegalArgumentException("wrong type"); } @@ -130,12 +145,10 @@ Jnjvm* vm = JavaThread::get()->getJVM(); UserClass* cl = JavaObjectField::getClass(Field); JavaField* field = JavaObjectField::getInternalField(Field); - bool stat = isStatic(field->access); - void* StatPtr = 0; + bool stat = isStatic(field->access); if (stat) { cl->initialiseClass(vm); - StatPtr = cl->getStaticInstance(); } else { verifyNull(obj); } @@ -144,18 +157,39 @@ if (type->isPrimitive()) { const PrimitiveTypedef* prim = (const PrimitiveTypedef*)type; - if (prim->isInt()) - res = (sint64)field->getInt32Field(stat ? StatPtr : obj); - else if (prim->isChar()) - res = (uint64)field->getInt16Field(stat ? StatPtr : obj); - else if (prim->isByte()) - res = (sint64)field->getInt8Field(stat ? StatPtr : obj); - else if (prim->isShort()) - res = (sint64)field->getInt16Field(stat ? StatPtr : obj); - else if (prim->isLong()) - res = (sint64)field->getLongField(stat ? StatPtr : obj); - else + if (prim->isInt()) { + if (stat) { + res = (sint64)field->getStaticInt32Field(); + } else { + res = (sint64)field->getInstanceInt32Field(obj); + } + } else if (prim->isChar()) { + if (stat) { + res = (uint64)field->getStaticInt16Field(); + } else { + res = (uint64)field->getInstanceInt16Field(obj); + } + } else if (prim->isByte()) { + if (stat) { + res = (sint64)field->getStaticInt8Field(); + } else { + res = (sint64)field->getInstanceInt8Field(obj); + } + } else if (prim->isShort()) { + if (stat) { + res = (sint64)field->getStaticInt16Field(); + } else { + res = (sint64)field->getInstanceInt16Field(obj); + } + } else if (prim->isLong()) { + if (stat) { + res = (sint64)field->getStaticLongField(); + } else { + res = (sint64)field->getInstanceLongField(obj); + } + } else { vm->illegalArgumentException("wrong type"); + } } else { vm->illegalArgumentException("wrong type"); } @@ -182,11 +216,9 @@ UserClass* cl = JavaObjectField::getClass(Field); JavaField* field = JavaObjectField::getInternalField(Field); bool stat = isStatic(field->access); - void* StatPtr = 0; if (stat) { cl->initialiseClass(vm); - StatPtr = cl->getStaticInstance(); } else { verifyNull(obj); } @@ -194,10 +226,15 @@ const Typedef* type = field->getSignature(); if (type->isPrimitive()) { const PrimitiveTypedef* prim = (const PrimitiveTypedef*)type; - if (prim->isBool()) - res = (uint8)field->getInt8Field(stat ? StatPtr : obj); - else + if (prim->isBool()) { + if (stat) { + res = (uint8)field->getStaticInt8Field(); + } else { + res = (uint8)field->getInstanceInt8Field(obj); + } + } else { vm->illegalArgumentException("wrong type"); + } } else { vm->illegalArgumentException("wrong type"); } @@ -224,11 +261,9 @@ UserClass* cl = JavaObjectField::getClass(Field); JavaField* field = JavaObjectField::getInternalField(Field); bool stat = isStatic(field->access); - void* StatPtr = 0; if (stat) { cl->initialiseClass(vm); - StatPtr = cl->getStaticInstance(); } else { verifyNull(obj); } @@ -236,21 +271,46 @@ const Typedef* type = field->getSignature(); if (type->isPrimitive()) { const PrimitiveTypedef* prim = (const PrimitiveTypedef*)type; - if (prim->isByte()) - res = (jfloat)field->getInt8Field(stat ? StatPtr : obj); - else if (prim->isInt()) - res = (jfloat)field->getInt32Field(stat ? StatPtr : obj); - else if (prim->isShort()) - res = (jfloat)field->getInt16Field(stat ? StatPtr : obj); - else if (prim->isLong()) - res = (jfloat)field->getLongField(stat ? StatPtr : obj); - else if (prim->isChar()) + if (prim->isByte()) { + if (stat) { + res = (jfloat)field->getStaticInt8Field(); + } else { + res = (jfloat)field->getInstanceInt8Field(obj); + } + } else if (prim->isInt()) { + if (stat) { + res = (jfloat)field->getStaticInt32Field(); + } else { + res = (jfloat)field->getInstanceInt32Field(obj); + } + } else if (prim->isShort()) { + if (stat) { + res = (jfloat)field->getStaticInt16Field(); + } else { + res = (jfloat)field->getInstanceInt16Field(obj); + } + } else if (prim->isLong()) { + if (stat) { + res = (jfloat)field->getStaticLongField(); + } else { + res = (jfloat)field->getInstanceLongField(obj); + } + } else if (prim->isChar()) { // Cast to uint32 because char is unsigned. - res = (jfloat)(uint32)field->getInt16Field(stat ? StatPtr : obj); - else if (prim->isFloat()) - res = (jfloat)field->getFloatField(stat ? StatPtr : obj); - else + if (stat) { + res = (jfloat)(uint32)field->getStaticInt16Field(); + } else { + res = (jfloat)(uint32)field->getInstanceInt16Field(obj); + } + } else if (prim->isFloat()) { + if (stat) { + res = (jfloat)field->getStaticFloatField(); + } else { + res = (jfloat)field->getInstanceFloatField(obj); + } + } else { vm->illegalArgumentException("wrong type"); + } } else { vm->illegalArgumentException("wrong type"); } @@ -276,11 +336,9 @@ UserClass* cl = JavaObjectField::getClass(Field); JavaField* field = JavaObjectField::getInternalField(Field); bool stat = isStatic(field->access); - void* StatPtr = 0; if (stat) { cl->initialiseClass(vm); - StatPtr = cl->getStaticInstance(); } else { verifyNull(obj); } @@ -288,10 +346,15 @@ const Typedef* type = field->getSignature(); if (type->isPrimitive()) { const PrimitiveTypedef* prim = (const PrimitiveTypedef*)type; - if (prim->isByte()) - res = (sint8)field->getInt8Field(stat ? StatPtr : obj); - else + if (prim->isByte()) { + if (stat) { + res = (sint8)field->getStaticInt8Field(); + } else { + res = (sint8)field->getInstanceInt8Field(obj); + } + } else { vm->illegalArgumentException("wrong type"); + } } else { vm->illegalArgumentException("wrong type"); } @@ -317,11 +380,9 @@ UserClass* cl = JavaObjectField::getClass(Field); JavaField* field = JavaObjectField::getInternalField(Field); bool stat = isStatic(field->access); - void* StatPtr = 0; if (stat) { cl->initialiseClass(vm); - StatPtr = cl->getStaticInstance(); } else { verifyNull(obj); } @@ -329,10 +390,15 @@ const Typedef* type = field->getSignature(); if (type->isPrimitive()) { const PrimitiveTypedef* prim = (const PrimitiveTypedef*)type; - if (prim->isChar()) - res = (uint16)field->getInt16Field(stat ? StatPtr : obj); - else + if (prim->isChar()) { + if (stat) { + res = (uint16)field->getStaticInt16Field(); + } else { + res = (uint16)field->getInstanceInt16Field(obj); + } + } else { vm->illegalArgumentException("wrong type"); + } } else { vm->illegalArgumentException("wrong type"); } @@ -360,11 +426,9 @@ UserClass* cl = JavaObjectField::getClass(Field); JavaField* field = JavaObjectField::getInternalField(Field); bool stat = isStatic(field->access); - void* StatPtr = 0; if (stat) { cl->initialiseClass(vm); - StatPtr = cl->getStaticInstance(); } else { verifyNull(obj); } @@ -372,12 +436,21 @@ const Typedef* type = field->getSignature(); if (type->isPrimitive()) { const PrimitiveTypedef* prim = (const PrimitiveTypedef*)type; - if (prim->isShort()) - res = (sint16)field->getInt16Field(stat ? StatPtr : obj); - else if (prim->isByte()) - res = (sint16)field->getInt8Field(stat ? StatPtr : obj); - else + if (prim->isShort()) { + if (stat) { + res = (sint16)field->getStaticInt16Field(); + } else { + res = (sint16)field->getInstanceInt16Field(obj); + } + } else if (prim->isByte()) { + if (stat) { + res = (sint16)field->getStaticInt8Field(); + } else { + res = (sint16)field->getInstanceInt8Field(obj); + } + } else { vm->illegalArgumentException("wrong type"); + } } else { vm->illegalArgumentException("wrong type"); } @@ -403,11 +476,9 @@ UserClass* cl = JavaObjectField::getClass(Field); JavaField* field = JavaObjectField::getInternalField(Field); bool stat = isStatic(field->access); - void* StatPtr = 0; if (stat) { cl->initialiseClass(vm); - StatPtr = cl->getStaticInstance(); } else { verifyNull(obj); } @@ -415,22 +486,51 @@ const Typedef* type = field->getSignature(); if (type->isPrimitive()) { const PrimitiveTypedef* prim = (const PrimitiveTypedef*)type; - if (prim->isByte()) - res = (jdouble)(sint64)field->getInt8Field(stat ? StatPtr : obj); - else if (prim->isInt()) - res = (jdouble)(sint64)field->getInt32Field(stat ? StatPtr : obj); - else if (prim->isShort()) - res = (jdouble)(sint64)field->getInt16Field(stat? StatPtr : obj); - else if (prim->isLong()) - res = (jdouble)(sint64)field->getLongField(stat? StatPtr : obj); - else if (prim->isChar()) - res = (jdouble)(uint64)field->getInt16Field(stat ? StatPtr : obj); - else if (prim->isFloat()) - res = (jdouble)field->getFloatField(stat ? StatPtr : obj); - else if (prim->isDouble()) - res = (jdouble)field->getDoubleField(stat ? StatPtr : obj); - else + if (prim->isByte()) { + if (stat) { + res = (jdouble)(sint64)field->getStaticInt8Field(); + } else { + res = (jdouble)(sint64)field->getInstanceInt8Field(obj); + } + } else if (prim->isInt()) { + if (stat) { + res = (jdouble)(sint64)field->getStaticInt32Field(); + } else { + res = (jdouble)(sint64)field->getInstanceInt32Field(obj); + } + } else if (prim->isShort()) { + if (stat) { + res = (jdouble)(sint64)field->getStaticInt16Field(); + } else { + res = (jdouble)(sint64)field->getInstanceInt16Field(obj); + } + } else if (prim->isLong()) { + if (stat) { + res = (jdouble)(sint64)field->getStaticLongField(); + } else { + res = (jdouble)(sint64)field->getInstanceLongField(obj); + } + } else if (prim->isChar()) { + if (stat) { + res = (jdouble)(uint64)field->getStaticInt16Field(); + } else { + res = (jdouble)(uint64)field->getInstanceInt16Field(obj); + } + } else if (prim->isFloat()) { + if (stat) { + res = (jdouble)field->getStaticFloatField(); + } else { + res = (jdouble)field->getInstanceFloatField(obj); + } + } else if (prim->isDouble()) { + if (stat) { + res = (jdouble)field->getStaticDoubleField(); + } else { + res = (jdouble)field->getInstanceDoubleField(obj); + } + } else { vm->illegalArgumentException("wrong type"); + } } else { vm->illegalArgumentException("wrong type"); } @@ -458,11 +558,9 @@ UserClass* cl = JavaObjectField::getClass(Field); JavaField* field = JavaObjectField::getInternalField(Field); bool stat = isStatic(field->access); - void* StatPtr = 0; if (stat) { cl->initialiseClass(vm); - StatPtr = cl->getStaticInstance(); } else { verifyNull(obj); } @@ -471,47 +569,59 @@ if (type->isPrimitive()) { const PrimitiveTypedef* prim = (const PrimitiveTypedef*)type; if (prim->isBool()) { - uint8 val = field->getInt8Field(stat ? StatPtr : obj); + uint8 val = stat ? field->getStaticInt8Field() : + field->getInstanceInt8Field(obj); res = vm->upcalls->boolClass->doNew(vm); - vm->upcalls->boolValue->setInt8Field(res, val); + vm->upcalls->boolValue->setInstanceInt8Field(res, val); } else if (prim->isByte()) { - sint8 val = field->getInt8Field(stat ? StatPtr : obj); + sint8 val = stat ? field->getStaticInt8Field() : + field->getInstanceInt8Field(obj); res = vm->upcalls->byteClass->doNew(vm); - vm->upcalls->byteValue->setInt8Field(res, val); + vm->upcalls->byteValue->setInstanceInt8Field(res, val); } else if (prim->isChar()) { - uint16 val = field->getInt16Field(stat ? StatPtr : obj); + uint16 val = stat ? field->getStaticInt16Field() : + field->getInstanceInt16Field(obj); res = vm->upcalls->charClass->doNew(vm); - vm->upcalls->charValue->setInt16Field(res, val); + vm->upcalls->charValue->setInstanceInt16Field(res, val); } else if (prim->isShort()) { - sint16 val = field->getInt16Field(stat ? StatPtr : obj); + sint16 val = stat ? field->getStaticInt16Field() : + field->getInstanceInt16Field(obj); res = vm->upcalls->shortClass->doNew(vm); - vm->upcalls->shortValue->setInt16Field(res, val); + vm->upcalls->shortValue->setInstanceInt16Field(res, val); } else if (prim->isInt()) { - sint32 val = field->getInt32Field(stat ? StatPtr : obj); + sint64 val = stat ? field->getStaticInt32Field() : + field->getInstanceInt32Field(obj); res = vm->upcalls->intClass->doNew(vm); - vm->upcalls->intValue->setInt32Field(res, val); + vm->upcalls->intValue->setInstanceInt32Field(res, val); } else if (prim->isLong()) { - sint64 val = field->getLongField(stat ? StatPtr : obj); + sint64 val = stat ? field->getStaticLongField() : + field->getInstanceLongField(obj); res = vm->upcalls->longClass->doNew(vm); - vm->upcalls->longValue->setLongField(res, val); + vm->upcalls->longValue->setInstanceLongField(res, val); } else if (prim->isFloat()) { - float val = field->getFloatField(stat ? StatPtr : obj); + float val = stat ? field->getStaticFloatField() : + field->getInstanceFloatField(obj); res = vm->upcalls->floatClass->doNew(vm); - vm->upcalls->floatValue->setFloatField(res, val); + vm->upcalls->floatValue->setInstanceFloatField(res, val); } else if (prim->isDouble()) { - double val = field->getDoubleField(stat ? StatPtr : obj); + double val = stat ? field->getStaticDoubleField() : + field->getInstanceDoubleField(obj); res = vm->upcalls->doubleClass->doNew(vm); - vm->upcalls->doubleValue->setDoubleField(res, val); + vm->upcalls->doubleValue->setInstanceDoubleField(res, val); } } else { - res = field->getObjectField(stat ? StatPtr : obj); + if (stat) { + res = field->getStaticObjectField(); + } else { + res = field->getInstanceObjectField(obj); + } } END_NATIVE_EXCEPTION @@ -536,12 +646,10 @@ JavaField* field = JavaObjectField::getInternalField(Field); jvalue buf; bool stat = isStatic(field->access); - void* StatPtr = 0; if (stat) { cl->initialiseClass(vm); - StatPtr = cl->getStaticInstance(); } else { verifyNull(obj); } @@ -552,24 +660,61 @@ if (type->isPrimitive()) { const PrimitiveTypedef* prim = (const PrimitiveTypedef*)type; - if (prim->isBool()) - field->setInt8Field(stat ? StatPtr : obj, buf.z); - else if (prim->isByte()) - field->setInt8Field(stat ? StatPtr : obj, buf.b); - else if (prim->isChar()) - field->setInt16Field(stat ? StatPtr : obj, buf.c); - else if (prim->isShort()) - field->setInt16Field(stat ? StatPtr : obj, buf.s); - else if (prim->isInt()) - field->setInt32Field(stat ? StatPtr : obj, buf.i); - else if (prim->isLong()) - field->setLongField(stat ? StatPtr : obj, buf.j); - else if (prim->isFloat()) - field->setFloatField(stat ? StatPtr : obj, buf.f); - else if (prim->isDouble()) - field->setDoubleField(stat ? StatPtr : obj, buf.d); + if (prim->isBool()) { + if (stat) { + field->setStaticInt8Field(buf.z); + } else { + field->setInstanceInt8Field(obj, buf.z); + } + } else if (prim->isByte()) { + if (stat) { + field->setStaticInt8Field(buf.b); + } else { + field->setInstanceInt8Field(obj, buf.b); + } + } else if (prim->isChar()) { + if (stat) { + field->setStaticInt16Field(buf.c); + } else { + field->setInstanceInt16Field(obj, buf.c); + } + } else if (prim->isShort()) { + if (stat) { + field->setStaticInt16Field(buf.s); + } else { + field->setInstanceInt16Field(obj, buf.s); + } + } else if (prim->isInt()) { + if (stat) { + field->setStaticInt32Field(buf.i); + } else { + field->setInstanceInt32Field(obj, buf.i); + } + } else if (prim->isLong()) { + if (stat) { + field->setStaticLongField(buf.j); + } else { + field->setInstanceLongField(obj, buf.j); + } + } else if (prim->isFloat()) { + if (stat) { + field->setStaticFloatField(buf.f); + } else { + field->setInstanceFloatField(obj, buf.f); + } + } else if (prim->isDouble()) { + if (stat) { + field->setStaticDoubleField(buf.d); + } else { + field->setInstanceDoubleField(obj, buf.d); + } + } } else { - field->setObjectField(stat ? StatPtr : obj, val); + if (stat) { + field->setStaticObjectField(val); + } else { + field->setInstanceObjectField(obj, val); + } } END_NATIVE_EXCEPTION @@ -590,11 +735,9 @@ UserClass* cl = JavaObjectField::getClass(Field); JavaField* field = JavaObjectField::getInternalField(Field); bool stat = isStatic(field->access); - void* StatPtr = 0; if (stat) { cl->initialiseClass(vm); - StatPtr = cl->getStaticInstance(); } else { verifyNull(obj); } @@ -602,10 +745,15 @@ const Typedef* type = field->getSignature(); if (type->isPrimitive()) { const PrimitiveTypedef* prim = (const PrimitiveTypedef*)type; - if (prim->isBool()) - field->setInt8Field(stat ? StatPtr : obj, (uint8)val); - else + if (prim->isBool()) { + if (stat) { + field->setStaticInt8Field((uint8)val); + } else { + field->setInstanceInt8Field(obj, (uint8)val); + } + } else { vm->illegalArgumentException("wrong type"); + } } else { vm->illegalArgumentException("wrong type"); } @@ -629,11 +777,9 @@ UserClass* cl = JavaObjectField::getClass(Field); JavaField* field = JavaObjectField::getInternalField(Field); bool stat = isStatic(field->access); - void* StatPtr = 0; if (stat) { cl->initialiseClass(vm); - StatPtr = cl->getStaticInstance(); } else { verifyNull(obj); } @@ -641,20 +787,45 @@ const Typedef* type = field->getSignature(); if (type->isPrimitive()) { const PrimitiveTypedef* prim = (const PrimitiveTypedef*)type; - if (prim->isByte()) - field->setInt8Field(stat ? StatPtr : obj, (sint8)val); - else if (prim->isShort()) - field->setInt16Field(stat ? StatPtr : obj, (sint16)val); - else if (prim->isInt()) - field->setInt32Field(stat ? StatPtr : obj, (sint32)val); - else if (prim->isLong()) - field->setLongField(stat ? StatPtr : obj, (sint64)val); - else if (prim->isFloat()) - field->setFloatField(stat ? StatPtr : obj, (float)val); - else if (prim->isDouble()) - field->setDoubleField(stat ? StatPtr : obj, (double)val); - else + if (prim->isByte()) { + if (stat) { + field->setStaticInt8Field((sint8)val); + } else { + field->setInstanceInt8Field(obj, (sint8)val); + } + } else if (prim->isShort()) { + if (stat) { + field->setStaticInt16Field((sint16)val); + } else { + field->setInstanceInt16Field(obj, (sint16)val); + } + } else if (prim->isInt()) { + if (stat) { + field->setStaticInt32Field((sint32)val); + } else { + field->setInstanceInt32Field(obj, (sint32)val); + } + } else if (prim->isLong()) { + if (stat) { + field->setStaticLongField((sint64)val); + } else { + field->setInstanceLongField(obj, (sint64)val); + } + } else if (prim->isFloat()) { + if (stat) { + field->setStaticFloatField((float)val); + } else { + field->setInstanceFloatField(obj, (float)val); + } + } else if (prim->isDouble()) { + if (stat) { + field->setStaticDoubleField((double)val); + } else { + field->setInstanceDoubleField(obj, (double)val); + } + } else { vm->illegalArgumentException("wrong type"); + } } else { vm->illegalArgumentException("wrong type"); } @@ -677,29 +848,48 @@ UserClass* cl = JavaObjectField::getClass(Field); JavaField* field = JavaObjectField::getInternalField(Field); bool stat = isStatic(field->access); - void* StatPtr = 0; if (stat) { cl->initialiseClass(vm); - StatPtr = cl->getStaticInstance(); } else { verifyNull(obj); } const Typedef* type = field->getSignature(); if (type->isPrimitive()) { const PrimitiveTypedef* prim = (const PrimitiveTypedef*)type; - if (prim->isChar()) - field->setInt16Field(stat ? StatPtr : obj, (uint16)val); - else if (prim->isInt()) - field->setInt32Field(stat ? StatPtr : obj, (uint32)val); - else if (prim->isLong()) - field->setLongField(stat ? StatPtr : obj, (uint64)val); - else if (prim->isFloat()) - field->setFloatField(stat ? StatPtr : obj, (float)(uint32)val); - else if (prim->isDouble()) - field->setDoubleField(stat ? StatPtr : obj, (double)(uint64)val); - else + if (prim->isChar()) { + if (stat) { + field->setStaticInt16Field((uint16)val); + } else { + field->setInstanceInt16Field(obj, (uint16)val); + } + } else if (prim->isInt()) { + if (stat) { + field->setStaticInt32Field((uint32)val); + } else { + field->setInstanceInt32Field(obj, (uint32)val); + } + } else if (prim->isLong()) { + if (stat) { + field->setStaticLongField((uint64)val); + } else { + field->setInstanceLongField(obj, (uint64)val); + } + } else if (prim->isFloat()) { + if (stat) { + field->setStaticFloatField((float)(uint32)val); + } else { + field->setInstanceFloatField(obj, (float)(uint32)val); + } + } else if (prim->isDouble()) { + if (stat) { + field->setStaticDoubleField((double)(uint64)val); + } else { + field->setInstanceDoubleField(obj, (double)(uint64)val); + } + } else { vm->illegalArgumentException("wrong type"); + } } else { vm->illegalArgumentException("wrong type"); } @@ -722,11 +912,9 @@ UserClass* cl = JavaObjectField::getClass(Field); JavaField* field = JavaObjectField::getInternalField(Field); bool stat = isStatic(field->access); - void* StatPtr = 0; if (stat) { cl->initialiseClass(vm); - StatPtr = cl->getStaticInstance(); } else { verifyNull(obj); } @@ -734,18 +922,38 @@ const Typedef* type = field->getSignature(); if (type->isPrimitive()) { const PrimitiveTypedef* prim = (const PrimitiveTypedef*)type; - if (prim->isShort()) - field->setInt16Field(stat ? StatPtr : obj, (sint16)val); - else if (prim->isInt()) - field->setInt32Field(stat ? StatPtr : obj, (sint32)val); - else if (prim->isLong()) - field->setLongField(stat ? StatPtr : obj, (sint64)val); - else if (prim->isFloat()) - field->setFloatField(stat ? StatPtr : obj, (float)val); - else if (prim->isDouble()) - field->setDoubleField(stat ? StatPtr : obj, (double)val); - else + if (prim->isShort()) { + if (stat) { + field->setStaticInt16Field((sint16)val); + } else { + field->setInstanceInt16Field(obj, (sint16)val); + } + } else if (prim->isInt()) { + if (stat) { + field->setStaticInt32Field((sint32)val); + } else { + field->setInstanceInt32Field(obj, (sint32)val); + } + } else if (prim->isLong()) { + if (stat) { + field->setStaticLongField((sint64)val); + } else { + } + } else if (prim->isFloat()) { + if (stat) { + field->setStaticFloatField((float)val); + } else { + field->setInstanceFloatField(obj, (float)val); + } + } else if (prim->isDouble()) { + if (stat) { + field->setStaticDoubleField((double)val); + } else { + field->setInstanceDoubleField(obj, (double)val); + } + } else { vm->illegalArgumentException("wrong type"); + } } else { vm->illegalArgumentException("wrong type"); } @@ -768,11 +976,9 @@ UserClass* cl = JavaObjectField::getClass(Field); JavaField* field = JavaObjectField::getInternalField(Field); bool stat = isStatic(field->access); - void* StatPtr = 0; if (stat) { cl->initialiseClass(vm); - StatPtr = cl->getStaticInstance(); } else { verifyNull(obj); } @@ -780,16 +986,33 @@ const Typedef* type = field->getSignature(); if (type->isPrimitive()) { const PrimitiveTypedef* prim = (const PrimitiveTypedef*)type; - if (prim->isInt()) - field->setInt32Field(stat ? StatPtr : obj, (sint32)val); - else if (prim->isLong()) - field->setLongField(stat ? StatPtr : obj, (sint64)val); - else if (prim->isFloat()) - field->setFloatField(stat ? StatPtr : obj, (float)val); - else if (prim->isDouble()) - field->setDoubleField(stat ? StatPtr : obj, (double)val); - else + if (prim->isInt()) { + if (stat) { + field->setStaticInt32Field((sint32)val); + } else { + field->setInstanceInt32Field(obj, (sint32)val); + } + } else if (prim->isLong()) { + if (stat) { + field->setStaticLongField((sint64)val); + } else { + field->setInstanceLongField(obj, (sint64)val); + } + } else if (prim->isFloat()) { + if (stat) { + field->setStaticFloatField((float)val); + } else { + field->setInstanceFloatField(obj, (float)val); + } + } else if (prim->isDouble()) { + if (stat) { + field->setStaticDoubleField((double)val); + } else { + field->setInstanceDoubleField(obj, (double)val); + } + } else { vm->illegalArgumentException("wrong type"); + } } else { vm->illegalArgumentException("wrong type"); } @@ -812,11 +1035,9 @@ UserClass* cl = JavaObjectField::getClass(Field); JavaField* field = JavaObjectField::getInternalField(Field); bool stat = isStatic(field->access); - void* StatPtr = 0; if (stat) { cl->initialiseClass(vm); - StatPtr = cl->getStaticInstance(); } else { verifyNull(obj); } @@ -824,14 +1045,27 @@ const Typedef* type = field->getSignature(); if (type->isPrimitive()) { const PrimitiveTypedef* prim = (const PrimitiveTypedef*)type; - if (prim->isLong()) - field->setLongField(stat ? StatPtr : obj, (sint64)val); - else if (prim->isFloat()) - field->setFloatField(stat ? StatPtr : obj, (float)val); - else if (prim->isDouble()) - field->setDoubleField(stat ? StatPtr : obj, (double)val); - else + if (prim->isLong()) { + if (stat) { + field->setStaticLongField((sint64)val); + } else { + field->setInstanceLongField(obj, (sint64)val); + } + } else if (prim->isFloat()) { + if (stat) { + field->setStaticFloatField((float)val); + } else { + field->setInstanceFloatField(obj, (float)val); + } + } else if (prim->isDouble()) { + if (stat) { + field->setStaticDoubleField((double)val); + } else { + field->setInstanceDoubleField(obj, (double)val); + } + } else { vm->illegalArgumentException("wrong type"); + } } else { vm->illegalArgumentException("wrong type"); } @@ -854,11 +1088,9 @@ UserClass* cl = JavaObjectField::getClass(Field); JavaField* field = JavaObjectField::getInternalField(Field); bool stat = isStatic(field->access); - void* StatPtr = 0; if (stat) { cl->initialiseClass(vm); - StatPtr = cl->getStaticInstance(); } else { verifyNull(obj); } @@ -866,12 +1098,21 @@ const Typedef* type = field->getSignature(); if (type->isPrimitive()) { const PrimitiveTypedef* prim = (const PrimitiveTypedef*)type; - if (prim->isFloat()) - field->setFloatField(stat ? StatPtr : obj, (float)val); - else if (prim->isDouble()) - field->setDoubleField(stat ? StatPtr : obj, (double)val); - else + if (prim->isFloat()) { + if (stat) { + field->setStaticFloatField((float)val); + } else { + field->setInstanceFloatField(obj, (float)val); + } + } else if (prim->isDouble()) { + if (stat) { + field->setStaticDoubleField((double)val); + } else { + field->setInstanceDoubleField(obj, (double)val); + } + } else { vm->illegalArgumentException("wrong type"); + } } else { vm->illegalArgumentException("wrong type"); } @@ -894,11 +1135,9 @@ UserClass* cl = JavaObjectField::getClass(Field); JavaField* field = JavaObjectField::getInternalField(Field); bool stat = isStatic(field->access); - void* StatPtr = 0; if (stat) { cl->initialiseClass(vm); - StatPtr = cl->getStaticInstance(); } else { verifyNull(obj); } @@ -906,10 +1145,15 @@ const Typedef* type = field->getSignature(); if (type->isPrimitive()) { const PrimitiveTypedef* prim = (const PrimitiveTypedef*)type; - if (prim->isDouble()) - field->setDoubleField(stat ? StatPtr : obj, (double)val); - else + if (prim->isDouble()) { + if (stat) { + field->setStaticDoubleField((double)val); + } else { + field->setInstanceDoubleField(obj, (double)val); + } + } else { vm->illegalArgumentException("wrong type"); + } } else { vm->illegalArgumentException("wrong type"); } Modified: vmkit/trunk/lib/J3/Classpath/ClasspathMethod.inc URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/Classpath/ClasspathMethod.inc?rev=105910&r1=105909&r2=105910&view=diff ============================================================================== --- vmkit/trunk/lib/J3/Classpath/ClasspathMethod.inc (original) +++ vmkit/trunk/lib/J3/Classpath/ClasspathMethod.inc Sun Jun 13 02:40:55 2010 @@ -188,42 +188,42 @@ uint32 val = 0; RUN_METH(Int, val); res = vm->upcalls->boolClass->doNew(vm); - vm->upcalls->boolValue->setInt8Field(res, val); + vm->upcalls->boolValue->setInstanceInt8Field(res, val); } else if (prim->isByte()) { uint32 val = 0; RUN_METH(Int, val); res = vm->upcalls->byteClass->doNew(vm); - vm->upcalls->byteValue->setInt8Field(res, val); + vm->upcalls->byteValue->setInstanceInt8Field(res, val); } else if (prim->isChar()) { uint32 val = 0; RUN_METH(Int, val); res = vm->upcalls->charClass->doNew(vm); - vm->upcalls->charValue->setInt16Field(res, val); + vm->upcalls->charValue->setInstanceInt16Field(res, val); } else if (prim->isShort()) { uint32 val = 0; RUN_METH(Int, val); res = vm->upcalls->shortClass->doNew(vm); - vm->upcalls->shortValue->setInt16Field(res, val); + vm->upcalls->shortValue->setInstanceInt16Field(res, val); } else if (prim->isInt()) { uint32 val = 0; RUN_METH(Int, val); res = vm->upcalls->intClass->doNew(vm); - vm->upcalls->intValue->setInt32Field(res, val); + vm->upcalls->intValue->setInstanceInt32Field(res, val); } else if (prim->isLong()) { sint64 val = 0; RUN_METH(Long, val); res = vm->upcalls->longClass->doNew(vm); - vm->upcalls->longValue->setLongField(res, val); + vm->upcalls->longValue->setInstanceLongField(res, val); } else if (prim->isFloat()) { float val = 0; RUN_METH(Float, val); res = vm->upcalls->floatClass->doNew(vm); - vm->upcalls->floatValue->setFloatField(res, val); + vm->upcalls->floatValue->setInstanceFloatField(res, val); } else if (prim->isDouble()) { double val = 0; RUN_METH(Double, val); res = vm->upcalls->doubleClass->doNew(vm); - vm->upcalls->doubleValue->setDoubleField(res, val); + vm->upcalls->doubleValue->setInstanceDoubleField(res, val); } } else { RUN_METH(JavaObject, res); Modified: vmkit/trunk/lib/J3/Classpath/ClasspathReflect.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/Classpath/ClasspathReflect.h?rev=105910&r1=105909&r2=105910&view=diff ============================================================================== --- vmkit/trunk/lib/J3/Classpath/ClasspathReflect.h (original) +++ vmkit/trunk/lib/J3/Classpath/ClasspathReflect.h Sun Jun 13 02:40:55 2010 @@ -147,7 +147,7 @@ private: JavaObject* thread; bool running; - void* vmdata; + JavaThread* vmdata; public: static void staticDestructor(JavaObjectVMThread* obj) { @@ -158,6 +158,10 @@ mvm::Collector::markAndTrace(obj, &obj->thread, closure); } + void setVmdata(JavaThread* internal_thread) { + vmdata = internal_thread; + } + }; Modified: vmkit/trunk/lib/J3/Classpath/ClasspathVMThread.inc URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/Classpath/ClasspathVMThread.inc?rev=105910&r1=105909&r2=105910&view=diff ============================================================================== --- vmkit/trunk/lib/J3/Classpath/ClasspathVMThread.inc (original) +++ vmkit/trunk/lib/J3/Classpath/ClasspathVMThread.inc Sun Jun 13 02:40:55 2010 @@ -34,27 +34,28 @@ static void start(JavaThread* thread) { - JavaObject* vmThread = 0; + JavaObjectVMThread* vmThread = NULL; + JavaObject* javaThread = NULL; llvm_gcroot(vmThread, 0); + llvm_gcroot(javaThread, 0); Jnjvm* vm = thread->getJVM(); // Ok, now that the thread is created we can set the the value of vmdata, // which is the JavaThread object. - JavaField* field = vm->upcalls->vmdataVMThread; - vmThread = thread->vmThread; + vmThread = (JavaObjectVMThread*)thread->vmThread; assert(vmThread && "Didn't fix the vmThread of a j3 thread"); - JavaObject* javaThread = thread->javaThread; - assert(javaThread && "Didn't fix the javaThread of a j3 thread"); - field->setObjectField(vmThread, (JavaObject*)(void*)thread); + vmThread->setVmdata(thread); UserClass* vmthClass = (UserClass*)JavaObject::getClass(vmThread); ThreadSystem& ts = vm->threadSystem; + javaThread = thread->javaThread; + assert(javaThread && "Didn't fix the javaThread of a j3 thread"); // If the thread is not a daemon, it is added to the list of threads to // wait until exit. - bool isDaemon = vm->upcalls->daemon->getInt8Field(javaThread); + bool isDaemon = vm->upcalls->daemon->getInstanceInt8Field(javaThread); if (!isDaemon) { ts.nonDaemonLock.lock(); @@ -90,7 +91,7 @@ Jnjvm* vm = JavaThread::get()->getJVM(); // Classpath has set this field. - javaThread = vm->upcalls->assocThread->getObjectField(vmThread); + javaThread = vm->upcalls->assocThread->getInstanceObjectField(vmThread); assert(javaThread && "VMThread with no Java equivalent"); JavaThread* th = new JavaThread(javaThread, vmThread, vm); @@ -115,10 +116,10 @@ // It's possible that the thread to be interrupted has not finished // its initialization. Wait until the initialization is done. - while (field->getObjectField(vmthread) == 0) + while (field->getInstanceObjectField(vmthread) == 0) mvm::Thread::yield(); - JavaThread* th = (JavaThread*)field->getObjectField(vmthread); + JavaThread* th = (JavaThread*)field->getInstanceObjectField(vmthread); th->interruptFlag = 1; JavaLock* lock = th->waitsOn; @@ -174,7 +175,7 @@ Jnjvm* vm = JavaThread::get()->getJVM(); JavaField* field = vm->upcalls->vmdataVMThread; - JavaThread* th = (JavaThread*)field->getObjectField(vmthread); + JavaThread* th = (JavaThread*)field->getInstanceObjectField(vmthread); return (jboolean)th->interruptFlag; } Modified: vmkit/trunk/lib/J3/Classpath/ClasspathVMThrowable.inc URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/Classpath/ClasspathVMThrowable.inc?rev=105910&r1=105909&r2=105910&view=diff ============================================================================== --- vmkit/trunk/lib/J3/Classpath/ClasspathVMThrowable.inc (original) +++ vmkit/trunk/lib/J3/Classpath/ClasspathVMThrowable.inc Sun Jun 13 02:40:55 2010 @@ -46,7 +46,7 @@ // Set the tempory data in the new VMThrowable object. vmThrowable = vm->upcalls->newVMThrowable->doNew(vm); - vm->upcalls->vmDataVMThrowable->setObjectField(vmThrowable, result); + vm->upcalls->vmDataVMThrowable->setInstanceObjectField(vmThrowable, result); return vmThrowable; } @@ -125,7 +125,7 @@ BEGIN_NATIVE_EXCEPTION(0) Jnjvm* vm = JavaThread::get()->getJVM(); JavaField* field = vm->upcalls->vmDataVMThrowable; - stack = field->getObjectField(vmthrow); + stack = field->getInstanceObjectField(vmthrow); // remove the VMThrowable.fillInStackTrace method and the last method // on the stack. Modified: vmkit/trunk/lib/J3/Classpath/JavaUpcalls.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/Classpath/JavaUpcalls.cpp?rev=105910&r1=105909&r2=105910&view=diff ============================================================================== --- vmkit/trunk/lib/J3/Classpath/JavaUpcalls.cpp (original) +++ vmkit/trunk/lib/J3/Classpath/JavaUpcalls.cpp Sun Jun 13 02:40:55 2010 @@ -229,8 +229,9 @@ void Classpath::CreateJavaThread(Jnjvm* vm, JavaThread* myth, const char* thName, JavaObject* Group) { - JavaObject* vmth = 0; - JavaObject* th = 0; + JavaObject* vmth = NULL; + JavaObject* th = NULL; + JavaObject* name = NULL; llvm_gcroot(Group, 0); llvm_gcroot(vmth, 0); llvm_gcroot(th, 0); @@ -238,16 +239,17 @@ th = newThread->doNew(vm); myth->javaThread = th; vmth = newVMThread->doNew(vm); + name = vm->asciizToStr(thName); - threadName->setObjectField(th, vm->asciizToStr(thName)); - priority->setInt32Field(th, (uint32)1); - daemon->setInt8Field(th, (uint32)0); - vmThread->setObjectField(th, vmth); - assocThread->setObjectField(vmth, th); - running->setInt8Field(vmth, (uint32)1); - vmdataVMThread->setObjectField(vmth, (JavaObject*)myth); + threadName->setInstanceObjectField(th, name); + priority->setInstanceInt32Field(th, (uint32)1); + daemon->setInstanceInt8Field(th, (uint32)0); + vmThread->setInstanceObjectField(th, vmth); + assocThread->setInstanceObjectField(vmth, th); + running->setInstanceInt8Field(vmth, (uint32)1); + ((JavaObjectVMThread*)vmdataVMThread)->setVmdata(myth); - group->setObjectField(th, Group); + group->setInstanceObjectField(th, Group); groupAddThread->invokeIntSpecial(vm, threadGroup, Group, &th); finaliseCreateInitialThread->invokeIntStatic(vm, inheritableThreadLocal, &th); @@ -273,8 +275,7 @@ threadGroup->initialiseClass(vm); // Create the main thread - void* Stat = threadGroup->getStaticInstance(); - RG = rootGroup->getObjectField(Stat); + RG = rootGroup->getStaticObjectField(); assert(RG && "No root group"); assert(vm->getMainThread() && "VM did not set its main thread"); CreateJavaThread(vm, (JavaThread*)vm->getMainThread(), "main", RG); @@ -283,7 +284,7 @@ SystemGroup = threadGroup->doNew(vm); initGroup->invokeIntSpecial(vm, threadGroup, SystemGroup); systemName = vm->asciizToStr("system"); - groupName->setObjectField(SystemGroup, systemName); + groupName->setInstanceObjectField(SystemGroup, systemName); // Create the finalizer thread. assert(vm->getFinalizerThread() && "VM did not set its finalizer thread"); Modified: vmkit/trunk/lib/J3/Compiler/JavaAOTCompiler.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/Compiler/JavaAOTCompiler.cpp?rev=105910&r1=105909&r2=105910&view=diff ============================================================================== --- vmkit/trunk/lib/J3/Compiler/JavaAOTCompiler.cpp (original) +++ vmkit/trunk/lib/J3/Compiler/JavaAOTCompiler.cpp Sun Jun 13 02:40:55 2010 @@ -391,45 +391,44 @@ Attribut* attribut = field.lookupAttribut(Attribut::constantAttribut); if (!attribut) { - void* obj = cl->getStaticInstance(); - if (obj) { + if (cl->getStaticInstance() != NULL) { if (type->isPrimitive()) { const PrimitiveTypedef* prim = (const PrimitiveTypedef*)type; if (prim->isBool() || prim->isByte()) { ConstantInt* CI = ConstantInt::get( Type::getInt8Ty(getLLVMContext()), - field.getInt8Field(obj)); + field.getStaticInt8Field()); Elts.push_back(CI); } else if (prim->isShort() || prim->isChar()) { ConstantInt* CI = ConstantInt::get( Type::getInt16Ty(getLLVMContext()), - field.getInt16Field(obj)); + field.getStaticInt16Field()); Elts.push_back(CI); } else if (prim->isInt()) { ConstantInt* CI = ConstantInt::get( Type::getInt32Ty(getLLVMContext()), - field.getInt32Field(obj)); + field.getStaticInt32Field()); Elts.push_back(CI); } else if (prim->isLong()) { ConstantInt* CI = ConstantInt::get( Type::getInt64Ty(getLLVMContext()), - field.getLongField(obj)); + field.getStaticLongField()); Elts.push_back(CI); } else if (prim->isFloat()) { Constant* CF = ConstantFP::get( Type::getFloatTy(getLLVMContext()), - field.getFloatField(obj)); + field.getStaticFloatField()); Elts.push_back(CF); } else if (prim->isDouble()) { Constant* CF = ConstantFP::get( Type::getDoubleTy(getLLVMContext()), - field.getDoubleField(obj)); + field.getStaticDoubleField()); Elts.push_back(CF); } else { abort(); } } else { - JavaObject* val = field.getObjectField(obj); + JavaObject* val = field.getStaticObjectField(); if (val) { JnjvmClassLoader* JCL = cl->classLoader; CommonClass* FieldCl = field.getSignature()->assocClass(JCL); @@ -676,33 +675,33 @@ const PrimitiveTypedef* prim = (const PrimitiveTypedef*)type; if (prim->isBool() || prim->isByte()) { ConstantInt* CI = ConstantInt::get(Type::getInt8Ty(getLLVMContext()), - field.getInt8Field(obj)); + field.getInstanceInt8Field(obj)); TempElts.push_back(CI); } else if (prim->isShort() || prim->isChar()) { ConstantInt* CI = ConstantInt::get(Type::getInt16Ty(getLLVMContext()), - field.getInt16Field(obj)); + field.getInstanceInt16Field(obj)); TempElts.push_back(CI); } else if (prim->isInt()) { ConstantInt* CI = ConstantInt::get(Type::getInt32Ty(getLLVMContext()), - field.getInt32Field(obj)); + field.getInstanceInt32Field(obj)); TempElts.push_back(CI); } else if (prim->isLong()) { ConstantInt* CI = ConstantInt::get(Type::getInt64Ty(getLLVMContext()), - field.getLongField(obj)); + field.getInstanceLongField(obj)); TempElts.push_back(CI); } else if (prim->isFloat()) { Constant* CF = ConstantFP::get(Type::getFloatTy(getLLVMContext()), - field.getFloatField(obj)); + field.getInstanceFloatField(obj)); TempElts.push_back(CF); } else if (prim->isDouble()) { Constant* CF = ConstantFP::get(Type::getDoubleTy(getLLVMContext()), - field.getDoubleField(obj)); + field.getInstanceDoubleField(obj)); TempElts.push_back(CF); } else { abort(); } } else { - JavaObject* val = field.getObjectField(obj); + JavaObject* val = field.getInstanceObjectField(obj); if (val) { JnjvmClassLoader* JCL = cl->classLoader; CommonClass* FieldCl = field.getSignature()->assocClass(JCL); Modified: vmkit/trunk/lib/J3/Compiler/JavaJIT.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/Compiler/JavaJIT.cpp?rev=105910&r1=105909&r2=105910&view=diff ============================================================================== --- vmkit/trunk/lib/J3/Compiler/JavaJIT.cpp (original) +++ vmkit/trunk/lib/J3/Compiler/JavaJIT.cpp Sun Jun 13 02:40:55 2010 @@ -2093,39 +2093,38 @@ JavaField* field = compilingClass->ctpInfo->lookupField(index, true); if (field && field->classDef->isReady()) final = isFinal(field->access); if (final) { - void* Obj = field->classDef->getStaticInstance(); if (sign->isPrimitive()) { const PrimitiveTypedef* prim = (PrimitiveTypedef*)sign; if (prim->isInt()) { - sint32 val = field->getInt32Field(Obj); + sint32 val = field->getStaticInt32Field(); push(ConstantInt::get(Type::getInt32Ty(*llvmContext), val), false); } else if (prim->isByte()) { - sint8 val = (sint8)field->getInt8Field(Obj); + sint8 val = (sint8)field->getStaticInt8Field(); push(ConstantInt::get(Type::getInt8Ty(*llvmContext), val), false); } else if (prim->isBool()) { - uint8 val = (uint8)field->getInt8Field(Obj); + uint8 val = (uint8)field->getStaticInt8Field(); push(ConstantInt::get(Type::getInt8Ty(*llvmContext), val), true); } else if (prim->isShort()) { - sint16 val = (sint16)field->getInt16Field(Obj); + sint16 val = (sint16)field->getStaticInt16Field(); push(ConstantInt::get(Type::getInt16Ty(*llvmContext), val), false); } else if (prim->isChar()) { - uint16 val = (uint16)field->getInt16Field(Obj); + uint16 val = (uint16)field->getStaticInt16Field(); push(ConstantInt::get(Type::getInt16Ty(*llvmContext), val), true); } else if (prim->isLong()) { - sint64 val = (sint64)field->getLongField(Obj); + sint64 val = (sint64)field->getStaticLongField(); push(ConstantInt::get(Type::getInt64Ty(*llvmContext), val), false); } else if (prim->isFloat()) { - float val = (float)field->getFloatField(Obj); + float val = (float)field->getStaticFloatField(); push(ConstantFP::get(Type::getFloatTy(*llvmContext), val), false); } else if (prim->isDouble()) { - double val = (double)field->getDoubleField(Obj); + double val = (double)field->getStaticDoubleField(); push(ConstantFP::get(Type::getDoubleTy(*llvmContext), val), false); } else { abort(); } } else { if (TheCompiler->isStaticCompiling()) { - JavaObject* val = field->getObjectField(Obj); + JavaObject* val = field->getStaticObjectField(); JnjvmClassLoader* JCL = field->classDef->classLoader; Value* V = TheCompiler->getFinalObject(val, sign->assocClass(JCL)); CommonClass* cl = mvm::Collector::begOf(val) ? Modified: vmkit/trunk/lib/J3/VMCore/JavaClass.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/JavaClass.cpp?rev=105910&r1=105909&r2=105910&view=diff ============================================================================== --- vmkit/trunk/lib/J3/VMCore/JavaClass.cpp (original) +++ vmkit/trunk/lib/J3/VMCore/JavaClass.cpp Sun Jun 13 02:40:55 2010 @@ -948,50 +948,43 @@ #ifndef ISOLATE_SHARING void Class::resolveClass() { + JavaObject* exc = 0; + llvm_gcroot(exc, 0); if (!isResolved() && !isErroneous()) { acquire(); if (isResolved() || isErroneous()) { release(); } else if (!isResolving()) { setOwnerClass(JavaThread::get()); - - { - JavaObject* exc = 0; - llvm_gcroot(exc, 0); - TRY { - readClass(); - } CATCH { - exc = JavaThread::get()->pendingException; - JavaThread::get()->clearException(); - } END_CATCH; - - if (exc) { - setErroneous(); - setOwnerClass(0); - broadcastClass(); - release(); - JavaThread::get()->throwException(exc); - } + TRY { + readClass(); + } CATCH { + exc = JavaThread::get()->pendingException; + JavaThread::get()->clearException(); + } END_CATCH; + + if (exc != NULL) { + setErroneous(); + setOwnerClass(0); + broadcastClass(); + release(); + JavaThread::get()->throwException(exc); } release(); - { - JavaObject* exc = 0; - llvm_gcroot(exc, 0); - TRY { - loadParents(); - } CATCH { - setInitializationState(loaded); - exc = JavaThread::get()->pendingException; - JavaThread::get()->clearException(); - } END_CATCH; + TRY { + loadParents(); + } CATCH { + setInitializationState(loaded); + exc = JavaThread::get()->pendingException; + JavaThread::get()->clearException(); + } END_CATCH; - if (exc) { - setErroneous(); - setOwnerClass(0); - JavaThread::get()->throwException(exc); - } + if (exc != NULL) { + setErroneous(); + setOwnerClass(0); + JavaThread::get()->throwException(exc); } makeVT(); @@ -1142,10 +1135,12 @@ } JavaObject* CommonClass::setDelegatee(JavaObject* val) { + JavaObject* prev = NULL; + llvm_gcroot(val, 0); + llvm_gcroot(prev, 0); JavaObject** obj = &(delegatee[JavaThread::get()->getJVM()->IsolateID]); - JavaObject* prev = (JavaObject*) - __sync_val_compare_and_swap((uintptr_t)obj, NULL, val); + prev = (JavaObject*)__sync_val_compare_and_swap((uintptr_t)obj, NULL, val); if (!prev) return val; else return prev; @@ -1154,8 +1149,10 @@ #else JavaObject* CommonClass::setDelegatee(JavaObject* val) { - JavaObject* prev = (JavaObject*) - __sync_val_compare_and_swap(&(delegatee[0]), NULL, val); + JavaObject* prev = NULL; + llvm_gcroot(val, 0); + llvm_gcroot(prev, 0); + prev = (JavaObject*)__sync_val_compare_and_swap(&(delegatee[0]), NULL, val); if (!prev) return val; else return prev; Modified: vmkit/trunk/lib/J3/VMCore/JavaClass.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/JavaClass.h?rev=105910&r1=105909&r2=105910&view=diff ============================================================================== --- vmkit/trunk/lib/J3/VMCore/JavaClass.h (original) +++ vmkit/trunk/lib/J3/VMCore/JavaClass.h Sun Jun 13 02:40:55 2010 @@ -304,12 +304,12 @@ /// getClassDelegatee - Return the java/lang/Class representation of this /// class. /// - JavaObject* getClassDelegatee(Jnjvm* vm, JavaObject* pd = 0); + JavaObject* getClassDelegatee(Jnjvm* vm, JavaObject* pd = NULL); /// getClassDelegateePtr - Return a pointer on the java/lang/Class /// representation of this class. Used for JNI. /// - JavaObject* const* getClassDelegateePtr(Jnjvm* vm, JavaObject* pd = 0); + JavaObject* const* getClassDelegateePtr(Jnjvm* vm, JavaObject* pd = NULL); /// CommonClass - Create a class with th given name. /// @@ -1339,41 +1339,94 @@ /// Attribut* lookupAttribut(const UTF8* key); - JavaObject** getObjectFieldPtr(void* obj) { + JavaObject** getStaticObjectFieldPtr() { assert(classDef->isResolved()); - void* ptr = (void*)((uint64)obj + ptrOffset); - return (JavaObject**)ptr; + return (JavaObject**)((uint64)classDef->getStaticInstance() + ptrOffset); + } + + JavaObject** getInstanceObjectFieldPtr(JavaObject* obj) { + llvm_gcroot(obj, 0); + return (JavaObject**)((uint64)obj + ptrOffset); + } + + /// getStatic*Field - Get a static field. + /// + #define GETSTATICFIELD(TYPE, TYPE_NAME) \ + TYPE getStatic##TYPE_NAME##Field() { \ + assert(classDef->isResolved()); \ + void* ptr = (void*)((uint64)classDef->getStaticInstance() + ptrOffset); \ + return ((TYPE*)ptr)[0]; \ } - /// getVritual*Field - Get a virtual field of an object. + /// setStatic*Field - Set a field of an object. /// - #define GETFIELD(TYPE, TYPE_NAME) \ - TYPE get##TYPE_NAME##Field(void* obj) { \ - assert(classDef->isResolved()); \ - void* ptr = (void*)((uint64)obj + ptrOffset); \ - return ((TYPE*)ptr)[0]; \ + #define SETSTATICFIELD(TYPE, TYPE_NAME) \ + void setStatic##TYPE_NAME##Field(TYPE val) { \ + assert(classDef->isResolved()); \ + void* ptr = (void*)((uint64)classDef->getStaticInstance() + ptrOffset); \ + ((TYPE*)ptr)[0] = val; \ } - /// set*Field - Set a field of an object. + /// getInstance*Field - Get an instance field. /// - #define SETFIELD(TYPE, TYPE_NAME) \ - void set##TYPE_NAME##Field(void* obj, TYPE val) { \ - assert(classDef->isResolved()); \ - void* ptr = (void*)((uint64)obj + ptrOffset); \ - ((TYPE*)ptr)[0] = val; \ + #define GETINSTANCEFIELD(TYPE, TYPE_NAME) \ + TYPE getInstance##TYPE_NAME##Field(JavaObject* obj) { \ + llvm_gcroot(obj, 0); \ + assert(classDef->isResolved()); \ + void* ptr = (void*)((uint64)obj + ptrOffset); \ + return ((TYPE*)ptr)[0]; \ } - #define MK_ASSESSORS(TYPE, TYPE_NAME) \ - GETFIELD(TYPE, TYPE_NAME) \ - SETFIELD(TYPE, TYPE_NAME) \ + /// setInstance*Field - Set an instance field. + /// + #define SETINSTANCEFIELD(TYPE, TYPE_NAME) \ + void setInstance##TYPE_NAME##Field(JavaObject* obj, TYPE val) { \ + llvm_gcroot(obj, 0); \ + assert(classDef->isResolved()); \ + void* ptr = (void*)((uint64)obj + ptrOffset); \ + ((TYPE*)ptr)[0] = val; \ + } + + #define MK_ASSESSORS(TYPE, TYPE_NAME) \ + GETSTATICFIELD(TYPE, TYPE_NAME) \ + SETSTATICFIELD(TYPE, TYPE_NAME) \ + GETINSTANCEFIELD(TYPE, TYPE_NAME) \ + SETINSTANCEFIELD(TYPE, TYPE_NAME) \ MK_ASSESSORS(float, Float); MK_ASSESSORS(double, Double); - MK_ASSESSORS(JavaObject*, Object); MK_ASSESSORS(uint8, Int8); MK_ASSESSORS(uint16, Int16); MK_ASSESSORS(uint32, Int32); MK_ASSESSORS(sint64, Long); + + JavaObject* getStaticObjectField() { + assert(classDef->isResolved()); + void* ptr = (void*)((uint64)classDef->getStaticInstance() + ptrOffset); + return ((JavaObject**)ptr)[0]; + } + + void setStaticObjectField(JavaObject* val) { + llvm_gcroot(val, 0); + assert(classDef->isResolved()); + void* ptr = (void*)((uint64)classDef->getStaticInstance() + ptrOffset); + ((JavaObject**)ptr)[0] = val; + } + + JavaObject* getInstanceObjectField(JavaObject* obj) { + llvm_gcroot(obj, 0); + assert(classDef->isResolved()); + void* ptr = (void*)((uint64)obj + ptrOffset); + return ((JavaObject**)ptr)[0]; + } + + void setInstanceObjectField(JavaObject* obj, JavaObject* val) { + llvm_gcroot(obj, 0); + llvm_gcroot(val, 0); + assert(classDef->isResolved()); + void* ptr = (void*)((uint64)obj + ptrOffset); + ((JavaObject**)ptr)[0] = val; + } bool isReference() { uint16 val = type->elements[0]; Modified: vmkit/trunk/lib/J3/VMCore/JavaObject.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/JavaObject.cpp?rev=105910&r1=105909&r2=105910&view=diff ============================================================================== --- vmkit/trunk/lib/J3/VMCore/JavaObject.cpp (original) +++ vmkit/trunk/lib/J3/VMCore/JavaObject.cpp Sun Jun 13 02:40:55 2010 @@ -228,95 +228,95 @@ if (prim->isShort()) { if (value == vm->upcalls->OfShort) { - (*buf).s = vm->upcalls->shortValue->getInt16Field(obj); + (*buf).s = vm->upcalls->shortValue->getInstanceInt16Field(obj); return; } else if (value == vm->upcalls->OfByte) { - (*buf).s = (sint16)vm->upcalls->byteValue->getInt8Field(obj); + (*buf).s = (sint16)vm->upcalls->byteValue->getInstanceInt8Field(obj); return; } else { vm->illegalArgumentException(""); } } else if (prim->isByte()) { if (value == vm->upcalls->OfByte) { - (*buf).b = vm->upcalls->byteValue->getInt8Field(obj); + (*buf).b = vm->upcalls->byteValue->getInstanceInt8Field(obj); return; } else { vm->illegalArgumentException(""); } } else if (prim->isBool()) { if (value == vm->upcalls->OfBool) { - (*buf).z = vm->upcalls->boolValue->getInt8Field(obj); + (*buf).z = vm->upcalls->boolValue->getInstanceInt8Field(obj); return; } else { vm->illegalArgumentException(""); } } else if (prim->isInt()) { if (value == vm->upcalls->OfInt) { - (*buf).i = vm->upcalls->intValue->getInt32Field(obj); + (*buf).i = vm->upcalls->intValue->getInstanceInt32Field(obj); } else if (value == vm->upcalls->OfByte) { - (*buf).i = (sint32)vm->upcalls->byteValue->getInt8Field(obj); + (*buf).i = (sint32)vm->upcalls->byteValue->getInstanceInt8Field(obj); } else if (value == vm->upcalls->OfChar) { - (*buf).i = (uint32)vm->upcalls->charValue->getInt16Field(obj); + (*buf).i = (uint32)vm->upcalls->charValue->getInstanceInt16Field(obj); } else if (value == vm->upcalls->OfShort) { - (*buf).i = (sint32)vm->upcalls->shortValue->getInt16Field(obj); + (*buf).i = (sint32)vm->upcalls->shortValue->getInstanceInt16Field(obj); } else { vm->illegalArgumentException(""); } return; } else if (prim->isChar()) { if (value == vm->upcalls->OfChar) { - (*buf).c = (uint16)vm->upcalls->charValue->getInt16Field(obj); + (*buf).c = (uint16)vm->upcalls->charValue->getInstanceInt16Field(obj); } else { vm->illegalArgumentException(""); } return; } else if (prim->isFloat()) { if (value == vm->upcalls->OfFloat) { - (*buf).f = (float)vm->upcalls->floatValue->getFloatField(obj); + (*buf).f = (float)vm->upcalls->floatValue->getInstanceFloatField(obj); } else if (value == vm->upcalls->OfByte) { - (*buf).f = (float)(sint32)vm->upcalls->byteValue->getInt8Field(obj); + (*buf).f = (float)(sint32)vm->upcalls->byteValue->getInstanceInt8Field(obj); } else if (value == vm->upcalls->OfChar) { - (*buf).f = (float)(uint32)vm->upcalls->charValue->getInt16Field(obj); + (*buf).f = (float)(uint32)vm->upcalls->charValue->getInstanceInt16Field(obj); } else if (value == vm->upcalls->OfShort) { - (*buf).f = (float)(sint32)vm->upcalls->shortValue->getInt16Field(obj); + (*buf).f = (float)(sint32)vm->upcalls->shortValue->getInstanceInt16Field(obj); } else if (value == vm->upcalls->OfInt) { - (*buf).f = (float)(sint32)vm->upcalls->intValue->getInt32Field(obj); + (*buf).f = (float)(sint32)vm->upcalls->intValue->getInstanceInt32Field(obj); } else if (value == vm->upcalls->OfLong) { - (*buf).f = (float)vm->upcalls->longValue->getLongField(obj); + (*buf).f = (float)vm->upcalls->longValue->getInstanceLongField(obj); } else { vm->illegalArgumentException(""); } return; } else if (prim->isDouble()) { if (value == vm->upcalls->OfDouble) { - (*buf).d = (double)vm->upcalls->doubleValue->getDoubleField(obj); + (*buf).d = (double)vm->upcalls->doubleValue->getInstanceDoubleField(obj); } else if (value == vm->upcalls->OfFloat) { - (*buf).d = (double)vm->upcalls->floatValue->getFloatField(obj); + (*buf).d = (double)vm->upcalls->floatValue->getInstanceFloatField(obj); } else if (value == vm->upcalls->OfByte) { - (*buf).d = (double)(sint64)vm->upcalls->byteValue->getInt8Field(obj); + (*buf).d = (double)(sint64)vm->upcalls->byteValue->getInstanceInt8Field(obj); } else if (value == vm->upcalls->OfChar) { - (*buf).d = (double)(uint64)vm->upcalls->charValue->getInt16Field(obj); + (*buf).d = (double)(uint64)vm->upcalls->charValue->getInstanceInt16Field(obj); } else if (value == vm->upcalls->OfShort) { - (*buf).d = (double)(sint16)vm->upcalls->shortValue->getInt16Field(obj); + (*buf).d = (double)(sint16)vm->upcalls->shortValue->getInstanceInt16Field(obj); } else if (value == vm->upcalls->OfInt) { - (*buf).d = (double)(sint32)vm->upcalls->intValue->getInt32Field(obj); + (*buf).d = (double)(sint32)vm->upcalls->intValue->getInstanceInt32Field(obj); } else if (value == vm->upcalls->OfLong) { - (*buf).d = (double)(sint64)vm->upcalls->longValue->getLongField(obj); + (*buf).d = (double)(sint64)vm->upcalls->longValue->getInstanceLongField(obj); } else { vm->illegalArgumentException(""); } return; } else if (prim->isLong()) { if (value == vm->upcalls->OfByte) { - (*buf).j = (sint64)vm->upcalls->byteValue->getInt8Field(obj); + (*buf).j = (sint64)vm->upcalls->byteValue->getInstanceInt8Field(obj); } else if (value == vm->upcalls->OfChar) { - (*buf).j = (sint64)(uint64)vm->upcalls->charValue->getInt16Field(obj); + (*buf).j = (sint64)(uint64)vm->upcalls->charValue->getInstanceInt16Field(obj); } else if (value == vm->upcalls->OfShort) { - (*buf).j = (sint64)vm->upcalls->shortValue->getInt16Field(obj); + (*buf).j = (sint64)vm->upcalls->shortValue->getInstanceInt16Field(obj); } else if (value == vm->upcalls->OfInt) { - (*buf).j = (sint64)vm->upcalls->intValue->getInt32Field(obj); + (*buf).j = (sint64)vm->upcalls->intValue->getInstanceInt32Field(obj); } else if (value == vm->upcalls->OfLong) { - (*buf).j = (sint64)vm->upcalls->intValue->getLongField(obj); + (*buf).j = (sint64)vm->upcalls->intValue->getInstanceLongField(obj); } else { vm->illegalArgumentException(""); } Modified: vmkit/trunk/lib/J3/VMCore/Jni.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/Jni.cpp?rev=105910&r1=105909&r2=105910&view=diff ============================================================================== --- vmkit/trunk/lib/J3/VMCore/Jni.cpp (original) +++ vmkit/trunk/lib/J3/VMCore/Jni.cpp Sun Jun 13 02:40:55 2010 @@ -1273,7 +1273,7 @@ JavaField* field = (JavaField*)fieldID; // Store local reference. - res = field->getObjectField(obj); + res = field->getInstanceObjectField(obj); JavaThread* th = JavaThread::get(); jobject ret = (jobject)th->pushJNIRef(res); @@ -1293,7 +1293,7 @@ llvm_gcroot(obj, 0); JavaField* field = (JavaField*)fieldID; - uint8 res = (uint8)field->getInt8Field(obj); + uint8 res = (uint8)field->getInstanceInt8Field(obj); RETURN_FROM_JNI(res); END_JNI_EXCEPTION @@ -1310,7 +1310,7 @@ llvm_gcroot(obj, 0); JavaField* field = (JavaField*)fieldID; - sint8 res = (sint8)field->getInt8Field(obj); + sint8 res = (sint8)field->getInstanceInt8Field(obj); RETURN_FROM_JNI(res); END_JNI_EXCEPTION @@ -1327,7 +1327,7 @@ llvm_gcroot(obj, 0); JavaField* field = (JavaField*)fieldID; - uint16 res = (uint16)field->getInt16Field(obj); + uint16 res = (uint16)field->getInstanceInt16Field(obj); RETURN_FROM_JNI(res); END_JNI_EXCEPTION @@ -1344,7 +1344,7 @@ llvm_gcroot(obj, 0); JavaField* field = (JavaField*)fieldID; - sint16 res = (sint16)field->getInt16Field(obj); + sint16 res = (sint16)field->getInstanceInt16Field(obj); RETURN_FROM_JNI(res); END_JNI_EXCEPTION @@ -1361,7 +1361,7 @@ llvm_gcroot(obj, 0); JavaField* field = (JavaField*)fieldID; - sint32 res = (sint32)field->getInt32Field(obj); + sint32 res = (sint32)field->getInstanceInt32Field(obj); RETURN_FROM_JNI(res); END_JNI_EXCEPTION @@ -1378,7 +1378,7 @@ llvm_gcroot(obj, 0); JavaField* field = (JavaField*)fieldID; - sint64 res = (sint64)field->getLongField(obj); + sint64 res = (sint64)field->getInstanceLongField(obj); RETURN_FROM_JNI(res); END_JNI_EXCEPTION @@ -1395,7 +1395,7 @@ llvm_gcroot(obj, 0); JavaField* field = (JavaField*)fieldID; - jfloat res = (jfloat)field->getFloatField(obj); + jfloat res = (jfloat)field->getInstanceFloatField(obj); RETURN_FROM_JNI(res); END_JNI_EXCEPTION @@ -1412,7 +1412,7 @@ llvm_gcroot(obj, 0); JavaField* field = (JavaField*)fieldID; - jdouble res = (jdouble)field->getDoubleField(obj); + jdouble res = (jdouble)field->getInstanceDoubleField(obj); RETURN_FROM_JNI(res); END_JNI_EXCEPTION @@ -1431,7 +1431,7 @@ llvm_gcroot(value, 0); JavaField* field = (JavaField*)fieldID; - field->setObjectField(obj, value); + field->setInstanceObjectField(obj, value); RETURN_VOID_FROM_JNI; @@ -1451,7 +1451,7 @@ llvm_gcroot(obj, 0); JavaField* field = (JavaField*)fieldID; - field->setInt8Field(obj, (uint8)value); + field->setInstanceInt8Field(obj, (uint8)value); RETURN_VOID_FROM_JNI; @@ -1470,7 +1470,7 @@ llvm_gcroot(obj, 0); JavaField* field = (JavaField*)fieldID; - field->setInt8Field(obj, (uint8)value); + field->setInstanceInt8Field(obj, (uint8)value); RETURN_VOID_FROM_JNI; @@ -1489,7 +1489,7 @@ llvm_gcroot(obj, 0); JavaField* field = (JavaField*)fieldID; - field->setInt16Field(obj, (uint16)value); + field->setInstanceInt16Field(obj, (uint16)value); RETURN_VOID_FROM_JNI; @@ -1508,7 +1508,7 @@ llvm_gcroot(obj, 0); JavaField* field = (JavaField*)fieldID; - field->setInt16Field(obj, (sint16)value); + field->setInstanceInt16Field(obj, (sint16)value); RETURN_VOID_FROM_JNI; @@ -1527,7 +1527,7 @@ llvm_gcroot(obj, 0); JavaField* field = (JavaField*)fieldID; - field->setInt32Field(obj, (sint32)value); + field->setInstanceInt32Field(obj, (sint32)value); RETURN_VOID_FROM_JNI; @@ -1546,7 +1546,7 @@ llvm_gcroot(obj, 0); JavaField* field = (JavaField*)fieldID; - field->setLongField(obj, (sint64)value); + field->setInstanceLongField(obj, (sint64)value); RETURN_VOID_FROM_JNI; @@ -1565,7 +1565,7 @@ llvm_gcroot(obj, 0); JavaField* field = (JavaField*)fieldID; - field->setFloatField(obj, (float)value); + field->setInstanceFloatField(obj, (float)value); RETURN_VOID_FROM_JNI; @@ -1584,7 +1584,7 @@ llvm_gcroot(obj, 0); JavaField* field = (JavaField*)fieldID; - field->setDoubleField(obj, (float)value); + field->setInstanceDoubleField(obj, (float)value); RETURN_VOID_FROM_JNI; @@ -2190,17 +2190,12 @@ BEGIN_JNI_EXCEPTION // Local object references. - JavaObject* clazz = *(JavaObject**)_clazz; JavaObject* obj = 0; - llvm_gcroot(clazz, 0); llvm_gcroot(obj, 0); JavaThread* th = JavaThread::get(); - Jnjvm* vm = th->getJVM(); JavaField* field = (JavaField*)fieldID; - UserCommonClass* cl = UserCommonClass::resolvedImplClass(vm, clazz, true); - void* Stat = cl->asClass()->getStaticInstance(); - obj = field->getObjectField(Stat); + obj = field->getStaticObjectField(); jobject res = (jobject)th->pushJNIRef(obj); RETURN_FROM_JNI(res); @@ -2213,15 +2208,8 @@ BEGIN_JNI_EXCEPTION - // Local object references. - JavaObject* clazz = *(JavaObject**)_clazz; - llvm_gcroot(clazz, 0); - - Jnjvm* vm = JavaThread::get()->getJVM(); JavaField* field = (JavaField*)fieldID; - UserCommonClass* cl = UserCommonClass::resolvedImplClass(vm, clazz, true); - void* Stat = cl->asClass()->getStaticInstance(); - jboolean res = (jboolean)field->getInt8Field(Stat); + jboolean res = (jboolean)field->getStaticInt8Field(); RETURN_FROM_JNI(res); END_JNI_EXCEPTION @@ -2233,15 +2221,8 @@ BEGIN_JNI_EXCEPTION - // Local object references. - JavaObject* clazz = *(JavaObject**)_clazz; - llvm_gcroot(clazz, 0); - - Jnjvm* vm = JavaThread::get()->getJVM(); JavaField* field = (JavaField*)fieldID; - UserCommonClass* cl = UserCommonClass::resolvedImplClass(vm, clazz, true); - void* Stat = cl->asClass()->getStaticInstance(); - jbyte res = (jbyte)field->getInt8Field(Stat); + jbyte res = (jbyte)field->getStaticInt8Field(); RETURN_FROM_JNI(res); END_JNI_EXCEPTION @@ -2253,15 +2234,8 @@ BEGIN_JNI_EXCEPTION - // Local object references. - JavaObject* clazz = *(JavaObject**)_clazz; - llvm_gcroot(clazz, 0); - - Jnjvm* vm = JavaThread::get()->getJVM(); JavaField* field = (JavaField*)fieldID; - UserCommonClass* cl = UserCommonClass::resolvedImplClass(vm, clazz, true); - void* Stat = cl->asClass()->getStaticInstance(); - jchar res = (jchar)field->getInt16Field(Stat); + jchar res = (jchar)field->getStaticInt16Field(); RETURN_FROM_JNI(res); END_JNI_EXCEPTION @@ -2273,15 +2247,8 @@ BEGIN_JNI_EXCEPTION - // Local object references. - JavaObject* clazz = *(JavaObject**)_clazz; - llvm_gcroot(clazz, 0); - - Jnjvm* vm = JavaThread::get()->getJVM(); JavaField* field = (JavaField*)fieldID; - UserCommonClass* cl = UserCommonClass::resolvedImplClass(vm, clazz, true); - void* Stat = cl->asClass()->getStaticInstance(); - jshort res = (jshort)field->getInt16Field(Stat); + jshort res = (jshort)field->getStaticInt16Field(); RETURN_FROM_JNI(res); END_JNI_EXCEPTION @@ -2293,15 +2260,8 @@ BEGIN_JNI_EXCEPTION - // Local object references. - JavaObject* clazz = *(JavaObject**)_clazz; - llvm_gcroot(clazz, 0); - - Jnjvm* vm = JavaThread::get()->getJVM(); JavaField* field = (JavaField*)fieldID; - UserCommonClass* cl = UserCommonClass::resolvedImplClass(vm, clazz, true); - void* Stat = cl->asClass()->getStaticInstance(); - jint res = (jint)field->getInt32Field(Stat); + jint res = (jint)field->getStaticInt32Field(); RETURN_FROM_JNI(res); END_JNI_EXCEPTION @@ -2313,15 +2273,8 @@ BEGIN_JNI_EXCEPTION - // Local object references. - JavaObject* clazz = *(JavaObject**)_clazz; - llvm_gcroot(clazz, 0); - - Jnjvm* vm = JavaThread::get()->getJVM(); JavaField* field = (JavaField*)fieldID; - UserCommonClass* cl = UserCommonClass::resolvedImplClass(vm, clazz, true); - void* Stat = cl->asClass()->getStaticInstance(); - jlong res = (jlong)field->getLongField(Stat); + jlong res = (jlong)field->getStaticLongField(); RETURN_FROM_JNI(res); END_JNI_EXCEPTION @@ -2333,15 +2286,8 @@ BEGIN_JNI_EXCEPTION - // Local object references. - JavaObject* clazz = *(JavaObject**)_clazz; - llvm_gcroot(clazz, 0); - - Jnjvm* vm = JavaThread::get()->getJVM(); JavaField* field = (JavaField*)fieldID; - UserCommonClass* cl = UserCommonClass::resolvedImplClass(vm, clazz, true); - void* Stat = cl->asClass()->getStaticInstance(); - jfloat res = (jfloat)field->getFloatField(Stat); + jfloat res = (jfloat)field->getStaticFloatField(); RETURN_FROM_JNI(res); END_JNI_EXCEPTION @@ -2353,15 +2299,8 @@ BEGIN_JNI_EXCEPTION - // Local object references. - JavaObject* clazz = *(JavaObject**)_clazz; - llvm_gcroot(clazz, 0); - - Jnjvm* vm = JavaThread::get()->getJVM(); JavaField* field = (JavaField*)fieldID; - UserCommonClass* cl = UserCommonClass::resolvedImplClass(vm, clazz, true); - void* Stat = cl->asClass()->getStaticInstance(); - jdouble res = (jdouble)field->getDoubleField(Stat); + jdouble res = (jdouble)field->getStaticDoubleField(); RETURN_FROM_JNI(res); END_JNI_EXCEPTION @@ -2375,16 +2314,11 @@ BEGIN_JNI_EXCEPTION // Local object references. - JavaObject* clazz = *(JavaObject**)_clazz; JavaObject* value = *(JavaObject**)_value; - llvm_gcroot(clazz, 0); llvm_gcroot(value, 0); - Jnjvm* vm = JavaThread::get()->getJVM(); JavaField* field = (JavaField*)fieldID; - UserCommonClass* cl = UserCommonClass::resolvedImplClass(vm, clazz, true); - void* Stat = cl->asClass()->getStaticInstance(); - field->setObjectField(Stat, value); + field->setStaticObjectField(value); RETURN_VOID_FROM_JNI; @@ -2399,14 +2333,8 @@ BEGIN_JNI_EXCEPTION - // Local object references. - JavaObject* clazz = *(JavaObject**)_clazz; - - Jnjvm* vm = JavaThread::get()->getJVM(); JavaField* field = (JavaField*)fieldID; - UserCommonClass* cl = UserCommonClass::resolvedImplClass(vm, clazz, true); - void* Stat = cl->asClass()->getStaticInstance(); - field->setInt8Field(Stat, (uint8)value); + field->setStaticInt8Field((uint8)value); RETURN_VOID_FROM_JNI; @@ -2421,15 +2349,8 @@ BEGIN_JNI_EXCEPTION - // Local object references. - JavaObject* clazz = *(JavaObject**)_clazz; - llvm_gcroot(clazz, 0); - - Jnjvm* vm = JavaThread::get()->getJVM(); JavaField* field = (JavaField*)fieldID; - UserCommonClass* cl = UserCommonClass::resolvedImplClass(vm, clazz, true); - void* Stat = cl->asClass()->getStaticInstance(); - field->setInt8Field(Stat, (sint8)value); + field->setStaticInt8Field((sint8)value); RETURN_VOID_FROM_JNI; @@ -2444,15 +2365,8 @@ BEGIN_JNI_EXCEPTION - // Local object references. - JavaObject* clazz = *(JavaObject**)_clazz; - llvm_gcroot(clazz, 0); - - Jnjvm* vm = JavaThread::get()->getJVM(); JavaField* field = (JavaField*)fieldID; - UserCommonClass* cl = UserCommonClass::resolvedImplClass(vm, clazz, true); - void* Stat = cl->asClass()->getStaticInstance(); - field->setInt16Field(Stat, (uint16)value); + field->setStaticInt16Field((uint16)value); RETURN_VOID_FROM_JNI; @@ -2467,15 +2381,8 @@ BEGIN_JNI_EXCEPTION - // Local object references. - JavaObject* clazz = *(JavaObject**)_clazz; - llvm_gcroot(clazz, 0); - - Jnjvm* vm = JavaThread::get()->getJVM(); JavaField* field = (JavaField*)fieldID; - UserCommonClass* cl = UserCommonClass::resolvedImplClass(vm, clazz, true); - void* Stat = cl->asClass()->getStaticInstance(); - field->setInt16Field(Stat, (sint16)value); + field->setStaticInt16Field((sint16)value); RETURN_VOID_FROM_JNI; @@ -2490,15 +2397,8 @@ BEGIN_JNI_EXCEPTION - // Local object references. - JavaObject* clazz = *(JavaObject**)_clazz; - llvm_gcroot(clazz, 0); - - Jnjvm* vm = JavaThread::get()->getJVM(); JavaField* field = (JavaField*)fieldID; - UserCommonClass* cl = UserCommonClass::resolvedImplClass(vm, clazz, true); - void* Stat = cl->asClass()->getStaticInstance(); - field->setInt32Field(Stat, (sint32)value); + field->setStaticInt32Field((sint32)value); RETURN_VOID_FROM_JNI; @@ -2513,15 +2413,8 @@ BEGIN_JNI_EXCEPTION - // Local object references. - JavaObject* clazz = *(JavaObject**)_clazz; - llvm_gcroot(clazz, 0); - - Jnjvm* vm = JavaThread::get()->getJVM(); JavaField* field = (JavaField*)fieldID; - UserCommonClass* cl = UserCommonClass::resolvedImplClass(vm, clazz, true); - void* Stat = cl->asClass()->getStaticInstance(); - field->setLongField(Stat, (sint64)value); + field->setStaticLongField((sint64)value); RETURN_VOID_FROM_JNI; @@ -2536,15 +2429,8 @@ BEGIN_JNI_EXCEPTION - // Local object references. - JavaObject* clazz = *(JavaObject**)_clazz; - llvm_gcroot(clazz, 0); - - Jnjvm* vm = JavaThread::get()->getJVM(); JavaField* field = (JavaField*)fieldID; - UserCommonClass* cl = UserCommonClass::resolvedImplClass(vm, clazz, true); - void* Stat = cl->asClass()->getStaticInstance(); - field->setFloatField(Stat, (float)value); + field->setStaticFloatField((float)value); RETURN_VOID_FROM_JNI; @@ -2559,15 +2445,8 @@ BEGIN_JNI_EXCEPTION - // Local object references. - JavaObject* clazz = *(JavaObject**)_clazz; - llvm_gcroot(clazz, 0); - - Jnjvm* vm = JavaThread::get()->getJVM(); JavaField* field = (JavaField*)fieldID; - UserCommonClass* cl = UserCommonClass::resolvedImplClass(vm, clazz, true); - void* Stat = cl->asClass()->getStaticInstance(); - field->setDoubleField(Stat, (double)value); + field->setStaticDoubleField((double)value); RETURN_VOID_FROM_JNI; @@ -3709,11 +3588,11 @@ #if (__WORDSIZE == 32) UserClass* PP = myvm->upcalls->newPointer32; p = PP->doNew(myvm); - myvm->upcalls->dataPointer32->setInt32Field(p, (uint32)address); + myvm->upcalls->dataPointer32->setInstanceInt32Field(p, (uint32)address); #else UserClass* PP = myvm->upcalls->newPointer64; p = PP->doNew(myvm); - myvm->upcalls->dataPointer64->setLongField(p, (jlong)address); + myvm->upcalls->dataPointer64->setInstanceLongField(p, (jlong)address); #endif myvm->upcalls->InitDirectByteBuffer->invokeIntSpecial(myvm, BB, res, 0, &p, @@ -3740,12 +3619,12 @@ llvm_gcroot(address, 0); Jnjvm* vm = myVM(env); - address = vm->upcalls->bufferAddress->getObjectField(buf); + address = vm->upcalls->bufferAddress->getInstanceObjectField(buf); if (address != 0) { #if (__WORDSIZE == 32) - int res = vm->upcalls->dataPointer32->getInt32Field(address); + int res = vm->upcalls->dataPointer32->getInstanceInt32Field(address); #else - jlong res = vm->upcalls->dataPointer64->getLongField(address); + jlong res = vm->upcalls->dataPointer64->getInstanceLongField(address); #endif RETURN_FROM_JNI((void*)res); } else { Modified: vmkit/trunk/lib/J3/VMCore/Jnjvm.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/Jnjvm.cpp?rev=105910&r1=105909&r2=105910&view=diff ============================================================================== --- vmkit/trunk/lib/J3/VMCore/Jnjvm.cpp (original) +++ vmkit/trunk/lib/J3/VMCore/Jnjvm.cpp Sun Jun 13 02:40:55 2010 @@ -180,7 +180,6 @@ if (!vmjced) { JavaField* fields = cl->getStaticFields(); - void* val = cl->getStaticInstance(); for (uint32 i = 0; i < cl->nbStaticFields; ++i) { fields[i].InitStaticField(vm); } @@ -1200,7 +1199,7 @@ JavaThread* th = JavaThread::get(); th->clearException(); obj = th->currentThread(); - group = upcalls->group->getObjectField(obj); + group = upcalls->group->getInstanceObjectField(obj); TRY { upcalls->uncaughtException->invokeIntSpecial(this, upcalls->threadGroup, group, &obj, &exc); Modified: vmkit/trunk/lib/J3/VMCore/JnjvmClassLoader.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/JnjvmClassLoader.cpp?rev=105910&r1=105909&r2=105910&view=diff ============================================================================== --- vmkit/trunk/lib/J3/VMCore/JnjvmClassLoader.cpp (original) +++ vmkit/trunk/lib/J3/VMCore/JnjvmClassLoader.cpp Sun Jun 13 02:40:55 2010 @@ -849,18 +849,18 @@ JnjvmClassLoader* JCL = 0; Classpath* upcalls = vm->bootstrapLoader->upcalls; vmdata = - (VMClassLoader*)(upcalls->vmdataClassLoader->getObjectField(loader)); + (VMClassLoader*)(upcalls->vmdataClassLoader->getInstanceObjectField(loader)); if (vmdata == NULL) { JavaObject::acquire(loader); vmdata = - (VMClassLoader*)(upcalls->vmdataClassLoader->getObjectField(loader)); + (VMClassLoader*)(upcalls->vmdataClassLoader->getInstanceObjectField(loader)); if (!vmdata) { mvm::BumpPtrAllocator* A = new mvm::BumpPtrAllocator(); JCL = new(*A, "Class loader") JnjvmClassLoader(*A, *vm->bootstrapLoader, loader, vm); vmdata = VMClassLoader::allocate(JCL); - upcalls->vmdataClassLoader->setObjectField(loader, (JavaObject*)vmdata); + upcalls->vmdataClassLoader->setInstanceObjectField(loader, (JavaObject*)vmdata); } JavaObject::release(loader); } else { Modified: vmkit/trunk/lib/J3/VMCore/VirtualTables.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/VirtualTables.cpp?rev=105910&r1=105909&r2=105910&view=diff ============================================================================== --- vmkit/trunk/lib/J3/VMCore/VirtualTables.cpp (original) +++ vmkit/trunk/lib/J3/VMCore/VirtualTables.cpp Sun Jun 13 02:40:55 2010 @@ -117,7 +117,7 @@ for (uint32 i = 0; i < cl->nbVirtualFields; ++i) { JavaField& field = cl->virtualFields[i]; if (field.isReference()) { - JavaObject** ptr = field.getObjectFieldPtr(obj); + JavaObject** ptr = field.getInstanceObjectFieldPtr(obj); mvm::Collector::markAndTrace(obj, ptr, closure); } } @@ -176,7 +176,7 @@ for (uint32 i = 0; i < nbStaticFields; ++i) { JavaField& field = staticFields[i]; if (field.isReference()) { - JavaObject** ptr = field.getObjectFieldPtr(M.staticInstance); + JavaObject** ptr = field.getStaticObjectFieldPtr(); mvm::Collector::markAndTraceRoot(ptr, closure); } } From nicolas.geoffray at lip6.fr Sun Jun 13 01:02:36 2010 From: nicolas.geoffray at lip6.fr (Nicolas Geoffray) Date: Sun, 13 Jun 2010 08:02:36 -0000 Subject: [vmkit-commits] [vmkit] r105911 - in /vmkit/trunk/lib/J3: Classpath/ClasspathVMThread.inc VMCore/Jnjvm.cpp VMCore/Jnjvm.h Message-ID: <20100613080236.884542A6C12D@llvm.org> Author: geoffray Date: Sun Jun 13 03:02:36 2010 New Revision: 105911 URL: http://llvm.org/viewvc/llvm-project?rev=105911&view=rev Log: Add an interface for entering and leaving the thread system. Modified: vmkit/trunk/lib/J3/Classpath/ClasspathVMThread.inc vmkit/trunk/lib/J3/VMCore/Jnjvm.cpp vmkit/trunk/lib/J3/VMCore/Jnjvm.h Modified: vmkit/trunk/lib/J3/Classpath/ClasspathVMThread.inc URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/Classpath/ClasspathVMThread.inc?rev=105911&r1=105910&r2=105911&view=diff ============================================================================== --- vmkit/trunk/lib/J3/Classpath/ClasspathVMThread.inc (original) +++ vmkit/trunk/lib/J3/Classpath/ClasspathVMThread.inc Sun Jun 13 03:02:36 2010 @@ -58,9 +58,7 @@ bool isDaemon = vm->upcalls->daemon->getInstanceInt8Field(javaThread); if (!isDaemon) { - ts.nonDaemonLock.lock(); - ts.nonDaemonThreads++; - ts.nonDaemonLock.unlock(); + vm->threadSystem.enter(); } // Run the VMThread::run function @@ -68,11 +66,7 @@ // Remove the thread from the list. if (!isDaemon) { - ts.nonDaemonLock.lock(); - ts.nonDaemonThreads--; - if (ts.nonDaemonThreads == 0) - ts.nonDaemonVar.signal(); - ts.nonDaemonLock.unlock(); + vm->threadSystem.leave(); } } Modified: vmkit/trunk/lib/J3/VMCore/Jnjvm.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/Jnjvm.cpp?rev=105911&r1=105910&r2=105911&view=diff ============================================================================== --- vmkit/trunk/lib/J3/VMCore/Jnjvm.cpp (original) +++ vmkit/trunk/lib/J3/VMCore/Jnjvm.cpp Sun Jun 13 03:02:36 2010 @@ -1255,9 +1255,10 @@ Jnjvm* vm = thread->getJVM(); vm->argumentsInfo.readArgs(vm); if (vm->argumentsInfo.className == NULL) { - vm->threadSystem.nonDaemonThreads = 0; + vm->threadSystem.leave(); return; } + int pos = vm->argumentsInfo.appArgumentsPos; vm->argumentsInfo.argv = vm->argumentsInfo.argv + pos - 1; vm->argumentsInfo.argc = vm->argumentsInfo.argc - pos + 1; @@ -1298,11 +1299,20 @@ vm->executeClass(info.className, args); } - vm->threadSystem.nonDaemonLock.lock(); - --(vm->threadSystem.nonDaemonThreads); - if (vm->threadSystem.nonDaemonThreads == 0) - vm->threadSystem.nonDaemonVar.signal(); - vm->threadSystem.nonDaemonLock.unlock(); + vm->threadSystem.leave(); +} + +void ThreadSystem::leave() { + nonDaemonLock.lock(); + --nonDaemonThreads; + if (nonDaemonThreads == 0) nonDaemonVar.signal(); + nonDaemonLock.unlock(); +} + +void ThreadSystem::enter() { + nonDaemonLock.lock(); + ++nonDaemonThreads; + nonDaemonLock.unlock(); } #ifdef SERVICE Modified: vmkit/trunk/lib/J3/VMCore/Jnjvm.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/Jnjvm.h?rev=105911&r1=105910&r2=105911&view=diff ============================================================================== --- vmkit/trunk/lib/J3/VMCore/Jnjvm.h (original) +++ vmkit/trunk/lib/J3/VMCore/Jnjvm.h Sun Jun 13 03:02:36 2010 @@ -79,6 +79,14 @@ /// ~ThreadSystem() {} + /// leave - A thread calls this function when it leaves the thread system. + /// + void leave(); + + /// enter - A thread calls this function when it enters the thread system. + /// + void enter(); + }; class ClArgumentsInfo { From nicolas.geoffray at lip6.fr Sun Jun 13 09:48:24 2010 From: nicolas.geoffray at lip6.fr (Nicolas Geoffray) Date: Sun, 13 Jun 2010 16:48:24 -0000 Subject: [vmkit-commits] [vmkit] r105916 - in /vmkit/trunk/lib/J3/VMCore: JavaConstantPool.cpp JavaLocks.cpp JavaLocks.h VirtualTables.cpp Message-ID: <20100613164824.E65C32A6C12C@llvm.org> Author: geoffray Date: Sun Jun 13 11:48:24 2010 New Revision: 105916 URL: http://llvm.org/viewvc/llvm-project?rev=105916&view=rev Log: Also trace associated objects of locks. Modified: vmkit/trunk/lib/J3/VMCore/JavaConstantPool.cpp vmkit/trunk/lib/J3/VMCore/JavaLocks.cpp vmkit/trunk/lib/J3/VMCore/JavaLocks.h vmkit/trunk/lib/J3/VMCore/VirtualTables.cpp Modified: vmkit/trunk/lib/J3/VMCore/JavaConstantPool.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/JavaConstantPool.cpp?rev=105916&r1=105915&r2=105916&view=diff ============================================================================== --- vmkit/trunk/lib/J3/VMCore/JavaConstantPool.cpp (original) +++ vmkit/trunk/lib/J3/VMCore/JavaConstantPool.cpp Sun Jun 13 11:48:24 2010 @@ -518,8 +518,10 @@ } JavaString* JavaConstantPool::resolveString(const UTF8* utf8, uint16 index) { + JavaString* str = NULL; + llvm_gcroot(str, 0); Jnjvm* vm = JavaThread::get()->getJVM(); - JavaString* str = vm->internalUTF8ToStr(utf8); + str = vm->internalUTF8ToStr(utf8); return str; } Modified: vmkit/trunk/lib/J3/VMCore/JavaLocks.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/JavaLocks.cpp?rev=105916&r1=105915&r2=105916&view=diff ============================================================================== --- vmkit/trunk/lib/J3/VMCore/JavaLocks.cpp (original) +++ vmkit/trunk/lib/J3/VMCore/JavaLocks.cpp Sun Jun 13 11:48:24 2010 @@ -14,6 +14,7 @@ using namespace j3; JavaLock* JavaLock::allocate(JavaObject* obj) { + llvm_gcroot(obj, 0); Jnjvm* vm = JavaThread::get()->getJVM(); JavaLock* res = vm->lockSystem.allocate(obj); return res; @@ -25,7 +26,8 @@ } JavaLock* LockSystem::allocate(JavaObject* obj) { - + + llvm_gcroot(obj, 0); JavaLock* res = 0; threadLock.lock(); @@ -88,8 +90,8 @@ } void JavaLock::release(JavaObject* obj) { - assert(associatedObject == obj && "Mismatch object in lock"); llvm_gcroot(obj, 0); + assert(associatedObject == obj && "Mismatch object in lock"); if (!waitingThreads && !lockingThreads && internalLock.recursionCount() == 1) { assert(associatedObject && "No associated object when releasing"); Modified: vmkit/trunk/lib/J3/VMCore/JavaLocks.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/JavaLocks.h?rev=105916&r1=105915&r2=105916&view=diff ============================================================================== --- vmkit/trunk/lib/J3/VMCore/JavaLocks.h (original) +++ vmkit/trunk/lib/J3/VMCore/JavaLocks.h Sun Jun 13 11:48:24 2010 @@ -44,6 +44,10 @@ return associatedObject; } + JavaObject** getAssociatedObjectPtr() { + return &associatedObject; + } + /// acquire - Acquires the internalLock. /// bool acquire(JavaObject* obj) { @@ -159,7 +163,7 @@ /// deallocate - Put a lock in the free list lock. /// void deallocate(JavaLock* lock) { - lock->associatedObject = 0; + lock->associatedObject = NULL; threadLock.lock(); lock->nextFreeLock = freeLock; freeLock = lock; Modified: vmkit/trunk/lib/J3/VMCore/VirtualTables.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/VirtualTables.cpp?rev=105916&r1=105915&r2=105916&view=diff ============================================================================== --- vmkit/trunk/lib/J3/VMCore/VirtualTables.cpp (original) +++ vmkit/trunk/lib/J3/VMCore/VirtualTables.cpp Sun Jun 13 11:48:24 2010 @@ -282,7 +282,16 @@ JavaString** str = &(i->second); mvm::Collector::markAndTraceRoot(str, closure); } - + + for (uint32 i = 0; i < LockSystem::GlobalSize; i++) { + JavaLock** array = lockSystem.LockTable[i]; + if (array == NULL) break; + for (uint32 j = 0; j < LockSystem::IndexSize; j++) { + if (array[j] == NULL) break; + JavaLock* lock = array[j]; + mvm::Collector::markAndTraceRoot(lock->getAssociatedObjectPtr(), closure); + } + } #if defined(ISOLATE_SHARING) mvm::Collector::markAndTraceRoot(&JnjvmSharedLoader::sharedLoader, closure); #endif From nicolas.geoffray at lip6.fr Sun Jun 13 10:07:35 2010 From: nicolas.geoffray at lip6.fr (Nicolas Geoffray) Date: Sun, 13 Jun 2010 17:07:35 -0000 Subject: [vmkit-commits] [vmkit] r105917 - in /vmkit/trunk/lib/J3: Classpath/ClasspathConstructor.inc Classpath/ClasspathMethod.inc VMCore/JavaMetaJIT.cpp VMCore/JavaObject.cpp Message-ID: <20100613170736.0924B2A6C12C@llvm.org> Author: geoffray Date: Sun Jun 13 12:07:35 2010 New Revision: 105917 URL: http://llvm.org/viewvc/llvm-project?rev=105917&view=rev Log: Don't put an object direclty into a jvalue. Modified: vmkit/trunk/lib/J3/Classpath/ClasspathConstructor.inc vmkit/trunk/lib/J3/Classpath/ClasspathMethod.inc vmkit/trunk/lib/J3/VMCore/JavaMetaJIT.cpp vmkit/trunk/lib/J3/VMCore/JavaObject.cpp Modified: vmkit/trunk/lib/J3/Classpath/ClasspathConstructor.inc URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/Classpath/ClasspathConstructor.inc?rev=105917&r1=105916&r2=105917&view=diff ============================================================================== --- vmkit/trunk/lib/J3/Classpath/ClasspathConstructor.inc (original) +++ vmkit/trunk/lib/J3/Classpath/ClasspathConstructor.inc Sun Jun 13 12:07:35 2010 @@ -111,7 +111,7 @@ // Store the arguments, unboxing primitives if necessary. for (sint32 i = 0; i < size; ++i) { JavaObject::decapsulePrimitive(ptr[i], vm, &buf[i], arguments[i]); - if (buf[i].l == reinterpret_cast(ptr[i])) { + if (!arguments[i]->isPrimitive()) { buf[i].l = reinterpret_cast(&ptr[i]); } } Modified: vmkit/trunk/lib/J3/Classpath/ClasspathMethod.inc URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/Classpath/ClasspathMethod.inc?rev=105917&r1=105916&r2=105917&view=diff ============================================================================== --- vmkit/trunk/lib/J3/Classpath/ClasspathMethod.inc (original) +++ vmkit/trunk/lib/J3/Classpath/ClasspathMethod.inc Sun Jun 13 12:07:35 2010 @@ -144,7 +144,7 @@ Typedef* const* arguments = sign->getArgumentsType(); for (sint32 i = 0; i < size; ++i) { JavaObject::decapsulePrimitive(ptr[i], vm, &buf[i], arguments[i]); - if (buf[i].l == reinterpret_cast(ptr[i])) { + if (!arguments[i]->isPrimitive()) { buf[i].l = reinterpret_cast(&ptr[i]); } } Modified: vmkit/trunk/lib/J3/VMCore/JavaMetaJIT.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/JavaMetaJIT.cpp?rev=105917&r1=105916&r2=105917&view=diff ============================================================================== --- vmkit/trunk/lib/J3/VMCore/JavaMetaJIT.cpp (original) +++ vmkit/trunk/lib/J3/VMCore/JavaMetaJIT.cpp Sun Jun 13 12:07:35 2010 @@ -227,6 +227,7 @@ #define INVOKE_VA(TYPE, TYPE_NAME, FUNC_TYPE_VIRTUAL_AP, FUNC_TYPE_STATIC_AP, FUNC_TYPE_VIRTUAL_BUF, FUNC_TYPE_STATIC_BUF) \ TYPE JavaMethod::invoke##TYPE_NAME##Virtual(Jnjvm* vm, UserClass* cl, JavaObject* obj, ...) { \ + llvm_gcroot(obj, 0); \ va_list ap;\ va_start(ap, obj);\ llvm_gcroot(obj, 0); \ @@ -236,6 +237,7 @@ }\ \ TYPE JavaMethod::invoke##TYPE_NAME##Special(Jnjvm* vm, UserClass* cl, JavaObject* obj, ...) {\ + llvm_gcroot(obj, 0); \ va_list ap;\ va_start(ap, obj);\ TYPE res = invoke##TYPE_NAME##SpecialAP(vm, cl, obj, ap);\ Modified: vmkit/trunk/lib/J3/VMCore/JavaObject.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/JavaObject.cpp?rev=105917&r1=105916&r2=105917&view=diff ============================================================================== --- vmkit/trunk/lib/J3/VMCore/JavaObject.cpp (original) +++ vmkit/trunk/lib/J3/VMCore/JavaObject.cpp Sun Jun 13 12:07:35 2010 @@ -213,9 +213,8 @@ if (obj && !(getClass(obj)->isOfTypeName(signature->getName()))) { vm->illegalArgumentException("wrong type argument"); } - (*buf).l = reinterpret_cast(obj); return; - } else if (obj == 0) { + } else if (obj == NULL) { vm->illegalArgumentException(""); } else { UserCommonClass* cl = getClass(obj); From nicolas.geoffray at lip6.fr Mon Jun 14 11:12:40 2010 From: nicolas.geoffray at lip6.fr (Nicolas Geoffray) Date: Mon, 14 Jun 2010 18:12:40 -0000 Subject: [vmkit-commits] [vmkit] r105940 - in /vmkit/trunk: lib/J3/Classpath/ lib/J3/Compiler/ lib/J3/VMCore/ mmtk/mmtk-j3/ Message-ID: <20100614181240.B0C252A6C12C@llvm.org> Author: geoffray Date: Mon Jun 14 13:12:40 2010 New Revision: 105940 URL: http://llvm.org/viewvc/llvm-project?rev=105940&view=rev Log: Make methods on JavaString static instead of virtual. Modified: vmkit/trunk/lib/J3/Classpath/ClasspathVMClassLoader.inc vmkit/trunk/lib/J3/Classpath/ClasspathVMRuntime.inc vmkit/trunk/lib/J3/Classpath/ClasspathVMThread.inc vmkit/trunk/lib/J3/Classpath/JavaUpcalls.cpp vmkit/trunk/lib/J3/Compiler/JavaAOTCompiler.cpp vmkit/trunk/lib/J3/VMCore/JavaObject.h vmkit/trunk/lib/J3/VMCore/JavaRuntimeJIT.cpp vmkit/trunk/lib/J3/VMCore/JavaString.cpp vmkit/trunk/lib/J3/VMCore/JavaString.h vmkit/trunk/lib/J3/VMCore/Jni.cpp vmkit/trunk/lib/J3/VMCore/Jnjvm.cpp vmkit/trunk/lib/J3/VMCore/JnjvmClassLoader.cpp vmkit/trunk/lib/J3/VMCore/LockedMap.cpp vmkit/trunk/lib/J3/VMCore/VirtualTables.cpp vmkit/trunk/mmtk/mmtk-j3/RuntimeHelpers.cpp vmkit/trunk/mmtk/mmtk-j3/Strings.cpp Modified: vmkit/trunk/lib/J3/Classpath/ClasspathVMClassLoader.inc URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/Classpath/ClasspathVMClassLoader.inc?rev=105940&r1=105939&r2=105940&view=diff ============================================================================== --- vmkit/trunk/lib/J3/Classpath/ClasspathVMClassLoader.inc (original) +++ vmkit/trunk/lib/J3/Classpath/ClasspathVMClassLoader.inc Mon Jun 14 13:12:40 2010 @@ -139,7 +139,7 @@ JnjvmClassLoader* JCL = JnjvmClassLoader::getJnjvmLoaderFromJavaObject(loader, vm); - const UTF8* name = str->javaToInternal(JCL->hashUTF8); + const UTF8* name = JavaString::javaToInternal(str, JCL->hashUTF8); UserCommonClass* cl = JCL->lookupClass(name); if (!cl) { Modified: vmkit/trunk/lib/J3/Classpath/ClasspathVMRuntime.inc URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/Classpath/ClasspathVMRuntime.inc?rev=105940&r1=105939&r2=105940&view=diff ============================================================================== --- vmkit/trunk/lib/J3/Classpath/ClasspathVMRuntime.inc (original) +++ vmkit/trunk/lib/J3/Classpath/ClasspathVMRuntime.inc Mon Jun 14 13:12:40 2010 @@ -49,7 +49,7 @@ Jnjvm* vm = JavaThread::get()->getJVM(); - utf8Lib = strLib->value; + utf8Lib = JavaString::getValue(strLib); uint32 stLib = strLib->offset; sint32 lgLib = strLib->count; sint32 lgPre = vm->bootstrapLoader->prelib->size; @@ -118,7 +118,7 @@ JnjvmClassLoader* loader = JnjvmClassLoader::getJnjvmLoaderFromJavaObject(javaLoader, vm); - char* buf = str->strToAsciiz(); + char* buf = JavaString::strToAsciiz(str); res = loader->loadLib(buf); Modified: vmkit/trunk/lib/J3/Classpath/ClasspathVMThread.inc URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/Classpath/ClasspathVMThread.inc?rev=105940&r1=105939&r2=105940&view=diff ============================================================================== --- vmkit/trunk/lib/J3/Classpath/ClasspathVMThread.inc (original) +++ vmkit/trunk/lib/J3/Classpath/ClasspathVMThread.inc Mon Jun 14 13:12:40 2010 @@ -47,9 +47,7 @@ assert(vmThread && "Didn't fix the vmThread of a j3 thread"); vmThread->setVmdata(thread); - UserClass* vmthClass = (UserClass*)JavaObject::getClass(vmThread); - ThreadSystem& ts = vm->threadSystem; - + UserClass* vmthClass = (UserClass*)JavaObject::getClass(vmThread); javaThread = thread->javaThread; assert(javaThread && "Didn't fix the javaThread of a j3 thread"); Modified: vmkit/trunk/lib/J3/Classpath/JavaUpcalls.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/Classpath/JavaUpcalls.cpp?rev=105940&r1=105939&r2=105940&view=diff ============================================================================== --- vmkit/trunk/lib/J3/Classpath/JavaUpcalls.cpp (original) +++ vmkit/trunk/lib/J3/Classpath/JavaUpcalls.cpp Mon Jun 14 13:12:40 2010 @@ -383,7 +383,7 @@ BEGIN_NATIVE_EXCEPTION(0) Jnjvm* vm = JavaThread::get()->getJVM(); - array = obj->strToArray(vm); + array = JavaString::strToArray(obj, vm); res = vm->constructString(array); END_NATIVE_EXCEPTION @@ -534,7 +534,7 @@ BEGIN_NATIVE_EXCEPTION(0) - char* buf = str->strToAsciiz(); + char* buf = JavaString::strToAsciiz(str); char* res = getenv(buf); delete[] buf; if (res) { Modified: vmkit/trunk/lib/J3/Compiler/JavaAOTCompiler.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/Compiler/JavaAOTCompiler.cpp?rev=105940&r1=105939&r2=105940&view=diff ============================================================================== --- vmkit/trunk/lib/J3/Compiler/JavaAOTCompiler.cpp (original) +++ vmkit/trunk/lib/J3/Compiler/JavaAOTCompiler.cpp Mon Jun 14 13:12:40 2010 @@ -730,8 +730,9 @@ Elmts.push_back(CreateConstantForBaseObject(cl)); - Constant* Array = CreateConstantFromIntArray(str->value, - Type::getInt16Ty(getLLVMContext())); + Constant* Array = + CreateConstantFromIntArray(JavaString::getValue(str), + Type::getInt16Ty(getLLVMContext())); Module& Mod = *getLLVMModule(); Modified: vmkit/trunk/lib/J3/VMCore/JavaObject.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/JavaObject.h?rev=105940&r1=105939&r2=105940&view=diff ============================================================================== --- vmkit/trunk/lib/J3/VMCore/JavaObject.h (original) +++ vmkit/trunk/lib/J3/VMCore/JavaObject.h Mon Jun 14 13:12:40 2010 @@ -241,6 +241,7 @@ /// getClass - Returns the class of this object. /// static UserCommonClass* getClass(const JavaObject* self) { + llvm_gcroot(self, 0); return ((JavaVirtualTable*)self->getVirtualTable())->cl; } @@ -301,7 +302,7 @@ #define verifyNull(obj) {} #else #define verifyNull(obj) \ - if (obj == 0) JavaThread::get()->getJVM()->nullPointerException(); + if (obj == NULL) JavaThread::get()->getJVM()->nullPointerException(); #endif /// lockObj - Get the LockObj if the lock is a fat lock. Modified: vmkit/trunk/lib/J3/VMCore/JavaRuntimeJIT.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/JavaRuntimeJIT.cpp?rev=105940&r1=105939&r2=105940&view=diff ============================================================================== --- vmkit/trunk/lib/J3/VMCore/JavaRuntimeJIT.cpp (original) +++ vmkit/trunk/lib/J3/VMCore/JavaRuntimeJIT.cpp Mon Jun 14 13:12:40 2010 @@ -341,8 +341,6 @@ // Update the number of references. th->currentAddedReferences = *oldLRN; - - } extern "C" void* j3StartJNI(uint32* localReferencesNumber, Modified: vmkit/trunk/lib/J3/VMCore/JavaString.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/JavaString.cpp?rev=105940&r1=105939&r2=105940&view=diff ============================================================================== --- vmkit/trunk/lib/J3/VMCore/JavaString.cpp (original) +++ vmkit/trunk/lib/J3/VMCore/JavaString.cpp Mon Jun 14 13:12:40 2010 @@ -22,11 +22,10 @@ JavaString* JavaString::stringDup(const ArrayUInt16*& _array, Jnjvm* vm) { JavaString* res = 0; - const ArrayUInt16* array = 0; + const ArrayUInt16* array = _array; llvm_gcroot(array, 0); llvm_gcroot(res, 0); - array = _array; UserClass* cl = vm->upcalls->newString; res = (JavaString*)cl->doNew(vm); @@ -37,38 +36,38 @@ // No need to call the Java function: both the Java function and // this function do the same thing. - res->value = array; + setValue(res, array); res->count = ArrayUInt16::getSize(array); res->offset = 0; res->cachedHashCode = 0; return res; } -char* JavaString::strToAsciiz() { - char* buf = new char[count + 1]; - for (sint32 i = 0; i < count; ++i) { - buf[i] = ArrayUInt16::getElement(value, i + offset); +char* JavaString::strToAsciiz(JavaString* self) { + llvm_gcroot(self, 0); + 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[count] = 0; + buf[self->count] = 0; return buf; } -const ArrayUInt16* JavaString::strToArray(Jnjvm* vm) { - JavaString* self = this; +const ArrayUInt16* JavaString::strToArray(JavaString* self, Jnjvm* vm) { ArrayUInt16* array = 0; llvm_gcroot(self, 0); llvm_gcroot(array, 0); - assert(self->value && "String without an array?"); - if (self->offset || (self->count != ArrayUInt16::getSize(self->value))) { + 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 < count; i++) { + for (sint32 i = 0; i < self->count; i++) { ArrayUInt16::setElement( - array, ArrayUInt16::getElement(value, i + self->offset), i); + array, ArrayUInt16::getElement(getValue(self), i + self->offset), i); } return array; } else { - return self->value; + return getValue(self); } } @@ -77,7 +76,7 @@ Jnjvm* vm = JavaThread::get()->getJVM(); assert(vm && "No vm when destroying a string"); - if (str->value) vm->hashStr.removeUnlocked(str->value, str); + if (getValue(str) != NULL) vm->hashStr.removeUnlocked(getValue(str), str); } JavaString* JavaString::internalToJava(const UTF8* name, Jnjvm* vm) { @@ -99,14 +98,13 @@ return vm->constructString(array); } -const UTF8* JavaString::javaToInternal(UTF8Map* map) const { - const JavaString* self = this; +const UTF8* JavaString::javaToInternal(const JavaString* self, UTF8Map* map) { llvm_gcroot(self, 0); uint16* java = new uint16[self->count]; - for (sint32 i = 0; i < count; ++i) { - uint16 cur = ArrayUInt16::getElement(self->value, offset + i); + for (sint32 i = 0; i < self->count; ++i) { + uint16 cur = ArrayUInt16::getElement(getValue(self), self->offset + i); if (cur == '.') java[i] = '/'; else java[i] = cur; } Modified: vmkit/trunk/lib/J3/VMCore/JavaString.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/JavaString.h?rev=105940&r1=105939&r2=105940&view=diff ============================================================================== --- vmkit/trunk/lib/J3/VMCore/JavaString.h (original) +++ vmkit/trunk/lib/J3/VMCore/JavaString.h Mon Jun 14 13:12:40 2010 @@ -21,13 +21,23 @@ class Jnjvm; class JavaString : public JavaObject { -public: - +private: // CLASSPATH FIELDS!! const ArrayUInt16* value; +public: sint32 count; sint32 cachedHashCode; sint32 offset; + + static void setValue(JavaString* self, const ArrayUInt16* array) { + llvm_gcroot(self, 0); + llvm_gcroot(array, 0); + self->value = array; + } + static const ArrayUInt16* getValue(const JavaString* self) { + llvm_gcroot(self, 0); + return self->value; + } static JavaString* stringDup(const ArrayUInt16*& array, Jnjvm* vm); @@ -39,11 +49,11 @@ static JavaString* internalToJava(const UTF8* utf8, Jnjvm* vm); static void stringDestructor(JavaString*); - char* strToAsciiz(); - const ArrayUInt16* strToArray(Jnjvm* vm); + static char* strToAsciiz(JavaString* self); + static const ArrayUInt16* strToArray(JavaString* self, Jnjvm* vm); - /// javaToInternal - Replaces all '/' into '.'. - const UTF8* javaToInternal(UTF8Map* map) const; + /// javaToInternal - Replaces all '/' into '.'. + static const UTF8* javaToInternal(const JavaString* self, UTF8Map* map); static JavaVirtualTable* internStringVT; }; Modified: vmkit/trunk/lib/J3/VMCore/Jni.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/Jni.cpp?rev=105940&r1=105939&r2=105940&view=diff ============================================================================== --- vmkit/trunk/lib/J3/VMCore/Jni.cpp (original) +++ vmkit/trunk/lib/J3/VMCore/Jni.cpp Mon Jun 14 13:12:40 2010 @@ -2515,7 +2515,7 @@ llvm_gcroot(string, 0); if (isCopy != 0) (*isCopy) = true; - const char* res = string->strToAsciiz(); + const char* res = JavaString::strToAsciiz(string); RETURN_FROM_JNI(res); END_JNI_EXCEPTION Modified: vmkit/trunk/lib/J3/VMCore/Jnjvm.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/Jnjvm.cpp?rev=105940&r1=105939&r2=105940&view=diff ============================================================================== --- vmkit/trunk/lib/J3/VMCore/Jnjvm.cpp (original) +++ vmkit/trunk/lib/J3/VMCore/Jnjvm.cpp Mon Jun 14 13:12:40 2010 @@ -605,10 +605,10 @@ ArrayUInt16::setElement(msg, ' ', i); i++; for (sint32 j = name->offset; j < name->offset + name->count; ++j) { - if (ArrayUInt16::getElement(name->value, j) == '/') { + if (ArrayUInt16::getElement(JavaString::getValue(name), j) == '/') { ArrayUInt16::setElement(msg, '.', i); i++; } else { - ArrayUInt16::setElement(msg, ArrayUInt16::getElement(name->value, j), i); + ArrayUInt16::setElement(msg, ArrayUInt16::getElement(JavaString::getValue(name), j), i); } } Modified: vmkit/trunk/lib/J3/VMCore/JnjvmClassLoader.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/JnjvmClassLoader.cpp?rev=105940&r1=105939&r2=105940&view=diff ============================================================================== --- vmkit/trunk/lib/J3/VMCore/JnjvmClassLoader.cpp (original) +++ vmkit/trunk/lib/J3/VMCore/JnjvmClassLoader.cpp Mon Jun 14 13:12:40 2010 @@ -572,16 +572,16 @@ UTF8* name = (UTF8*)malloc(sizeof(UTF8) + str->count * sizeof(uint16)); name->size = str->count; - if (ArrayUInt16::getElement(str->value, str->offset) != I_TAB) { + if (ArrayUInt16::getElement(JavaString::getValue(str), str->offset) != I_TAB) { for (sint32 i = 0; i < str->count; ++i) { - uint16 cur = ArrayUInt16::getElement(str->value, str->offset + i); + uint16 cur = ArrayUInt16::getElement(JavaString::getValue(str), str->offset + i); if (cur == '.') name->elements[i] = '/'; else if (cur == '/') return 0; else name->elements[i] = cur; } } else { for (sint32 i = 0; i < str->count; ++i) { - uint16 cur = ArrayUInt16::getElement(str->value, str->offset + i); + uint16 cur = ArrayUInt16::getElement(JavaString::getValue(str), str->offset + i); if (cur == '.') name->elements[i] = '/'; else if (cur == '/') return 0; else name->elements[i] = cur; @@ -600,7 +600,7 @@ UTF8* name = (UTF8*)malloc(sizeof(UTF8) + str->count * sizeof(uint16)); name->size = str->count; for (sint32 i = 0; i < str->count; ++i) { - uint16 cur = ArrayUInt16::getElement(str->value, str->offset + i); + uint16 cur = ArrayUInt16::getElement(JavaString::getValue(str), str->offset + i); if (cur == '.') name->elements[i] = '/'; else name->elements[i] = cur; } Modified: vmkit/trunk/lib/J3/VMCore/LockedMap.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/LockedMap.cpp?rev=105940&r1=105939&r2=105940&view=diff ============================================================================== --- vmkit/trunk/lib/J3/VMCore/LockedMap.cpp (original) +++ vmkit/trunk/lib/J3/VMCore/LockedMap.cpp Mon Jun 14 13:12:40 2010 @@ -22,5 +22,5 @@ void StringMap::insert(JavaString* str) { llvm_gcroot(str, 0); - map.insert(std::make_pair(str->value, str)); + map.insert(std::make_pair(JavaString::getValue(str), str)); } Modified: vmkit/trunk/lib/J3/VMCore/VirtualTables.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/VirtualTables.cpp?rev=105940&r1=105939&r2=105940&view=diff ============================================================================== --- vmkit/trunk/lib/J3/VMCore/VirtualTables.cpp (original) +++ vmkit/trunk/lib/J3/VMCore/VirtualTables.cpp Mon Jun 14 13:12:40 2010 @@ -281,6 +281,8 @@ i!= e; ++i) { JavaString** str = &(i->second); mvm::Collector::markAndTraceRoot(str, closure); + ArrayUInt16** key = const_cast(&(i->first)); + mvm::Collector::markAndTraceRoot(key, closure); } for (uint32 i = 0; i < LockSystem::GlobalSize; i++) { Modified: vmkit/trunk/mmtk/mmtk-j3/RuntimeHelpers.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/mmtk-j3/RuntimeHelpers.cpp?rev=105940&r1=105939&r2=105940&view=diff ============================================================================== --- vmkit/trunk/mmtk/mmtk-j3/RuntimeHelpers.cpp (original) +++ vmkit/trunk/mmtk/mmtk-j3/RuntimeHelpers.cpp Mon Jun 14 13:12:40 2010 @@ -14,9 +14,11 @@ using namespace j3; extern "C" uint16_t MMTkCharAt(JavaString* str, uint32_t index) { - return ArrayUInt16::getElement(str->value, index); + llvm_gcroot(str, 0); + return ArrayUInt16::getElement(JavaString::getValue(str), index); } extern "C" JavaObject* MMTkGetClass(JavaObject* obj) { + llvm_gcroot(obj, 0); return JavaObject::getClass(obj)->delegatee[0]; } Modified: vmkit/trunk/mmtk/mmtk-j3/Strings.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/mmtk-j3/Strings.cpp?rev=105940&r1=105939&r2=105940&view=diff ============================================================================== --- vmkit/trunk/mmtk/mmtk-j3/Strings.cpp (original) +++ vmkit/trunk/mmtk/mmtk-j3/Strings.cpp Mon Jun 14 13:12:40 2010 @@ -17,6 +17,8 @@ extern "C" void Java_org_j3_mmtk_Strings_write___3CI(JavaObject* str, ArrayUInt16* msg, sint32 len) { + llvm_gcroot(str, 0); + llvm_gcroot(msg, 0); for (sint32 i = 0; i < len; ++i) { fprintf(stderr, "%c", ArrayUInt16::getElement(msg, i)); } @@ -25,6 +27,8 @@ extern "C" void Java_org_j3_mmtk_Strings_writeThreadId___3CI(JavaObject*str, ArrayUInt16* msg, sint32 len) { + llvm_gcroot(str, 0); + llvm_gcroot(msg, 0); fprintf(stderr, "[%p] ", (void*)JavaThread::get()); @@ -38,13 +42,16 @@ Java_org_j3_mmtk_Strings_copyStringToChars__Ljava_lang_String_2_3CII( JavaObject* obj, JavaString* str, ArrayUInt16* dst, uint32 dstBegin, uint32 dstEnd) { + llvm_gcroot(str, 0); + llvm_gcroot(obj, 0); + llvm_gcroot(dst, 0); sint32 len = str->count; sint32 n = (dstBegin + len <= dstEnd) ? len : (dstEnd - dstBegin); for (sint32 i = 0; i < n; i++) { ArrayUInt16::setElement(dst, - ArrayUInt16::getElement(str->value, str->offset + i), dstBegin + i); + ArrayUInt16::getElement(JavaString::getValue(str), str->offset + i), dstBegin + i); } return n; From nicolas.geoffray at lip6.fr Fri Jun 25 11:00:09 2010 From: nicolas.geoffray at lip6.fr (Nicolas Geoffray) Date: Fri, 25 Jun 2010 18:00:09 -0000 Subject: [vmkit-commits] [vmkit] r106866 - in /vmkit/trunk/lib/J3/VMCore: JavaThread.h Jni.cpp Jnjvm.cpp JnjvmClassLoader.cpp JnjvmClassLoader.h LockedMap.h Message-ID: <20100625180009.5DD7A2A6C12C@llvm.org> Author: geoffray Date: Fri Jun 25 13:00:09 2010 New Revision: 106866 URL: http://llvm.org/viewvc/llvm-project?rev=106866&view=rev Log: More cleanups for GC. Modified: vmkit/trunk/lib/J3/VMCore/JavaThread.h vmkit/trunk/lib/J3/VMCore/Jni.cpp vmkit/trunk/lib/J3/VMCore/Jnjvm.cpp vmkit/trunk/lib/J3/VMCore/JnjvmClassLoader.cpp vmkit/trunk/lib/J3/VMCore/JnjvmClassLoader.h vmkit/trunk/lib/J3/VMCore/LockedMap.h Modified: vmkit/trunk/lib/J3/VMCore/JavaThread.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/JavaThread.h?rev=106866&r1=106865&r2=106866&view=diff ============================================================================== --- vmkit/trunk/lib/J3/VMCore/JavaThread.h (original) +++ vmkit/trunk/lib/J3/VMCore/JavaThread.h Fri Jun 25 13:00:09 2010 @@ -122,6 +122,7 @@ JavaObject** pushJNIRef(JavaObject* obj) { + llvm_gcroot(obj, 0); if (!obj) return 0; ++(*currentAddedReferences); @@ -251,7 +252,7 @@ /// currently pending. /// virtual void internalClearException() { - pendingException = 0; + pendingException = NULL; } public: Modified: vmkit/trunk/lib/J3/VMCore/Jni.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/Jni.cpp?rev=106866&r1=106865&r2=106866&view=diff ============================================================================== --- vmkit/trunk/lib/J3/VMCore/Jni.cpp (original) +++ vmkit/trunk/lib/J3/VMCore/Jni.cpp Fri Jun 25 13:00:09 2010 @@ -28,6 +28,7 @@ static UserClass* getClassFromStaticMethod(Jnjvm* vm, JavaMethod* meth, JavaObject* clazz) { + llvm_gcroot(clazz, 0); #ifdef ISOLATE_SHARING return (UserClass*)UserCommonClass::resolvedImplClass(vm, clazz, false); #else Modified: vmkit/trunk/lib/J3/VMCore/Jnjvm.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/Jnjvm.cpp?rev=106866&r1=106865&r2=106866&view=diff ============================================================================== --- vmkit/trunk/lib/J3/VMCore/Jnjvm.cpp (original) +++ vmkit/trunk/lib/J3/VMCore/Jnjvm.cpp Fri Jun 25 13:00:09 2010 @@ -51,6 +51,10 @@ /// initialiseClass - Java class initialisation. Java specification §2.17.5. void UserClass::initialiseClass(Jnjvm* vm) { + JavaObject* exc = NULL; + JavaObject* obj = NULL; + llvm_gcroot(exc, 0); + llvm_gcroot(obj, 0); // Primitives are initialized at boot time, arrays are initialized directly. @@ -157,10 +161,6 @@ } } - JavaObject* exc = 0; - JavaObject* obj = 0; - llvm_gcroot(exc, 0); - llvm_gcroot(obj, 0); #ifdef SERVICE if (classLoader == classLoader->bootstrapLoader || classLoader->getIsolate() == vm) { @@ -253,18 +253,23 @@ void Jnjvm::errorWithExcp(UserClass* cl, JavaMethod* init, const JavaObject* excp) { - JavaObject* obj = cl->doNew(this); + JavaObject* obj = NULL; llvm_gcroot(obj, 0); + llvm_gcroot(excp, 0); + + obj = cl->doNew(this); init->invokeIntSpecial(this, cl, obj, &excp); JavaThread::get()->throwException(obj); } JavaObject* Jnjvm::CreateError(UserClass* cl, JavaMethod* init, const char* asciiz) { - JavaObject* obj = cl->doNew(this); - JavaString* str = 0; + JavaObject* obj = NULL; + JavaString* str = NULL; llvm_gcroot(obj, 0); llvm_gcroot(str, 0); + obj = cl->doNew(this); + if (asciiz) str = asciizToStr(asciiz); init->invokeIntSpecial(this, cl, obj, &str); @@ -273,7 +278,7 @@ JavaObject* Jnjvm::CreateError(UserClass* cl, JavaMethod* init, JavaString* str) { - JavaObject* obj = 0; + JavaObject* obj = NULL; llvm_gcroot(str, 0); llvm_gcroot(obj, 0); obj = cl->doNew(this); @@ -295,19 +300,21 @@ } void Jnjvm::indexOutOfBounds(const JavaObject* obj, sint32 entry) { - JavaString* str = (JavaString*) - upcalls->IntToString->invokeJavaObjectStatic(this, upcalls->intClass, - entry, 10); + JavaString* str = NULL; + llvm_gcroot(obj, 0); llvm_gcroot(str, 0); + str = (JavaString*)upcalls->IntToString->invokeJavaObjectStatic( + this, upcalls->intClass, entry, 10); error(upcalls->ArrayIndexOutOfBoundsException, upcalls->InitArrayIndexOutOfBoundsException, str); } void Jnjvm::negativeArraySizeException(sint32 size) { - JavaString* str = (JavaString*) + JavaString* str = NULL; + llvm_gcroot(str, 0); + str = (JavaString*) upcalls->IntToString->invokeJavaObjectStatic(this, upcalls->intClass, size, 10); - llvm_gcroot(str, 0); error(upcalls->NegativeArraySizeException, upcalls->InitNegativeArraySizeException, str); } @@ -318,10 +325,11 @@ } JavaObject* Jnjvm::CreateIndexOutOfBoundsException(sint32 entry) { - JavaString* str = (JavaString*) + JavaString* str = NULL; + llvm_gcroot(str, 0); + str = (JavaString*) upcalls->IntToString->invokeJavaObjectStatic(this, upcalls->intClass, entry, 10); - llvm_gcroot(str, 0); return CreateError(upcalls->ArrayIndexOutOfBoundsException, upcalls->InitArrayIndexOutOfBoundsException, str); } @@ -333,16 +341,18 @@ } JavaObject* Jnjvm::CreateUnsatisfiedLinkError(JavaMethod* meth) { - JavaString* str = constructString(meth->toString()); + JavaString* str = NULL; llvm_gcroot(str, 0); + str = constructString(meth->toString()); return CreateError(upcalls->UnsatisfiedLinkError, upcalls->InitUnsatisfiedLinkError, str); } JavaObject* Jnjvm::CreateArithmeticException() { - JavaString* str = asciizToStr("/ by zero"); + JavaString* str = NULL; llvm_gcroot(str, 0); + str = asciizToStr("/ by zero"); return CreateError(upcalls->ArithmeticException, upcalls->InitArithmeticException, str); } @@ -354,23 +364,26 @@ } JavaObject* Jnjvm::CreateOutOfMemoryError() { - JavaString* str = asciizToStr("Java heap space"); + JavaString* str = NULL; llvm_gcroot(str, 0); + str = asciizToStr("Java heap space"); return CreateError(upcalls->OutOfMemoryError, upcalls->InitOutOfMemoryError, str); } JavaObject* Jnjvm::CreateStackOverflowError() { // Don't call init, or else we'll get a new stack overflow error. - JavaObject* obj = upcalls->StackOverflowError->doNew(this); + JavaObject* obj = NULL; llvm_gcroot(obj, 0); + obj = upcalls->StackOverflowError->doNew(this); JavaObjectThrowable::fillInStackTrace((JavaObjectThrowable*)obj); return obj; } JavaObject* Jnjvm::CreateArrayStoreException(JavaVirtualTable* VT) { - JavaString* str = VT ? JavaString::internalToJava(VT->cl->name, this) : NULL; + JavaString* str = NULL; llvm_gcroot(str, 0); + if (VT != NULL) str = JavaString::internalToJava(VT->cl->name, this); return CreateError(upcalls->ArrayStoreException, upcalls->InitArrayStoreException, str); } @@ -384,15 +397,17 @@ } JavaObject* Jnjvm::CreateLinkageError(const char* msg) { - JavaString* str = asciizToStr(msg); + JavaString* str = NULL; llvm_gcroot(str, 0); + str = asciizToStr(msg); return CreateError(upcalls->LinkageError, upcalls->InitLinkageError, str); } void Jnjvm::illegalAccessException(const char* msg) { - JavaString* str = asciizToStr(msg); + JavaString* str = NULL; llvm_gcroot(str, 0); + str = asciizToStr(msg); error(upcalls->IllegalAccessException, upcalls->InitIllegalAccessException, str); } @@ -427,15 +442,17 @@ } void Jnjvm::outOfMemoryError() { - JavaString* str = asciizToStr("Java heap space"); + JavaString* str = NULL; llvm_gcroot(str, 0); + str = asciizToStr("Java heap space"); error(upcalls->OutOfMemoryError, upcalls->InitOutOfMemoryError, str); } void Jnjvm::illegalArgumentException(const char* msg) { - JavaString* str = asciizToStr(msg); + JavaString* str = NULL; llvm_gcroot(str, 0); + str = asciizToStr(msg); error(upcalls->IllegalArgumentException, upcalls->InitIllegalArgumentException, str); } @@ -455,26 +472,29 @@ } void Jnjvm::instantiationException(UserCommonClass* cl) { - JavaString* str = internalUTF8ToStr(cl->name); + JavaString* str = NULL; llvm_gcroot(str, 0); + str = internalUTF8ToStr(cl->name); error(upcalls->InstantiationException, upcalls->InitInstantiationException, str); } void Jnjvm::instantiationError(UserCommonClass* cl) { - JavaString* str = internalUTF8ToStr(cl->name); + JavaString* str = NULL; llvm_gcroot(str, 0); + str = internalUTF8ToStr(cl->name); error(upcalls->InstantiationError, upcalls->InitInstantiationError, str); } static JavaString* CreateNoSuchMsg(CommonClass* cl, const UTF8* name, Jnjvm* vm) { - ArrayUInt16* msg = (ArrayUInt16*) - vm->upcalls->ArrayOfChar->doNew(19 + cl->name->size + name->size, vm); - JavaString* str = 0; + ArrayUInt16* msg = NULL; + JavaString* str = NULL; llvm_gcroot(msg, 0); llvm_gcroot(str, 0); + msg = (ArrayUInt16*) + vm->upcalls->ArrayOfChar->doNew(19 + cl->name->size + name->size, vm); uint32 i = 0; @@ -521,32 +541,36 @@ } void Jnjvm::noSuchFieldError(CommonClass* cl, const UTF8* name) { - JavaString* str = CreateNoSuchMsg(cl, name, this); + JavaString* str = NULL; llvm_gcroot(str, 0); + str = CreateNoSuchMsg(cl, name, this); error(upcalls->NoSuchFieldError, upcalls->InitNoSuchFieldError, str); } void Jnjvm::noSuchMethodError(CommonClass* cl, const UTF8* name) { - JavaString* str = CreateNoSuchMsg(cl, name, this); + JavaString* str = NULL; llvm_gcroot(str, 0); + str = CreateNoSuchMsg(cl, name, this); error(upcalls->NoSuchMethodError, upcalls->InitNoSuchMethodError, str); } void Jnjvm::abstractMethodError(CommonClass* cl, const UTF8* name) { - JavaString* str = CreateNoSuchMsg(cl, name, this); + JavaString* str = NULL; llvm_gcroot(str, 0); + str = CreateNoSuchMsg(cl, name, this); error(upcalls->AbstractMethodError, upcalls->InitAbstractMethodError, str); } static JavaString* CreateUnableToLoad(const UTF8* name, Jnjvm* vm) { - ArrayUInt16* msg = (ArrayUInt16*) - vm->upcalls->ArrayOfChar->doNew(15 + name->size, vm); - JavaString* str = 0; + ArrayUInt16* msg = NULL; + JavaString* str = NULL; llvm_gcroot(msg, 0); llvm_gcroot(str, 0); + + msg = (ArrayUInt16*)vm->upcalls->ArrayOfChar->doNew(15 + name->size, vm); uint32 i = 0; @@ -580,13 +604,13 @@ } static JavaString* CreateUnableToLoad(JavaString* name, Jnjvm* vm) { - JavaString* str = 0; - ArrayUInt16* msg = (ArrayUInt16*) - vm->upcalls->ArrayOfChar->doNew(15 + name->count, vm); + JavaString* str = NULL; + ArrayUInt16* msg = NULL; llvm_gcroot(msg, 0); llvm_gcroot(str, 0); - uint32 i = 0; + msg = (ArrayUInt16*)vm->upcalls->ArrayOfChar->doNew(15 + name->count, vm); + uint32 i = 0; ArrayUInt16::setElement(msg, 'u', i); i++; ArrayUInt16::setElement(msg, 'n', i); i++; @@ -620,25 +644,29 @@ void Jnjvm::noClassDefFoundError(const UTF8* name) { - JavaString* str = CreateUnableToLoad(name, this); + JavaString* str = NULL; llvm_gcroot(str, 0); + str = CreateUnableToLoad(name, this); error(upcalls->NoClassDefFoundError, upcalls->InitNoClassDefFoundError, str); } void Jnjvm::classNotFoundException(JavaString* name) { - JavaString* str = CreateUnableToLoad(name, this); + JavaString* str = NULL; llvm_gcroot(str, 0); + str = CreateUnableToLoad(name, this); error(upcalls->ClassNotFoundException, upcalls->InitClassNotFoundException, str); } void Jnjvm::noClassDefFoundError(UserClass* cl, const UTF8* name) { - uint32 size = 35 + name->size + cl->name->size; - ArrayUInt16* msg = (ArrayUInt16*)upcalls->ArrayOfChar->doNew(size, this); - JavaString* str = 0; + ArrayUInt16* msg = NULL; + JavaString* str = NULL; llvm_gcroot(msg, 0); llvm_gcroot(str, 0); + + uint32 size = 35 + name->size + cl->name->size; + msg = (ArrayUInt16*)upcalls->ArrayOfChar->doNew(size, this); uint32 i = 0; @@ -703,15 +731,17 @@ void Jnjvm::classFormatError(const char* msg) { - JavaString* str = asciizToStr(msg); + JavaString* str = NULL; llvm_gcroot(str, 0); + str = asciizToStr(msg); error(upcalls->ClassFormatError, upcalls->InitClassFormatError, str); } JavaString* Jnjvm::internalUTF8ToStr(const UTF8* utf8) { - uint32 size = utf8->size; - ArrayUInt16* tmp = (ArrayUInt16*)upcalls->ArrayOfChar->doNew(size, this); + ArrayUInt16* tmp = NULL; llvm_gcroot(tmp, 0); + uint32 size = utf8->size; + tmp = (ArrayUInt16*)upcalls->ArrayOfChar->doNew(size, this); for (uint32 i = 0; i < size; i++) { ArrayUInt16::setElement(tmp, utf8->elements[i], i); @@ -722,15 +752,17 @@ } JavaString* Jnjvm::constructString(const ArrayUInt16* array) { + JavaString* res = NULL; llvm_gcroot(array, 0); - JavaString* res = hashStr.lookupOrCreate(array, this, JavaString::stringDup); + llvm_gcroot(res, 0); + res = hashStr.lookupOrCreate(array, this, JavaString::stringDup); return res; } JavaString* Jnjvm::asciizToStr(const char* asciiz) { - assert(asciiz && "No asciiz given"); - ArrayUInt16* var = 0; + ArrayUInt16* var = NULL; llvm_gcroot(var, 0); + assert(asciiz && "No asciiz given"); var = asciizToArray(asciiz); return constructString(var); } @@ -747,11 +779,11 @@ llvm_gcroot(delegatee, 0); llvm_gcroot(base, 0); - if (!getDelegatee()) { + if (getDelegatee() == NULL) { UserClass* cl = vm->upcalls->newClass; delegatee = (JavaObjectClass*)cl->doNew(vm); JavaObjectClass::setClass(delegatee, this); - if (!pd && isArray()) { + if (pd == NULL && isArray()) { base = (JavaObjectClass*) asArrayClass()->baseClass()->getClassDelegatee(vm, pd); JavaObjectClass::setProtectionDomain( @@ -771,11 +803,6 @@ return getDelegateePtr(); } -//===----------------------------------------------------------------------===// -// The command line parsing tool does not manipulate any GC-allocated objects. -// The ArrayUInt8 is allocated with malloc and free'd after parsing. -//===----------------------------------------------------------------------===// - #define PATH_MANIFEST "META-INF/MANIFEST.MF" #define MAIN_CLASS "Main-Class: " #define MAIN_LOWER_CLASS "Main-class: " @@ -841,17 +868,18 @@ ZipArchive archive(&bytes, vm->allocator); if (archive.getOfscd() != -1) { ZipFile* file = archive.getFile(PATH_MANIFEST); - if (file) { + if (file != NULL) { UserClassArray* array = vm->bootstrapLoader->upcalls->ArrayOfByte; res = (ArrayUInt8*)array->doNew(file->ucsize, vm); int ok = archive.readFile(res, file); if (ok) { char* mainClass = findInformation(vm, res, MAIN_CLASS, LENGTH_MAIN_CLASS); - if (!mainClass) + if (mainClass == NULL) { mainClass = findInformation(vm, res, MAIN_LOWER_CLASS, LENGTH_MAIN_CLASS); - if (mainClass) { + } + if (mainClass != NULL) { className = mainClass; } else { printf("No Main-Class: in Manifest of archive %s.\n", jarFile); @@ -1031,21 +1059,26 @@ JavaObject* loader = 0; llvm_gcroot(loader, 0); - if (appClassLoader == 0) { + if (appClassLoader == NULL) { UserClass* cl = upcalls->newClassLoader; loader = upcalls->getSystemClassLoader->invokeJavaObjectStatic(this, cl); appClassLoader = JnjvmClassLoader::getJnjvmLoaderFromJavaObject(loader, this); - if (argumentsInfo.jarFile) + if (argumentsInfo.jarFile) { appClassLoader->loadLibFromJar(this, argumentsInfo.jarFile, argumentsInfo.className); - else if (argumentsInfo.className) + } else if (argumentsInfo.className) { appClassLoader->loadLibFromFile(this, argumentsInfo.className); + } } return appClassLoader; } void Jnjvm::loadBootstrap() { + JavaObject* obj = NULL; + JavaObject* javaLoader = NULL; + llvm_gcroot(obj, 0); + llvm_gcroot(javaLoader, 0); JnjvmClassLoader* loader = bootstrapLoader; // First create system threads. @@ -1057,8 +1090,9 @@ // Initialise the bootstrap class loader if it's not // done already. - if (!bootstrapLoader->upcalls->newString) + if (bootstrapLoader->upcalls->newString == NULL) { bootstrapLoader->upcalls->initialiseClasspath(bootstrapLoader); + } #define LOAD_CLASS(cl) \ cl->resolveClass(); \ @@ -1069,7 +1103,7 @@ // placed in the hashmap. This VT will have its destructor set so // that the string is removed when deallocated. upcalls->newString->resolveClass(); - if (!JavaString::internStringVT) { + if (JavaString::internStringVT == NULL) { JavaVirtualTable* stringVT = upcalls->newString->getVirtualVT(); uint32 size = upcalls->newString->virtualTableSize * sizeof(uintptr_t); @@ -1145,8 +1179,8 @@ #undef LOAD_CLASS loadAppClassLoader(); - JavaObject* obj = JavaThread::get()->currentThread(); - JavaObject* javaLoader = appClassLoader->getJavaClassLoader(); + obj = JavaThread::get()->currentThread(); + javaLoader = appClassLoader->getJavaClassLoader(); #ifdef SERVICE if (!IsolateID) @@ -1161,9 +1195,9 @@ } void Jnjvm::executeClass(const char* className, ArrayObject* args) { - JavaObject* exc = 0; - JavaObject* obj = 0; - JavaObject* group = 0; + JavaObject* exc = NULL; + JavaObject* obj = NULL; + JavaObject* group = NULL; llvm_gcroot(args, 0); llvm_gcroot(exc, 0); @@ -1175,7 +1209,7 @@ UserClass* cl = appClassLoader->loadClassFromSelf(this, className); // If not, load the class. - if (!cl) { + if (cl == NULL) { const UTF8* name = appClassLoader->asciizConstructUTF8(className); cl = (UserClass*)appClassLoader->loadName(name, true, true); } @@ -1195,7 +1229,7 @@ } END_CATCH; exc = JavaThread::get()->pendingException; - if (exc) { + if (exc != NULL) { JavaThread* th = JavaThread::get(); th->clearException(); obj = th->currentThread(); @@ -1212,6 +1246,7 @@ void Jnjvm::executePremain(const char* className, JavaString* args, JavaObject* instrumenter) { + llvm_gcroot(args, 0); llvm_gcroot(instrumenter, 0); TRY { const UTF8* name = appClassLoader->asciizConstructUTF8(className); @@ -1242,10 +1277,10 @@ void Jnjvm::mainJavaStart(JavaThread* thread) { - JavaString* str = 0; - JavaObject* instrumenter = 0; - ArrayObject* args = 0; - JavaObject* exc = 0; + JavaString* str = NULL; + JavaObject* instrumenter = NULL; + ArrayObject* args = NULL; + JavaObject* exc = NULL; llvm_gcroot(str, 0); llvm_gcroot(instrumenter, 0); @@ -1420,8 +1455,11 @@ } ArrayUInt16* Jnjvm::asciizToArray(const char* asciiz) { + ArrayUInt16* tmp = NULL; + llvm_gcroot(tmp, 0); + uint32 size = strlen(asciiz); - ArrayUInt16* tmp = (ArrayUInt16*)upcalls->ArrayOfChar->doNew(size, this); + tmp = (ArrayUInt16*)upcalls->ArrayOfChar->doNew(size, this); for (uint32 i = 0; i < size; i++) { ArrayUInt16::setElement(tmp, asciiz[i], i); Modified: vmkit/trunk/lib/J3/VMCore/JnjvmClassLoader.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/JnjvmClassLoader.cpp?rev=106866&r1=106865&r2=106866&view=diff ============================================================================== --- vmkit/trunk/lib/J3/VMCore/JnjvmClassLoader.cpp (original) +++ vmkit/trunk/lib/J3/VMCore/JnjvmClassLoader.cpp Fri Jun 25 13:00:09 2010 @@ -315,13 +315,15 @@ } ArrayUInt8* JnjvmBootstrapLoader::openName(const UTF8* utf8) { + ArrayUInt8* res = 0; + llvm_gcroot(res, 0); + char* asciiz = (char*)alloca(utf8->size + 1); for (sint32 i = 0; i < utf8->size; ++i) asciiz[i] = utf8->elements[i]; asciiz[utf8->size] = 0; uint32 alen = utf8->size; - ArrayUInt8* res = 0; for (std::vector::iterator i = bootClasspath.begin(), e = bootClasspath.end(); i != e; ++i) { @@ -353,15 +355,15 @@ UserClass* JnjvmBootstrapLoader::internalLoad(const UTF8* name, bool doResolve, JavaString* strName) { - + ArrayUInt8* bytes = NULL; + llvm_gcroot(bytes, 0); llvm_gcroot(strName, 0); UserCommonClass* cl = lookupClass(name); if (!cl) { - // This array is not allocated by the GC. - ArrayUInt8* bytes = openName(name); - if (bytes) { + bytes = openName(name); + if (bytes != NULL) { cl = constructClass(name, bytes); } } @@ -384,7 +386,7 @@ if (!cl) { UserClass* forCtp = loadClass; - if (!strName) { + if (strName == NULL) { strName = JavaString::internalToJava(name, isolate); } obj = loadClassMethod->invokeJavaObjectVirtual(isolate, forCtp, javaLoader, @@ -843,8 +845,7 @@ llvm_gcroot(loader, 0); llvm_gcroot(vmdata, 0); - if (loader == 0) - return vm->bootstrapLoader; + if (loader == NULL) return vm->bootstrapLoader; JnjvmClassLoader* JCL = 0; Classpath* upcalls = vm->bootstrapLoader->upcalls; @@ -920,20 +921,24 @@ } JavaString** JnjvmClassLoader::UTF8ToStr(const UTF8* val) { - JavaString* res = isolate->internalUTF8ToStr(val); + JavaString* res = NULL; + llvm_gcroot(res, 0); + res = isolate->internalUTF8ToStr(val); return strings->addString(this, res); } JavaString** JnjvmBootstrapLoader::UTF8ToStr(const UTF8* val) { + JavaString* res = NULL; + llvm_gcroot(res, 0); Jnjvm* vm = JavaThread::get()->getJVM(); - JavaString* res = vm->internalUTF8ToStr(val); + res = vm->internalUTF8ToStr(val); return strings->addString(this, res); } void JnjvmBootstrapLoader::analyseClasspathEnv(const char* str) { if (str != 0) { unsigned int len = strlen(str); - char* buf = (char*)alloca(len + 1); + char* buf = new char[len + 1]; const char* cur = str; int top = 0; char c = 1; @@ -972,6 +977,7 @@ cur = cur + top + 1; top = 0; } + delete[] buf; } } Modified: vmkit/trunk/lib/J3/VMCore/JnjvmClassLoader.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/JnjvmClassLoader.h?rev=106866&r1=106865&r2=106866&view=diff ============================================================================== --- vmkit/trunk/lib/J3/VMCore/JnjvmClassLoader.h (original) +++ vmkit/trunk/lib/J3/VMCore/JnjvmClassLoader.h Fri Jun 25 13:00:09 2010 @@ -451,19 +451,22 @@ /// Is the object a VMClassLoader object? /// static bool isVMClassLoader(JavaObject* obj) { + llvm_gcroot(obj, 0); return obj->getVirtualTable() == &VT; } /// staticTracer - Trace the internal class loader. /// static void staticTracer(VMClassLoader* obj, uintptr_t closure) { - if (obj->JCL) obj->JCL->tracer(closure); + llvm_gcroot(obj, 0); + if (obj->JCL != NULL) obj->JCL->tracer(closure); } /// ~VMClassLoader - Delete the internal class loader. /// static void staticDestructor(VMClassLoader* obj) { - if (obj->JCL) { + llvm_gcroot(obj, 0); + if (obj->JCL != NULL) { obj->JCL->~JnjvmClassLoader(); delete &(obj->JCL->allocator); } Modified: vmkit/trunk/lib/J3/VMCore/LockedMap.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/LockedMap.h?rev=106866&r1=106865&r2=106866&view=diff ============================================================================== --- vmkit/trunk/lib/J3/VMCore/LockedMap.h (original) +++ vmkit/trunk/lib/J3/VMCore/LockedMap.h Fri Jun 25 13:00:09 2010 @@ -48,6 +48,8 @@ { bool operator()(const ArrayUInt16* s1, const ArrayUInt16* s2) const { + llvm_gcroot(s1, 0); + llvm_gcroot(s2, 0); if (ArrayUInt16::getSize(s1) < ArrayUInt16::getSize(s2)) return true; else if (ArrayUInt16::getSize(s1) > ArrayUInt16::getSize(s2)) return false; else return memcmp((const char*)ArrayUInt16::getElements(s1), @@ -87,11 +89,12 @@ inline Container lookupOrCreate(Key& V, Meta meta, funcCreate func) { Container res = 0; IsGC::gcroot(res, 0); + IsGC::gcroot((void*)V, 0); lock.lock(); iterator End = map.end(); iterator I = map.find(V); if (I == End) { - Container res = func(V, meta); + res = func(V, meta); map.insert(std::make_pair(V, res)); lock.unlock(); return res; @@ -102,6 +105,7 @@ } inline void remove(Key V) { + IsGC::gcroot(V, 0); lock.lock(); map.erase(V); lock.unlock(); @@ -109,6 +113,7 @@ inline void remove(Key V, Container C) { IsGC::gcroot(C, 0); + IsGC::gcroot(V, 0); lock.lock(); removeUnlocked(V, C); lock.unlock(); @@ -116,6 +121,7 @@ inline void removeUnlocked(Key V, Container C) { IsGC::gcroot(C, 0); + IsGC::gcroot((void*)V, 0); iterator End = map.end(); iterator I = map.find(V); @@ -124,6 +130,7 @@ } inline Container lookup(Key V) { + IsGC::gcroot((void*)V, 0); lock.lock(); iterator End = map.end(); iterator I = map.find(V); @@ -133,6 +140,7 @@ inline void hash(Key k, Container c) { IsGC::gcroot(c, 0); + IsGC::gcroot(k, 0); lock.lock(); map.insert(std::make_pair(k, c)); lock.unlock(); From nicolas.geoffray at lip6.fr Sun Jun 27 21:10:01 2010 From: nicolas.geoffray at lip6.fr (Nicolas Geoffray) Date: Mon, 28 Jun 2010 04:10:01 -0000 Subject: [vmkit-commits] [vmkit] r106987 - in /vmkit/trunk/lib/J3/VMCore: Jnjvm.cpp Reader.cpp Reader.h Message-ID: <20100628041001.54D112A6C12C@llvm.org> Author: geoffray Date: Sun Jun 27 23:10:01 2010 New Revision: 106987 URL: http://llvm.org/viewvc/llvm-project?rev=106987&view=rev Log: Remove unused parameter. Modified: vmkit/trunk/lib/J3/VMCore/Jnjvm.cpp vmkit/trunk/lib/J3/VMCore/Reader.cpp vmkit/trunk/lib/J3/VMCore/Reader.h Modified: vmkit/trunk/lib/J3/VMCore/Jnjvm.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/Jnjvm.cpp?rev=106987&r1=106986&r2=106987&view=diff ============================================================================== --- vmkit/trunk/lib/J3/VMCore/Jnjvm.cpp (original) +++ vmkit/trunk/lib/J3/VMCore/Jnjvm.cpp Sun Jun 27 23:10:01 2010 @@ -858,7 +858,7 @@ vm->setClasspath(jarFile); - bytes = Reader::openFile(vm->bootstrapLoader, jarFile, true); + bytes = Reader::openFile(vm->bootstrapLoader, jarFile); if (bytes == NULL) { printf("Unable to access jarfile %s\n", jarFile); Modified: vmkit/trunk/lib/J3/VMCore/Reader.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/Reader.cpp?rev=106987&r1=106986&r2=106987&view=diff ============================================================================== --- vmkit/trunk/lib/J3/VMCore/Reader.cpp (original) +++ vmkit/trunk/lib/J3/VMCore/Reader.cpp Sun Jun 27 23:10:01 2010 @@ -25,11 +25,10 @@ const int Reader::SeekCur = SEEK_CUR; const int Reader::SeekEnd = SEEK_END; -ArrayUInt8* Reader::openFile(JnjvmBootstrapLoader* loader, const char* path, - bool temp) { - FILE* fp = fopen(path, "r"); +ArrayUInt8* Reader::openFile(JnjvmBootstrapLoader* loader, const char* path) { ArrayUInt8* res = NULL; llvm_gcroot(res, 0); + FILE* fp = fopen(path, "r"); if (fp != 0) { fseek(fp, 0, SeekEnd); long nbb = ftell(fp); Modified: vmkit/trunk/lib/J3/VMCore/Reader.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/Reader.h?rev=106987&r1=106986&r2=106987&view=diff ============================================================================== --- vmkit/trunk/lib/J3/VMCore/Reader.h (original) +++ vmkit/trunk/lib/J3/VMCore/Reader.h Sun Jun 27 23:10:01 2010 @@ -78,8 +78,7 @@ static const int SeekCur; static const int SeekEnd; - static ArrayUInt8* openFile(JnjvmBootstrapLoader* loader, const char* path, - bool temp = false); + static ArrayUInt8* openFile(JnjvmBootstrapLoader* loader, const char* path); static ArrayUInt8* openZip(JnjvmBootstrapLoader* loader, ZipArchive* archive, const char* filename);