[vmkit-commits] [vmkit] r186835 - Added AOT/JIT switch to indicate when we are compiling the garbage collector itself.

Koutheir Attouchi koutheir at gmail.com
Mon Jul 22 09:09:43 PDT 2013


Author: koutheir
Date: Mon Jul 22 11:09:42 2013
New Revision: 186835

URL: http://llvm.org/viewvc/llvm-project?rev=186835&view=rev
Log:
Added AOT/JIT switch to indicate when we are compiling the garbage collector itself.

Modified:
    vmkit/trunk/include/j3/J3Intrinsics.h
    vmkit/trunk/include/j3/JavaAOTCompiler.h
    vmkit/trunk/include/j3/JavaCompiler.h
    vmkit/trunk/include/j3/JavaJITCompiler.h
    vmkit/trunk/include/j3/JavaLLVMCompiler.h
    vmkit/trunk/include/vmkit/GC.h
    vmkit/trunk/include/vmkit/System.h
    vmkit/trunk/lib/j3/Compiler/J3Intrinsics.cpp
    vmkit/trunk/lib/j3/Compiler/JavaAOTCompiler.cpp
    vmkit/trunk/lib/j3/Compiler/JavaJIT.cpp
    vmkit/trunk/lib/j3/Compiler/JavaJITCompiler.cpp
    vmkit/trunk/lib/j3/Compiler/JavaLLVMCompiler.cpp
    vmkit/trunk/lib/j3/VMCore/JavaClass.h
    vmkit/trunk/lib/j3/VMCore/Jnjvm.cpp
    vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.cpp
    vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.h
    vmkit/trunk/lib/vmkit/CommonThread/ctthread.cpp
    vmkit/trunk/tools/vmjc/vmjc.cpp

Modified: vmkit/trunk/include/j3/J3Intrinsics.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/j3/J3Intrinsics.h?rev=186835&r1=186834&r2=186835&view=diff
==============================================================================
--- vmkit/trunk/include/j3/J3Intrinsics.h (original)
+++ vmkit/trunk/include/j3/J3Intrinsics.h Mon Jul 22 11:09:42 2013
@@ -127,10 +127,10 @@ public:
   llvm::Constant* OffsetDoYieldInThreadConstant;
   llvm::Constant* OffsetIsolateIDInThreadConstant;
   llvm::Constant* OffsetVMInThreadConstant;
-	llvm::Constant* OffsetThreadInMutatorThreadConstant;
+  llvm::Constant* OffsetThreadInMutatorThreadConstant;
   llvm::Constant* OffsetJNIInJavaThreadConstant;
   llvm::Constant* OffsetJavaExceptionInJavaThreadConstant;
-  
+
   llvm::Constant* OffsetClassInVTConstant;
   llvm::Constant* OffsetDepthInVTConstant;
   llvm::Constant* OffsetDisplayInVTConstant;

Modified: vmkit/trunk/include/j3/JavaAOTCompiler.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/j3/JavaAOTCompiler.h?rev=186835&r1=186834&r2=186835&view=diff
==============================================================================
--- vmkit/trunk/include/j3/JavaAOTCompiler.h (original)
+++ vmkit/trunk/include/j3/JavaAOTCompiler.h Mon Jul 22 11:09:42 2013
@@ -28,7 +28,8 @@ using vmkit::UTF8;
 class JavaAOTCompiler : public JavaLLVMCompiler {
 
 public:
-  JavaAOTCompiler(const std::string &ModuleID);
+  JavaAOTCompiler(
+    const std::string &ModuleID, bool compiling_garbage_collector = false);
   
   virtual bool isStaticCompiling() {
     return true;
@@ -38,8 +39,10 @@ public:
     return true;
   }
   
-  virtual JavaCompiler* Create(const std::string& ModuleID) {
-    return new JavaAOTCompiler(ModuleID);
+  virtual JavaCompiler* Create(
+	const std::string& ModuleID, bool compiling_garbage_collector = false)
+  {
+    return new JavaAOTCompiler(ModuleID, compiling_garbage_collector);
   }
   
   virtual void* materializeFunction(JavaMethod* meth, Class* customizeFor) {

Modified: vmkit/trunk/include/j3/JavaCompiler.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/j3/JavaCompiler.h?rev=186835&r1=186834&r2=186835&view=diff
==============================================================================
--- vmkit/trunk/include/j3/JavaCompiler.h (original)
+++ vmkit/trunk/include/j3/JavaCompiler.h Mon Jul 22 11:09:42 2013
@@ -35,8 +35,14 @@ class JavaCompiler {
 public:
   
   vmkit::BumpPtrAllocator allocator;
+  bool compilingGarbageCollector;
 
-  virtual JavaCompiler* Create(const std::string&) {
+  JavaCompiler(bool compiling_garbage_collector = false) :
+    compilingGarbageCollector(compiling_garbage_collector) {}
+
+  virtual JavaCompiler* Create(
+	const std::string&, bool compiling_garbage_collector = false)
+  {
     return this;
   }
   
@@ -50,6 +56,10 @@ public:
     return false;
   }
 
+  virtual bool isCompilingGarbageCollector() {
+	  return compilingGarbageCollector;
+  }
+
   virtual bool emitFunctionName() {
     return false;
   }

Modified: vmkit/trunk/include/j3/JavaJITCompiler.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/j3/JavaJITCompiler.h?rev=186835&r1=186834&r2=186835&view=diff
==============================================================================
--- vmkit/trunk/include/j3/JavaJITCompiler.h (original)
+++ vmkit/trunk/include/j3/JavaJITCompiler.h Mon Jul 22 11:09:42 2013
@@ -41,7 +41,8 @@ public:
   llvm::ExecutionEngine* executionEngine;
   llvm::GCModuleInfo* GCInfo;
 
-  JavaJITCompiler(const std::string &ModuleID);
+  JavaJITCompiler(
+	const std::string &ModuleID, bool compiling_garbage_collector = false);
   ~JavaJITCompiler();
   
   virtual bool isStaticCompiling() {
@@ -79,7 +80,8 @@ public:
                                    bool stat, llvm::BasicBlock* insert) = 0;
   virtual word_t getPointerOrStub(JavaMethod& meth, int type) = 0;
 
-  static JavaJITCompiler* CreateCompiler(const std::string& ModuleID);
+  static JavaJITCompiler* CreateCompiler(
+	const std::string& ModuleID, bool compiling_garbage_collector = false);
 };
 
 class JavaJ3LazyJITCompiler : public JavaJITCompiler {
@@ -89,11 +91,14 @@ public:
                                    bool stat, llvm::BasicBlock* insert);
   virtual word_t getPointerOrStub(JavaMethod& meth, int side);
   
-  virtual JavaCompiler* Create(const std::string& ModuleID) {
-    return new JavaJ3LazyJITCompiler(ModuleID);
+  virtual JavaCompiler* Create(
+	const std::string& ModuleID, bool compiling_garbage_collector = false)
+  {
+    return new JavaJ3LazyJITCompiler(ModuleID, compiling_garbage_collector);
   }
 
-  JavaJ3LazyJITCompiler(const std::string& ModuleID);
+  JavaJ3LazyJITCompiler(
+	const std::string& ModuleID, bool compiling_garbage_collector = false);
 };
 
 } // end namespace j3

Modified: vmkit/trunk/include/j3/JavaLLVMCompiler.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/j3/JavaLLVMCompiler.h?rev=186835&r1=186834&r2=186835&view=diff
==============================================================================
--- vmkit/trunk/include/j3/JavaLLVMCompiler.h (original)
+++ vmkit/trunk/include/j3/JavaLLVMCompiler.h Mon Jul 22 11:09:42 2013
@@ -84,7 +84,8 @@ private:
   llvm::DenseMap<llvm::FunctionType*, llvm::Function*> staticAPs;
 
 public:
-  JavaLLVMCompiler(const std::string &ModuleID);
+  JavaLLVMCompiler(
+    const std::string &ModuleID, bool compiling_garbage_collector = false);
   
   virtual bool isStaticCompiling() = 0;
   virtual bool emitFunctionName() = 0;
@@ -123,7 +124,7 @@ public:
     cooperativeGC = false;
   }
  
-  virtual JavaCompiler* Create(const std::string& ModuleID) = 0;
+  virtual JavaCompiler* Create(const std::string& ModuleID, bool compiling_garbage_collector = false) = 0;
   
   virtual ~JavaLLVMCompiler();
 

Modified: vmkit/trunk/include/vmkit/GC.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/vmkit/GC.h?rev=186835&r1=186834&r2=186835&view=diff
==============================================================================
--- vmkit/trunk/include/vmkit/GC.h (original)
+++ vmkit/trunk/include/vmkit/GC.h Mon Jul 22 11:09:42 2013
@@ -24,7 +24,6 @@ public:
 };
 
 class gcRoot {
-	private:
 public:
   word_t& header(){return toHeader()->_header; }
   inline gcHeader* toHeader() { return (gcHeader*)((uintptr_t)this - gcHeader::hiddenHeaderSize()); }

Modified: vmkit/trunk/include/vmkit/System.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/vmkit/System.h?rev=186835&r1=186834&r2=186835&view=diff
==============================================================================
--- vmkit/trunk/include/vmkit/System.h (original)
+++ vmkit/trunk/include/vmkit/System.h Mon Jul 22 11:09:42 2013
@@ -17,7 +17,6 @@
 #include <stdint.h>
 #include <unistd.h>
 
-
 #if defined(__linux__) || defined(__FreeBSD__)
 #define LINUX_OS 1
 #elif defined(__APPLE__)
@@ -93,7 +92,7 @@ const word_t kVmkitThreadMask = 0xF00000
   const word_t kGCMemoryStart = 0x50000000;
 #endif
 
-const word_t kGCMemorySize = 0x30000000;  
+const word_t kGCMemorySize = 0x30000000;
 
 #define TRY { vmkit::ExceptionBuffer __buffer__; if (!SETJMP(__buffer__.buffer))
 #define CATCH else

Modified: vmkit/trunk/lib/j3/Compiler/J3Intrinsics.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/Compiler/J3Intrinsics.cpp?rev=186835&r1=186834&r2=186835&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/Compiler/J3Intrinsics.cpp (original)
+++ vmkit/trunk/lib/j3/Compiler/J3Intrinsics.cpp Mon Jul 22 11:09:42 2013
@@ -162,10 +162,10 @@ void J3Intrinsics::init(llvm::Module* mo
   OffsetIsolateIDInThreadConstant =         ConstantInt::get(Type::getInt32Ty(Context), 1);
   OffsetVMInThreadConstant =                ConstantInt::get(Type::getInt32Ty(Context), 2);
   OffsetDoYieldInThreadConstant =           ConstantInt::get(Type::getInt32Ty(Context), 4);
-	OffsetThreadInMutatorThreadConstant =     ConstantInt::get(Type::getInt32Ty(Context), 0);
+  OffsetThreadInMutatorThreadConstant =     ConstantInt::get(Type::getInt32Ty(Context), 0);
   OffsetJNIInJavaThreadConstant =           ConstantInt::get(Type::getInt32Ty(Context), 1);
   OffsetJavaExceptionInJavaThreadConstant = ConstantInt::get(Type::getInt32Ty(Context), 2);
-  
+
   ClassReadyConstant = ConstantInt::get(Type::getInt8Ty(Context), ready);
   
   InterfaceLookupFunction = module->getFunction("j3InterfaceLookup");

Modified: vmkit/trunk/lib/j3/Compiler/JavaAOTCompiler.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/Compiler/JavaAOTCompiler.cpp?rev=186835&r1=186834&r2=186835&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/Compiler/JavaAOTCompiler.cpp (original)
+++ vmkit/trunk/lib/j3/Compiler/JavaAOTCompiler.cpp Mon Jul 22 11:09:42 2013
@@ -1832,8 +1832,9 @@ Constant* JavaAOTCompiler::CreateConstan
   return Array;
 }
 
-JavaAOTCompiler::JavaAOTCompiler(const std::string& ModuleID) :
-  JavaLLVMCompiler(ModuleID) {
+JavaAOTCompiler::JavaAOTCompiler(
+  const std::string& ModuleID, bool compiling_garbage_collector) :
+  JavaLLVMCompiler(ModuleID, compiling_garbage_collector) {
 
   std::string Error;
   const Target* TheTarget(TargetRegistry::lookupTarget(

Modified: vmkit/trunk/lib/j3/Compiler/JavaJIT.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/Compiler/JavaJIT.cpp?rev=186835&r1=186834&r2=186835&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/Compiler/JavaJIT.cpp (original)
+++ vmkit/trunk/lib/j3/Compiler/JavaJIT.cpp Mon Jul 22 11:09:42 2013
@@ -81,10 +81,10 @@ void JavaJIT::checkYieldPoint() {
   if (!TheCompiler->useCooperativeGC()) return;
   Value* YieldPtr = getDoYieldPtr(getMutatorThreadPtr());
 
-  Value* Yield = new LoadInst(YieldPtr, "", currentBlock);
+  Value* Yield = new LoadInst(YieldPtr, "yield", currentBlock);
 
-  BasicBlock* continueBlock = createBasicBlock("After safe point");
-  BasicBlock* yieldBlock = createBasicBlock("In safe point");
+  BasicBlock* continueBlock = createBasicBlock("afterSafePoint");
+  BasicBlock* yieldBlock = createBasicBlock("inSafePoint");
   BranchInst::Create(yieldBlock, continueBlock, Yield, currentBlock);
 
   currentBlock = yieldBlock;
@@ -1134,7 +1134,7 @@ llvm::Function* JavaJIT::javaCompile() {
     jmpBuffer = new AllocaInst(ArrayType::get(Type::getInt8Ty(*llvmContext), sizeof(vmkit::ExceptionBuffer)), "", currentBlock);
     jmpBuffer = new BitCastInst(jmpBuffer, intrinsics->ptrType, "exceptionSavePoint", currentBlock);
   }
-  
+
   reader.cursor = start;
   exploreOpcodes(reader, codeLen);
  
@@ -1207,7 +1207,7 @@ llvm::Function* JavaJIT::javaCompile() {
   if (returnValue != NULL) {
     new StoreInst(endNode, returnValue, currentBlock);
   }
-  
+
   if (isSynchro(compilingMethod->access)) {
     endSynchronize();
   }
@@ -1674,7 +1674,7 @@ void JavaJIT::invokeSpecial(uint16 index
   } else {
     val = invoke(func, args, "", currentBlock);
   }
-  
+
   Type* retType = virtualType->getReturnType();
   if (retType != Type::getVoidTy(*llvmContext)) {
     if (retType == intrinsics->JavaObjectType) {

Modified: vmkit/trunk/lib/j3/Compiler/JavaJITCompiler.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/Compiler/JavaJITCompiler.cpp?rev=186835&r1=186834&r2=186835&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/Compiler/JavaJITCompiler.cpp (original)
+++ vmkit/trunk/lib/j3/Compiler/JavaJITCompiler.cpp Mon Jul 22 11:09:42 2013
@@ -152,8 +152,9 @@ Constant* JavaJITCompiler::getNativeFunc
   return ConstantExpr::getIntToPtr(CI, valPtrType);
 }
 
-JavaJITCompiler::JavaJITCompiler(const std::string &ModuleID) :
-  JavaLLVMCompiler(ModuleID), listener(this) {
+JavaJITCompiler::JavaJITCompiler(
+  const std::string &ModuleID, bool compiling_garbage_collector) :
+  JavaLLVMCompiler(ModuleID, compiling_garbage_collector), listener(this) {
 
   EmitFunctionName = false;
   GCInfo = NULL;
@@ -440,10 +441,13 @@ bool JavaJ3LazyJITCompiler::needsCallbac
           getMethod(meth, customizeFor)->hasExternalWeakLinkage());
 }
 
-JavaJ3LazyJITCompiler::JavaJ3LazyJITCompiler(const std::string& ModuleID)
-    : JavaJITCompiler(ModuleID) {}
+JavaJ3LazyJITCompiler::JavaJ3LazyJITCompiler(
+  const std::string& ModuleID, bool compiling_garbage_collector) :
+  JavaJITCompiler(ModuleID, compiling_garbage_collector) {}
 
 
-JavaJITCompiler* JavaJITCompiler::CreateCompiler(const std::string& ModuleID) {
-  return new JavaJ3LazyJITCompiler(ModuleID);
+JavaJITCompiler* JavaJITCompiler::CreateCompiler(
+  const std::string& ModuleID, bool compiling_garbage_collector)
+{
+  return new JavaJ3LazyJITCompiler(ModuleID, compiling_garbage_collector);
 }

Modified: vmkit/trunk/lib/j3/Compiler/JavaLLVMCompiler.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/Compiler/JavaLLVMCompiler.cpp?rev=186835&r1=186834&r2=186835&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/Compiler/JavaLLVMCompiler.cpp (original)
+++ vmkit/trunk/lib/j3/Compiler/JavaLLVMCompiler.cpp Mon Jul 22 11:09:42 2013
@@ -25,7 +25,9 @@ using namespace llvm;
 
 namespace j3 {
 
-JavaLLVMCompiler::JavaLLVMCompiler(const std::string& str) :
+JavaLLVMCompiler::JavaLLVMCompiler(
+  const std::string& str, bool compiling_garbage_collector) :
+  JavaCompiler(compiling_garbage_collector),
   TheModule(new llvm::Module(str, *(new LLVMContext()))),
   DebugFactory(new DIBuilder(*TheModule)) {
 

Modified: vmkit/trunk/lib/j3/VMCore/JavaClass.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JavaClass.h?rev=186835&r1=186834&r2=186835&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/JavaClass.h (original)
+++ vmkit/trunk/lib/j3/VMCore/JavaClass.h Mon Jul 22 11:09:42 2013
@@ -1009,7 +1009,6 @@ public:
   /// with the given class loader.
   ///
   JavaObject* getReturnType(JnjvmClassLoader* loader);
-  
 
 //===----------------------------------------------------------------------===//
 //
@@ -1046,7 +1045,6 @@ private:
 	template<class TYPE, class FUNC_TYPE_VIRTUAL_BUF>
 	TYPE invokeVirtualBuf(Jnjvm* vm, UserClass* cl, JavaObject* obj, void* buf) __attribute__((noinline)) {
 		llvm_gcroot(obj, 0);
-		verifyNull(obj);
 
 		UserCommonClass* theClass = JavaObject::getClass(obj);
 		UserClass* objCl = theClass->isArray() ? theClass->super : theClass->asClass();

Modified: vmkit/trunk/lib/j3/VMCore/Jnjvm.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/Jnjvm.cpp?rev=186835&r1=186834&r2=186835&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/Jnjvm.cpp (original)
+++ vmkit/trunk/lib/j3/VMCore/Jnjvm.cpp Mon Jul 22 11:09:42 2013
@@ -1351,7 +1351,6 @@ Jnjvm::Jnjvm(vmkit::BumpPtrAllocator& Al
              JnjvmBootstrapLoader* loader) : 
   VirtualMachine(Alloc, frames), lockSystem(Alloc)
 {
-
   classpath = getenv("CLASSPATH");
   if (classpath == NULL) classpath = ".";
   
@@ -1381,13 +1380,6 @@ ArrayUInt16* Jnjvm::asciizToArray(const
 }
 
 void Jnjvm::startCollection() {
-
-#if DEBUG > 0
-	printf("Start Collection\n");
-	vmkit::Thread::get()->printBacktrace();
-	fflush(stdout);
-#endif
-
   finalizerThread->FinalizationQueueLock.acquire();
   referenceThread->ToEnqueueLock.acquire();
   referenceThread->SoftReferencesQueue.acquire();
@@ -1403,12 +1395,6 @@ void Jnjvm::endCollection() {
   referenceThread->PhantomReferencesQueue.release();
   finalizerThread->FinalizationCond.broadcast();
   referenceThread->EnqueueCond.broadcast();
-
-#if DEBUG > 0
-  printf("End Collection\n");
-  vmkit::Thread::get()->printBacktrace();
-  fflush(stdout);
-#endif
 }
   
 void Jnjvm::scanWeakReferencesQueue(word_t closure) {

Modified: vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.cpp?rev=186835&r1=186834&r2=186835&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.cpp (original)
+++ vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.cpp Mon Jul 22 11:09:42 2013
@@ -217,15 +217,17 @@ JnjvmClassLoader::JnjvmClassLoader(vmkit
 {
 }
 
-JnjvmClassLoader::JnjvmClassLoader(vmkit::BumpPtrAllocator& Alloc,
-                                   JnjvmClassLoader& JCL, JavaObject* loader,
-                                   VMClassLoader* vmdata,
-                                   Jnjvm* VM) : allocator(Alloc)
+JnjvmClassLoader::JnjvmClassLoader(
+	vmkit::BumpPtrAllocator& Alloc, JnjvmClassLoader& JCL, JavaObject* loader,
+	VMClassLoader* vmdata, Jnjvm* VM) :
+	allocator(Alloc)
 {
   llvm_gcroot(loader, 0);
   llvm_gcroot(vmdata, 0);
   bootstrapLoader = JCL.bootstrapLoader;
-  TheCompiler = bootstrapLoader->getCompiler()->Create("Applicative loader");
+  TheCompiler = bootstrapLoader->getCompiler()->Create(
+	"Applicative loader",
+	bootstrapLoader->getCompiler()->isCompilingGarbageCollector());
   
   hashUTF8 = new(allocator, "UTF8Map") UTF8Map(allocator);
   classes = new(allocator, "ClassMap") ClassMap();
@@ -809,6 +811,21 @@ Signdef* JnjvmClassLoader::constructSign
   return res;
 }
 
+JnjvmClassLoader* JnjvmClassLoader::createForJavaObject(
+  Jnjvm* vm, JavaObject* loader, VMClassLoader**vmdata)
+{
+	llvm_gcroot(loader, 0);
+
+    *vmdata = VMClassLoader::allocate();
+    vmkit::BumpPtrAllocator* A = new vmkit::BumpPtrAllocator();
+
+    JnjvmClassLoader* JCL = new(*A, "Class loader")
+    	JnjvmClassLoader(*A, *vm->bootstrapLoader, loader, *vmdata, vm);
+
+    Classpath* upcalls = vm->bootstrapLoader->upcalls;
+    upcalls->vmdataClassLoader->setInstanceObjectField(loader, *vmdata);
+    return JCL;
+}
 
 JnjvmClassLoader*
 JnjvmClassLoader::getJnjvmLoaderFromJavaObject(JavaObject* loader, Jnjvm* vm) {
@@ -834,29 +851,23 @@ JnjvmClassLoader::getJnjvmLoaderFromJava
     vmdata = 
       (VMClassLoader*)(upcalls->vmdataClassLoader->getInstanceObjectField(loader));
     if (!vmdata || !VMClassLoader::isVMClassLoader(vmdata)) {
-      vmdata = VMClassLoader::allocate();
-      vmkit::BumpPtrAllocator* A = new vmkit::BumpPtrAllocator();
-      JCL = new(*A, "Class loader") JnjvmClassLoader(*A, *vm->bootstrapLoader,
-                                                     loader, vmdata, vm);
-      upcalls->vmdataClassLoader->setInstanceObjectField(loader, (JavaObject*)vmdata);
+      JCL = JnjvmClassLoader::createForJavaObject(vm, loader, &vmdata);
     }
     JavaObject::release(loader);
   }
   else if (!VMClassLoader::isVMClassLoader(vmdata)) {
 	JavaObject::acquire(loader);
-	vmdata = VMClassLoader::allocate();
-	vmkit::BumpPtrAllocator* A = new vmkit::BumpPtrAllocator();
-	JCL = new(*A, "Class loader") JnjvmClassLoader(*A, *vm->bootstrapLoader,
-												   loader, vmdata, vm);
-	upcalls->vmdataClassLoader->setInstanceObjectField(loader, (JavaObject*)vmdata);
+	JCL = JnjvmClassLoader::createForJavaObject(vm, loader, &vmdata);
 	JavaObject::release(loader);
   } else {
     JCL = vmdata->getClassLoader();
     assert(JCL->javaLoader == loader);
   }
+
   if (!JCL) {
 	  assert( vmdata->getClassLoader() == JCL && "Loader is not equal to stored value");
-	  fprintf(stderr, "Error in method %s, %d because condition 1: %d\n", __FILE__, __LINE__, (vmdata == NULL || !VMClassLoader::isVMClassLoader(vmdata)));
+	  fprintf(stderr, "Error in method %s, %d because condition 1: %d\n",
+		__FILE__, __LINE__, (vmdata == NULL || !VMClassLoader::isVMClassLoader(vmdata)));
   }
   return JCL;
 }

Modified: vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.h?rev=186835&r1=186834&r2=186835&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.h (original)
+++ vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.h Mon Jul 22 11:09:42 2013
@@ -56,7 +56,9 @@ typedef TJavaArray<JavaObject*> ArrayObj
 /// its own tables (signatures, UTF8, types) which are mapped to a single
 /// table for non-isolate environments.
 ///
-class JnjvmClassLoader : public vmkit::PermanentObject {
+class JnjvmClassLoader :
+	public vmkit::PermanentObject
+{
 private:
 
   /// isolate - Which isolate defined me? Null for the bootstrap class loader.
@@ -173,6 +175,8 @@ public:
   /// of the given class loader.
   ///
   static JnjvmClassLoader* getJnjvmLoaderFromJavaObject(JavaObject*, Jnjvm *vm);
+  static JnjvmClassLoader* createForJavaObject(
+    Jnjvm* vm, JavaObject* loader, VMClassLoader**vmdata);
   
   /// getJavaClassLoader - Return the Java representation of this class loader.
   ///

Modified: vmkit/trunk/lib/vmkit/CommonThread/ctthread.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/vmkit/CommonThread/ctthread.cpp?rev=186835&r1=186834&r2=186835&view=diff
==============================================================================
--- vmkit/trunk/lib/vmkit/CommonThread/ctthread.cpp (original)
+++ vmkit/trunk/lib/vmkit/CommonThread/ctthread.cpp Mon Jul 22 11:09:42 2013
@@ -282,7 +282,7 @@ public:
     word_t ptr = kThreadStart;
 
     uint32 flags = MAP_PRIVATE | MAP_ANON | MAP_FIXED;
-    baseAddr = (word_t)mmap((void*)ptr, STACK_SIZE * NR_THREADS, 
+    baseAddr = (word_t)mmap((void*)ptr, STACK_SIZE * NR_THREADS,
                                PROT_READ | PROT_WRITE, flags, -1, 0);
 
     if (baseAddr == (word_t) MAP_FAILED) {

Modified: vmkit/trunk/tools/vmjc/vmjc.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tools/vmjc/vmjc.cpp?rev=186835&r1=186834&r2=186835&view=diff
==============================================================================
--- vmkit/trunk/tools/vmjc/vmjc.cpp (original)
+++ vmkit/trunk/tools/vmjc/vmjc.cpp Mon Jul 22 11:09:42 2013
@@ -125,7 +125,15 @@ int main(int argc, char **argv) {
   vmkit::VmkitModule::initialise(argc, argv);
   vmkit::Collector::initialise(argc, argv);
 
-  JavaAOTCompiler* Comp = new JavaAOTCompiler("AOT");
+  // WARNING: This is a silly method to discover that we are compiling MMTk.
+  // Please change to anything more deterministic.
+  bool compilingMMTk = (
+	DisableExceptions &&
+	DisableCooperativeGC &&
+	DisableStubs &&
+	AssumeCompiled);
+
+  JavaAOTCompiler* Comp = new JavaAOTCompiler("AOT", compilingMMTk);
 
   vmkit::BumpPtrAllocator allocator;
   JnjvmBootstrapLoader* loader = new(allocator, "Bootstrap loader")





More information about the vmkit-commits mailing list