[vmkit-commits] [vmkit] r86730 - in /vmkit/trunk: include/mvm/Allocator.h include/mvm/VirtualMachine.h lib/JnJVM/Classpath/ClasspathVMObject.inc lib/JnJVM/VMCore/JavaClass.cpp lib/JnJVM/VMCore/JavaClass.h lib/JnJVM/VMCore/JnjvmClassLoader.h lib/Mvm/MMTk/MvmGC.h lib/Mvm/Runtime/Object.cpp

Nicolas Geoffray nicolas.geoffray at lip6.fr
Tue Nov 10 14:14:40 PST 2009


Author: geoffray
Date: Tue Nov 10 16:14:40 2009
New Revision: 86730

URL: http://llvm.org/viewvc/llvm-project?rev=86730&view=rev
Log:
Allocations that take place in J3 should not call addFinalizationCandidate.
The gc::operator new function should.


Modified:
    vmkit/trunk/include/mvm/Allocator.h
    vmkit/trunk/include/mvm/VirtualMachine.h
    vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMObject.inc
    vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp
    vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h
    vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.h
    vmkit/trunk/lib/Mvm/MMTk/MvmGC.h
    vmkit/trunk/lib/Mvm/Runtime/Object.cpp

Modified: vmkit/trunk/include/mvm/Allocator.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/mvm/Allocator.h?rev=86730&r1=86729&r2=86730&view=diff

==============================================================================
--- vmkit/trunk/include/mvm/Allocator.h (original)
+++ vmkit/trunk/include/mvm/Allocator.h Tue Nov 10 16:14:40 2009
@@ -31,20 +31,6 @@
 
 namespace mvm {
 
-class Allocator {
-public:
-  
-  void* allocateManagedObject(unsigned int sz, VirtualTable* VT);
-  
-  void* allocatePermanentMemory(unsigned int sz);
-  
-  void freePermanentMemory(void* obj);
-  
-  void* allocateTemporaryMemory(unsigned int sz);
-  
-  void freeTemporaryMemory(void* obj);
-};
-
 class BumpPtrAllocator {
 private:
   SpinLock TheLock;

Modified: vmkit/trunk/include/mvm/VirtualMachine.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/mvm/VirtualMachine.h?rev=86730&r1=86729&r2=86730&view=diff

==============================================================================
--- vmkit/trunk/include/mvm/VirtualMachine.h (original)
+++ vmkit/trunk/include/mvm/VirtualMachine.h Tue Nov 10 16:14:40 2009
@@ -512,8 +512,6 @@
   uint32 status; 
 #endif
 
-  mvm::Allocator gcAllocator;
-
 };
 
 

Modified: vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMObject.inc
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMObject.inc?rev=86730&r1=86729&r2=86730&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMObject.inc (original)
+++ vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMObject.inc Tue Nov 10 16:14:40 2009
@@ -48,8 +48,7 @@
     assert(cl->isClass() && "Not a class!");
     size = cl->asClass()->getVirtualSize();
   }
-  res = (JavaObject*)
-    vm->gcAllocator.allocateManagedObject(size, src->getVirtualTable());
+  res = (JavaObject*)gc::operator new(size, src->getVirtualTable());
   memcpy((void*)((uintptr_t)res + 2 * sizeof(void*)),
          (void*)((uintptr_t)src + 2 * sizeof(void*)),
          size - 2 * sizeof(void*));

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp Tue Nov 10 16:14:40 2009
@@ -266,17 +266,17 @@
   else if (n > JavaArray::MaxArraySize)
     vm->outOfMemoryError();
 
-  return doNew(n, vm->gcAllocator);
+  return doNew(n);
 }
 
-JavaArray* UserClassArray::doNew(sint32 n, mvm::Allocator& allocator) {
+JavaArray* UserClassArray::doNew(sint32 n) {
   UserCommonClass* cl = baseClass();
 
   uint32 logSize = cl->isPrimitive() ? 
     cl->asPrimitiveClass()->logSize : (sizeof(JavaObject*) == 8 ? 3 : 2);
   VirtualTable* VT = virtualVT;
   uint32 size = sizeof(JavaObject) + sizeof(ssize_t) + (n << logSize);
-  JavaArray* res = (JavaArray*)allocator.allocateManagedObject(size, VT);
+  JavaArray* res = (JavaArray*)gc::operator new(size, VT);
   res->size = n;
   return res;
 }
@@ -476,14 +476,15 @@
 }
 
 JavaObject* UserClass::doNew(Jnjvm* vm) {
+  JavaObject* res = 0;
+  llvm_gcroot(res, 0);
   assert(this && "No class when allocating.");
   assert((this->isInitializing() || 
           classLoader->getCompiler()->isStaticCompiling())
          && "Uninitialized class when allocating.");
   assert(getVirtualVT() && "No VT\n");
-  JavaObject* res = 
-    (JavaObject*)vm->gcAllocator.allocateManagedObject(getVirtualSize(),
-                                                       getVirtualVT());
+  res = (JavaObject*)gc::operator new(getVirtualSize(), getVirtualVT());
+
   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=86730&r1=86729&r2=86730&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h Tue Nov 10 16:14:40 2009
@@ -933,7 +933,7 @@
   ///
   JavaArray* doNew(sint32 n, mvm::BumpPtrAllocator& allocator,
                    bool temp = false);
-  JavaArray* doNew(sint32 n, mvm::Allocator& allocator);
+  JavaArray* doNew(sint32 n);
 
   /// _baseClass - The base class of the array.
   ///

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.h Tue Nov 10 16:14:40 2009
@@ -436,7 +436,6 @@
     VMClassLoader* res = 0;
     llvm_gcroot(res, 0);
     res = (VMClassLoader*)gc::operator new(sizeof(VMClassLoader), &VT);
-    mvm::Thread::get()->MyVM->addFinalizationCandidate(res);
     res->JCL = J;
     return res;
   }

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

==============================================================================
--- vmkit/trunk/lib/Mvm/MMTk/MvmGC.h (original)
+++ vmkit/trunk/lib/Mvm/MMTk/MvmGC.h Tue Nov 10 16:14:40 2009
@@ -100,7 +100,9 @@
     assert(res->getVirtualTable() == 0 && "Allocation not zeroed");
     res->setVirtualTable(VT);
     MMTkGCPostAllocator(Mutator, (uintptr_t)res, (uintptr_t)VT, sz, allocator);
-    
+ 
+    // operator new is called by C++ code, that does not call the
+    // addFinalizationCandidate, unlike application code. Call it here.
     if (VT->destructor) {
       mvm::Thread::get()->MyVM->addFinalizationCandidate(res);
     }

Modified: vmkit/trunk/lib/Mvm/Runtime/Object.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/Runtime/Object.cpp?rev=86730&r1=86729&r2=86730&view=diff

==============================================================================
--- vmkit/trunk/lib/Mvm/Runtime/Object.cpp (original)
+++ vmkit/trunk/lib/Mvm/Runtime/Object.cpp Tue Nov 10 16:14:40 2009
@@ -241,26 +241,6 @@
   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); 
-}
-
 void PreciseStackScanner::scanStack(mvm::Thread* th) {
   StackWalker Walker(th);
 





More information about the vmkit-commits mailing list