From nicolas.geoffray at lip6.fr Tue Jun 2 00:20:30 2009 From: nicolas.geoffray at lip6.fr (Nicolas Geoffray) Date: Tue, 02 Jun 2009 07:20:30 -0000 Subject: [vmkit-commits] [vmkit] r72720 - /vmkit/trunk/lib/JnJVM/Compiler/JnjvmModule.cpp Message-ID: <200906020720.n527KUMo023315@zion.cs.uiuc.edu> Author: geoffray Date: Tue Jun 2 02:20:30 2009 New Revision: 72720 URL: http://llvm.org/viewvc/llvm-project?rev=72720&view=rev Log: For a class, trace the super fields ourselves instead of calling the super tracer. Modified: vmkit/trunk/lib/JnJVM/Compiler/JnjvmModule.cpp Modified: vmkit/trunk/lib/JnJVM/Compiler/JnjvmModule.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Compiler/JnjvmModule.cpp?rev=72720&r1=72719&r2=72720&view=diff ============================================================================== --- vmkit/trunk/lib/JnJVM/Compiler/JnjvmModule.cpp (original) +++ vmkit/trunk/lib/JnJVM/Compiler/JnjvmModule.cpp Tue Jun 2 02:20:30 2009 @@ -89,6 +89,32 @@ enabledException = true; } + +void JavaLLVMCompiler::traceAllFields(uint32 nbFields, JavaField* fields, + BasicBlock* block, Value* realArg) { + Constant* zero = mvm::MvmModule::constantZero; + for (uint32 i = 0; i < nbFields; ++i) { + JavaField& cur = fields[i]; + if (cur.getSignature()->trace()) { + LLVMFieldInfo* LFI = getFieldInfo(&cur); + std::vector args; //size = 2 + args.push_back(zero); + args.push_back(LFI->getOffset()); + Value* ptr = GetElementPtrInst::Create(realArg, args.begin(), args.end(), + "",block); + Value* val = new LoadInst(ptr, "", block); + Value* valCast = new BitCastInst(val, JnjvmModule::JavaObjectType, "", + block); + std::vector Args; + Args.push_back(valCast); +#ifdef MULTIPLE_GC + Args.push_back(GC); +#endif + CallInst::Create(JavaIntrinsics.MarkAndTraceFunction, Args.begin(), + Args.end(), "", block); + } + } +} #ifdef WITH_TRACER llvm::Function* JavaLLVMCompiler::internalMakeTracer(Class* cl, bool stat) { @@ -115,14 +141,13 @@ if (!nbReferenceFields) { if (stat) return JavaIntrinsics.EmptyTracerFunction; - else return getClassInfo(cl->super)->getVirtualTracer(); + else if (cl->super) return getClassInfo(cl->super)->getVirtualTracer(); } Function* func = Function::Create(JnjvmModule::MarkAndTraceType, GlobalValue::InternalLinkage, "", getLLVMModule()); - Constant* zero = mvm::MvmModule::constantZero; Argument* arg = func->arg_begin(); BasicBlock* block = BasicBlock::Create("", func); llvm::Value* realArg = new BitCastInst(arg, type, "", block); @@ -133,38 +158,18 @@ Value* GC = ++func->arg_begin(); Args.push_back(GC); #endif - if (!stat) { - if (cl->super == 0) { - CallInst::Create(JavaIntrinsics.JavaObjectTracerFunction, Args.begin(), - Args.end(), "", block); - } else { - LLVMClassInfo* LCP = getClassInfo(cl->super); - Function* F = LCP->getVirtualTracer(); - assert(F && "Still no virtual tracer for super"); - CallInst::Create(F, Args.begin(), Args.end(), "", block); - } - } - - for (uint32 i = 0; i < nbFields; ++i) { - JavaField& cur = fields[i]; - if (cur.getSignature()->trace()) { - LLVMFieldInfo* LFI = getFieldInfo(&cur); - std::vector args; //size = 2 - args.push_back(zero); - args.push_back(LFI->getOffset()); - Value* ptr = GetElementPtrInst::Create(realArg, args.begin(), args.end(), - "",block); - Value* val = new LoadInst(ptr, "", block); - Value* valCast = new BitCastInst(val, JnjvmModule::JavaObjectType, "", - block); - std::vector Args; - Args.push_back(valCast); -#ifdef MULTIPLE_GC - Args.push_back(GC); -#endif - CallInst::Create(JavaIntrinsics.MarkAndTraceFunction, Args.begin(), - Args.end(), "", block); + if (stat) { + traceAllFields(nbFields, fields, block, realArg); + } else { + CallInst::Create(JavaIntrinsics.JavaObjectTracerFunction, Args.begin(), + Args.end(), "", block); + Class* cur = cl; + while (cur->super != 0) { + traceAllFields(cur->nbVirtualFields, cur->virtualFields, block, realArg); + cur = cur->super; + const Type* Ty = getClassInfo(cur)->getVirtualType(); + realArg = new BitCastInst(realArg, Ty, "", block); } } From nicolas.geoffray at lip6.fr Tue Jun 2 00:21:57 2009 From: nicolas.geoffray at lip6.fr (Nicolas Geoffray) Date: Tue, 02 Jun 2009 07:21:57 -0000 Subject: [vmkit-commits] [vmkit] r72721 - /vmkit/trunk/include/jnjvm/JnjvmModule.h Message-ID: <200906020721.n527LwP1023366@zion.cs.uiuc.edu> Author: geoffray Date: Tue Jun 2 02:21:57 2009 New Revision: 72721 URL: http://llvm.org/viewvc/llvm-project?rev=72721&view=rev Log: Forgot that file from the last commit. Modified: vmkit/trunk/include/jnjvm/JnjvmModule.h Modified: vmkit/trunk/include/jnjvm/JnjvmModule.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/jnjvm/JnjvmModule.h?rev=72721&r1=72720&r2=72721&view=diff ============================================================================== --- vmkit/trunk/include/jnjvm/JnjvmModule.h (original) +++ vmkit/trunk/include/jnjvm/JnjvmModule.h Tue Jun 2 02:21:57 2009 @@ -20,6 +20,7 @@ #include "JavaCompiler.h" namespace llvm { + class BasicBlock; class Constant; class ConstantInt; class Function; @@ -360,6 +361,7 @@ #ifdef WITH_TRACER llvm::Function* internalMakeTracer(Class* cl, bool stat); + void traceAllFields(uint32, JavaField*, llvm::BasicBlock*, llvm::Value*); virtual llvm::Function* makeTracer(Class* cl, bool stat) = 0; #endif From nicolas.geoffray at lip6.fr Tue Jun 2 00:24:46 2009 From: nicolas.geoffray at lip6.fr (Nicolas Geoffray) Date: Tue, 02 Jun 2009 07:24:46 -0000 Subject: [vmkit-commits] [vmkit] r72722 - in /vmkit/trunk: include/mvm/Threads/Locks.h lib/JnJVM/VMCore/JavaClass.h lib/JnJVM/VMCore/JavaObject.cpp lib/JnJVM/VMCore/JavaObject.h lib/Mvm/CommonThread/ctlock.cpp Message-ID: <200906020724.n527OktL023452@zion.cs.uiuc.edu> Author: geoffray Date: Tue Jun 2 02:24:46 2009 New Revision: 72722 URL: http://llvm.org/viewvc/llvm-project?rev=72722&view=rev Log: Bugfix in wait() and add a couple of asserts. Modified: vmkit/trunk/include/mvm/Threads/Locks.h vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h vmkit/trunk/lib/JnJVM/VMCore/JavaObject.cpp vmkit/trunk/lib/JnJVM/VMCore/JavaObject.h vmkit/trunk/lib/Mvm/CommonThread/ctlock.cpp Modified: vmkit/trunk/include/mvm/Threads/Locks.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/mvm/Threads/Locks.h?rev=72722&r1=72721&r2=72722&view=diff ============================================================================== --- vmkit/trunk/include/mvm/Threads/Locks.h (original) +++ vmkit/trunk/include/mvm/Threads/Locks.h Tue Jun 2 02:24:46 2009 @@ -11,6 +11,7 @@ #define MVM_LOCKS_H #include +#include #include "mvm/Threads/Thread.h" @@ -66,6 +67,11 @@ /// class Lock { friend class Cond; + +private: + virtual void unsafeLock(int n) = 0; + virtual int unsafeUnlock() = 0; + protected: /// owner - Which thread is currently holding the lock? /// @@ -74,12 +80,13 @@ /// internalLock - The lock implementation of the platform. /// pthread_mutex_t internalLock; + public: /// Lock - Creates a lock, recursive if rec is true. /// - Lock(bool rec); + Lock(); /// ~Lock - Give it a home. /// @@ -105,8 +112,18 @@ /// LockNormal - A non-recursive lock. class LockNormal : public Lock { + friend class Cond; +private: + virtual void unsafeLock(int n) { + owner = mvm::Thread::get(); + } + + virtual int unsafeUnlock() { + owner = 0; + return 0; + } public: - LockNormal() : Lock(false) {} + LockNormal() : Lock() {} virtual void lock(); virtual void unlock(); @@ -115,14 +132,27 @@ /// LockRecursive - A recursive lock. class LockRecursive : public Lock { + friend class Cond; private: /// n - Number of times the lock has been locked. /// int n; + virtual void unsafeLock(int a) { + n = a; + owner = mvm::Thread::get(); + } + + virtual int unsafeUnlock() { + int ret = n; + n = 0; + owner = 0; + return ret; + } + public: - LockRecursive() : Lock(true) { n = 0; } + LockRecursive() : Lock() { n = 0; } virtual void lock(); virtual void unlock(); @@ -186,7 +216,7 @@ if (!(lock & FatMask)) { TFatLock* obj = TFatLock::allocate(O); size_t val = (((size_t) obj) >> 1) | FatMask; - uint32 count = lock & 0xFF; + uint32 count = lock & ThinCountMask; obj->acquireAll(count + 1); lock = val; return obj; @@ -235,10 +265,13 @@ obj->acquire(); } } + + assert(owner() && "Not owner after quitting acquire!"); } /// release - Release the lock. void release() { + assert(owner() && "Not owner when entering release!"); uint64 id = mvm::Thread::get()->getThreadID(); if (lock == id) { lock = 0; @@ -272,7 +305,7 @@ bool owner() { uint64 id = mvm::Thread::get()->getThreadID(); if (id == lock) return true; - if ((lock & 0x7FFFFF00) == id) return true; + if ((lock & ThinMask) == id) return true; if (lock & FatMask) { TFatLock* obj = (TFatLock*)(lock << 1); return obj->owner(); @@ -280,6 +313,15 @@ return false; } + mvm::Thread* getOwner() { + if (lock & FatMask) { + TFatLock* obj = (TFatLock*)(lock << 1); + return obj->getOwner(); + } else { + return (mvm::Thread*)(lock & ThinMask); + } + } + /// getFatLock - Get the fat lock is the lock is a fat lock, 0 otherwise. TFatLock* getFatLock() { if (lock & FatMask) { Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h?rev=72722&r1=72721&r2=72722&view=diff ============================================================================== --- vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h (original) +++ vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h Tue Jun 2 02:24:46 2009 @@ -388,7 +388,14 @@ /// condVar - Used to wake threads waiting on the load/resolve/initialize /// process of this class, done by another thread. mvm::Cond condVar; - + + bool owner() { + return lockVar.selfOwner(); + } + + mvm::Thread* getOwner() { + return lockVar.getOwner(); + } static FatLock* allocate(UserCommonClass* cl) { return new(cl->classLoader->allocator) FatLock(); Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaObject.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaObject.cpp?rev=72722&r1=72721&r2=72722&view=diff ============================================================================== --- vmkit/trunk/lib/JnJVM/VMCore/JavaObject.cpp (original) +++ vmkit/trunk/lib/JnJVM/VMCore/JavaObject.cpp Tue Jun 2 02:24:46 2009 @@ -94,13 +94,12 @@ thread->interruptFlag = 0; thread->getJVM()->interruptedException(this); } else { - uint32_t recur = l->lock.recursionCount(); JavaCond* cond = l->getCond(); cond->wait(thread); thread->state = JavaThread::StateWaiting; bool timeout = false; - l->lock.unlockAll(); + uint32 recur = l->lock.unlockAll(); if (timed) { timeout = varcondThread.timedWait(&mutexThread, info); @@ -126,6 +125,7 @@ } else { JavaThread::get()->getJVM()->illegalMonitorStateException(this); } + assert(owner() && "Not owner after wait"); } void JavaObject::wait() { @@ -143,6 +143,7 @@ } else { JavaThread::get()->getJVM()->illegalMonitorStateException(this); } + assert(owner() && "Not owner after notify"); } void JavaObject::notifyAll() { @@ -151,7 +152,9 @@ if (l) l->getCond()->notifyAll(); } else { JavaThread::get()->getJVM()->illegalMonitorStateException(this); - } + } + + assert(owner() && "Not owner after notifyAll"); } void JavaObject::decapsulePrimitive(Jnjvm *vm, uintptr_t &buf, Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaObject.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaObject.h?rev=72722&r1=72721&r2=72722&view=diff ============================================================================== --- vmkit/trunk/lib/JnJVM/VMCore/JavaObject.h (original) +++ vmkit/trunk/lib/JnJVM/VMCore/JavaObject.h Tue Jun 2 02:24:46 2009 @@ -100,6 +100,12 @@ bool owner() { return lock.selfOwner(); } + + /// getOwner - Get the owner of this lock. + /// + mvm::Thread* getOwner() { + return lock.getOwner(); + } /// getCond - Returns the conditation variable of this lock, allocating it /// if non-existant. Modified: vmkit/trunk/lib/Mvm/CommonThread/ctlock.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/CommonThread/ctlock.cpp?rev=72722&r1=72721&r2=72722&view=diff ============================================================================== --- vmkit/trunk/lib/Mvm/CommonThread/ctlock.cpp (original) +++ vmkit/trunk/lib/Mvm/CommonThread/ctlock.cpp Tue Jun 2 02:24:46 2009 @@ -13,12 +13,14 @@ #include "mvm/Threads/Locks.h" #include "mvm/Threads/Thread.h" #include "cterror.h" +#include #include +#include using namespace mvm; -Lock::Lock(bool recursive) { +Lock::Lock() { pthread_mutexattr_t attr; // Initialize the mutex attributes @@ -27,7 +29,7 @@ // Initialize the mutex as a recursive mutex, if requested, or normal // otherwise. - int kind = ( recursive ? PTHREAD_MUTEX_RECURSIVE : PTHREAD_MUTEX_NORMAL ); + int kind = PTHREAD_MUTEX_NORMAL; errorcode = pthread_mutexattr_settype(&attr, kind); assert(errorcode == 0); @@ -66,30 +68,45 @@ } void LockNormal::unlock() { + assert(selfOwner() && "Not owner when unlocking"); owner = 0; pthread_mutex_unlock((pthread_mutex_t*)&internalLock); } void LockRecursive::lock() { - pthread_mutex_lock((pthread_mutex_t*)&internalLock); - if (!owner) owner = mvm::Thread::get(); + if (!selfOwner()) { + pthread_mutex_lock((pthread_mutex_t*)&internalLock); + owner = mvm::Thread::get(); + } ++n; } void LockRecursive::unlock() { + assert(selfOwner() && "Not owner when unlocking"); --n; - if (n == 0) owner = 0; - pthread_mutex_unlock((pthread_mutex_t*)&internalLock); + if (n == 0) { + owner = 0; + pthread_mutex_unlock((pthread_mutex_t*)&internalLock); + } } int LockRecursive::unlockAll() { + assert(selfOwner() && "Not owner when unlocking all"); int res = n; - while (n) unlock(); + n = 0; + owner = 0; + pthread_mutex_unlock((pthread_mutex_t*)&internalLock); return res; } void LockRecursive::lockAll(int count) { - for (int i = 0; i < count; ++i) lock(); + if (selfOwner()) { + n += count; + } else { + pthread_mutex_lock((pthread_mutex_t*)&internalLock); + owner = mvm::Thread::get(); + n = count; + } } Cond::Cond() { @@ -106,8 +123,14 @@ } void Cond::wait(Lock* l) { - pthread_cond_wait((pthread_cond_t*)&internalCond, - (pthread_mutex_t*)&(l->internalLock)); + + int n = l->unsafeUnlock(); + + int res = pthread_cond_wait((pthread_cond_t*)&internalCond, + (pthread_mutex_t*)&(l->internalLock)); + + assert(!res && "Error on wait"); + l->unsafeLock(n); } void Cond::signal() { @@ -122,6 +145,15 @@ gettimeofday(&now, &tz); timeout.tv_sec = now.tv_sec + ref->tv_sec; timeout.tv_nsec = now.tv_usec + ref->tv_usec; - return pthread_cond_timedwait((pthread_cond_t*)&internalCond, - (pthread_mutex_t*)&(l->internalLock), &timeout); + + int n = l->unsafeUnlock(); + + int res = pthread_cond_timedwait((pthread_cond_t*)&internalCond, + (pthread_mutex_t*)&(l->internalLock), + &timeout); + + assert((!res || res == ETIMEDOUT) && "Error on timed wait"); + l->unsafeLock(n); + + return res; } From nicolas.geoffray at lip6.fr Wed Jun 3 03:05:25 2009 From: nicolas.geoffray at lip6.fr (Nicolas Geoffray) Date: Wed, 03 Jun 2009 10:05:25 -0000 Subject: [vmkit-commits] [vmkit] r72761 - /vmkit/trunk/lib/Mvm/GCMmap2/gccollector.cpp Message-ID: <200906031005.n53A5PPM003789@zion.cs.uiuc.edu> Author: geoffray Date: Wed Jun 3 05:05:20 2009 New Revision: 72761 URL: http://llvm.org/viewvc/llvm-project?rev=72761&view=rev Log: Call static method. Modified: vmkit/trunk/lib/Mvm/GCMmap2/gccollector.cpp Modified: vmkit/trunk/lib/Mvm/GCMmap2/gccollector.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/GCMmap2/gccollector.cpp?rev=72761&r1=72760&r2=72761&view=diff ============================================================================== --- vmkit/trunk/lib/Mvm/GCMmap2/gccollector.cpp (original) +++ vmkit/trunk/lib/Mvm/GCMmap2/gccollector.cpp Wed Jun 3 05:05:20 2009 @@ -49,7 +49,7 @@ unused_nodes->attrape(used_nodes); - mvm::Thread* th = th->get(); + mvm::Thread* th = mvm::Thread::get(); th->MyVM->startCollection(); #ifdef HAVE_PTHREAD From nicolas.geoffray at lip6.fr Wed Jun 3 03:28:24 2009 From: nicolas.geoffray at lip6.fr (Nicolas Geoffray) Date: Wed, 03 Jun 2009 10:28:24 -0000 Subject: [vmkit-commits] [vmkit] r72763 - /vmkit/trunk/lib/JnJVM/VMCore/Jni.cpp Message-ID: <200906031028.n53ASPmI004601@zion.cs.uiuc.edu> Author: geoffray Date: Wed Jun 3 05:28:16 2009 New Revision: 72763 URL: http://llvm.org/viewvc/llvm-project?rev=72763&view=rev Log: Bugfix for MonitorExit and MonitorEnter. Modified: vmkit/trunk/lib/JnJVM/VMCore/Jni.cpp Modified: vmkit/trunk/lib/JnJVM/VMCore/Jni.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/Jni.cpp?rev=72763&r1=72762&r2=72763&view=diff ============================================================================== --- vmkit/trunk/lib/JnJVM/VMCore/Jni.cpp (original) +++ vmkit/trunk/lib/JnJVM/VMCore/Jni.cpp Wed Jun 3 05:28:16 2009 @@ -2493,11 +2493,16 @@ BEGIN_JNI_EXCEPTION - ((JavaObject*)obj)->acquire(); - return 1; + if (obj) { + ((JavaObject*)obj)->acquire(); + return 0; + } else { + return -1; + } + END_JNI_EXCEPTION - return 0; + return -1; } @@ -2505,11 +2510,22 @@ BEGIN_JNI_EXCEPTION - ((JavaObject*)obj)->release(); - return 1; + JavaObject* Obj = (JavaObject*)obj; + + if (Obj) { + + if (!Obj->owner()) { + JavaThread::get()->getJVM()->illegalMonitorStateException(Obj); + } + + Obj->release(); + return 0; + } else { + return -1; + } END_JNI_EXCEPTION - return 0; + return -1; } From nicolas.geoffray at lip6.fr Thu Jun 4 05:26:50 2009 From: nicolas.geoffray at lip6.fr (Nicolas Geoffray) Date: Thu, 04 Jun 2009 12:26:50 -0000 Subject: [vmkit-commits] [vmkit] r72865 - /vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp Message-ID: <200906041226.n54CQqbj009151@zion.cs.uiuc.edu> Author: geoffray Date: Thu Jun 4 07:26:38 2009 New Revision: 72865 URL: http://llvm.org/viewvc/llvm-project?rev=72865&view=rev Log: Verify that the jar file exists. Modified: vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp Modified: vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp?rev=72865&r1=72864&r2=72865&view=diff ============================================================================== --- vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp (original) +++ vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp Thu Jun 4 07:26:38 2009 @@ -726,6 +726,11 @@ ArrayUInt8* bytes = Reader::openFile(vm->bootstrapLoader, jarFile); + if (!bytes) { + printf("Unable to access jarfile %s\n", jarFile); + return; + } + ZipArchive archive(bytes, vm->allocator); if (archive.getOfscd() != -1) { ZipFile* file = archive.getFile(PATH_MANIFEST); From nicolas.geoffray at lip6.fr Thu Jun 4 11:08:32 2009 From: nicolas.geoffray at lip6.fr (Nicolas Geoffray) Date: Thu, 04 Jun 2009 18:08:32 -0000 Subject: [vmkit-commits] [vmkit] r72874 - /vmkit/trunk/lib/JnJVM/Classpath/ClasspathReflect.h Message-ID: <200906041808.n54I8WFu021038@zion.cs.uiuc.edu> Author: geoffray Date: Thu Jun 4 13:08:31 2009 New Revision: 72874 URL: http://llvm.org/viewvc/llvm-project?rev=72874&view=rev Log: Call the correct tracer. Modified: vmkit/trunk/lib/JnJVM/Classpath/ClasspathReflect.h Modified: vmkit/trunk/lib/JnJVM/Classpath/ClasspathReflect.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Classpath/ClasspathReflect.h?rev=72874&r1=72873&r2=72874&view=diff ============================================================================== --- vmkit/trunk/lib/JnJVM/Classpath/ClasspathReflect.h (original) +++ vmkit/trunk/lib/JnJVM/Classpath/ClasspathReflect.h Thu Jun 4 13:08:31 2009 @@ -18,6 +18,7 @@ #include extern "C" jnjvm::JavaObject* internalFillInStackTrace(jnjvm::JavaObject*); +extern "C" void JavaObjectTracer(jnjvm::JavaObject*); namespace jnjvm { @@ -35,7 +36,7 @@ } static void STATIC_TRACER(JavaObjectClass) { - obj->JavaObject::CALL_TRACER; + JavaObjectTracer(obj); obj->pd->MARK_AND_TRACE; obj->signers->MARK_AND_TRACE; obj->constructor->MARK_AND_TRACE; @@ -56,7 +57,7 @@ public: static void STATIC_TRACER(JavaObjectField) { - obj->JavaObject::CALL_TRACER; + JavaObjectTracer(obj); obj->name->MARK_AND_TRACE; obj->declaringClass->MARK_AND_TRACE; } @@ -81,7 +82,7 @@ public: static void STATIC_TRACER(JavaObjectMethod) { - obj->JavaObject::CALL_TRACER; + JavaObjectTracer(obj); obj->name->MARK_AND_TRACE; obj->declaringClass->MARK_AND_TRACE; } @@ -104,7 +105,7 @@ public: static void STATIC_TRACER(JavaObjectConstructor) { - obj->JavaObject::CALL_TRACER; + JavaObjectTracer(obj); obj->clazz->MARK_AND_TRACE; } From nicolas.geoffray at lip6.fr Thu Jun 4 12:53:39 2009 From: nicolas.geoffray at lip6.fr (Nicolas Geoffray) Date: Thu, 04 Jun 2009 19:53:39 -0000 Subject: [vmkit-commits] [vmkit] r72884 - /vmkit/trunk/lib/JnJVM/Compiler/JITInfo.cpp Message-ID: <200906041953.n54Jrdpc025354@zion.cs.uiuc.edu> Author: geoffray Date: Thu Jun 4 14:53:39 2009 New Revision: 72884 URL: http://llvm.org/viewvc/llvm-project?rev=72884&view=rev Log: Fix race condition. Modified: vmkit/trunk/lib/JnJVM/Compiler/JITInfo.cpp Modified: vmkit/trunk/lib/JnJVM/Compiler/JITInfo.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Compiler/JITInfo.cpp?rev=72884&r1=72883&r2=72884&view=diff ============================================================================== --- vmkit/trunk/lib/JnJVM/Compiler/JITInfo.cpp (original) +++ vmkit/trunk/lib/JnJVM/Compiler/JITInfo.cpp Thu Jun 4 14:53:39 2009 @@ -478,9 +478,10 @@ } Function* LLVMSignatureInfo::getVirtualBuf() { + // Lock here because we are called by arbitrary code. Also put that here + // because we are waiting on virtualBufFunction to have an address. + mvm::MvmModule::protectIR(); if (!virtualBufFunction) { - // Lock here because we are called by arbitrary code - mvm::MvmModule::protectIR(); virtualBufFunction = createFunctionCallBuf(true); if (!signature->initialLoader->getCompiler()->isStaticCompiling()) { signature->setVirtualCallBuf((intptr_t) @@ -488,15 +489,16 @@ // Now that it's compiled, we don't need the IR anymore virtualBufFunction->deleteBody(); } - mvm::MvmModule::unprotectIR(); } + mvm::MvmModule::unprotectIR(); return virtualBufFunction; } Function* LLVMSignatureInfo::getVirtualAP() { + // Lock here because we are called by arbitrary code. Also put that here + // because we are waiting on virtualAPFunction to have an address. + mvm::MvmModule::protectIR(); if (!virtualAPFunction) { - // Lock here because we are called by arbitrary code - mvm::MvmModule::protectIR(); virtualAPFunction = createFunctionCallAP(true); if (!signature->initialLoader->getCompiler()->isStaticCompiling()) { signature->setVirtualCallAP((intptr_t) @@ -504,15 +506,16 @@ // Now that it's compiled, we don't need the IR anymore virtualAPFunction->deleteBody(); } - mvm::MvmModule::unprotectIR(); } + mvm::MvmModule::unprotectIR(); return virtualAPFunction; } Function* LLVMSignatureInfo::getStaticBuf() { + // Lock here because we are called by arbitrary code. Also put that here + // because we are waiting on staticBufFunction to have an address. + mvm::MvmModule::protectIR(); if (!staticBufFunction) { - // Lock here because we are called by arbitrary code - mvm::MvmModule::protectIR(); staticBufFunction = createFunctionCallBuf(false); if (!signature->initialLoader->getCompiler()->isStaticCompiling()) { signature->setStaticCallBuf((intptr_t) @@ -520,15 +523,16 @@ // Now that it's compiled, we don't need the IR anymore staticBufFunction->deleteBody(); } - mvm::MvmModule::unprotectIR(); } + mvm::MvmModule::unprotectIR(); return staticBufFunction; } Function* LLVMSignatureInfo::getStaticAP() { + // Lock here because we are called by arbitrary code. Also put that here + // because we are waiting on staticAPFunction to have an address. + mvm::MvmModule::protectIR(); if (!staticAPFunction) { - // Lock here because we are called by arbitrary code - mvm::MvmModule::protectIR(); staticAPFunction = createFunctionCallAP(false); if (!signature->initialLoader->getCompiler()->isStaticCompiling()) { signature->setStaticCallAP((intptr_t) @@ -536,8 +540,8 @@ // Now that it's compiled, we don't need the IR anymore staticAPFunction->deleteBody(); } - mvm::MvmModule::unprotectIR(); } + mvm::MvmModule::unprotectIR(); return staticAPFunction; } From nicolas.geoffray at lip6.fr Thu Jun 4 12:54:11 2009 From: nicolas.geoffray at lip6.fr (Nicolas Geoffray) Date: Thu, 04 Jun 2009 19:54:11 -0000 Subject: [vmkit-commits] [vmkit] r72885 - /vmkit/trunk/lib/JnJVM/VMCore/JavaTypes.cpp Message-ID: <200906041954.n54JsBYN025381@zion.cs.uiuc.edu> Author: geoffray Date: Thu Jun 4 14:54:11 2009 New Revision: 72885 URL: http://llvm.org/viewvc/llvm-project?rev=72885&view=rev Log: Add a couple of asserts. Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaTypes.cpp Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaTypes.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaTypes.cpp?rev=72885&r1=72884&r2=72885&view=diff ============================================================================== --- vmkit/trunk/lib/JnJVM/VMCore/JavaTypes.cpp (original) +++ vmkit/trunk/lib/JnJVM/VMCore/JavaTypes.cpp Thu Jun 4 14:54:11 2009 @@ -58,6 +58,7 @@ _staticCallBuf = initialLoader->loadInLib(buf, unused); if (!_staticCallBuf) initialLoader->getCompiler()->staticCallBuf(this); + assert(_staticCallBuf && "No call buf"); } return _staticCallBuf; } @@ -70,6 +71,7 @@ _virtualCallBuf = initialLoader->loadInLib(buf, unused); if (!_virtualCallBuf) initialLoader->getCompiler()->virtualCallBuf(this); + assert(_virtualCallBuf && "No call buf"); } return _virtualCallBuf; } @@ -82,6 +84,7 @@ _staticCallAP = initialLoader->loadInLib(buf, unused); if (!_staticCallAP) initialLoader->getCompiler()->staticCallAP(this); + assert(_staticCallAP && "No call AP"); } return _staticCallAP; } @@ -94,6 +97,7 @@ _virtualCallAP = initialLoader->loadInLib(buf, unused); if (!_virtualCallAP) initialLoader->getCompiler()->virtualCallAP(this); + assert(_virtualCallAP && "No call AP"); } return _virtualCallAP; } From nicolas.geoffray at lip6.fr Fri Jun 5 03:47:41 2009 From: nicolas.geoffray at lip6.fr (Nicolas Geoffray) Date: Fri, 05 Jun 2009 10:47:41 -0000 Subject: [vmkit-commits] [vmkit] r72940 - /vmkit/trunk/lib/JnJVM/VMCore/JavaTypes.cpp Message-ID: <200906051047.n55AlgAE001542@zion.cs.uiuc.edu> Author: geoffray Date: Fri Jun 5 05:47:30 2009 New Revision: 72940 URL: http://llvm.org/viewvc/llvm-project?rev=72940&view=rev Log: New bugfix for datarace. Don't set the value unprotected. Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaTypes.cpp Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaTypes.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaTypes.cpp?rev=72940&r1=72939&r2=72940&view=diff ============================================================================== --- vmkit/trunk/lib/JnJVM/VMCore/JavaTypes.cpp (original) +++ vmkit/trunk/lib/JnJVM/VMCore/JavaTypes.cpp Fri Jun 5 05:47:30 2009 @@ -55,9 +55,12 @@ char* buf = (char*)alloca((keyName->size << 1) + 1 + 11); nativeName(buf, "static_buf"); bool unused = false; - _staticCallBuf = initialLoader->loadInLib(buf, unused); - if (!_staticCallBuf) + intptr_t res = initialLoader->loadInLib(buf, unused); + if (res) { + _staticCallBuf = res; + } else { initialLoader->getCompiler()->staticCallBuf(this); + } assert(_staticCallBuf && "No call buf"); } return _staticCallBuf; @@ -68,9 +71,12 @@ char* buf = (char*)alloca((keyName->size << 1) + 1 + 11); nativeName(buf, "virtual_buf"); bool unused = false; - _virtualCallBuf = initialLoader->loadInLib(buf, unused); - if (!_virtualCallBuf) + intptr_t res = initialLoader->loadInLib(buf, unused); + if (res) { + _virtualCallBuf = res; + } else { initialLoader->getCompiler()->virtualCallBuf(this); + } assert(_virtualCallBuf && "No call buf"); } return _virtualCallBuf; @@ -81,9 +87,12 @@ char* buf = (char*)alloca((keyName->size << 1) + 1 + 11); nativeName(buf, "static_ap"); bool unused = false; - _staticCallAP = initialLoader->loadInLib(buf, unused); - if (!_staticCallAP) + intptr_t res = initialLoader->loadInLib(buf, unused); + if (res) { + _staticCallAP = res; + } else { initialLoader->getCompiler()->staticCallAP(this); + } assert(_staticCallAP && "No call AP"); } return _staticCallAP; @@ -94,9 +103,12 @@ char* buf = (char*)alloca((keyName->size << 1) + 1 + 11); nativeName(buf, "virtual_ap"); bool unused = false; - _virtualCallAP = initialLoader->loadInLib(buf, unused); - if (!_virtualCallAP) + intptr_t res = initialLoader->loadInLib(buf, unused); + if (res) { + _virtualCallAP = res; + } else { initialLoader->getCompiler()->virtualCallAP(this); + } assert(_virtualCallAP && "No call AP"); } return _virtualCallAP; From nicolas.geoffray at lip6.fr Sun Jun 7 07:01:13 2009 From: nicolas.geoffray at lip6.fr (Nicolas Geoffray) Date: Sun, 07 Jun 2009 14:01:13 -0000 Subject: [vmkit-commits] [vmkit] r73028 - in /vmkit/trunk: ./ autoconf/ include/mvm/ include/mvm/Threads/ lib/JnJVM/Classpath/ lib/JnJVM/Compiler/ lib/JnJVM/VMCore/ lib/Mvm/Allocator/ lib/Mvm/BoehmGC/ lib/Mvm/CommonThread/ lib/Mvm/Compiler/ lib/Mvm/GCMmap2/ lib/Mvm/Runtime/ lib/N3/VMCore/ tools/jnjvm/ tools/n3-mono/ tools/n3-pnetlib/ tools/vmjc/ tools/vmkit/ Message-ID: <200906071401.n57E1EfR024209@zion.cs.uiuc.edu> Author: geoffray Date: Sun Jun 7 09:01:12 2009 New Revision: 73028 URL: http://llvm.org/viewvc/llvm-project?rev=73028&view=rev Log: Code cleanup in GCMmap2. Add an optimization when tracing fields. Removed: vmkit/trunk/lib/Mvm/GCMmap2/gccollector.h Modified: vmkit/trunk/autoconf/configure.ac vmkit/trunk/configure vmkit/trunk/include/mvm/Allocator.h vmkit/trunk/include/mvm/JIT.h vmkit/trunk/include/mvm/Object.h vmkit/trunk/include/mvm/PrintBuffer.h vmkit/trunk/include/mvm/Threads/Thread.h vmkit/trunk/include/mvm/VirtualMachine.h vmkit/trunk/lib/JnJVM/Classpath/ClasspathReflect.h vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMRuntime.cpp vmkit/trunk/lib/JnJVM/Compiler/JavaJITCompiler.cpp vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h vmkit/trunk/lib/JnJVM/VMCore/JavaThread.h vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.h vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.h vmkit/trunk/lib/JnJVM/VMCore/VirtualTables.cpp vmkit/trunk/lib/Mvm/Allocator/gcchunk.h vmkit/trunk/lib/Mvm/BoehmGC/MvmGC.h vmkit/trunk/lib/Mvm/BoehmGC/gc.cpp vmkit/trunk/lib/Mvm/CommonThread/ctthread.cpp vmkit/trunk/lib/Mvm/Compiler/JIT.cpp vmkit/trunk/lib/Mvm/GCMmap2/MvmGC.h vmkit/trunk/lib/Mvm/GCMmap2/gc.cpp vmkit/trunk/lib/Mvm/GCMmap2/gccollector.cpp vmkit/trunk/lib/Mvm/GCMmap2/gcinit.cpp vmkit/trunk/lib/Mvm/GCMmap2/gcthread.cpp vmkit/trunk/lib/Mvm/Runtime/Object.cpp vmkit/trunk/lib/N3/VMCore/MSCorlib.cpp vmkit/trunk/tools/jnjvm/Main.cpp vmkit/trunk/tools/n3-mono/Main.cpp vmkit/trunk/tools/n3-pnetlib/Main.cpp vmkit/trunk/tools/vmjc/vmjc.cpp vmkit/trunk/tools/vmkit/CommandLine.h vmkit/trunk/tools/vmkit/Launcher.cpp Modified: vmkit/trunk/autoconf/configure.ac URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/autoconf/configure.ac?rev=73028&r1=73027&r2=73028&view=diff ============================================================================== --- vmkit/trunk/autoconf/configure.ac (original) +++ vmkit/trunk/autoconf/configure.ac Sun Jun 7 09:01:12 2009 @@ -208,11 +208,11 @@ else GC_LIBS=GCMmap2 if test "x$gc" = "xmulti-mmap"; then - GC_FLAGS="-I\$(PROJ_SRC_ROOT)/lib/Mvm/GCMmap2 -DWITH_TRACER -DMULTIPLE_GC" + GC_FLAGS="-I\$(PROJ_SRC_ROOT)/lib/Mvm/GCMmap2 -DWITH_TRACER -DMULTIPLE_GC -I\$(PROJ_SRC_ROOT)/lib/Mvm/Allocator" AC_SUBST([GC_MULTI_MMAP], [1]) AC_SUBST([GC_SINGLE_MMAP], [0]) else - GC_FLAGS="-I\$(PROJ_SRC_ROOT)/lib/Mvm/GCMmap2 -DWITH_TRACER" + GC_FLAGS="-I\$(PROJ_SRC_ROOT)/lib/Mvm/GCMmap2 -DWITH_TRACER -I\$(PROJ_SRC_ROOT)/lib/Mvm/Allocator" AC_SUBST([GC_MULTI_MMAP], [0]) AC_SUBST([GC_SINGLE_MMAP], [1]) fi Modified: vmkit/trunk/configure URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/configure?rev=73028&r1=73027&r2=73028&view=diff ============================================================================== --- vmkit/trunk/configure (original) +++ vmkit/trunk/configure Sun Jun 7 09:01:12 2009 @@ -3932,13 +3932,13 @@ else GC_LIBS=GCMmap2 if test "x$gc" = "xmulti-mmap"; then - GC_FLAGS="-I\$(PROJ_SRC_ROOT)/lib/Mvm/GCMmap2 -DWITH_TRACER -DMULTIPLE_GC" + GC_FLAGS="-I\$(PROJ_SRC_ROOT)/lib/Mvm/GCMmap2 -DWITH_TRACER -DMULTIPLE_GC -I\$(PROJ_SRC_ROOT)/lib/Mvm/Allocator" GC_MULTI_MMAP=1 GC_SINGLE_MMAP=0 else - GC_FLAGS="-I\$(PROJ_SRC_ROOT)/lib/Mvm/GCMmap2 -DWITH_TRACER" + GC_FLAGS="-I\$(PROJ_SRC_ROOT)/lib/Mvm/GCMmap2 -DWITH_TRACER -I\$(PROJ_SRC_ROOT)/lib/Mvm/Allocator" GC_MULTI_MMAP=0 GC_SINGLE_MMAP=1 Modified: vmkit/trunk/include/mvm/Allocator.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/mvm/Allocator.h?rev=73028&r1=73027&r2=73028&view=diff ============================================================================== --- vmkit/trunk/include/mvm/Allocator.h (original) +++ vmkit/trunk/include/mvm/Allocator.h Sun Jun 7 09:01:12 2009 @@ -16,50 +16,25 @@ #include "llvm/Support/Allocator.h" -#include "MvmGC.h" #include "mvm/Threads/Locks.h" -#ifdef MULTIPLE_GC -#define allocator_new(alloc, cl) collector_new(cl, alloc.GC) -#else -#define allocator_new(alloc, cl) gc_new(cl) -#endif +class VirtualTable; namespace mvm { -class Allocator { -private: -#ifdef MULTIPLE_GC - Collector* GC; -#endif +class Allocator { public: -#ifndef MULTIPLE_GC - void* allocateManagedObject(unsigned int sz, VirtualTable* VT) { - return gc::operator new(sz, VT); - } -#else - void* allocateManagedObject(unsigned int sz, VirtualTable* VT) { - return gc::operator new(sz, VT, GC); - } -#endif + void* allocateManagedObject(unsigned int sz, VirtualTable* VT); - void* allocatePermanentMemory(unsigned int sz) { - return malloc(sz); - } + void* allocatePermanentMemory(unsigned int sz); - void freePermanentMemory(void* obj) { - return free(obj); - } + void freePermanentMemory(void* obj); - void* allocateTemporaryMemory(unsigned int sz) { - return malloc(sz); - } + void* allocateTemporaryMemory(unsigned int sz); - void freeTemporaryMemory(void* obj) { - return free(obj); - } + void freeTemporaryMemory(void* obj); }; class BumpPtrAllocator { Modified: vmkit/trunk/include/mvm/JIT.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/mvm/JIT.h?rev=73028&r1=73027&r2=73028&view=diff ============================================================================== --- vmkit/trunk/include/mvm/JIT.h (original) +++ vmkit/trunk/include/mvm/JIT.h Sun Jun 7 09:01:12 2009 @@ -185,6 +185,8 @@ static void copyDefinitions(llvm::Module* Dst, llvm::Module* Src); static void AddStandardCompilePasses(); + + static const char* getHostTriple(); }; } // end namespace mvm Modified: vmkit/trunk/include/mvm/Object.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/mvm/Object.h?rev=73028&r1=73027&r2=73028&view=diff ============================================================================== --- vmkit/trunk/include/mvm/Object.h (original) +++ vmkit/trunk/include/mvm/Object.h Sun Jun 7 09:01:12 2009 @@ -39,7 +39,7 @@ /// tracer - Default implementation of tracer. Does nothing. /// - virtual void TRACER {} + virtual void tracer() {} /// print - Default implementation of print. /// Modified: vmkit/trunk/include/mvm/PrintBuffer.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/mvm/PrintBuffer.h?rev=73028&r1=73027&r2=73028&view=diff ============================================================================== --- vmkit/trunk/include/mvm/PrintBuffer.h (original) +++ vmkit/trunk/include/mvm/PrintBuffer.h Sun Jun 7 09:01:12 2009 @@ -188,8 +188,8 @@ /// tracer - Traces this PrintBuffer. /// - static void STATIC_TRACER(PrintBuffer) { - obj->contents()->MARK_AND_TRACE; + static void staticTracer(PrintBuffer* obj) { + obj->contents()->markAndTrace(); } }; Modified: vmkit/trunk/include/mvm/Threads/Thread.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/mvm/Threads/Thread.h?rev=73028&r1=73027&r2=73028&view=diff ============================================================================== --- vmkit/trunk/include/mvm/Threads/Thread.h (original) +++ vmkit/trunk/include/mvm/Threads/Thread.h Sun Jun 7 09:01:12 2009 @@ -12,9 +12,6 @@ #include "types.h" -#include "MvmGC.h" - - namespace mvm { class VirtualMachine; @@ -173,7 +170,7 @@ /// tracer - Does nothing. Used for child classes which may defined /// a tracer. /// - virtual void TRACER {} + virtual void tracer() {} /// clearException - Clear any pending exception of the current thread. Modified: vmkit/trunk/include/mvm/VirtualMachine.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/mvm/VirtualMachine.h?rev=73028&r1=73027&r2=73028&view=diff ============================================================================== --- vmkit/trunk/include/mvm/VirtualMachine.h (original) +++ vmkit/trunk/include/mvm/VirtualMachine.h Sun Jun 7 09:01:12 2009 @@ -16,8 +16,6 @@ #define MVM_VIRTUALMACHINE_H #include "mvm/Allocator.h" -#include "mvm/CompilationUnit.h" -#include "mvm/Object.h" #include "mvm/Threads/Cond.h" #include "mvm/Threads/Locks.h" @@ -29,6 +27,8 @@ class JnjvmClassLoader; } +class gc; + namespace mvm { @@ -36,6 +36,7 @@ #define INITIAL_QUEUE_SIZE 256 #define GROW_FACTOR 2 +class CompilationUnit; class VirtualMachine; class ReferenceQueue { @@ -125,7 +126,7 @@ } public: - virtual void TRACER {} + virtual void tracer() {} virtual ~VirtualMachine() {} Modified: vmkit/trunk/lib/JnJVM/Classpath/ClasspathReflect.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Classpath/ClasspathReflect.h?rev=73028&r1=73027&r2=73028&view=diff ============================================================================== --- vmkit/trunk/lib/JnJVM/Classpath/ClasspathReflect.h (original) +++ vmkit/trunk/lib/JnJVM/Classpath/ClasspathReflect.h Sun Jun 7 09:01:12 2009 @@ -35,14 +35,14 @@ return vmdata; } - static void STATIC_TRACER(JavaObjectClass) { + static void staticTracer(JavaObjectClass* obj) { JavaObjectTracer(obj); - obj->pd->MARK_AND_TRACE; - obj->signers->MARK_AND_TRACE; - obj->constructor->MARK_AND_TRACE; + obj->pd->markAndTrace(); + obj->signers->markAndTrace(); + obj->constructor->markAndTrace(); if (obj->vmdata) { JavaObject* Obj = obj->vmdata->classLoader->getJavaClassLoader(); - if (Obj) Obj->MARK_AND_TRACE; + if (Obj) Obj->markAndTrace(); } } }; @@ -56,10 +56,10 @@ public: - static void STATIC_TRACER(JavaObjectField) { + static void staticTracer(JavaObjectField* obj) { JavaObjectTracer(obj); - obj->name->MARK_AND_TRACE; - obj->declaringClass->MARK_AND_TRACE; + obj->name->markAndTrace(); + obj->declaringClass->markAndTrace(); } JavaField* getInternalField() { @@ -81,10 +81,10 @@ public: - static void STATIC_TRACER(JavaObjectMethod) { + static void staticTracer(JavaObjectMethod* obj) { JavaObjectTracer(obj); - obj->name->MARK_AND_TRACE; - obj->declaringClass->MARK_AND_TRACE; + obj->name->markAndTrace(); + obj->declaringClass->markAndTrace(); } JavaMethod* getInternalMethod() { @@ -104,9 +104,9 @@ uint32 slot; public: - static void STATIC_TRACER(JavaObjectConstructor) { + static void staticTracer(JavaObjectConstructor* obj) { JavaObjectTracer(obj); - obj->clazz->MARK_AND_TRACE; + obj->clazz->markAndTrace(); } JavaMethod* getInternalMethod() { @@ -169,9 +169,9 @@ JavaObject* getReferent() const { return referent; } void setReferent(JavaObject* r) { referent = r; } - static void STATIC_TRACER(JavaObjectReference) { - obj->queue->MARK_AND_TRACE; - obj->nextOnQueue->MARK_AND_TRACE; + static void staticTracer(JavaObjectReference* obj) { + obj->queue->markAndTrace(); + obj->nextOnQueue->markAndTrace(); } }; Modified: vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMRuntime.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMRuntime.cpp?rev=73028&r1=73027&r2=73028&view=diff ============================================================================== --- vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMRuntime.cpp (original) +++ vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMRuntime.cpp Sun Jun 7 09:01:12 2009 @@ -132,7 +132,7 @@ ) { BEGIN_NATIVE_EXCEPTION(0) - Collector::collect(); + mvm::Collector::collect(); END_NATIVE_EXCEPTION } @@ -189,7 +189,7 @@ jclass clazz, #endif ) { - return (jlong)Collector::getFreeMemory(); + return (jlong)mvm::Collector::getFreeMemory(); } JNIEXPORT jlong Java_java_lang_VMRuntime_totalMemory( @@ -198,7 +198,7 @@ jclass clazz, #endif ) { - return (jlong)Collector::getTotalMemory(); + return (jlong)mvm::Collector::getTotalMemory(); } JNIEXPORT jlong Java_java_lang_VMRuntime_maxMemory( @@ -207,7 +207,7 @@ jclass clazz, #endif ) { - return (jlong)Collector::getMaxMemory(); + return (jlong)mvm::Collector::getMaxMemory(); } JNIEXPORT jint Java_java_lang_VMRuntime_availableProcessors(){ Modified: vmkit/trunk/lib/JnJVM/Compiler/JavaJITCompiler.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Compiler/JavaJITCompiler.cpp?rev=73028&r1=73027&r2=73028&view=diff ============================================================================== --- vmkit/trunk/lib/JnJVM/Compiler/JavaJITCompiler.cpp (original) +++ vmkit/trunk/lib/JnJVM/Compiler/JavaJITCompiler.cpp Sun Jun 7 09:01:12 2009 @@ -246,7 +246,7 @@ llvm::llvm_shutdown_obj X; mvm::MvmModule::initialise(); - Collector::initialise(0); + mvm::Collector::initialise(); char** newArgv = new char*[argc + 1]; memcpy(newArgv + 1, argv, argc * sizeof(void*)); Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h?rev=73028&r1=73027&r2=73028&view=diff ============================================================================== --- vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h (original) +++ vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h Sun Jun 7 09:01:12 2009 @@ -266,7 +266,7 @@ /// tracer - The tracer of this GC-allocated class. /// - void TRACER; + void tracer(); /// inheritName - Does this class in its class hierarchy inherits /// the given name? Equality is on the name. This function does not take @@ -619,7 +619,7 @@ /// tracer - Tracer function of instances of Class. /// - void TRACER; + void tracer(); ~Class(); Class(); Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaThread.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaThread.h?rev=73028&r1=73027&r2=73028&view=diff ============================================================================== --- vmkit/trunk/lib/JnJVM/VMCore/JavaThread.h (original) +++ vmkit/trunk/lib/JnJVM/VMCore/JavaThread.h Sun Jun 7 09:01:12 2009 @@ -109,7 +109,7 @@ /// tracer - Traces GC-objects pointed by this thread object. /// - virtual void TRACER; + virtual void tracer(); /// JavaThread - Empty constructor, used to get the VT. /// Modified: vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp?rev=73028&r1=73027&r2=73028&view=diff ============================================================================== --- vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp (original) +++ vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp Sun Jun 7 09:01:12 2009 @@ -1307,7 +1307,7 @@ // Helper function to run Jnjvm without JIT. extern "C" int StartJnjvmWithoutJIT(int argc, char** argv, char* mainClass) { - Collector::initialise(0); + mvm::Collector::initialise(); char** newArgv = new char*[argc + 1]; memcpy(newArgv + 1, argv, argc * sizeof(char*)); Modified: vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.h?rev=73028&r1=73027&r2=73028&view=diff ============================================================================== --- vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.h (original) +++ vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.h Sun Jun 7 09:01:12 2009 @@ -176,7 +176,7 @@ /// tracer - Traces instances of this class. /// - virtual void TRACER; + virtual void tracer(); /// dirSeparator - Directory separator for file paths, e.g. '\' for windows, /// '/' for Unix. Modified: vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.h?rev=73028&r1=73027&r2=73028&view=diff ============================================================================== --- vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.h (original) +++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.h Sun Jun 7 09:01:12 2009 @@ -131,7 +131,7 @@ /// tracer - Traces a JnjvmClassLoader for GC. /// - virtual void TRACER; + virtual void tracer(); /// getJnjvmLoaderFromJavaObject - Return the Jnjvm runtime representation /// of the given class loader. @@ -313,7 +313,7 @@ /// tracer - Traces instances of this class. /// - virtual void TRACER; + virtual void tracer(); /// libClasspathEnv - The paths for dynamic libraries of Classpath, separated /// by ':'. @@ -433,8 +433,8 @@ static VirtualTable VT; /// TRACER - Trace the internal class loader. - static void STATIC_TRACER(VMClassLoader) { - if (obj->JCL) obj->JCL->CALL_TRACER; + static void staticTracer(VMClassLoader* obj) { + if (obj->JCL) obj->JCL->tracer(); } /// ~VMClassLoader - Delete the internal class loader. Modified: vmkit/trunk/lib/JnJVM/VMCore/VirtualTables.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/VirtualTables.cpp?rev=73028&r1=73027&r2=73028&view=diff ============================================================================== --- vmkit/trunk/lib/JnJVM/VMCore/VirtualTables.cpp (original) +++ vmkit/trunk/lib/JnJVM/VMCore/VirtualTables.cpp Sun Jun 7 09:01:12 2009 @@ -99,7 +99,7 @@ LockObj* l = obj->lockObj(); if (l) l->markAndTrace(); for (sint32 i = 0; i < obj->size; i++) { - if (obj->elements[i]) obj->elements[i]->MARK_AND_TRACE; + if (obj->elements[i]) obj->elements[i]->markAndTrace(); } } Modified: vmkit/trunk/lib/Mvm/Allocator/gcchunk.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/Allocator/gcchunk.h?rev=73028&r1=73027&r2=73028&view=diff ============================================================================== --- vmkit/trunk/lib/Mvm/Allocator/gcchunk.h (original) +++ vmkit/trunk/lib/Mvm/Allocator/gcchunk.h Sun Jun 7 09:01:12 2009 @@ -72,6 +72,14 @@ p->_next = this; _next->_prev = this; } + + /* ajoute this à p */ + inline void prepend(GCChunkNode *p) { + _next = p; + _prev = p->_prev; + p->_prev = this; + _prev->_next = this; + } /* enleve this de sa liste */ inline void remove() { Modified: vmkit/trunk/lib/Mvm/BoehmGC/MvmGC.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/BoehmGC/MvmGC.h?rev=73028&r1=73027&r2=73028&view=diff ============================================================================== --- vmkit/trunk/lib/Mvm/BoehmGC/MvmGC.h (original) +++ vmkit/trunk/lib/Mvm/BoehmGC/MvmGC.h Sun Jun 7 09:01:12 2009 @@ -76,16 +76,9 @@ class Collector { public: - typedef void (*markerFn)(void*); - - static void initialise(markerFn mark); + static void initialise(); static void destroy() {} - static void die_if_sigsegv_occured_during_collection(void *addr){} - static int isStable(gc_lock_recovery_fct_t, int, int, int, int, - int, int, int, int) { - return 1; - } static unsigned int enable(unsigned int n) { int old = GC_dont_gc; if(n) Modified: vmkit/trunk/lib/Mvm/BoehmGC/gc.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/BoehmGC/gc.cpp?rev=73028&r1=73027&r2=73028&view=diff ============================================================================== --- vmkit/trunk/lib/Mvm/BoehmGC/gc.cpp (original) +++ vmkit/trunk/lib/Mvm/BoehmGC/gc.cpp Sun Jun 7 09:01:12 2009 @@ -16,7 +16,7 @@ GC_init(); } -void Collector::initialise(markerFn mark) { +void Collector::initialise() { GC_INIT(); } Modified: vmkit/trunk/lib/Mvm/CommonThread/ctthread.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/CommonThread/ctthread.cpp?rev=73028&r1=73027&r2=73028&view=diff ============================================================================== --- vmkit/trunk/lib/Mvm/CommonThread/ctthread.cpp (original) +++ vmkit/trunk/lib/Mvm/CommonThread/ctthread.cpp Sun Jun 7 09:01:12 2009 @@ -7,6 +7,7 @@ // //===----------------------------------------------------------------------===// +#include "MvmGC.h" #include "mvm/VirtualMachine.h" #include "mvm/Threads/Cond.h" #include "mvm/Threads/Locks.h" Modified: vmkit/trunk/lib/Mvm/Compiler/JIT.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/Compiler/JIT.cpp?rev=73028&r1=73027&r2=73028&view=diff ============================================================================== --- vmkit/trunk/lib/Mvm/Compiler/JIT.cpp (original) +++ vmkit/trunk/lib/Mvm/Compiler/JIT.cpp Sun Jun 7 09:01:12 2009 @@ -18,6 +18,7 @@ #include #include #include +#include #include #include #include @@ -25,9 +26,7 @@ #include -#include "mvm/CompilationUnit.h" #include "mvm/JIT.h" -#include "mvm/Object.h" #include "mvm/Threads/Locks.h" #include "mvm/Threads/Thread.h" @@ -41,6 +40,11 @@ } } +const char* MvmModule::getHostTriple() { + return LLVM_HOSTTRIPLE; +} + + void MvmModule::initialise(CodeGenOpt::Level level, Module* M, TargetMachine* T) { llvm::NoFramePointerElim = true; Modified: vmkit/trunk/lib/Mvm/GCMmap2/MvmGC.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/GCMmap2/MvmGC.h?rev=73028&r1=73027&r2=73028&view=diff ============================================================================== --- vmkit/trunk/lib/Mvm/GCMmap2/MvmGC.h (original) +++ vmkit/trunk/lib/Mvm/GCMmap2/MvmGC.h Sun Jun 7 09:01:12 2009 @@ -11,83 +11,352 @@ #ifndef MVM_MMAP_GC_H #define MVM_MMAP_GC_H +#include "mvm/Config/config.h" #include #include "mvm/GC/GC.h" #include "types.h" +#include "gcalloc.h" +#include "gcthread.h" #define gc_allocator std::allocator #define gc_new(Class) __gc_new(Class::VT) Class #define __gc_new new -#ifdef MULTIPLE_GC -#define STATIC_TRACER(type) staticTracer(type* obj, void* GC) -#define TRACER tracer(void* GC) -#define CALL_TRACER tracer(GC) -#define MARK_AND_TRACE markAndTrace((Collector*)GC) -#else -#define STATIC_TRACER(type) staticTracer(type* obj) #define TRACER tracer() -#define CALL_TRACER tracer() #define MARK_AND_TRACE markAndTrace() -#endif +#define CALL_TRACER tracer() namespace mvm { class Thread; } -class Collector; -class gc : public gcRoot { + + +namespace mvm { + +class Collector { +#ifdef HAVE_PTHREAD + friend class GCThread; +#endif + static GCAllocator *allocator; /* The allocator */ + + + static GCChunkNode *used_nodes; /* Used memory nodes */ + static GCChunkNode *unused_nodes; /* Unused memory nodes */ + static unsigned int current_mark; + + static int _collect_freq_auto; /* Collection frequency in gcmalloc/gcrealloc */ + static int _collect_freq_maybe; /* Collection frequency in maybeCollect */ + static int _since_last_collection; /* Bytes left since last collection */ + static bool _enable_auto; /* Automatic collection? */ + static bool _enable_maybe; /* Collection in maybeCollect()? */ + static bool _enable_collection; /* collection authorized? */ + static int status; + + + enum { stat_collect, stat_finalize, stat_alloc, stat_broken }; + +#ifdef HAVE_PTHREAD + static void siggc_handler(int); + static inline void lock() { threads->lock(); } + static inline void unlock() { threads->unlock(); } +#else + static void siggc_handler(int) { } + static inline void lock() { } + static inline void unlock() { } +#endif + + /* Interface for collection, verifies enable_collect */ + static void collect_unprotect(); + /* The collection */ + static void do_collect(); + + static inline GCChunkNode *o2node(const void *p) { + if (!p) return 0; + return GCHash::get((void*)p)->o2node((void*)p, GCChunkNode::maskCollectable); + } + + static inline size_t real_nbb(GCChunkNode *n) { + return n->nbb() - sizeof(gc_header); + } + public: - -#ifndef MULTIPLE_GC - void markAndTrace() const; - size_t objectSize() const; - void * operator new(size_t sz, VirtualTable *VT); - void * operator new(size_t sz); - void operator delete(void *); - void * realloc(size_t n); + static GCThread *threads; /* le gestionnaire de thread et de synchro */ + static void (*internMemoryError)(unsigned int); + static bool isLive(void* ptr) { + GCChunkNode *node = o2node(ptr); + + if(node && isMarked(node)) return true; + else return false; + } + + static void initialise(); + static void destroy(); + + static int siggc(); + + static void inject_my_thread(mvm::Thread* th); + static inline void remove_my_thread(mvm::Thread* th) { + threads->remove(th); + } + + static inline void *allocate_unprotected(size_t sz) { + return allocator->alloc(sz); + } + + static inline void free_unprotected(void *ptr) { + allocator->free(ptr); + } + + static inline void *begOf(const void *p) { + GCChunkNode *node = o2node(p); + if(node) + return node->chunk()->_2gc(); + else + return 0; + } + + static void gcStats(size_t *no, size_t *nbb); + + static inline size_t objectSize(void *ptr) { + GCChunkNode *node = o2node(ptr); + return node ? real_nbb(node) : 0; + } + + static inline void collect() { + lock(); + collect_unprotect(); + unlock(); + } + + static inline void maybeCollect() { + if(_enable_auto && +#ifdef SERVICE + (mvm::Thread::get()->MyVM->_since_last_collection <= (_collect_freq_auto - _collect_freq_maybe)) #else - void markAndTrace(Collector* GC) const; - size_t objectSize(Collector* GC) const; - void * operator new(size_t sz, VirtualTable *VT, Collector* GC); - void * operator new(size_t sz, Collector* GC); - void operator delete(void *, Collector* GC); - void * realloc(size_t n, Collector* GC); + (_since_last_collection <= (_collect_freq_auto - _collect_freq_maybe)) #endif + ) + collect(); + } + + static inline void *gcmalloc(VirtualTable *vt, size_t n) { +#if (__WORDSIZE == 64) + void* res = malloc(n); + memset(res, 0, n); + ((void**)res)[0] = vt; + return res; +#else + lock(); + +#ifdef SERVICE + if (threads->get_nb_threads()) { + VirtualMachine* vm = mvm::Thread::get()->MyVM; + vm->_since_last_collection -= n; + if (_enable_auto && (vm->_since_last_collection <= 0)) { + vm->gcTriggered++; + if (vm->gcTriggered > vm->GCLimit) { + vm->_since_last_collection += n; + unlock(); + vm->stopService(); + return 0; + } + collect_unprotect(); + } + + if (vm->memoryUsed + n > vm->memoryLimit) { + vm->_since_last_collection += n; + unlock(); + vm->stopService(); + return 0; + } + } else { +#endif + + _since_last_collection -= n; + if(_enable_auto && (_since_last_collection <= 0)) { + collect_unprotect(); + } +#ifdef SERVICE + } +#endif + register GCChunkNode *header = allocator->alloc_chunk(n, 1, current_mark & 1); + +#ifdef SERVICE + if (threads->get_nb_threads()) { + VirtualMachine* vm = mvm::Thread::get()->MyVM; + header->meta = vm; + vm->memoryUsed += n; + } +#endif + header->append(used_nodes); + //printf("Allocate %d bytes at %p [%p] %d %d\n", n, header->chunk()->_2gc(), + // header, header->nbb(), real_nbb(header)); + register struct gc_header *p = header->chunk(); + p->_XXX_vt = vt; + + + unlock(); + + if (vt->destructor) { + mvm::Thread::get()->MyVM->addFinalizationCandidate((gc*)p->_2gc()); + } + + return p->_2gc(); +#endif + } + + static inline void *gcrealloc(void *ptr, size_t n) { +#if (__WORDSIZE == 64) + void* res = realloc(ptr, n); + return res; +#else + lock(); + + GCPage *desc = GCHash::get(ptr); + GCChunkNode *node = desc->o2node(ptr, GCChunkNode::maskCollectable); + + if(!node) + gcfatal("%p isn't a avalid object", ptr); + + size_t old_sz = node->nbb(); +#ifdef SERVICE + if (threads->get_nb_threads()) { + VirtualMachine* vm = mvm::Thread::get()->MyVM; + vm->_since_last_collection -= (n - old_sz); + if (_enable_auto && (vm->_since_last_collection <= 0)) { + if (vm->gcTriggered + 1 > vm->GCLimit) { + unlock(); + vm->stopService(); + return 0; + } + vm->gcTriggered++; + collect_unprotect(); + } + + if (vm->memoryUsed + (n - old_sz) > vm->memoryLimit) { + vm->_since_last_collection += (n - old_sz); + unlock(); + vm->stopService(); + return 0; + } + } else { +#endif + + _since_last_collection -= (n - old_sz); + + if(_enable_auto && (_since_last_collection <= 0)) { + collect_unprotect(); + } + +#ifdef SERVICE + } +#endif + + GCChunkNode *res = allocator->realloc_chunk(desc, node, n); + +#ifdef SERVICE + if (threads->get_nb_threads()) { + VirtualMachine* vm = mvm::Thread::get()->MyVM; + res->meta = vm; + vm->memoryUsed += (n - old_sz); + } +#endif + + if(res != node) { + res->append(used_nodes); + mark(res); + } + + gc_header *obj = res->chunk(); + + unlock(); + return obj->_2gc(); +#endif + } + + static inline unsigned int enable(unsigned int n) { + register unsigned int old = _enable_collection; + _enable_collection = n; + return old; + } + + static inline bool isMarked(GCChunkNode *node) { + return node->mark() == (current_mark & 1); + } + + static inline void mark(GCChunkNode *node) { + node->_mark(current_mark & 1); + } + + static inline void trace(GCChunkNode *node) { + gc_header *o = node->chunk(); + o->_2gc()->tracer(); + } + + static inline void markAndTrace(void *ptr) { + GCChunkNode *node = o2node(ptr); + + if(node && !isMarked(node)) { + mark(node); + node->remove(); + node->prepend(used_nodes); + } + } + + static int getMaxMemory() { + return 0; + } + + static int getFreeMemory() { + return 0; + } + + static int getTotalMemory() { + return 0; + } + + void setMaxMemory(size_t sz){ + } + + void setMinMemory(size_t sz){ + } }; -class Collector { +} + + +class gc : public gcRoot { public: - typedef void (*markerFn)(void*); - - static void initialise(markerFn mark); - static void destroy(); + + void markAndTrace() const { + mvm::Collector::markAndTrace((void*)this); + } + + size_t objectSize() const { + return mvm::Collector::objectSize((void*)this); + } + + void* operator new(size_t sz, VirtualTable *VT) { + return mvm::Collector::gcmalloc(VT, sz); + } + + void* operator new(size_t sz) { + return malloc(sz); + } + + void operator delete(void *) { + gcfatal(0, "never call directly a destructor....."); + } + + void* realloc(size_t n) { + return mvm::Collector::gcrealloc(this, n); + } - static void die_if_sigsegv_occured_during_collection(void *addr); - static int isStable(gc_lock_recovery_fct_t, int, int, int, int, - int, int, int, int); - static unsigned int enable(unsigned int n); - static void gcStats(size_t &no, size_t &nbb); - static void maybeCollect(); - static void collect(void); - static void inject_my_thread(mvm::Thread* th); - static void remove_my_thread(mvm::Thread* th); - - static bool isLive(void* ptr); - static gc *begOf(const void *o); - static int byteOffset(void *o); - inline static bool isObject(const void *o) { return begOf((void*)o); } - static void applyFunc(void (*func)(gcRoot *o, void *data), void *data); - static void registerMemoryError(void (*func)(unsigned int)); - static int getMaxMemory(void); - static int getFreeMemory(void); - static int getTotalMemory(void); - static void setMaxMemory(size_t); - static void setMinMemory(size_t); }; #endif Modified: vmkit/trunk/lib/Mvm/GCMmap2/gc.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/GCMmap2/gc.cpp?rev=73028&r1=73027&r2=73028&view=diff ============================================================================== --- vmkit/trunk/lib/Mvm/GCMmap2/gc.cpp (original) +++ vmkit/trunk/lib/Mvm/GCMmap2/gc.cpp Sun Jun 7 09:01:12 2009 @@ -11,195 +11,42 @@ #include #include "mvm/GC/GC.h" -#include "gccollector.h" +#include "MvmGC.h" #include "gcerror.h" using namespace mvm; -typedef void (*memoryError_t)(unsigned int); - -memoryError_t GCCollector::internMemoryError; - -#ifndef MULTIPLE_GC - -void gc::markAndTrace() const { - GCCollector::markAndTrace((void*)this); -} - extern "C" void MarkAndTrace(gc* gc) { - GCCollector::markAndTrace((void*)gc); + Collector::markAndTrace((void*)gc); } -extern "C" gc* gcmalloc(size_t sz, VirtualTable* VT) { - return (gc*)GCCollector::gcmalloc(VT, sz); -} - -size_t gc::objectSize() const { - return GCCollector::objectSize((gc*)this); -} - -void *gc::operator new(size_t sz, VirtualTable *vt) { - return GCCollector::gcmalloc(vt, sz); -} - -void *gc::operator new(size_t sz) { - return malloc(sz); -} - -void gc::operator delete(void *) { - gcfatal(0, "never call directly a destructor....."); -} - -void *gc::realloc(size_t n) { - return GCCollector::gcrealloc(this, n); -} - -#else - -void gc::markAndTrace(Collector* GC) const { - ((GCCollector*)GC)->markAndTrace((void*)this); -} - -extern "C" void MarkAndTrace(gc* gc, Collector* GC) { - ((GCCollector*)GC)->markAndTrace((void*)gc); -} - -extern "C" gc* gcmalloc(size_t sz, VirtualTable* VT, Collector* GC) { - return (gc*)((GCCollector*)GC)->gcmalloc(VT, sz); -} - -size_t gc::objectSize(Collector* GC) const { - return ((GCCollector*)GC)->objectSize((gc*)this); -} - -void *gc::operator new(size_t sz, VirtualTable *VT, Collector* GC) { - return ((GCCollector*)GC)->gcmalloc(VT, sz); -} - -void *gc::operator new(size_t sz, Collector* GC) { - return malloc(sz); -} - -void gc::operator delete(void *, Collector* GC) { - gcfatal(0, "never call directly a destructor....."); -} - -void *gc::realloc(size_t n, Collector* GC) { - return ((GCCollector*)GC)->gcrealloc(this, n); -} -#endif - -unsigned int Collector::enable(unsigned int n) { - return GCCollector::enable(n); -} - -int Collector::isStable(gc_lock_recovery_fct_t fct, int a0, int a1, int a2, - int a3, int a4, int a5, int a6, int a7) { - return GCCollector::isStable(fct, a0, a1, a2, a3, a4, a5, a6, a7); -} - -void Collector::die_if_sigsegv_occured_during_collection(void *addr) { - GCCollector::die_if_sigsegv_occured_during_collection(addr); -} - -void Collector::gcStats(size_t &no, size_t &nbb) { - GCCollector::gcStats(&no, &nbb); -} - -void Collector::initialise(markerFn marker) { - GCCollector::initialise(marker); -} - -void Collector::destroy() { - GCCollector::destroy(); -} - -void Collector::inject_my_thread(mvm::Thread* th) { -#ifdef HAVE_PTHREAD - GCCollector::inject_my_thread(th); -#endif -} - -void Collector::maybeCollect() { - GCCollector::maybeCollect(); -} - -void Collector::collect(void) { - GCCollector::collect(); -} - -gc *Collector::begOf(const void *obj) { - return (gc*)GCCollector::begOf((void*)obj); -} - -int Collector::byteOffset(void *obj) { - int beg = (intptr_t)GCCollector::begOf(obj); - intptr_t off = (intptr_t)obj; - return (off-beg); -} - -bool Collector::isLive(void* ptr) { - return GCCollector::isLive(ptr); -} - -void Collector::applyFunc(void (*func)(gcRoot *o, void *data), void *data) { - return GCCollector::applyFunc(func, data); -} - -int Collector::getMaxMemory(void){ - return 0; -} - -int Collector::getFreeMemory(void){ - return 0; -} - -int Collector::getTotalMemory(void){ - return 0; -} - -void Collector::setMaxMemory(size_t sz){ -} - -void Collector::setMinMemory(size_t sz){ -} - -void Collector::registerMemoryError(void (*func)(unsigned int)){ - GCCollector::internMemoryError = func; - //onMemoryError = &GCCollector::defaultMemoryError; -} - -void Collector::remove_my_thread(mvm::Thread* th) { -#ifdef HAVE_PTHREAD - GCCollector::remove_thread(th); -#endif +extern "C" void* gcmalloc(size_t sz, VirtualTable* VT) { + return Collector::gcmalloc(VT, sz); } void GCThread::waitCollection() { mvm::Thread* th = mvm::Thread::get(); - unsigned int cm = GCCollector::current_mark; + unsigned int cm = Collector::current_mark; if(th != current_collector) { collectorGo(); - while((GCCollector::current_mark == cm) && - (GCCollector::status == GCCollector::stat_collect)) + while((Collector::current_mark == cm) && + (Collector::status == Collector::stat_collect)) _collectionCond.wait(&_stackLock); } } -#ifdef HAVE_PTHREAD - -void GCCollector::siggc_handler(int) { +void Collector::siggc_handler(int) { mvm::Thread* th = mvm::Thread::get(); jmp_buf buf; setjmp(buf); - GCCollector::threads->stackLock(); + Collector::threads->stackLock(); if(!th) /* The thread is being destroyed */ - GCCollector::threads->another_mark(); + Collector::threads->another_mark(); else { register unsigned int **cur = (unsigned int**)(void*)&buf; register unsigned int **max = (unsigned int**)th->baseSP; @@ -207,16 +54,15 @@ GCChunkNode *node; for(; curremove(); - node->append(GCCollector::used_nodes); - GCCollector::mark(node); + node->append(Collector::used_nodes); + Collector::mark(node); } } - GCCollector::threads->another_mark(); - GCCollector::threads->waitCollection(); + Collector::threads->another_mark(); + Collector::threads->waitCollection(); } - GCCollector::threads->stackUnlock(); + Collector::threads->stackUnlock(); } -#endif // HAVE_PTHREAD Modified: vmkit/trunk/lib/Mvm/GCMmap2/gccollector.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/GCMmap2/gccollector.cpp?rev=73028&r1=73027&r2=73028&view=diff ============================================================================== --- vmkit/trunk/lib/Mvm/GCMmap2/gccollector.cpp (original) +++ vmkit/trunk/lib/Mvm/GCMmap2/gccollector.cpp Sun Jun 7 09:01:12 2009 @@ -7,37 +7,32 @@ // //===----------------------------------------------------------------------===// -#include "gccollector.h" +#include "MvmGC.h" using namespace mvm; -GCAllocator *GCCollector::allocator = 0; +GCAllocator *Collector::allocator = 0; #ifdef HAVE_PTHREAD -GCThread *GCCollector::threads; +GCThread *Collector::threads; #endif -GCCollector::markerFn GCCollector::_marker; +int Collector::status; -int GCCollector::status; +GCChunkNode *Collector::used_nodes; +GCChunkNode *Collector::unused_nodes; -GCChunkNode *GCCollector::used_nodes; -GCChunkNode *GCCollector::unused_nodes; +unsigned int Collector::current_mark; -unsigned int GCCollector::current_mark; +int Collector::_collect_freq_auto; +int Collector::_collect_freq_maybe; +int Collector::_since_last_collection; -int GCCollector::_collect_freq_auto; -int GCCollector::_collect_freq_maybe; -int GCCollector::_since_last_collection; +bool Collector::_enable_auto; +bool Collector::_enable_maybe; +bool Collector::_enable_collection; -bool GCCollector::_enable_auto; -bool GCCollector::_enable_maybe; -bool GCCollector::_enable_collection; - -typedef void (*destructor_t)(void*); - -void GCCollector::do_collect() { - //printf("----- do collect -----\n"); +void Collector::do_collect() { GCChunkNode *cur; #ifdef SERVICE mvm::Thread::get()->MyVM->_since_last_collection = _collect_freq_auto; @@ -52,9 +47,7 @@ mvm::Thread* th = mvm::Thread::get(); th->MyVM->startCollection(); -#ifdef HAVE_PTHREAD threads->synchronize(); -#endif mvm::Thread* tcur = th; @@ -83,59 +76,36 @@ // (7) Trace the phantom reference queue. th->MyVM->scanPhantomReferencesQueue(); - if(_marker) - _marker(0); status = stat_finalize; /* finalize */ GCChunkNode finalizable; finalizable.attrape(unused_nodes); - status = stat_alloc; /* kill everyone */ GCChunkNode *next = 0; for(cur=finalizable.next(); cur!=&finalizable; cur=next) { - //printf(" !!!! reject %p [%p]\n", cur->chunk()->_2gc(), cur); next = cur->next(); allocator->reject_chunk(cur); } + status = stat_alloc; th->MyVM->endCollection(); -#ifdef HAVE_PTHREAD threads->collectionFinished(); -#endif th->MyVM->wakeUpFinalizers(); th->MyVM->wakeUpEnqueue(); } -void GCCollector::collect_unprotect() { +void Collector::collect_unprotect() { if(_enable_collection && (status == stat_alloc)) { status = stat_collect; do_collect(); } } -#ifdef HAVE_PTHREAD -void GCCollector::die_if_sigsegv_occured_during_collection(void *addr) { - if(!isStable(0, 0, 0, 0, 0, 0, 0, 0, 0)) { - printf("; ****************************************************** ;\n"); - printf("; SIGSEGV occured during a collection ;\n"); - printf("; I'm trying to let the allocator in a coherent stat ;\n"); - printf("; but the collector is DEAD and will never collect again ;\n"); - printf("; ****************************************************** ;\n"); - - status = stat_broken; /* Collection is finished and no other collection will happend */ - threads->cancel(); /* Emulates a full collection to unlock mutators */ - used_nodes->eat(unused_nodes); /* All nodes are uses. Finalized are lost */ - unlock_dont_recovery(); /* Unlocks the GC lock */ - //gcfatal("SIGSEGV occured during collection at %p", addr); - } -} -#endif /* HAVE_PTHREAD */ - -void GCCollector::gcStats(size_t *_no, size_t *_nbb) { +void Collector::gcStats(size_t *_no, size_t *_nbb) { register unsigned int n, tot; register GCChunkNode *cur; lock(); Removed: vmkit/trunk/lib/Mvm/GCMmap2/gccollector.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/GCMmap2/gccollector.h?rev=73027&view=auto ============================================================================== --- vmkit/trunk/lib/Mvm/GCMmap2/gccollector.h (original) +++ vmkit/trunk/lib/Mvm/GCMmap2/gccollector.h (removed) @@ -1,324 +0,0 @@ -//===------------ gccollector.h - Mvm Garbage Collector -------------------===// -// -// Mvm -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// - -#ifndef _GC_COLLECTOR_H_ -#define _GC_COLLECTOR_H_ - -#include "mvm/Config/config.h" -#include "gcalloc.h" -#ifdef HAVE_PTHREAD -#include "gcthread.h" -#endif -#include "mvm/GC/GC.h" - -namespace mvm { - -class GCCollector : public Collector { - friend class Collector; -#ifdef HAVE_PTHREAD - friend class GCThread; -#endif - static GCAllocator *allocator; /* The allocator */ - - - static GCChunkNode *used_nodes; /* Used memory nodes */ - static GCChunkNode *unused_nodes; /* Unused memory nodes */ - static unsigned int current_mark; - - static int _collect_freq_auto; /* Collection frequency in gcmalloc/gcrealloc */ - static int _collect_freq_maybe; /* Collection frequency in maybeCollect */ - static int _since_last_collection; /* Bytes left since last collection */ - static bool _enable_auto; /* Automatic collection? */ - static bool _enable_maybe; /* Collection in maybeCollect()? */ - static bool _enable_collection; /* collection authorized? */ - static int status; - - - enum { stat_collect, stat_finalize, stat_alloc, stat_broken }; - -#ifdef HAVE_PTHREAD - static void siggc_handler(int); - static inline void lock() { threads->lock(); } - static inline void unlock() { threads->unlock(); } -#else - static void siggc_handler(int) { } - static inline void lock() { } - static inline void unlock() { } -#endif - - /* Interface for collection, verifies enable_collect */ - static void collect_unprotect(); - /* The collection */ - static void do_collect(); - - static inline GCChunkNode *o2node(void *p) { - if (!p) return 0; - return GCHash::get(p)->o2node(p, GCChunkNode::maskCollectable); - } - - static inline size_t real_nbb(GCChunkNode *n) { - return n->nbb() - sizeof(gc_header); - } - -public: - static Collector::markerFn _marker; /* The function which traces roots */ - static GCThread *threads; /* le gestionnaire de thread et de synchro */ - static void (*internMemoryError)(unsigned int); - - static bool isLive(void* ptr) { - GCChunkNode *node = o2node(ptr); - - if(node && isMarked(node)) return true; - else return false; - } - -#ifdef HAVE_PTHREAD - static inline void unlock_dont_recovery() { threads->unlock_dont_recovery(); } - static void die_if_sigsegv_occured_during_collection(void *addr); -#else - static void die_if_sigsegv_occured_during_collection(void *addr) { } -#endif - - static void defaultMemoryError(unsigned int sz){ - unlock(); - internMemoryError(sz); - lock(); - } - - static void initialise(Collector::markerFn marker); - static void destroy(); - - static int siggc(); - -#ifdef HAVE_PTHREAD - static void inject_my_thread(mvm::Thread* th); - static inline void remove_thread(mvm::Thread* th) { - threads->remove(th); - } - static inline int isStable(gc_lock_recovery_fct_t fct, int a0, int a1, int a2, - int a3, int a4, int a5, int a6, int a7) { - return threads->isStable(fct, a0, a1, a2, a3, a4, a5, a6, a7); - } -#else - static inline int isStable(gc_lock_recovery_fct_t fct, int a0, int a1, int a2, - int a3, int a4, int a5, int a6, int a7) { - return 0; - } -#endif - - static inline void *allocate_unprotected(size_t sz) { - return allocator->alloc(sz); - } - - static inline void free_unprotected(void *ptr) { - allocator->free(ptr); - } - - static inline void *begOf(void *p) { - GCChunkNode *node = o2node(p); - if(node) - return node->chunk()->_2gc(); - else - return 0; - } - - static void gcStats(size_t *no, size_t *nbb); - - static inline size_t objectSize(void *ptr) { - GCChunkNode *node = o2node(ptr); - return node ? real_nbb(node) : 0; - } - - static inline void collect() { - lock(); - collect_unprotect(); - unlock(); - } - - static inline void maybeCollect() { - if(_enable_auto && -#ifdef SERVICE - (mvm::Thread::get()->MyVM->_since_last_collection <= (_collect_freq_auto - _collect_freq_maybe)) -#else - (_since_last_collection <= (_collect_freq_auto - _collect_freq_maybe)) -#endif - ) - collect(); - } - - static inline void *gcmalloc(VirtualTable *vt, size_t n) { -#if (__WORDSIZE == 64) - void* res = malloc(n); - memset(res, 0, n); - ((void**)res)[0] = vt; - return res; -#else - lock(); - -#ifdef SERVICE - if (threads->get_nb_threads()) { - VirtualMachine* vm = mvm::Thread::get()->MyVM; - vm->_since_last_collection -= n; - if (_enable_auto && (vm->_since_last_collection <= 0)) { - vm->gcTriggered++; - if (vm->gcTriggered > vm->GCLimit) { - vm->_since_last_collection += n; - unlock(); - vm->stopService(); - return 0; - } - collect_unprotect(); - } - - if (vm->memoryUsed + n > vm->memoryLimit) { - vm->_since_last_collection += n; - unlock(); - vm->stopService(); - return 0; - } - } else { -#endif - - _since_last_collection -= n; - if(_enable_auto && (_since_last_collection <= 0)) { - collect_unprotect(); - } -#ifdef SERVICE - } -#endif - register GCChunkNode *header = allocator->alloc_chunk(n, 1, current_mark & 1); - -#ifdef SERVICE - if (threads->get_nb_threads()) { - VirtualMachine* vm = mvm::Thread::get()->MyVM; - header->meta = vm; - vm->memoryUsed += n; - } -#endif - header->append(used_nodes); - //printf("Allocate %d bytes at %p [%p] %d %d\n", n, header->chunk()->_2gc(), - // header, header->nbb(), real_nbb(header)); - register struct gc_header *p = header->chunk(); - p->_XXX_vt = vt; - - - unlock(); - - if (vt->destructor) { - mvm::Thread::get()->MyVM->addFinalizationCandidate((gc*)p->_2gc()); - } - - return p->_2gc(); -#endif - } - - static inline void *gcrealloc(void *ptr, size_t n) { -#if (__WORDSIZE == 64) - void* res = realloc(ptr, n); - return res; -#else - lock(); - - GCPage *desc = GCHash::get(ptr); - GCChunkNode *node = desc->o2node(ptr, GCChunkNode::maskCollectable); - - if(!node) - gcfatal("%p isn't a avalid object", ptr); - - size_t old_sz = node->nbb(); -#ifdef SERVICE - if (threads->get_nb_threads()) { - VirtualMachine* vm = mvm::Thread::get()->MyVM; - vm->_since_last_collection -= (n - old_sz); - if (_enable_auto && (vm->_since_last_collection <= 0)) { - if (vm->gcTriggered + 1 > vm->GCLimit) { - unlock(); - vm->stopService(); - return 0; - } - vm->gcTriggered++; - collect_unprotect(); - } - - if (vm->memoryUsed + (n - old_sz) > vm->memoryLimit) { - vm->_since_last_collection += (n - old_sz); - unlock(); - vm->stopService(); - return 0; - } - } else { -#endif - - _since_last_collection -= (n - old_sz); - - if(_enable_auto && (_since_last_collection <= 0)) { - collect_unprotect(); - } - -#ifdef SERVICE - } -#endif - - GCChunkNode *res = allocator->realloc_chunk(desc, node, n); - -#ifdef SERVICE - if (threads->get_nb_threads()) { - VirtualMachine* vm = mvm::Thread::get()->MyVM; - res->meta = vm; - vm->memoryUsed += (n - old_sz); - } -#endif - - if(res != node) { - res->append(used_nodes); - mark(res); - } - - gc_header *obj = res->chunk(); - - unlock(); - return obj->_2gc(); -#endif - } - - static inline unsigned int enable(unsigned int n) { - register unsigned int old = _enable_collection; - _enable_collection = n; - return old; - } - - static inline bool isMarked(GCChunkNode *node) { - return node->mark() == (current_mark & 1); - } - - static inline void mark(GCChunkNode *node) { - node->_mark(current_mark & 1); - } - - static inline void trace(GCChunkNode *node) { - gc_header *o = node->chunk(); - o->_2gc()->tracer(); - markAndTrace(o); - } - - static inline void markAndTrace(void *ptr) { - GCChunkNode *node = o2node(ptr); - - if(node && !isMarked(node)) { - mark(node); - node->remove(); - node->append(used_nodes); - trace(node); - } - } - -}; - -} -#endif Modified: vmkit/trunk/lib/Mvm/GCMmap2/gcinit.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/GCMmap2/gcinit.cpp?rev=73028&r1=73027&r2=73028&view=diff ============================================================================== --- vmkit/trunk/lib/Mvm/GCMmap2/gcinit.cpp (original) +++ vmkit/trunk/lib/Mvm/GCMmap2/gcinit.cpp Sun Jun 7 09:01:12 2009 @@ -8,7 +8,7 @@ //===----------------------------------------------------------------------===// #include -#include "gccollector.h" +#include "MvmGC.h" using namespace mvm; @@ -21,11 +21,11 @@ # define SIGGC SIGPWR #endif -int GCCollector::siggc() { +int Collector::siggc() { return SIGGC; } -void GCCollector::initialise(Collector::markerFn marker) { +void Collector::initialise() { used_nodes = new GCChunkNode(); unused_nodes = new GCChunkNode(); @@ -49,9 +49,8 @@ allocator = new GCAllocator(); - _marker = marker; - used_nodes->alone(); + unused_nodes->alone(); current_mark = 0; status = stat_alloc; @@ -67,13 +66,13 @@ } -void GCCollector::destroy() { +void Collector::destroy() { delete allocator; allocator = 0; } #ifdef HAVE_PTHREAD -void GCCollector::inject_my_thread(mvm::Thread* th) { +void Collector::inject_my_thread(mvm::Thread* th) { threads->inject(th); } #endif Modified: vmkit/trunk/lib/Mvm/GCMmap2/gcthread.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/GCMmap2/gcthread.cpp?rev=73028&r1=73027&r2=73028&view=diff ============================================================================== --- vmkit/trunk/lib/Mvm/GCMmap2/gcthread.cpp (original) +++ vmkit/trunk/lib/Mvm/GCMmap2/gcthread.cpp Sun Jun 7 09:01:12 2009 @@ -8,7 +8,7 @@ //===----------------------------------------------------------------------===// #include -#include "gccollector.h" +#include "MvmGC.h" using namespace mvm; @@ -20,7 +20,7 @@ } void GCThread::synchronize() { - int signo = GCCollector::siggc(); + int signo = Collector::siggc(); mvm::Thread* self = mvm::Thread::get(); assert(self && "No thread local data for this thread"); current_collector = self; @@ -31,7 +31,7 @@ cur->kill(signo); } - GCCollector::siggc_handler(signo); + Collector::siggc_handler(signo); waitStacks(); } Modified: vmkit/trunk/lib/Mvm/Runtime/Object.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/Runtime/Object.cpp?rev=73028&r1=73027&r2=73028&view=diff ============================================================================== --- vmkit/trunk/lib/Mvm/Runtime/Object.cpp (original) +++ vmkit/trunk/lib/Mvm/Runtime/Object.cpp Sun Jun 7 09:01:12 2009 @@ -287,3 +287,23 @@ CurrentIndex = NewIndex; } + +void* Allocator::allocateManagedObject(unsigned int sz, VirtualTable* VT) { + return gc::operator new(sz, VT); +} + +void* Allocator::allocatePermanentMemory(unsigned int sz) { + return malloc(sz); +} + +void Allocator::freePermanentMemory(void* obj) { + return free(obj); +} + +void* Allocator::allocateTemporaryMemory(unsigned int sz) { + return malloc(sz); +} + +void Allocator::freeTemporaryMemory(void* obj) { + return free(obj); +} Modified: vmkit/trunk/lib/N3/VMCore/MSCorlib.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/N3/VMCore/MSCorlib.cpp?rev=73028&r1=73027&r2=73028&view=diff ============================================================================== --- vmkit/trunk/lib/N3/VMCore/MSCorlib.cpp (original) +++ vmkit/trunk/lib/N3/VMCore/MSCorlib.cpp Sun Jun 7 09:01:12 2009 @@ -226,7 +226,7 @@ #ifdef MULTIPLE_GC VMThread::get()->GC->collect(); #else - Collector::collect(); + mvm::Collector::collect(); #endif } Modified: vmkit/trunk/tools/jnjvm/Main.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tools/jnjvm/Main.cpp?rev=73028&r1=73027&r2=73028&view=diff ============================================================================== --- vmkit/trunk/tools/jnjvm/Main.cpp (original) +++ vmkit/trunk/tools/jnjvm/Main.cpp Sun Jun 7 09:01:12 2009 @@ -27,7 +27,7 @@ llvm::llvm_shutdown_obj X; MvmModule::initialise(); - Collector::initialise(0); + Collector::initialise(); JavaJITCompiler* Comp = new JavaJITCompiler("JITModule"); mvm::MvmModule::AddStandardCompilePasses(); Modified: vmkit/trunk/tools/n3-mono/Main.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tools/n3-mono/Main.cpp?rev=73028&r1=73027&r2=73028&view=diff ============================================================================== --- vmkit/trunk/tools/n3-mono/Main.cpp (original) +++ vmkit/trunk/tools/n3-mono/Main.cpp Sun Jun 7 09:01:12 2009 @@ -21,7 +21,7 @@ llvm::llvm_shutdown_obj X; MvmModule::initialise(); - Collector::initialise(0); + Collector::initialise(); VirtualMachine::initialiseCLIVM(); VirtualMachine* vm = VirtualMachine::createCLIVM(); Modified: vmkit/trunk/tools/n3-pnetlib/Main.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tools/n3-pnetlib/Main.cpp?rev=73028&r1=73027&r2=73028&view=diff ============================================================================== --- vmkit/trunk/tools/n3-pnetlib/Main.cpp (original) +++ vmkit/trunk/tools/n3-pnetlib/Main.cpp Sun Jun 7 09:01:12 2009 @@ -21,7 +21,7 @@ llvm::llvm_shutdown_obj X; MvmModule::initialise(); - Collector::initialise(0); + Collector::initialise(); VirtualMachine::initialiseCLIVM(); VirtualMachine* vm = VirtualMachine::createCLIVM(); Modified: vmkit/trunk/tools/vmjc/vmjc.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tools/vmjc/vmjc.cpp?rev=73028&r1=73027&r2=73028&view=diff ============================================================================== --- vmkit/trunk/tools/vmjc/vmjc.cpp (original) +++ vmkit/trunk/tools/vmjc/vmjc.cpp Sun Jun 7 09:01:12 2009 @@ -22,7 +22,6 @@ #include "llvm/PassManager.h" #include "llvm/Assembly/PrintModulePass.h" #include "llvm/CodeGen/LinkAllCodegenComponents.h" -#include "llvm/Config/config.h" #include "llvm/Bitcode/ReaderWriter.h" #include "llvm/ExecutionEngine/ExecutionEngine.h" #include "llvm/Support/CommandLine.h" @@ -186,7 +185,7 @@ if (!TargetTriple.empty()) TheModule->setTargetTriple(TargetTriple); else - TheModule->setTargetTriple(LLVM_HOSTTRIPLE); + TheModule->setTargetTriple(mvm::MvmModule::getHostTriple()); // Create the TargetMachine we will be generating code with. std::string Err; @@ -213,8 +212,8 @@ Comp = new JavaJITCompiler("JIT"); } - Collector::initialise(0); - Collector::enable(0); + mvm::Collector::initialise(); + mvm::Collector::enable(0); JnjvmClassLoader* JCL = mvm::VirtualMachine::initialiseJVM(Comp, false); addCommandLinePass(argv); Modified: vmkit/trunk/tools/vmkit/CommandLine.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tools/vmkit/CommandLine.h?rev=73028&r1=73027&r2=73028&view=diff ============================================================================== --- vmkit/trunk/tools/vmkit/CommandLine.h (original) +++ vmkit/trunk/tools/vmkit/CommandLine.h Sun Jun 7 09:01:12 2009 @@ -14,6 +14,7 @@ #include +#include "mvm/Object.h" #include "mvm/VirtualMachine.h" #if defined(__APPLE__) Modified: vmkit/trunk/tools/vmkit/Launcher.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tools/vmkit/Launcher.cpp?rev=73028&r1=73027&r2=73028&view=diff ============================================================================== --- vmkit/trunk/tools/vmkit/Launcher.cpp (original) +++ vmkit/trunk/tools/vmkit/Launcher.cpp Sun Jun 7 09:01:12 2009 @@ -133,7 +133,7 @@ } mvm::MvmModule::initialise(Fast ? CodeGenOpt::None : CodeGenOpt::Aggressive); - Collector::initialise(0); + mvm::Collector::initialise(); if (VMToRun == RunJava) { #if WITH_JNJVM From nicolas.geoffray at lip6.fr Sun Jun 7 07:27:46 2009 From: nicolas.geoffray at lip6.fr (Nicolas Geoffray) Date: Sun, 07 Jun 2009 14:27:46 -0000 Subject: [vmkit-commits] [vmkit] r73029 - in /vmkit/trunk: include/mvm/GC/GC.h lib/Mvm/Allocator/gcchunk.h lib/Mvm/GCMmap2/MvmGC.h lib/Mvm/GCMmap2/gcthread.cpp lib/Mvm/GCMmap2/gcthread.h lib/Mvm/Runtime/Object.cpp Message-ID: <200906071427.n57ERlgO024946@zion.cs.uiuc.edu> Author: geoffray Date: Sun Jun 7 09:27:46 2009 New Revision: 73029 URL: http://llvm.org/viewvc/llvm-project?rev=73029&view=rev Log: More code cleanup. Modified: vmkit/trunk/include/mvm/GC/GC.h vmkit/trunk/lib/Mvm/Allocator/gcchunk.h vmkit/trunk/lib/Mvm/GCMmap2/MvmGC.h vmkit/trunk/lib/Mvm/GCMmap2/gcthread.cpp vmkit/trunk/lib/Mvm/GCMmap2/gcthread.h vmkit/trunk/lib/Mvm/Runtime/Object.cpp Modified: vmkit/trunk/include/mvm/GC/GC.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/mvm/GC/GC.h?rev=73029&r1=73028&r2=73029&view=diff ============================================================================== --- vmkit/trunk/include/mvm/GC/GC.h (original) +++ vmkit/trunk/include/mvm/GC/GC.h Sun Jun 7 09:27:46 2009 @@ -13,8 +13,6 @@ #include -typedef void (*gc_lock_recovery_fct_t)(int, int, int, int, int, int, int, int); - struct VirtualTable { uintptr_t destructor; uintptr_t operatorDelete; @@ -38,11 +36,7 @@ class gcRoot { public: virtual ~gcRoot() {} -#ifdef MULTIPLE_GC - virtual void tracer(void* GC) {} -#else virtual void tracer(void) {} -#endif /// getVirtualTable - Returns the virtual table of this object. /// @@ -57,18 +51,4 @@ } }; -typedef void (*destructor_t)(void*); - -class gc_header { -public: - VirtualTable *_XXX_vt; - inline gcRoot *_2gc() { return (gcRoot *)this; } - destructor_t getDestructor() { - return (destructor_t)this->_XXX_vt->destructor; - } - destructor_t getDelete() { - return (destructor_t)this->_XXX_vt->operatorDelete; - } -}; - #endif Modified: vmkit/trunk/lib/Mvm/Allocator/gcchunk.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/Allocator/gcchunk.h?rev=73029&r1=73028&r2=73029&view=diff ============================================================================== --- vmkit/trunk/lib/Mvm/Allocator/gcchunk.h (original) +++ vmkit/trunk/lib/Mvm/Allocator/gcchunk.h Sun Jun 7 09:27:46 2009 @@ -15,15 +15,14 @@ #include "gcmapper.h" #include "types.h" -class gc; /* object collectable */ -class gc_header; /* entete locale */ +class gcRoot; /* object collectable */ /* description d'un bout de mémoire */ class GCChunkNode { GCChunkNode *_prev; /* bit 0-1: l'age, les autres: le previous */ GCChunkNode *_next; void * _chunk; - uintptr_t _nbb_mark; /* nbb = 0 <=> ce chunk est libre */ + uintptr_t _nbb_mark; /* nbb = 0 <=> ce chunk est libre */ /* bit 0-2: la marque */ /* bit 3: est-on collectable */ public: @@ -36,7 +35,7 @@ inline GCChunkNode() {} inline ~GCChunkNode() {} - inline gc_header * chunk() { return (gc_header *)_chunk; } + inline gcRoot * chunk() { return (gcRoot*)_chunk; } inline GCChunkNode * next() { return _next; } inline void next(GCChunkNode *n) { _next = n; } @@ -144,7 +143,7 @@ ? res : 0; } - inline gc_header *o2header(void *ptr, signed int mask) { + inline gcRoot *o2header(void *ptr, signed int mask) { register uintptr_t entry = ((uintptr_t)ptr - (uintptr_t)area())/_chunk_nbb; register GCChunkNode *res = _headers + entry; return ((uintptr_t)ptr - (uintptr_t)res->chunk() < res->nbb()) Modified: vmkit/trunk/lib/Mvm/GCMmap2/MvmGC.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/GCMmap2/MvmGC.h?rev=73029&r1=73028&r2=73029&view=diff ============================================================================== --- vmkit/trunk/lib/Mvm/GCMmap2/MvmGC.h (original) +++ vmkit/trunk/lib/Mvm/GCMmap2/MvmGC.h Sun Jun 7 09:27:46 2009 @@ -79,7 +79,7 @@ } static inline size_t real_nbb(GCChunkNode *n) { - return n->nbb() - sizeof(gc_header); + return n->nbb() - sizeof(gcRoot); } public: @@ -114,7 +114,7 @@ static inline void *begOf(const void *p) { GCChunkNode *node = o2node(p); if(node) - return node->chunk()->_2gc(); + return node->chunk(); else return 0; } @@ -193,19 +193,17 @@ } #endif header->append(used_nodes); - //printf("Allocate %d bytes at %p [%p] %d %d\n", n, header->chunk()->_2gc(), - // header, header->nbb(), real_nbb(header)); - register struct gc_header *p = header->chunk(); - p->_XXX_vt = vt; + register struct gcRoot *p = header->chunk(); + p->setVirtualTable(vt); unlock(); if (vt->destructor) { - mvm::Thread::get()->MyVM->addFinalizationCandidate((gc*)p->_2gc()); + mvm::Thread::get()->MyVM->addFinalizationCandidate((gc*)p); } - return p->_2gc(); + return p; #endif } @@ -271,10 +269,10 @@ mark(res); } - gc_header *obj = res->chunk(); + gcRoot *obj = res->chunk(); unlock(); - return obj->_2gc(); + return obj; #endif } @@ -293,8 +291,8 @@ } static inline void trace(GCChunkNode *node) { - gc_header *o = node->chunk(); - o->_2gc()->tracer(); + gcRoot *o = node->chunk(); + o->tracer(); } static inline void markAndTrace(void *ptr) { Modified: vmkit/trunk/lib/Mvm/GCMmap2/gcthread.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/GCMmap2/gcthread.cpp?rev=73029&r1=73028&r2=73029&view=diff ============================================================================== --- vmkit/trunk/lib/Mvm/GCMmap2/gcthread.cpp (original) +++ vmkit/trunk/lib/Mvm/GCMmap2/gcthread.cpp Sun Jun 7 09:27:46 2009 @@ -35,14 +35,3 @@ waitStacks(); } - -int GCLockRecovery::verify_recall(gc_lock_recovery_fct_t fct, int a0, int a1, - int a2, int a3, int a4, int a5, int a6, - int a7) { - if(selfOwner()) { - _fct = fct; _args[0] = a0; _args[1] = a1; _args[2] = a2; _args[3] = a3; - _args[4] = a4; _args[5] = a5; _args[6] = a6; _args[7] = a7; - return 0; - } else - return 1; -} Modified: vmkit/trunk/lib/Mvm/GCMmap2/gcthread.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/GCMmap2/gcthread.h?rev=73029&r1=73028&r2=73029&view=diff ============================================================================== --- vmkit/trunk/lib/Mvm/GCMmap2/gcthread.h (original) +++ vmkit/trunk/lib/Mvm/GCMmap2/gcthread.h Sun Jun 7 09:27:46 2009 @@ -16,39 +16,9 @@ namespace mvm { -class GCLockRecovery : public LockNormal { - gc_lock_recovery_fct_t _fct; - int _args[8]; - -public: - inline GCLockRecovery() { _fct = 0; } - - int verify_recall(gc_lock_recovery_fct_t fct, int a0, int a1, int a2, int a3, - int a4, int a5, int a6, int a7); - - inline void unlock_dont_recovery() { - if(selfOwner()) { - LockNormal::unlock(); - } - } - - inline void unlock() { - if(_fct) { - gc_lock_recovery_fct_t tmp = _fct; - int l[8]; - l[0] = _args[0]; l[1] = _args[1]; l[2] = _args[2]; l[3] = _args[3]; - l[4] = _args[4]; l[5] = _args[5]; l[6] = _args[6]; l[7] = _args[7]; - _fct = 0; - LockNormal::unlock(); - tmp(l[0], l[1], l[2], l[3], l[4], l[5], l[6], l[7]); - } else - LockNormal::unlock(); - } -}; - class GCThread { /// _globalLock - Global lock for gcmalloc. - GCLockRecovery _globalLock; + LockNormal _globalLock; /// _stackLock - Stack lock for synchronization. LockNormal _stackLock; @@ -85,11 +55,6 @@ } inline void lock() { _globalLock.lock(); } inline void unlock() { _globalLock.unlock(); } - inline void unlock_dont_recovery() { _globalLock.unlock_dont_recovery(); } - inline int isStable(gc_lock_recovery_fct_t fct, int a0, int a1, int a2, - int a3, int a4, int a5, int a6, int a7) { - return _globalLock.verify_recall(fct, a0, a1, a2, a3, a4, a5, a6, a7); - } inline void stackLock() { _stackLock.lock(); } inline void stackUnlock() { _stackLock.unlock(); } Modified: vmkit/trunk/lib/Mvm/Runtime/Object.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/Runtime/Object.cpp?rev=73029&r1=73028&r2=73029&view=diff ============================================================================== --- vmkit/trunk/lib/Mvm/Runtime/Object.cpp (original) +++ vmkit/trunk/lib/Mvm/Runtime/Object.cpp Sun Jun 7 09:27:46 2009 @@ -114,7 +114,7 @@ buf->write("\""); } - +typedef void (*destructor_t)(void*); void VirtualMachine::finalizerStart(mvm::Thread* th) { From nicolas.geoffray at lip6.fr Sun Jun 7 12:44:17 2009 From: nicolas.geoffray at lip6.fr (Nicolas Geoffray) Date: Sun, 07 Jun 2009 19:44:17 -0000 Subject: [vmkit-commits] [vmkit] r73035 - in /vmkit/trunk/lib/JnJVM: Classpath/ClasspathReflect.h VMCore/JavaClass.cpp VMCore/JavaClass.h VMCore/JavaObject.h VMCore/VirtualTables.cpp Message-ID: <200906071944.n57JiHeA002919@zion.cs.uiuc.edu> Author: geoffray Date: Sun Jun 7 14:44:16 2009 New Revision: 73035 URL: http://llvm.org/viewvc/llvm-project?rev=73035&view=rev Log: Now that the mark and trace function of GCMmap is not recursive, we can put back a universal tracer. The next step is to remove dynamic generation of per-class tracer. Modified: vmkit/trunk/lib/JnJVM/Classpath/ClasspathReflect.h vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h vmkit/trunk/lib/JnJVM/VMCore/JavaObject.h vmkit/trunk/lib/JnJVM/VMCore/VirtualTables.cpp Modified: vmkit/trunk/lib/JnJVM/Classpath/ClasspathReflect.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Classpath/ClasspathReflect.h?rev=73035&r1=73034&r2=73035&view=diff ============================================================================== --- vmkit/trunk/lib/JnJVM/Classpath/ClasspathReflect.h (original) +++ vmkit/trunk/lib/JnJVM/Classpath/ClasspathReflect.h Sun Jun 7 14:44:16 2009 @@ -18,7 +18,6 @@ #include extern "C" jnjvm::JavaObject* internalFillInStackTrace(jnjvm::JavaObject*); -extern "C" void JavaObjectTracer(jnjvm::JavaObject*); namespace jnjvm { @@ -36,7 +35,7 @@ } static void staticTracer(JavaObjectClass* obj) { - JavaObjectTracer(obj); + obj->traceLock(); obj->pd->markAndTrace(); obj->signers->markAndTrace(); obj->constructor->markAndTrace(); @@ -57,7 +56,7 @@ public: static void staticTracer(JavaObjectField* obj) { - JavaObjectTracer(obj); + obj->traceLock(); obj->name->markAndTrace(); obj->declaringClass->markAndTrace(); } @@ -82,7 +81,7 @@ public: static void staticTracer(JavaObjectMethod* obj) { - JavaObjectTracer(obj); + obj->traceLock(); obj->name->markAndTrace(); obj->declaringClass->markAndTrace(); } @@ -105,7 +104,7 @@ public: static void staticTracer(JavaObjectConstructor* obj) { - JavaObjectTracer(obj); + obj->traceLock(); obj->clazz->markAndTrace(); } Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp?rev=73035&r1=73034&r2=73035&view=diff ============================================================================== --- vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp (original) +++ vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp Sun Jun 7 14:44:16 2009 @@ -43,6 +43,7 @@ extern "C" void JavaArrayTracer(JavaObject*); extern "C" void JavaObjectTracer(JavaObject*); extern "C" void ArrayObjectTracer(JavaObject*); +extern "C" void RegularObjectTracer(JavaObject*); Attribut::Attribut(const UTF8* name, uint32 length, uint32 offset) { @@ -1250,6 +1251,12 @@ JavaVirtualTable::JavaVirtualTable(Class* C) { if (C->super) { + + // Set the regular object tracer, destructor and delete. + tracer = (uintptr_t)RegularObjectTracer; + destructor = 0; + operatorDelete = 0; + // Set the class of this VT. cl = C; Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h?rev=73035&r1=73034&r2=73035&view=diff ============================================================================== --- vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h (original) +++ vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h Sun Jun 7 14:44:16 2009 @@ -1297,6 +1297,11 @@ } + bool isReference() { + uint16 val = type->elements[0]; + return (val == '[' || val == 'L'); + } + }; Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaObject.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaObject.h?rev=73035&r1=73034&r2=73035&view=diff ============================================================================== --- vmkit/trunk/lib/JnJVM/VMCore/JavaObject.h (original) +++ vmkit/trunk/lib/JnJVM/VMCore/JavaObject.h Sun Jun 7 14:44:16 2009 @@ -364,6 +364,10 @@ /// void decapsulePrimitive(Jnjvm* vm, uintptr_t &buf, const Typedef* signature); + void traceLock() { + LockObj* l = lockObj(); + if (l) l->markAndTrace(); + } }; Modified: vmkit/trunk/lib/JnJVM/VMCore/VirtualTables.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/VirtualTables.cpp?rev=73035&r1=73034&r2=73035&view=diff ============================================================================== --- vmkit/trunk/lib/JnJVM/VMCore/VirtualTables.cpp (original) +++ vmkit/trunk/lib/JnJVM/VMCore/VirtualTables.cpp Sun Jun 7 14:44:16 2009 @@ -13,15 +13,13 @@ // // The file is divided into four parts: // (1) Declaration of internal GC classes. -// (2) Tracing roots of objects: regular object, native array, object array. +// (2) Tracing Java objects: regular object, native array, object array. // (3) Tracing a class loader, which involves tracing the Java objects // referenced by classes. // (4) Tracing the roots of a program: the JVM and the threads. // //===----------------------------------------------------------------------===// -#include "mvm/Object.h" - #include "JavaArray.h" #include "JavaClass.h" #include "JavaObject.h" @@ -69,12 +67,15 @@ // Empty tracer for static tracers of classes that do not declare static // variables. //===----------------------------------------------------------------------===// + extern "C" void EmptyTracer(void*) {} //===----------------------------------------------------------------------===// -// Root trace methods for Java objects. There are three types of roots: -// (1) Object whose class is not an array: needs to trace the classloader and -// the lock. +// Trace methods for Java objects. There are four types of objects: +// (1) Base object whose class is not an array: needs to trace the classloader +// and the lock. +// (1) Object whose class is not an array: needs to trace the classloader, the +// lock and all the virtual fields. // (2) Object whose class is an array of objects: needs to trace root (1) and // all elements in the array. // (3) Object whose class is a native array: only needs to trace the lock. The @@ -82,22 +83,25 @@ //===----------------------------------------------------------------------===// -/// Method for scanning the root of an object. This method is called by all -/// JavObjects except native Java arrays. +/// Method for scanning the root of an object. extern "C" void JavaObjectTracer(JavaObject* obj) { - if (obj->getClass()) - obj->getClass()->classLoader->getJavaClassLoader()->markAndTrace(); - LockObj* l = obj->lockObj(); - if (l) l->markAndTrace(); + obj->traceLock(); + + CommonClass* cl = obj->getClass(); + assert(cl && "No class"); + cl->classLoader->getJavaClassLoader()->markAndTrace(); } /// 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) { - if (obj->getClass()) - obj->getClass()->classLoader->getJavaClassLoader()->markAndTrace(); - LockObj* l = obj->lockObj(); - if (l) l->markAndTrace(); + obj->traceLock(); + + CommonClass* cl = obj->getClass(); + assert(cl && "No class"); + cl->classLoader->getJavaClassLoader()->markAndTrace(); + + for (sint32 i = 0; i < obj->size; i++) { if (obj->elements[i]) obj->elements[i]->markAndTrace(); } @@ -107,8 +111,27 @@ /// the class is the bootstrap loader and therefore does not need to be /// scanned here. extern "C" void JavaArrayTracer(JavaArray* obj) { - LockObj* l = obj->lockObj(); - if (l) l->markAndTrace(); + obj->traceLock(); +} + +/// Method for scanning regular objects. +extern "C" void RegularObjectTracer(JavaObject* obj) { + obj->traceLock(); + + Class* cl = obj->getClass()->asClass(); + assert(cl && "Not a class in regular tracer"); + cl->classLoader->getJavaClassLoader()->markAndTrace(); + + while (cl->super != 0) { + for (uint32 i = 0; i < cl->nbVirtualFields; ++i) { + JavaField& field = cl->virtualFields[i]; + if (field.isReference()) { + JavaObject* ptr = field.getObjectField(obj); + ptr->markAndTrace(); + } + } + cl = cl->super; + } } @@ -156,7 +179,13 @@ for (uint32 i =0; i < NR_ISOLATES; ++i) { TaskClassMirror &M = IsolateInfo[i]; if (M.staticInstance && staticTracer != EmptyTracer) { - staticTracer(M.staticInstance); + for (uint32 i = 0; i < nbStaticFields; ++i) { + JavaField& field = staticFields[i]; + if (field.isReference()) { + JavaObject* ptr = field.getObjectField(M.staticInstance); + ptr->markAndTrace(); + } + } } } } From nicolas.geoffray at lip6.fr Sun Jun 7 14:20:13 2009 From: nicolas.geoffray at lip6.fr (Nicolas Geoffray) Date: Sun, 07 Jun 2009 21:20:13 -0000 Subject: [vmkit-commits] [vmkit] r73037 - in /vmkit/trunk: include/jnjvm/JnjvmModule.h lib/JnJVM/Compiler/JITInfo.cpp lib/JnJVM/Compiler/JavaAOTCompiler.cpp lib/JnJVM/Compiler/JavaJITCompiler.cpp lib/JnJVM/Compiler/JnjvmModule.cpp lib/JnJVM/LLVMRuntime/runtime-isolate.ll lib/JnJVM/LLVMRuntime/runtime-single.ll lib/JnJVM/VMCore/JavaClass.cpp lib/JnJVM/VMCore/JavaClass.h lib/JnJVM/VMCore/VirtualTables.cpp tools/vmjc/vmjc.cpp Message-ID: <200906072120.n57LKDJQ006427@zion.cs.uiuc.edu> Author: geoffray Date: Sun Jun 7 16:20:13 2009 New Revision: 73037 URL: http://llvm.org/viewvc/llvm-project?rev=73037&view=rev Log: Delete all dynamically generated tracers. Modified: vmkit/trunk/include/jnjvm/JnjvmModule.h vmkit/trunk/lib/JnJVM/Compiler/JITInfo.cpp vmkit/trunk/lib/JnJVM/Compiler/JavaAOTCompiler.cpp vmkit/trunk/lib/JnJVM/Compiler/JavaJITCompiler.cpp vmkit/trunk/lib/JnJVM/Compiler/JnjvmModule.cpp vmkit/trunk/lib/JnJVM/LLVMRuntime/runtime-isolate.ll vmkit/trunk/lib/JnJVM/LLVMRuntime/runtime-single.ll vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h vmkit/trunk/lib/JnJVM/VMCore/VirtualTables.cpp vmkit/trunk/tools/vmjc/vmjc.cpp Modified: vmkit/trunk/include/jnjvm/JnjvmModule.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/jnjvm/JnjvmModule.h?rev=73037&r1=73036&r2=73037&view=diff ============================================================================== --- vmkit/trunk/include/jnjvm/JnjvmModule.h (original) +++ vmkit/trunk/include/jnjvm/JnjvmModule.h Sun Jun 7 16:20:13 2009 @@ -75,8 +75,6 @@ /// virtualSizeLLVM - The LLVM constant size of instances of this class. /// llvm::ConstantInt* virtualSizeConstant; - llvm::Function* virtualTracerFunction; - llvm::Function* staticTracerFunction; /// virtualType - The LLVM type of instance of this class. /// const llvm::Type * virtualType; @@ -87,16 +85,12 @@ public: llvm::Value* getVirtualSize(); - llvm::Function* getStaticTracer(); - llvm::Function* getVirtualTracer(); const llvm::Type* getVirtualType(); const llvm::Type* getStaticType(); LLVMClassInfo(Class* cl) : classDef(cl), virtualSizeConstant(0), - virtualTracerFunction(0), - staticTracerFunction(0), virtualType(0), staticType(0) {} }; @@ -232,14 +226,11 @@ static const llvm::Type* JnjvmType; #endif -#ifdef WITH_TRACER - llvm::Function* MarkAndTraceFunction; - static const llvm::FunctionType* MarkAndTraceType; - llvm::Function* EmptyTracerFunction; - llvm::Function* JavaObjectTracerFunction; - llvm::Function* JavaArrayTracerFunction; - llvm::Function* ArrayObjectTracerFunction; -#endif + llvm::Function* EmptyTracerFunction; + llvm::Function* JavaObjectTracerFunction; + llvm::Function* JavaArrayTracerFunction; + llvm::Function* ArrayObjectTracerFunction; + llvm::Function* RegularObjectTracerFunction; llvm::Function* GetSJLJBufferFunction; llvm::Function* InterfaceLookupFunction; @@ -359,12 +350,6 @@ llvm::ModuleProvider* TheModuleProvider; JnjvmModule JavaIntrinsics; -#ifdef WITH_TRACER - llvm::Function* internalMakeTracer(Class* cl, bool stat); - void traceAllFields(uint32, JavaField*, llvm::BasicBlock*, llvm::Value*); - virtual llvm::Function* makeTracer(Class* cl, bool stat) = 0; -#endif - void addJavaPasses(); private: @@ -505,10 +490,6 @@ virtual llvm::Value* getIsolate(Jnjvm* vm, llvm::Value* Where); #endif -#ifdef WITH_TRACER - virtual llvm::Function* makeTracer(Class* cl, bool stat); -#endif - virtual ~JavaJITCompiler() {} virtual llvm::Function* addCallback(Class* cl, uint16 index, Signdef* sign, @@ -567,10 +548,6 @@ private: -#ifdef WITH_TRACER - virtual llvm::Function* makeTracer(Class* cl, bool stat); -#endif - //--------------- Static compiler specific functions -----------------------// llvm::Constant* CreateConstantFromVT(JavaVirtualTable* VT); llvm::Constant* CreateConstantFromUTF8(const UTF8* val); @@ -655,7 +632,6 @@ llvm::Function* StaticInitializer; llvm::Function* ObjectPrinter; - bool generateTracers; bool generateStubs; bool assumeCompiled; Modified: vmkit/trunk/lib/JnJVM/Compiler/JITInfo.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Compiler/JITInfo.cpp?rev=73037&r1=73036&r2=73037&view=diff ============================================================================== --- vmkit/trunk/lib/JnJVM/Compiler/JITInfo.cpp (original) +++ vmkit/trunk/lib/JnJVM/Compiler/JITInfo.cpp Sun Jun 7 16:20:13 2009 @@ -105,10 +105,6 @@ uint64 size = JnjvmModule::getTypeSize(structType); cl->staticSize = size; -#ifdef WITH_TRACER - JavaLLVMCompiler* Mod = (JavaLLVMCompiler*)cl->classLoader->getCompiler(); - staticTracerFunction = Mod->makeTracer(cl, true); -#endif } return staticType; } @@ -124,20 +120,6 @@ return virtualSizeConstant; } -Function* LLVMClassInfo::getStaticTracer() { - if (!staticTracerFunction) { - getStaticType(); - } - return staticTracerFunction; -} - -Function* LLVMClassInfo::getVirtualTracer() { - if (!virtualTracerFunction) { - getVirtualType(); - } - return virtualTracerFunction; -} - Function* LLVMMethodInfo::getMethod() { if (!methodFunction) { JnjvmClassLoader* JCL = methodDef->classDef->classLoader; Modified: vmkit/trunk/lib/JnJVM/Compiler/JavaAOTCompiler.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Compiler/JavaAOTCompiler.cpp?rev=73037&r1=73036&r2=73037&view=diff ============================================================================== --- vmkit/trunk/lib/JnJVM/Compiler/JavaAOTCompiler.cpp (original) +++ vmkit/trunk/lib/JnJVM/Compiler/JavaAOTCompiler.cpp Sun Jun 7 16:20:13 2009 @@ -1038,18 +1038,6 @@ // JInfo ClassElts.push_back(Constant::getNullValue(JnjvmModule::ptrType)); - // staticTracer - const Type* FTy = STy->getContainedType(STy->getNumContainedTypes() - 1); -#ifdef WITH_TRACER - Function* F = getClassInfo(cl)->getStaticTracer(); - assert(F && "No static tracer"); - Constant* staticTracer = ConstantExpr::getCast(Instruction::BitCast, F, FTy); -#else - Constant* staticTracer = ConstantExpr::getNullValue(FTy); -#endif - ClassElts.push_back(staticTracer); - - return ConstantStruct::get(STy, ClassElts); } @@ -1155,7 +1143,6 @@ Elemts.push_back(N); // Tracer -#ifdef WITH_TRACER Function* Tracer = 0; if (classDef->isArray()) { if (classDef->asArrayClass()->baseClass()->isPrimitive()) { @@ -1164,14 +1151,11 @@ Tracer = JavaIntrinsics.ArrayObjectTracerFunction; } } else if (classDef->isClass()) { - Tracer = getClassInfo(classDef->asClass())->getVirtualTracer(); + Tracer = JavaIntrinsics.RegularObjectTracerFunction; } Elemts.push_back(Tracer ? ConstantExpr::getCast(Instruction::BitCast, Tracer, PTy) : N); -#else - Elemts.push_back(N); -#endif // Class Elemts.push_back(ConstantExpr::getCast(Instruction::BitCast, @@ -1250,16 +1234,6 @@ return Array; } -#ifdef WITH_TRACER -llvm::Function* JavaAOTCompiler::makeTracer(Class* cl, bool stat) { - if (!generateTracers || (!cl->super && !stat)) { - return JavaIntrinsics.JavaObjectTracerFunction; - } else { - return internalMakeTracer(cl, stat); - } -} -#endif - namespace mvm { llvm::FunctionPass* createEscapeAnalysisPass(llvm::Function*); } @@ -1271,7 +1245,6 @@ JavaAOTCompiler::JavaAOTCompiler(const std::string& ModuleID) : JavaLLVMCompiler(ModuleID) { - generateTracers = true; generateStubs = true; assumeCompiled = false; compileRT = false; @@ -1490,9 +1463,6 @@ if (!cl->super) VT->destructor = 0; - LLVMClassInfo* LCI = getClassInfo(cl); - if (!LCI->virtualTracerFunction) - LCI->virtualTracerFunction = makeTracer(cl, false); } void JavaAOTCompiler::setMethod(JavaMethod* meth, void* ptr, const char* name) { @@ -1503,12 +1473,7 @@ void JavaAOTCompiler::setTracer(JavaVirtualTable* VT, uintptr_t ptr, const char* name) { - Function* func = Function::Create(JnjvmModule::MarkAndTraceType, - GlobalValue::ExternalLinkage, - name, getLLVMModule()); - - LLVMClassInfo* LCI = getClassInfo(VT->cl->asClass()); - LCI->virtualTracerFunction = func; + VT->tracer = (uintptr_t)name; } void JavaAOTCompiler::setDestructor(JavaVirtualTable* VT, uintptr_t ptr, Modified: vmkit/trunk/lib/JnJVM/Compiler/JavaJITCompiler.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Compiler/JavaJITCompiler.cpp?rev=73037&r1=73036&r2=73037&view=diff ============================================================================== --- vmkit/trunk/lib/JnJVM/Compiler/JavaJITCompiler.cpp (original) +++ vmkit/trunk/lib/JnJVM/Compiler/JavaJITCompiler.cpp Sun Jun 7 16:20:13 2009 @@ -138,8 +138,6 @@ JavaVirtualTable* VT = cl->virtualVT; assert(VT && "No VT was allocated!"); - LLVMClassInfo* LCI = getClassInfo(cl); - if (VT->init) { // The VT hash already been filled by the AOT compiler so there // is nothing left to do! @@ -177,28 +175,6 @@ } } -#ifdef WITH_TRACER - if (!LCI->virtualTracerFunction) { - LCI->virtualTracerFunction = makeTracer(cl, false); - } -#endif - -} - -Function* JavaJITCompiler::makeTracer(Class* cl, bool stat) { - Function* F = cl->super || stat ? - internalMakeTracer(cl, stat) : JavaIntrinsics.JavaObjectTracerFunction; - - assert(F && "No tracer"); - if (stat) { - cl->staticTracer = (void (*)(void*)) (uintptr_t) - JnjvmModule::executionEngine->getPointerToFunction(F); - } else { - void* codePtr = mvm::MvmModule::executionEngine->getPointerToFunction(F); - cl->virtualVT->tracer = (uintptr_t)codePtr; - } - F->deleteBody(); - return F; } void JavaJITCompiler::setMethod(JavaMethod* meth, void* ptr, const char* name) { @@ -211,16 +187,6 @@ void JavaJITCompiler::setTracer(JavaVirtualTable* VT, uintptr_t ptr, const char* name) { - // So the class has a tracer because either a) the class was vmjced or - // b) the boot sequence has set it. Create the tracer as an external - // function. - Function* func = Function::Create(JnjvmModule::MarkAndTraceType, - GlobalValue::ExternalLinkage, - name, getLLVMModule()); - - JnjvmModule::executionEngine->addGlobalMapping(func, (void*)ptr); - LLVMClassInfo* LCI = getClassInfo(VT->cl->asClass()); - LCI->virtualTracerFunction = func; VT->tracer = ptr; } Modified: vmkit/trunk/lib/JnJVM/Compiler/JnjvmModule.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Compiler/JnjvmModule.cpp?rev=73037&r1=73036&r2=73037&view=diff ============================================================================== --- vmkit/trunk/lib/JnJVM/Compiler/JnjvmModule.cpp (original) +++ vmkit/trunk/lib/JnJVM/Compiler/JnjvmModule.cpp Sun Jun 7 16:20:13 2009 @@ -28,10 +28,6 @@ using namespace jnjvm; using namespace llvm; -#ifdef WITH_TRACER -const llvm::FunctionType* JnjvmModule::MarkAndTraceType = 0; -#endif - const llvm::Type* JnjvmModule::JavaObjectType = 0; const llvm::Type* JnjvmModule::JavaArrayType = 0; const llvm::Type* JnjvmModule::JavaArrayUInt8Type = 0; @@ -90,95 +86,6 @@ enabledException = true; } -void JavaLLVMCompiler::traceAllFields(uint32 nbFields, JavaField* fields, - BasicBlock* block, Value* realArg) { - Constant* zero = mvm::MvmModule::constantZero; - for (uint32 i = 0; i < nbFields; ++i) { - JavaField& cur = fields[i]; - if (cur.getSignature()->trace()) { - LLVMFieldInfo* LFI = getFieldInfo(&cur); - std::vector args; //size = 2 - args.push_back(zero); - args.push_back(LFI->getOffset()); - Value* ptr = GetElementPtrInst::Create(realArg, args.begin(), args.end(), - "",block); - Value* val = new LoadInst(ptr, "", block); - Value* valCast = new BitCastInst(val, JnjvmModule::JavaObjectType, "", - block); - std::vector Args; - Args.push_back(valCast); -#ifdef MULTIPLE_GC - Args.push_back(GC); -#endif - CallInst::Create(JavaIntrinsics.MarkAndTraceFunction, Args.begin(), - Args.end(), "", block); - } - } -} - -#ifdef WITH_TRACER -llvm::Function* JavaLLVMCompiler::internalMakeTracer(Class* cl, bool stat) { - - LLVMClassInfo* LCI = getClassInfo(cl); - const Type* type = stat ? LCI->getStaticType() : LCI->getVirtualType(); - JavaField* fields = 0; - uint32 nbFields = 0; - if (stat) { - fields = cl->getStaticFields(); - nbFields = cl->nbStaticFields; - } else { - fields = cl->getVirtualFields(); - nbFields = cl->nbVirtualFields; - } - - uint32 nbReferenceFields = 0; - for (uint32 i = 0; i < nbFields; ++i) { - JavaField& cur = fields[i]; - if (cur.getSignature()->trace()) { - ++nbReferenceFields; - } - } - - if (!nbReferenceFields) { - if (stat) return JavaIntrinsics.EmptyTracerFunction; - else if (cl->super) return getClassInfo(cl->super)->getVirtualTracer(); - } - - Function* func = Function::Create(JnjvmModule::MarkAndTraceType, - GlobalValue::InternalLinkage, - "", getLLVMModule()); - - Argument* arg = func->arg_begin(); - BasicBlock* block = BasicBlock::Create("", func); - llvm::Value* realArg = new BitCastInst(arg, type, "", block); - - std::vector Args; - Args.push_back(arg); -#ifdef MULTIPLE_GC - Value* GC = ++func->arg_begin(); - Args.push_back(GC); -#endif - - if (stat) { - traceAllFields(nbFields, fields, block, realArg); - } else { - CallInst::Create(JavaIntrinsics.JavaObjectTracerFunction, Args.begin(), - Args.end(), "", block); - Class* cur = cl; - while (cur->super != 0) { - traceAllFields(cur->nbVirtualFields, cur->virtualFields, block, realArg); - cur = cur->super; - const Type* Ty = getClassInfo(cur)->getVirtualType(); - realArg = new BitCastInst(realArg, Ty, "", block); - } - } - - ReturnInst::Create(block); - - return func; -} -#endif - void JavaLLVMCompiler::resolveVirtualClass(Class* cl) { // Lock here because we may be called by a class resolver mvm::MvmModule::protectIR(); @@ -267,10 +174,6 @@ JavaThreadType = PointerType::getUnqual(module->getTypeByName("JavaThread")); -#ifdef WITH_TRACER - MarkAndTraceType = module->getFunction("MarkAndTrace")->getFunctionType(); -#endif - JavaObjectNullConstant = Constant::getNullValue(JnjvmModule::JavaObjectType); MaxArraySizeConstant = ConstantInt::get(Type::Int32Ty, JavaArray::MaxArraySize); @@ -420,13 +323,11 @@ ServiceCallStopFunction = module->getFunction("jnjvmServiceCallStop"); #endif -#ifdef WITH_TRACER - MarkAndTraceFunction = module->getFunction("MarkAndTrace"); JavaObjectTracerFunction = module->getFunction("JavaObjectTracer"); EmptyTracerFunction = module->getFunction("EmptyTracer"); JavaArrayTracerFunction = module->getFunction("JavaArrayTracer"); ArrayObjectTracerFunction = module->getFunction("ArrayObjectTracer"); -#endif + RegularObjectTracerFunction = module->getFunction("RegularObjectTracer"); #ifndef WITHOUT_VTABLE VirtualLookupFunction = module->getFunction("jnjvmVirtualTableLookup"); Modified: vmkit/trunk/lib/JnJVM/LLVMRuntime/runtime-isolate.ll URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/LLVMRuntime/runtime-isolate.ll?rev=73037&r1=73036&r2=73037&view=diff ============================================================================== --- vmkit/trunk/lib/JnJVM/LLVMRuntime/runtime-isolate.ll (original) +++ vmkit/trunk/lib/JnJVM/LLVMRuntime/runtime-isolate.ll Sun Jun 7 16:20:13 2009 @@ -13,7 +13,7 @@ %JavaField*, i16, %JavaField*, i16, %JavaMethod*, i16, %JavaMethod*, i16, i8*, %ArrayUInt8*, i8*, %Attribut*, i16, %JavaClass**, i16, %JavaClass*, i16, i8, i8, i32, i32, - i8*, void (i8*)* } + i8* } ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;; Isolate specific methods ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Modified: vmkit/trunk/lib/JnJVM/LLVMRuntime/runtime-single.ll URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/LLVMRuntime/runtime-single.ll?rev=73037&r1=73036&r2=73037&view=diff ============================================================================== --- vmkit/trunk/lib/JnJVM/LLVMRuntime/runtime-single.ll (original) +++ vmkit/trunk/lib/JnJVM/LLVMRuntime/runtime-single.ll Sun Jun 7 16:20:13 2009 @@ -10,4 +10,4 @@ %JavaField*, i16, %JavaField*, i16, %JavaMethod*, i16, %JavaMethod*, i16, i8*, %ArrayUInt8*, i8*, %Attribut*, i16, %JavaClass**, i16, %JavaClass*, i16, i8, i8, i32, i32, - i8*, void (i8*)* } + i8*} Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp?rev=73037&r1=73036&r2=73037&view=diff ============================================================================== --- vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp (original) +++ vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp Sun Jun 7 16:20:13 2009 @@ -232,7 +232,6 @@ outerClass = 0; innerOuterResolved = false; nbInnerClasses = 0; - staticTracer = 0; nbVirtualMethods = 0; nbStaticMethods = 0; nbStaticFields = 0; Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h?rev=73037&r1=73036&r2=73037&view=diff ============================================================================== --- vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h (original) +++ vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h Sun Jun 7 16:20:13 2009 @@ -526,10 +526,6 @@ /// mvm::JITInfo* JInfo; - /// staticTracer - The dynamically generated function that traces the - /// references of the static instance. - void (*staticTracer)(void*); - /// getVirtualSize - Get the virtual size of instances of this class. /// uint32 getVirtualSize() const { return virtualSize; } Modified: vmkit/trunk/lib/JnJVM/VMCore/VirtualTables.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/VirtualTables.cpp?rev=73037&r1=73036&r2=73037&view=diff ============================================================================== --- vmkit/trunk/lib/JnJVM/VMCore/VirtualTables.cpp (original) +++ vmkit/trunk/lib/JnJVM/VMCore/VirtualTables.cpp Sun Jun 7 16:20:13 2009 @@ -178,7 +178,7 @@ for (uint32 i =0; i < NR_ISOLATES; ++i) { TaskClassMirror &M = IsolateInfo[i]; - if (M.staticInstance && staticTracer != EmptyTracer) { + if (M.staticInstance) { for (uint32 i = 0; i < nbStaticFields; ++i) { JavaField& field = staticFields[i]; if (field.isReference()) { Modified: vmkit/trunk/tools/vmjc/vmjc.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tools/vmjc/vmjc.cpp?rev=73037&r1=73036&r2=73037&view=diff ============================================================================== --- vmkit/trunk/tools/vmjc/vmjc.cpp (original) +++ vmkit/trunk/tools/vmjc/vmjc.cpp Sun Jun 7 16:20:13 2009 @@ -99,10 +99,6 @@ cl::desc("Disable Java exceptions")); static cl::opt -DisableTracers("disable-tracers", - cl::desc("Disable Java tracers")); - -static cl::opt DisableStubs("disable-stubs", cl::desc("Disable Java stubs")); @@ -226,7 +222,6 @@ JavaAOTCompiler* MAOT = (JavaAOTCompiler*)Comp; if (DisableExceptions) MAOT->disableExceptions(); - if (DisableTracers) MAOT->generateTracers = false; if (DisableStubs) MAOT->generateStubs = false; if (AssumeCompiled) MAOT->assumeCompiled = true; MAOT->compileFile(JCL, InputFilename.c_str()); From nicolas.geoffray at lip6.fr Mon Jun 8 01:17:51 2009 From: nicolas.geoffray at lip6.fr (Nicolas Geoffray) Date: Mon, 08 Jun 2009 08:17:51 -0000 Subject: [vmkit-commits] [vmkit] r73061 - in /vmkit/trunk/lib/Mvm/GCMmap2: MvmGC.h gccollector.cpp Message-ID: <200906080817.n588Hpjd006376@zion.cs.uiuc.edu> Author: geoffray Date: Mon Jun 8 03:17:50 2009 New Revision: 73061 URL: http://llvm.org/viewvc/llvm-project?rev=73061&view=rev Log: Objects added by queues were not traced. After having scanned the queues, trace the new objects. Modified: vmkit/trunk/lib/Mvm/GCMmap2/MvmGC.h vmkit/trunk/lib/Mvm/GCMmap2/gccollector.cpp Modified: vmkit/trunk/lib/Mvm/GCMmap2/MvmGC.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/GCMmap2/MvmGC.h?rev=73061&r1=73060&r2=73061&view=diff ============================================================================== --- vmkit/trunk/lib/Mvm/GCMmap2/MvmGC.h (original) +++ vmkit/trunk/lib/Mvm/GCMmap2/MvmGC.h Mon Jun 8 03:17:50 2009 @@ -56,7 +56,7 @@ static int status; - enum { stat_collect, stat_finalize, stat_alloc, stat_broken }; + enum { stat_collect, stat_alloc, stat_broken }; #ifdef HAVE_PTHREAD static void siggc_handler(int); Modified: vmkit/trunk/lib/Mvm/GCMmap2/gccollector.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/GCMmap2/gccollector.cpp?rev=73061&r1=73060&r2=73061&view=diff ============================================================================== --- vmkit/trunk/lib/Mvm/GCMmap2/gccollector.cpp (original) +++ vmkit/trunk/lib/Mvm/GCMmap2/gccollector.cpp Mon Jun 8 03:17:50 2009 @@ -61,9 +61,12 @@ } while (tcur != th); // (3) Trace stack objects. - for(cur=used_nodes->next(); cur!=used_nodes; cur=cur->next()) + for(cur = used_nodes->next(); cur != used_nodes; cur = cur->next()) trace(cur); + // Go back to the previous node. + cur = cur->prev(); + // (4) Trace the weak reference queue. th->MyVM->scanWeakReferencesQueue(); @@ -76,26 +79,31 @@ // (7) Trace the phantom reference queue. th->MyVM->scanPhantomReferencesQueue(); - status = stat_finalize; + // (8) Trace the new objects added by queues. + for(cur = cur->next(); cur != used_nodes; cur = cur->next()) + trace(cur); + - /* finalize */ - GCChunkNode finalizable; + // Finalize. + GCChunkNode finalizable; finalizable.attrape(unused_nodes); + // We have stopped collecting, go back to alloc state. + status = stat_alloc; - /* kill everyone */ + // Wake up all threads. + th->MyVM->endCollection(); + threads->collectionFinished(); + th->MyVM->wakeUpFinalizers(); + th->MyVM->wakeUpEnqueue(); + + // Kill unreachable objects. GCChunkNode *next = 0; for(cur=finalizable.next(); cur!=&finalizable; cur=next) { next = cur->next(); allocator->reject_chunk(cur); } - status = stat_alloc; - - th->MyVM->endCollection(); - threads->collectionFinished(); - th->MyVM->wakeUpFinalizers(); - th->MyVM->wakeUpEnqueue(); } void Collector::collect_unprotect() { From nicolas.geoffray at lip6.fr Mon Jun 8 02:33:03 2009 From: nicolas.geoffray at lip6.fr (Nicolas Geoffray) Date: Mon, 08 Jun 2009 09:33:03 -0000 Subject: [vmkit-commits] [vmkit] r73065 - /vmkit/trunk/lib/JnJVM/VMCore/JavaTypes.cpp Message-ID: <200906080933.n589X4CZ009011@zion.cs.uiuc.edu> Author: geoffray Date: Mon Jun 8 04:33:00 2009 New Revision: 73065 URL: http://llvm.org/viewvc/llvm-project?rev=73065&view=rev Log: In AOT mode, call buffers are not set. Remove the assertion. Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaTypes.cpp Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaTypes.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaTypes.cpp?rev=73065&r1=73064&r2=73065&view=diff ============================================================================== --- vmkit/trunk/lib/JnJVM/VMCore/JavaTypes.cpp (original) +++ vmkit/trunk/lib/JnJVM/VMCore/JavaTypes.cpp Mon Jun 8 04:33:00 2009 @@ -61,7 +61,6 @@ } else { initialLoader->getCompiler()->staticCallBuf(this); } - assert(_staticCallBuf && "No call buf"); } return _staticCallBuf; } @@ -77,7 +76,6 @@ } else { initialLoader->getCompiler()->virtualCallBuf(this); } - assert(_virtualCallBuf && "No call buf"); } return _virtualCallBuf; } @@ -93,7 +91,6 @@ } else { initialLoader->getCompiler()->staticCallAP(this); } - assert(_staticCallAP && "No call AP"); } return _staticCallAP; } @@ -109,7 +106,6 @@ } else { initialLoader->getCompiler()->virtualCallAP(this); } - assert(_virtualCallAP && "No call AP"); } return _virtualCallAP; } From nicolas.geoffray at lip6.fr Mon Jun 8 03:28:50 2009 From: nicolas.geoffray at lip6.fr (Nicolas Geoffray) Date: Mon, 08 Jun 2009 10:28:50 -0000 Subject: [vmkit-commits] [vmkit] r73066 - /vmkit/trunk/include/mvm/Threads/Locks.h Message-ID: <200906081028.n58ASoLo010831@zion.cs.uiuc.edu> Author: geoffray Date: Mon Jun 8 05:28:48 2009 New Revision: 73066 URL: http://llvm.org/viewvc/llvm-project?rev=73066&view=rev Log: Fix a serious mindo. Modified: vmkit/trunk/include/mvm/Threads/Locks.h Modified: vmkit/trunk/include/mvm/Threads/Locks.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/mvm/Threads/Locks.h?rev=73066&r1=73065&r2=73066&view=diff ============================================================================== --- vmkit/trunk/include/mvm/Threads/Locks.h (original) +++ vmkit/trunk/include/mvm/Threads/Locks.h Mon Jun 8 05:28:48 2009 @@ -12,6 +12,7 @@ #include #include +#include #include "mvm/Threads/Thread.h" @@ -353,7 +354,7 @@ /// void acquire() { uint32 count = 0; - while (!(llvm_atomic_cmp_swap_i8(&locked, 0, 1))) + while (llvm_atomic_cmp_swap_i8(&locked, 0, 1)) mvm::Thread::yield(&count); } From nicolas.geoffray at lip6.fr Mon Jun 8 05:41:59 2009 From: nicolas.geoffray at lip6.fr (Nicolas Geoffray) Date: Mon, 08 Jun 2009 12:41:59 -0000 Subject: [vmkit-commits] [vmkit] r73067 - /vmkit/trunk/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp Message-ID: <200906081242.n58Cg0GK014764@zion.cs.uiuc.edu> Author: geoffray Date: Mon Jun 8 07:41:58 2009 New Revision: 73067 URL: http://llvm.org/viewvc/llvm-project?rev=73067&view=rev Log: Bugfixes for invokeinterface algorithm. Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp?rev=73067&r1=73066&r2=73067&view=diff ============================================================================== --- vmkit/trunk/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp (original) +++ vmkit/trunk/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp Mon Jun 8 07:41:58 2009 @@ -70,12 +70,12 @@ #endif // Are we the first cache? - if (cache != &(enveloppe->bootCache)) { + if (cache == &(enveloppe->bootCache) && cache->lastCible == 0) { + rcache = cache; + } else { mvm::BumpPtrAllocator& alloc = enveloppe->classDef->classLoader->allocator; rcache = new(alloc) CacheNode(enveloppe); - } else { - rcache = cache; } rcache->methPtr = dmeth->compiledPtr(); From nicolas.geoffray at lip6.fr Mon Jun 8 06:19:20 2009 From: nicolas.geoffray at lip6.fr (Nicolas Geoffray) Date: Mon, 08 Jun 2009 13:19:20 -0000 Subject: [vmkit-commits] [vmkit] r73068 - in /vmkit/trunk/lib/JnJVM: Compiler/JavaJIT.cpp LLVMRuntime/runtime-default.ll VMCore/JavaCache.h VMCore/JavaRuntimeJIT.cpp Message-ID: <200906081319.n58DJNGb015992@zion.cs.uiuc.edu> Author: geoffray Date: Mon Jun 8 08:19:13 2009 New Revision: 73068 URL: http://llvm.org/viewvc/llvm-project?rev=73068&view=rev Log: Use the VT instead of the class to cache the last cible of an invokeinterface. Modified: vmkit/trunk/lib/JnJVM/Compiler/JavaJIT.cpp vmkit/trunk/lib/JnJVM/LLVMRuntime/runtime-default.ll vmkit/trunk/lib/JnJVM/VMCore/JavaCache.h vmkit/trunk/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp Modified: vmkit/trunk/lib/JnJVM/Compiler/JavaJIT.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Compiler/JavaJIT.cpp?rev=73068&r1=73067&r2=73068&view=diff ============================================================================== --- vmkit/trunk/lib/JnJVM/Compiler/JavaJIT.cpp (original) +++ vmkit/trunk/lib/JnJVM/Compiler/JavaJIT.cpp Mon Jun 8 08:19:13 2009 @@ -1935,14 +1935,14 @@ "", currentBlock); Value* cache = new LoadInst(cachePtr, "", currentBlock); - Value* cl = CallInst::Create(module->GetClassFunction, args[0], "", + Value* VT = CallInst::Create(module->GetVTFunction, args[0], "", currentBlock); Value* args3[2] = { zero, one }; Value* lastCiblePtr = GetElementPtrInst::Create(cache, args3, args3 + 2, "", currentBlock); Value* lastCible = new LoadInst(lastCiblePtr, "", currentBlock); - Value* cmp = new ICmpInst(ICmpInst::ICMP_EQ, cl, lastCible, "", currentBlock); + Value* cmp = new ICmpInst(ICmpInst::ICMP_EQ, VT, lastCible, "", currentBlock); BasicBlock* ifTrue = createBasicBlock("cache ok"); BasicBlock* ifFalse = createBasicBlock("cache not ok"); Modified: vmkit/trunk/lib/JnJVM/LLVMRuntime/runtime-default.ll URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/LLVMRuntime/runtime-default.ll?rev=73068&r1=73067&r2=73068&view=diff ============================================================================== --- vmkit/trunk/lib/JnJVM/LLVMRuntime/runtime-default.ll (original) +++ vmkit/trunk/lib/JnJVM/LLVMRuntime/runtime-default.ll Mon Jun 8 08:19:13 2009 @@ -22,7 +22,7 @@ %ArrayUInt8 = type { %JavaObject, i8*, [0 x i8] } ;;; The CacheNode type. The first field is the last called method. -%CacheNode = type { i8*, %JavaCommonClass*, %CacheNode*, %Enveloppe* } +%CacheNode = type { i8*, %VT*, %CacheNode*, %Enveloppe* } ;;; The Enveloppe type, which contains the first cache and all the info ;;; to lookup in the constant pool. Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaCache.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaCache.h?rev=73068&r1=73067&r2=73068&view=diff ============================================================================== --- vmkit/trunk/lib/JnJVM/VMCore/JavaCache.h (original) +++ vmkit/trunk/lib/JnJVM/VMCore/JavaCache.h Mon Jun 8 08:19:13 2009 @@ -32,7 +32,7 @@ namespace jnjvm { class Enveloppe; -class UserClass; +class JavaVirtualTable; class UTF8; /// CacheNode - A {class, method pointer} pair. @@ -42,8 +42,8 @@ /// methPtr - The method pointer of this cache. void* methPtr; - /// lastCible - The class of this cache. - UserClass* lastCible; + /// lastCible - The VT corresponding to this cache. + JavaVirtualTable* lastCible; /// next - The next cache. CacheNode* next; Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp?rev=73068&r1=73067&r2=73068&view=diff ============================================================================== --- vmkit/trunk/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp (original) +++ vmkit/trunk/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp Mon Jun 8 08:19:13 2009 @@ -34,7 +34,7 @@ Enveloppe* enveloppe = cache->enveloppe; - UserCommonClass* ocl = obj->getClass(); + JavaVirtualTable* ovt = (JavaVirtualTable*)obj->getVirtualTable(); #ifndef SERVICE assert((obj->getClass()->isClass() && @@ -48,7 +48,7 @@ CacheNode* last = tmp; while (tmp) { - if (ocl == tmp->lastCible) { + if (ovt == tmp->lastCible) { rcache = tmp; break; } else { @@ -58,6 +58,7 @@ } if (!rcache) { + UserCommonClass* ocl = ovt->cl; UserClass* methodCl = 0; UserClass* lookup = ocl->isArray() ? ocl->super : ocl->asClass(); JavaMethod* dmeth = lookup->lookupMethod(enveloppe->methodName, @@ -79,7 +80,7 @@ } rcache->methPtr = dmeth->compiledPtr(); - rcache->lastCible = (UserClass*)ocl; + rcache->lastCible = ovt; } From nicolas.geoffray at lip6.fr Mon Jun 8 07:52:38 2009 From: nicolas.geoffray at lip6.fr (Nicolas Geoffray) Date: Mon, 08 Jun 2009 14:52:38 -0000 Subject: [vmkit-commits] [vmkit] r73069 - in /vmkit/trunk: include/jnjvm/JnjvmModule.h include/mvm/JIT.h lib/JnJVM/Classpath/ClasspathVMObject.cpp lib/JnJVM/Classpath/ClasspathVMSystem.cpp lib/JnJVM/Compiler/JITInfo.cpp lib/JnJVM/Compiler/JavaAOTCompiler.cpp lib/JnJVM/Compiler/JavaJITOpcodes.cpp lib/JnJVM/VMCore/JavaClass.cpp lib/JnJVM/VMCore/JavaClass.h lib/JnJVM/VMCore/JnjvmClassLoader.cpp lib/Mvm/Compiler/JIT.cpp Message-ID: <200906081452.n58EqePB018938@zion.cs.uiuc.edu> Author: geoffray Date: Mon Jun 8 09:52:37 2009 New Revision: 73069 URL: http://llvm.org/viewvc/llvm-project?rev=73069&view=rev Log: Use log size instead of direct size for array manipulation. Modified: vmkit/trunk/include/jnjvm/JnjvmModule.h vmkit/trunk/include/mvm/JIT.h vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMObject.cpp vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMSystem.cpp vmkit/trunk/lib/JnJVM/Compiler/JITInfo.cpp vmkit/trunk/lib/JnJVM/Compiler/JavaAOTCompiler.cpp vmkit/trunk/lib/JnJVM/Compiler/JavaJITOpcodes.cpp vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp vmkit/trunk/lib/Mvm/Compiler/JIT.cpp Modified: vmkit/trunk/include/jnjvm/JnjvmModule.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/jnjvm/JnjvmModule.h?rev=73069&r1=73068&r2=73069&view=diff ============================================================================== --- vmkit/trunk/include/jnjvm/JnjvmModule.h (original) +++ vmkit/trunk/include/jnjvm/JnjvmModule.h Mon Jun 8 09:52:37 2009 @@ -58,7 +58,7 @@ const llvm::Type* llvmType; const llvm::Type* llvmTypePtr; llvm::Constant* llvmNullConstant; - llvm::ConstantInt* sizeInBytesConstant; + llvm::ConstantInt* logSizeInBytesConstant; static void initialise(); static std::map AssessorInfo; Modified: vmkit/trunk/include/mvm/JIT.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/mvm/JIT.h?rev=73069&r1=73068&r2=73069&view=diff ============================================================================== --- vmkit/trunk/include/mvm/JIT.h (original) +++ vmkit/trunk/include/mvm/JIT.h Mon Jun 8 09:52:37 2009 @@ -152,7 +152,7 @@ static llvm::ConstantFP* constantFloatMinusZero; static llvm::ConstantFP* constantDoubleMinusZero; static llvm::Constant* constantPtrNull; - static llvm::ConstantInt* constantPtrSize; + static llvm::ConstantInt* constantPtrLogSize; static llvm::ConstantInt* constantThreadIDMask; static llvm::ConstantInt* constantStackOverflowMask; static llvm::ConstantInt* constantFatMask; Modified: vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMObject.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMObject.cpp?rev=73069&r1=73068&r2=73069&view=diff ============================================================================== --- vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMObject.cpp (original) +++ vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMObject.cpp Mon Jun 8 09:52:37 2009 @@ -38,11 +38,11 @@ if (cl->isArray()) { UserClassArray* array = cl->asArrayClass(); UserCommonClass* base = array->baseClass(); - uint32 primSize = base->isPrimitive() ? - base->asPrimitiveClass()->primSize : sizeof(JavaObject*); + uint32 logSize = base->isPrimitive() ? + base->asPrimitiveClass()->logSize : (sizeof(JavaObject*) == 8 ? 3 : 2); size = sizeof(JavaObject) + sizeof(ssize_t) + - ((JavaArray*)src)->size * primSize; + (((JavaArray*)src)->size << logSize); } else { assert(cl->isClass() && "Not a class!"); size = cl->asClass()->getVirtualSize(); Modified: vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMSystem.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMSystem.cpp?rev=73069&r1=73068&r2=73069&view=diff ============================================================================== --- vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMSystem.cpp (original) +++ vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMSystem.cpp Mon Jun 8 09:52:37 2009 @@ -83,13 +83,12 @@ } } - uint32 size = dstType->isPrimitive() ? - dstType->asPrimitiveClass()->primSize : sizeof(JavaObject*); - - assert(size && "Size zero in a arraycopy"); - void* ptrDst = (void*)((int64_t)(dst->elements) + size * dstart); - void* ptrSrc = (void*)((int64_t)(src->elements) + size * sstart); - memmove(ptrDst, ptrSrc, size * len); + 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)); + memmove(ptrDst, ptrSrc, len << logSize); if (doThrow) vm->arrayStoreException(); Modified: vmkit/trunk/lib/JnJVM/Compiler/JITInfo.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Compiler/JITInfo.cpp?rev=73069&r1=73068&r2=73069&view=diff ============================================================================== --- vmkit/trunk/lib/JnJVM/Compiler/JITInfo.cpp (original) +++ vmkit/trunk/lib/JnJVM/Compiler/JITInfo.cpp Mon Jun 8 09:52:37 2009 @@ -531,69 +531,79 @@ AssessorInfo[I_VOID].llvmType = Type::VoidTy; AssessorInfo[I_VOID].llvmTypePtr = 0; AssessorInfo[I_VOID].llvmNullConstant = 0; - AssessorInfo[I_VOID].sizeInBytesConstant = 0; + AssessorInfo[I_VOID].logSizeInBytesConstant = 0; AssessorInfo[I_BOOL].llvmType = Type::Int8Ty; AssessorInfo[I_BOOL].llvmTypePtr = PointerType::getUnqual(Type::Int8Ty); AssessorInfo[I_BOOL].llvmNullConstant = Constant::getNullValue(Type::Int8Ty); - AssessorInfo[I_BOOL].sizeInBytesConstant = mvm::MvmModule::constantOne; + AssessorInfo[I_BOOL].logSizeInBytesConstant = + mvm::MvmModule::constantZero; AssessorInfo[I_BYTE].llvmType = Type::Int8Ty; AssessorInfo[I_BYTE].llvmTypePtr = PointerType::getUnqual(Type::Int8Ty); AssessorInfo[I_BYTE].llvmNullConstant = Constant::getNullValue(Type::Int8Ty); - AssessorInfo[I_BYTE].sizeInBytesConstant = mvm::MvmModule::constantOne; + AssessorInfo[I_BYTE].logSizeInBytesConstant = + mvm::MvmModule::constantZero; AssessorInfo[I_SHORT].llvmType = Type::Int16Ty; AssessorInfo[I_SHORT].llvmTypePtr = PointerType::getUnqual(Type::Int16Ty); AssessorInfo[I_SHORT].llvmNullConstant = Constant::getNullValue(Type::Int16Ty); - AssessorInfo[I_SHORT].sizeInBytesConstant = mvm::MvmModule::constantTwo; + AssessorInfo[I_SHORT].logSizeInBytesConstant = + mvm::MvmModule::constantOne; AssessorInfo[I_CHAR].llvmType = Type::Int16Ty; AssessorInfo[I_CHAR].llvmTypePtr = PointerType::getUnqual(Type::Int16Ty); AssessorInfo[I_CHAR].llvmNullConstant = Constant::getNullValue(Type::Int16Ty); - AssessorInfo[I_CHAR].sizeInBytesConstant = mvm::MvmModule::constantTwo; + AssessorInfo[I_CHAR].logSizeInBytesConstant = + mvm::MvmModule::constantOne; AssessorInfo[I_INT].llvmType = Type::Int32Ty; AssessorInfo[I_INT].llvmTypePtr = PointerType::getUnqual(Type::Int32Ty); AssessorInfo[I_INT].llvmNullConstant = Constant::getNullValue(Type::Int32Ty); - AssessorInfo[I_INT].sizeInBytesConstant = mvm::MvmModule::constantFour; + AssessorInfo[I_INT].logSizeInBytesConstant = + mvm::MvmModule::constantTwo; AssessorInfo[I_FLOAT].llvmType = Type::FloatTy; AssessorInfo[I_FLOAT].llvmTypePtr = PointerType::getUnqual(Type::FloatTy); AssessorInfo[I_FLOAT].llvmNullConstant = Constant::getNullValue(Type::FloatTy); - AssessorInfo[I_FLOAT].sizeInBytesConstant = mvm::MvmModule::constantFour; + AssessorInfo[I_FLOAT].logSizeInBytesConstant = + mvm::MvmModule::constantTwo; AssessorInfo[I_LONG].llvmType = Type::Int64Ty; AssessorInfo[I_LONG].llvmTypePtr = PointerType::getUnqual(Type::Int64Ty); AssessorInfo[I_LONG].llvmNullConstant = Constant::getNullValue(Type::Int64Ty); - AssessorInfo[I_LONG].sizeInBytesConstant = mvm::MvmModule::constantEight; + AssessorInfo[I_LONG].logSizeInBytesConstant = + mvm::MvmModule::constantThree; AssessorInfo[I_DOUBLE].llvmType = Type::DoubleTy; AssessorInfo[I_DOUBLE].llvmTypePtr = PointerType::getUnqual(Type::DoubleTy); AssessorInfo[I_DOUBLE].llvmNullConstant = Constant::getNullValue(Type::DoubleTy); - AssessorInfo[I_DOUBLE].sizeInBytesConstant = mvm::MvmModule::constantEight; + AssessorInfo[I_DOUBLE].logSizeInBytesConstant = + mvm::MvmModule::constantThree; AssessorInfo[I_TAB].llvmType = JnjvmModule::JavaObjectType; AssessorInfo[I_TAB].llvmTypePtr = PointerType::getUnqual(JnjvmModule::JavaObjectType); AssessorInfo[I_TAB].llvmNullConstant = JnjvmModule::JavaObjectNullConstant; - AssessorInfo[I_TAB].sizeInBytesConstant = mvm::MvmModule::constantPtrSize; + AssessorInfo[I_TAB].logSizeInBytesConstant = + mvm::MvmModule::constantPtrLogSize; AssessorInfo[I_REF].llvmType = JnjvmModule::JavaObjectType; AssessorInfo[I_REF].llvmTypePtr = PointerType::getUnqual(JnjvmModule::JavaObjectType); AssessorInfo[I_REF].llvmNullConstant = JnjvmModule::JavaObjectNullConstant; - AssessorInfo[I_REF].sizeInBytesConstant = mvm::MvmModule::constantPtrSize; + AssessorInfo[I_REF].logSizeInBytesConstant = + mvm::MvmModule::constantPtrLogSize; } std::map LLVMAssessorInfo::AssessorInfo; Modified: vmkit/trunk/lib/JnJVM/Compiler/JavaAOTCompiler.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Compiler/JavaAOTCompiler.cpp?rev=73069&r1=73068&r2=73069&view=diff ============================================================================== --- vmkit/trunk/lib/JnJVM/Compiler/JavaAOTCompiler.cpp (original) +++ vmkit/trunk/lib/JnJVM/Compiler/JavaAOTCompiler.cpp Mon Jun 8 09:52:37 2009 @@ -802,7 +802,7 @@ ClassElts.push_back(CreateConstantFromCommonClass(cl)); // primSize - ClassElts.push_back(ConstantInt::get(Type::Int32Ty, cl->primSize)); + ClassElts.push_back(ConstantInt::get(Type::Int32Ty, cl->logSize)); return ConstantStruct::get(STy, ClassElts); } Modified: vmkit/trunk/lib/JnJVM/Compiler/JavaJITOpcodes.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Compiler/JavaJITOpcodes.cpp?rev=73069&r1=73068&r2=73069&view=diff ============================================================================== --- vmkit/trunk/lib/JnJVM/Compiler/JavaJITOpcodes.cpp (original) +++ vmkit/trunk/lib/JnJVM/Compiler/JavaJITOpcodes.cpp Mon Jun 8 09:52:37 2009 @@ -1919,7 +1919,7 @@ #endif LLVMAssessorInfo& LAI = LLVMAssessorInfo::AssessorInfo[charId]; - sizeElement = LAI.sizeInBytesConstant; + sizeElement = LAI.logSizeInBytesConstant; if (TheCompiler->isStaticCompiling() && valCl->getType() != module->JavaClassArrayType) { valCl = new LoadInst(valCl, "", currentBlock); @@ -1962,7 +1962,7 @@ currentBlock); } - sizeElement = module->constantPtrSize; + sizeElement = module->constantPtrLogSize; } Value* arg1 = popAsInt(); @@ -1991,7 +1991,7 @@ currentBlock = BB2; } - Value* mult = BinaryOperator::CreateMul(arg1, sizeElement, "", + Value* mult = BinaryOperator::CreateShl(arg1, sizeElement, "", currentBlock); Value* size = BinaryOperator::CreateAdd(module->JavaArraySizeConstant, mult, Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp?rev=73069&r1=73068&r2=73069&view=diff ============================================================================== --- vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp (original) +++ vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp Mon Jun 8 09:52:37 2009 @@ -219,7 +219,7 @@ uint32 size = JavaVirtualTable::getBaseSize(); virtualVT = new(loader->allocator, size) JavaVirtualTable(this); access = ACC_ABSTRACT | ACC_FINAL | ACC_PUBLIC | JNJVM_PRIMITIVE; - primSize = nb; + logSize = nb; } Class::Class(JnjvmClassLoader* loader, const UTF8* n, ArrayUInt8* B) : @@ -271,10 +271,10 @@ JavaArray* UserClassArray::doNew(sint32 n, mvm::Allocator& allocator) { UserCommonClass* cl = baseClass(); - uint32 primSize = cl->isPrimitive() ? - cl->asPrimitiveClass()->primSize : sizeof(JavaObject*); + uint32 logSize = cl->isPrimitive() ? + cl->asPrimitiveClass()->logSize : (sizeof(JavaObject*) == 8 ? 3 : 2); VirtualTable* VT = virtualVT; - uint32 size = sizeof(JavaObject) + sizeof(ssize_t) + n * primSize; + uint32 size = sizeof(JavaObject) + sizeof(ssize_t) + (n << logSize); JavaArray* res = (JavaArray*)allocator.allocateManagedObject(size, VT); res->size = n; return res; @@ -283,10 +283,10 @@ JavaArray* UserClassArray::doNew(sint32 n, mvm::BumpPtrAllocator& allocator) { UserCommonClass* cl = baseClass(); - uint32 primSize = cl->isPrimitive() ? - cl->asPrimitiveClass()->primSize : sizeof(JavaObject*); + uint32 logSize = cl->isPrimitive() ? + cl->asPrimitiveClass()->logSize : (sizeof(JavaObject*) == 8 ? 3 : 2); VirtualTable* VT = virtualVT; - uint32 size = sizeof(JavaObject) + sizeof(ssize_t) + n * primSize; + uint32 size = sizeof(JavaObject) + sizeof(ssize_t) + (n << logSize); JavaArray* res = (JavaArray*)allocator.Allocate(size); ((void**)res)[0] = VT; Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h?rev=73069&r1=73068&r2=73069&view=diff ============================================================================== --- vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h (original) +++ vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h Mon Jun 8 09:52:37 2009 @@ -351,9 +351,9 @@ class ClassPrimitive : public CommonClass { public: - /// primSize - The primitive size of this class, eg 4 for int. + /// logSize - The log size of this class, eg 2 for int. /// - uint32 primSize; + uint32 logSize; /// ClassPrimitive - Constructs a primitive class. Only called at boot Modified: vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp?rev=73069&r1=73068&r2=73069&view=diff ============================================================================== --- vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp (original) +++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp Mon Jun 8 09:52:37 2009 @@ -133,15 +133,15 @@ ClassArray::InterfacesArray = InterfacesArray; // Create the primitive classes. - upcalls->OfChar = UPCALL_PRIMITIVE_CLASS(this, "char", 2); - upcalls->OfBool = UPCALL_PRIMITIVE_CLASS(this, "boolean", 1); - upcalls->OfShort = UPCALL_PRIMITIVE_CLASS(this, "short", 2); - upcalls->OfInt = UPCALL_PRIMITIVE_CLASS(this, "int", 4); - upcalls->OfLong = UPCALL_PRIMITIVE_CLASS(this, "long", 8); - upcalls->OfFloat = UPCALL_PRIMITIVE_CLASS(this, "float", 4); - upcalls->OfDouble = UPCALL_PRIMITIVE_CLASS(this, "double", 8); + upcalls->OfChar = UPCALL_PRIMITIVE_CLASS(this, "char", 1); + upcalls->OfBool = UPCALL_PRIMITIVE_CLASS(this, "boolean", 0); + upcalls->OfShort = UPCALL_PRIMITIVE_CLASS(this, "short", 1); + upcalls->OfInt = UPCALL_PRIMITIVE_CLASS(this, "int", 2); + upcalls->OfLong = UPCALL_PRIMITIVE_CLASS(this, "long", 3); + upcalls->OfFloat = UPCALL_PRIMITIVE_CLASS(this, "float", 2); + upcalls->OfDouble = UPCALL_PRIMITIVE_CLASS(this, "double", 3); upcalls->OfVoid = UPCALL_PRIMITIVE_CLASS(this, "void", 0); - upcalls->OfByte = UPCALL_PRIMITIVE_CLASS(this, "byte", 1); + upcalls->OfByte = UPCALL_PRIMITIVE_CLASS(this, "byte", 0); } // Create the primitive arrays. Modified: vmkit/trunk/lib/Mvm/Compiler/JIT.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/Compiler/JIT.cpp?rev=73069&r1=73068&r2=73069&view=diff ============================================================================== --- vmkit/trunk/lib/Mvm/Compiler/JIT.cpp (original) +++ vmkit/trunk/lib/Mvm/Compiler/JIT.cpp Mon Jun 8 09:52:37 2009 @@ -130,7 +130,8 @@ constantPtrZero = ConstantInt::get(pointerSizeType, 0); constantPtrNull = Constant::getNullValue(ptrType); - constantPtrSize = ConstantInt::get(Type::Int32Ty, sizeof(void*)); + constantPtrLogSize = + ConstantInt::get(Type::Int32Ty, sizeof(void*) == 8 ? 3 : 2); arrayPtrType = PointerType::getUnqual(ArrayType::get(Type::Int8Ty, 0)); } @@ -241,7 +242,7 @@ llvm::ConstantFP* MvmModule::constantFloatMinusZero; llvm::ConstantFP* MvmModule::constantDoubleMinusZero; llvm::Constant* MvmModule::constantPtrNull; -llvm::ConstantInt* MvmModule::constantPtrSize; +llvm::ConstantInt* MvmModule::constantPtrLogSize; llvm::ConstantInt* MvmModule::constantThreadIDMask; llvm::ConstantInt* MvmModule::constantStackOverflowMask; llvm::ConstantInt* MvmModule::constantFatMask; From nicolas.geoffray at lip6.fr Tue Jun 9 02:26:29 2009 From: nicolas.geoffray at lip6.fr (Nicolas Geoffray) Date: Tue, 09 Jun 2009 09:26:29 -0000 Subject: [vmkit-commits] [vmkit] r73134 - /vmkit/trunk/lib/JnJVM/Compiler/JavaAOTCompiler.cpp Message-ID: <200906090926.n599QYXx002094@zion.cs.uiuc.edu> Author: geoffray Date: Tue Jun 9 04:26:10 2009 New Revision: 73134 URL: http://llvm.org/viewvc/llvm-project?rev=73134&view=rev Log: Set the finalizer when it is native. Modified: vmkit/trunk/lib/JnJVM/Compiler/JavaAOTCompiler.cpp Modified: vmkit/trunk/lib/JnJVM/Compiler/JavaAOTCompiler.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Compiler/JavaAOTCompiler.cpp?rev=73134&r1=73133&r2=73134&view=diff ============================================================================== --- vmkit/trunk/lib/JnJVM/Compiler/JavaAOTCompiler.cpp (original) +++ vmkit/trunk/lib/JnJVM/Compiler/JavaAOTCompiler.cpp Tue Jun 9 04:26:10 2009 @@ -1131,10 +1131,18 @@ // Destructor Function* Finalizer = 0; - JavaMethod* meth = (JavaMethod*)(RealVT->destructor); - if (meth) { - LLVMMethodInfo* LMI = getMethodInfo(meth); - Finalizer = LMI->getMethod(); + if (RealVT->operatorDelete) { + char* name = (char*)(RealVT->destructor); + std::vector Args; + const FunctionType* Ty = FunctionType::get(Type::VoidTy, Args, false); + Finalizer = Function::Create(Ty, GlobalValue::InternalLinkage, name, + getLLVMModule()); + } else { + JavaMethod* meth = (JavaMethod*)(RealVT->destructor); + if (meth) { + LLVMMethodInfo* LMI = getMethodInfo(meth); + Finalizer = LMI->getMethod(); + } } Elemts.push_back(Finalizer ? ConstantExpr::getCast(Instruction::BitCast, Finalizer, PTy) : N); From nicolas.geoffray at lip6.fr Tue Jun 9 14:02:17 2009 From: nicolas.geoffray at lip6.fr (Nicolas Geoffray) Date: Tue, 09 Jun 2009 21:02:17 -0000 Subject: [vmkit-commits] [vmkit] r73144 - in /vmkit/trunk/lib/JnJVM/VMCore: JavaObject.cpp JavaObject.h JavaThread.h Message-ID: <200906092102.n59L2IDt024217@zion.cs.uiuc.edu> Author: geoffray Date: Tue Jun 9 16:02:16 2009 New Revision: 73144 URL: http://llvm.org/viewvc/llvm-project?rev=73144&view=rev Log: Inline the list of threads doing a wait in the JavaThread structure. Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaObject.cpp vmkit/trunk/lib/JnJVM/VMCore/JavaObject.h vmkit/trunk/lib/JnJVM/VMCore/JavaThread.h Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaObject.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaObject.cpp?rev=73144&r1=73143&r2=73144&view=diff ============================================================================== --- vmkit/trunk/lib/JnJVM/VMCore/JavaObject.cpp (original) +++ vmkit/trunk/lib/JnJVM/VMCore/JavaObject.cpp Tue Jun 9 16:02:16 2009 @@ -7,8 +7,6 @@ // //===----------------------------------------------------------------------===// -#include - #include "mvm/Threads/Locks.h" #include "JavaClass.h" @@ -20,52 +18,6 @@ using namespace jnjvm; -void JavaCond::notify() { - for (std::vector::iterator i = threads.begin(), - e = threads.end(); i!= e;) { - JavaThread* cur = *i; - cur->lock.lock(); - if (cur->interruptFlag != 0) { - cur->lock.unlock(); - ++i; - continue; - } else if (cur->javaThread != 0) { - cur->varcond.signal(); - cur->lock.unlock(); - threads.erase(i); - break; - } else { // dead thread - ++i; - threads.erase(i - 1); - } - } -} - -void JavaCond::notifyAll() { - for (std::vector::iterator i = threads.begin(), - e = threads.end(); i!= e; ++i) { - JavaThread* cur = *i; - cur->lock.lock(); - cur->varcond.signal(); - cur->lock.unlock(); - } - threads.clear(); -} - -void JavaCond::wait(JavaThread* th) { - threads.push_back(th); -} - -void JavaCond::remove(JavaThread* th) { - for (std::vector::iterator i = threads.begin(), - e = threads.end(); i!= e; ++i) { - if (*i == th) { - threads.erase(i); - break; - } - } -} - LockObj* LockObj::allocate(JavaObject* owner) { #ifdef USE_GC_BOEHM LockObj* res = new LockObj(); @@ -94,9 +46,22 @@ thread->interruptFlag = 0; thread->getJVM()->interruptedException(this); } else { - JavaCond* cond = l->getCond(); - cond->wait(thread); thread->state = JavaThread::StateWaiting; + if (l->firstThread) { + l->firstThread->prevWaiting->nextWaiting = thread; + thread->prevWaiting = l->firstThread->prevWaiting; + thread->nextWaiting = l->firstThread; + l->firstThread->prevWaiting = thread; + if (l->firstThread->nextWaiting == l->firstThread) + l->firstThread->nextWaiting = thread; + } else { + l->firstThread = thread; + thread->nextWaiting = thread; + thread->prevWaiting = thread; + } + assert(thread->prevWaiting && thread->nextWaiting && "Inconsistent list"); + assert(l->firstThread->prevWaiting && l->firstThread->nextWaiting && + "Inconsistent list"); bool timeout = false; uint32 recur = l->lock.unlockAll(); @@ -112,7 +77,24 @@ l->lock.lockAll(recur); if (interrupted || timeout) { - cond->remove(thread); + if (thread->nextWaiting) { + if (l->firstThread != thread) { + thread->nextWaiting->prevWaiting = thread->prevWaiting; + thread->prevWaiting->nextWaiting = thread->nextWaiting; + assert(l->firstThread->prevWaiting && + l->firstThread->nextWaiting && "Inconsistent list"); + } else if (thread->nextWaiting == thread) { + l->firstThread = 0; + } else { + l->firstThread = thread->nextWaiting; + l->firstThread->prevWaiting = thread->prevWaiting; + thread->prevWaiting->nextWaiting = l->firstThread; + assert(l->firstThread->prevWaiting && + l->firstThread->nextWaiting && "Inconsistent list"); + } + thread->nextWaiting = 0; + thread->prevWaiting = 0; + } } thread->state = JavaThread::StateRunning; @@ -139,7 +121,42 @@ void JavaObject::notify() { if (owner()) { LockObj * l = lock.getFatLock(); - if (l) l->getCond()->notify(); + if (l) { + JavaThread* cur = l->firstThread; + if (cur) { + do { + cur->lock.lock(); + if (cur->interruptFlag != 0) { + cur->lock.unlock(); + cur = cur->nextWaiting; + } else if (cur->javaThread != 0) { + assert(cur->prevWaiting && cur->nextWaiting && + "Inconsistent list"); + if (cur != l->firstThread) { + cur->prevWaiting->nextWaiting = cur->nextWaiting; + cur->nextWaiting->prevWaiting = cur->prevWaiting; + assert(l->firstThread->prevWaiting && + l->firstThread->nextWaiting && "Inconsistent list"); + } else if (cur->nextWaiting == cur) { + l->firstThread = 0; + } else { + l->firstThread = cur->nextWaiting; + l->firstThread->prevWaiting = cur->prevWaiting; + cur->prevWaiting->nextWaiting = l->firstThread; + assert(l->firstThread->prevWaiting && + l->firstThread->nextWaiting && "Inconsistent list"); + } + cur->prevWaiting = 0; + cur->nextWaiting = 0; + cur->varcond.signal(); + cur->lock.unlock(); + break; + } else { + cur->lock.unlock(); + } + } while (cur != l->firstThread); + } + } } else { JavaThread::get()->getJVM()->illegalMonitorStateException(this); } @@ -149,7 +166,21 @@ void JavaObject::notifyAll() { if (owner()) { LockObj * l = lock.getFatLock(); - if (l) l->getCond()->notifyAll(); + if (l) { + JavaThread* cur = l->firstThread; + if (cur) { + do { + cur->lock.lock(); + JavaThread* temp = cur->nextWaiting; + cur->prevWaiting = 0; + cur->nextWaiting = 0; + cur->varcond.signal(); + cur->lock.unlock(); + cur = temp; + } while (cur != l->firstThread); + l->firstThread = 0; + } + } } else { JavaThread::get()->getJVM()->illegalMonitorStateException(this); } Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaObject.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaObject.h?rev=73144&r1=73143&r2=73144&view=diff ============================================================================== --- vmkit/trunk/lib/JnJVM/VMCore/JavaObject.h (original) +++ vmkit/trunk/lib/JnJVM/VMCore/JavaObject.h Tue Jun 9 16:02:16 2009 @@ -10,8 +10,6 @@ #ifndef JNJVM_JAVA_OBJECT_H #define JNJVM_JAVA_OBJECT_H -#include - #include "mvm/Object.h" #include "mvm/Threads/Locks.h" #include "mvm/Threads/Thread.h" @@ -28,36 +26,6 @@ class Typedef; class UserCommonClass; -/// JavaCond - This class maintains a list of threads blocked on a wait. -/// notify and notifyAll will change the state of one or more of these threads. -/// -class JavaCond { -private: - - /// threads - The list of threads currently waiting. - /// - std::vector threads; - -public: - - /// notify - The Java notify: takes the first thread in the list and wakes - /// it up. - void notify(); - - /// notifyAll - The Java notifyAll: wakes all threads in the list. - /// - void notifyAll(); - - /// wait - The Java wait: the thread blocks waiting to be notified. - /// - void wait(JavaThread* th); - - /// remove - Remove the thread from the list. This is called by threads being - /// interrupted or timed out on a wait. - void remove(JavaThread* th); -}; - - /// LockObj - This class represents a Java monitor. /// class LockObj : public gc { @@ -69,9 +37,9 @@ /// mvm::LockRecursive lock; - /// varcond - The condition variable for wait, notify and notifyAll calls. + /// firstThread - The first thread doing a wait. /// - JavaCond varcond; + JavaThread* firstThread; public: /// allocate - Allocates a lock object. Only the internal lock is allocated. @@ -107,13 +75,6 @@ return lock.getOwner(); } - /// getCond - Returns the conditation variable of this lock, allocating it - /// if non-existant. - /// - JavaCond* getCond() { - return &varcond; - } - /// VT - LockObj is GC-allocated, so we must make the VT explicit. /// static VirtualTable VT; @@ -122,11 +83,10 @@ /// static void staticDestructor(LockObj* obj) { obj->lock.~LockRecursive(); - obj->varcond.~JavaCond(); } /// LockObj - Empty constructor. - LockObj() {} + LockObj() { firstThread = 0; } }; /// JavaVirtualTable - This class is the virtual table of instances of Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaThread.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaThread.h?rev=73144&r1=73143&r2=73144&view=diff ============================================================================== --- vmkit/trunk/lib/JnJVM/VMCore/JavaThread.h (original) +++ vmkit/trunk/lib/JnJVM/VMCore/JavaThread.h Tue Jun 9 16:02:16 2009 @@ -88,7 +88,15 @@ /// interruptFlag - Has this thread been interrupted? /// uint32 interruptFlag; + + /// nextWaiting - Next thread waiting on the same monitor. + /// + JavaThread* nextWaiting; + /// prevWaiting - Previous thread waiting on the same monitor. + /// + JavaThread* prevWaiting; + static const unsigned int StateRunning; static const unsigned int StateWaiting; static const unsigned int StateInterrupted; From nicolas.geoffray at lip6.fr Wed Jun 10 03:19:05 2009 From: nicolas.geoffray at lip6.fr (Nicolas Geoffray) Date: Wed, 10 Jun 2009 10:19:05 -0000 Subject: [vmkit-commits] [vmkit] r73168 - /vmkit/trunk/lib/JnJVM/Compiler/JavaAOTCompiler.cpp Message-ID: <200906101019.n5AAJ5VC025615@zion.cs.uiuc.edu> Author: geoffray Date: Wed Jun 10 05:18:59 2009 New Revision: 73168 URL: http://llvm.org/viewvc/llvm-project?rev=73168&view=rev Log: Da: an external function defined in VMKit must have ExternalLinkage. Modified: vmkit/trunk/lib/JnJVM/Compiler/JavaAOTCompiler.cpp Modified: vmkit/trunk/lib/JnJVM/Compiler/JavaAOTCompiler.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Compiler/JavaAOTCompiler.cpp?rev=73168&r1=73167&r2=73168&view=diff ============================================================================== --- vmkit/trunk/lib/JnJVM/Compiler/JavaAOTCompiler.cpp (original) +++ vmkit/trunk/lib/JnJVM/Compiler/JavaAOTCompiler.cpp Wed Jun 10 05:18:59 2009 @@ -1135,7 +1135,7 @@ char* name = (char*)(RealVT->destructor); std::vector Args; const FunctionType* Ty = FunctionType::get(Type::VoidTy, Args, false); - Finalizer = Function::Create(Ty, GlobalValue::InternalLinkage, name, + Finalizer = Function::Create(Ty, GlobalValue::ExternalLinkage, name, getLLVMModule()); } else { JavaMethod* meth = (JavaMethod*)(RealVT->destructor); From nicolas.geoffray at lip6.fr Wed Jun 10 08:11:36 2009 From: nicolas.geoffray at lip6.fr (Nicolas Geoffray) Date: Wed, 10 Jun 2009 15:11:36 -0000 Subject: [vmkit-commits] [vmkit] r73169 - in /vmkit/trunk/lib/JnJVM/LLVMRuntime: runtime-multi-mmap.ll runtime-single-mmap.ll Message-ID: <200906101511.n5AFBalT002469@zion.cs.uiuc.edu> Author: geoffray Date: Wed Jun 10 10:11:34 2009 New Revision: 73169 URL: http://llvm.org/viewvc/llvm-project?rev=73169&view=rev Log: Forgot to put that function in the list of external functions. Modified: vmkit/trunk/lib/JnJVM/LLVMRuntime/runtime-multi-mmap.ll vmkit/trunk/lib/JnJVM/LLVMRuntime/runtime-single-mmap.ll Modified: vmkit/trunk/lib/JnJVM/LLVMRuntime/runtime-multi-mmap.ll URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/LLVMRuntime/runtime-multi-mmap.ll?rev=73169&r1=73168&r2=73169&view=diff ============================================================================== --- vmkit/trunk/lib/JnJVM/LLVMRuntime/runtime-multi-mmap.ll (original) +++ vmkit/trunk/lib/JnJVM/LLVMRuntime/runtime-multi-mmap.ll Wed Jun 10 10:11:34 2009 @@ -6,4 +6,5 @@ declare void @JavaObjectTracer(%JavaObject*, i8*) declare void @JavaArrayTracer(%JavaObject*, i8*) declare void @ArrayObjectTracer(%JavaObject*, i8*) +declare void @RegularObjectTracer(%JavaObject*, i8*) declare void @EmptyTracer(%JavaObject*, i8*) Modified: vmkit/trunk/lib/JnJVM/LLVMRuntime/runtime-single-mmap.ll URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/LLVMRuntime/runtime-single-mmap.ll?rev=73169&r1=73168&r2=73169&view=diff ============================================================================== --- vmkit/trunk/lib/JnJVM/LLVMRuntime/runtime-single-mmap.ll (original) +++ vmkit/trunk/lib/JnJVM/LLVMRuntime/runtime-single-mmap.ll Wed Jun 10 10:11:34 2009 @@ -6,4 +6,5 @@ declare void @JavaObjectTracer(%JavaObject*) declare void @JavaArrayTracer(%JavaObject*) declare void @ArrayObjectTracer(%JavaObject*) +declare void @RegularObjectTracer(%JavaObject*) declare void @EmptyTracer(%JavaObject*) From nicolas.geoffray at lip6.fr Wed Jun 10 10:33:55 2009 From: nicolas.geoffray at lip6.fr (Nicolas Geoffray) Date: Wed, 10 Jun 2009 17:33:55 -0000 Subject: [vmkit-commits] [vmkit] r73170 - in /vmkit/trunk: include/mvm/Threads/Locks.h lib/JnJVM/Classpath/ClasspathVMThread.cpp lib/JnJVM/VMCore/JavaObject.cpp lib/JnJVM/VMCore/JavaObject.h lib/JnJVM/VMCore/JavaThread.h lib/Mvm/CommonThread/ctlock.cpp Message-ID: <200906101733.n5AHXtmh006685@zion.cs.uiuc.edu> Author: geoffray Date: Wed Jun 10 12:33:54 2009 New Revision: 73170 URL: http://llvm.org/viewvc/llvm-project?rev=73170&view=rev Log: Change the wait()/interrupt() implementation to not use a thread-local lock. Modified: vmkit/trunk/include/mvm/Threads/Locks.h vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMThread.cpp vmkit/trunk/lib/JnJVM/VMCore/JavaObject.cpp vmkit/trunk/lib/JnJVM/VMCore/JavaObject.h vmkit/trunk/lib/JnJVM/VMCore/JavaThread.h vmkit/trunk/lib/Mvm/CommonThread/ctlock.cpp Modified: vmkit/trunk/include/mvm/Threads/Locks.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/mvm/Threads/Locks.h?rev=73170&r1=73169&r2=73170&view=diff ============================================================================== --- vmkit/trunk/include/mvm/Threads/Locks.h (original) +++ vmkit/trunk/include/mvm/Threads/Locks.h Wed Jun 10 12:33:54 2009 @@ -157,7 +157,8 @@ virtual void lock(); virtual void unlock(); - + virtual int tryLock(); + /// recursionCount - Get the number of times the lock has been locked. /// int recursionCount() { return n; } Modified: vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMThread.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMThread.cpp?rev=73170&r1=73169&r2=73170&view=diff ============================================================================== --- vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMThread.cpp (original) +++ vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMThread.cpp Wed Jun 10 12:33:54 2009 @@ -105,23 +105,39 @@ Jnjvm* vm = JavaThread::get()->getJVM(); JavaObject* vmthread = (JavaObject*)_vmthread; JavaField* field = vm->upcalls->vmdataVMThread; + // 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) mvm::Thread::yield(); JavaThread* th = (JavaThread*)field->getObjectField(vmthread); - th->lock.lock(); th->interruptFlag = 1; + LockObj* lock = th->waitsOn; - // here we could also raise a signal for interrupting I/O - if (th->state == JavaThread::StateWaiting) { + // If the thread is blocked on a wait. We also verify nextWaiting in case + // the thread has been notified. + if (lock && th->nextWaiting) { th->state = JavaThread::StateInterrupted; + + // Make sure the thread is waiting. + uint32 locked = 0; + while (true) { + locked = (lock->tryAcquire() == 0); + if (locked || (lock->getOwner() != th && lock->getOwner() != 0)) + break; + else mvm::Thread::yield(); + } + + // Interrupt the thread. th->varcond.signal(); + + // Release the lock if we acquired it. + if (locked) lock->release(); } - - th->lock.unlock(); + // Here we could also raise a signal for interrupting I/O + END_NATIVE_EXCEPTION } Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaObject.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaObject.cpp?rev=73170&r1=73169&r2=73170&view=diff ============================================================================== --- vmkit/trunk/lib/JnJVM/VMCore/JavaObject.cpp (original) +++ vmkit/trunk/lib/JnJVM/VMCore/JavaObject.cpp Wed Jun 10 12:33:54 2009 @@ -37,15 +37,14 @@ if (owner()) { LockObj * l = lock.changeToFatlock(this); JavaThread* thread = JavaThread::get(); - mvm::Lock& mutexThread = thread->lock; + thread->waitsOn = l; mvm::Cond& varcondThread = thread->varcond; - mutexThread.lock(); if (thread->interruptFlag != 0) { - mutexThread.unlock(); thread->interruptFlag = 0; + thread->waitsOn = 0; thread->getJVM()->interruptedException(this); - } else { + } else { thread->state = JavaThread::StateWaiting; if (l->firstThread) { l->firstThread->prevWaiting->nextWaiting = thread; @@ -64,19 +63,20 @@ "Inconsistent list"); bool timeout = false; - uint32 recur = l->lock.unlockAll(); - if (timed) { - timeout = varcondThread.timedWait(&mutexThread, info); - } else { - varcondThread.wait(&mutexThread); + if (!thread->interruptFlag) { + if (timed) { + timeout = varcondThread.timedWait(&l->lock, info); + } else { + varcondThread.wait(&l->lock); + } } + bool interrupted = (thread->interruptFlag != 0); - mutexThread.unlock(); - l->lock.lockAll(recur); if (interrupted || timeout) { + if (thread->nextWaiting) { if (l->firstThread != thread) { thread->nextWaiting->prevWaiting = thread->prevWaiting; @@ -94,10 +94,15 @@ } thread->nextWaiting = 0; thread->prevWaiting = 0; + } else { + assert(!thread->prevWaiting && "Inconstitent state"); + // Notify lost, notify someone else. + notify(); } } - + thread->state = JavaThread::StateRunning; + thread->waitsOn = 0; if (interrupted) { thread->interruptFlag = 0; @@ -125,11 +130,10 @@ JavaThread* cur = l->firstThread; if (cur) { do { - cur->lock.lock(); if (cur->interruptFlag != 0) { - cur->lock.unlock(); cur = cur->nextWaiting; - } else if (cur->javaThread != 0) { + } else { + assert(cur->javaThread && "No java thread"); assert(cur->prevWaiting && cur->nextWaiting && "Inconsistent list"); if (cur != l->firstThread) { @@ -149,10 +153,7 @@ cur->prevWaiting = 0; cur->nextWaiting = 0; cur->varcond.signal(); - cur->lock.unlock(); break; - } else { - cur->lock.unlock(); } } while (cur != l->firstThread); } @@ -170,12 +171,10 @@ JavaThread* cur = l->firstThread; if (cur) { do { - cur->lock.lock(); JavaThread* temp = cur->nextWaiting; cur->prevWaiting = 0; cur->nextWaiting = 0; cur->varcond.signal(); - cur->lock.unlock(); cur = temp; } while (cur != l->firstThread); l->firstThread = 0; Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaObject.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaObject.h?rev=73170&r1=73169&r2=73170&view=diff ============================================================================== --- vmkit/trunk/lib/JnJVM/VMCore/JavaObject.h (original) +++ vmkit/trunk/lib/JnJVM/VMCore/JavaObject.h Wed Jun 10 12:33:54 2009 @@ -52,6 +52,12 @@ lock.lock(); } + /// tryAcquire - Tries to acquire the lock. + /// + int tryAcquire() { + return lock.tryLock(); + } + /// acquireAll - Acquires the lock nb times. void acquireAll(uint32 nb) { lock.lockAll(nb); Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaThread.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaThread.h?rev=73170&r1=73169&r2=73170&view=diff ============================================================================== --- vmkit/trunk/lib/JnJVM/VMCore/JavaThread.h (original) +++ vmkit/trunk/lib/JnJVM/VMCore/JavaThread.h Wed Jun 10 12:33:54 2009 @@ -24,6 +24,7 @@ class Class; class JavaObject; class Jnjvm; +class LockObj; #define BEGIN_NATIVE_EXCEPTION(level) \ @@ -76,10 +77,6 @@ /// JavaObject* vmThread; - /// lock - This lock is used when waiting or being notified or interrupted. - /// - mvm::LockNormal lock; - /// varcond - Condition variable when the thread needs to be awaken from /// a wait. /// @@ -97,6 +94,10 @@ /// JavaThread* prevWaiting; + /// waitsOn - The monitor on which the thread is waiting on. + /// + LockObj* waitsOn; + static const unsigned int StateRunning; static const unsigned int StateWaiting; static const unsigned int StateInterrupted; Modified: vmkit/trunk/lib/Mvm/CommonThread/ctlock.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/CommonThread/ctlock.cpp?rev=73170&r1=73169&r2=73170&view=diff ============================================================================== --- vmkit/trunk/lib/Mvm/CommonThread/ctlock.cpp (original) +++ vmkit/trunk/lib/Mvm/CommonThread/ctlock.cpp Wed Jun 10 12:33:54 2009 @@ -81,6 +81,16 @@ ++n; } +int LockRecursive::tryLock() { + int res = 0; + if (!selfOwner()) { + res = pthread_mutex_trylock((pthread_mutex_t*)&internalLock); + owner = mvm::Thread::get(); + } + ++n; + return res; +} + void LockRecursive::unlock() { assert(selfOwner() && "Not owner when unlocking"); --n; From nicolas.geoffray at lip6.fr Fri Jun 12 06:53:54 2009 From: nicolas.geoffray at lip6.fr (Nicolas Geoffray) Date: Fri, 12 Jun 2009 13:53:54 -0000 Subject: [vmkit-commits] [vmkit] r73226 - /vmkit/trunk/lib/JnJVM/VMCore/JavaObject.cpp Message-ID: <200906121353.n5CDrtbe015928@zion.cs.uiuc.edu> Author: geoffray Date: Fri Jun 12 08:53:44 2009 New Revision: 73226 URL: http://llvm.org/viewvc/llvm-project?rev=73226&view=rev Log: Add a couple more of asserts, and do a while around the wait call. Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaObject.cpp Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaObject.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaObject.cpp?rev=73226&r1=73225&r2=73226&view=diff ============================================================================== --- vmkit/trunk/lib/JnJVM/VMCore/JavaObject.cpp (original) +++ vmkit/trunk/lib/JnJVM/VMCore/JavaObject.cpp Fri Jun 12 08:53:44 2009 @@ -29,6 +29,7 @@ // such as LockRecursive), we have to change the VT of this object. res->setVirtualTable(&VT); #endif + assert(!res->firstThread && "Error in constructor"); return res; } @@ -47,12 +48,16 @@ } else { thread->state = JavaThread::StateWaiting; if (l->firstThread) { - l->firstThread->prevWaiting->nextWaiting = thread; + assert(l->firstThread->prevWaiting && l->firstThread->nextWaiting && + "Inconsistent list"); + if (l->firstThread->nextWaiting == l->firstThread) { + l->firstThread->nextWaiting = thread; + } else { + l->firstThread->prevWaiting->nextWaiting = thread; + } thread->prevWaiting = l->firstThread->prevWaiting; thread->nextWaiting = l->firstThread; l->firstThread->prevWaiting = thread; - if (l->firstThread->nextWaiting == l->firstThread) - l->firstThread->nextWaiting = thread; } else { l->firstThread = thread; thread->nextWaiting = thread; @@ -64,20 +69,24 @@ bool timeout = false; - if (!thread->interruptFlag) { + while (!thread->interruptFlag && thread->nextWaiting) { if (timed) { timeout = varcondThread.timedWait(&l->lock, info); + if (timeout) break; } else { varcondThread.wait(&l->lock); } } - - + + assert((!l->firstThread || (l->firstThread->prevWaiting && + l->firstThread->nextWaiting)) && "Inconsistent list"); + bool interrupted = (thread->interruptFlag != 0); if (interrupted || timeout) { if (thread->nextWaiting) { + assert(thread->prevWaiting && "Inconsistent list"); if (l->firstThread != thread) { thread->nextWaiting->prevWaiting = thread->prevWaiting; thread->prevWaiting->nextWaiting = thread->nextWaiting; @@ -99,6 +108,9 @@ // Notify lost, notify someone else. notify(); } + } else { + assert(!thread->prevWaiting && !thread->nextWaiting && + "Inconsistent state"); } thread->state = JavaThread::StateRunning; From nicolas.geoffray at lip6.fr Fri Jun 12 08:00:46 2009 From: nicolas.geoffray at lip6.fr (Nicolas Geoffray) Date: Fri, 12 Jun 2009 15:00:46 -0000 Subject: [vmkit-commits] [vmkit] r73229 - /vmkit/trunk/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp Message-ID: <200906121500.n5CF0mKh018393@zion.cs.uiuc.edu> Author: geoffray Date: Fri Jun 12 10:00:41 2009 New Revision: 73229 URL: http://llvm.org/viewvc/llvm-project?rev=73229&view=rev Log: If the method is not found, delay throwing the exception after unlocking the spin lock. Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp?rev=73229&r1=73228&r2=73229&view=diff ============================================================================== --- vmkit/trunk/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp (original) +++ vmkit/trunk/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp Fri Jun 12 10:00:41 2009 @@ -61,9 +61,15 @@ UserCommonClass* ocl = ovt->cl; UserClass* methodCl = 0; UserClass* lookup = ocl->isArray() ? ocl->super : ocl->asClass(); - JavaMethod* dmeth = lookup->lookupMethod(enveloppe->methodName, - enveloppe->methodSign, - false, true, &methodCl); + JavaMethod* dmeth = lookup->lookupMethodDontThrow(enveloppe->methodName, + enveloppe->methodSign, + false, true, &methodCl); + + if (!dmeth) { + enveloppe->cacheLock.release(); + JavaThread::get()->getJVM()->noSuchMethodError(lookup, + enveloppe->methodName); + } #if !defined(ISOLATE_SHARING) && !defined(SERVICE) assert(dmeth->classDef->isInitializing() && From nicolas.geoffray at lip6.fr Mon Jun 15 13:18:44 2009 From: nicolas.geoffray at lip6.fr (Nicolas Geoffray) Date: Mon, 15 Jun 2009 20:18:44 -0000 Subject: [vmkit-commits] [vmkit] r73410 - /vmkit/trunk/lib/JnJVM/VMCore/JavaUpcalls.cpp Message-ID: <200906152018.n5FKIkun006596@zion.cs.uiuc.edu> Author: geoffray Date: Mon Jun 15 15:18:32 2009 New Revision: 73410 URL: http://llvm.org/viewvc/llvm-project?rev=73410&view=rev Log: The getenv implementation in classpath has a memory leak. Implement our own. Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaUpcalls.cpp Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaUpcalls.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaUpcalls.cpp?rev=73410&r1=73409&r2=73410&view=diff ============================================================================== --- vmkit/trunk/lib/JnJVM/VMCore/JavaUpcalls.cpp (original) +++ vmkit/trunk/lib/JnJVM/VMCore/JavaUpcalls.cpp Mon Jun 15 15:18:32 2009 @@ -415,6 +415,17 @@ // Defined in Classpath/ClasspathVMClassLoader.cpp extern "C" ArrayObject* nativeGetBootPackages(); +extern "C" JavaString* nativeGetenv(JavaString* str) { + char* buf = str->strToAsciiz(); + char* res = getenv(buf); + delete[] buf; + if (res) { + Jnjvm* vm = JavaThread::get()->getJVM(); + return vm->asciizToStr(res); + } + return 0; +} + void Classpath::initialiseClasspath(JnjvmClassLoader* loader) { newClassLoader = @@ -799,6 +810,11 @@ // Don't compile methods here, we still don't know where to allocate Java // strings. + + JavaMethod* getEnv = + UPCALL_METHOD(loader, "java/lang/VMSystem", "getenv", + "(Ljava/lang/String;)Ljava/lang/String;", ACC_STATIC); + getEnv->setCompiledPtr((void*)(intptr_t)nativeGetenv, "nativeGetenv"); JavaMethod* getCallingClass = UPCALL_METHOD(loader, "gnu/classpath/VMStackWalker", "getCallingClass", From nicolas.geoffray at lip6.fr Tue Jun 16 11:17:03 2009 From: nicolas.geoffray at lip6.fr (Nicolas Geoffray) Date: Tue, 16 Jun 2009 18:17:03 -0000 Subject: [vmkit-commits] [vmkit] r73522 - in /vmkit/trunk: include/jnjvm/JnjvmModule.h include/mvm/JIT.h lib/JnJVM/Compiler/JITInfo.cpp lib/JnJVM/Compiler/JavaAOTCompiler.cpp lib/JnJVM/Compiler/JavaJIT.cpp lib/JnJVM/Compiler/JavaJITOpcodes.cpp lib/JnJVM/Compiler/JnjvmModule.cpp lib/JnJVM/Compiler/JnjvmModuleProvider.cpp lib/Mvm/Compiler/JIT.cpp Message-ID: <200906161817.n5GIH4k3001372@zion.cs.uiuc.edu> Author: geoffray Date: Tue Jun 16 13:17:03 2009 New Revision: 73522 URL: http://llvm.org/viewvc/llvm-project?rev=73522&view=rev Log: Move to the new LLVM API. Modified: vmkit/trunk/include/jnjvm/JnjvmModule.h vmkit/trunk/include/mvm/JIT.h vmkit/trunk/lib/JnJVM/Compiler/JITInfo.cpp vmkit/trunk/lib/JnJVM/Compiler/JavaAOTCompiler.cpp vmkit/trunk/lib/JnJVM/Compiler/JavaJIT.cpp vmkit/trunk/lib/JnJVM/Compiler/JavaJITOpcodes.cpp vmkit/trunk/lib/JnJVM/Compiler/JnjvmModule.cpp vmkit/trunk/lib/JnJVM/Compiler/JnjvmModuleProvider.cpp vmkit/trunk/lib/Mvm/Compiler/JIT.cpp Modified: vmkit/trunk/include/jnjvm/JnjvmModule.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/jnjvm/JnjvmModule.h?rev=73522&r1=73521&r2=73522&view=diff ============================================================================== --- vmkit/trunk/include/jnjvm/JnjvmModule.h (original) +++ vmkit/trunk/include/jnjvm/JnjvmModule.h Tue Jun 16 13:17:03 2009 @@ -58,7 +58,7 @@ const llvm::Type* llvmType; const llvm::Type* llvmTypePtr; llvm::Constant* llvmNullConstant; - llvm::ConstantInt* logSizeInBytesConstant; + llvm::Constant* logSizeInBytesConstant; static void initialise(); static std::map AssessorInfo; @@ -74,7 +74,7 @@ Class* classDef; /// virtualSizeLLVM - The LLVM constant size of instances of this class. /// - llvm::ConstantInt* virtualSizeConstant; + llvm::Constant* virtualSizeConstant; /// virtualType - The LLVM type of instance of this class. /// const llvm::Type * virtualType; @@ -100,12 +100,12 @@ JavaMethod* methodDef; llvm::Function* methodFunction; - llvm::ConstantInt* offsetConstant; + llvm::Constant* offsetConstant; const llvm::FunctionType* functionType; public: llvm::Function* getMethod(); - llvm::ConstantInt* getOffset(); + llvm::Constant* getOffset(); const llvm::FunctionType* getFunctionType(); LLVMMethodInfo(JavaMethod* M); @@ -117,10 +117,10 @@ private: JavaField* fieldDef; - llvm::ConstantInt* offsetConstant; + llvm::Constant* offsetConstant; public: - llvm::ConstantInt* getOffset(); + llvm::Constant* getOffset(); LLVMFieldInfo(JavaField* F) : fieldDef(F), @@ -189,10 +189,10 @@ class JnjvmModule : public mvm::MvmModule { public: - static llvm::ConstantInt* JavaArraySizeOffsetConstant; - static llvm::ConstantInt* JavaArrayElementsOffsetConstant; - static llvm::ConstantInt* JavaObjectLockOffsetConstant; - static llvm::ConstantInt* JavaObjectVTOffsetConstant; + static llvm::Constant* JavaArraySizeOffsetConstant; + static llvm::Constant* JavaArrayElementsOffsetConstant; + static llvm::Constant* JavaObjectLockOffsetConstant; + static llvm::Constant* JavaObjectVTOffsetConstant; static const llvm::Type* JavaArrayUInt8Type; static const llvm::Type* JavaArraySInt8Type; @@ -301,22 +301,22 @@ llvm::Function* GetFinalDoubleFieldFunction; llvm::Function* GetFinalObjectFieldFunction; - static llvm::ConstantInt* OffsetObjectSizeInClassConstant; - static llvm::ConstantInt* OffsetVTInClassConstant; - static llvm::ConstantInt* OffsetTaskClassMirrorInClassConstant; - static llvm::ConstantInt* OffsetStaticInstanceInTaskClassMirrorConstant; - static llvm::ConstantInt* OffsetInitializedInTaskClassMirrorConstant; - static llvm::ConstantInt* OffsetStatusInTaskClassMirrorConstant; - - static llvm::ConstantInt* OffsetJavaExceptionInThreadConstant; - static llvm::ConstantInt* OffsetCXXExceptionInThreadConstant; - - static llvm::ConstantInt* OffsetClassInVTConstant; - static llvm::ConstantInt* OffsetDepthInVTConstant; - static llvm::ConstantInt* OffsetDisplayInVTConstant; - static llvm::ConstantInt* OffsetBaseClassVTInVTConstant; + static llvm::Constant* OffsetObjectSizeInClassConstant; + static llvm::Constant* OffsetVTInClassConstant; + static llvm::Constant* OffsetTaskClassMirrorInClassConstant; + static llvm::Constant* OffsetStaticInstanceInTaskClassMirrorConstant; + static llvm::Constant* OffsetInitializedInTaskClassMirrorConstant; + static llvm::Constant* OffsetStatusInTaskClassMirrorConstant; + + static llvm::Constant* OffsetJavaExceptionInThreadConstant; + static llvm::Constant* OffsetCXXExceptionInThreadConstant; + + static llvm::Constant* OffsetClassInVTConstant; + static llvm::Constant* OffsetDepthInVTConstant; + static llvm::Constant* OffsetDisplayInVTConstant; + static llvm::Constant* OffsetBaseClassVTInVTConstant; - static llvm::ConstantInt* ClassReadyConstant; + static llvm::Constant* ClassReadyConstant; static llvm::Constant* JavaObjectNullConstant; static llvm::Constant* MaxArraySizeConstant; Modified: vmkit/trunk/include/mvm/JIT.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/mvm/JIT.h?rev=73522&r1=73521&r2=73522&view=diff ============================================================================== --- vmkit/trunk/include/mvm/JIT.h (original) +++ vmkit/trunk/include/mvm/JIT.h Tue Jun 16 13:17:03 2009 @@ -114,50 +114,50 @@ llvm::Function* llvm_atomic_lcs_ptr; - static llvm::ConstantInt* constantInt8Zero; - static llvm::ConstantInt* constantZero; - static llvm::ConstantInt* constantOne; - static llvm::ConstantInt* constantTwo; - static llvm::ConstantInt* constantThree; - static llvm::ConstantInt* constantFour; - static llvm::ConstantInt* constantFive; - static llvm::ConstantInt* constantSix; - static llvm::ConstantInt* constantSeven; - static llvm::ConstantInt* constantEight; - static llvm::ConstantInt* constantMinusOne; - static llvm::ConstantInt* constantLongMinusOne; - static llvm::ConstantInt* constantLongZero; - static llvm::ConstantInt* constantLongOne; - static llvm::ConstantInt* constantMinInt; - static llvm::ConstantInt* constantMaxInt; - static llvm::ConstantInt* constantMinLong; - static llvm::ConstantInt* constantMaxLong; - static llvm::ConstantFP* constantFloatZero; - static llvm::ConstantFP* constantFloatOne; - static llvm::ConstantFP* constantFloatTwo; - static llvm::ConstantFP* constantDoubleZero; - static llvm::ConstantFP* constantDoubleOne; - static llvm::ConstantFP* constantMaxIntFloat; - static llvm::ConstantFP* constantMinIntFloat; - static llvm::ConstantFP* constantMinLongFloat; - static llvm::ConstantFP* constantMinLongDouble; - static llvm::ConstantFP* constantMaxLongFloat; - static llvm::ConstantFP* constantMaxIntDouble; - static llvm::ConstantFP* constantMinIntDouble; - static llvm::ConstantFP* constantMaxLongDouble; - static llvm::ConstantFP* constantDoubleInfinity; - static llvm::ConstantFP* constantDoubleMinusInfinity; - static llvm::ConstantFP* constantFloatInfinity; - static llvm::ConstantFP* constantFloatMinusInfinity; - static llvm::ConstantFP* constantFloatMinusZero; - static llvm::ConstantFP* constantDoubleMinusZero; + static llvm::Constant* constantInt8Zero; + static llvm::Constant* constantZero; + static llvm::Constant* constantOne; + static llvm::Constant* constantTwo; + static llvm::Constant* constantThree; + static llvm::Constant* constantFour; + static llvm::Constant* constantFive; + static llvm::Constant* constantSix; + static llvm::Constant* constantSeven; + static llvm::Constant* constantEight; + static llvm::Constant* constantMinusOne; + static llvm::Constant* constantLongMinusOne; + static llvm::Constant* constantLongZero; + static llvm::Constant* constantLongOne; + static llvm::Constant* constantMinInt; + static llvm::Constant* constantMaxInt; + static llvm::Constant* constantMinLong; + static llvm::Constant* constantMaxLong; + static llvm::Constant* constantFloatZero; + static llvm::Constant* constantFloatOne; + static llvm::Constant* constantFloatTwo; + static llvm::Constant* constantDoubleZero; + static llvm::Constant* constantDoubleOne; + static llvm::Constant* constantMaxIntFloat; + static llvm::Constant* constantMinIntFloat; + static llvm::Constant* constantMinLongFloat; + static llvm::Constant* constantMinLongDouble; + static llvm::Constant* constantMaxLongFloat; + static llvm::Constant* constantMaxIntDouble; + static llvm::Constant* constantMinIntDouble; + static llvm::Constant* constantMaxLongDouble; + static llvm::Constant* constantDoubleInfinity; + static llvm::Constant* constantDoubleMinusInfinity; + static llvm::Constant* constantFloatInfinity; + static llvm::Constant* constantFloatMinusInfinity; + static llvm::Constant* constantFloatMinusZero; + static llvm::Constant* constantDoubleMinusZero; static llvm::Constant* constantPtrNull; - static llvm::ConstantInt* constantPtrLogSize; - static llvm::ConstantInt* constantThreadIDMask; - static llvm::ConstantInt* constantStackOverflowMask; - static llvm::ConstantInt* constantFatMask; - static llvm::ConstantInt* constantPtrOne; - static llvm::ConstantInt* constantPtrZero; + static llvm::Constant* constantPtrLogSize; + static llvm::Constant* constantThreadIDMask; + static llvm::Constant* constantStackOverflowMask; + static llvm::Constant* constantFatMask; + static llvm::Constant* constantPtrOne; + static llvm::Constant* constantPtrZero; static const llvm::PointerType* ptrType; static const llvm::PointerType* ptr32Type; static const llvm::PointerType* ptrPtrType; Modified: vmkit/trunk/lib/JnJVM/Compiler/JITInfo.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Compiler/JITInfo.cpp?rev=73522&r1=73521&r2=73522&view=diff ============================================================================== --- vmkit/trunk/lib/JnJVM/Compiler/JITInfo.cpp (original) +++ vmkit/trunk/lib/JnJVM/Compiler/JITInfo.cpp Tue Jun 16 13:17:03 2009 @@ -177,7 +177,7 @@ return functionType; } -ConstantInt* LLVMMethodInfo::getOffset() { +Constant* LLVMMethodInfo::getOffset() { if (!offsetConstant) { JnjvmClassLoader* JCL = methodDef->classDef->classLoader; JavaCompiler* Mod = JCL->getCompiler(); @@ -187,7 +187,7 @@ return offsetConstant; } -ConstantInt* LLVMFieldInfo::getOffset() { +Constant* LLVMFieldInfo::getOffset() { if (!offsetConstant) { JnjvmClassLoader* JCL = fieldDef->classDef->classLoader; JavaCompiler* Mod = JCL->getCompiler(); Modified: vmkit/trunk/lib/JnJVM/Compiler/JavaAOTCompiler.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Compiler/JavaAOTCompiler.cpp?rev=73522&r1=73521&r2=73522&view=diff ============================================================================== --- vmkit/trunk/lib/JnJVM/Compiler/JavaAOTCompiler.cpp (original) +++ vmkit/trunk/lib/JnJVM/Compiler/JavaAOTCompiler.cpp Tue Jun 16 13:17:03 2009 @@ -484,12 +484,12 @@ field.getLongField(obj)); TempElts.push_back(CI); } else if (prim->isFloat()) { - ConstantFP* CF = ConstantFP::get(Type::FloatTy, - field.getFloatField(obj)); + Constant* CF = ConstantFP::get(Type::FloatTy, + field.getFloatField(obj)); TempElts.push_back(CF); } else if (prim->isDouble()) { - ConstantFP* CF = ConstantFP::get(Type::DoubleTy, - field.getDoubleField(obj)); + Constant* CF = ConstantFP::get(Type::DoubleTy, + field.getDoubleField(obj)); TempElts.push_back(CF); } else { abort(); Modified: vmkit/trunk/lib/JnJVM/Compiler/JavaJIT.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Compiler/JavaJIT.cpp?rev=73522&r1=73521&r2=73522&view=diff ============================================================================== --- vmkit/trunk/lib/JnJVM/Compiler/JavaJIT.cpp (original) +++ vmkit/trunk/lib/JnJVM/Compiler/JavaJIT.cpp Tue Jun 16 13:17:03 2009 @@ -155,7 +155,7 @@ #endif if (meth) { LLVMMethodInfo* LMI = TheCompiler->getMethodInfo(meth); - ConstantInt* Offset = LMI->getOffset(); + Constant* Offset = LMI->getOffset(); indexes2[1] = Offset; #ifdef ISOLATE_SHARING indexesCtp = ConstantInt::get(Type::Int32Ty, @@ -1238,7 +1238,7 @@ const Type* Ty = args[0]->getType(); if (Ty == Type::Int32Ty) { Constant* const_int32_9 = module->constantZero; - ConstantInt* const_int32_10 = module->constantMinusOne; + Constant* const_int32_10 = module->constantMinusOne; BinaryOperator* int32_tmpneg = BinaryOperator::Create(Instruction::Sub, const_int32_9, args[0], "tmpneg", currentBlock); @@ -1249,7 +1249,7 @@ "abs", currentBlock); } else if (Ty == Type::Int64Ty) { Constant* const_int64_9 = module->constantLongZero; - ConstantInt* const_int64_10 = module->constantLongMinusOne; + Constant* const_int64_10 = module->constantLongMinusOne; BinaryOperator* int64_tmpneg = BinaryOperator::Create(Instruction::Sub, const_int64_9, args[0], Modified: vmkit/trunk/lib/JnJVM/Compiler/JavaJITOpcodes.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Compiler/JavaJITOpcodes.cpp?rev=73522&r1=73521&r2=73522&view=diff ============================================================================== --- vmkit/trunk/lib/JnJVM/Compiler/JavaJITOpcodes.cpp (original) +++ vmkit/trunk/lib/JnJVM/Compiler/JavaJITOpcodes.cpp Tue Jun 16 13:17:03 2009 @@ -1899,7 +1899,7 @@ case NEWARRAY : case ANEWARRAY : { - ConstantInt* sizeElement = 0; + Constant* sizeElement = 0; Value* TheVT = 0; Value* valCl = 0; Modified: vmkit/trunk/lib/JnJVM/Compiler/JnjvmModule.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Compiler/JnjvmModule.cpp?rev=73522&r1=73521&r2=73522&view=diff ============================================================================== --- vmkit/trunk/lib/JnJVM/Compiler/JnjvmModule.cpp (original) +++ vmkit/trunk/lib/JnJVM/Compiler/JnjvmModule.cpp Tue Jun 16 13:17:03 2009 @@ -56,28 +56,28 @@ llvm::Constant* JnjvmModule::JavaObjectNullConstant; llvm::Constant* JnjvmModule::MaxArraySizeConstant; llvm::Constant* JnjvmModule::JavaArraySizeConstant; -llvm::ConstantInt* JnjvmModule::OffsetObjectSizeInClassConstant; -llvm::ConstantInt* JnjvmModule::OffsetVTInClassConstant; -llvm::ConstantInt* JnjvmModule::OffsetTaskClassMirrorInClassConstant; -llvm::ConstantInt* JnjvmModule::OffsetStaticInstanceInTaskClassMirrorConstant; -llvm::ConstantInt* JnjvmModule::OffsetStatusInTaskClassMirrorConstant; -llvm::ConstantInt* JnjvmModule::OffsetInitializedInTaskClassMirrorConstant; -llvm::ConstantInt* JnjvmModule::OffsetJavaExceptionInThreadConstant; -llvm::ConstantInt* JnjvmModule::OffsetCXXExceptionInThreadConstant; -llvm::ConstantInt* JnjvmModule::ClassReadyConstant; +llvm::Constant* JnjvmModule::OffsetObjectSizeInClassConstant; +llvm::Constant* JnjvmModule::OffsetVTInClassConstant; +llvm::Constant* JnjvmModule::OffsetTaskClassMirrorInClassConstant; +llvm::Constant* JnjvmModule::OffsetStaticInstanceInTaskClassMirrorConstant; +llvm::Constant* JnjvmModule::OffsetStatusInTaskClassMirrorConstant; +llvm::Constant* JnjvmModule::OffsetInitializedInTaskClassMirrorConstant; +llvm::Constant* JnjvmModule::OffsetJavaExceptionInThreadConstant; +llvm::Constant* JnjvmModule::OffsetCXXExceptionInThreadConstant; +llvm::Constant* JnjvmModule::ClassReadyConstant; const llvm::Type* JnjvmModule::JavaClassType; const llvm::Type* JnjvmModule::JavaClassPrimitiveType; const llvm::Type* JnjvmModule::JavaClassArrayType; const llvm::Type* JnjvmModule::JavaCommonClassType; const llvm::Type* JnjvmModule::VTType; -llvm::ConstantInt* JnjvmModule::JavaArrayElementsOffsetConstant; -llvm::ConstantInt* JnjvmModule::JavaArraySizeOffsetConstant; -llvm::ConstantInt* JnjvmModule::JavaObjectLockOffsetConstant; -llvm::ConstantInt* JnjvmModule::JavaObjectVTOffsetConstant; -llvm::ConstantInt* JnjvmModule::OffsetClassInVTConstant; -llvm::ConstantInt* JnjvmModule::OffsetDepthInVTConstant; -llvm::ConstantInt* JnjvmModule::OffsetDisplayInVTConstant; -llvm::ConstantInt* JnjvmModule::OffsetBaseClassVTInVTConstant; +llvm::Constant* JnjvmModule::JavaArrayElementsOffsetConstant; +llvm::Constant* JnjvmModule::JavaArraySizeOffsetConstant; +llvm::Constant* JnjvmModule::JavaObjectLockOffsetConstant; +llvm::Constant* JnjvmModule::JavaObjectVTOffsetConstant; +llvm::Constant* JnjvmModule::OffsetClassInVTConstant; +llvm::Constant* JnjvmModule::OffsetDepthInVTConstant; +llvm::Constant* JnjvmModule::OffsetDisplayInVTConstant; +llvm::Constant* JnjvmModule::OffsetBaseClassVTInVTConstant; JavaLLVMCompiler::JavaLLVMCompiler(const std::string& str) : Modified: vmkit/trunk/lib/JnJVM/Compiler/JnjvmModuleProvider.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Compiler/JnjvmModuleProvider.cpp?rev=73522&r1=73521&r2=73522&view=diff ============================================================================== --- vmkit/trunk/lib/JnJVM/Compiler/JnjvmModuleProvider.cpp (original) +++ vmkit/trunk/lib/JnJVM/Compiler/JnjvmModuleProvider.cpp Tue Jun 16 13:17:03 2009 @@ -114,7 +114,7 @@ if (isVirtual(meth->access)) { LLVMMethodInfo* LMI = JavaLLVMCompiler::getMethodInfo(meth); - uint64_t offset = LMI->getOffset()->getZExtValue(); + uint64_t offset = dyn_cast(LMI->getOffset())->getZExtValue(); assert(meth->classDef->isResolved() && "Class not resolved"); #if !defined(ISOLATE_SHARING) && !defined(SERVICE) assert(meth->classDef->isInitializing() && "Class not ready"); Modified: vmkit/trunk/lib/Mvm/Compiler/JIT.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/Compiler/JIT.cpp?rev=73522&r1=73521&r2=73522&view=diff ============================================================================== --- vmkit/trunk/lib/Mvm/Compiler/JIT.cpp (original) +++ vmkit/trunk/lib/Mvm/Compiler/JIT.cpp Tue Jun 16 13:17:03 2009 @@ -204,50 +204,50 @@ } -llvm::ConstantInt* MvmModule::constantInt8Zero; -llvm::ConstantInt* MvmModule::constantZero; -llvm::ConstantInt* MvmModule::constantOne; -llvm::ConstantInt* MvmModule::constantTwo; -llvm::ConstantInt* MvmModule::constantThree; -llvm::ConstantInt* MvmModule::constantFour; -llvm::ConstantInt* MvmModule::constantFive; -llvm::ConstantInt* MvmModule::constantSix; -llvm::ConstantInt* MvmModule::constantSeven; -llvm::ConstantInt* MvmModule::constantEight; -llvm::ConstantInt* MvmModule::constantMinusOne; -llvm::ConstantInt* MvmModule::constantLongMinusOne; -llvm::ConstantInt* MvmModule::constantLongZero; -llvm::ConstantInt* MvmModule::constantLongOne; -llvm::ConstantInt* MvmModule::constantMinInt; -llvm::ConstantInt* MvmModule::constantMaxInt; -llvm::ConstantInt* MvmModule::constantMinLong; -llvm::ConstantInt* MvmModule::constantMaxLong; -llvm::ConstantFP* MvmModule::constantFloatZero; -llvm::ConstantFP* MvmModule::constantFloatOne; -llvm::ConstantFP* MvmModule::constantFloatTwo; -llvm::ConstantFP* MvmModule::constantDoubleZero; -llvm::ConstantFP* MvmModule::constantDoubleOne; -llvm::ConstantFP* MvmModule::constantMaxIntFloat; -llvm::ConstantFP* MvmModule::constantMinIntFloat; -llvm::ConstantFP* MvmModule::constantMinLongFloat; -llvm::ConstantFP* MvmModule::constantMinLongDouble; -llvm::ConstantFP* MvmModule::constantMaxLongFloat; -llvm::ConstantFP* MvmModule::constantMaxIntDouble; -llvm::ConstantFP* MvmModule::constantMinIntDouble; -llvm::ConstantFP* MvmModule::constantMaxLongDouble; -llvm::ConstantFP* MvmModule::constantDoubleInfinity; -llvm::ConstantFP* MvmModule::constantDoubleMinusInfinity; -llvm::ConstantFP* MvmModule::constantFloatInfinity; -llvm::ConstantFP* MvmModule::constantFloatMinusInfinity; -llvm::ConstantFP* MvmModule::constantFloatMinusZero; -llvm::ConstantFP* MvmModule::constantDoubleMinusZero; +llvm::Constant* MvmModule::constantInt8Zero; +llvm::Constant* MvmModule::constantZero; +llvm::Constant* MvmModule::constantOne; +llvm::Constant* MvmModule::constantTwo; +llvm::Constant* MvmModule::constantThree; +llvm::Constant* MvmModule::constantFour; +llvm::Constant* MvmModule::constantFive; +llvm::Constant* MvmModule::constantSix; +llvm::Constant* MvmModule::constantSeven; +llvm::Constant* MvmModule::constantEight; +llvm::Constant* MvmModule::constantMinusOne; +llvm::Constant* MvmModule::constantLongMinusOne; +llvm::Constant* MvmModule::constantLongZero; +llvm::Constant* MvmModule::constantLongOne; +llvm::Constant* MvmModule::constantMinInt; +llvm::Constant* MvmModule::constantMaxInt; +llvm::Constant* MvmModule::constantMinLong; +llvm::Constant* MvmModule::constantMaxLong; +llvm::Constant* MvmModule::constantFloatZero; +llvm::Constant* MvmModule::constantFloatOne; +llvm::Constant* MvmModule::constantFloatTwo; +llvm::Constant* MvmModule::constantDoubleZero; +llvm::Constant* MvmModule::constantDoubleOne; +llvm::Constant* MvmModule::constantMaxIntFloat; +llvm::Constant* MvmModule::constantMinIntFloat; +llvm::Constant* MvmModule::constantMinLongFloat; +llvm::Constant* MvmModule::constantMinLongDouble; +llvm::Constant* MvmModule::constantMaxLongFloat; +llvm::Constant* MvmModule::constantMaxIntDouble; +llvm::Constant* MvmModule::constantMinIntDouble; +llvm::Constant* MvmModule::constantMaxLongDouble; +llvm::Constant* MvmModule::constantDoubleInfinity; +llvm::Constant* MvmModule::constantDoubleMinusInfinity; +llvm::Constant* MvmModule::constantFloatInfinity; +llvm::Constant* MvmModule::constantFloatMinusInfinity; +llvm::Constant* MvmModule::constantFloatMinusZero; +llvm::Constant* MvmModule::constantDoubleMinusZero; llvm::Constant* MvmModule::constantPtrNull; -llvm::ConstantInt* MvmModule::constantPtrLogSize; -llvm::ConstantInt* MvmModule::constantThreadIDMask; -llvm::ConstantInt* MvmModule::constantStackOverflowMask; -llvm::ConstantInt* MvmModule::constantFatMask; -llvm::ConstantInt* MvmModule::constantPtrOne; -llvm::ConstantInt* MvmModule::constantPtrZero; +llvm::Constant* MvmModule::constantPtrLogSize; +llvm::Constant* MvmModule::constantThreadIDMask; +llvm::Constant* MvmModule::constantStackOverflowMask; +llvm::Constant* MvmModule::constantFatMask; +llvm::Constant* MvmModule::constantPtrOne; +llvm::Constant* MvmModule::constantPtrZero; const llvm::PointerType* MvmModule::ptrType; const llvm::PointerType* MvmModule::ptr32Type; const llvm::PointerType* MvmModule::ptrPtrType; From nicolas.geoffray at lip6.fr Tue Jun 16 12:08:34 2009 From: nicolas.geoffray at lip6.fr (Nicolas Geoffray) Date: Tue, 16 Jun 2009 19:08:34 -0000 Subject: [vmkit-commits] [vmkit] r73533 - in /vmkit/trunk/lib/N3/VMCore: CLIJit.cpp CLIJitMeta.cpp Opcodes.cpp VMArray.h VMClass.h VMObject.h Message-ID: <200906161908.n5GJ8Zun003151@zion.cs.uiuc.edu> Author: geoffray Date: Tue Jun 16 14:08:27 2009 New Revision: 73533 URL: http://llvm.org/viewvc/llvm-project?rev=73533&view=rev Log: Move to new LLVM API. Modified: vmkit/trunk/lib/N3/VMCore/CLIJit.cpp vmkit/trunk/lib/N3/VMCore/CLIJitMeta.cpp vmkit/trunk/lib/N3/VMCore/Opcodes.cpp vmkit/trunk/lib/N3/VMCore/VMArray.h vmkit/trunk/lib/N3/VMCore/VMClass.h vmkit/trunk/lib/N3/VMCore/VMObject.h Modified: vmkit/trunk/lib/N3/VMCore/CLIJit.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/N3/VMCore/CLIJit.cpp?rev=73533&r1=73532&r2=73533&view=diff ============================================================================== --- vmkit/trunk/lib/N3/VMCore/CLIJit.cpp (original) +++ vmkit/trunk/lib/N3/VMCore/CLIJit.cpp Tue Jun 16 14:08:27 2009 @@ -111,7 +111,8 @@ std::vector args; //size = 2 args.push_back(zero); if (boxed) { - args.push_back(ConstantInt::get(field->offset->getValue() + 1)); + ConstantInt* CI = dyn_cast(field->offset); + args.push_back(ConstantInt::get(CI->getValue() + 1)); } else { args.push_back(field->offset); } @@ -122,7 +123,8 @@ std::vector args; //size = 2 args.push_back(zero); if (boxed) { - args.push_back(ConstantInt::get(field->offset->getValue() + 1)); + ConstantInt* CI = dyn_cast(field->offset); + args.push_back(ConstantInt::get(CI->getValue() + 1)); } else { args.push_back(field->offset); } @@ -158,8 +160,8 @@ #endif // Constant Definitions Constant* const_int32_8 = mvm::MvmModule::constantZero; - ConstantInt* const_int32_9 = mvm::MvmModule::constantOne; - ConstantInt* const_int32_10 = mvm::MvmModule::constantTwo; + Constant* const_int32_9 = mvm::MvmModule::constantOne; + Constant* const_int32_10 = mvm::MvmModule::constantTwo; // Function Definitions @@ -856,11 +858,11 @@ } -ConstantInt* VMArray::sizeOffset() { +Constant* VMArray::sizeOffset() { return mvm::MvmModule::constantOne; } -ConstantInt* VMArray::elementsOffset() { +Constant* VMArray::elementsOffset() { return mvm::MvmModule::constantTwo; } @@ -1502,7 +1504,7 @@ void VMField::initField(VMObject* obj) { VMField* field = this; - ConstantInt* offset = field->offset; + Constant* offset = field->offset; const TargetData* targetData = mvm::MvmModule::executionEngine->getTargetData(); bool stat = isStatic(field->flags); const Type* clType = stat ? field->classDef->staticType : @@ -1510,7 +1512,7 @@ const StructLayout* sl = targetData->getStructLayout((StructType*)(clType->getContainedType(0))); - uint64 ptrOffset = sl->getElementOffset(offset->getZExtValue()); + uint64 ptrOffset = sl->getElementOffset(dyn_cast(offset)->getZExtValue()); field->ptrOffset = ptrOffset; Modified: vmkit/trunk/lib/N3/VMCore/CLIJitMeta.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/N3/VMCore/CLIJitMeta.cpp?rev=73533&r1=73532&r2=73533&view=diff ============================================================================== --- vmkit/trunk/lib/N3/VMCore/CLIJitMeta.cpp (original) +++ vmkit/trunk/lib/N3/VMCore/CLIJitMeta.cpp Tue Jun 16 14:08:27 2009 @@ -419,6 +419,6 @@ return _llvmVar; } -ConstantInt* VMObject::classOffset() { +Constant* VMObject::classOffset() { return mvm::MvmModule::constantOne; } Modified: vmkit/trunk/lib/N3/VMCore/Opcodes.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/N3/VMCore/Opcodes.cpp?rev=73533&r1=73532&r2=73533&view=diff ============================================================================== --- vmkit/trunk/lib/N3/VMCore/Opcodes.cpp (original) +++ vmkit/trunk/lib/N3/VMCore/Opcodes.cpp Tue Jun 16 14:08:27 2009 @@ -23,6 +23,7 @@ #include #include #include +#include #include #include "mvm/JIT.h" Modified: vmkit/trunk/lib/N3/VMCore/VMArray.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/N3/VMCore/VMArray.h?rev=73533&r1=73532&r2=73533&view=diff ============================================================================== --- vmkit/trunk/lib/N3/VMCore/VMArray.h (original) +++ vmkit/trunk/lib/N3/VMCore/VMArray.h Tue Jun 16 14:08:27 2009 @@ -34,8 +34,8 @@ static const sint32 MaxArraySize; static const llvm::Type* llvmType; - static llvm::ConstantInt* sizeOffset(); - static llvm::ConstantInt* elementsOffset(); + static llvm::Constant* sizeOffset(); + static llvm::Constant* elementsOffset(); virtual void print(mvm::PrintBuffer* buf) const; virtual void TRACER; Modified: vmkit/trunk/lib/N3/VMCore/VMClass.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/N3/VMCore/VMClass.h?rev=73533&r1=73532&r2=73533&view=diff ============================================================================== --- vmkit/trunk/lib/N3/VMCore/VMClass.h (original) +++ vmkit/trunk/lib/N3/VMCore/VMClass.h Tue Jun 16 14:08:27 2009 @@ -258,7 +258,7 @@ virtual void TRACER; uint32 flags; - llvm::ConstantInt* offset; + llvm::Constant* offset; uint32 token; const UTF8* name; VMClass* classDef; Modified: vmkit/trunk/lib/N3/VMCore/VMObject.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/N3/VMCore/VMObject.h?rev=73533&r1=73532&r2=73533&view=diff ============================================================================== --- vmkit/trunk/lib/N3/VMCore/VMObject.h (original) +++ vmkit/trunk/lib/N3/VMCore/VMObject.h Tue Jun 16 14:08:27 2009 @@ -84,7 +84,7 @@ void notifyAll(); void initialise(VMCommonClass* cl); - static llvm::ConstantInt* classOffset(); + static llvm::Constant* classOffset(); bool instanceOf(VMCommonClass* cl); From nicolas.geoffray at lip6.fr Wed Jun 17 02:50:49 2009 From: nicolas.geoffray at lip6.fr (Nicolas Geoffray) Date: Wed, 17 Jun 2009 09:50:49 -0000 Subject: [vmkit-commits] [vmkit] r73608 - in /vmkit/trunk/lib/N3: Mono/Mono.cpp VMCore/N3Initialise.cpp Message-ID: <200906170950.n5H9otDs013168@zion.cs.uiuc.edu> Author: geoffray Date: Wed Jun 17 04:50:29 2009 New Revision: 73608 URL: http://llvm.org/viewvc/llvm-project?rev=73608&view=rev Log: Disable finalizers for now and workaround for Mono bootstrap. Also add a couple of missing VT initialization. Modified: vmkit/trunk/lib/N3/Mono/Mono.cpp vmkit/trunk/lib/N3/VMCore/N3Initialise.cpp Modified: vmkit/trunk/lib/N3/Mono/Mono.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/N3/Mono/Mono.cpp?rev=73608&r1=73607&r2=73608&view=diff ============================================================================== --- vmkit/trunk/lib/N3/Mono/Mono.cpp (original) +++ vmkit/trunk/lib/N3/Mono/Mono.cpp Wed Jun 17 04:50:29 2009 @@ -117,7 +117,8 @@ } extern "C" void System_Threading_Monitor_Monitor_exit(VMObject* obj) { - obj->unlock(); + // TODO: There's a bug in the bootstrap, see why + if (obj->lockObj->owner()) obj->unlock(); } extern "C" bool System_Threading_Monitor_Monitor_try_enter(VMObject* obj, int ms) { Modified: vmkit/trunk/lib/N3/VMCore/N3Initialise.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/N3/VMCore/N3Initialise.cpp?rev=73608&r1=73607&r2=73608&view=diff ============================================================================== --- vmkit/trunk/lib/N3/VMCore/N3Initialise.cpp (original) +++ vmkit/trunk/lib/N3/VMCore/N3Initialise.cpp Wed Jun 17 04:50:29 2009 @@ -166,13 +166,15 @@ # define INIT(X) { \ X fake; \ - X::VT = ((VirtualTable**)(void*)(&fake))[0]; } + X::VT = ((VirtualTable**)(void*)(&fake))[0];\ + ((void**)X::VT)[0] = 0; } INIT(Assembly); INIT(Header); INIT(Property); INIT(Param); INIT(Section); + INIT(Stream); INIT(Table); INIT(VMArray); INIT(ArrayUInt8); @@ -188,6 +190,7 @@ INIT(UTF8); INIT(VMCommonClass); INIT(VMClass); + INIT(VMClassPointer); INIT(VMGenericClass); INIT(VMClassArray); INIT(VMMethod); @@ -202,6 +205,7 @@ INIT(N3); INIT(Reader); INIT(UTF8Map); + INIT(AssemblyMap); INIT(ClassNameMap); INIT(ClassTokenMap); INIT(FieldTokenMap); From nicolas.geoffray at lip6.fr Thu Jun 18 06:18:42 2009 From: nicolas.geoffray at lip6.fr (Nicolas Geoffray) Date: Thu, 18 Jun 2009 13:18:42 -0000 Subject: [vmkit-commits] [vmkit] r73694 - in /vmkit/trunk/lib/JnJVM: Compiler/JavaAOTCompiler.cpp Compiler/JavaJIT.cpp VMCore/JavaArray.h VMCore/JavaClass.cpp VMCore/JavaClass.h VMCore/JavaConstantPool.cpp VMCore/JavaInitialise.cpp VMCore/JavaObject.h VMCore/JavaRuntimeJIT.cpp VMCore/JavaTypes.h VMCore/JavaUpcalls.h VMCore/Jnjvm.cpp VMCore/JnjvmClassLoader.cpp VMCore/Zip.cpp Message-ID: <200906181318.n5IDIkYh026886@zion.cs.uiuc.edu> Author: geoffray Date: Thu Jun 18 08:18:29 2009 New Revision: 73694 URL: http://llvm.org/viewvc/llvm-project?rev=73694&view=rev Log: Add a string when allocating in a bump pointer for debugging purposes. Modified: vmkit/trunk/lib/JnJVM/Compiler/JavaAOTCompiler.cpp vmkit/trunk/lib/JnJVM/Compiler/JavaJIT.cpp vmkit/trunk/lib/JnJVM/VMCore/JavaArray.h vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h vmkit/trunk/lib/JnJVM/VMCore/JavaConstantPool.cpp vmkit/trunk/lib/JnJVM/VMCore/JavaInitialise.cpp vmkit/trunk/lib/JnJVM/VMCore/JavaObject.h vmkit/trunk/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp vmkit/trunk/lib/JnJVM/VMCore/JavaTypes.h vmkit/trunk/lib/JnJVM/VMCore/JavaUpcalls.h vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp vmkit/trunk/lib/JnJVM/VMCore/Zip.cpp Modified: vmkit/trunk/lib/JnJVM/Compiler/JavaAOTCompiler.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Compiler/JavaAOTCompiler.cpp?rev=73694&r1=73693&r2=73694&view=diff ============================================================================== --- vmkit/trunk/lib/JnJVM/Compiler/JavaAOTCompiler.cpp (original) +++ vmkit/trunk/lib/JnJVM/Compiler/JavaAOTCompiler.cpp Thu Jun 18 08:18:29 2009 @@ -1671,7 +1671,7 @@ void JavaAOTCompiler::compileFile(JnjvmClassLoader* JCL, const char* n) { name = n; mvm::BumpPtrAllocator A; - Jnjvm* vm = new(A) Jnjvm(A, (JnjvmBootstrapLoader*)JCL); + Jnjvm* vm = new(A, "Bootstrap loader") Jnjvm(A, (JnjvmBootstrapLoader*)JCL); JavaThread* th = new JavaThread(0, 0, vm); vm->setMainThread(th); th->start((void (*)(mvm::Thread*))mainCompilerStart); Modified: vmkit/trunk/lib/JnJVM/Compiler/JavaJIT.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Compiler/JavaJIT.cpp?rev=73694&r1=73693&r2=73694&view=diff ============================================================================== --- vmkit/trunk/lib/JnJVM/Compiler/JavaJIT.cpp (original) +++ vmkit/trunk/lib/JnJVM/Compiler/JavaJIT.cpp Thu Jun 18 08:18:29 2009 @@ -890,7 +890,8 @@ exploreOpcodes(&compilingClass->bytes->elements[start], codeLen); compilingMethod->enveloppes = - new (compilingClass->classLoader->allocator) Enveloppe[nbEnveloppes]; + new (compilingClass->classLoader->allocator, "Enveloppes") + Enveloppe[nbEnveloppes]; compilingMethod->nbEnveloppes = nbEnveloppes; nbEnveloppes = 0; @@ -1918,7 +1919,7 @@ #ifndef ISOLATE_SHARING // ok now the cache Enveloppe& enveloppe = buggyVirtual ? - *(new (compilingClass->classLoader->allocator) Enveloppe()) : + *(new (compilingClass->classLoader->allocator, "Enveloppe") Enveloppe()) : compilingMethod->enveloppes[nbEnveloppes++]; if (!inlining) enveloppe.initialise(compilingClass, name, signature->keyName); Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaArray.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaArray.h?rev=73694&r1=73693&r2=73694&view=diff ============================================================================== --- vmkit/trunk/lib/JnJVM/VMCore/JavaArray.h (original) +++ vmkit/trunk/lib/JnJVM/VMCore/JavaArray.h Thu Jun 18 08:18:29 2009 @@ -97,7 +97,7 @@ /// its objects in permanent memory, not with the garbage collector. void* operator new(size_t sz, mvm::BumpPtrAllocator& allocator, sint32 size) { - return allocator.Allocate(sizeof(ssize_t) + size * sizeof(uint16)); + return allocator.Allocate(sizeof(ssize_t) + size * sizeof(uint16), "UTF8"); } UTF8(sint32 n) { Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp?rev=73694&r1=73693&r2=73694&view=diff ============================================================================== --- vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp (original) +++ vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp Thu Jun 18 08:18:29 2009 @@ -288,7 +288,7 @@ VirtualTable* VT = virtualVT; uint32 size = sizeof(JavaObject) + sizeof(ssize_t) + (n << logSize); - JavaArray* res = (JavaArray*)allocator.Allocate(size); + JavaArray* res = (JavaArray*)allocator.Allocate(size, "Array"); ((void**)res)[0] = VT; res->size = n; return res; @@ -602,7 +602,8 @@ #ifdef USE_GC_BOEHM void* val = GC_MALLOC(getStaticSize()); #else - void* val = classLoader->allocator.Allocate(getStaticSize()); + void* val = classLoader->allocator.Allocate(getStaticSize(), + "Static instance"); #endif setStaticInstance(val); return val; @@ -642,7 +643,7 @@ uint16 nbI = reader.readU2(); interfaces = (Class**) - classLoader->allocator.Allocate(nbI * sizeof(Class*)); + classLoader->allocator.Allocate(nbI * sizeof(Class*), "Interfaces"); // Do not set nbInterfaces yet, we may be interrupted by the GC // in anon-cooperative environment. @@ -707,7 +708,7 @@ Attribut* Class::readAttributs(Reader& reader, uint16& size) { uint16 nba = reader.readU2(); - Attribut* attributs = new(classLoader->allocator) Attribut[nba]; + Attribut* attributs = new(classLoader->allocator, "Attributs") Attribut[nba]; for (int i = 0; i < nba; i++) { const UTF8* attName = ctpInfo->UTF8At(reader.readU2()); @@ -725,7 +726,7 @@ void Class::readFields(Reader& reader) { uint16 nbFields = reader.readU2(); - virtualFields = new (classLoader->allocator) JavaField[nbFields]; + virtualFields = new (classLoader->allocator, "Fields") JavaField[nbFields]; staticFields = virtualFields + nbFields; for (int i = 0; i < nbFields; i++) { uint16 access = reader.readU2(); @@ -781,7 +782,7 @@ void Class::readMethods(Reader& reader) { uint16 nbMethods = reader.readU2(); - virtualMethods = new(classLoader->allocator) JavaMethod[nbMethods]; + virtualMethods = new(classLoader->allocator, "Methods") JavaMethod[nbMethods]; staticMethods = virtualMethods + nbMethods; for (int i = 0; i < nbMethods; i++) { uint16 access = reader.readU2(); @@ -901,7 +902,8 @@ } else if (clOuter == this) { if (!innerClasses) { innerClasses = (Class**) - classLoader->allocator.Allocate(nbi * sizeof(Class*)); + classLoader->allocator.Allocate(nbi * sizeof(Class*), + "Inner classes"); } clInner->setInnerAccess(accessFlags); if (!innerName) isAnonymous = true; @@ -1288,7 +1290,8 @@ mvm::BumpPtrAllocator& allocator = C->classLoader->allocator; secondaryTypes = (JavaVirtualTable**) - allocator.Allocate(sizeof(JavaVirtualTable*) * nbSecondaryTypes); + allocator.Allocate(sizeof(JavaVirtualTable*) * nbSecondaryTypes, + "Secondary types"); if (outOfDepth) { secondaryTypes[0] = this; @@ -1423,7 +1426,8 @@ nbSecondaryTypes = base->nbInterfaces + superVT->nbSecondaryTypes + addSuper; secondaryTypes = (JavaVirtualTable**) - allocator.Allocate(sizeof(JavaVirtualTable*) * nbSecondaryTypes); + allocator.Allocate(sizeof(JavaVirtualTable*) * nbSecondaryTypes, + "Secondary types"); // Put the super in the list of secondary types. if (addSuper) secondaryTypes[0] = superVT; @@ -1468,7 +1472,8 @@ nbSecondaryTypes = superVT->nbSecondaryTypes + 2 + outOfDepth; secondaryTypes = (JavaVirtualTable**) - allocator.Allocate(sizeof(JavaVirtualTable*) * nbSecondaryTypes); + allocator.Allocate(sizeof(JavaVirtualTable*) * nbSecondaryTypes, + "Secondary types"); // First, copy the list of secondary types from super array. memcpy(secondaryTypes + outOfDepth, superVT->secondaryTypes, @@ -1520,7 +1525,8 @@ mvm::BumpPtrAllocator& allocator = JCL->allocator; secondaryTypes = (JavaVirtualTable**) - allocator.Allocate(sizeof(JavaVirtualTable*) * nbSecondaryTypes); + allocator.Allocate(sizeof(JavaVirtualTable*) * nbSecondaryTypes, + "Secondary types"); // The interfaces have already been resolved. secondaryTypes[0] = cl->interfaces[0]->virtualVT; Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h?rev=73694&r1=73693&r2=73694&view=diff ============================================================================== --- vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h (original) +++ vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h Thu Jun 18 08:18:29 2009 @@ -398,7 +398,7 @@ } static FatLock* allocate(UserCommonClass* cl) { - return new(cl->classLoader->allocator) FatLock(); + return new(cl->classLoader->allocator, "Class fat lock") FatLock(); } void acquire() { @@ -684,7 +684,7 @@ template Ty *getInfo() { if (!JInfo) { - JInfo = new(classLoader->allocator) Ty(this); + JInfo = new(classLoader->allocator, "Class JIT info") Ty(this); } assert((void*)dynamic_cast(JInfo) == (void*)JInfo && @@ -1161,7 +1161,7 @@ template Ty *getInfo() { if (!JInfo) { - JInfo = new(classDef->classLoader->allocator) Ty(this); + JInfo = new(classDef->classLoader->allocator, "Method JIT info") Ty(this); } assert((void*)dynamic_cast(JInfo) == (void*)JInfo && @@ -1284,7 +1284,7 @@ template Ty *getInfo() { if (!JInfo) { - JInfo = new(classDef->classLoader->allocator) Ty(this); + JInfo = new(classDef->classLoader->allocator, "Field JIT info") Ty(this); } assert((void*)dynamic_cast(JInfo) == (void*)JInfo && Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaConstantPool.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaConstantPool.cpp?rev=73694&r1=73693&r2=73694&view=diff ============================================================================== --- vmkit/trunk/lib/JnJVM/VMCore/JavaConstantPool.cpp (original) +++ vmkit/trunk/lib/JnJVM/VMCore/JavaConstantPool.cpp Thu Jun 18 08:18:29 2009 @@ -157,7 +157,7 @@ JavaConstantPool::operator new(size_t sz, mvm::BumpPtrAllocator& allocator, uint32 ctpSize) { uint32 size = sz + ctpSize * (sizeof(void*) + sizeof(sint32) + sizeof(uint8)); - return allocator.Allocate(size); + return allocator.Allocate(size, "Constant pool"); } JavaConstantPool::JavaConstantPool(Class* cl, Reader& reader, uint32 size) { Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaInitialise.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaInitialise.cpp?rev=73694&r1=73693&r2=73694&view=diff ============================================================================== --- vmkit/trunk/lib/JnJVM/VMCore/JavaInitialise.cpp (original) +++ vmkit/trunk/lib/JnJVM/VMCore/JavaInitialise.cpp Thu Jun 18 08:18:29 2009 @@ -34,7 +34,7 @@ mvm::BumpPtrAllocator* C = new mvm::BumpPtrAllocator(); JnjvmBootstraLoader* bootstrapLoader = new(*C) JnjvmBootstrapLoader(*C, JCL->getCompiler()); - Jnjvm* vm = new(*A) Jnjvm(*A, bootstrapLoader); + Jnjvm* vm = new(*A, "VM") Jnjvm(*A, bootstrapLoader); return vm; } #else @@ -42,12 +42,12 @@ JnjvmClassLoader* mvm::VirtualMachine::initialiseJVM(JavaCompiler* Comp, bool dlLoad) { mvm::BumpPtrAllocator* A = new mvm::BumpPtrAllocator(); - return new(*A) JnjvmBootstrapLoader(*A, Comp, dlLoad); + return new(*A, "Bootstrap loader") JnjvmBootstrapLoader(*A, Comp, dlLoad); } mvm::VirtualMachine* mvm::VirtualMachine::createJVM(JnjvmClassLoader* C) { mvm::BumpPtrAllocator* A = new mvm::BumpPtrAllocator(); - Jnjvm* vm = new(*A) Jnjvm(*A, (JnjvmBootstrapLoader*)C); + Jnjvm* vm = new(*A, "VM") Jnjvm(*A, (JnjvmBootstrapLoader*)C); return vm; } Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaObject.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaObject.h?rev=73694&r1=73693&r2=73694&view=diff ============================================================================== --- vmkit/trunk/lib/JnJVM/VMCore/JavaObject.h (original) +++ vmkit/trunk/lib/JnJVM/VMCore/JavaObject.h Thu Jun 18 08:18:29 2009 @@ -160,7 +160,7 @@ /// void* operator new(size_t sz, mvm::BumpPtrAllocator& allocator, uint32 nbMethods) { - return allocator.Allocate(sizeof(uintptr_t) * (nbMethods)); + return allocator.Allocate(sizeof(uintptr_t) * (nbMethods), "Virtual table"); } /// JavaVirtualTable - Create JavaVirtualTable objects for classes, array Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp?rev=73694&r1=73693&r2=73694&view=diff ============================================================================== --- vmkit/trunk/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp (original) +++ vmkit/trunk/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp Thu Jun 18 08:18:29 2009 @@ -82,7 +82,7 @@ } else { mvm::BumpPtrAllocator& alloc = enveloppe->classDef->classLoader->allocator; - rcache = new(alloc) CacheNode(enveloppe); + rcache = new(alloc, "CacheNode") CacheNode(enveloppe); } rcache->methPtr = dmeth->compiledPtr(); Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaTypes.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaTypes.h?rev=73694&r1=73693&r2=73694&view=diff ============================================================================== --- vmkit/trunk/lib/JnJVM/VMCore/JavaTypes.h (original) +++ vmkit/trunk/lib/JnJVM/VMCore/JavaTypes.h Thu Jun 18 08:18:29 2009 @@ -276,7 +276,8 @@ /// void* operator new(size_t sz, mvm::BumpPtrAllocator& allocator, sint32 size) { - return allocator.Allocate(sizeof(Signdef) + size * sizeof(Typedef)); + return allocator.Allocate(sizeof(Signdef) + size * sizeof(Typedef), + "Signdef"); } @@ -338,7 +339,7 @@ template Ty *getInfo() { if (!JInfo) { - JInfo = new(initialLoader->allocator) Ty(this); + JInfo = new(initialLoader->allocator, "Sign info") Ty(this); } assert((void*)dynamic_cast(JInfo) == (void*)JInfo && Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaUpcalls.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaUpcalls.h?rev=73694&r1=73693&r2=73694&view=diff ============================================================================== --- vmkit/trunk/lib/JnJVM/VMCore/JavaUpcalls.h (original) +++ vmkit/trunk/lib/JnJVM/VMCore/JavaUpcalls.h Thu Jun 18 08:18:29 2009 @@ -18,7 +18,7 @@ vm->loadName(vm->asciizConstructUTF8(name), true, false) #define UPCALL_PRIMITIVE_CLASS(loader, name, nb) \ - new(loader->allocator) \ + new(loader->allocator, "Primitive class") \ UserClassPrimitive(loader, loader->asciizConstructUTF8(name), nb) \ #define UPCALL_FIELD(vm, cl, name, type, acc) \ Modified: vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp?rev=73694&r1=73693&r2=73694&view=diff ============================================================================== --- vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp (original) +++ vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp Thu Jun 18 08:18:29 2009 @@ -706,7 +706,7 @@ else end += index; sint32 length = end - index - 1; - char* name = (char*)vm->allocator.Allocate(length + 1); + char* name = (char*)vm->allocator.Allocate(length + 1, "class name"); memcpy(name, &(ptr[index]), length); name[length] = 0; return name; @@ -719,7 +719,7 @@ int i) { jarFile = argv[i]; uint32 size = 2 + strlen(vm->classpath) + strlen(jarFile); - char* temp = (char*)vm->allocator.Allocate(size); + char* temp = (char*)vm->allocator.Allocate(size, "jar file"); sprintf(temp, "%s:%s", vm->classpath, jarFile); vm->setClasspath(temp); @@ -968,7 +968,7 @@ uint32 size = upcalls->newString->virtualTableSize * sizeof(uintptr_t); JavaString::internStringVT = - (JavaVirtualTable*)bootstrapLoader->allocator.Allocate(size); + (JavaVirtualTable*)bootstrapLoader->allocator.Allocate(size, "String VT"); memcpy(JavaString::internStringVT, stringVT, size); Modified: vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp?rev=73694&r1=73693&r2=73694&view=diff ============================================================================== --- vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp (original) +++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp Thu Jun 18 08:18:29 2009 @@ -61,10 +61,10 @@ TheCompiler = Comp; - hashUTF8 = new(allocator) UTF8Map(allocator, 0); - classes = new(allocator) ClassMap(); - javaTypes = new(allocator) TypeMap(); - javaSignatures = new(allocator) SignMap(); + hashUTF8 = new(allocator, "UTF8Map") UTF8Map(allocator, 0); + classes = new(allocator, "ClassMap") ClassMap(); + javaTypes = new(allocator, "TypeMap") TypeMap(); + javaSignatures = new(allocator, "SignMap") SignMap(); bootClasspathEnv = getenv("JNJVM_BOOTCLASSPATH"); if (!bootClasspathEnv) { @@ -77,7 +77,7 @@ } - upcalls = new(allocator) Classpath(); + upcalls = new(allocator, "Classpath") Classpath(); bootstrapLoader = this; // Try to find if we have a pre-compiled rt.jar @@ -129,7 +129,8 @@ if (!upcalls->OfChar) { // Allocate interfaces. - InterfacesArray = (Class**)allocator.Allocate(2 * sizeof(UserClass*)); + InterfacesArray = (Class**)allocator.Allocate(2 * sizeof(UserClass*), + "Interface array"); ClassArray::InterfacesArray = InterfacesArray; // Create the primitive classes. @@ -256,11 +257,11 @@ bootstrapLoader = JCL.bootstrapLoader; TheCompiler = bootstrapLoader->getCompiler()->Create("Applicative loader"); - hashUTF8 = new(allocator) UTF8Map(allocator, - bootstrapLoader->upcalls->ArrayOfChar); - classes = new(allocator) ClassMap(); - javaTypes = new(allocator) TypeMap(); - javaSignatures = new(allocator) SignMap(); + hashUTF8 = new(allocator, "UTF8Map") + UTF8Map(allocator, bootstrapLoader->upcalls->ArrayOfChar); + classes = new(allocator, "ClassMap") ClassMap(); + javaTypes = new(allocator, "TypeMap") TypeMap(); + javaSignatures = new(allocator, "SignMap") SignMap(); javaLoader = loader; isolate = I; @@ -628,7 +629,7 @@ UserClass* res = 0; if (I == End) { const UTF8* internalName = readerConstructUTF8(name->elements, name->size); - res = new(allocator) UserClass(this, internalName, bytes); + res = new(allocator, "Class") UserClass(this, internalName, bytes); classes->map.insert(std::make_pair(internalName, res)); } else { res = ((UserClass*)(I->second)); @@ -648,7 +649,8 @@ UserClassArray* res = 0; if (I == End) { const UTF8* internalName = readerConstructUTF8(name->elements, name->size); - res = new(allocator) UserClassArray(this, internalName, baseClass); + res = new(allocator, "Array class") UserClassArray(this, internalName, + baseClass); classes->map.insert(std::make_pair(internalName, res)); } else { res = ((UserClassArray*)(I->second)); @@ -662,10 +664,10 @@ Typedef* res = 0; switch (cur) { case I_TAB : - res = new(allocator) ArrayTypedef(name); + res = new(allocator, "ArrayTypedef") ArrayTypedef(name); break; case I_REF : - res = new(allocator) ObjectTypedef(name, hashUTF8); + res = new(allocator, "ObjectTypedef") ObjectTypedef(name, hashUTF8); break; default : UserClassPrimitive* cl = @@ -673,7 +675,8 @@ assert(cl && "No primitive"); bool unsign = (cl == bootstrapLoader->upcalls->OfChar || cl == bootstrapLoader->upcalls->OfBool); - res = new(allocator) PrimitiveTypedef(name, cl, unsign, cur); + res = new(allocator, "PrimitiveTypedef") PrimitiveTypedef(name, cl, + unsign, cur); } return res; } @@ -811,7 +814,8 @@ (VMClassLoader*)(upcalls->vmdataClassLoader->getObjectField(loader)); if (!vmdata) { mvm::BumpPtrAllocator* A = new mvm::BumpPtrAllocator(); - JCL = new(*A) JnjvmClassLoader(*A, *vm->bootstrapLoader, loader, vm); + JCL = new(*A, "Class loader") JnjvmClassLoader(*A, *vm->bootstrapLoader, + loader, vm); vmdata = VMClassLoader::allocate(JCL); (upcalls->vmdataClassLoader->setObjectField(loader, (JavaObject*)vmdata)); } @@ -905,7 +909,7 @@ stat(rp, &st); if ((st.st_mode & S_IFMT) == S_IFDIR) { unsigned int len = strlen(rp); - char* temp = (char*)allocator.Allocate(len + 2); + char* temp = (char*)allocator.Allocate(len + 2, "Boot classpath"); memcpy(temp, rp, len); temp[len] = Jnjvm::dirSeparator[0]; temp[len + 1] = 0; @@ -914,7 +918,8 @@ ArrayUInt8* bytes = Reader::openFile(this, rp); if (bytes) { - ZipArchive *archive = new(allocator) ZipArchive(bytes, allocator); + ZipArchive *archive = new(allocator, "ZipArchive") + ZipArchive(bytes, allocator); if (archive) { bootArchives.push_back(archive); } Modified: vmkit/trunk/lib/JnJVM/VMCore/Zip.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/Zip.cpp?rev=73694&r1=73693&r2=73694&view=diff ============================================================================== --- vmkit/trunk/lib/JnJVM/VMCore/Zip.cpp (original) +++ vmkit/trunk/lib/JnJVM/VMCore/Zip.cpp Thu Jun 18 08:18:29 2009 @@ -124,7 +124,7 @@ while (true) { if (memcmp(&(reader.bytes->elements[temp]), HDR_CENTRAL, 4)) return; - ZipFile* ptr = new(allocator) ZipFile(); + ZipFile* ptr = new(allocator, "ZipFile") ZipFile(); reader.cursor = temp + 4 + C_COMPRESSION_METHOD; ptr->compressionMethod = readEndianDep2(reader); @@ -145,7 +145,8 @@ (reader.max - temp) < ptr->filenameLength) return; - ptr->filename = (char*)allocator.Allocate(ptr->filenameLength + 1); + ptr->filename = (char*)allocator.Allocate(ptr->filenameLength + 1, + "Zip file name"); memcpy(ptr->filename, &(reader.bytes->elements[temp]), ptr->filenameLength); ptr->filename[ptr->filenameLength] = 0; From nicolas.geoffray at lip6.fr Thu Jun 18 06:19:27 2009 From: nicolas.geoffray at lip6.fr (Nicolas Geoffray) Date: Thu, 18 Jun 2009 13:19:27 -0000 Subject: [vmkit-commits] [vmkit] r73695 - in /vmkit/trunk: include/mvm/Allocator.h lib/N3/VMCore/N3.cpp Message-ID: <200906181319.n5IDJRgO026914@zion.cs.uiuc.edu> Author: geoffray Date: Thu Jun 18 08:19:26 2009 New Revision: 73695 URL: http://llvm.org/viewvc/llvm-project?rev=73695&view=rev Log: Forgot these files from the previous commit. Modified: vmkit/trunk/include/mvm/Allocator.h vmkit/trunk/lib/N3/VMCore/N3.cpp Modified: vmkit/trunk/include/mvm/Allocator.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/mvm/Allocator.h?rev=73695&r1=73694&r2=73695&view=diff ============================================================================== --- vmkit/trunk/include/mvm/Allocator.h (original) +++ vmkit/trunk/include/mvm/Allocator.h Thu Jun 18 08:19:26 2009 @@ -42,7 +42,7 @@ SpinLock TheLock; llvm::BumpPtrAllocator Allocator; public: - void* Allocate(size_t sz) { + void* Allocate(size_t sz, const char* name) { #ifdef USE_GC_BOEHM return GC_MALLOC(sz); #else @@ -60,16 +60,18 @@ class PermanentObject { public: - void* operator new(size_t sz, BumpPtrAllocator& allocator) { - return allocator.Allocate(sz); + void* operator new(size_t sz, BumpPtrAllocator& allocator, + const char* name) { + return allocator.Allocate(sz, name); } void operator delete(void* ptr) { free(ptr); } - void* operator new [](size_t sz, BumpPtrAllocator& allocator) { - return allocator.Allocate(sz); + void* operator new [](size_t sz, BumpPtrAllocator& allocator, + const char* name) { + return allocator.Allocate(sz, name); } }; Modified: vmkit/trunk/lib/N3/VMCore/N3.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/N3/VMCore/N3.cpp?rev=73695&r1=73694&r2=73695&view=diff ============================================================================== --- vmkit/trunk/lib/N3/VMCore/N3.cpp (original) +++ vmkit/trunk/lib/N3/VMCore/N3.cpp Thu Jun 18 08:19:26 2009 @@ -59,7 +59,7 @@ N3* N3::allocateBootstrap() { mvm::BumpPtrAllocator * A = new mvm::BumpPtrAllocator(); - N3 *vm= new(*A) N3(); + N3 *vm= new(*A, "VM") N3(); std::string str = mvm::MvmModule::executionEngine->getTargetData()->getStringRepresentation(); @@ -84,7 +84,7 @@ N3* N3::allocate(const char* name, N3* parent) { mvm::BumpPtrAllocator * A = new mvm::BumpPtrAllocator(); - N3 *vm= new(*A) N3(); + N3 *vm= new(*A, "VM") N3(); std::string str = mvm::MvmModule::executionEngine->getTargetData()->getStringRepresentation(); From nicolas.geoffray at lip6.fr Thu Jun 18 06:55:41 2009 From: nicolas.geoffray at lip6.fr (Nicolas Geoffray) Date: Thu, 18 Jun 2009 13:55:41 -0000 Subject: [vmkit-commits] [vmkit] r73696 - in /vmkit/trunk/lib/JnJVM/VMCore: Reader.cpp VirtualTables.cpp Message-ID: <200906181355.n5IDtglp028066@zion.cs.uiuc.edu> Author: geoffray Date: Thu Jun 18 08:55:33 2009 New Revision: 73696 URL: http://llvm.org/viewvc/llvm-project?rev=73696&view=rev Log: Allocate arrays representing files with the GC instead of the bump pointer allocator. This enables deletion of unused files. Modified: vmkit/trunk/lib/JnJVM/VMCore/Reader.cpp vmkit/trunk/lib/JnJVM/VMCore/VirtualTables.cpp Modified: vmkit/trunk/lib/JnJVM/VMCore/Reader.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/Reader.cpp?rev=73696&r1=73695&r2=73696&view=diff ============================================================================== --- vmkit/trunk/lib/JnJVM/VMCore/Reader.cpp (original) +++ vmkit/trunk/lib/JnJVM/VMCore/Reader.cpp Thu Jun 18 08:55:33 2009 @@ -33,7 +33,7 @@ long nbb = ftell(fp); fseek(fp, 0, SeekSet); UserClassArray* array = loader->upcalls->ArrayOfByte; - res = (ArrayUInt8*)array->doNew((sint32)nbb, loader->allocator); + res = (ArrayUInt8*)array->doNew((sint32)nbb, 0); fread(res->elements, nbb, 1, fp); fclose(fp); } Modified: vmkit/trunk/lib/JnJVM/VMCore/VirtualTables.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/VirtualTables.cpp?rev=73696&r1=73695&r2=73696&view=diff ============================================================================== --- vmkit/trunk/lib/JnJVM/VMCore/VirtualTables.cpp (original) +++ vmkit/trunk/lib/JnJVM/VMCore/VirtualTables.cpp Thu Jun 18 08:55:33 2009 @@ -29,6 +29,7 @@ #include "Jnjvm.h" #include "JnjvmClassLoader.h" #include "LockedMap.h" +#include "Zip.h" using namespace jnjvm; @@ -244,6 +245,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) { + (*i)->bytes->markAndTrace(); + } } //===----------------------------------------------------------------------===// From nicolas.geoffray at lip6.fr Thu Jun 18 06:56:10 2009 From: nicolas.geoffray at lip6.fr (Nicolas Geoffray) Date: Thu, 18 Jun 2009 13:56:10 -0000 Subject: [vmkit-commits] [vmkit] r73697 - /vmkit/trunk/lib/JnJVM/VMCore/Zip.h Message-ID: <200906181356.n5IDuA5P028088@zion.cs.uiuc.edu> Author: geoffray Date: Thu Jun 18 08:56:10 2009 New Revision: 73697 URL: http://llvm.org/viewvc/llvm-project?rev=73697&view=rev Log: Forgot that file from the previous commit. Modified: vmkit/trunk/lib/JnJVM/VMCore/Zip.h Modified: vmkit/trunk/lib/JnJVM/VMCore/Zip.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/Zip.h?rev=73697&r1=73696&r2=73697&view=diff ============================================================================== --- vmkit/trunk/lib/JnJVM/VMCore/Zip.h (original) +++ vmkit/trunk/lib/JnJVM/VMCore/Zip.h Thu Jun 18 08:56:10 2009 @@ -49,9 +49,9 @@ public: std::map filetable; typedef std::map::iterator table_iterator; + ArrayUInt8* bytes; private: - ArrayUInt8* bytes; void findOfscd(); void addFiles(); From nicolas.geoffray at lip6.fr Thu Jun 18 07:05:11 2009 From: nicolas.geoffray at lip6.fr (Nicolas Geoffray) Date: Thu, 18 Jun 2009 14:05:11 -0000 Subject: [vmkit-commits] [vmkit] r73698 - in /vmkit/trunk/lib/JnJVM/VMCore: JavaClass.cpp Reader.cpp VirtualTables.cpp Zip.h Message-ID: <200906181405.n5IE5CDQ028407@zion.cs.uiuc.edu> Author: geoffray Date: Thu Jun 18 09:05:06 2009 New Revision: 73698 URL: http://llvm.org/viewvc/llvm-project?rev=73698&view=rev Log: Change the previous commit to allocate arrays from bootstrap loader in the bump pointer allocator. Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp vmkit/trunk/lib/JnJVM/VMCore/Reader.cpp vmkit/trunk/lib/JnJVM/VMCore/VirtualTables.cpp vmkit/trunk/lib/JnJVM/VMCore/Zip.h Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp?rev=73698&r1=73697&r2=73698&view=diff ============================================================================== --- vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp (original) +++ vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp Thu Jun 18 09:05:06 2009 @@ -287,9 +287,18 @@ cl->asPrimitiveClass()->logSize : (sizeof(JavaObject*) == 8 ? 3 : 2); VirtualTable* VT = virtualVT; uint32 size = sizeof(JavaObject) + sizeof(ssize_t) + (n << logSize); - - JavaArray* res = (JavaArray*)allocator.Allocate(size, "Array"); - ((void**)res)[0] = VT; + + JavaArray* res = 0; + + // If the allocator is the boostrap allocator, use it. + if (&allocator == &(cl->classLoader->bootstrapLoader->allocator)) { + res = (JavaArray*)allocator.Allocate(size, "Array"); + ((void**)res)[0] = VT; + } else { + // Otherwise, allocate with the GC. + Jnjvm* vm = JavaThread::get()->getJVM(); + res = (JavaArray*)vm->gcAllocator.allocateManagedObject(size, VT); + } res->size = n; return res; } Modified: vmkit/trunk/lib/JnJVM/VMCore/Reader.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/Reader.cpp?rev=73698&r1=73697&r2=73698&view=diff ============================================================================== --- vmkit/trunk/lib/JnJVM/VMCore/Reader.cpp (original) +++ vmkit/trunk/lib/JnJVM/VMCore/Reader.cpp Thu Jun 18 09:05:06 2009 @@ -33,7 +33,7 @@ long nbb = ftell(fp); fseek(fp, 0, SeekSet); UserClassArray* array = loader->upcalls->ArrayOfByte; - res = (ArrayUInt8*)array->doNew((sint32)nbb, 0); + res = (ArrayUInt8*)array->doNew((sint32)nbb, loader->allocator); fread(res->elements, nbb, 1, fp); fclose(fp); } Modified: vmkit/trunk/lib/JnJVM/VMCore/VirtualTables.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/VirtualTables.cpp?rev=73698&r1=73697&r2=73698&view=diff ============================================================================== --- vmkit/trunk/lib/JnJVM/VMCore/VirtualTables.cpp (original) +++ vmkit/trunk/lib/JnJVM/VMCore/VirtualTables.cpp Thu Jun 18 09:05:06 2009 @@ -29,7 +29,6 @@ #include "Jnjvm.h" #include "JnjvmClassLoader.h" #include "LockedMap.h" -#include "Zip.h" using namespace jnjvm; @@ -245,11 +244,6 @@ TRACE_DELEGATEE(upcalls->OfLong); TRACE_DELEGATEE(upcalls->OfDouble); #undef TRACE_DELEGATEE - - for (std::vector::iterator i = bootArchives.begin(), - e = bootArchives.end(); i!= e; ++i) { - (*i)->bytes->markAndTrace(); - } } //===----------------------------------------------------------------------===// Modified: vmkit/trunk/lib/JnJVM/VMCore/Zip.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/Zip.h?rev=73698&r1=73697&r2=73698&view=diff ============================================================================== --- vmkit/trunk/lib/JnJVM/VMCore/Zip.h (original) +++ vmkit/trunk/lib/JnJVM/VMCore/Zip.h Thu Jun 18 09:05:06 2009 @@ -49,9 +49,9 @@ public: std::map filetable; typedef std::map::iterator table_iterator; - ArrayUInt8* bytes; private: + ArrayUInt8* bytes; void findOfscd(); void addFiles(); From nicolas.geoffray at lip6.fr Thu Jun 18 07:29:30 2009 From: nicolas.geoffray at lip6.fr (Nicolas Geoffray) Date: Thu, 18 Jun 2009 14:29:30 -0000 Subject: [vmkit-commits] [vmkit] r73699 - in /vmkit/trunk/lib/JnJVM/VMCore: JavaClass.cpp JavaClass.h Jnjvm.cpp Reader.cpp Reader.h Message-ID: <200906181429.n5IETV1R029210@zion.cs.uiuc.edu> Author: geoffray Date: Thu Jun 18 09:29:23 2009 New Revision: 73699 URL: http://llvm.org/viewvc/llvm-project?rev=73699&view=rev Log: Maybe this will make it right. Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp vmkit/trunk/lib/JnJVM/VMCore/Reader.cpp vmkit/trunk/lib/JnJVM/VMCore/Reader.h Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp?rev=73699&r1=73698&r2=73699&view=diff ============================================================================== --- vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp (original) +++ vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp Thu Jun 18 09:29:23 2009 @@ -280,7 +280,8 @@ return res; } -JavaArray* UserClassArray::doNew(sint32 n, mvm::BumpPtrAllocator& allocator) { +JavaArray* UserClassArray::doNew(sint32 n, mvm::BumpPtrAllocator& allocator, + bool temp) { UserCommonClass* cl = baseClass(); uint32 logSize = cl->isPrimitive() ? @@ -290,15 +291,14 @@ JavaArray* res = 0; - // If the allocator is the boostrap allocator, use it. - if (&allocator == &(cl->classLoader->bootstrapLoader->allocator)) { + // If the array is not temporary, use the allocator. + if (!temp) { res = (JavaArray*)allocator.Allocate(size, "Array"); - ((void**)res)[0] = VT; } else { - // Otherwise, allocate with the GC. - Jnjvm* vm = JavaThread::get()->getJVM(); - res = (JavaArray*)vm->gcAllocator.allocateManagedObject(size, VT); + // Otherwise, allocate with the malloc + res = (JavaArray*)malloc(size); } + ((void**)res)[0] = VT; res->size = n; return res; } Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h?rev=73699&r1=73698&r2=73699&view=diff ============================================================================== --- vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h (original) +++ vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h Thu Jun 18 09:29:23 2009 @@ -875,7 +875,8 @@ /// doNew - Allocate a new array with the given allocator. /// - JavaArray* doNew(sint32 n, mvm::BumpPtrAllocator& allocator); + JavaArray* doNew(sint32 n, mvm::BumpPtrAllocator& allocator, + bool temp = false); JavaArray* doNew(sint32 n, mvm::Allocator& allocator); /// _baseClass - The base class of the array. Modified: vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp?rev=73699&r1=73698&r2=73699&view=diff ============================================================================== --- vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp (original) +++ vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp Thu Jun 18 09:29:23 2009 @@ -724,7 +724,7 @@ sprintf(temp, "%s:%s", vm->classpath, jarFile); vm->setClasspath(temp); - ArrayUInt8* bytes = Reader::openFile(vm->bootstrapLoader, jarFile); + ArrayUInt8* bytes = Reader::openFile(vm->bootstrapLoader, jarFile, true); if (!bytes) { printf("Unable to access jarfile %s\n", jarFile); @@ -758,6 +758,7 @@ } else { printf("Can't find archive %s\n", jarFile); } + free(bytes); } void ClArgumentsInfo::nyi() { Modified: vmkit/trunk/lib/JnJVM/VMCore/Reader.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/Reader.cpp?rev=73699&r1=73698&r2=73699&view=diff ============================================================================== --- vmkit/trunk/lib/JnJVM/VMCore/Reader.cpp (original) +++ vmkit/trunk/lib/JnJVM/VMCore/Reader.cpp Thu Jun 18 09:29:23 2009 @@ -25,7 +25,8 @@ const int Reader::SeekCur = SEEK_CUR; const int Reader::SeekEnd = SEEK_END; -ArrayUInt8* Reader::openFile(JnjvmBootstrapLoader* loader, const char* path) { +ArrayUInt8* Reader::openFile(JnjvmBootstrapLoader* loader, const char* path, + bool temp) { FILE* fp = fopen(path, "r"); ArrayUInt8* res = 0; if (fp != 0) { @@ -33,7 +34,7 @@ long nbb = ftell(fp); fseek(fp, 0, SeekSet); UserClassArray* array = loader->upcalls->ArrayOfByte; - res = (ArrayUInt8*)array->doNew((sint32)nbb, loader->allocator); + res = (ArrayUInt8*)array->doNew((sint32)nbb, loader->allocator, temp); fread(res->elements, nbb, 1, fp); fclose(fp); } Modified: vmkit/trunk/lib/JnJVM/VMCore/Reader.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/Reader.h?rev=73699&r1=73698&r2=73699&view=diff ============================================================================== --- vmkit/trunk/lib/JnJVM/VMCore/Reader.h (original) +++ vmkit/trunk/lib/JnJVM/VMCore/Reader.h Thu Jun 18 09:29:23 2009 @@ -76,8 +76,10 @@ static const int SeekCur; static const int SeekEnd; - static ArrayUInt8* openFile(JnjvmBootstrapLoader* loader, const char* path); - static ArrayUInt8* openZip(JnjvmBootstrapLoader* loader, ZipArchive* archive, const char* filename); + static ArrayUInt8* openFile(JnjvmBootstrapLoader* loader, const char* path, + bool temp = false); + static ArrayUInt8* openZip(JnjvmBootstrapLoader* loader, ZipArchive* archive, + const char* filename); uint8 readU1() { return bytes->elements[cursor++]; From nicolas.geoffray at lip6.fr Fri Jun 19 01:26:56 2009 From: nicolas.geoffray at lip6.fr (Nicolas Geoffray) Date: Fri, 19 Jun 2009 08:26:56 -0000 Subject: [vmkit-commits] [vmkit] r73763 - in /vmkit/trunk: lib/JnJVM/Classpath/ lib/JnJVM/VMCore/ lib/Mvm/Compiler/ tools/jnjvm/ tools/llcj/libjnjvm/ tools/llcj/libjnjvmjit/ tools/n3-mono/ tools/n3-pnetlib/ tools/vmjc/ tools/vmkit/ Message-ID: <200906190827.n5J8R5tr027272@zion.cs.uiuc.edu> Author: geoffray Date: Fri Jun 19 03:26:36 2009 New Revision: 73763 URL: http://llvm.org/viewvc/llvm-project?rev=73763&view=rev Log: Move to new LLVM API and Makefile machinery. Added: vmkit/trunk/lib/JnJVM/Classpath/Classpath.inc - copied unchanged from r73608, vmkit/trunk/lib/JnJVM/Classpath/Classpath.cpp vmkit/trunk/lib/JnJVM/Classpath/ClasspathConstructor.inc - copied, changed from r73608, vmkit/trunk/lib/JnJVM/Classpath/ClasspathConstructor.cpp vmkit/trunk/lib/JnJVM/Classpath/ClasspathField.inc - copied unchanged from r73608, vmkit/trunk/lib/JnJVM/Classpath/ClasspathField.cpp vmkit/trunk/lib/JnJVM/Classpath/ClasspathMethod.inc - copied, changed from r73608, vmkit/trunk/lib/JnJVM/Classpath/ClasspathMethod.cpp vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMClass.inc - copied unchanged from r73608, vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMClass.cpp vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMClassLoader.inc - copied unchanged from r73608, vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMClassLoader.cpp vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMObject.inc - copied unchanged from r73608, vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMObject.cpp vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMRuntime.inc - copied unchanged from r73608, vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMRuntime.cpp vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMStackWalker.inc - copied unchanged from r73608, vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMStackWalker.cpp vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMSystem.inc - copied unchanged from r73608, vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMSystem.cpp vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMSystemProperties.inc - copied unchanged from r73608, vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMSystemProperties.cpp vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMThread.inc - copied unchanged from r73608, vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMThread.cpp vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMThrowable.inc - copied unchanged from r73608, vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMThrowable.cpp vmkit/trunk/lib/JnJVM/Classpath/JavaUpcalls.cpp - copied, changed from r73608, vmkit/trunk/lib/JnJVM/VMCore/JavaUpcalls.cpp vmkit/trunk/lib/JnJVM/Classpath/JavaUpcalls.h - copied unchanged from r73694, vmkit/trunk/lib/JnJVM/VMCore/JavaUpcalls.h Removed: vmkit/trunk/lib/JnJVM/Classpath/Classpath.cpp vmkit/trunk/lib/JnJVM/Classpath/ClasspathConstructor.cpp vmkit/trunk/lib/JnJVM/Classpath/ClasspathField.cpp vmkit/trunk/lib/JnJVM/Classpath/ClasspathMethod.cpp vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMClass.cpp vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMClassLoader.cpp vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMObject.cpp vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMRuntime.cpp vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMStackWalker.cpp vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMSystem.cpp vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMSystemProperties.cpp vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMThread.cpp vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMThrowable.cpp vmkit/trunk/lib/JnJVM/VMCore/JavaUpcalls.cpp vmkit/trunk/lib/JnJVM/VMCore/JavaUpcalls.h Modified: vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp vmkit/trunk/lib/Mvm/Compiler/JIT.cpp vmkit/trunk/tools/jnjvm/Makefile vmkit/trunk/tools/llcj/libjnjvm/Makefile vmkit/trunk/tools/llcj/libjnjvmjit/Makefile vmkit/trunk/tools/n3-mono/Makefile vmkit/trunk/tools/n3-pnetlib/Makefile vmkit/trunk/tools/vmjc/Makefile vmkit/trunk/tools/vmkit/Makefile Removed: vmkit/trunk/lib/JnJVM/Classpath/Classpath.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Classpath/Classpath.cpp?rev=73762&view=auto ============================================================================== --- vmkit/trunk/lib/JnJVM/Classpath/Classpath.cpp (original) +++ vmkit/trunk/lib/JnJVM/Classpath/Classpath.cpp (removed) @@ -1,327 +0,0 @@ -//===-------- Classpath.cpp - Configuration for classpath -------------------===// -// -// JnJVM -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// - - - -#include "Classpath.h" -#include "ClasspathReflect.h" -#include "JavaClass.h" -#include "JavaThread.h" -#include "JavaUpcalls.h" -#include "Jnjvm.h" - - -using namespace jnjvm; - -extern "C" { - -// Define hasClassInitializer because of a buggy implementation in Classpath. -JNIEXPORT bool JNICALL Java_java_io_VMObjectStreamClass_hasClassInitializer( -#ifdef NATIVE_JNI -JNIEnv *env, -jclass clazz, -#endif -jclass Cl) { - - bool res = false; - BEGIN_NATIVE_EXCEPTION(0) - - verifyNull(Cl); - Jnjvm* vm = JavaThread::get()->getJVM(); - UserCommonClass* cl = - UserCommonClass::resolvedImplClass(vm, (JavaObject*)Cl, true); - - if (cl->isClass() && - cl->asClass()->lookupMethodDontThrow(vm->bootstrapLoader->clinitName, - vm->bootstrapLoader->clinitType, - true, false, 0)) - res = true; - - END_NATIVE_EXCEPTION - - return res; -} - - -// Redefine some VMObjectStreamClass functions because of a slow implementation -// in Classpath. - -JNIEXPORT void JNICALL Java_java_io_VMObjectStreamClass_setBooleanNative( -#ifdef NATIVE_JNI -JNIEnv *env, -jclass clazz, -#endif -JavaObjectField* Field, jobject obj, jboolean val) { - - BEGIN_NATIVE_EXCEPTION(0) - - verifyNull(obj); - JavaField* field = Field->getInternalField(); - field->setInt8Field((JavaObject*)obj, (uint8)val); - - END_NATIVE_EXCEPTION -} - -JNIEXPORT void JNICALL Java_java_io_VMObjectStreamClass_setByteNative( -#ifdef NATIVE_JNI -JNIEnv *env, -jclass clazz, -#endif -JavaObjectField* Field, jobject obj, jbyte val) { - - BEGIN_NATIVE_EXCEPTION(0) - - verifyNull(obj); - JavaField* field = Field->getInternalField(); - field->setInt8Field((JavaObject*)obj, (uint8)val); - - END_NATIVE_EXCEPTION -} - -JNIEXPORT void JNICALL Java_java_io_VMObjectStreamClass_setCharNative( -#ifdef NATIVE_JNI -JNIEnv *env, -jclass clazz, -#endif -JavaObjectField* Field, jobject obj, jchar val) { - - BEGIN_NATIVE_EXCEPTION(0) - - verifyNull(obj); - JavaField* field = Field->getInternalField(); - field->setInt16Field((JavaObject*)obj, (uint16)val); - - END_NATIVE_EXCEPTION -} - -JNIEXPORT void JNICALL Java_java_io_VMObjectStreamClass_setShortNative( -#ifdef NATIVE_JNI -JNIEnv *env, -jclass clazz, -#endif -JavaObjectField* Field, jobject obj, jshort val) { - - BEGIN_NATIVE_EXCEPTION(0) - - verifyNull(obj); - JavaField* field = Field->getInternalField(); - field->setInt16Field((JavaObject*)obj, (sint16)val); - - END_NATIVE_EXCEPTION -} - -JNIEXPORT void JNICALL Java_java_io_VMObjectStreamClass_setIntNative( -#ifdef NATIVE_JNI -JNIEnv *env, -jclass clazz, -#endif -JavaObjectField* Field, jobject obj, jint val) { - - BEGIN_NATIVE_EXCEPTION(0) - - verifyNull(obj); - JavaField* field = Field->getInternalField(); - field->setInt32Field((JavaObject*)obj, (sint32)val); - - END_NATIVE_EXCEPTION -} - -JNIEXPORT void JNICALL Java_java_io_VMObjectStreamClass_setLongNative( -#ifdef NATIVE_JNI -JNIEnv *env, -jclass clazz, -#endif -JavaObjectField* Field, jobject obj, jlong val) { - - BEGIN_NATIVE_EXCEPTION(0) - - verifyNull(obj); - JavaField* field = Field->getInternalField(); - field->setLongField((JavaObject*)obj, (sint64)val); - - END_NATIVE_EXCEPTION -} - -JNIEXPORT void JNICALL Java_java_io_VMObjectStreamClass_setFloatNative( -#ifdef NATIVE_JNI -JNIEnv *env, -jclass clazz, -#endif -JavaObjectField* Field, jobject obj, jfloat val) { - - BEGIN_NATIVE_EXCEPTION(0) - - verifyNull(obj); - JavaField* field = Field->getInternalField(); - field->setFloatField((JavaObject*)obj, (float)val); - - END_NATIVE_EXCEPTION -} - -JNIEXPORT void JNICALL Java_java_io_VMObjectStreamClass_setDoubleNative( -#ifdef NATIVE_JNI -JNIEnv *env, -jclass clazz, -#endif -JavaObjectField* Field, jobject obj, jdouble val) { - - BEGIN_NATIVE_EXCEPTION(0) - - verifyNull(obj); - JavaField* field = Field->getInternalField(); - field->setDoubleField((JavaObject*)obj, (double)val); - - END_NATIVE_EXCEPTION -} - -JNIEXPORT void JNICALL Java_java_io_VMObjectStreamClass_setObjectNative( -#ifdef NATIVE_JNI -JNIEnv *env, -jclass clazz, -#endif -JavaObjectField* Field, jobject obj, jobject val) { - - BEGIN_NATIVE_EXCEPTION(0) - - verifyNull(obj); - JavaField* field = Field->getInternalField(); - field->setObjectField((JavaObject*)obj, (JavaObject*)val); - - END_NATIVE_EXCEPTION -} - -JNIEXPORT jobject JNICALL Java_java_io_VMObjectInputStream_allocateObject( -#ifdef NATIVE_JNI -JNIEnv *env, -jclass clazz, -#endif -jclass target, jclass constr, JavaObjectConstructor* cons) { - - jobject res = 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; - - END_NATIVE_EXCEPTION - - return res; -} - -JNIEXPORT jobject JNICALL Java_java_lang_reflect_VMArray_createObjectArray( -#ifdef NATIVE_JNI -JNIEnv * env, -jclass thisClass, -#endif -jclass arrayType, jint arrayLength) { - - jobject res = 0; - - BEGIN_NATIVE_EXCEPTION(0) - - Jnjvm* vm = JavaThread::get()->getJVM(); - UserCommonClass* base = - UserCommonClass::resolvedImplClass(vm, (JavaObject*)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); - - END_NATIVE_EXCEPTION - - return res; -} - - -// Never throws. -JNIEXPORT -bool JNICALL Java_java_util_concurrent_atomic_AtomicLong_VMSupportsCS8( -#ifdef NATIVE_JNI -JNIEnv *env, -jclass clazz, -#endif -) { - return false; -} - -// Never throws. -JNIEXPORT bool JNICALL Java_sun_misc_Unsafe_compareAndSwapLong( -#ifdef NATIVE_JNI -JNIEnv *env, -#endif -JavaObject* unsafe, JavaObject* obj, jlong offset, jlong expect, jlong update) { - - jlong *ptr; - jlong value; - - ptr = (jlong *) (((uint8 *) obj) + offset); - - value = *ptr; - - if (value == expect) { - *ptr = update; - return true; - } else { - return false; - } - -} - -// Never throws. -JNIEXPORT bool JNICALL Java_sun_misc_Unsafe_compareAndSwapInt( -#ifdef NATIVE_JNI -JNIEnv *env, -#endif -JavaObject* unsafe, JavaObject* obj, jlong offset, jint expect, jint update) { - - jint *ptr; - - ptr = (jint *) (((uint8 *) obj) + offset); - - return __sync_bool_compare_and_swap(ptr, expect, update); -} - -// Never throws. -JNIEXPORT bool JNICALL Java_sun_misc_Unsafe_compareAndSwapObject( -#ifdef NATIVE_JNI -JNIEnv *env, -#endif -JavaObject* unsafe, JavaObject* obj, jlong offset, jobject expect, -jobject update) { - - jobject *ptr; - - ptr = (jobject *) (((uint8 *) obj) + offset); - - return __sync_bool_compare_and_swap(ptr, expect, update); -} - -// Never throws. -JNIEXPORT void JNICALL Java_sun_misc_Unsafe_putObjectVolatile( -#ifdef NATIVE_JNI -JNIEnv *env, -#endif -jobject unsafe, jobject obj, jlong offset, jobject value) { - - jobject *ptr; - - ptr = (jobject *) (((uint8 *) obj) + offset); - - *ptr = value; - -} - -} Removed: vmkit/trunk/lib/JnJVM/Classpath/ClasspathConstructor.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Classpath/ClasspathConstructor.cpp?rev=73762&view=auto ============================================================================== --- vmkit/trunk/lib/JnJVM/Classpath/ClasspathConstructor.cpp (original) +++ vmkit/trunk/lib/JnJVM/Classpath/ClasspathConstructor.cpp (removed) @@ -1,196 +0,0 @@ -//===- ClasspathConstructor.cpp -------------------------------------------===// -//===----------- GNU classpath java/lang/reflect/Constructor --------------===// -// -// JnJVM -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// - -#include "types.h" - -#include "Classpath.h" -#include "ClasspathReflect.h" -#include "JavaArray.h" -#include "JavaClass.h" -#include "JavaObject.h" -#include "JavaThread.h" -#include "JavaTypes.h" -#include "JavaUpcalls.h" -#include "Jnjvm.h" -#include "JnjvmClassLoader.h" - -using namespace jnjvm; - -extern "C" { - -JNIEXPORT jobject JNICALL Java_java_lang_reflect_Constructor_getParameterTypes( -#ifdef NATIVE_JNI -JNIEnv *env, -#endif -JavaObjectConstructor* cons) { - - jobject res = 0; - - BEGIN_NATIVE_EXCEPTION(0) - - verifyNull(cons); - UserClass* cl = cons->getClass(); - JavaMethod* meth = cons->getInternalMethod(); - JnjvmClassLoader* loader = cl->classLoader; - - res = (jobject)meth->getParameterTypes(loader); - END_NATIVE_EXCEPTION - - return res; -} - -JNIEXPORT jint JNICALL Java_java_lang_reflect_Constructor_getModifiersInternal( -#ifdef NATIVE_JNI -JNIEnv *env, -#endif -JavaObjectConstructor* cons) { - - jint res = 0; - - BEGIN_NATIVE_EXCEPTION(0) - - verifyNull(cons); - JavaMethod* meth = cons->getInternalMethod(); - res = meth->access; - - END_NATIVE_EXCEPTION - - return res; -} - -static jobject proceed(JavaObjectConstructor* cons, jobject _args, jclass Clazz, - jint index) __attribute__ ((noinline)); - -static jobject proceed(JavaObjectConstructor* cons, jobject _args, jclass Clazz, - jint index) { - jobject res = 0; - Jnjvm* vm = JavaThread::get()->getJVM(); - JavaMethod* meth = cons->getInternalMethod(); - UserClass* cl = cons->getClass(); - JavaArray* args = (JavaArray*)_args; - sint32 nbArgs = args ? args->size : 0; - Signdef* sign = meth->getSignature(); - sint32 size = sign->nbArguments; - - if (isAbstract(cl->access)) vm->instantiationException(cl); - - // Allocate a buffer to store the arguments. - uintptr_t buf = size ? (uintptr_t)alloca(size * sizeof(uint64)) : 0; - // Record the beginning of the buffer. - void* startBuf = (void*)buf; - - // Do it after alloca - - if (nbArgs == size) { - UserCommonClass* _cl = - UserCommonClass::resolvedImplClass(vm, (JavaObject*)Clazz, false); - UserClass* cl = _cl->asClass(); - if (cl) { - cl->initialiseClass(vm); - JavaObject* obj = cl->doNew(vm); - res = (jobject) obj; - JavaObject** ptr = (JavaObject**)(void*)(args->elements); - - Typedef* const* arguments = sign->getArgumentsType(); - // Store the arguments, unboxing primitives if necessary. - for (sint32 i = 0; i < size; ++i) { - ptr[i]->decapsulePrimitive(vm, buf, arguments[i]); - } - - JavaObject* excp = 0; - JavaThread* th = JavaThread::get(); - try { - meth->invokeIntSpecialBuf(vm, cl, obj, startBuf); - } catch(...) { - excp = th->getJavaException(); - if (excp->getClass()->isAssignableFrom(vm->upcalls->newException)) { - th->clearException(); - // If it's an exception, we encapsule it in an - // invocationTargetException - vm->invocationTargetException(excp); - } else { - // If it's an error, throw it again. - th->throwPendingException(); - } - } - - } else { - vm->illegalArgumentException("class is not a regular class"); - } - } else { - vm->illegalArgumentException("wrong number of arguments"); - } - - return res; -} - -JNIEXPORT jobject JNICALL Java_java_lang_reflect_Constructor_constructNative( -#ifdef NATIVE_JNI -JNIEnv *env, -#endif -JavaObjectConstructor* cons, jobject _args, jclass Clazz, jint index) { - - jobject res = 0; - - BEGIN_NATIVE_EXCEPTION(0) - - // Proceed in another function because we are using alloca. - res = proceed(cons, _args, Clazz, index); - - END_NATIVE_EXCEPTION - - return res; -} - -JNIEXPORT -jobjectArray JNICALL Java_java_lang_reflect_Constructor_getExceptionTypes( -#ifdef NATIVE_JNI -JNIEnv *env, -#endif -JavaObjectConstructor* cons) { - - jobjectArray res = 0; - - BEGIN_NATIVE_EXCEPTION(0) - - verifyNull(cons); - UserClass* cl = cons->getClass(); - JavaMethod* meth = cons->getInternalMethod(); - JnjvmClassLoader* loader = cl->classLoader; - - res = (jobjectArray)meth->getExceptionTypes(loader); - - END_NATIVE_EXCEPTION - - return res; -} - -JNIEXPORT jobject JNICALL Java_java_lang_reflect_Constructor_getSignature( -#ifdef NATIVE_JNI -JNIEnv *env, -#endif -JavaObjectConstructor* Meth) { - - jobject result = 0; - - BEGIN_NATIVE_EXCEPTION(0) - - verifyNull(Meth); - JavaMethod* meth = Meth->getInternalMethod(); - Jnjvm* vm = JavaThread::get()->getJVM(); - result = (jobject)(vm->internalUTF8ToStr(meth->type)); - - END_NATIVE_EXCEPTION - - return result; -} - - -} Copied: vmkit/trunk/lib/JnJVM/Classpath/ClasspathConstructor.inc (from r73608, vmkit/trunk/lib/JnJVM/Classpath/ClasspathConstructor.cpp) URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Classpath/ClasspathConstructor.inc?p2=vmkit/trunk/lib/JnJVM/Classpath/ClasspathConstructor.inc&p1=vmkit/trunk/lib/JnJVM/Classpath/ClasspathConstructor.cpp&r1=73608&r2=73763&rev=73763&view=diff ============================================================================== --- vmkit/trunk/lib/JnJVM/Classpath/ClasspathConstructor.cpp (original) +++ vmkit/trunk/lib/JnJVM/Classpath/ClasspathConstructor.inc Fri Jun 19 03:26:36 2009 @@ -65,11 +65,12 @@ return res; } -static jobject proceed(JavaObjectConstructor* cons, jobject _args, jclass Clazz, - jint index) __attribute__ ((noinline)); +static jobject proceedConstructor(JavaObjectConstructor* cons, jobject _args, + jclass Clazz, jint index) + __attribute__ ((noinline)); -static jobject proceed(JavaObjectConstructor* cons, jobject _args, jclass Clazz, - jint index) { +static jobject proceedConstructor(JavaObjectConstructor* cons, jobject _args, + jclass Clazz, jint index) { jobject res = 0; Jnjvm* vm = JavaThread::get()->getJVM(); JavaMethod* meth = cons->getInternalMethod(); @@ -142,7 +143,7 @@ BEGIN_NATIVE_EXCEPTION(0) // Proceed in another function because we are using alloca. - res = proceed(cons, _args, Clazz, index); + res = proceedConstructor(cons, _args, Clazz, index); END_NATIVE_EXCEPTION Removed: vmkit/trunk/lib/JnJVM/Classpath/ClasspathField.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Classpath/ClasspathField.cpp?rev=73762&view=auto ============================================================================== --- vmkit/trunk/lib/JnJVM/Classpath/ClasspathField.cpp (original) +++ vmkit/trunk/lib/JnJVM/Classpath/ClasspathField.cpp (removed) @@ -1,883 +0,0 @@ -//===- ClasspathVMField.cpp - GNU classpath java/lang/reflect/Field -------===// -// -// JnJVM -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// - -#include "Classpath.h" -#include "ClasspathReflect.h" -#include "JavaClass.h" -#include "JavaThread.h" -#include "JavaTypes.h" -#include "JavaUpcalls.h" -#include "Jnjvm.h" - -using namespace jnjvm; - -extern "C" { - - -JNIEXPORT jint JNICALL Java_java_lang_reflect_Field_getModifiersInternal( -#ifdef NATIVE_JNI -JNIEnv *env, -#endif -JavaObjectField* Field) { - jint res = 0; - - BEGIN_NATIVE_EXCEPTION(0) - - JavaField* field = Field->getInternalField(); - res = field->access; - - END_NATIVE_EXCEPTION - - return res; -} - -JNIEXPORT jclass JNICALL Java_java_lang_reflect_Field_getType( -#ifdef NATIVE_JNI -JNIEnv *env, -#endif -JavaObjectField* Field) { - - jclass res = 0; - - BEGIN_NATIVE_EXCEPTION(0) - - Jnjvm* vm = JavaThread::get()->getJVM(); - UserClass* cl = Field->getClass(); - JavaField* field = Field->getInternalField(); - JnjvmClassLoader* loader = cl->classLoader; - UserCommonClass* fieldCl = field->getSignature()->assocClass(loader); - res = (jclass)fieldCl->getClassDelegatee(vm); - - END_NATIVE_EXCEPTION - - return res; -} - -JNIEXPORT jint JNICALL Java_java_lang_reflect_Field_getInt( -#ifdef NATIVE_JNI -JNIEnv *env, -#endif -JavaObjectField* Field, jobject obj) { - - jint res = 0; - - BEGIN_NATIVE_EXCEPTION(0) - - Jnjvm* vm = JavaThread::get()->getJVM(); - UserClass* cl = Field->getClass(); - JavaField* field = Field->getInternalField(); - const Typedef* type = field->getSignature(); - - void* Obj = (void*)obj; - - if (isStatic(field->access)) { - cl->initialiseClass(vm); - Obj = cl->getStaticInstance(); - } else { - verifyNull(Obj); - } - - if (type->isPrimitive()) { - const PrimitiveTypedef* prim = (PrimitiveTypedef*)type; - - if (prim->isInt()) - res = (sint32)field->getInt32Field(Obj); - else if (prim->isChar()) - res = (uint32)field->getInt16Field(Obj); - else if (prim->isByte()) - res = (sint32)field->getInt8Field(Obj); - else if (prim->isShort()) - res = (sint32)field->getInt16Field(Obj); - else - vm->illegalArgumentException("wrong type"); - } else { - vm->illegalArgumentException("wrong type"); - } - - END_NATIVE_EXCEPTION - - return res; - -} - -JNIEXPORT jlong JNICALL Java_java_lang_reflect_Field_getLong( -#ifdef NATIVE_JNI -JNIEnv *env, -#endif -JavaObjectField* Field, jobject obj) { - - jlong res = 0; - - BEGIN_NATIVE_EXCEPTION(0) - - Jnjvm* vm = JavaThread::get()->getJVM(); - UserClass* cl = Field->getClass(); - JavaField* field = Field->getInternalField(); - - void* Obj = (void*)obj; - - if (isStatic(field->access)) { - cl->initialiseClass(vm); - Obj = cl->getStaticInstance(); - } else { - verifyNull(Obj); - } - - const Typedef* type = field->getSignature(); - if (type->isPrimitive()) { - const PrimitiveTypedef* prim = (PrimitiveTypedef*)type; - - if (prim->isInt()) - res = (sint64)field->getInt32Field(Obj); - else if (prim->isChar()) - res = (uint64)field->getInt16Field(Obj); - else if (prim->isByte()) - res = (sint64)field->getInt8Field(Obj); - else if (prim->isShort()) - res = (sint64)field->getInt16Field(Obj); - else if (prim->isLong()) - res = (sint64)field->getLongField(Obj); - else - vm->illegalArgumentException("wrong type"); - } else { - vm->illegalArgumentException("wrong type"); - } - - END_NATIVE_EXCEPTION - - return res; -} - -JNIEXPORT jboolean JNICALL Java_java_lang_reflect_Field_getBoolean( -#ifdef NATIVE_JNI -JNIEnv *env, -#endif -JavaObjectField* Field, jobject obj) { - - jboolean res = 0; - - BEGIN_NATIVE_EXCEPTION(0) - - Jnjvm* vm = JavaThread::get()->getJVM(); - UserClass* cl = Field->getClass(); - JavaField* field = Field->getInternalField(); - - void* Obj = (void*)obj; - - if (isStatic(field->access)) { - cl->initialiseClass(vm); - Obj = cl->getStaticInstance(); - } else { - verifyNull(Obj); - } - - const Typedef* type = field->getSignature(); - if (type->isPrimitive()) { - const PrimitiveTypedef* prim = (PrimitiveTypedef*)type; - if (prim->isBool()) - res = (uint8)field->getInt8Field(Obj); - else - vm->illegalArgumentException("wrong type"); - } else { - vm->illegalArgumentException("wrong type"); - } - - END_NATIVE_EXCEPTION - - return res; - -} - -JNIEXPORT jfloat JNICALL Java_java_lang_reflect_Field_getFloat( -#ifdef NATIVE_JNI -JNIEnv *env, -#endif -JavaObjectField* Field, jobject obj) { - - jfloat res = 0; - - BEGIN_NATIVE_EXCEPTION(0) - - Jnjvm* vm = JavaThread::get()->getJVM(); - UserClass* cl = Field->getClass(); - JavaField* field = Field->getInternalField(); - - void* Obj = (void*)obj; - - if (isStatic(field->access)) { - cl->initialiseClass(vm); - Obj = cl->getStaticInstance(); - } else { - verifyNull(Obj); - } - - const Typedef* type = field->getSignature(); - if (type->isPrimitive()) { - const PrimitiveTypedef* prim = (PrimitiveTypedef*)type; - if (prim->isByte()) - res = (jfloat)field->getInt8Field(Obj); - else if (prim->isInt()) - res = (jfloat)field->getInt32Field(Obj); - else if (prim->isShort()) - res = (jfloat)field->getInt16Field(Obj); - else if (prim->isLong()) - res = (jfloat)field->getLongField(Obj); - else if (prim->isChar()) - // Cast to uint32 because char is unsigned. - res = (jfloat)(uint32)field->getInt16Field(Obj); - else if (prim->isFloat()) - res = (jfloat)field->getFloatField(Obj); - else - vm->illegalArgumentException("wrong type"); - } else { - vm->illegalArgumentException("wrong type"); - } - - END_NATIVE_EXCEPTION - - return res; -} - -JNIEXPORT jbyte JNICALL Java_java_lang_reflect_Field_getByte( -#ifdef NATIVE_JNI -JNIEnv *env, -#endif -JavaObjectField* Field, jobject obj) { - - jbyte res = 0; - - BEGIN_NATIVE_EXCEPTION(0) - - Jnjvm* vm = JavaThread::get()->getJVM(); - UserClass* cl = Field->getClass(); - JavaField* field = Field->getInternalField(); - - void* Obj = (void*)obj; - - if (isStatic(field->access)) { - cl->initialiseClass(vm); - Obj = cl->getStaticInstance(); - } else { - verifyNull(Obj); - } - - const Typedef* type = field->getSignature(); - if (type->isPrimitive()) { - const PrimitiveTypedef* prim = (PrimitiveTypedef*)type; - if (prim->isByte()) - res = (sint8)field->getInt8Field(Obj); - else - vm->illegalArgumentException("wrong type"); - } else { - vm->illegalArgumentException("wrong type"); - } - - END_NATIVE_EXCEPTION - - return res; -} - -JNIEXPORT jchar JNICALL Java_java_lang_reflect_Field_getChar( -#ifdef NATIVE_JNI -JNIEnv *env, -#endif -JavaObjectField* Field, jobject obj) { - - jchar res = 0; - - BEGIN_NATIVE_EXCEPTION(0) - - - Jnjvm* vm = JavaThread::get()->getJVM(); - UserClass* cl = Field->getClass(); - JavaField* field = Field->getInternalField(); - - void* Obj = (void*)obj; - - if (isStatic(field->access)) { - cl->initialiseClass(vm); - Obj = cl->getStaticInstance(); - } else { - verifyNull(Obj); - } - - const Typedef* type = field->getSignature(); - if (type->isPrimitive()) { - const PrimitiveTypedef* prim = (PrimitiveTypedef*)type; - if (prim->isChar()) - res = (uint16)field->getInt16Field(Obj); - else - vm->illegalArgumentException("wrong type"); - } else { - vm->illegalArgumentException("wrong type"); - } - - END_NATIVE_EXCEPTION - - return res; - -} - -JNIEXPORT jshort JNICALL Java_java_lang_reflect_Field_getShort( -#ifdef NATIVE_JNI -JNIEnv *env, -#endif -JavaObjectField* Field, jobject obj) { - - - jshort res = 0; - - BEGIN_NATIVE_EXCEPTION(0) - - Jnjvm* vm = JavaThread::get()->getJVM(); - UserClass* cl = Field->getClass(); - JavaField* field = Field->getInternalField(); - - void* Obj = (void*)obj; - - if (isStatic(field->access)) { - cl->initialiseClass(vm); - Obj = cl->getStaticInstance(); - } else { - verifyNull(Obj); - } - - const Typedef* type = field->getSignature(); - if (type->isPrimitive()) { - const PrimitiveTypedef* prim = (PrimitiveTypedef*)type; - if (prim->isShort()) - res = (sint16)field->getInt16Field(Obj); - else if (prim->isByte()) - res = (sint16)field->getInt8Field(Obj); - else - vm->illegalArgumentException("wrong type"); - } else { - vm->illegalArgumentException("wrong type"); - } - - END_NATIVE_EXCEPTION - - return res; -} - -JNIEXPORT jdouble JNICALL Java_java_lang_reflect_Field_getDouble( -#ifdef NATIVE_JNI -JNIEnv *env, -#endif -JavaObjectField* Field, jobject obj) { - - jdouble res = 0; - - BEGIN_NATIVE_EXCEPTION(0) - - Jnjvm* vm = JavaThread::get()->getJVM(); - UserClass* cl = Field->getClass(); - JavaField* field = Field->getInternalField(); - - void* Obj = (void*)obj; - - if (isStatic(field->access)) { - cl->initialiseClass(vm); - Obj = cl->getStaticInstance(); - } else { - verifyNull(Obj); - } - - const Typedef* type = field->getSignature(); - if (type->isPrimitive()) { - const PrimitiveTypedef* prim = (PrimitiveTypedef*)type; - if (prim->isByte()) - res = (jdouble)(sint64)field->getInt8Field(Obj); - else if (prim->isInt()) - res = (jdouble)(sint64)field->getInt32Field(Obj); - else if (prim->isShort()) - res = (jdouble)(sint64)field->getInt16Field(Obj); - else if (prim->isLong()) - res = (jdouble)(sint64)field->getLongField(Obj); - else if (prim->isChar()) - res = (jdouble)(uint64)field->getInt16Field(Obj); - else if (prim->isFloat()) - res = (jdouble)field->getFloatField(Obj); - else if (prim->isDouble()) - res = (jdouble)field->getDoubleField(Obj); - else - vm->illegalArgumentException("wrong type"); - } else { - vm->illegalArgumentException("wrong type"); - } - - END_NATIVE_EXCEPTION - - return res; -} - -JNIEXPORT jobject JNICALL Java_java_lang_reflect_Field_get( -#ifdef NATIVE_JNI -JNIEnv *env, -#endif -JavaObjectField* Field, jobject _obj) { - - - jobject result = 0; - - BEGIN_NATIVE_EXCEPTION(0) - - Jnjvm* vm = JavaThread::get()->getJVM(); - UserClass* cl = Field->getClass(); - JavaField* field = Field->getInternalField(); - - void* Obj = (void*)_obj; - - if (isStatic(field->access)) { - cl->initialiseClass(vm); - Obj = cl->getStaticInstance(); - } else { - verifyNull(Obj); - } - - JavaObject* res = 0; - const Typedef* type = field->getSignature(); - if (type->isPrimitive()) { - const PrimitiveTypedef* prim = (PrimitiveTypedef*)type; - if (prim->isBool()) { - uint8 val = field->getInt8Field(Obj); - res = vm->upcalls->boolClass->doNew(vm); - vm->upcalls->boolValue->setInt8Field(res, val); - } - else if (prim->isByte()) { - sint8 val = field->getInt8Field(Obj); - res = vm->upcalls->byteClass->doNew(vm); - vm->upcalls->byteValue->setInt8Field(res, val); - } - else if (prim->isChar()) { - uint16 val = field->getInt16Field(Obj); - res = vm->upcalls->charClass->doNew(vm); - vm->upcalls->charValue->setInt16Field(res, val); - } - else if (prim->isShort()) { - sint16 val = field->getInt16Field(Obj); - res = vm->upcalls->shortClass->doNew(vm); - vm->upcalls->shortValue->setInt16Field(res, val); - } - else if (prim->isInt()) { - sint32 val = field->getInt32Field(Obj); - res = vm->upcalls->intClass->doNew(vm); - vm->upcalls->intValue->setInt32Field(res, val); - } - else if (prim->isLong()) { - sint64 val = field->getLongField(Obj); - res = vm->upcalls->longClass->doNew(vm); - vm->upcalls->longValue->setLongField(res, val); - } - else if (prim->isFloat()) { - float val = field->getFloatField(Obj); - res = vm->upcalls->floatClass->doNew(vm); - vm->upcalls->floatValue->setFloatField(res, val); - } - else if (prim->isDouble()) { - double val = field->getDoubleField(Obj); - res = vm->upcalls->doubleClass->doNew(vm); - vm->upcalls->doubleValue->setDoubleField(res, val); - } - } else { - res = field->getObjectField(Obj); - } - - result = (jobject) res; - - END_NATIVE_EXCEPTION - - return (jobject)result; -} - -JNIEXPORT void JNICALL Java_java_lang_reflect_Field_set( -#ifdef NATIVE_JNI -JNIEnv *env, -#endif -JavaObjectField* Field, jobject obj, jobject val) { - - - Jnjvm* vm = JavaThread::get()->getJVM(); - UserClass* cl = Field->getClass(); - JavaField* field = Field->getInternalField(); - uintptr_t buf = (uintptr_t)alloca(sizeof(uint64)); - - // Do it after alloca - BEGIN_NATIVE_EXCEPTION(0) - - void* _buf = (void*)buf; - const Typedef* type = field->getSignature(); - ((JavaObject*)val)->decapsulePrimitive(vm, buf, type); - - - void* Obj = (void*)obj; - - if (isStatic(field->access)) { - cl->initialiseClass(vm); - Obj = cl->getStaticInstance(); - } else { - verifyNull(Obj); - } - - - if (type->isPrimitive()) { - const PrimitiveTypedef* prim = (PrimitiveTypedef*)type; - if (prim->isBool()) - field->setInt8Field(Obj, ((uint8*)_buf)[0]); - else if (prim->isByte()) - field->setInt8Field(Obj, ((sint8*)_buf)[0]); - else if (prim->isChar()) - field->setInt16Field(Obj, ((uint16*)_buf)[0]); - else if (prim->isShort()) - field->setInt16Field(Obj, ((sint16*)_buf)[0]); - else if (prim->isInt()) - field->setInt32Field(Obj, ((sint32*)_buf)[0]); - else if (prim->isLong()) - field->setLongField(Obj, ((sint64*)_buf)[0]); - else if (prim->isFloat()) - field->setFloatField(Obj, ((float*)_buf)[0]); - else if (prim->isDouble()) - field->setDoubleField(Obj, ((double*)_buf)[0]); - } else { - field->setObjectField(Obj, ((JavaObject**)_buf)[0]); - } - - END_NATIVE_EXCEPTION -} - -JNIEXPORT void JNICALL Java_java_lang_reflect_Field_setBoolean( -#ifdef NATIVE_JNI -JNIEnv *env, -#endif -JavaObjectField* Field, jobject obj, jboolean val) { - - BEGIN_NATIVE_EXCEPTION(0) - - Jnjvm* vm = JavaThread::get()->getJVM(); - UserClass* cl = Field->getClass(); - JavaField* field = Field->getInternalField(); - - void* Obj = (void*)obj; - - if (isStatic(field->access)) { - cl->initialiseClass(vm); - Obj = cl->getStaticInstance(); - } else { - verifyNull(Obj); - } - - const Typedef* type = field->getSignature(); - if (type->isPrimitive()) { - const PrimitiveTypedef* prim = (PrimitiveTypedef*)type; - if (prim->isBool()) - field->setInt8Field(Obj, (uint8)val); - else - vm->illegalArgumentException("wrong type"); - } else { - vm->illegalArgumentException("wrong type"); - } - - END_NATIVE_EXCEPTION - -} - -JNIEXPORT void JNICALL Java_java_lang_reflect_Field_setByte( -#ifdef NATIVE_JNI -JNIEnv *env, -#endif -JavaObjectField* Field, jobject obj, jbyte val) { - - BEGIN_NATIVE_EXCEPTION(0) - - Jnjvm* vm = JavaThread::get()->getJVM(); - UserClass* cl = Field->getClass(); - JavaField* field = Field->getInternalField(); - - void* Obj = (void*)obj; - - if (isStatic(field->access)) { - cl->initialiseClass(vm); - Obj = cl->getStaticInstance(); - } else { - verifyNull(Obj); - } - - const Typedef* type = field->getSignature(); - if (type->isPrimitive()) { - const PrimitiveTypedef* prim = (PrimitiveTypedef*)type; - if (prim->isByte()) - field->setInt8Field(Obj, (sint8)val); - else if (prim->isShort()) - field->setInt16Field(Obj, (sint16)val); - else if (prim->isInt()) - field->setInt32Field(Obj, (sint32)val); - else if (prim->isLong()) - field->setLongField(Obj, (sint64)val); - else if (prim->isFloat()) - field->setFloatField(Obj, (float)val); - else if (prim->isDouble()) - field->setDoubleField(Obj, (double)val); - else - vm->illegalArgumentException("wrong type"); - } else { - vm->illegalArgumentException("wrong type"); - } - - END_NATIVE_EXCEPTION -} - -JNIEXPORT void JNICALL Java_java_lang_reflect_Field_setChar( -#ifdef NATIVE_JNI -JNIEnv *env, -#endif -JavaObjectField* Field, jobject obj, jchar val) { - - BEGIN_NATIVE_EXCEPTION(0) - - Jnjvm* vm = JavaThread::get()->getJVM(); - UserClass* cl = Field->getClass(); - JavaField* field = Field->getInternalField(); - - void* Obj = (void*)obj; - - if (isStatic(field->access)) { - cl->initialiseClass(vm); - Obj = cl->getStaticInstance(); - } else { - verifyNull(Obj); - } - const Typedef* type = field->getSignature(); - if (type->isPrimitive()) { - const PrimitiveTypedef* prim = (PrimitiveTypedef*)type; - if (prim->isChar()) - field->setInt16Field(Obj, (uint16)val); - else if (prim->isInt()) - field->setInt32Field(Obj, (uint32)val); - else if (prim->isLong()) - field->setLongField(Obj, (uint64)val); - else if (prim->isFloat()) - field->setFloatField(Obj, (float)(uint32)val); - else if (prim->isDouble()) - field->setDoubleField(Obj, (double)(uint64)val); - else - vm->illegalArgumentException("wrong type"); - } else { - vm->illegalArgumentException("wrong type"); - } - - END_NATIVE_EXCEPTION -} - -JNIEXPORT void JNICALL Java_java_lang_reflect_Field_setShort( -#ifdef NATIVE_JNI -JNIEnv *env, -#endif -JavaObjectField* Field, jobject obj, jshort val) { - - BEGIN_NATIVE_EXCEPTION(0) - - Jnjvm* vm = JavaThread::get()->getJVM(); - UserClass* cl = Field->getClass(); - JavaField* field = Field->getInternalField(); - - void* Obj = (void*)obj; - - if (isStatic(field->access)) { - cl->initialiseClass(vm); - Obj = cl->getStaticInstance(); - } else { - verifyNull(Obj); - } - - const Typedef* type = field->getSignature(); - if (type->isPrimitive()) { - const PrimitiveTypedef* prim = (PrimitiveTypedef*)type; - if (prim->isShort()) - field->setInt16Field(Obj, (sint16)val); - else if (prim->isInt()) - field->setInt32Field(Obj, (sint32)val); - else if (prim->isLong()) - field->setLongField(Obj, (sint64)val); - else if (prim->isFloat()) - field->setFloatField(Obj, (float)val); - else if (prim->isDouble()) - field->setDoubleField(Obj, (double)val); - else - vm->illegalArgumentException("wrong type"); - } else { - vm->illegalArgumentException("wrong type"); - } - - END_NATIVE_EXCEPTION -} - -JNIEXPORT void JNICALL Java_java_lang_reflect_Field_setInt( -#ifdef NATIVE_JNI -JNIEnv *env, -#endif -JavaObjectField* Field, jobject obj, jint val) { - - BEGIN_NATIVE_EXCEPTION(0) - - Jnjvm* vm = JavaThread::get()->getJVM(); - UserClass* cl = Field->getClass(); - JavaField* field = Field->getInternalField(); - - void* Obj = (void*)obj; - - if (isStatic(field->access)) { - cl->initialiseClass(vm); - Obj = cl->getStaticInstance(); - } else { - verifyNull(Obj); - } - - const Typedef* type = field->getSignature(); - if (type->isPrimitive()) { - const PrimitiveTypedef* prim = (PrimitiveTypedef*)type; - if (prim->isInt()) - field->setInt32Field(Obj, (sint32)val); - else if (prim->isLong()) - field->setLongField(Obj, (sint64)val); - else if (prim->isFloat()) - field->setFloatField(Obj, (float)val); - else if (prim->isDouble()) - field->setDoubleField(Obj, (double)val); - else - vm->illegalArgumentException("wrong type"); - } else { - vm->illegalArgumentException("wrong type"); - } - - END_NATIVE_EXCEPTION -} - -JNIEXPORT void JNICALL Java_java_lang_reflect_Field_setLong( -#ifdef NATIVE_JNI -JNIEnv *env, -#endif -JavaObjectField* Field, jobject obj, jlong val) { - - BEGIN_NATIVE_EXCEPTION(0) - - Jnjvm* vm = JavaThread::get()->getJVM(); - UserClass* cl = Field->getClass(); - JavaField* field = Field->getInternalField(); - - void* Obj = (void*)obj; - - if (isStatic(field->access)) { - cl->initialiseClass(vm); - Obj = cl->getStaticInstance(); - } else { - verifyNull(Obj); - } - - const Typedef* type = field->getSignature(); - if (type->isPrimitive()) { - const PrimitiveTypedef* prim = (PrimitiveTypedef*)type; - if (prim->isLong()) - field->setLongField(Obj, (sint64)val); - else if (prim->isFloat()) - field->setFloatField(Obj, (float)val); - else if (prim->isDouble()) - field->setDoubleField(Obj, (double)val); - else - vm->illegalArgumentException("wrong type"); - } else { - vm->illegalArgumentException("wrong type"); - } - - END_NATIVE_EXCEPTION -} - -JNIEXPORT void JNICALL Java_java_lang_reflect_Field_setFloat( -#ifdef NATIVE_JNI -JNIEnv *env, -#endif -JavaObjectField* Field, jobject obj, jfloat val) { - - - BEGIN_NATIVE_EXCEPTION(0) - - Jnjvm* vm = JavaThread::get()->getJVM(); - UserClass* cl = Field->getClass(); - JavaField* field = Field->getInternalField(); - - void* Obj = (void*)obj; - - if (isStatic(field->access)) { - cl->initialiseClass(vm); - Obj = cl->getStaticInstance(); - } else { - verifyNull(Obj); - } - - const Typedef* type = field->getSignature(); - if (type->isPrimitive()) { - const PrimitiveTypedef* prim = (PrimitiveTypedef*)type; - if (prim->isFloat()) - field->setFloatField(Obj, (float)val); - else if (prim->isDouble()) - field->setDoubleField(Obj, (double)val); - else - vm->illegalArgumentException("wrong type"); - } else { - vm->illegalArgumentException("wrong type"); - } - - END_NATIVE_EXCEPTION -} - -JNIEXPORT void JNICALL Java_java_lang_reflect_Field_setDouble( -#ifdef NATIVE_JNI -JNIEnv *env, -#endif -JavaObjectField* Field, JavaObject* obj, jdouble val) { - - BEGIN_NATIVE_EXCEPTION(0) - - Jnjvm* vm = JavaThread::get()->getJVM(); - UserClass* cl = Field->getClass(); - JavaField* field = Field->getInternalField(); - - void* Obj = (void*)obj; - - if (isStatic(field->access)) { - cl->initialiseClass(vm); - Obj = cl->getStaticInstance(); - } else { - verifyNull(Obj); - } - - const Typedef* type = field->getSignature(); - if (type->isPrimitive()) { - const PrimitiveTypedef* prim = (PrimitiveTypedef*)type; - if (prim->isDouble()) - field->setDoubleField(Obj, (double)val); - else - vm->illegalArgumentException("wrong type"); - } else { - vm->illegalArgumentException("wrong type"); - } - - END_NATIVE_EXCEPTION -} - -// Never throws. -JNIEXPORT jlong JNICALL Java_sun_misc_Unsafe_objectFieldOffset( -#ifdef NATIVE_JNI -JNIEnv *env, -#endif -JavaObject* Unsafe, JavaObjectField* Field) { - JavaField* field = Field->getInternalField(); - return (jlong)field->ptrOffset; -} - -} Removed: vmkit/trunk/lib/JnJVM/Classpath/ClasspathMethod.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Classpath/ClasspathMethod.cpp?rev=73762&view=auto ============================================================================== --- vmkit/trunk/lib/JnJVM/Classpath/ClasspathMethod.cpp (original) +++ vmkit/trunk/lib/JnJVM/Classpath/ClasspathMethod.cpp (removed) @@ -1,284 +0,0 @@ -//===- ClasspathMethod.cpp ------------------------------------------------===// -//===------------- GNU classpath java/lang/reflect/Method -----------------===// -// -// JnJVM -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// - -#include "types.h" - -#include "Classpath.h" -#include "ClasspathReflect.h" -#include "JavaArray.h" -#include "JavaClass.h" -#include "JavaObject.h" -#include "JavaTypes.h" -#include "JavaThread.h" -#include "JavaUpcalls.h" -#include "Jnjvm.h" -#include "JnjvmClassLoader.h" - -using namespace jnjvm; - -extern "C" { - -JNIEXPORT jint JNICALL Java_java_lang_reflect_Method_getModifiersInternal( -#ifdef NATIVE_JNI -JNIEnv *env, -#endif -JavaObjectMethod* Meth) { - - jint res = 0; - - BEGIN_NATIVE_EXCEPTION(0) - - JavaMethod* meth = Meth->getInternalMethod(); - res = meth->access; - - END_NATIVE_EXCEPTION - - return res; -} - -JNIEXPORT jclass JNICALL Java_java_lang_reflect_Method_getReturnType( -#ifdef NATIVE_JNI -JNIEnv *env, -#endif -JavaObjectMethod* Meth) { - - jclass res = 0; - - BEGIN_NATIVE_EXCEPTION(0) - - UserClass* cl = Meth->getClass(); - JavaMethod* meth = Meth->getInternalMethod(); - JnjvmClassLoader* loader = cl->classLoader; - res = (jclass)meth->getReturnType(loader); - - END_NATIVE_EXCEPTION - - return res; -} - - -JNIEXPORT jobject JNICALL Java_java_lang_reflect_Method_getParameterTypes( -#ifdef NATIVE_JNI -JNIEnv *env, -#endif -JavaObjectMethod* Meth) { - - jobject res = 0; - - BEGIN_NATIVE_EXCEPTION(0) - - UserClass* cl = Meth->getClass(); - JavaMethod* meth = Meth->getInternalMethod(); - JnjvmClassLoader* loader = cl->classLoader; - - res = (jobject)(meth->getParameterTypes(loader)); - - END_NATIVE_EXCEPTION - - return res; -} - -static jobject proceed(JavaObjectMethod* Meth, jobject _obj, jobject _args, - jclass Cl, jint index) __attribute__((noinline)); - -static jobject proceed(JavaObjectMethod* Meth, jobject _obj, jobject _args, - jclass Cl, jint index) { - - JavaObject* res = 0; - Jnjvm* vm = JavaThread::get()->getJVM(); - - JavaMethod* meth = Meth->getInternalMethod(); - - JavaArray* args = (JavaArray*)_args; - sint32 nbArgs = args ? args->size : 0; - Signdef* sign = meth->getSignature(); - sint32 size = sign->nbArguments; - JavaObject* obj = (JavaObject*)_obj; - - uintptr_t buf = size ? (uintptr_t)alloca(size * sizeof(uint64)) : 0; - - - void* _buf = (void*)buf; - if (nbArgs == size) { - UserCommonClass* _cl = - UserCommonClass::resolvedImplClass(vm, (JavaObject*)Cl, false); - UserClass* cl = (UserClass*)_cl; - - if (isVirtual(meth->access)) { - verifyNull(obj); - UserCommonClass* objCl = obj->getClass(); - if (!(objCl->isAssignableFrom(cl))) { - vm->illegalArgumentException(" is not a valid type"); - } - - if (isInterface(cl->access)) { - cl->initialiseClass(vm); - UserClass* methodCl = 0; - UserClass* lookup = objCl->isArray() ? objCl->super : objCl->asClass(); - meth = lookup->lookupMethod(meth->name, meth->type, false, true, - &methodCl); - } - } else { - cl->initialiseClass(vm); - } - - JavaObject** ptr = (JavaObject**)(void*)(args->elements); - Typedef* const* arguments = sign->getArgumentsType(); - for (sint32 i = 0; i < size; ++i) { - ptr[i]->decapsulePrimitive(vm, buf, arguments[i]); - } - - JavaObject* exc = 0; - JavaThread* th = JavaThread::get(); - -#define RUN_METH(TYPE) \ - try{ \ - if (isVirtual(meth->access)) { \ - if (isPublic(meth->access) && !isFinal(meth->access) && \ - !isFinal(meth->classDef->access)) { \ - val = meth->invoke##TYPE##VirtualBuf(vm, cl, obj, _buf); \ - } else { \ - val = meth->invoke##TYPE##SpecialBuf(vm, cl, obj, _buf); \ - } \ - } else { \ - val = meth->invoke##TYPE##StaticBuf(vm, cl, _buf); \ - } \ - } catch(...) { \ - exc = th->getJavaException(); \ - if (exc->getClass()->isAssignableFrom(vm->upcalls->newException)) { \ - th->clearException(); \ - th->getJVM()->invocationTargetException(exc); \ - } else { \ - th->throwPendingException(); \ - } \ - } \ - - Typedef* retType = sign->getReturnType(); - if (retType->isPrimitive()) { - PrimitiveTypedef* prim = (PrimitiveTypedef*)retType; - if (prim->isVoid()) { - res = 0; - uint32 val = 0; - RUN_METH(Int); - } else if (prim->isBool()) { - uint32 val = 0; - RUN_METH(Int); - res = vm->upcalls->boolClass->doNew(vm); - vm->upcalls->boolValue->setInt8Field(res, val); - } else if (prim->isByte()) { - uint32 val = 0; - RUN_METH(Int); - res = vm->upcalls->byteClass->doNew(vm); - vm->upcalls->byteValue->setInt8Field(res, val); - } else if (prim->isChar()) { - uint32 val = 0; - RUN_METH(Int); - res = vm->upcalls->charClass->doNew(vm); - vm->upcalls->charValue->setInt16Field(res, val); - } else if (prim->isShort()) { - uint32 val = 0; - RUN_METH(Int); - res = vm->upcalls->shortClass->doNew(vm); - vm->upcalls->shortValue->setInt16Field(res, val); - } else if (prim->isInt()) { - uint32 val = 0; - RUN_METH(Int); - res = vm->upcalls->intClass->doNew(vm); - vm->upcalls->intValue->setInt32Field(res, val); - } else if (prim->isLong()) { - sint64 val = 0; - RUN_METH(Long); - res = vm->upcalls->longClass->doNew(vm); - vm->upcalls->longValue->setLongField(res, val); - } else if (prim->isFloat()) { - float val = 0; - RUN_METH(Float); - res = vm->upcalls->floatClass->doNew(vm); - vm->upcalls->floatValue->setFloatField(res, val); - } else if (prim->isDouble()) { - double val = 0; - RUN_METH(Double); - res = vm->upcalls->doubleClass->doNew(vm); - vm->upcalls->doubleValue->setDoubleField(res, val); - } - } else { - JavaObject* val = 0; - RUN_METH(JavaObject); - res = val; - } - } else { - vm->illegalArgumentException("wrong number of arguments"); - } - - return (jobject)res; -} - -#undef RUN_METH - -JNIEXPORT jobject JNICALL Java_java_lang_reflect_Method_invokeNative( -#ifdef NATIVE_JNI -JNIEnv *env, -#endif -JavaObjectMethod* Meth, jobject _obj, jobject _args, jclass Cl, jint index) { - - jobject res = 0; - - BEGIN_NATIVE_EXCEPTION(0) - - // Create a new function because we use alloca. - res = proceed(Meth, _obj, _args, Cl, index); - - END_NATIVE_EXCEPTION - - return (jobject) res; -} - -JNIEXPORT jobjectArray JNICALL Java_java_lang_reflect_Method_getExceptionTypes( -#ifdef NATIVE_JNI -JNIEnv *env, -#endif -JavaObjectMethod* Meth) { - - jobjectArray res = 0; - - BEGIN_NATIVE_EXCEPTION(0) - - verifyNull(Meth); - UserClass* cl = Meth->getClass(); - JavaMethod* meth = Meth->getInternalMethod(); - JnjvmClassLoader* loader = cl->classLoader; - res = (jobjectArray)meth->getExceptionTypes(loader); - - END_NATIVE_EXCEPTION - - return res; -} - -JNIEXPORT jobject JNICALL Java_java_lang_reflect_Method_getSignature( -#ifdef NATIVE_JNI -JNIEnv *env, -#endif -JavaObjectMethod* Meth) { - - jobject result = 0; - - BEGIN_NATIVE_EXCEPTION(0) - - verifyNull(Meth); - JavaMethod* meth = Meth->getInternalMethod(); - Jnjvm* vm = JavaThread::get()->getJVM(); - result = (jobject)(vm->internalUTF8ToStr(meth->type)); - - END_NATIVE_EXCEPTION - - return result; -} - -} Copied: vmkit/trunk/lib/JnJVM/Classpath/ClasspathMethod.inc (from r73608, vmkit/trunk/lib/JnJVM/Classpath/ClasspathMethod.cpp) URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Classpath/ClasspathMethod.inc?p2=vmkit/trunk/lib/JnJVM/Classpath/ClasspathMethod.inc&p1=vmkit/trunk/lib/JnJVM/Classpath/ClasspathMethod.cpp&r1=73608&r2=73763&rev=73763&view=diff ============================================================================== --- vmkit/trunk/lib/JnJVM/Classpath/ClasspathMethod.cpp (original) +++ vmkit/trunk/lib/JnJVM/Classpath/ClasspathMethod.inc Fri Jun 19 03:26:36 2009 @@ -85,11 +85,12 @@ return res; } -static jobject proceed(JavaObjectMethod* Meth, jobject _obj, jobject _args, - jclass Cl, jint index) __attribute__((noinline)); +static jobject proceedMethod(JavaObjectMethod* Meth, jobject _obj, + jobject _args, jclass Cl, jint index) + __attribute__((noinline)); -static jobject proceed(JavaObjectMethod* Meth, jobject _obj, jobject _args, - jclass Cl, jint index) { +static jobject proceedMethod(JavaObjectMethod* Meth, jobject _obj, + jobject _args, jclass Cl, jint index) { JavaObject* res = 0; Jnjvm* vm = JavaThread::get()->getJVM(); @@ -233,7 +234,7 @@ BEGIN_NATIVE_EXCEPTION(0) // Create a new function because we use alloca. - res = proceed(Meth, _obj, _args, Cl, index); + res = proceedMethod(Meth, _obj, _args, Cl, index); END_NATIVE_EXCEPTION Removed: vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMClass.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMClass.cpp?rev=73762&view=auto ============================================================================== --- vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMClass.cpp (original) +++ vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMClass.cpp (removed) @@ -1,593 +0,0 @@ -//===---- ClasspathVMClass.cpp - GNU classpath java/lang/VMClass ----------===// -// -// JnJVM -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// - -#include "types.h" - -#include "Classpath.h" -#include "ClasspathReflect.h" -#include "JavaAccess.h" -#include "JavaArray.h" -#include "JavaClass.h" -#include "JavaObject.h" -#include "JavaString.h" -#include "JavaTypes.h" -#include "JavaThread.h" -#include "JavaUpcalls.h" -#include "Jnjvm.h" - -using namespace jnjvm; - -extern "C" { - -// Never throws -JNIEXPORT jboolean JNICALL Java_java_lang_VMClass_isArray( -#ifdef NATIVE_JNI -JNIEnv *env, -jclass clazz, -#endif -jobject klass) { - - UserCommonClass* cl = ((JavaObjectClass*)klass)->getClass(); - - return cl->isArray(); - -} - -JNIEXPORT jclass JNICALL Java_java_lang_VMClass_forName( -#ifdef NATIVE_JNI -JNIEnv *env, -jclass clazz, -#endif -JavaString* str, -jboolean clinit, -JavaObject* loader) { - - jclass res = 0; - - BEGIN_NATIVE_EXCEPTION(0) - - Jnjvm* vm = JavaThread::get()->getJVM(); - JnjvmClassLoader* JCL = - JnjvmClassLoader::getJnjvmLoaderFromJavaObject(loader, vm); - UserCommonClass* cl = JCL->loadClassFromJavaString(str, true, false); - - if (cl != 0) { - if (clinit && cl->asClass()) { - cl->asClass()->initialiseClass(vm); - } - res =(jclass)(cl->getClassDelegatee(vm)); - } else { - vm->classNotFoundException(str); - } - - END_NATIVE_EXCEPTION - - return res; -} - -JNIEXPORT jobject JNICALL Java_java_lang_VMClass_getDeclaredConstructors( -#ifdef NATIVE_JNI -JNIEnv *env, -jclass clazz, -#endif -jclass Cl, -jboolean publicOnly) { - - jobject result = 0; - - BEGIN_NATIVE_EXCEPTION(0) - - Jnjvm* vm = JavaThread::get()->getJVM(); - UserCommonClass* cl = - UserCommonClass::resolvedImplClass(vm, (JavaObject*)Cl, false); - - if (cl->isArray() || cl->isInterface() || cl->isPrimitive()) { - result = (jobject)vm->upcalls->constructorArrayClass->doNew(0, vm); - } else { - UserClass* realCl = (Class*)cl; - JnjvmClassLoader* classLoader = cl->classLoader; - uint32 size = 0; - - for (uint32 i = 0; i < realCl->nbVirtualMethods; ++i) { - JavaMethod* meth = &realCl->virtualMethods[i]; - bool pub = isPublic(meth->access); - if (meth->name->equals(classLoader->bootstrapLoader->initName) && - (!publicOnly || pub)) { - ++size; - } - } - - - ArrayObject* ret = - (ArrayObject*)vm->upcalls->constructorArrayClass->doNew(size, vm); - sint32 index = 0; - for (uint32 i = 0; i < realCl->nbVirtualMethods; ++i) { - JavaMethod* meth = &realCl->virtualMethods[i]; - bool pub = isPublic(meth->access); - if (meth->name->equals(classLoader->bootstrapLoader->initName) && - (!publicOnly || pub)) { - UserClass* Cons = vm->upcalls->newConstructor; - JavaObject* tmp = Cons->doNew(vm); - vm->upcalls->initConstructor->invokeIntSpecial(vm, Cons, tmp, Cl, i); - ret->elements[index++] = tmp; - } - } - result = (jobject)ret; - } - - END_NATIVE_EXCEPTION - - return result; -} - -JNIEXPORT jobject JNICALL Java_java_lang_VMClass_getDeclaredMethods( -#ifdef NATIVE_JNI -JNIEnv *env, -jclass clazz, -#endif -jclass Cl, -jboolean publicOnly) { - - jobject result = 0; - - BEGIN_NATIVE_EXCEPTION(0) - - Jnjvm* vm = JavaThread::get()->getJVM(); - UserCommonClass* cl = - UserCommonClass::resolvedImplClass(vm, (JavaObject*)Cl, false); - Classpath* upcalls = vm->upcalls; - - if (cl->isArray() || cl->isPrimitive()) { - result = (jobject)upcalls->methodArrayClass->doNew(0, vm); - } else { - UserClass* realCl = (Class*)cl; - JnjvmClassLoader* classLoader = cl->classLoader; - uint32 size = 0; - - for (uint32 i = 0; i < realCl->nbVirtualMethods + realCl->nbStaticMethods; - ++i) { - JavaMethod* meth = &realCl->virtualMethods[i]; - bool pub = isPublic(meth->access); - if (!(meth->name->equals(classLoader->bootstrapLoader->initName)) && - (!publicOnly || pub)) { - ++size; - } - } - - - ArrayObject* ret = (ArrayObject*)upcalls->methodArrayClass->doNew(size, vm); - - sint32 index = 0; - for (uint32 i = 0; i < realCl->nbVirtualMethods + realCl->nbStaticMethods; - ++i) { - JavaMethod* meth = &realCl->virtualMethods[i]; - bool pub = isPublic(meth->access); - if (!(meth->name->equals(classLoader->bootstrapLoader->initName)) && - (!publicOnly || pub)) { - // TODO: check parameter types - UserClass* Meth = vm->upcalls->newMethod; - JavaObject* tmp = Meth->doNew(vm); - JavaString* str = vm->internalUTF8ToStr(meth->name); - upcalls->initMethod->invokeIntSpecial(vm, Meth, tmp, Cl, str, i); - ret->elements[index++] = tmp; - } - } - result = (jobject)ret; - } - - END_NATIVE_EXCEPTION - - return result; -} - -JNIEXPORT jint JNICALL Java_java_lang_VMClass_getModifiers( -#ifdef NATIVE_JNI -JNIEnv *env, -jclass clazz, -#endif -jclass Cl, -jboolean ignore) { - - jint res = 0; - - BEGIN_NATIVE_EXCEPTION(0) - - Jnjvm* vm = JavaThread::get()->getJVM(); - UserCommonClass* cl = - UserCommonClass::resolvedImplClass(vm, (JavaObject*)Cl, false); - res = cl->getAccess(); - - END_NATIVE_EXCEPTION - return res; -} - -JNIEXPORT jobject JNICALL Java_java_lang_VMClass_getName( -#ifdef NATIVE_JNI -JNIEnv *env, -jclass clazz, -#endif -jobject Cl) { - - jobject result = 0; - - BEGIN_NATIVE_EXCEPTION(0) - - Jnjvm* vm = JavaThread::get()->getJVM(); - UserCommonClass* cl = ((JavaObjectClass*)Cl)->getClass(); - - const UTF8* iname = cl->getName(); - result = (jobject)JavaString::internalToJava(iname, vm); - - END_NATIVE_EXCEPTION - - return result; -} - -JNIEXPORT jboolean JNICALL Java_java_lang_VMClass_isPrimitive( -#ifdef NATIVE_JNI -JNIEnv *env, -jclass clazz, -#endif -jclass Cl) { - - jboolean res = 0; - BEGIN_NATIVE_EXCEPTION(0) - - UserCommonClass* cl = ((JavaObjectClass*)Cl)->getClass(); - - res = cl->isPrimitive(); - - END_NATIVE_EXCEPTION - - return res; -} - -JNIEXPORT jboolean JNICALL Java_java_lang_VMClass_isInterface( -#ifdef NATIVE_JNI -JNIEnv *env, -jclass clazz, -#endif -jclass Cl) { - - jboolean res = 0; - - BEGIN_NATIVE_EXCEPTION(0) - - Jnjvm* vm = JavaThread::get()->getJVM(); - UserCommonClass* cl = - UserCommonClass::resolvedImplClass(vm, (JavaObject*)Cl, false); - - res = cl->isInterface(); - - END_NATIVE_EXCEPTION - - return res; -} - -JNIEXPORT jclass JNICALL Java_java_lang_VMClass_getComponentType( -#ifdef NATIVE_JNI -JNIEnv *env, -jclass clazz, -#endif -jclass Cl) { - - jclass res = 0; - - BEGIN_NATIVE_EXCEPTION(0) - - Jnjvm* vm = JavaThread::get()->getJVM(); - UserCommonClass* cl = ((JavaObjectClass*)Cl)->getClass(); - - if (cl->isArray()) { - UserCommonClass* bc = ((UserClassArray*)cl)->baseClass(); - res = (jclass)(bc->getClassDelegatee(vm)); - } else { - res = 0; - } - - END_NATIVE_EXCEPTION - return res; -} - -JNIEXPORT jobject JNICALL Java_java_lang_VMClass_getClassLoader( -#ifdef NATIVE_JNI -JNIEnv *env, -jclass clazz, -#endif -jclass Cl) { - - jobject res = 0; - - BEGIN_NATIVE_EXCEPTION(0) - - UserCommonClass* cl = ((JavaObjectClass*)Cl)->getClass(); - res = (jobject)cl->classLoader->getJavaClassLoader(); - - END_NATIVE_EXCEPTION - - return res; -} - -JNIEXPORT jboolean JNICALL Java_java_lang_VMClass_isAssignableFrom( -#ifdef NATIVE_JNI -JNIEnv *env, -jclass clazz, -#endif -jclass Cl1, jclass Cl2) { - - jboolean res = 0; - - BEGIN_NATIVE_EXCEPTION(0) - - if (!Cl2) JavaThread::get()->getJVM()->nullPointerException(); - - UserCommonClass* cl1 = ((JavaObjectClass*)Cl1)->getClass(); - UserCommonClass* cl2 = ((JavaObjectClass*)Cl2)->getClass(); - - if (cl1->isClass()) cl1->asClass()->resolveClass(); - if (cl2->asClass()) cl2->asClass()->resolveClass(); - res = cl2->isAssignableFrom(cl1); - - END_NATIVE_EXCEPTION - - return res; - -} - -JNIEXPORT jobject JNICALL Java_java_lang_VMClass_getSuperclass( -#ifdef NATIVE_JNI -JNIEnv *env, -jclass clazz, -#endif -jclass Cl) { - - jobject res = 0; - - BEGIN_NATIVE_EXCEPTION(0) - - Jnjvm* vm = JavaThread::get()->getJVM(); - UserCommonClass* cl = ((JavaObjectClass*)Cl)->getClass(); - if (cl->isInterface()) res = 0; - else { - if (cl->asClass()) cl->asClass()->resolveClass(); - if (cl->getSuper()) res = (jobject)cl->getSuper()->getClassDelegatee(vm); - else res = 0; - } - - END_NATIVE_EXCEPTION - - return res; -} - -JNIEXPORT bool JNICALL Java_java_lang_VMClass_isInstance( -#ifdef NATIVE_JNI -JNIEnv *env, -jclass clazz, -#endif -jclass Cl, jobject obj) { - - bool res = false; - - BEGIN_NATIVE_EXCEPTION(0) - - UserCommonClass* cl = ((JavaObjectClass*)Cl)->getClass(); - res = ((JavaObject*)obj)->instanceOf(cl); - - END_NATIVE_EXCEPTION - - return res; -} - -JNIEXPORT jobject JNICALL Java_java_lang_VMClass_getDeclaredFields( -#ifdef NATIVE_JNI -JNIEnv *env, -jclass clazz, -#endif -jclass Cl, jboolean publicOnly) { - - jobject result = 0; - - BEGIN_NATIVE_EXCEPTION(0) - - Jnjvm* vm = JavaThread::get()->getJVM(); - UserClass* cl = - UserCommonClass::resolvedImplClass(vm, (JavaObject*)Cl, false)->asClass(); - - if (!cl) { - result = (jobject)vm->upcalls->fieldArrayClass->doNew(0, vm); - } else { - - uint32 size = 0; - for (uint32 i = 0; i < cl->nbVirtualFields + cl->nbStaticFields; ++i) { - JavaField* field = &cl->virtualFields[i]; - if (!publicOnly || isPublic(field->access)) { - ++size; - } - } - - - ArrayObject* ret = - (ArrayObject*)vm->upcalls->fieldArrayClass->doNew(size, vm); - sint32 index = 0; - for (uint32 i = 0; i < cl->nbVirtualFields + cl->nbStaticFields; ++i) { - JavaField* field = &cl->virtualFields[i]; - if (!publicOnly || isPublic(field->access)) { - // TODO: check parameter types - UserClass* Field = vm->upcalls->newField; - JavaObject* tmp = Field->doNew(vm); - JavaString* name = vm->internalUTF8ToStr(field->name); - vm->upcalls->initField->invokeIntSpecial(vm, Field, tmp, Cl, name, i); - ret->elements[index++] = tmp; - } - } - result = (jobject)ret; - } - - END_NATIVE_EXCEPTION - - return result; -} - -JNIEXPORT jobject JNICALL Java_java_lang_VMClass_getInterfaces( -#ifdef NATIVE_JNI -JNIEnv *env, -jclass clazz, -#endif -jclass Cl) { - - jobject res = 0; - - BEGIN_NATIVE_EXCEPTION(0) - - Jnjvm* vm = JavaThread::get()->getJVM(); - UserCommonClass* cl = - UserCommonClass::resolvedImplClass(vm, (JavaObject*)Cl, false); - ArrayObject* ret = - (ArrayObject*)vm->upcalls->classArrayClass->doNew(cl->nbInterfaces, vm); - for (uint16 i = 0; i < cl->nbInterfaces; ++i) { - UserClass* klass = cl->interfaces[i]; - ret->elements[i] = klass->getClassDelegatee(vm); - } - res = (jobject)ret; - - END_NATIVE_EXCEPTION - - return res; -} - - -JNIEXPORT jclass JNICALL Java_java_lang_VMClass_getDeclaringClass( -#ifdef NATIVE_JNI -JNIEnv *env, -jclass clazz, -#endif -jclass Cl) { - jclass res = 0; - - BEGIN_NATIVE_EXCEPTION(0) - - Jnjvm* vm = JavaThread::get()->getJVM(); - UserClass* cl = - UserCommonClass::resolvedImplClass(vm, (JavaObject*)Cl, false)->asClass(); - if (cl) { - cl->resolveInnerOuterClasses(); - UserClass* outer = cl->getOuterClass(); - if (outer) { - res = (jclass)outer->getClassDelegatee(vm); - } - } - - END_NATIVE_EXCEPTION - - return res; - -} - -JNIEXPORT jobject JNICALL Java_java_lang_VMClass_getDeclaredClasses( -#ifdef NATIVE_JNI -JNIEnv *env, -jclass clazz, -#endif -jclass Cl, bool publicOnly) { - - - jobject result = 0; - - BEGIN_NATIVE_EXCEPTION(0) - - Jnjvm* vm = JavaThread::get()->getJVM(); - UserClass* cl = - UserCommonClass::resolvedImplClass(vm, (JavaObject*)Cl, false)->asClass(); - if (cl) { - cl->resolveInnerOuterClasses(); - UserClassArray* array = vm->upcalls->constructorArrayClass; - - uint16 sizeArray = 0; - - if (publicOnly) { - for (uint16 i = 0; i < cl->nbInnerClasses; ++i) { - UserClass* klass = cl->innerClasses[i]; - if (isPublic(klass->innerAccess)) ++sizeArray; - } - } else { - sizeArray = cl->nbInnerClasses; - } - - ArrayObject* res = (ArrayObject*)array->doNew(sizeArray, vm); - for (uint16 i = 0; i < cl->nbInnerClasses; ++i) { - UserClass* klass = cl->innerClasses[i]; - if (!publicOnly || isPublic(klass->innerAccess)) - res->elements[i] = klass->getClassDelegatee(vm); - } - result = (jobject)res; - } - - - END_NATIVE_EXCEPTION - - return result; - -} - -// Only throws. -JNIEXPORT void JNICALL Java_java_lang_VMClass_throwException( -#ifdef NATIVE_JNI -JNIEnv *env, -jclass clazz, -#endif -jobject throwable) { - assert(throwable && "Using internal VM throw exception without exception"); - JavaThread::get()->pendingException = (JavaObject*)throwable; -} - -JNIEXPORT jobjectArray Java_java_lang_VMClass_getDeclaredAnnotations( -#ifdef NATIVE_JNI -JNIEnv *env, -jclass clazz, -#endif -jclass Cl) { - // TODO implement me - - jobjectArray res = 0; - - BEGIN_NATIVE_EXCEPTION(0) - - Jnjvm* vm = JavaThread::get()->getJVM(); - UserClassArray* array = vm->upcalls->constructorArrayAnnotation; - res = (jobjectArray) array->doNew(0, vm); - - END_NATIVE_EXCEPTION - - return res; -} - -JNIEXPORT jboolean Java_java_lang_VMClass_isAnonymousClass( -#ifdef NATIVE_JNI -JNIEnv *env, -jclass clazz, -#endif -jclass Cl) { - - jboolean res = false; - - BEGIN_NATIVE_EXCEPTION(0) - - Jnjvm* vm = JavaThread::get()->getJVM(); - UserClass* cl = - UserCommonClass::resolvedImplClass(vm, (JavaObject*)Cl, false)->asClass(); - - if (cl) res = cl->isAnonymous; - - END_NATIVE_EXCEPTION - - return res; -} - - -} Removed: vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMClassLoader.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMClassLoader.cpp?rev=73762&view=auto ============================================================================== --- vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMClassLoader.cpp (original) +++ vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMClassLoader.cpp (removed) @@ -1,353 +0,0 @@ -//===- ClasspathVMClassLoader.cpp - GNU classpath java/lang/VMClassLoader -===// -// -// JnJVM -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// - -#include "types.h" - -#include "Classpath.h" -#include "JavaArray.h" -#include "JavaClass.h" -#include "JavaObject.h" -#include "JavaString.h" -#include "JavaThread.h" -#include "JavaUpcalls.h" -#include "Jnjvm.h" -#include "Reader.h" - -using namespace jnjvm; - -extern "C" { - -JNIEXPORT jobject JNICALL Java_java_lang_VMClassLoader_getPrimitiveClass( -#ifdef NATIVE_JNI -JNIEnv *env, -jclass clazz, -#endif -jchar byteId) { - - jobject res = 0; - - BEGIN_NATIVE_EXCEPTION(0) - - Jnjvm* vm = JavaThread::get()->getJVM(); - UserClassPrimitive* prim = - UserClassPrimitive::byteIdToPrimitive(byteId, vm->upcalls); - if (!prim) { - fprintf(stderr, "unknown byte primitive %c", byteId); - abort(); - } - - res = (jobject)prim->getClassDelegatee(vm); - - END_NATIVE_EXCEPTION - - return res; - -} - -JNIEXPORT jclass JNICALL Java_java_lang_VMClassLoader_findLoadedClass( -#ifdef NATIVE_JNI -JNIEnv *env, -jclass clazz, -#endif -jobject loader, -jobject _name) { - - jclass res = 0; - - BEGIN_NATIVE_EXCEPTION(0) - - Jnjvm* vm = JavaThread::get()->getJVM(); - JavaString* name = (JavaString*)_name; - JnjvmClassLoader* JCL = - JnjvmClassLoader::getJnjvmLoaderFromJavaObject((JavaObject*)loader, vm); - UserCommonClass* cl = JCL->lookupClassFromJavaString(name); - - if (cl) res = (jclass)(cl->getClassDelegatee(vm)); - - END_NATIVE_EXCEPTION - - return res; - - return 0; -} - -JNIEXPORT jclass JNICALL Java_java_lang_VMClassLoader_loadClass( -#ifdef NATIVE_JNI -JNIEnv *env, -jclass clazz, -#endif -jobject _str, -jboolean doResolve) { - - jclass res = 0; - - BEGIN_NATIVE_EXCEPTION(0) - - Jnjvm* vm = JavaThread::get()->getJVM(); - JavaString* str = (JavaString*)_str; - - JnjvmClassLoader* JCL = vm->bootstrapLoader; - UserCommonClass* cl = JCL->loadClassFromJavaString(str, doResolve, false); - - if (cl != 0) - res = (jclass)cl->getClassDelegatee(vm); - - END_NATIVE_EXCEPTION - - return res; -} - -JNIEXPORT jclass JNICALL Java_java_lang_VMClassLoader_defineClass( -#ifdef NATIVE_JNI -JNIEnv *env, -jclass clazz, -#endif -jobject loader, -jobject _str, -jobject bytes, -jint off, -jint len, -jobject pd) { - - jclass res = 0; - - BEGIN_NATIVE_EXCEPTION(0) - - Jnjvm* vm = JavaThread::get()->getJVM(); - - // Before creating a class, do a check on the bytes. - Reader reader((ArrayUInt8*)bytes); - uint32 magic = reader.readU4(); - if (magic != Jnjvm::Magic) { - JavaThread::get()->getJVM()->classFormatError("bad magic number"); - } - - JnjvmClassLoader* JCL = - JnjvmClassLoader::getJnjvmLoaderFromJavaObject((JavaObject*)loader, vm); - - JavaString* str = (JavaString*)_str; - const UTF8* name = str->javaToInternal(JCL->hashUTF8); - UserCommonClass* cl = JCL->lookupClass(name); - - if (!cl) { - UserClass* cl = JCL->constructClass(name, (ArrayUInt8*)bytes); - cl->resolveClass(); - - res = (jclass)(cl->getClassDelegatee(vm, (JavaObject*)pd)); - } else { - JavaObject* obj = vm->CreateLinkageError("duplicate class definition"); - JavaThread::get()->throwException(obj); - } - - END_NATIVE_EXCEPTION - - return res; -} - -JNIEXPORT void JNICALL Java_java_lang_VMClassLoader_resolveClass( -#ifdef NATIVE_JNI -JNIEnv *env, -jclass clazz, -#endif -jclass Cl) { - - BEGIN_NATIVE_EXCEPTION(0) - - verifyNull(Cl); - Jnjvm* vm = JavaThread::get()->getJVM(); - UserCommonClass::resolvedImplClass(vm, (JavaObject*)Cl, false); - - END_NATIVE_EXCEPTION -} - -#define NUM_BOOT_PACKAGES 168 - -static const char* bootPackages[NUM_BOOT_PACKAGES] = { - "java.applet", - "java.awt", - "java.awt.color", - "java.awt.datatransfer", - "java.awt.dnd", - "java.awt.dnd.peer", - "java.awt.event", - "java.awt.font", - "java.awt.geom", - "java.awt.im", - "java.awt.im.spi", - "java.awt.image", - "java.awt.image.renderable", - "java.awt.peer", - "java.awt.print", - "java.beans", - "java.beans.beancontext", - "java.io", - "java.lang", - "java.lang.annotation", - "java.lang.instrument", - "java.lang.management", - "java.lang.ref", - "java.lang.reflect", - "java.math", - "java.net", - "java.nio", - "java.nio.channels", - "java.nio.channels.spi", - "java.nio.charset", - "java.nio.charset.spi", - "java.rmi", - "java.rmi.activation", - "java.rmi.dgc", - "java.rmi.registry", - "java.rmi.server", - "java.security", - "java.security.acl", - "java.security.cert", - "java.security.interfaces", - "java.security.spec", - "java.sql", - "java.text", - "java.util", - "java.util.concurrent", - "java.util.concurrent.atomic", - "java.util.concurrent.locks", - "java.util.jar", - "java.util.logging", - "java.util.prefs", - "java.util.regex", - "java.util.zip", - "javax.accessibility", - "javax.activity", - "javax.crypto", - "javax.crypto.interfaces", - "javax.crypto.spec", - "javax.imageio", - "javax.imageio.event", - "javax.imageio.metadata", - "javax.imageio.plugins.bmp", - "javax.imageio.plugins.jpeg", - "javax.imageio.spi", - "javax.imageio.stream", - "javax.management", - "javax.management.loading", - "javax.management.modelmbean", - "javax.management.monitor", - "javax.management.openmbean", - "javax.management.relation", - "javax.management.remote", - "javax.management.remote.rmi", - "javax.management.timer", - "javax.naming", - "javax.naming.directory", - "javax.naming.event", - "javax.naming.ldap", - "javax.naming.spi", - "javax.net", - "javax.net.ssl", - "javax.print", - "javax.print.attribute", - "javax.print.attribute.standard", - "javax.print.event", - "javax.rmi", - "javax.rmi.CORBA", - "javax.rmi.ssl", - "javax.security.auth", - "javax.security.auth.callback", - "javax.security.auth.kerberos", - "javax.security.auth.login", - "javax.security.auth.spi", - "javax.security.auth.x500", - "javax.security.cert", - "javax.security.sasl", - "javax.sound.midi", - "javax.sound.midi.spi", - "javax.sound.sampled", - "javax.sound.sampled.spi", - "javax.sql", - "javax.sql.rowset", - "javax.sql.rowset.serial", - "javax.sql.rowset.spi", - "javax.swing", - "javax.swing.border", - "javax.swing.colorchooser", - "javax.swing.event", - "javax.swing.filechooser", - "javax.swing.plaf", - "javax.swing.plaf.basic", - "javax.swing.plaf.metal", - "javax.swing.plaf.multi", - "javax.swing.plaf.synth", - "javax.swing.table", - "javax.swing.text", - "javax.swing.text.html", - "javax.swing.text.html.parser", - "javax.swing.text.rtf", - "javax.swing.tree", - "javax.swing.undo", - "javax.transaction", - "javax.transaction.xa", - "javax.xml", - "javax.xml.datatype", - "javax.xml.namespace", - "javax.xml.parsers", - "javax.xml.transform", - "javax.xml.transform.dom", - "javax.xml.transform.sax", - "javax.xml.transform.stream", - "javax.xml.validation", - "javax.xml.xpath", - "org.ietf.jgss", - "org.omg.CORBA", - "org.omg.CORBA_2_3", - "org.omg.CORBA_2_3.portable", - "org.omg.CORBA.DynAnyPackage", - "org.omg.CORBA.ORBPackage", - "org.omg.CORBA.portable", - "org.omg.CORBA.TypeCodePackage", - "org.omg.CosNaming", - "org.omg.CosNaming.NamingContextExtPackage", - "org.omg.CosNaming.NamingContextPackage", - "org.omg.Dynamic", - "org.omg.DynamicAny", - "org.omg.DynamicAny.DynAnyFactoryPackage", - "org.omg.DynamicAny.DynAnyPackage", - "org.omg.IOP", - "org.omg.IOP.CodecFactoryPackage", - "org.omg.IOP.CodecPackage", - "org.omg.Messaging", - "org.omg.PortableInterceptor", - "org.omg.PortableInterceptor.ORBInitInfoPackage", - "org.omg.PortableServer", - "org.omg.PortableServer.CurrentPackage", - "org.omg.PortableServer.POAManagerPackage", - "org.omg.PortableServer.POAPackage", - "org.omg.PortableServer.portable", - "org.omg.PortableServer.ServantLocatorPackage", - "org.omg.SendingContext", - "org.omg.stub.java.rmi", - "org.w3c.dom", - "org.w3c.dom.bootstrap", - "org.w3c.dom.events", - "org.w3c.dom.ls", - "org.xml.sax", - "org.xml.sax.ext", - "org.xml.sax.helpers" -}; - -extern "C" ArrayObject* nativeGetBootPackages() { - Jnjvm* vm = JavaThread::get()->getJVM(); - ArrayObject* 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]); - } - return obj; -} - - -} Removed: vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMObject.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMObject.cpp?rev=73762&view=auto ============================================================================== --- vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMObject.cpp (original) +++ vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMObject.cpp (removed) @@ -1,135 +0,0 @@ -//===------ ClasspathVMObject.cpp - GNU classpath java/lang/VMObject ------===// -// -// JnJVM -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// - -#include "types.h" - -#include "Classpath.h" -#include "JavaArray.h" -#include "JavaClass.h" -#include "JavaObject.h" -#include "JavaThread.h" -#include "Jnjvm.h" - -using namespace jnjvm; - -extern "C" { - -JNIEXPORT jobject JNICALL Java_java_lang_VMObject_clone( -#ifdef NATIVE_JNI -JNIEnv *env, -jclass clazz, -#endif -jobject _src) { - - JavaObject* res = 0; - - BEGIN_NATIVE_EXCEPTION(0) - - JavaObject* src = (JavaObject*)_src; - UserCommonClass* cl = src->getClass(); - Jnjvm* vm = JavaThread::get()->getJVM(); - uint64 size = 0; - if (cl->isArray()) { - UserClassArray* array = cl->asArrayClass(); - UserCommonClass* base = array->baseClass(); - uint32 logSize = base->isPrimitive() ? - base->asPrimitiveClass()->logSize : (sizeof(JavaObject*) == 8 ? 3 : 2); - - size = sizeof(JavaObject) + sizeof(ssize_t) + - (((JavaArray*)src)->size << logSize); - } else { - assert(cl->isClass() && "Not a class!"); - size = cl->asClass()->getVirtualSize(); - } - res = (JavaObject*) - vm->gcAllocator.allocateManagedObject(size, src->getVirtualTable()); - memcpy(res, src, size); - res->lock.initialise(); - - END_NATIVE_EXCEPTION - - return (jobject)res; -} - -JNIEXPORT jobject JNICALL Java_java_lang_VMObject_getClass( -#ifdef NATIVE_JNI -JNIEnv *env, -jclass clazz, -#endif -jobject _obj) { - - jobject res = 0; - - BEGIN_NATIVE_EXCEPTION(0) - - JavaObject* obj = (JavaObject*)_obj; - Jnjvm* vm = JavaThread::get()->getJVM(); - res = (jobject)(obj->getClass()->getClassDelegatee(vm)); - - END_NATIVE_EXCEPTION - - return res; -} - -JNIEXPORT void JNICALL Java_java_lang_VMObject_notifyAll( -#ifdef NATIVE_JNI -JNIEnv *env, -jclass clazz, -#endif -jobject _obj) { - - BEGIN_NATIVE_EXCEPTION(0) - - JavaObject* obj = (JavaObject*)_obj; - obj->notifyAll(); - - END_NATIVE_EXCEPTION -} - - -JNIEXPORT void JNICALL Java_java_lang_VMObject_wait( -#ifdef NATIVE_JNI -JNIEnv *env, -jclass clazz, -#endif -jobject _object, jlong ms, jint ns) { - - BEGIN_NATIVE_EXCEPTION(0) - - uint32 sec = (uint32) (ms / 1000); - uint32 usec = (ns / 1000) + 1000 * (ms % 1000); - if (ns && !usec) usec = 1; - JavaObject* obj = (JavaObject*)_object; - if (sec || usec) { - struct timeval t; - t.tv_sec = sec; - t.tv_usec = usec; - obj->timedWait(t); - } else { - obj->wait(); - } - - END_NATIVE_EXCEPTION -} - -JNIEXPORT void JNICALL Java_java_lang_VMObject_notify( -#ifdef NATIVE_JNI -JNIEnv *env, -jclass clazz, -#endif -jobject obj) { - - BEGIN_NATIVE_EXCEPTION(0) - - ((JavaObject*)obj)->notify(); - - END_NATIVE_EXCEPTION -} - -} Removed: vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMRuntime.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMRuntime.cpp?rev=73762&view=auto ============================================================================== --- vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMRuntime.cpp (original) +++ vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMRuntime.cpp (removed) @@ -1,221 +0,0 @@ -//===------ ClasspathVMRuntime.cpp - GNU classpath java/lang/VMRuntime ----===// -// -// JnJVM -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// - - -#include "MvmGC.h" - -#include "types.h" - -#include "Classpath.h" -#include "JavaArray.h" -#include "JavaClass.h" -#include "JavaObject.h" -#include "JavaString.h" -#include "JavaThread.h" -#include "JavaUpcalls.h" -#include "Jnjvm.h" - -#include -#include - -using namespace jnjvm; - -extern "C" { - - -JNIEXPORT jobject JNICALL Java_java_lang_VMRuntime_mapLibraryName( -#ifdef NATIVE_JNI -JNIEnv *env, -jclass clazz, -#endif -jobject _strLib) { - - jobject res = 0; - - BEGIN_NATIVE_EXCEPTION(0) - - JavaString* strLib = (JavaString*)_strLib; - Jnjvm* vm = JavaThread::get()->getJVM(); - - const ArrayUInt16* utf8Lib = strLib->value; - uint32 stLib = strLib->offset; - sint32 lgLib = strLib->count; - sint32 lgPre = vm->bootstrapLoader->prelib->size; - sint32 lgPost = vm->bootstrapLoader->postlib->size; - - uint32 size = (uint32)(lgPre + lgLib + lgPost); - ArrayUInt16* array = (ArrayUInt16*)vm->upcalls->ArrayOfChar->doNew(size, vm); - uint16* elements = array->elements; - - memmove(elements, vm->bootstrapLoader->prelib->elements, - lgPre * sizeof(uint16)); - memmove(&(elements[lgPre]), &(utf8Lib->elements[stLib]), - lgLib * sizeof(uint16)); - memmove(&(elements[lgPre + lgLib]), vm->bootstrapLoader->postlib->elements, - lgPost * sizeof(uint16)); - - res = (jobject)(vm->constructString(array)); - - END_NATIVE_EXCEPTION - - return res; - -} - -#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 jnjvmJNIProceedPendingException(); - -// Calls the JNI_OnLoad function of a dynamic library. -void callOnLoad(void* res, JnjvmClassLoader* loader, Jnjvm* vm) { - - onLoad_t onLoad = (onLoad_t)loader->loadInLib("JNI_OnLoad", res); - - if (onLoad) { - JavaThread* th = JavaThread::get(); - mvm::Allocator& allocator = th->getJVM()->gcAllocator; - void** buf = (void**)allocator.allocateTemporaryMemory(sizeof(jmp_buf)); - th->sjlj_buffers.push_back((jmp_buf*)buf); - - th->startNative(1); - if (setjmp((jumpbuf_t)buf) == 0) { - onLoad(&vm->javavmEnv, res); - } - jnjvmJNIProceedPendingException(); - } -} - -// Never throws. -JNIEXPORT jint JNICALL Java_java_lang_VMRuntime_nativeLoad( -#ifdef NATIVE_JNI -JNIEnv *env, -jclass clazz, -#endif -jobject _str, -jobject _loader) { - - void* res = 0; - - JavaString* str = (JavaString*)_str; - Jnjvm* vm = JavaThread::get()->getJVM(); - JnjvmClassLoader* loader = - JnjvmClassLoader::getJnjvmLoaderFromJavaObject((JavaObject*)_loader, vm); - - char* buf = str->strToAsciiz(); - - res = loader->loadLib(buf); - - if (res) callOnLoad(res, loader, vm); - - delete[] buf; - - return res != 0; -} - - -JNIEXPORT void JNICALL Java_java_lang_VMRuntime_gc( -#ifdef NATIVE_JNI -JNIEnv *env, -jclass clazz, -#endif -) { - BEGIN_NATIVE_EXCEPTION(0) - - mvm::Collector::collect(); - - END_NATIVE_EXCEPTION -} - -JNIEXPORT void JNICALL Java_java_lang_VMRuntime_runFinalization( -#ifdef NATIVE_JNI -JNIEnv *env, -jclass clazz, -#endif -) { - Jnjvm* vm = JavaThread::get()->getJVM(); - vm->wakeUpFinalizers(); - // Sleep a bit. - sleep(1); - return; -} - -JNIEXPORT void JNICALL Java_java_lang_VMRuntime_runFinalizationForExit( -#ifdef NATIVE_JNI -JNIEnv *env, -jclass clazz, -#endif -) { - return; -} - -JNIEXPORT void JNICALL Java_java_lang_VMRuntime_runFinalizersOnExit( -#ifdef NATIVE_JNI -JNIEnv *env, -jclass clazz, -#endif -uint8 value -) { - return; -} - -JNIEXPORT void JNICALL Java_java_lang_VMRuntime_exit( -#ifdef NATIVE_JNI -JNIEnv *env, -jclass clazz, -#endif -jint par1) { -#if defined(ISOLATE) || defined(ISOLATE_SHARING) - // TODO: do a longjmp - exit(par1); -#else - exit(par1); -#endif -} - -JNIEXPORT jlong Java_java_lang_VMRuntime_freeMemory( -#ifdef NATIVE_JNI -JNIEnv *env, -jclass clazz, -#endif -) { - return (jlong)mvm::Collector::getFreeMemory(); -} - -JNIEXPORT jlong Java_java_lang_VMRuntime_totalMemory( -#ifdef NATIVE_JNI -JNIEnv *env, -jclass clazz, -#endif -) { - return (jlong)mvm::Collector::getTotalMemory(); -} - -JNIEXPORT jlong Java_java_lang_VMRuntime_maxMemory( -#ifdef NATIVE_JNI -JNIEnv *env, -jclass clazz, -#endif -) { - return (jlong)mvm::Collector::getMaxMemory(); -} - -JNIEXPORT jint Java_java_lang_VMRuntime_availableProcessors(){ -#ifdef NATIVE_JNI -JNIEnv *env, -jclass clazz, -#endif - return 1; -} -} - Removed: vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMStackWalker.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMStackWalker.cpp?rev=73762&view=auto ============================================================================== --- vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMStackWalker.cpp (original) +++ vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMStackWalker.cpp (removed) @@ -1,82 +0,0 @@ -//===- ClasspathVMStackWalker.cpp -----------------------------------------===// -//===------------ GNU classpath gnu/classpath/VMStackWalker ---------------===// -// -// JnJVM -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// - -#include "types.h" - -#include "Classpath.h" -#include "ClasspathReflect.h" -#include "JavaArray.h" -#include "JavaClass.h" -#include "JavaObject.h" -#include "JavaThread.h" -#include "JavaUpcalls.h" -#include "Jnjvm.h" - -using namespace jnjvm; - -extern "C" { - -JNIEXPORT jobject JNICALL Java_gnu_classpath_VMStackWalker_getClassContext( -#ifdef NATIVE_JNI -JNIEnv *env, -jclass clazz, -#endif -) { - - jobject result = 0; - - BEGIN_NATIVE_EXCEPTION(0) - - JavaThread* th = JavaThread::get(); - Jnjvm* vm = th->getJVM(); - std::vector stack; - - th->getJavaFrameContext(stack); - - ArrayObject* res = (ArrayObject*) - vm->upcalls->stackTraceArray->doNew(stack.size(), vm); - - std::vector::iterator i = stack.begin(), e = stack.end(); - uint32 index = 0; - - for (; i != e; ++i) { - JavaMethod* meth = vm->IPToMethod(*i); - assert(meth && "Wrong stack trace"); - res->elements[index++] = meth->classDef->getClassDelegatee(vm); - } - - result = (jobject)res; - - END_NATIVE_EXCEPTION - - return result; -} - -JNIEXPORT jobject JNICALL Java_gnu_classpath_VMStackWalker_getClassLoader( -#ifdef NATIVE_JNI -JNIEnv *env, -jclass clazz, -#endif -jclass _Cl) { - - jobject res = 0; - - BEGIN_NATIVE_EXCEPTION(0) - - JavaObject* Cl = (JavaObject*)_Cl; - UserCommonClass* cl = ((JavaObjectClass*)Cl)->getClass(); - res = (jobject)cl->classLoader->getJavaClassLoader(); - - END_NATIVE_EXCEPTION - - return res; -} - -} Removed: vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMSystem.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMSystem.cpp?rev=73762&view=auto ============================================================================== --- vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMSystem.cpp (original) +++ vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMSystem.cpp (removed) @@ -1,110 +0,0 @@ -//===-- ClasspathVMSystem.cpp - GNU classpath java/lang/VMSystem ----------===// -// -// JnJVM -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// - -#include "types.h" - -#include "Classpath.h" -#include "JavaArray.h" -#include "JavaClass.h" -#include "JavaObject.h" -#include "JavaThread.h" -#include "Jnjvm.h" - -using namespace jnjvm; - -extern "C" { - -JNIEXPORT void JNICALL Java_java_lang_VMSystem_arraycopy( -#ifdef NATIVE_JNI -JNIEnv *env, -jclass _cl, -#endif -jobject _src, -jint sstart, -jobject _dst, -jint dstart, -jint len) { - - BEGIN_NATIVE_EXCEPTION(0) - - jnjvm::Jnjvm *vm = JavaThread::get()->getJVM(); - JavaArray* src = (JavaArray*)_src; - JavaArray* dst = (JavaArray*)_dst; - - verifyNull(src); - verifyNull(dst); - - if (!(src->getClass()->isArray() && dst->getClass()->isArray())) { - vm->arrayStoreException(); - } - - UserClassArray* ts = (UserClassArray*)src->getClass(); - UserClassArray* td = (UserClassArray*)dst->getClass(); - UserCommonClass* dstType = td->baseClass(); - UserCommonClass* srcType = ts->baseClass(); - - if (len > src->size) { - vm->indexOutOfBounds(src, len); - } else if (len > dst->size) { - vm->indexOutOfBounds(dst, len); - } else if (len + sstart > src->size) { - vm->indexOutOfBounds(src, len + sstart); - } else if (len + dstart > dst->size) { - vm->indexOutOfBounds(dst, len + dstart); - } else if (dstart < 0) { - vm->indexOutOfBounds(dst, dstart); - } else if (sstart < 0) { - vm->indexOutOfBounds(src, sstart); - } else if (len < 0) { - vm->indexOutOfBounds(src, len); - } else if ((dstType->isPrimitive() || srcType->isPrimitive()) && - srcType != dstType) { - vm->arrayStoreException(); - } - - jint i = sstart; - bool doThrow = false; - if (!(dstType->isPrimitive())) { - while (i < sstart + len && !doThrow) { - JavaObject* cur = ((ArrayObject*)src)->elements[i]; - if (cur) { - if (!(cur->getClass()->isAssignableFrom(dstType))) { - doThrow = true; - len = i; - } - } - ++i; - } - } - - 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)); - memmove(ptrDst, ptrSrc, len << logSize); - - if (doThrow) - vm->arrayStoreException(); - - - END_NATIVE_EXCEPTION - -} - -JNIEXPORT jint JNICALL Java_java_lang_VMSystem_identityHashCode( -#ifdef NATIVE_JNI -JNIEnv *env, -jclass clazz, -#endif -jobject obj) { - return (jint)(intptr_t)obj; -} - -} Removed: vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMSystemProperties.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMSystemProperties.cpp?rev=73762&view=auto ============================================================================== --- vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMSystemProperties.cpp (original) +++ vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMSystemProperties.cpp (removed) @@ -1,140 +0,0 @@ -//===- ClasspathVMSystem/Properties.cpp -----------------------------------===// -//===--------------------- GNU classpath gnu/classpath/VMSystemProperties -===// -// -// JnJVM -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// - -#include - -#include "types.h" - -#include "Classpath.h" -#include "JavaArray.h" -#include "JavaClass.h" -#include "JavaObject.h" -#include "JavaThread.h" -#include "JavaUpcalls.h" -#include "Jnjvm.h" - -using namespace jnjvm; - -extern "C" { - -static void setProperty(Jnjvm* vm, JavaObject* prop, const char* key, - const char* val) { - vm->upcalls->setProperty->invokeIntSpecial(vm, (UserClass*)prop->getClass(), - prop, - vm->asciizToStr(key), - vm->asciizToStr(val)); -} - -static void setUnameProp(Jnjvm* vm, JavaObject* prop) { - struct utsname infos; - uname(&infos); - setProperty(vm, prop, "os.name", infos.sysname); - setProperty(vm, prop, "os.arch", infos.machine); - setProperty(vm, prop, "os.version", infos.release); - if (!strcmp(infos.machine, "ppc")) { - setProperty(vm, prop, "gnu.cpu.endian","big"); - } else { - setProperty(vm, prop, "gnu.cpu.endian","little"); - } -} - -JNIEXPORT void JNICALL Java_gnu_classpath_VMSystemProperties_preInit( -#ifdef NATIVE_JNI -JNIEnv *env, -jclass clazz, -#endif -jobject _prop) { - - BEGIN_NATIVE_EXCEPTION(0) - - JavaObject* prop = (JavaObject*)_prop; - Jnjvm* vm = JavaThread::get()->getJVM(); - const char* tmp; - setProperty(vm, prop, "java.vm.specification.version", "1.0"); - setProperty(vm, prop, "java.vm.specification.vendor", - "Sun Microsystems, Inc"); - setProperty(vm, prop, "java.vm.specification.name", - "Java Virtual Machine Specification"); - setProperty(vm, prop, "java.specification.version", "1.5"); - setProperty(vm, prop, "java.specification.vendor", "Sun Microsystems, Inc"); - setProperty(vm, prop, "java.specification.name", - "Java Platform API Specification"); - setProperty(vm, prop, "java.version", "1.5"); - setProperty(vm, prop, "java.runtime.version", "1.5"); - setProperty(vm, prop, "java.vendor", "The VMKit Project"); - setProperty(vm, prop, "java.vendor.url", "http://vmkit.llvm.org"); - - tmp = getenv("JAVA_HOME"); - if (!tmp) tmp = ""; - setProperty(vm, prop, "java.home", tmp); - - JnjvmBootstrapLoader* JCL = vm->bootstrapLoader; - setProperty(vm, prop, "java.class.version", "49.0"); - setProperty(vm, prop, "java.class.path", vm->classpath); - setProperty(vm, prop, "java.boot.class.path", JCL->bootClasspathEnv); - setProperty(vm, prop, "sun.boot.class.path", JCL->bootClasspathEnv); - setProperty(vm, prop, "java.vm.version", "2.0"); - setProperty(vm, prop, "java.vm.vendor", "VVM Project"); - setProperty(vm, prop, "java.vm.name", "JnJVM"); - setProperty(vm, prop, "java.specification.version", "1.5"); - setProperty(vm, prop, "java.io.tmpdir", "/tmp"); - - tmp = getenv("JAVA_COMPILER"); - if (!tmp) tmp = "gcj"; - setProperty(vm, prop, "java.compiler", tmp); - - setProperty(vm, prop, "build.compiler", "gcj"); - setProperty(vm, prop, "gcj.class.path", JCL->bootClasspathEnv); - setProperty(vm, prop, "gnu.classpath.boot.library.path", - JCL->libClasspathEnv); - - setUnameProp(vm, prop); - - setProperty(vm, prop, "file.separator", vm->dirSeparator); - setProperty(vm, prop, "path.separator", vm->envSeparator); - setProperty(vm, prop, "line.separator", "\n"); - - tmp = getenv("USERNAME"); - if (!tmp) tmp = getenv("LOGNAME"); - else if (!tmp) tmp = getenv("NAME"); - else if (!tmp) tmp = ""; - setProperty(vm, prop, "user.name", tmp); - - tmp = getenv("HOME"); - if (!tmp) tmp = ""; - setProperty(vm, prop, "user.home", tmp); - - tmp = getenv("PWD"); - if (!tmp) tmp = ""; - setProperty(vm, prop, "user.dir", tmp); - - // Disable this property. The Classpath iconv implementation is really - // not optimized (it over-abuses JNI calls). - //setProperty(vm, prop, "gnu.classpath.nio.charset.provider.iconv", "true"); - setProperty(vm, prop, "file.encoding", "ISO8859_1"); - setProperty(vm, prop, "gnu.java.util.zoneinfo.dir", "/usr/share/zoneinfo"); - - END_NATIVE_EXCEPTION -} - -extern "C" void nativePropertiesPostInit(JavaObject* prop) { - - BEGIN_NATIVE_EXCEPTION(0) - - Jnjvm* vm = JavaThread::get()->getJVM(); - for (std::vector >::iterator i = - vm->postProperties.begin(), e = vm->postProperties.end(); i!= e; i++) { - setProperty(vm, prop, i->first, i->second); - } - - END_NATIVE_EXCEPTION -} - -} Removed: vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMThread.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMThread.cpp?rev=73762&view=auto ============================================================================== --- vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMThread.cpp (original) +++ vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMThread.cpp (removed) @@ -1,203 +0,0 @@ -//===- ClasspathVMThread.cpp - GNU classpath java/lang/VMThread -----------===// -// -// JnJVM -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// - -#include "types.h" - -#include "Classpath.h" -#include "JavaArray.h" -#include "JavaClass.h" -#include "JavaObject.h" -#include "JavaThread.h" -#include "JavaUpcalls.h" -#include "Jnjvm.h" - -using namespace jnjvm; - -extern "C" { - -// Never throws. -// Never calls Java code. -JNIEXPORT jobject JNICALL Java_java_lang_VMThread_currentThread( -#ifdef NATIVE_JNI -JNIEnv *env, -jclass clazz -#endif -) { - return (jobject)(JavaThread::get()->currentThread()); -} - -static void start(JavaThread* thread) { - - 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; - JavaObject* vmThread = thread->vmThread; - assert(vmThread && "Didn't fix the vmThread of a jnjvm thread"); - JavaObject* javaThread = thread->javaThread; - assert(javaThread && "Didn't fix the javaThread of a jnjvm thread"); - field->setObjectField(vmThread, (JavaObject*)(void*)thread); - - UserClass* vmthClass = (UserClass*)vmThread->getClass(); - ThreadSystem& ts = vm->threadSystem; - - - // 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); - - if (!isDaemon) { - ts.nonDaemonLock.lock(); - ts.nonDaemonThreads++; - ts.nonDaemonLock.unlock(); - } - - // Run the VMThread::run function - vm->upcalls->runVMThread->invokeIntSpecial(vm, vmthClass, vmThread); - - // Remove the thread from the list. - if (!isDaemon) { - ts.nonDaemonLock.lock(); - ts.nonDaemonThreads--; - if (ts.nonDaemonThreads == 0) - ts.nonDaemonVar.signal(); - ts.nonDaemonLock.unlock(); - } -} - -JNIEXPORT void JNICALL Java_java_lang_VMThread_start( -#ifdef NATIVE_JNI -JNIEnv *env, -#endif -jobject _vmThread, sint64 stackSize) { - - BEGIN_NATIVE_EXCEPTION(0) - - Jnjvm* vm = JavaThread::get()->getJVM(); - JavaObject* vmThread = (JavaObject*)_vmThread; - - // Classpath has set this field. - JavaObject* javaThread = vm->upcalls->assocThread->getObjectField(vmThread); - assert(javaThread && "VMThread with no Java equivalent"); - - JavaThread* th = new JavaThread(javaThread, vmThread, vm); - if (!th) vm->outOfMemoryError(); - th->start((void (*)(mvm::Thread*))start); - - END_NATIVE_EXCEPTION -} - -JNIEXPORT void JNICALL Java_java_lang_VMThread_interrupt( -#ifdef NATIVE_JNI -JNIEnv *env, -#endif -jobject _vmthread) { - - BEGIN_NATIVE_EXCEPTION(0) - - Jnjvm* vm = JavaThread::get()->getJVM(); - JavaObject* vmthread = (JavaObject*)_vmthread; - JavaField* field = vm->upcalls->vmdataVMThread; - - // 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) - mvm::Thread::yield(); - - JavaThread* th = (JavaThread*)field->getObjectField(vmthread); - th->interruptFlag = 1; - LockObj* lock = th->waitsOn; - - // If the thread is blocked on a wait. We also verify nextWaiting in case - // the thread has been notified. - if (lock && th->nextWaiting) { - th->state = JavaThread::StateInterrupted; - - // Make sure the thread is waiting. - uint32 locked = 0; - while (true) { - locked = (lock->tryAcquire() == 0); - if (locked || (lock->getOwner() != th && lock->getOwner() != 0)) - break; - else mvm::Thread::yield(); - } - - // Interrupt the thread. - th->varcond.signal(); - - // Release the lock if we acquired it. - if (locked) lock->release(); - } - - // Here we could also raise a signal for interrupting I/O - - END_NATIVE_EXCEPTION -} - -// Never throws. -// Never calls Java code. -JNIEXPORT jboolean JNICALL Java_java_lang_VMThread_interrupted( -#ifdef NATIVE_JNI -JNIEnv *env, -jclass clazz, -#endif -) { - JavaThread* th = JavaThread::get(); - uint32 interrupt = th->interruptFlag; - th->interruptFlag = 0; - return (jboolean)interrupt; -} - -// Never throws. -// Never calls Java code. -JNIEXPORT jboolean JNICALL Java_java_lang_VMThread_isInterrupted( -#ifdef NATIVE_JNI -JNIEnv *env, -#endif -jobject _vmthread) { - Jnjvm* vm = JavaThread::get()->getJVM(); - JavaObject* vmthread = (JavaObject*)_vmthread; - JavaField* field = vm->upcalls->vmdataVMThread; - JavaThread* th = (JavaThread*)field->getObjectField(vmthread); - return (jboolean)th->interruptFlag; -} - -// Never throws. -// Never calls Java code. -JNIEXPORT void JNICALL Java_java_lang_VMThread_nativeSetPriority( -#ifdef NATIVE_JNI -JNIEnv *env, -#endif -jobject vmthread, jint prio) { - // Currently not implemented -} - -// Never throws. -// Never calls Java code. -JNIEXPORT void JNICALL Java_java_lang_VMThread_nativeStop( -#ifdef NATIVE_JNI -JNIEnv *env, -#endif -jobject vmthread, jobject exc) { - // Currently not implemented -} - -// Never throws. -// Never calls Java code. -JNIEXPORT void JNICALL Java_java_lang_VMThread_yield( -#ifdef NATIVE_JNI -JNIEnv *env, -jclass clazz, -#endif -) { - mvm::Thread::yield(); -} - -} Removed: vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMThrowable.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMThrowable.cpp?rev=73762&view=auto ============================================================================== --- vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMThrowable.cpp (original) +++ vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMThrowable.cpp (removed) @@ -1,140 +0,0 @@ -//===- ClasspathVMClassLoader.cpp - GNU classpath java/lang/VMClassLoader -===// -// -// JnJVM -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// - -#include - -#include "types.h" - -#include "Classpath.h" -#include "JavaAccess.h" -#include "JavaArray.h" -#include "JavaClass.h" -#include "JavaConstantPool.h" -#include "JavaObject.h" -#include "JavaString.h" -#include "JavaThread.h" -#include "JavaUpcalls.h" -#include "Jnjvm.h" -#include "Reader.h" - -using namespace jnjvm; - -extern "C" { - -JavaObject* internalFillInStackTrace(JavaObject* throwable) { - JavaThread* th = JavaThread::get(); - Jnjvm* vm = th->getJVM(); - - // Allocate the temporary data. - std::vector* stack = new std::vector(); - - // Get the frame context. - th->getJavaFrameContext(*stack); - - // Set the tempory data in the new VMThrowable object. - JavaObject* vmThrowable = vm->upcalls->newVMThrowable->doNew(vm); - uint64 ptr = (uint64)vmThrowable + vm->upcalls->vmDataVMThrowable->ptrOffset; - ((JavaObject**)ptr)[0] = (JavaObject*)stack; - return vmThrowable; -} - -JNIEXPORT jobject JNICALL Java_java_lang_VMThrowable_fillInStackTrace( -#ifdef NATIVE_JNI -JNIEnv *env, -jclass clazz, -#endif -jobject throwable) { - - jobject res = 0; - - BEGIN_NATIVE_EXCEPTION(0) - - res = (jobject)internalFillInStackTrace((JavaObject*)throwable); - - END_NATIVE_EXCEPTION - - return res; -} - - -static JavaObject* consStackElement(JavaMethod* meth, void* ip) { - Jnjvm* vm = JavaThread::get()->getJVM(); - JavaObject* methodName = vm->internalUTF8ToStr(meth->name); - Class* cl = meth->classDef; - JavaObject* className = JavaString::internalToJava(cl->name, vm); - JavaObject* sourceName = 0; - - Attribut* sourceAtt = cl->lookupAttribut(Attribut::sourceFileAttribut); - - // We don't have the bytes if the class was vmjc'ed. - if (sourceAtt && cl->getBytes()) { - Reader reader(sourceAtt, cl->getBytes()); - uint16 index = reader.readU2(); - sourceName = vm->internalUTF8ToStr(cl->getConstantPool()->UTF8At(index)); - } - - bool native = isNative(meth->access); - - UserClass* newS = vm->upcalls->newStackTraceElement; - JavaObject* res = newS->doNew(vm); - vm->upcalls->initStackTraceElement->invokeIntSpecial(vm, newS, res, - sourceName, - 0, // source line - className, - methodName, native); - return res; -} - -JNIEXPORT jobject JNICALL Java_java_lang_VMThrowable_getStackTrace( -#ifdef NATIVE_JNI -JNIEnv *env, -#endif -jobject vmthrow, jobject throwable) { - - jobject result = 0; - - BEGIN_NATIVE_EXCEPTION(0) - Jnjvm* vm = JavaThread::get()->getJVM(); - JavaField* field = vm->upcalls->vmDataVMThrowable; - std::vector* stack = (std::vector*) - field->getObjectField((JavaObject*)vmthrow); - - std::vector::iterator i = stack->begin(), e = stack->end(); - // remove the VMThrowable.fillInStackTrace method - uint32 index = 1; - ++i; - while (i != e) { - JavaMethod* meth = vm->IPToMethod(*i); - assert(meth && "Wrong stack trace"); - if (meth->classDef->isAssignableFrom(vm->upcalls->newThrowable)) { - ++i; - ++index; - } else break; - } - - ArrayObject* res = (ArrayObject*) - vm->upcalls->stackTraceArray->doNew(stack->size() - index, vm); - - index = 0; - for (; i != e; ++i) { - JavaMethod* meth = vm->IPToMethod(*i); - assert(meth && "Wrong stack trace"); - res->elements[index++] = consStackElement(meth, *i); - } - - delete stack; - result = (jobject)res; - - END_NATIVE_EXCEPTION - - return result; -} - -} - Copied: vmkit/trunk/lib/JnJVM/Classpath/JavaUpcalls.cpp (from r73608, vmkit/trunk/lib/JnJVM/VMCore/JavaUpcalls.cpp) URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Classpath/JavaUpcalls.cpp?p2=vmkit/trunk/lib/JnJVM/Classpath/JavaUpcalls.cpp&p1=vmkit/trunk/lib/JnJVM/VMCore/JavaUpcalls.cpp&r1=73608&r2=73763&rev=73763&view=diff ============================================================================== --- vmkit/trunk/lib/JnJVM/VMCore/JavaUpcalls.cpp (original) +++ vmkit/trunk/lib/JnJVM/Classpath/JavaUpcalls.cpp Fri Jun 19 03:26:36 2009 @@ -958,3 +958,17 @@ JavaObjectReference* obj = (JavaObjectReference*)_obj; obj->setReferent(0); } + +#include "ClasspathConstructor.inc" +#include "Classpath.inc" +#include "ClasspathField.inc" +#include "ClasspathMethod.inc" +#include "ClasspathVMClass.inc" +#include "ClasspathVMClassLoader.inc" +#include "ClasspathVMObject.inc" +#include "ClasspathVMRuntime.inc" +#include "ClasspathVMStackWalker.inc" +#include "ClasspathVMSystem.inc" +#include "ClasspathVMSystemProperties.inc" +#include "ClasspathVMThread.inc" +#include "ClasspathVMThrowable.inc" Removed: vmkit/trunk/lib/JnJVM/VMCore/JavaUpcalls.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaUpcalls.cpp?rev=73762&view=auto ============================================================================== --- vmkit/trunk/lib/JnJVM/VMCore/JavaUpcalls.cpp (original) +++ vmkit/trunk/lib/JnJVM/VMCore/JavaUpcalls.cpp (removed) @@ -1,960 +0,0 @@ -//===-------- JavaUpcalls.cpp - Upcalls to Java entities ------------------===// -// -// JnJVM -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// - -#include "ClasspathReflect.h" -#include "JavaAccess.h" -#include "JavaClass.h" -#include "JavaObject.h" -#include "JavaString.h" -#include "JavaThread.h" -#include "JavaUpcalls.h" -#include "Jnjvm.h" - -#define COMPILE_METHODS(cl) \ - for (CommonClass::method_iterator i = cl->virtualMethods.begin(), \ - e = cl->virtualMethods.end(); i!= e; ++i) { \ - i->second->compiledPtr(); \ - } \ - \ - for (CommonClass::method_iterator i = cl->staticMethods.begin(), \ - e = cl->staticMethods.end(); i!= e; ++i) { \ - i->second->compiledPtr(); \ - } - - -using namespace jnjvm; - -#ifndef ISOLATE_SHARING -Class* Classpath::newThread; -Class* Classpath::newVMThread; -JavaField* Classpath::assocThread; -JavaField* Classpath::vmdataVMThread; -JavaMethod* Classpath::finaliseCreateInitialThread; -JavaMethod* Classpath::initVMThread; -JavaMethod* Classpath::groupAddThread; -JavaField* Classpath::threadName; -JavaField* Classpath::groupName; -JavaMethod* Classpath::initGroup; -JavaField* Classpath::priority; -JavaField* Classpath::daemon; -JavaField* Classpath::group; -JavaField* Classpath::running; -Class* Classpath::threadGroup; -JavaField* Classpath::rootGroup; -JavaField* Classpath::vmThread; -JavaMethod* Classpath::uncaughtException; -Class* Classpath::inheritableThreadLocal; - -JavaMethod* Classpath::runVMThread; -JavaMethod* Classpath::setContextClassLoader; -JavaMethod* Classpath::getSystemClassLoader; -Class* Classpath::newString; -Class* Classpath::newClass; -Class* Classpath::newThrowable; -Class* Classpath::newException; -JavaMethod* Classpath::initClass; -JavaMethod* Classpath::initClassWithProtectionDomain; -JavaField* Classpath::vmdataClass; -JavaMethod* Classpath::setProperty; -JavaMethod* Classpath::initString; -JavaMethod* Classpath::getCallingClassLoader; -JavaMethod* Classpath::initConstructor; -Class* Classpath::newConstructor; -ClassArray* Classpath::constructorArrayClass; -ClassArray* Classpath::constructorArrayAnnotation; -JavaField* Classpath::constructorSlot; -JavaMethod* Classpath::initMethod; -JavaMethod* Classpath::initField; -Class* Classpath::newField; -Class* Classpath::newMethod; -ClassArray* Classpath::methodArrayClass; -ClassArray* Classpath::fieldArrayClass; -JavaField* Classpath::methodSlot; -JavaField* Classpath::fieldSlot; -ClassArray* Classpath::classArrayClass; -JavaMethod* Classpath::loadInClassLoader; -JavaMethod* Classpath::initVMThrowable; -JavaField* Classpath::vmDataVMThrowable; -Class* Classpath::newVMThrowable; -JavaField* Classpath::bufferAddress; -JavaField* Classpath::dataPointer32; -JavaField* Classpath::dataPointer64; -Class* Classpath::newPointer32; -Class* Classpath::newPointer64; -Class* Classpath::newDirectByteBuffer; -JavaField* Classpath::vmdataClassLoader; -JavaMethod* Classpath::InitDirectByteBuffer; -Class* Classpath::newClassLoader; - - -JavaField* Classpath::boolValue; -JavaField* Classpath::byteValue; -JavaField* Classpath::shortValue; -JavaField* Classpath::charValue; -JavaField* Classpath::intValue; -JavaField* Classpath::longValue; -JavaField* Classpath::floatValue; -JavaField* Classpath::doubleValue; - -Class* Classpath::newStackTraceElement; -ClassArray* Classpath::stackTraceArray; -JavaMethod* Classpath::initStackTraceElement; - -Class* Classpath::voidClass; -Class* Classpath::boolClass; -Class* Classpath::byteClass; -Class* Classpath::shortClass; -Class* Classpath::charClass; -Class* Classpath::intClass; -Class* Classpath::floatClass; -Class* Classpath::doubleClass; -Class* Classpath::longClass; - -Class* Classpath::vmStackWalker; - -Class* Classpath::InvocationTargetException; -Class* Classpath::ArrayStoreException; -Class* Classpath::ClassCastException; -Class* Classpath::IllegalMonitorStateException; -Class* Classpath::IllegalArgumentException; -Class* Classpath::InterruptedException; -Class* Classpath::IndexOutOfBoundsException; -Class* Classpath::ArrayIndexOutOfBoundsException; -Class* Classpath::NegativeArraySizeException; -Class* Classpath::NullPointerException; -Class* Classpath::SecurityException; -Class* Classpath::ClassFormatError; -Class* Classpath::ClassCircularityError; -Class* Classpath::NoClassDefFoundError; -Class* Classpath::UnsupportedClassVersionError; -Class* Classpath::NoSuchFieldError; -Class* Classpath::NoSuchMethodError; -Class* Classpath::InstantiationError; -Class* Classpath::InstantiationException; -Class* Classpath::IllegalAccessError; -Class* Classpath::IllegalAccessException; -Class* Classpath::VerifyError; -Class* Classpath::ExceptionInInitializerError; -Class* Classpath::LinkageError; -Class* Classpath::AbstractMethodError; -Class* Classpath::UnsatisfiedLinkError; -Class* Classpath::InternalError; -Class* Classpath::OutOfMemoryError; -Class* Classpath::StackOverflowError; -Class* Classpath::UnknownError; -Class* Classpath::ClassNotFoundException; -Class* Classpath::ArithmeticException; - -JavaMethod* Classpath::InitInvocationTargetException; -JavaMethod* Classpath::InitArrayStoreException; -JavaMethod* Classpath::InitClassCastException; -JavaMethod* Classpath::InitIllegalMonitorStateException; -JavaMethod* Classpath::InitIllegalArgumentException; -JavaMethod* Classpath::InitInterruptedException; -JavaMethod* Classpath::InitIndexOutOfBoundsException; -JavaMethod* Classpath::InitArrayIndexOutOfBoundsException; -JavaMethod* Classpath::InitNegativeArraySizeException; -JavaMethod* Classpath::InitNullPointerException; -JavaMethod* Classpath::InitSecurityException; -JavaMethod* Classpath::InitClassFormatError; -JavaMethod* Classpath::InitClassCircularityError; -JavaMethod* Classpath::InitNoClassDefFoundError; -JavaMethod* Classpath::InitUnsupportedClassVersionError; -JavaMethod* Classpath::InitNoSuchFieldError; -JavaMethod* Classpath::InitNoSuchMethodError; -JavaMethod* Classpath::InitInstantiationError; -JavaMethod* Classpath::InitInstantiationException; -JavaMethod* Classpath::InitIllegalAccessError; -JavaMethod* Classpath::InitIllegalAccessException; -JavaMethod* Classpath::InitVerifyError; -JavaMethod* Classpath::InitExceptionInInitializerError; -JavaMethod* Classpath::InitLinkageError; -JavaMethod* Classpath::InitAbstractMethodError; -JavaMethod* Classpath::InitUnsatisfiedLinkError; -JavaMethod* Classpath::InitInternalError; -JavaMethod* Classpath::InitOutOfMemoryError; -JavaMethod* Classpath::InitStackOverflowError; -JavaMethod* Classpath::InitUnknownError; -JavaMethod* Classpath::InitClassNotFoundException; -JavaMethod* Classpath::InitArithmeticException; -JavaMethod* Classpath::InitObject; -JavaMethod* Classpath::FinalizeObject; -JavaMethod* Classpath::IntToString; - -JavaMethod* Classpath::ErrorWithExcpNoClassDefFoundError; -JavaMethod* Classpath::ErrorWithExcpExceptionInInitializerError; -JavaMethod* Classpath::ErrorWithExcpInvocationTargetException; - -ClassArray* Classpath::ArrayOfByte; -ClassArray* Classpath::ArrayOfChar; -ClassArray* Classpath::ArrayOfString; -ClassArray* Classpath::ArrayOfInt; -ClassArray* Classpath::ArrayOfShort; -ClassArray* Classpath::ArrayOfBool; -ClassArray* Classpath::ArrayOfLong; -ClassArray* Classpath::ArrayOfFloat; -ClassArray* Classpath::ArrayOfDouble; -ClassArray* Classpath::ArrayOfObject; - -ClassPrimitive* Classpath::OfByte; -ClassPrimitive* Classpath::OfChar; -ClassPrimitive* Classpath::OfInt; -ClassPrimitive* Classpath::OfShort; -ClassPrimitive* Classpath::OfBool; -ClassPrimitive* Classpath::OfLong; -ClassPrimitive* Classpath::OfFloat; -ClassPrimitive* Classpath::OfDouble; -ClassPrimitive* Classpath::OfVoid; - -JavaField* Classpath::methodClass; -JavaField* Classpath::fieldClass; -JavaField* Classpath::constructorClass; - -JavaMethod* Classpath::EnqueueReference; -Class* Classpath::newReference; - -#endif - -void Classpath::CreateJavaThread(Jnjvm* vm, JavaThread* myth, - const char* thName, JavaObject* Group) { - - JavaObject* th = newThread->doNew(vm); - myth->javaThread = th; - JavaObject* vmth = newVMThread->doNew(vm); - - threadName->setObjectField(th, (JavaObject*)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); - - group->setObjectField(th, Group); - groupAddThread->invokeIntSpecial(vm, threadGroup, Group, th); - - finaliseCreateInitialThread->invokeIntStatic(vm, inheritableThreadLocal, th); -} - -void Classpath::InitializeThreading(Jnjvm* vm) { - // Resolve and initialize classes first. - newThread->resolveClass(); - newThread->initialiseClass(vm); - - newVMThread->resolveClass(); - newVMThread->initialiseClass(vm); - - threadGroup->resolveClass(); - threadGroup->initialiseClass(vm); - - // Create the main thread - void* Stat = threadGroup->getStaticInstance(); - JavaObject* RG = rootGroup->getObjectField(Stat); - assert(vm->getMainThread() && "VM did not set its main thread"); - CreateJavaThread(vm, vm->getMainThread(), "main", RG); - - // Create the "system" group. - JavaObject* SystemGroup = threadGroup->doNew(vm); - initGroup->invokeIntSpecial(vm, threadGroup, SystemGroup); - JavaObject* systemName = (JavaObject*)vm->asciizToStr("system"); - groupName->setObjectField(SystemGroup, systemName); - - // Create the finalizer thread. - assert(vm->getFinalizerThread() && "VM did not set its finalizer thread"); - CreateJavaThread(vm, vm->getFinalizerThread(), "Finalizer", SystemGroup); - - // Create the enqueue thread. - assert(vm->getEnqueueThread() && "VM did not set its enqueue thread"); - CreateJavaThread(vm, vm->getEnqueueThread(), "Reference", SystemGroup); -} - -extern "C" void nativeInitWeakReference(JavaObjectReference* reference, - JavaObject* referent) { - reference->init(referent, 0); - JavaThread::get()->getJVM()->addWeakReference(reference); - -} - -extern "C" void nativeInitWeakReferenceQ(JavaObjectReference* reference, - JavaObject* referent, - JavaObject* queue) { - reference->init(referent, queue); - JavaThread::get()->getJVM()->addWeakReference(reference); - -} - -extern "C" void nativeInitSoftReference(JavaObjectReference* reference, - JavaObject* referent) { - reference->init(referent, 0); - JavaThread::get()->getJVM()->addSoftReference(reference); - -} - -extern "C" void nativeInitSoftReferenceQ(JavaObjectReference* reference, - JavaObject* referent, - JavaObject* queue) { - reference->init(referent, queue); - JavaThread::get()->getJVM()->addSoftReference(reference); - -} - -extern "C" void nativeInitPhantomReferenceQ(JavaObjectReference* reference, - JavaObject* referent, - JavaObject* queue) { - reference->init(referent, queue); - JavaThread::get()->getJVM()->addPhantomReference(reference); - -} - -extern "C" JavaString* nativeInternString(JavaString* obj) { - Jnjvm* vm = JavaThread::get()->getJVM(); - const ArrayUInt16* array = obj->strToArray(vm); - return vm->constructString(array); -} - -extern "C" uint8 nativeIsArray(JavaObject* klass) { - UserCommonClass* cl = ((JavaObjectClass*)klass)->getClass(); - return (uint8)cl->isArray(); -} - -extern "C" JavaObject* nativeGetCallingClass() { - - JavaObject* res = 0; - - BEGIN_NATIVE_EXCEPTION(0) - - JavaThread* th = JavaThread::get(); - UserClass* cl = th->getCallingClass(1); - if (cl) res = cl->getClassDelegatee(th->getJVM()); - END_NATIVE_EXCEPTION - - return res; -} - -extern "C" JavaObject* nativeGetCallingClassLoader() { - - JavaObject *res = 0; - - BEGIN_NATIVE_EXCEPTION(0) - JavaThread* th = JavaThread::get(); - UserClass* cl = th->getCallingClass(1); - res = cl->classLoader->getJavaClassLoader(); - END_NATIVE_EXCEPTION - - return res; -} - -extern "C" JavaObject* nativeFirstNonNullClassLoader() { - JavaObject *res = 0; - - BEGIN_NATIVE_EXCEPTION(0) - JavaThread* th = JavaThread::get(); - res = th->getNonNullClassLoader(); - END_NATIVE_EXCEPTION - - return res; -} - -extern "C" JavaObject* nativeGetCallerClass(uint32 index) { - - JavaObject *res = 0; - - BEGIN_NATIVE_EXCEPTION(0) - JavaThread* th = JavaThread::get(); - Jnjvm* vm = th->getJVM(); - UserClass* cl = th->getCallingClassLevel(index); - if (cl) res = cl->getClassDelegatee(vm); - END_NATIVE_EXCEPTION - - return res; -} - -extern "C" JavaObject* nativeGetAnnotation(JavaObject* obj) { - return 0; -} - -extern "C" JavaObject* nativeGetDeclaredAnnotations() { - Jnjvm* vm = JavaThread::get()->getJVM(); - UserClassArray* array = vm->upcalls->constructorArrayAnnotation; - return array->doNew(0, vm); -} - -extern "C" void nativePropertiesPostInit(JavaObject* prop); - - -extern "C" void nativeJavaObjectClassTracer(JavaObjectClass* obj) { - JavaObjectClass::staticTracer(obj); -} - -extern "C" void nativeJavaObjectFieldTracer(JavaObjectField* obj) { - JavaObjectField::staticTracer(obj); -} - -extern "C" void nativeJavaObjectMethodTracer(JavaObjectMethod* obj) { - JavaObjectMethod::staticTracer(obj); -} - -extern "C" void nativeJavaObjectConstructorTracer(JavaObjectConstructor* obj) { - JavaObjectConstructor::staticTracer(obj); -} - -extern "C" void nativeJavaObjectReferenceTracer(JavaObjectReference* obj) { - JavaObjectReference::staticTracer(obj); -} - -extern "C" void nativeJavaObjectVMThreadDestructor(JavaObjectVMThread* obj) { - JavaObjectVMThread::staticDestructor(obj); -} - -// Defined in Classpath/ClasspathVMClassLoader.cpp -extern "C" ArrayObject* nativeGetBootPackages(); - -extern "C" JavaString* nativeGetenv(JavaString* str) { - char* buf = str->strToAsciiz(); - char* res = getenv(buf); - delete[] buf; - if (res) { - Jnjvm* vm = JavaThread::get()->getJVM(); - return vm->asciizToStr(res); - } - return 0; -} - -void Classpath::initialiseClasspath(JnjvmClassLoader* loader) { - - newClassLoader = - UPCALL_CLASS(loader, "java/lang/ClassLoader"); - - getSystemClassLoader = - UPCALL_METHOD(loader, "java/lang/ClassLoader", "getSystemClassLoader", - "()Ljava/lang/ClassLoader;", ACC_STATIC); - - setContextClassLoader = - UPCALL_METHOD(loader, "java/lang/Thread", "setContextClassLoader", - "(Ljava/lang/ClassLoader;)V", ACC_VIRTUAL); - - newString = - UPCALL_CLASS(loader, "java/lang/String"); - - newClass = - UPCALL_CLASS(loader, "java/lang/Class"); - - newThrowable = - UPCALL_CLASS(loader, "java/lang/Throwable"); - - newException = - UPCALL_CLASS(loader, "java/lang/Exception"); - - newPointer32 = - UPCALL_CLASS(loader, "gnu/classpath/Pointer32"); - - newPointer64 = - UPCALL_CLASS(loader, "gnu/classpath/Pointer64"); - - newDirectByteBuffer = - UPCALL_CLASS(loader, "java/nio/DirectByteBufferImpl$ReadWrite"); - - InitDirectByteBuffer = - UPCALL_METHOD(loader, "java/nio/DirectByteBufferImpl$ReadWrite", "", - "(Ljava/lang/Object;Lgnu/classpath/Pointer;III)V", - ACC_VIRTUAL); - - initClass = - UPCALL_METHOD(loader, "java/lang/Class", "", "(Ljava/lang/Object;)V", - ACC_VIRTUAL); - - initClassWithProtectionDomain = - UPCALL_METHOD(loader, "java/lang/Class", "", - "(Ljava/lang/Object;Ljava/security/ProtectionDomain;)V", - ACC_VIRTUAL); - - vmdataClass = - UPCALL_FIELD(loader, "java/lang/Class", "vmdata", "Ljava/lang/Object;", - ACC_VIRTUAL); - - setProperty = - UPCALL_METHOD(loader, "java/util/Properties", "setProperty", - "(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/Object;", - ACC_VIRTUAL); - - initString = - UPCALL_METHOD(loader, "java/lang/String", "", "([CIIZ)V", ACC_VIRTUAL); - - initConstructor = - UPCALL_METHOD(loader, "java/lang/reflect/Constructor", "", - "(Ljava/lang/Class;I)V", ACC_VIRTUAL); - - newConstructor = - UPCALL_CLASS(loader, "java/lang/reflect/Constructor"); - - constructorArrayClass = - UPCALL_ARRAY_CLASS(loader, "java/lang/reflect/Constructor", 1); - - constructorArrayAnnotation = - UPCALL_ARRAY_CLASS(loader, "java/lang/annotation/Annotation", 1); - - constructorSlot = - UPCALL_FIELD(loader, "java/lang/reflect/Constructor", "slot", "I", ACC_VIRTUAL); - - initMethod = - UPCALL_METHOD(loader, "java/lang/reflect/Method", "", - "(Ljava/lang/Class;Ljava/lang/String;I)V", ACC_VIRTUAL); - - newMethod = - UPCALL_CLASS(loader, "java/lang/reflect/Method"); - - methodArrayClass = - UPCALL_ARRAY_CLASS(loader, "java/lang/reflect/Method", 1); - - methodSlot = - UPCALL_FIELD(loader, "java/lang/reflect/Method", "slot", "I", ACC_VIRTUAL); - - initField = - UPCALL_METHOD(loader, "java/lang/reflect/Field", "", - "(Ljava/lang/Class;Ljava/lang/String;I)V", ACC_VIRTUAL); - - newField = - UPCALL_CLASS(loader, "java/lang/reflect/Field"); - - fieldArrayClass = - UPCALL_ARRAY_CLASS(loader, "java/lang/reflect/Field", 1); - - fieldSlot = - UPCALL_FIELD(loader, "java/lang/reflect/Field", "slot", "I", ACC_VIRTUAL); - - - classArrayClass = - UPCALL_ARRAY_CLASS(loader, "java/lang/Class", 1); - - newVMThrowable = - UPCALL_CLASS(loader, "java/lang/VMThrowable"); - - initVMThrowable = - UPCALL_METHOD(loader, "java/lang/VMThrowable", "", "()V", ACC_VIRTUAL); - - vmDataVMThrowable = - UPCALL_FIELD(loader, "java/lang/VMThrowable", "vmdata", "Ljava/lang/Object;", - ACC_VIRTUAL); - - bufferAddress = - UPCALL_FIELD(loader, "java/nio/Buffer", "address", "Lgnu/classpath/Pointer;", - ACC_VIRTUAL); - - dataPointer32 = - UPCALL_FIELD(loader, "gnu/classpath/Pointer32", "data", "I", ACC_VIRTUAL); - - dataPointer64 = - UPCALL_FIELD(loader, "gnu/classpath/Pointer64", "data", "J", ACC_VIRTUAL); - - vmdataClassLoader = - UPCALL_FIELD(loader, "java/lang/ClassLoader", "vmdata", "Ljava/lang/Object;", - ACC_VIRTUAL); - - newStackTraceElement = - UPCALL_CLASS(loader, "java/lang/StackTraceElement"); - - stackTraceArray = - UPCALL_ARRAY_CLASS(loader, "java/lang/StackTraceElement", 1); - - initStackTraceElement = - UPCALL_METHOD(loader, "java/lang/StackTraceElement", "", - "(Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Z)V", - ACC_VIRTUAL); - - boolValue = - UPCALL_FIELD(loader, "java/lang/Boolean", "value", "Z", ACC_VIRTUAL); - - byteValue = - UPCALL_FIELD(loader, "java/lang/Byte", "value", "B", ACC_VIRTUAL); - - shortValue = - UPCALL_FIELD(loader, "java/lang/Short", "value", "S", ACC_VIRTUAL); - - charValue = - UPCALL_FIELD(loader, "java/lang/Character", "value", "C", ACC_VIRTUAL); - - intValue = - UPCALL_FIELD(loader, "java/lang/Integer", "value", "I", ACC_VIRTUAL); - - longValue = - UPCALL_FIELD(loader, "java/lang/Long", "value", "J", ACC_VIRTUAL); - - floatValue = - UPCALL_FIELD(loader, "java/lang/Float", "value", "F", ACC_VIRTUAL); - - doubleValue = - UPCALL_FIELD(loader, "java/lang/Double", "value", "D", ACC_VIRTUAL); - - Classpath::voidClass = - UPCALL_CLASS(loader, "java/lang/Void"); - - Classpath::boolClass = - UPCALL_CLASS(loader, "java/lang/Boolean"); - - Classpath::byteClass = - UPCALL_CLASS(loader, "java/lang/Byte"); - - Classpath::shortClass = - UPCALL_CLASS(loader, "java/lang/Short"); - - Classpath::charClass = - UPCALL_CLASS(loader, "java/lang/Character"); - - Classpath::intClass = - UPCALL_CLASS(loader, "java/lang/Integer"); - - Classpath::floatClass = - UPCALL_CLASS(loader, "java/lang/Float"); - - Classpath::doubleClass = - UPCALL_CLASS(loader, "java/lang/Double"); - - Classpath::longClass = - UPCALL_CLASS(loader, "java/lang/Long"); - - vmStackWalker = - UPCALL_CLASS(loader, "gnu/classpath/VMStackWalker"); - - loadInClassLoader = - UPCALL_METHOD(loader, "java/lang/ClassLoader", "loadClass", - "(Ljava/lang/String;Z)Ljava/lang/Class;", ACC_VIRTUAL); - - JavaMethod* internString = - UPCALL_METHOD(loader, "java/lang/VMString", "intern", - "(Ljava/lang/String;)Ljava/lang/String;", ACC_STATIC); - internString->setCompiledPtr((void*)(intptr_t)nativeInternString, - "nativeInternString"); - - JavaMethod* isArray = - UPCALL_METHOD(loader, "java/lang/Class", "isArray", "()Z", ACC_VIRTUAL); - isArray->setCompiledPtr((void*)(intptr_t)nativeIsArray, "nativeIsArray"); - - - UPCALL_REFLECT_CLASS_EXCEPTION(loader, InvocationTargetException); - UPCALL_CLASS_EXCEPTION(loader, ArrayStoreException); - UPCALL_CLASS_EXCEPTION(loader, ClassCastException); - UPCALL_CLASS_EXCEPTION(loader, IllegalMonitorStateException); - UPCALL_CLASS_EXCEPTION(loader, IllegalArgumentException); - UPCALL_CLASS_EXCEPTION(loader, InterruptedException); - UPCALL_CLASS_EXCEPTION(loader, IndexOutOfBoundsException); - UPCALL_CLASS_EXCEPTION(loader, ArrayIndexOutOfBoundsException); - UPCALL_CLASS_EXCEPTION(loader, NegativeArraySizeException); - UPCALL_CLASS_EXCEPTION(loader, NullPointerException); - UPCALL_CLASS_EXCEPTION(loader, SecurityException); - UPCALL_CLASS_EXCEPTION(loader, ClassFormatError); - UPCALL_CLASS_EXCEPTION(loader, ClassCircularityError); - UPCALL_CLASS_EXCEPTION(loader, NoClassDefFoundError); - UPCALL_CLASS_EXCEPTION(loader, UnsupportedClassVersionError); - UPCALL_CLASS_EXCEPTION(loader, NoSuchFieldError); - UPCALL_CLASS_EXCEPTION(loader, NoSuchMethodError); - UPCALL_CLASS_EXCEPTION(loader, InstantiationError); - UPCALL_CLASS_EXCEPTION(loader, InstantiationException); - UPCALL_CLASS_EXCEPTION(loader, IllegalAccessError); - UPCALL_CLASS_EXCEPTION(loader, IllegalAccessException); - UPCALL_CLASS_EXCEPTION(loader, VerifyError); - UPCALL_CLASS_EXCEPTION(loader, ExceptionInInitializerError); - UPCALL_CLASS_EXCEPTION(loader, LinkageError); - UPCALL_CLASS_EXCEPTION(loader, AbstractMethodError); - UPCALL_CLASS_EXCEPTION(loader, UnsatisfiedLinkError); - UPCALL_CLASS_EXCEPTION(loader, InternalError); - UPCALL_CLASS_EXCEPTION(loader, OutOfMemoryError); - UPCALL_CLASS_EXCEPTION(loader, StackOverflowError); - UPCALL_CLASS_EXCEPTION(loader, UnknownError); - UPCALL_CLASS_EXCEPTION(loader, ClassNotFoundException); - UPCALL_CLASS_EXCEPTION(loader, ArithmeticException); - - UPCALL_METHOD_EXCEPTION(loader, InvocationTargetException); - UPCALL_METHOD_EXCEPTION(loader, ArrayStoreException); - UPCALL_METHOD_EXCEPTION(loader, ClassCastException); - UPCALL_METHOD_EXCEPTION(loader, IllegalMonitorStateException); - UPCALL_METHOD_EXCEPTION(loader, IllegalArgumentException); - UPCALL_METHOD_EXCEPTION(loader, InterruptedException); - UPCALL_METHOD_EXCEPTION(loader, IndexOutOfBoundsException); - UPCALL_METHOD_EXCEPTION(loader, ArrayIndexOutOfBoundsException); - UPCALL_METHOD_EXCEPTION(loader, NegativeArraySizeException); - UPCALL_METHOD_EXCEPTION(loader, NullPointerException); - UPCALL_METHOD_EXCEPTION(loader, SecurityException); - UPCALL_METHOD_EXCEPTION(loader, ClassFormatError); - UPCALL_METHOD_EXCEPTION(loader, ClassCircularityError); - UPCALL_METHOD_EXCEPTION(loader, NoClassDefFoundError); - UPCALL_METHOD_EXCEPTION(loader, UnsupportedClassVersionError); - UPCALL_METHOD_EXCEPTION(loader, NoSuchFieldError); - UPCALL_METHOD_EXCEPTION(loader, NoSuchMethodError); - UPCALL_METHOD_EXCEPTION(loader, InstantiationError); - UPCALL_METHOD_EXCEPTION(loader, InstantiationException); - UPCALL_METHOD_EXCEPTION(loader, IllegalAccessError); - UPCALL_METHOD_EXCEPTION(loader, IllegalAccessException); - UPCALL_METHOD_EXCEPTION(loader, VerifyError); - UPCALL_METHOD_EXCEPTION(loader, ExceptionInInitializerError); - UPCALL_METHOD_EXCEPTION(loader, LinkageError); - UPCALL_METHOD_EXCEPTION(loader, AbstractMethodError); - UPCALL_METHOD_EXCEPTION(loader, UnsatisfiedLinkError); - UPCALL_METHOD_EXCEPTION(loader, InternalError); - UPCALL_METHOD_EXCEPTION(loader, OutOfMemoryError); - UPCALL_METHOD_EXCEPTION(loader, StackOverflowError); - UPCALL_METHOD_EXCEPTION(loader, UnknownError); - UPCALL_METHOD_EXCEPTION(loader, ClassNotFoundException); - UPCALL_METHOD_EXCEPTION(loader, ArithmeticException); - - UPCALL_METHOD_WITH_EXCEPTION(loader, NoClassDefFoundError); - UPCALL_METHOD_WITH_EXCEPTION(loader, ExceptionInInitializerError); - UPCALL_METHOD_WITH_EXCEPTION(loader, InvocationTargetException); - - InitObject = UPCALL_METHOD(loader, "java/lang/Object", "", "()V", - ACC_VIRTUAL); - - FinalizeObject = UPCALL_METHOD(loader, "java/lang/Object", "finalize", "()V", - ACC_VIRTUAL); - - IntToString = UPCALL_METHOD(loader, "java/lang/Integer", "toString", - "(II)Ljava/lang/String;", ACC_STATIC); - - newThread = - UPCALL_CLASS(loader, "java/lang/Thread"); - - newVMThread = - UPCALL_CLASS(loader, "java/lang/VMThread"); - - assocThread = - UPCALL_FIELD(loader, "java/lang/VMThread", "thread", "Ljava/lang/Thread;", - ACC_VIRTUAL); - - vmdataVMThread = - UPCALL_FIELD(loader, "java/lang/VMThread", "vmdata", "Ljava/lang/Object;", - ACC_VIRTUAL); - - inheritableThreadLocal = - UPCALL_CLASS(loader, "java/lang/InheritableThreadLocal"); - - finaliseCreateInitialThread = - UPCALL_METHOD(loader, "java/lang/InheritableThreadLocal", "newChildThread", - "(Ljava/lang/Thread;)V", ACC_STATIC); - - initVMThread = - UPCALL_METHOD(loader, "java/lang/VMThread", "", - "(Ljava/lang/Thread;)V", ACC_VIRTUAL); - - runVMThread = - UPCALL_METHOD(loader, "java/lang/VMThread", "run", "()V", ACC_VIRTUAL); - - - groupAddThread = - UPCALL_METHOD(loader, "java/lang/ThreadGroup", "addThread", - "(Ljava/lang/Thread;)V", ACC_VIRTUAL); - - initGroup = - UPCALL_METHOD(loader, "java/lang/ThreadGroup", "", - "()V", ACC_VIRTUAL); - - groupName = - UPCALL_FIELD(loader, "java/lang/ThreadGroup", "name", "Ljava/lang/String;", - ACC_VIRTUAL); - - threadName = - UPCALL_FIELD(loader, "java/lang/Thread", "name", "Ljava/lang/String;", - ACC_VIRTUAL); - - - priority = - UPCALL_FIELD(loader, "java/lang/Thread", "priority", "I", ACC_VIRTUAL); - - daemon = - UPCALL_FIELD(loader, "java/lang/Thread", "daemon", "Z", ACC_VIRTUAL); - - group = - UPCALL_FIELD(loader, "java/lang/Thread", "group", - "Ljava/lang/ThreadGroup;", ACC_VIRTUAL); - - running = - UPCALL_FIELD(loader, "java/lang/VMThread", "running", "Z", ACC_VIRTUAL); - - threadGroup = - UPCALL_CLASS(loader, "java/lang/ThreadGroup"); - - rootGroup = - UPCALL_FIELD(loader, "java/lang/ThreadGroup", "root", - "Ljava/lang/ThreadGroup;", ACC_STATIC); - - vmThread = - UPCALL_FIELD(loader, "java/lang/Thread", "vmThread", - "Ljava/lang/VMThread;", ACC_VIRTUAL); - - uncaughtException = - UPCALL_METHOD(loader, "java/lang/ThreadGroup", "uncaughtException", - "(Ljava/lang/Thread;Ljava/lang/Throwable;)V", ACC_VIRTUAL); - - - methodClass = - UPCALL_FIELD(loader, "java/lang/reflect/Method", "declaringClass", - "Ljava/lang/Class;", ACC_VIRTUAL); - - fieldClass = - UPCALL_FIELD(loader, "java/lang/reflect/Field", "declaringClass", - "Ljava/lang/Class;", ACC_VIRTUAL); - - constructorClass = - UPCALL_FIELD(loader, "java/lang/reflect/Constructor", "clazz", - "Ljava/lang/Class;", ACC_VIRTUAL); - - loader->loadName(loader->asciizConstructUTF8("java/lang/String"), - true, false); - - loader->loadName(loader->asciizConstructUTF8("java/lang/Object"), - true, false); - - // Don't compile methods here, we still don't know where to allocate Java - // strings. - - JavaMethod* getEnv = - UPCALL_METHOD(loader, "java/lang/VMSystem", "getenv", - "(Ljava/lang/String;)Ljava/lang/String;", ACC_STATIC); - getEnv->setCompiledPtr((void*)(intptr_t)nativeGetenv, "nativeGetenv"); - - JavaMethod* getCallingClass = - UPCALL_METHOD(loader, "gnu/classpath/VMStackWalker", "getCallingClass", - "()Ljava/lang/Class;", ACC_STATIC); - getCallingClass->setCompiledPtr((void*)(intptr_t)nativeGetCallingClass, - "nativeGetCallingClass"); - - JavaMethod* getCallingClassLoader = - UPCALL_METHOD(loader, "gnu/classpath/VMStackWalker", "getCallingClassLoader", - "()Ljava/lang/ClassLoader;", ACC_STATIC); - getCallingClassLoader->setCompiledPtr((void*)(intptr_t) - nativeGetCallingClassLoader, - "nativeGetCallingClassLoader"); - - JavaMethod* firstNonNullClassLoader = - UPCALL_METHOD(loader, "gnu/classpath/VMStackWalker", "firstNonNullClassLoader", - "()Ljava/lang/ClassLoader;", ACC_STATIC); - firstNonNullClassLoader->setCompiledPtr((void*)(intptr_t) - nativeFirstNonNullClassLoader, - "nativeFirstNonNullClassLoader"); - - JavaMethod* getCallerClass = - UPCALL_METHOD(loader, "sun/reflect/Reflection", "getCallerClass", - "(I)Ljava/lang/Class;", ACC_STATIC); - getCallerClass->setCompiledPtr((void*)(intptr_t)nativeGetCallerClass, - "nativeGetCallerClass"); - - JavaMethod* postProperties = - UPCALL_METHOD(loader, "gnu/classpath/VMSystemProperties", "postInit", - "(Ljava/util/Properties;)V", ACC_STATIC); - postProperties->setCompiledPtr((void*)(intptr_t)nativePropertiesPostInit, - "nativePropertiesPostInit"); - - // Also implement these twos, implementation in GNU Classpath 0.97.2 is buggy. - JavaMethod* getAnnotation = - UPCALL_METHOD(loader, "java/lang/reflect/AccessibleObject", "getAnnotation", - "(Ljava/lang/Class;)Ljava/lang/annotation/Annotation;", - ACC_VIRTUAL); - getAnnotation->setCompiledPtr((void*)(intptr_t)nativeGetAnnotation, - "nativeGetAnnotation"); - - JavaMethod* getAnnotations = - UPCALL_METHOD(loader, "java/lang/reflect/AccessibleObject", - "getDeclaredAnnotations", - "()[Ljava/lang/annotation/Annotation;", - ACC_VIRTUAL); - getAnnotations->setCompiledPtr((void*)(intptr_t)nativeGetDeclaredAnnotations, - "nativeGetDeclaredAnnotations"); - - JavaMethod* getBootPackages = - UPCALL_METHOD(loader, "java/lang/VMClassLoader", "getBootPackages", - "()[Ljava/lang/String;", ACC_STATIC); - getBootPackages->setCompiledPtr((void*)(intptr_t)nativeGetBootPackages, - "nativeGetBootPackages"); - - //===----------------------------------------------------------------------===// - // - // To make classes non GC-allocated, we have to bypass the tracer functions of - // java.lang.Class, java.lang.reflect.Field, java.lang.reflect.Method and - // java.lang.reflect.constructor. The new tracer functions trace the classloader - // instead of the class/field/method. - // - //===----------------------------------------------------------------------===// - - newClass->getVirtualVT()->setNativeTracer( - (uintptr_t)nativeJavaObjectClassTracer, - "nativeJavaObjectClassTracer"); - - newConstructor->getVirtualVT()->setNativeTracer( - (uintptr_t)nativeJavaObjectConstructorTracer, - "nativeJavaObjectConstructorTracer"); - - newMethod->getVirtualVT()->setNativeTracer( - (uintptr_t)nativeJavaObjectMethodTracer, - "nativeJavaObjectMethodTracer"); - - newField->getVirtualVT()->setNativeTracer( - (uintptr_t)nativeJavaObjectFieldTracer, - "nativeJavaObjectFieldTracer"); - - newVMThread->getVirtualVT()->setNativeDestructor( - (uintptr_t)nativeJavaObjectVMThreadDestructor, - "nativeJavaObjectVMThreadDestructor"); - - - newReference = UPCALL_CLASS(loader, "java/lang/ref/Reference"); - - newReference->getVirtualVT()->setNativeTracer( - (uintptr_t)nativeJavaObjectReferenceTracer, - "nativeJavaObjectReferenceTracer"); - - EnqueueReference = - UPCALL_METHOD(loader, "java/lang/ref/Reference", "enqueue", "()Z", - ACC_VIRTUAL); - - JavaMethod* initWeakReference = - UPCALL_METHOD(loader, "java/lang/ref/WeakReference", "", - "(Ljava/lang/Object;)V", - ACC_VIRTUAL); - initWeakReference->setCompiledPtr((void*)(intptr_t)nativeInitWeakReference, - "nativeInitWeakReference"); - - initWeakReference = - UPCALL_METHOD(loader, "java/lang/ref/WeakReference", "", - "(Ljava/lang/Object;Ljava/lang/ref/ReferenceQueue;)V", - ACC_VIRTUAL); - initWeakReference->setCompiledPtr((void*)(intptr_t)nativeInitWeakReferenceQ, - "nativeInitWeakReferenceQ"); - - JavaMethod* initSoftReference = - UPCALL_METHOD(loader, "java/lang/ref/SoftReference", "", - "(Ljava/lang/Object;)V", - ACC_VIRTUAL); - initSoftReference->setCompiledPtr((void*)(intptr_t)nativeInitSoftReference, - "nativeInitSoftReference"); - - initSoftReference = - UPCALL_METHOD(loader, "java/lang/ref/WeakReference", "", - "(Ljava/lang/Object;Ljava/lang/ref/ReferenceQueue;)V", - ACC_VIRTUAL); - initSoftReference->setCompiledPtr((void*)(intptr_t)nativeInitSoftReferenceQ, - "nativeInitSoftReferenceQ"); - - JavaMethod* initPhantomReference = - UPCALL_METHOD(loader, "java/lang/ref/PhantomReference", "", - "(Ljava/lang/Object;Ljava/lang/ref/ReferenceQueue;)V", - ACC_VIRTUAL); - initPhantomReference->setCompiledPtr( - (void*)(intptr_t)nativeInitPhantomReferenceQ, - "nativeInitPhantomReferenceQ"); - - -} - -gc* Jnjvm::getReferent(gc* _obj) { - JavaObjectReference* obj = (JavaObjectReference*)_obj; - return obj->getReferent(); - } - -void Jnjvm::clearReferent(gc* _obj) { - JavaObjectReference* obj = (JavaObjectReference*)_obj; - obj->setReferent(0); -} Removed: vmkit/trunk/lib/JnJVM/VMCore/JavaUpcalls.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaUpcalls.h?rev=73762&view=auto ============================================================================== --- vmkit/trunk/lib/JnJVM/VMCore/JavaUpcalls.h (original) +++ vmkit/trunk/lib/JnJVM/VMCore/JavaUpcalls.h (removed) @@ -1,269 +0,0 @@ -//===---------- JavaUpcalls.h - Upcalls to Java entities ------------------===// -// -// JnJVM -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// - -#ifndef JNJVM_JAVA_UPCALLS_H -#define JNJVM_JAVA_UPCALLS_H - -#include "mvm/Allocator.h" - -#include "JnjvmConfig.h" - -#define UPCALL_CLASS(vm, name) \ - vm->loadName(vm->asciizConstructUTF8(name), true, false) - -#define UPCALL_PRIMITIVE_CLASS(loader, name, nb) \ - new(loader->allocator, "Primitive class") \ - UserClassPrimitive(loader, loader->asciizConstructUTF8(name), nb) \ - -#define UPCALL_FIELD(vm, cl, name, type, acc) \ - UPCALL_CLASS(vm, cl)->lookupFieldDontThrow(vm->asciizConstructUTF8(name), \ - vm->asciizConstructUTF8(type), \ - isStatic(acc), false, 0) - -#define UPCALL_METHOD(vm, cl, name, type, acc) \ - UPCALL_CLASS(vm, cl)->lookupMethodDontThrow(vm->asciizConstructUTF8(name), \ - vm->asciizConstructUTF8(type), \ - isStatic(acc), false, 0) - -#define UPCALL_ARRAY_CLASS(loader, name, depth) \ - loader->constructArray( \ - loader->constructArrayName(depth, loader->asciizConstructUTF8(name))) - -#define UPCALL_CLASS_EXCEPTION(loader, name) \ - name = UPCALL_CLASS(loader, "java/lang/"#name) - -#define UPCALL_REFLECT_CLASS_EXCEPTION(loader, name) \ - name = UPCALL_CLASS(loader, "java/lang/reflect/"#name) - -#define UPCALL_METHOD_EXCEPTION(loader, name) \ - Init##name = name->lookupMethodDontThrow(loader->asciizConstructUTF8(""), \ - loader->asciizConstructUTF8("(Ljava/lang/String;)V"), \ - false, false, 0); - -#define UPCALL_METHOD_WITH_EXCEPTION(loader, name) \ - ErrorWithExcp##name = name->lookupMethodDontThrow(loader->asciizConstructUTF8(""), \ - loader->asciizConstructUTF8("(Ljava/lang/Throwable;)V"), \ - false, false, 0); - -namespace jnjvm { - -class Jnjvm; -class JavaField; -class JavaMethod; -class Class; -class ClassArray; - -class Classpath : public mvm::PermanentObject { -public: - ISOLATE_STATIC UserClass* newClassLoader; - ISOLATE_STATIC JavaMethod* getSystemClassLoader; - ISOLATE_STATIC JavaMethod* setContextClassLoader; - ISOLATE_STATIC UserClass* newString; - ISOLATE_STATIC UserClass* newClass; - ISOLATE_STATIC UserClass* newThrowable; - ISOLATE_STATIC UserClass* newException; - ISOLATE_STATIC JavaMethod* initClass; - ISOLATE_STATIC JavaMethod* initClassWithProtectionDomain; - ISOLATE_STATIC JavaField* vmdataClass; - ISOLATE_STATIC JavaMethod* setProperty; - ISOLATE_STATIC JavaMethod* initString; - ISOLATE_STATIC JavaMethod* getCallingClassLoader; - ISOLATE_STATIC JavaMethod* initConstructor; - ISOLATE_STATIC UserClassArray* constructorArrayClass; - ISOLATE_STATIC UserClassArray* constructorArrayAnnotation; - ISOLATE_STATIC UserClass* newConstructor; - ISOLATE_STATIC JavaField* constructorSlot; - ISOLATE_STATIC JavaMethod* initMethod; - ISOLATE_STATIC JavaMethod* initField; - ISOLATE_STATIC UserClassArray* methodArrayClass; - ISOLATE_STATIC UserClassArray* fieldArrayClass; - ISOLATE_STATIC UserClass* newMethod; - ISOLATE_STATIC UserClass* newField; - ISOLATE_STATIC JavaField* methodSlot; - ISOLATE_STATIC JavaField* fieldSlot; - ISOLATE_STATIC UserClassArray* classArrayClass; - ISOLATE_STATIC JavaMethod* loadInClassLoader; - ISOLATE_STATIC JavaMethod* initVMThrowable; - ISOLATE_STATIC JavaField* vmDataVMThrowable; - ISOLATE_STATIC UserClass* newVMThrowable; - ISOLATE_STATIC JavaField* bufferAddress; - ISOLATE_STATIC JavaField* dataPointer32; - ISOLATE_STATIC JavaField* dataPointer64; - ISOLATE_STATIC UserClass* newPointer32; - ISOLATE_STATIC UserClass* newPointer64; - ISOLATE_STATIC UserClass* newDirectByteBuffer; - ISOLATE_STATIC JavaMethod* InitDirectByteBuffer; - ISOLATE_STATIC JavaField* vmdataClassLoader; - - ISOLATE_STATIC JavaField* boolValue; - ISOLATE_STATIC JavaField* byteValue; - ISOLATE_STATIC JavaField* shortValue; - ISOLATE_STATIC JavaField* charValue; - ISOLATE_STATIC JavaField* intValue; - ISOLATE_STATIC JavaField* longValue; - ISOLATE_STATIC JavaField* floatValue; - ISOLATE_STATIC JavaField* doubleValue; - - ISOLATE_STATIC UserClass* newStackTraceElement; - ISOLATE_STATIC UserClassArray* stackTraceArray; - ISOLATE_STATIC JavaMethod* initStackTraceElement; - - ISOLATE_STATIC void initialiseClasspath(JnjvmClassLoader* loader); - - ISOLATE_STATIC UserClass* voidClass; - ISOLATE_STATIC UserClass* boolClass; - ISOLATE_STATIC UserClass* byteClass; - ISOLATE_STATIC UserClass* shortClass; - ISOLATE_STATIC UserClass* charClass; - ISOLATE_STATIC UserClass* intClass; - ISOLATE_STATIC UserClass* floatClass; - ISOLATE_STATIC UserClass* doubleClass; - ISOLATE_STATIC UserClass* longClass; - - ISOLATE_STATIC UserClass* vmStackWalker; - - ISOLATE_STATIC UserClass* newThread; - ISOLATE_STATIC UserClass* newVMThread; - ISOLATE_STATIC JavaField* assocThread; - ISOLATE_STATIC JavaField* vmdataVMThread; - ISOLATE_STATIC JavaMethod* finaliseCreateInitialThread; - ISOLATE_STATIC JavaMethod* initVMThread; - ISOLATE_STATIC JavaMethod* runVMThread; - ISOLATE_STATIC JavaMethod* groupAddThread; - ISOLATE_STATIC JavaField* threadName; - ISOLATE_STATIC JavaField* groupName; - ISOLATE_STATIC JavaMethod* initGroup; - ISOLATE_STATIC JavaField* priority; - ISOLATE_STATIC JavaField* daemon; - ISOLATE_STATIC JavaField* group; - ISOLATE_STATIC JavaField* running; - ISOLATE_STATIC UserClass* threadGroup; - ISOLATE_STATIC JavaField* rootGroup; - ISOLATE_STATIC JavaField* vmThread; - ISOLATE_STATIC JavaMethod* uncaughtException; - ISOLATE_STATIC UserClass* inheritableThreadLocal; - - - ISOLATE_STATIC UserClass* InvocationTargetException; - ISOLATE_STATIC UserClass* ArrayStoreException; - ISOLATE_STATIC UserClass* ClassCastException; - ISOLATE_STATIC UserClass* IllegalMonitorStateException; - ISOLATE_STATIC UserClass* IllegalArgumentException; - ISOLATE_STATIC UserClass* InterruptedException; - ISOLATE_STATIC UserClass* IndexOutOfBoundsException; - ISOLATE_STATIC UserClass* ArrayIndexOutOfBoundsException; - ISOLATE_STATIC UserClass* NegativeArraySizeException; - ISOLATE_STATIC UserClass* NullPointerException; - ISOLATE_STATIC UserClass* SecurityException; - ISOLATE_STATIC UserClass* ClassFormatError; - ISOLATE_STATIC UserClass* ClassCircularityError; - ISOLATE_STATIC UserClass* NoClassDefFoundError; - ISOLATE_STATIC UserClass* UnsupportedClassVersionError; - ISOLATE_STATIC UserClass* NoSuchFieldError; - ISOLATE_STATIC UserClass* NoSuchMethodError; - ISOLATE_STATIC UserClass* InstantiationError; - ISOLATE_STATIC UserClass* InstantiationException; - ISOLATE_STATIC UserClass* IllegalAccessError; - ISOLATE_STATIC UserClass* IllegalAccessException; - ISOLATE_STATIC UserClass* VerifyError; - ISOLATE_STATIC UserClass* ExceptionInInitializerError; - ISOLATE_STATIC UserClass* LinkageError; - ISOLATE_STATIC UserClass* AbstractMethodError; - ISOLATE_STATIC UserClass* UnsatisfiedLinkError; - ISOLATE_STATIC UserClass* InternalError; - ISOLATE_STATIC UserClass* OutOfMemoryError; - ISOLATE_STATIC UserClass* StackOverflowError; - ISOLATE_STATIC UserClass* UnknownError; - ISOLATE_STATIC UserClass* ClassNotFoundException; - ISOLATE_STATIC UserClass* ArithmeticException; - - ISOLATE_STATIC JavaMethod* InitInvocationTargetException; - ISOLATE_STATIC JavaMethod* InitArrayStoreException; - ISOLATE_STATIC JavaMethod* InitClassCastException; - ISOLATE_STATIC JavaMethod* InitIllegalMonitorStateException; - ISOLATE_STATIC JavaMethod* InitIllegalArgumentException; - ISOLATE_STATIC JavaMethod* InitInterruptedException; - ISOLATE_STATIC JavaMethod* InitIndexOutOfBoundsException; - ISOLATE_STATIC JavaMethod* InitArrayIndexOutOfBoundsException; - ISOLATE_STATIC JavaMethod* InitNegativeArraySizeException; - ISOLATE_STATIC JavaMethod* InitNullPointerException; - ISOLATE_STATIC JavaMethod* InitSecurityException; - ISOLATE_STATIC JavaMethod* InitClassFormatError; - ISOLATE_STATIC JavaMethod* InitClassCircularityError; - ISOLATE_STATIC JavaMethod* InitNoClassDefFoundError; - ISOLATE_STATIC JavaMethod* InitUnsupportedClassVersionError; - ISOLATE_STATIC JavaMethod* InitNoSuchFieldError; - ISOLATE_STATIC JavaMethod* InitNoSuchMethodError; - ISOLATE_STATIC JavaMethod* InitInstantiationError; - ISOLATE_STATIC JavaMethod* InitInstantiationException; - ISOLATE_STATIC JavaMethod* InitIllegalAccessError; - ISOLATE_STATIC JavaMethod* InitIllegalAccessException; - ISOLATE_STATIC JavaMethod* InitVerifyError; - ISOLATE_STATIC JavaMethod* InitExceptionInInitializerError; - ISOLATE_STATIC JavaMethod* InitLinkageError; - ISOLATE_STATIC JavaMethod* InitAbstractMethodError; - ISOLATE_STATIC JavaMethod* InitUnsatisfiedLinkError; - ISOLATE_STATIC JavaMethod* InitInternalError; - ISOLATE_STATIC JavaMethod* InitOutOfMemoryError; - ISOLATE_STATIC JavaMethod* InitStackOverflowError; - ISOLATE_STATIC JavaMethod* InitUnknownError; - ISOLATE_STATIC JavaMethod* InitClassNotFoundException; - ISOLATE_STATIC JavaMethod* InitArithmeticException; - - ISOLATE_STATIC JavaMethod* IntToString; - - ISOLATE_STATIC JavaMethod* InitObject; - ISOLATE_STATIC JavaMethod* FinalizeObject; - - ISOLATE_STATIC JavaMethod* ErrorWithExcpNoClassDefFoundError; - ISOLATE_STATIC JavaMethod* ErrorWithExcpExceptionInInitializerError; - ISOLATE_STATIC JavaMethod* ErrorWithExcpInvocationTargetException; - - - - ISOLATE_STATIC UserClassArray* ArrayOfByte; - ISOLATE_STATIC UserClassArray* ArrayOfChar; - ISOLATE_STATIC UserClassArray* ArrayOfInt; - ISOLATE_STATIC UserClassArray* ArrayOfShort; - ISOLATE_STATIC UserClassArray* ArrayOfBool; - ISOLATE_STATIC UserClassArray* ArrayOfLong; - ISOLATE_STATIC UserClassArray* ArrayOfFloat; - ISOLATE_STATIC UserClassArray* ArrayOfDouble; - ISOLATE_STATIC UserClassArray* ArrayOfObject; - ISOLATE_STATIC UserClassArray* ArrayOfString; - - ISOLATE_STATIC UserClassPrimitive* OfByte; - ISOLATE_STATIC UserClassPrimitive* OfChar; - ISOLATE_STATIC UserClassPrimitive* OfInt; - ISOLATE_STATIC UserClassPrimitive* OfShort; - ISOLATE_STATIC UserClassPrimitive* OfBool; - ISOLATE_STATIC UserClassPrimitive* OfLong; - ISOLATE_STATIC UserClassPrimitive* OfFloat; - ISOLATE_STATIC UserClassPrimitive* OfDouble; - ISOLATE_STATIC UserClassPrimitive* OfVoid; - - ISOLATE_STATIC JavaField* methodClass; - ISOLATE_STATIC JavaField* fieldClass; - ISOLATE_STATIC JavaField* constructorClass; - - ISOLATE_STATIC JavaMethod* EnqueueReference; - ISOLATE_STATIC Class* newReference; - -private: - ISOLATE_STATIC void CreateJavaThread(Jnjvm* vm, JavaThread* myth, - const char* name, JavaObject* Group); - -public: - ISOLATE_STATIC void InitializeThreading(Jnjvm* vm); -}; - - -} // end namespace jnjvm - -#endif Modified: vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp?rev=73763&r1=73762&r2=73763&view=diff ============================================================================== --- vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp (original) +++ vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp Fri Jun 19 03:26:36 2009 @@ -31,6 +31,7 @@ #include "JavaTypes.h" #include "JavaUpcalls.h" #include "Jnjvm.h" +#include "LinkJavaRuntime.h" #include "LockedMap.h" #include "Reader.h" #include "Zip.h" Modified: vmkit/trunk/lib/Mvm/Compiler/JIT.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/Compiler/JIT.cpp?rev=73763&r1=73762&r2=73763&view=diff ============================================================================== --- vmkit/trunk/lib/Mvm/Compiler/JIT.cpp (original) +++ vmkit/trunk/lib/Mvm/Compiler/JIT.cpp Fri Jun 19 03:26:36 2009 @@ -24,7 +24,7 @@ #include #include #include - +#include #include "mvm/JIT.h" #include "mvm/Threads/Locks.h" @@ -57,6 +57,8 @@ globalModule = new llvm::Module("bootstrap module"); globalModuleProvider = new ExistingModuleProvider (globalModule); + InitializeNativeTarget(); + executionEngine = ExecutionEngine::createJIT(globalModuleProvider, 0, 0, level); Modified: vmkit/trunk/tools/jnjvm/Makefile URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tools/jnjvm/Makefile?rev=73763&r1=73762&r2=73763&view=diff ============================================================================== --- vmkit/trunk/tools/jnjvm/Makefile (original) +++ vmkit/trunk/tools/jnjvm/Makefile Fri Jun 19 03:26:36 2009 @@ -11,8 +11,8 @@ include $(LEVEL)/Makefile.config TOOLNAME = jnjvm -USEDLIBS = Allocator CommonThread Mvm MvmCompiler JnJVM Classpath JnjvmCompiler \ - $(GCLIB) +USEDLIBS = JnJVM.a Classpath.a JnjvmCompiler.a Allocator.a CommonThread.a \ + Mvm.a MvmCompiler.a $(GCLIB).a LINK_COMPONENTS = jit nativecodegen scalaropts instrumentation ipa ipo ifeq ($(ISOLATE_SHARING_BUILD), 1) Modified: vmkit/trunk/tools/llcj/libjnjvm/Makefile URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tools/llcj/libjnjvm/Makefile?rev=73763&r1=73762&r2=73763&view=diff ============================================================================== --- vmkit/trunk/tools/llcj/libjnjvm/Makefile (original) +++ vmkit/trunk/tools/llcj/libjnjvm/Makefile Fri Jun 19 03:26:36 2009 @@ -12,6 +12,6 @@ VMKIT_LIBRARYNAME = jnjvm VMKIT_BUILD_ARCHIVE = 1 -USEDLIBS = Allocator CommonThread Mvm JnJVM Classpath $(GCLIB) +USEDLIBS = JnJVM.a Classpath.a Allocator.a CommonThread.a Mvm.a $(GCLIB).a include $(LEVEL)/Makefile.common Modified: vmkit/trunk/tools/llcj/libjnjvmjit/Makefile URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tools/llcj/libjnjvmjit/Makefile?rev=73763&r1=73762&r2=73763&view=diff ============================================================================== --- vmkit/trunk/tools/llcj/libjnjvmjit/Makefile (original) +++ vmkit/trunk/tools/llcj/libjnjvmjit/Makefile Fri Jun 19 03:26:36 2009 @@ -12,7 +12,7 @@ VMKIT_LIBRARYNAME = jnjvmjit VMKIT_BUILD_ARCHIVE = 1 -USEDLIBS = Allocator CommonThread Mvm JnJVM Classpath $(GCLIB) MvmCompiler \ - JnjvmCompiler +USEDLIBS = JnJVM.a Classpath.a JnjvmCompiler.a Allocator.a CommonThread.a \ + Mvm.a $(GCLIB).a MvmCompiler.a include $(LEVEL)/Makefile.common Modified: vmkit/trunk/tools/n3-mono/Makefile URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tools/n3-mono/Makefile?rev=73763&r1=73762&r2=73763&view=diff ============================================================================== --- vmkit/trunk/tools/n3-mono/Makefile (original) +++ vmkit/trunk/tools/n3-mono/Makefile Fri Jun 19 03:26:36 2009 @@ -12,7 +12,8 @@ TOOLNAME = n3-mono LINK_COMPONENTS = jit nativecodegen scalaropts instrumentation ipa ipo -USEDLIBS = Allocator CommonThread Mvm MvmCompiler N3 $(GCLIB) Mono +USEDLIBS = N3.a Mono.a Allocator.a CommonThread.a Mvm.a MvmCompiler.a \ + $(GCLIB).a include $(LEVEL)/Makefile.common Modified: vmkit/trunk/tools/n3-pnetlib/Makefile URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tools/n3-pnetlib/Makefile?rev=73763&r1=73762&r2=73763&view=diff ============================================================================== --- vmkit/trunk/tools/n3-pnetlib/Makefile (original) +++ vmkit/trunk/tools/n3-pnetlib/Makefile Fri Jun 19 03:26:36 2009 @@ -12,7 +12,8 @@ TOOLNAME = n3-pnetlib LINK_COMPONENTS = jit nativecodegen scalaropts instrumentation ipa ipo -USEDLIBS = Allocator CommonThread Mvm MvmCompiler N3 $(GCLIB) PNetLib +USEDLIBS = N3.a PNetLib.a Allocator.a CommonThread.a Mvm.a MvmCompiler.a \ + $(GCLIB).a include $(LEVEL)/Makefile.common Modified: vmkit/trunk/tools/vmjc/Makefile URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tools/vmjc/Makefile?rev=73763&r1=73762&r2=73763&view=diff ============================================================================== --- vmkit/trunk/tools/vmjc/Makefile (original) +++ vmkit/trunk/tools/vmjc/Makefile Fri Jun 19 03:26:36 2009 @@ -13,8 +13,8 @@ EXTRA_DIST = libvmjc TOOLNAME = vmjc -USEDLIBS = Allocator CommonThread Mvm MvmCompiler JnJVM Classpath \ - JnjvmCompiler $(GCLIB) +USEDLIBS = JnJVM.a Classpath.a JnjvmCompiler.a Allocator.a CommonThread.a \ + Mvm.a MvmCompiler.a $(GCLIB).a LINK_COMPONENTS = jit nativecodegen scalaropts instrumentation ipa ipo bitwriter include $(LEVEL)/Makefile.common Modified: vmkit/trunk/tools/vmkit/Makefile URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tools/vmkit/Makefile?rev=73763&r1=73762&r2=73763&view=diff ============================================================================== --- vmkit/trunk/tools/vmkit/Makefile (original) +++ vmkit/trunk/tools/vmkit/Makefile Fri Jun 19 03:26:36 2009 @@ -11,20 +11,21 @@ include $(LEVEL)/Makefile.config TOOLNAME = vmkit -USEDLIBS = Allocator CommonThread Mvm MvmCompiler $(GCLIB) ifeq ($(WITH_JNJVM), 1) -USEDLIBS += JnJVM Classpath JnjvmCompiler +USEDLIBS += JnJVM.a Classpath.a JnjvmCompiler.a endif ifeq ($(ISOLATE_SHARING_BUILD), 1) - USEDLIBS += Isolate + USEDLIBS += Isolate.a endif ifeq ($(WITH_N3_PNETLIB), 1) - USEDLIBS += N3 PNetLib + USEDLIBS += N3.a PNetLib.a endif +USEDLIBS += Allocator.a CommonThread.a Mvm.a MvmCompiler.a $(GCLIB).a + LINK_COMPONENTS = jit nativecodegen scalaropts instrumentation ipa ipo include $(LEVEL)/Makefile.common From nicolas.geoffray at lip6.fr Fri Jun 19 01:29:43 2009 From: nicolas.geoffray at lip6.fr (Nicolas Geoffray) Date: Fri, 19 Jun 2009 08:29:43 -0000 Subject: [vmkit-commits] [vmkit] r73764 - /vmkit/trunk/lib/JnJVM/VMCore/LinkJavaRuntime.h Message-ID: <200906190829.n5J8TkEH027411@zion.cs.uiuc.edu> Author: geoffray Date: Fri Jun 19 03:29:18 2009 New Revision: 73764 URL: http://llvm.org/viewvc/llvm-project?rev=73764&view=rev Log: Forgot that file from the previous commit. Added: vmkit/trunk/lib/JnJVM/VMCore/LinkJavaRuntime.h Added: vmkit/trunk/lib/JnJVM/VMCore/LinkJavaRuntime.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/LinkJavaRuntime.h?rev=73764&view=auto ============================================================================== --- vmkit/trunk/lib/JnJVM/VMCore/LinkJavaRuntime.h (added) +++ vmkit/trunk/lib/JnJVM/VMCore/LinkJavaRuntime.h Fri Jun 19 03:29:18 2009 @@ -0,0 +1,143 @@ +//===--------------------- LinkJavaRuntime.h ------------------------------===// +//=== ------------- Reference all runtime functions -----------------------===// +// +// JnJVM +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#ifndef JNJVM_LINK_JAVA_RUNTIME_H +#define JNJVM_LINK_JAVA_RUNTIME_H + + +namespace jnjvm { + class CacheNode; + class JavaObject; + class UserClass; + class UserClassArray; + class UserCommonClass; + class UserConstantPool; + class JavaVirtualTable; + class JavaMethod; + class Jnjvm; +} + +using namespace jnjvm; + +extern "C" void* jnjvmInterfaceLookup(CacheNode* cache, JavaObject *obj); +extern "C" void* jnjvmVirtualFieldLookup(UserClass* caller, uint32 index); +extern "C" void* jnjvmStaticFieldLookup(UserClass* caller, uint32 index); +extern "C" void* jnjvmVirtualTableLookup(UserClass* caller, uint32 index, ...); +extern "C" void* jnjvmClassLookup(UserClass* caller, uint32 index); +extern "C" UserCommonClass* jnjvmRuntimeInitialiseClass(UserClass* cl); +extern "C" JavaObject* jnjvmRuntimeDelegatee(UserCommonClass* cl); +extern "C" JavaArray* jnjvmMultiCallNew(UserClassArray* cl, uint32 len, ...); +extern "C" UserClassArray* jnjvmGetArrayClass(UserCommonClass*, + UserClassArray**); +extern "C" void jnjvmJNIProceedPendingException(); +extern "C" void* jnjvmGetSJLJBuffer(); +extern "C" void jnjvmJavaObjectAquire(JavaObject* obj); +extern "C" void jnjvmJavaObjectRelease(JavaObject* obj); +extern "C" void jnjvmThrowException(JavaObject* obj); +extern "C" void jnjvmOverflowThinLock(JavaObject* obj); +extern "C" JavaObject* jnjvmNullPointerException(); +extern "C" JavaObject* jnjvmNegativeArraySizeException(sint32 val); +extern "C" JavaObject* jnjvmOutOfMemoryError(sint32 val); +extern "C" JavaObject* jnjvmStackOverflowError(); +extern "C" JavaObject* jnjvmArithmeticException(); +extern "C" JavaObject* jnjvmClassCastException(JavaObject* obj, + UserCommonClass* cl); +extern "C" JavaObject* jnjvmIndexOutOfBoundsException(JavaObject* obj, + sint32 index); +extern "C" JavaObject* jnjvmArrayStoreException(JavaVirtualTable* VT); +extern "C" void jnjvmThrowExceptionFromJIT(); +extern "C" void jnjvmPrintMethodStart(JavaMethod* meth); +extern "C" void jnjvmPrintMethodEnd(JavaMethod* meth); +extern "C" void jnjvmPrintExecution(uint32 opcode, uint32 index, + JavaMethod* meth); + + +#ifdef SERVICE +extern "C" void jnjvmServiceCallStart(Jnjvm* OldService, + Jnjvm* NewService); +extern "C" void jnjvmServiceCallStop(Jnjvm* OldService, + Jnjvm* NewService); +#endif + + + +#ifdef ISOLATE +extern "C" void* jnjvmStringLookup(UserClass* cl, uint32 index); + +#ifdef ISOLATE_SHARING +extern "C" void* jnjvmEnveloppeLookup(UserClass* cl, uint32 index); +extern "C" void* jnjvmStaticCtpLookup(UserClass* cl, uint32 index); +extern "C" UserConstantPool* jnjvmSpecialCtpLookup(UserConstantPool* ctpInfo, + uint32 index, + UserConstantPool** res); +#endif + +#endif + + +namespace { + struct ForceRuntimeLinking { + ForceRuntimeLinking() { + // We must reference the passes in such a way that compilers will not + // delete it all as dead code, even with whole program optimization, + // yet is effectively a NO-OP. As the compiler isn't smart enough + // to know that getenv() never returns -1, this will do the job. + if (std::getenv("bar") != (char*) -1) + return; + + (void) jnjvmInterfaceLookup(0, 0); + (void) jnjvmVirtualFieldLookup(0, 0); + (void) jnjvmStaticFieldLookup(0, 0); + (void) jnjvmVirtualTableLookup(0, 0); + (void) jnjvmClassLookup(0, 0); + (void) jnjvmRuntimeInitialiseClass(0); + (void) jnjvmRuntimeDelegatee(0); + (void) jnjvmMultiCallNew(0, 0); + (void) jnjvmGetArrayClass(0, 0); + (void) jnjvmJNIProceedPendingException(); + (void) jnjvmGetSJLJBuffer(); + (void) jnjvmJavaObjectAquire(0); + (void) jnjvmJavaObjectRelease(0); + (void) jnjvmThrowException(0); + (void) jnjvmOverflowThinLock(0); + (void) jnjvmNullPointerException(); + (void) jnjvmNegativeArraySizeException(0); + (void) jnjvmOutOfMemoryError(0); + (void) jnjvmStackOverflowError(); + (void) jnjvmArithmeticException(); + (void) jnjvmClassCastException(0, 0); + (void) jnjvmIndexOutOfBoundsException(0, 0); + (void) jnjvmArrayStoreException(0); + (void) jnjvmThrowExceptionFromJIT(); + (void) jnjvmPrintMethodStart(0); + (void) jnjvmPrintMethodEnd(0); + (void) jnjvmPrintExecution(0, 0, 0); +#ifdef SERVICE + (void) jnjvmServiceCallStart(0, 0); + (void) jnjvmServiceCallStop(0, 0); +#endif + +#ifdef ISOLATE + (void) jnjvmStringLookup(0, 0); + +#ifdef ISOLATE_SHARING + (void) jnjvmEnveloppeLookup(0, 0); + (void) jnjvmStaticCtpLookup(0, 0); + (void) jnjvmSpecialCtpLookup(0, 0, 0); +#endif + +#endif + } + } ForcePassLinking; // Force link by creating a global definition. +} + + + +#endif //JNJVM_LINK_JAVA_RUNTIME_H From nicolas.geoffray at lip6.fr Sun Jun 21 06:40:51 2009 From: nicolas.geoffray at lip6.fr (Nicolas Geoffray) Date: Sun, 21 Jun 2009 13:40:51 -0000 Subject: [vmkit-commits] [vmkit] r73852 - in /vmkit/trunk/tools/llcj: Makefile libjnjvm/ llcj.cpp Message-ID: <200906211340.n5LDepf2015056@zion.cs.uiuc.edu> Author: geoffray Date: Sun Jun 21 08:40:44 2009 New Revision: 73852 URL: http://llvm.org/viewvc/llvm-project?rev=73852&view=rev Log: Remove now unused directory. Removed: vmkit/trunk/tools/llcj/libjnjvm/ Modified: vmkit/trunk/tools/llcj/Makefile vmkit/trunk/tools/llcj/llcj.cpp Modified: vmkit/trunk/tools/llcj/Makefile URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tools/llcj/Makefile?rev=73852&r1=73851&r2=73852&view=diff ============================================================================== --- vmkit/trunk/tools/llcj/Makefile (original) +++ vmkit/trunk/tools/llcj/Makefile Sun Jun 21 08:40:44 2009 @@ -8,7 +8,7 @@ ##===----------------------------------------------------------------------===## LEVEL = ../.. -DIRS = libjnjvm libjnjvmjit +DIRS = libjnjvmjit include $(LEVEL)/Makefile.config Modified: vmkit/trunk/tools/llcj/llcj.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tools/llcj/llcj.cpp?rev=73852&r1=73851&r2=73852&view=diff ============================================================================== --- vmkit/trunk/tools/llcj/llcj.cpp (original) +++ vmkit/trunk/tools/llcj/llcj.cpp Sun Jun 21 08:40:44 2009 @@ -222,7 +222,7 @@ if (withJIT) { gccArgv[gccArgc++] = "-ljnjvmjit"; } else { - gccArgv[gccArgc++] = "-ljnjvm"; + gccArgv[gccArgc++] = "-lJnJVM"; } gccArgv[gccArgc++] = "-lvmjc"; gccArgv[gccArgc++] = "-lLLVMSupport"; From nicolas.geoffray at lip6.fr Sun Jun 21 06:55:52 2009 From: nicolas.geoffray at lip6.fr (Nicolas Geoffray) Date: Sun, 21 Jun 2009 13:55:52 -0000 Subject: [vmkit-commits] [vmkit] r73853 - in /vmkit/trunk/tools/llcj: Makefile libjnjvmjit/ llcj.cpp Message-ID: <200906211355.n5LDtqXB015474@zion.cs.uiuc.edu> Author: geoffray Date: Sun Jun 21 08:55:52 2009 New Revision: 73853 URL: http://llvm.org/viewvc/llvm-project?rev=73853&view=rev Log: Remove now unused directory. Removed: vmkit/trunk/tools/llcj/libjnjvmjit/ Modified: vmkit/trunk/tools/llcj/Makefile vmkit/trunk/tools/llcj/llcj.cpp Modified: vmkit/trunk/tools/llcj/Makefile URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tools/llcj/Makefile?rev=73853&r1=73852&r2=73853&view=diff ============================================================================== --- vmkit/trunk/tools/llcj/Makefile (original) +++ vmkit/trunk/tools/llcj/Makefile Sun Jun 21 08:55:52 2009 @@ -8,8 +8,6 @@ ##===----------------------------------------------------------------------===## LEVEL = ../.. -DIRS = libjnjvmjit - include $(LEVEL)/Makefile.config TOOLNAME = llcj Modified: vmkit/trunk/tools/llcj/llcj.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tools/llcj/llcj.cpp?rev=73853&r1=73852&r2=73853&view=diff ============================================================================== --- vmkit/trunk/tools/llcj/llcj.cpp (original) +++ vmkit/trunk/tools/llcj/llcj.cpp Sun Jun 21 08:55:52 2009 @@ -219,10 +219,9 @@ gccArgv[gccArgc++] = "-lm"; gccArgv[gccArgc++] = "-ldl"; gccArgv[gccArgc++] = "-lz"; + gccArgv[gccArgc++] = "-lJnJVM"; if (withJIT) { - gccArgv[gccArgc++] = "-ljnjvmjit"; - } else { - gccArgv[gccArgc++] = "-lJnJVM"; + gccArgv[gccArgc++] = "-lJnJVMCompiler"; } gccArgv[gccArgc++] = "-lvmjc"; gccArgv[gccArgc++] = "-lLLVMSupport"; From nicolas.geoffray at lip6.fr Mon Jun 22 07:23:58 2009 From: nicolas.geoffray at lip6.fr (Nicolas Geoffray) Date: Mon, 22 Jun 2009 14:23:58 -0000 Subject: [vmkit-commits] [vmkit] r73881 - in /vmkit/trunk: include/mvm/Threads/Locks.h include/mvm/Threads/Thread.h lib/Mvm/CommonThread/ctthread.cpp Message-ID: <200906221424.n5MEO1IK006477@zion.cs.uiuc.edu> Author: geoffray Date: Mon Jun 22 09:23:42 2009 New Revision: 73881 URL: http://llvm.org/viewvc/llvm-project?rev=73881&view=rev Log: Change the implementation of spin locks to optimize the case of SMP machines. Modified: vmkit/trunk/include/mvm/Threads/Locks.h vmkit/trunk/include/mvm/Threads/Thread.h vmkit/trunk/lib/Mvm/CommonThread/ctthread.cpp Modified: vmkit/trunk/include/mvm/Threads/Locks.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/mvm/Threads/Locks.h?rev=73881&r1=73880&r2=73881&view=diff ============================================================================== --- vmkit/trunk/include/mvm/Threads/Locks.h (original) +++ vmkit/trunk/include/mvm/Threads/Locks.h Mon Jun 22 09:23:42 2009 @@ -245,7 +245,6 @@ TFatLock* obj = TFatLock::allocate(O); uintptr_t val = ((uintptr_t)obj >> 1) | FatMask; loop: - uint32 count = 0; while (lock) { if (lock & FatMask) { #ifdef USE_GC_BOEHM @@ -253,7 +252,7 @@ #endif goto end; } - else mvm::Thread::yield(&count); + else mvm::Thread::yield(); } uintptr_t test = __sync_val_compare_and_swap((uintptr_t*)&lock, 0, val); @@ -350,13 +349,16 @@ SpinLock() { locked = 0; } - /// acquire - Acquire the spin lock, doing an active loop. When the lock - /// is already held, yield the processor. + /// acquire - Acquire the spin lock, doing an active loop. /// void acquire() { - uint32 count = 0; - while (llvm_atomic_cmp_swap_i8(&locked, 0, 1)) - mvm::Thread::yield(&count); + for (uint32 count = 0; count < 1000; ++count) { + uint8 res = __sync_val_compare_and_swap(&locked, 0, 1); + if (!res) return; + } + + while (__sync_val_compare_and_swap(&locked, 0, 1)) + mvm::Thread::yield(); } /// release - Release the spin lock. This must be called by the thread Modified: vmkit/trunk/include/mvm/Threads/Thread.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/mvm/Threads/Thread.h?rev=73881&r1=73880&r2=73881&view=diff ============================================================================== --- vmkit/trunk/include/mvm/Threads/Thread.h (original) +++ vmkit/trunk/include/mvm/Threads/Thread.h Mon Jun 22 09:23:42 2009 @@ -10,6 +10,8 @@ #ifndef MVM_THREAD_H #define MVM_THREAD_H +#include + #include "types.h" namespace mvm { @@ -101,12 +103,9 @@ /// yield - Yield the processor to another thread. /// - static void yield(void); - - /// yield - Yield the processor to another thread. If the thread has been - /// askink for yield already a number of times (n), then do a small sleep. - /// - static void yield(unsigned int* n); + static void yield(void) { + sched_yield(); + } /// kill - Kill the thread with the given pid by sending it a signal. /// Modified: vmkit/trunk/lib/Mvm/CommonThread/ctthread.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/CommonThread/ctthread.cpp?rev=73881&r1=73880&r2=73881&view=diff ============================================================================== --- vmkit/trunk/lib/Mvm/CommonThread/ctthread.cpp (original) +++ vmkit/trunk/lib/Mvm/CommonThread/ctthread.cpp Mon Jun 22 09:23:42 2009 @@ -23,21 +23,6 @@ using namespace mvm; -void Thread::yield() { - sched_yield(); -} - -void Thread::yield(unsigned int *c) { - if(++(*c) & 3) - sched_yield(); - else { - struct timespec ts; - ts.tv_sec = 0; - ts.tv_nsec = 2000; - nanosleep(&ts, 0); - } -} - int Thread::kill(void* tid, int signo) { return pthread_kill((pthread_t)tid, signo); } From nicolas.geoffray at lip6.fr Mon Jun 22 07:30:16 2009 From: nicolas.geoffray at lip6.fr (Nicolas Geoffray) Date: Mon, 22 Jun 2009 14:30:16 -0000 Subject: [vmkit-commits] [vmkit] r73882 - in /vmkit/trunk: include/mvm/Threads/Locks.h lib/Mvm/GCMmap2/gcthread.h Message-ID: <200906221430.n5MEUGif006798@zion.cs.uiuc.edu> Author: geoffray Date: Mon Jun 22 09:30:15 2009 New Revision: 73882 URL: http://llvm.org/viewvc/llvm-project?rev=73882&view=rev Log: Change the allocation lock to a spin lock. Modified: vmkit/trunk/include/mvm/Threads/Locks.h vmkit/trunk/lib/Mvm/GCMmap2/gcthread.h Modified: vmkit/trunk/include/mvm/Threads/Locks.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/mvm/Threads/Locks.h?rev=73882&r1=73881&r2=73882&view=diff ============================================================================== --- vmkit/trunk/include/mvm/Threads/Locks.h (original) +++ vmkit/trunk/include/mvm/Threads/Locks.h Mon Jun 22 09:30:15 2009 @@ -361,10 +361,14 @@ mvm::Thread::yield(); } + void lock() { acquire(); } + /// release - Release the spin lock. This must be called by the thread /// holding it. /// void release() { locked = 0; } + + void unlock() { release(); } }; Modified: vmkit/trunk/lib/Mvm/GCMmap2/gcthread.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/GCMmap2/gcthread.h?rev=73882&r1=73881&r2=73882&view=diff ============================================================================== --- vmkit/trunk/lib/Mvm/GCMmap2/gcthread.h (original) +++ vmkit/trunk/lib/Mvm/GCMmap2/gcthread.h Mon Jun 22 09:30:15 2009 @@ -18,7 +18,7 @@ class GCThread { /// _globalLock - Global lock for gcmalloc. - LockNormal _globalLock; + SpinLock _globalLock; /// _stackLock - Stack lock for synchronization. LockNormal _stackLock; From nicolas.geoffray at lip6.fr Thu Jun 25 06:20:10 2009 From: nicolas.geoffray at lip6.fr (Nicolas Geoffray) Date: Thu, 25 Jun 2009 13:20:10 -0000 Subject: [vmkit-commits] [vmkit] r74173 - /vmkit/trunk/include/mvm/Threads/Locks.h Message-ID: <200906251320.n5PDKEDL013603@zion.cs.uiuc.edu> Author: geoffray Date: Thu Jun 25 08:19:49 2009 New Revision: 74173 URL: http://llvm.org/viewvc/llvm-project?rev=74173&view=rev Log: PPC32 bugs when an atomic operation is done on a i8. Change to i32. Modified: vmkit/trunk/include/mvm/Threads/Locks.h Modified: vmkit/trunk/include/mvm/Threads/Locks.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/mvm/Threads/Locks.h?rev=74173&r1=74172&r2=74173&view=diff ============================================================================== --- vmkit/trunk/include/mvm/Threads/Locks.h (original) +++ vmkit/trunk/include/mvm/Threads/Locks.h Thu Jun 25 08:19:49 2009 @@ -342,7 +342,7 @@ /// locked - Is the spin lock locked? /// - uint8 locked; + uint32 locked; /// SpinLock - Initialize the lock as not being held. ///