[vmkit-commits] [vmkit] r63299 - in /vmkit/trunk/lib: JnJVM/VMCore/JavaClass.cpp JnJVM/VMCore/JavaClass.h JnJVM/VMCore/JavaConstantPool.h JnJVM/VMCore/Jnjvm.cpp JnJVM/VMCore/JnjvmModule.cpp JnJVM/VMCore/JnjvmModule.h JnJVM/VMCore/LockedMap.h Mvm/BoehmGC/MvmGC.h Mvm/BoehmGC/gc.cpp

Nicolas Geoffray nicolas.geoffray at lip6.fr
Thu Jan 29 00:57:54 PST 2009


Author: geoffray
Date: Thu Jan 29 02:57:54 2009
New Revision: 63299

URL: http://llvm.org/viewvc/llvm-project?rev=63299&view=rev
Log:
Fixes for using Boehm's GC.


Modified:
    vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp
    vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h
    vmkit/trunk/lib/JnJVM/VMCore/JavaConstantPool.h
    vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp
    vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp
    vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.h
    vmkit/trunk/lib/JnJVM/VMCore/LockedMap.h
    vmkit/trunk/lib/Mvm/BoehmGC/MvmGC.h
    vmkit/trunk/lib/Mvm/BoehmGC/gc.cpp

Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp?rev=63299&r1=63298&r2=63299&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp Thu Jan 29 02:57:54 2009
@@ -706,7 +706,11 @@
 }
 
 void* UserClass::allocateStaticInstance(Jnjvm* vm) {
+#ifdef USE_GC_BOEHM
+  void* val = GC_MALLOC(getStaticSize());
+#else
   void* val = classLoader->allocator.Allocate(getStaticSize());
+#endif
   setStaticInstance(val);
   return val;
 }

Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h?rev=63299&r1=63298&r2=63299&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h Thu Jan 29 02:57:54 2009
@@ -362,6 +362,11 @@
   //
   static UserCommonClass* resolvedImplClass(Jnjvm* vm, JavaObject* delegatee,
                                             bool doClinit);
+#ifdef USE_GC_BOEHM
+  void* operator new(size_t sz, mvm::BumpPtrAllocator& allocator) {
+    return GC_MALLOC(sz);
+  }
+#endif
 };
 
 /// ClassPrimitive - This class represents internal classes for primitive

Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaConstantPool.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaConstantPool.h?rev=63299&r1=63298&r2=63299&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaConstantPool.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaConstantPool.h Thu Jan 29 02:57:54 2009
@@ -259,7 +259,7 @@
 
   /// ~JavaConstantPool - Delete the constant pool.
   ///
-  ~JavaConstantPool() {}  
+  ~JavaConstantPool() {}
 };
 
 } // end namespace jnjvm

Modified: vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp?rev=63299&r1=63298&r2=63299&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp Thu Jan 29 02:57:54 2009
@@ -905,8 +905,8 @@
       upcalls->uncaughtException->invokeIntSpecial(this, upcalls->threadGroup,
                                                    group, obj, exc);
     }catch(...) {
-      printf("Even uncaught exception throwed an exception!\n");
-      assert(0);
+      fprintf(stderr, "Even uncaught exception throwed an exception!\n");
+      abort();
     }
   }
 }
@@ -1049,8 +1049,8 @@
 
   throwable = upcalls->newThrowable;
  
-  for (std::vector<JavaString*>::iterator i = loader->strings.begin(),
-       e = loader->strings.end(); i != e; ++i) {
+  for (std::vector<JavaString*, gc_allocator<JavaString*> >::iterator i = 
+       loader->strings.begin(), e = loader->strings.end(); i != e; ++i) {
     hashStr.insert(*i);
   }
 

Modified: vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp?rev=63299&r1=63298&r2=63299&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp Thu Jan 29 02:57:54 2009
@@ -516,6 +516,7 @@
 #endif
 
 
+#ifdef WITH_TRACER
 llvm::Function* JnjvmModule::makeTracer(Class* cl, bool stat) {
   
   LLVMClassInfo* LCI = (LLVMClassInfo*)getClassInfo(cl);
@@ -598,6 +599,7 @@
 
   return func;
 }
+#endif
 
 Constant* JnjvmModule::CreateConstantForJavaObject(CommonClass* cl) {
   const StructType* STy = 
@@ -1194,11 +1196,16 @@
   ClassElts.push_back(Constant::getNullValue(ptrType));
 
   // staticTracer
-  Function* F = makeTracer(cl, true);
   const Type* FTy = STy->getContainedType(STy->getNumContainedTypes() - 1);
+#ifdef WITH_TRACER
+  Function* F = makeTracer(cl, true);
   Constant* staticTracer = ConstantExpr::getCast(Instruction::BitCast, F, FTy);
+#else
+  Constant* staticTracer = ConstantExpr::getNullValue(FTy);
+#endif
   ClassElts.push_back(staticTracer);
 
+
   return ConstantStruct::get(STy, ClassElts);
 }
 
@@ -1268,10 +1275,14 @@
   Elemts.push_back(N);
   
   // Tracer
+#ifdef WITH_TRACER
   Function* Tracer = makeTracer(classDef, false);
   Elemts.push_back(Tracer ? 
       ConstantExpr::getCast(Instruction::BitCast, Tracer, PTy) : N);
-  
+#else
+  Elemts.push_back(N);
+#endif
+
   // Printer
   Elemts.push_back(ConstantExpr::getBitCast(ObjectPrinter, PTy));
   
@@ -1327,8 +1338,8 @@
 
       // Special handling for finalize method. Don't put a finalizer
       // if there is none, or if it is empty.
-      if (meth.offset == 0 && !staticCompilation) {
-#ifdef ISOLATE_SHARING
+      if (meth.offset == 0) {
+#if defined(ISOLATE_SHARING) || defined(USE_GC_BOEHM)
         ((void**)VT)[0] = 0;
 #else
         JnjvmClassLoader* loader = cl->classLoader;
@@ -1347,8 +1358,9 @@
           }
         }
 #endif
+      } else {
+        ((void**)VT)[meth.offset] = EE->getPointerToFunctionOrStub(func);
       }
-      ((void**)VT)[meth.offset] = EE->getPointerToFunctionOrStub(func);
     }
 
 #ifdef WITH_TRACER
@@ -1417,6 +1429,7 @@
       if (!classDef->virtualVT) {
         Mod->makeVT((Class*)classDef);
       } else {
+#ifdef WITH_TRACER
         // So the class is vmjc'ed. Create the virtual tracer.
         Function* func = Function::Create(JnjvmModule::MarkAndTraceType,
                                           GlobalValue::ExternalLinkage,
@@ -1425,6 +1438,7 @@
         void* ptr = ((void**)classDef->virtualVT)[VT_TRACER_OFFSET];
         Mod->executionEngine->addGlobalMapping(func, ptr);
         virtualTracerFunction = func;
+#endif
       }
     } else {
       Mod->makeVT(classDef);
@@ -1462,13 +1476,14 @@
     
     uint64 size = Mod->getTypeSize(structType);
     cl->staticSize = size;
-    
+#ifdef WITH_TRACER
     if (!Mod->isStaticCompiling()) {
       Function* F = Mod->makeTracer(cl, true);
       cl->staticTracer = (void (*)(void*)) (uintptr_t)
         Mod->executionEngine->getPointerToFunction(F);
       F->deleteBody();
     }
+#endif
   }
   return staticType;
 }

Modified: vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.h?rev=63299&r1=63298&r2=63299&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.h Thu Jan 29 02:57:54 2009
@@ -229,8 +229,10 @@
   
   bool staticCompilation;
 
-  
+#ifdef WITH_TRACER 
   llvm::Function* makeTracer(Class* cl, bool stat);
+#endif
+
   void makeVT(Class* cl);
   void allocateVT(Class* cl);
   

Modified: vmkit/trunk/lib/JnJVM/VMCore/LockedMap.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/LockedMap.h?rev=63299&r1=63298&r2=63299&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/LockedMap.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/LockedMap.h Thu Jan 29 02:57:54 2009
@@ -140,6 +140,13 @@
 
 class ClassMap : 
   public LockedMap<const UTF8*, UserCommonClass*, ltutf8, JnjvmClassLoader* > {
+
+#ifdef USE_GC_BOEHM
+public:
+  void* operator new(size_t sz, mvm::BumpPtrAllocator& allocator) {
+    return GC_MALLOC(sz);
+  }
+#endif
 };
 
 class StringMap :

Modified: vmkit/trunk/lib/Mvm/BoehmGC/MvmGC.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/BoehmGC/MvmGC.h?rev=63299&r1=63298&r2=63299&view=diff

==============================================================================
--- vmkit/trunk/lib/Mvm/BoehmGC/MvmGC.h (original)
+++ vmkit/trunk/lib/Mvm/BoehmGC/MvmGC.h Thu Jan 29 02:57:54 2009
@@ -21,6 +21,11 @@
 #define TRACER tracer()
 #define PARENT_TRACER tracer()
 #define MARK_AND_TRACE markAndTrace()
+#define CALL_TRACER tracer()
+
+namespace mvm {
+    class Thread;
+}
 
 extern "C" void * GC_dlopen(const char *path, int mode) throw ();
 
@@ -34,12 +39,12 @@
 
   void markAndTrace() const {}
 
-  size_t  objectSize() const {
+  size_t objectSize() const {
     gc_header * res = (gc_header*)(GC_base((void*)this));
     return (GC_size(res) - sizeof(gc_header));
   }
 
-  void *  operator new(size_t sz, VirtualTable *VT) {
+  void* operator new(size_t sz, VirtualTable *VT) {
     gc_header * res = (gc_header*) GC_MALLOC(sz + sizeof(gc_header));
     res -> _XXX_vt= VT;
     
@@ -50,15 +55,15 @@
     return res->_2gc();
   }
 
-  void *  operator new(size_t sz) {
+  void* operator new(size_t sz) {
     return malloc(sz);
   }
 
-  void    operator delete(void * p) {
+  void operator delete(void * p) {
     //GC_FREE(p);
   }
 
-  void *  realloc(size_t n) {
+  void* realloc(size_t n) {
     void * old = GC_base(this);
     gc_header * res = (gc_header*) GC_REALLOC(old, n + sizeof(gc_header));
     return res->_2gc();
@@ -73,7 +78,7 @@
 
   typedef void (*markerFn)(void*);
   
-  static void initialise(markerFn mark, void *base_sp);
+  static void initialise(markerFn mark);
   static void destroy() {}
 
   static void die_if_sigsegv_occured_during_collection(void *addr){}
@@ -103,9 +108,9 @@
     GC_gcollect();
   }
   
-  static void inject_my_thread(void *sp);
+  static void inject_my_thread(mvm::Thread*);
   
-  static void remove_my_thread() {}
+  static void remove_my_thread(mvm::Thread*) {}
   static Collector* allocate() { return 0; }
 
   static gc* begOf(const void *obj) {

Modified: vmkit/trunk/lib/Mvm/BoehmGC/gc.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/BoehmGC/gc.cpp?rev=63299&r1=63298&r2=63299&view=diff

==============================================================================
--- vmkit/trunk/lib/Mvm/BoehmGC/gc.cpp (original)
+++ vmkit/trunk/lib/Mvm/BoehmGC/gc.cpp Thu Jan 29 02:57:54 2009
@@ -12,13 +12,11 @@
 
 using namespace mvm;
 
-void Collector::inject_my_thread(void* base_sp) {
-  mvm::Thread::get()->baseSP = base_sp;
+void Collector::inject_my_thread(mvm::Thread* th) {
   GC_init();
 }
 
-void Collector::initialise(markerFn mark, void *base_sp) {
-  mvm::Thread::get()->baseSP = base_sp;
+void Collector::initialise(markerFn mark) {
   GC_INIT();
 }
 





More information about the vmkit-commits mailing list