[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