[vmkit-commits] [vmkit] r104859 - in /vmkit/trunk: include/mvm/ include/mvm/GC/ include/mvm/Threads/ lib/J3/Classpath/ lib/J3/VMCore/ lib/Mvm/Compiler/ lib/Mvm/GCMmap2/ lib/Mvm/MMTk/ lib/Mvm/Runtime/ mmtk/mmtk-alloc/ mmtk/mmtk-j3/
Nicolas Geoffray
nicolas.geoffray at lip6.fr
Thu May 27 11:07:44 PDT 2010
Author: geoffray
Date: Thu May 27 13:07:44 2010
New Revision: 104859
URL: http://llvm.org/viewvc/llvm-project?rev=104859&view=rev
Log:
Pass the transitive closure to the tracing functions instead of making it static.
Modified:
vmkit/trunk/include/mvm/GC/GC.h
vmkit/trunk/include/mvm/JIT.h
vmkit/trunk/include/mvm/MethodInfo.h
vmkit/trunk/include/mvm/Object.h
vmkit/trunk/include/mvm/Threads/Thread.h
vmkit/trunk/include/mvm/VirtualMachine.h
vmkit/trunk/lib/J3/Classpath/ClasspathReflect.h
vmkit/trunk/lib/J3/Classpath/JavaUpcalls.cpp
vmkit/trunk/lib/J3/VMCore/JavaClass.h
vmkit/trunk/lib/J3/VMCore/JavaThread.h
vmkit/trunk/lib/J3/VMCore/Jnjvm.h
vmkit/trunk/lib/J3/VMCore/JnjvmClassLoader.h
vmkit/trunk/lib/J3/VMCore/VirtualTables.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/MMTk/MvmGC.cpp
vmkit/trunk/lib/Mvm/MMTk/MvmGC.h
vmkit/trunk/lib/Mvm/Runtime/MethodInfo.cpp
vmkit/trunk/lib/Mvm/Runtime/Object.cpp
vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp
vmkit/trunk/mmtk/mmtk-j3/FinalizableProcessor.cpp
vmkit/trunk/mmtk/mmtk-j3/ReferenceProcessor.cpp
vmkit/trunk/mmtk/mmtk-j3/Scanning.cpp
Modified: vmkit/trunk/include/mvm/GC/GC.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/mvm/GC/GC.h?rev=104859&r1=104858&r2=104859&view=diff
==============================================================================
--- vmkit/trunk/include/mvm/GC/GC.h (original)
+++ vmkit/trunk/include/mvm/GC/GC.h Thu May 27 13:07:44 2010
@@ -18,7 +18,7 @@
class gcRoot {
public:
virtual ~gcRoot() {}
- virtual void tracer(void) {}
+ virtual void tracer(uintptr_t closure) {}
/// getVirtualTable - Returns the virtual table of this object.
///
@@ -39,18 +39,18 @@
class StackScanner {
public:
- virtual void scanStack(mvm::Thread* th) = 0;
+ virtual void scanStack(mvm::Thread* th, uintptr_t closure) = 0;
virtual ~StackScanner() {}
};
class UnpreciseStackScanner : public StackScanner {
public:
- virtual void scanStack(mvm::Thread* th);
+ virtual void scanStack(mvm::Thread* th, uintptr_t closure);
};
class PreciseStackScanner : public StackScanner {
public:
- virtual void scanStack(mvm::Thread* th);
+ virtual void scanStack(mvm::Thread* th, uintptr_t closure);
};
}
Modified: vmkit/trunk/include/mvm/JIT.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/mvm/JIT.h?rev=104859&r1=104858&r2=104859&view=diff
==============================================================================
--- vmkit/trunk/include/mvm/JIT.h (original)
+++ vmkit/trunk/include/mvm/JIT.h Thu May 27 13:07:44 2010
@@ -207,7 +207,7 @@
class JITMethodInfo : public MethodInfo {
llvm::GCFunctionInfo* GCInfo;
public:
- virtual void scan(void* TL, void* ip, void* addr);
+ virtual void scan(uintptr_t closure, void* ip, void* addr);
JITMethodInfo(llvm::GCFunctionInfo* GFI) : GCInfo(GFI) {}
};
Modified: vmkit/trunk/include/mvm/MethodInfo.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/mvm/MethodInfo.h?rev=104859&r1=104858&r2=104859&view=diff
==============================================================================
--- vmkit/trunk/include/mvm/MethodInfo.h (original)
+++ vmkit/trunk/include/mvm/MethodInfo.h Thu May 27 13:07:44 2010
@@ -18,7 +18,7 @@
class MethodInfo : public PermanentObject {
public:
virtual void print(void* ip, void* addr) = 0;
- virtual void scan(void* TL, void* ip, void* addr) = 0;
+ virtual void scan(uintptr_t closure, void* ip, void* addr) = 0;
static void* isStub(void* ip, void* addr) {
bool isStub = ((unsigned char*)ip)[0] == 0xCE;
@@ -46,7 +46,7 @@
class CamlMethodInfo : public MethodInfo {
CamlFrame* CF;
public:
- virtual void scan(void* TL, void* ip, void* addr);
+ virtual void scan(uintptr_t closure, void* ip, void* addr);
CamlMethodInfo(CamlFrame* C, void* ip);
};
@@ -64,7 +64,7 @@
class DefaultMethodInfo : public MethodInfo {
public:
virtual void print(void* ip, void* addr);
- virtual void scan(void* TL, void* ip, void* addr);
+ virtual void scan(uintptr_t closure, void* ip, void* addr);
static DefaultMethodInfo DM;
DefaultMethodInfo() {
Modified: vmkit/trunk/include/mvm/Object.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/mvm/Object.h?rev=104859&r1=104858&r2=104859&view=diff
==============================================================================
--- vmkit/trunk/include/mvm/Object.h (original)
+++ vmkit/trunk/include/mvm/Object.h Thu May 27 13:07:44 2010
@@ -32,13 +32,13 @@
///
class Object : public gc {
public:
- static void default_tracer(gc *o) {}
+ static void default_tracer(gc *o, uintptr_t closure) {}
static intptr_t default_hashCode(const gc *o) { return (intptr_t)o; }
static void default_print(const gc *o, PrintBuffer *buf);
/// tracer - Default implementation of tracer. Does nothing.
///
- virtual void tracer() { default_tracer(this); }
+ virtual void tracer(uintptr_t closure) { default_tracer(this, closure); }
/// print - Default implementation of print.
///
Modified: vmkit/trunk/include/mvm/Threads/Thread.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/mvm/Threads/Thread.h?rev=104859&r1=104858&r2=104859&view=diff
==============================================================================
--- vmkit/trunk/include/mvm/Threads/Thread.h (original)
+++ vmkit/trunk/include/mvm/Threads/Thread.h Thu May 27 13:07:44 2010
@@ -240,7 +240,7 @@
/// tracer - Does nothing. Used for child classes which may defined
/// a tracer.
///
- virtual void tracer() {}
+ virtual void tracer(uintptr_t closure) {}
void* getLastSP() { return lastSP; }
void setLastSP(void* V) { lastSP = V; }
Modified: vmkit/trunk/include/mvm/VirtualMachine.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/mvm/VirtualMachine.h?rev=104859&r1=104858&r2=104859&view=diff
==============================================================================
--- vmkit/trunk/include/mvm/VirtualMachine.h (original)
+++ vmkit/trunk/include/mvm/VirtualMachine.h Thu May 27 13:07:44 2010
@@ -123,7 +123,7 @@
mvm::SpinLock QueueLock;
uint8_t semantics;
- gc* processReference(gc*, VirtualMachine*);
+ gc* processReference(gc*, VirtualMachine*, uintptr_t closure);
public:
static const uint8_t WEAK = 1;
@@ -169,7 +169,7 @@
QueueLock.release();
}
- void scan(VirtualMachine* vm);
+ void scan(VirtualMachine* vm, uintptr_t closure);
};
@@ -262,7 +262,7 @@
}
- virtual void tracer();
+ virtual void tracer(uintptr_t closure);
virtual ~VirtualMachine() {
if (scanner) delete scanner;
@@ -398,7 +398,7 @@
/// scanFinalizationQueue - Scan objets with a finalized method and schedule
/// them for finalization if they are not live.
///
- void scanFinalizationQueue();
+ void scanFinalizationQueue(uintptr_t closure);
/// wakeUpFinalizers - Wake the finalizers.
///
@@ -427,22 +427,22 @@
/// scanWeakReferencesQueue - Scan all weak references. Called by the GC
/// before scanning the finalization queue.
///
- void scanWeakReferencesQueue() {
- WeakReferencesQueue.scan(this);
+ void scanWeakReferencesQueue(uintptr_t closure) {
+ WeakReferencesQueue.scan(this, closure);
}
/// scanSoftReferencesQueue - Scan all soft references. Called by the GC
/// before scanning the finalization queue.
///
- void scanSoftReferencesQueue() {
- SoftReferencesQueue.scan(this);
+ void scanSoftReferencesQueue(uintptr_t closure) {
+ SoftReferencesQueue.scan(this, closure);
}
/// scanPhantomReferencesQueue - Scan all phantom references. Called by the GC
/// after the finalization queue.
///
- void scanPhantomReferencesQueue() {
- PhantomReferencesQueue.scan(this);
+ void scanPhantomReferencesQueue(uintptr_t closure) {
+ PhantomReferencesQueue.scan(this, closure);
}
/// addWeakReference - Add a weak reference to the queue.
Modified: vmkit/trunk/lib/J3/Classpath/ClasspathReflect.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/Classpath/ClasspathReflect.h?rev=104859&r1=104858&r2=104859&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/Classpath/ClasspathReflect.h (original)
+++ vmkit/trunk/lib/J3/Classpath/ClasspathReflect.h Thu May 27 13:07:44 2010
@@ -34,13 +34,13 @@
return vmdata;
}
- static void staticTracer(JavaObjectClass* obj) {
- mvm::Collector::markAndTrace(obj, &obj->pd);
- mvm::Collector::markAndTrace(obj, &obj->signers);
- mvm::Collector::markAndTrace(obj, &obj->constructor);
+ static void staticTracer(JavaObjectClass* obj, uintptr_t closure) {
+ mvm::Collector::markAndTrace(obj, &obj->pd, closure);
+ mvm::Collector::markAndTrace(obj, &obj->signers, closure);
+ mvm::Collector::markAndTrace(obj, &obj->constructor, closure);
if (obj->vmdata) {
JavaObject** Obj = obj->vmdata->classLoader->getJavaClassLoaderPtr();
- if (*Obj) mvm::Collector::markAndTraceRoot(Obj);
+ if (*Obj) mvm::Collector::markAndTraceRoot(Obj, closure);
}
}
};
@@ -54,9 +54,9 @@
public:
- static void staticTracer(JavaObjectField* obj) {
- mvm::Collector::markAndTrace(obj, &obj->name);
- mvm::Collector::markAndTrace(obj, &obj->declaringClass);
+ static void staticTracer(JavaObjectField* obj, uintptr_t closure) {
+ mvm::Collector::markAndTrace(obj, &obj->name, closure);
+ mvm::Collector::markAndTrace(obj, &obj->declaringClass, closure);
}
JavaField* getInternalField() {
@@ -78,9 +78,9 @@
public:
- static void staticTracer(JavaObjectMethod* obj) {
- mvm::Collector::markAndTrace(obj, &obj->name);
- mvm::Collector::markAndTrace(obj, &obj->declaringClass);
+ static void staticTracer(JavaObjectMethod* obj, uintptr_t closure) {
+ mvm::Collector::markAndTrace(obj, &obj->name, closure);
+ mvm::Collector::markAndTrace(obj, &obj->declaringClass, closure);
}
JavaMethod* getInternalMethod() {
@@ -100,8 +100,8 @@
uint32 slot;
public:
- static void staticTracer(JavaObjectConstructor* obj) {
- mvm::Collector::markAndTrace(obj, &obj->clazz);
+ static void staticTracer(JavaObjectConstructor* obj, uintptr_t closure) {
+ mvm::Collector::markAndTrace(obj, &obj->clazz, closure);
}
JavaMethod* getInternalMethod() {
@@ -125,8 +125,8 @@
mvm::Thread::releaseThread(obj->vmdata);
}
- static void staticTracer(JavaObjectVMThread* obj) {
- mvm::Collector::markAndTrace(obj, &obj->thread);
+ static void staticTracer(JavaObjectVMThread* obj, uintptr_t closure) {
+ mvm::Collector::markAndTrace(obj, &obj->thread, closure);
}
};
@@ -167,9 +167,9 @@
JavaObject** getReferentPtr() { return &referent; }
void setReferent(JavaObject* r) { referent = r; }
- static void staticTracer(JavaObjectReference* obj) {
- mvm::Collector::markAndTrace(obj, &obj->queue);
- mvm::Collector::markAndTrace(obj, &obj->nextOnQueue);
+ static void staticTracer(JavaObjectReference* obj, uintptr_t closure) {
+ mvm::Collector::markAndTrace(obj, &obj->queue, closure);
+ mvm::Collector::markAndTrace(obj, &obj->nextOnQueue, closure);
}
};
Modified: vmkit/trunk/lib/J3/Classpath/JavaUpcalls.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/Classpath/JavaUpcalls.cpp?rev=104859&r1=104858&r2=104859&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/Classpath/JavaUpcalls.cpp (original)
+++ vmkit/trunk/lib/J3/Classpath/JavaUpcalls.cpp Thu May 27 13:07:44 2010
@@ -489,32 +489,38 @@
extern "C" void nativePropertiesPostInit(JavaObject* prop);
-extern "C" void nativeJavaObjectClassTracer(JavaObjectClass* obj) {
- JavaObjectClass::staticTracer(obj);
+extern "C" void nativeJavaObjectClassTracer(
+ JavaObjectClass* obj, uintptr_t closure) {
+ JavaObjectClass::staticTracer(obj, closure);
}
-extern "C" void nativeJavaObjectFieldTracer(JavaObjectField* obj) {
- JavaObjectField::staticTracer(obj);
+extern "C" void nativeJavaObjectFieldTracer(
+ JavaObjectField* obj, uintptr_t closure) {
+ JavaObjectField::staticTracer(obj, closure);
}
-extern "C" void nativeJavaObjectMethodTracer(JavaObjectMethod* obj) {
- JavaObjectMethod::staticTracer(obj);
+extern "C" void nativeJavaObjectMethodTracer(
+ JavaObjectMethod* obj, uintptr_t closure) {
+ JavaObjectMethod::staticTracer(obj, closure);
}
-extern "C" void nativeJavaObjectConstructorTracer(JavaObjectConstructor* obj) {
- JavaObjectConstructor::staticTracer(obj);
+extern "C" void nativeJavaObjectConstructorTracer(
+ JavaObjectConstructor* obj, uintptr_t closure) {
+ JavaObjectConstructor::staticTracer(obj, closure);
}
-extern "C" void nativeJavaObjectReferenceTracer(JavaObjectReference* obj) {
- JavaObjectReference::staticTracer(obj);
+extern "C" void nativeJavaObjectReferenceTracer(
+ JavaObjectReference* obj, uintptr_t closure) {
+ JavaObjectReference::staticTracer(obj, closure);
}
-extern "C" void nativeJavaObjectVMThreadDestructor(JavaObjectVMThread* obj) {
- JavaObjectVMThread::staticDestructor(obj);
+extern "C" void nativeJavaObjectVMThreadTracer(
+ JavaObjectVMThread* obj, uintptr_t closure) {
+ JavaObjectVMThread::staticTracer(obj, closure);
}
-extern "C" void nativeJavaObjectVMThreadTracer(JavaObjectVMThread* obj) {
- JavaObjectVMThread::staticTracer(obj);
+extern "C" void nativeJavaObjectVMThreadDestructor(JavaObjectVMThread* obj) {
+ JavaObjectVMThread::staticDestructor(obj);
}
// Defined in Classpath/ClasspathVMClassLoader.cpp
Modified: vmkit/trunk/lib/J3/VMCore/JavaClass.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/JavaClass.h?rev=104859&r1=104858&r2=104859&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/VMCore/JavaClass.h (original)
+++ vmkit/trunk/lib/J3/VMCore/JavaClass.h Thu May 27 13:07:44 2010
@@ -283,7 +283,7 @@
/// tracer - The tracer of this GC-allocated class.
///
- void tracer();
+ void tracer(uintptr_t closure);
/// inheritName - Does this class in its class hierarchy inherits
/// the given name? Equality is on the name. This function does not take
@@ -672,7 +672,7 @@
/// tracer - Tracer function of instances of Class.
///
- void tracer();
+ void tracer(uintptr_t closure);
~Class();
Class();
Modified: vmkit/trunk/lib/J3/VMCore/JavaThread.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/JavaThread.h?rev=104859&r1=104858&r2=104859&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/VMCore/JavaThread.h (original)
+++ vmkit/trunk/lib/J3/VMCore/JavaThread.h Thu May 27 13:07:44 2010
@@ -131,7 +131,7 @@
/// tracer - Traces GC-objects pointed by this thread object.
///
- virtual void tracer();
+ virtual void tracer(uintptr_t closure);
/// JavaThread - Empty constructor, used to get the VT.
///
Modified: vmkit/trunk/lib/J3/VMCore/Jnjvm.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/Jnjvm.h?rev=104859&r1=104858&r2=104859&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/VMCore/Jnjvm.h (original)
+++ vmkit/trunk/lib/J3/VMCore/Jnjvm.h Thu May 27 13:07:44 2010
@@ -163,7 +163,7 @@
/// tracer - Traces instances of this class.
///
- virtual void tracer();
+ virtual void tracer(uintptr_t closure);
/// dirSeparator - Directory separator for file paths, e.g. '\' for windows,
/// '/' for Unix.
Modified: vmkit/trunk/lib/J3/VMCore/JnjvmClassLoader.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/JnjvmClassLoader.h?rev=104859&r1=104858&r2=104859&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/VMCore/JnjvmClassLoader.h (original)
+++ vmkit/trunk/lib/J3/VMCore/JnjvmClassLoader.h Thu May 27 13:07:44 2010
@@ -134,7 +134,7 @@
/// tracer - Traces a JnjvmClassLoader for GC.
///
- virtual void tracer();
+ virtual void tracer(uintptr_t closure);
/// getJnjvmLoaderFromJavaObject - Return the Jnjvm runtime representation
/// of the given class loader.
@@ -327,7 +327,7 @@
/// tracer - Traces instances of this class.
///
- virtual void tracer();
+ virtual void tracer(uintptr_t closure);
/// libClasspathEnv - The paths for dynamic libraries of Classpath, separated
/// by ':'.
@@ -456,8 +456,8 @@
/// staticTracer - Trace the internal class loader.
///
- static void staticTracer(VMClassLoader* obj) {
- if (obj->JCL) obj->JCL->tracer();
+ static void staticTracer(VMClassLoader* obj, uintptr_t closure) {
+ if (obj->JCL) obj->JCL->tracer(closure);
}
/// ~VMClassLoader - Delete the internal class loader.
Modified: vmkit/trunk/lib/J3/VMCore/VirtualTables.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/VirtualTables.cpp?rev=104859&r1=104858&r2=104859&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/VMCore/VirtualTables.cpp (original)
+++ vmkit/trunk/lib/J3/VMCore/VirtualTables.cpp Thu May 27 13:07:44 2010
@@ -59,7 +59,7 @@
// variables.
//===----------------------------------------------------------------------===//
-extern "C" void EmptyTracer(void*) {}
+extern "C" void EmptyTracer(void*, uintptr_t) {}
//===----------------------------------------------------------------------===//
// Trace methods for Java objects. There are four types of objects:
@@ -75,23 +75,25 @@
/// Method for scanning the root of an object.
-extern "C" void JavaObjectTracer(JavaObject* obj) {
+extern "C" void JavaObjectTracer(JavaObject* obj, uintptr_t closure) {
CommonClass* cl = obj->getClass();
assert(cl && "No class");
- mvm::Collector::markAndTraceRoot(cl->classLoader->getJavaClassLoaderPtr());
+ mvm::Collector::markAndTraceRoot(
+ cl->classLoader->getJavaClassLoaderPtr(), closure);
}
/// 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) {
+extern "C" void ArrayObjectTracer(ArrayObject* obj, uintptr_t closure) {
CommonClass* cl = obj->getClass();
assert(cl && "No class");
- mvm::Collector::markAndTraceRoot(cl->classLoader->getJavaClassLoaderPtr());
+ mvm::Collector::markAndTraceRoot(
+ cl->classLoader->getJavaClassLoaderPtr(), closure);
for (sint32 i = 0; i < obj->size; i++) {
if (obj->elements[i]) {
- mvm::Collector::markAndTrace(obj, obj->elements + i);
+ mvm::Collector::markAndTrace(obj, obj->elements + i, closure);
}
}
}
@@ -99,21 +101,22 @@
/// Method for scanning a native array. Only scan the lock. The classloader of
/// the class is the bootstrap loader and therefore does not need to be
/// scanned here.
-extern "C" void JavaArrayTracer(JavaArray* obj) {
+extern "C" void JavaArrayTracer(JavaArray* obj, uintptr_t closure) {
}
/// Method for scanning regular objects.
-extern "C" void RegularObjectTracer(JavaObject* obj) {
+extern "C" void RegularObjectTracer(JavaObject* obj, uintptr_t closure) {
Class* cl = obj->getClass()->asClass();
assert(cl && "Not a class in regular tracer");
- mvm::Collector::markAndTraceRoot(cl->classLoader->getJavaClassLoaderPtr());
+ mvm::Collector::markAndTraceRoot(
+ cl->classLoader->getJavaClassLoaderPtr(), closure);
while (cl->super != 0) {
for (uint32 i = 0; i < cl->nbVirtualFields; ++i) {
JavaField& field = cl->virtualFields[i];
if (field.isReference()) {
JavaObject** ptr = field.getObjectFieldPtr(obj);
- mvm::Collector::markAndTrace(obj, ptr);
+ mvm::Collector::markAndTrace(obj, ptr, closure);
}
}
cl = cl->super;
@@ -134,45 +137,47 @@
//===----------------------------------------------------------------------===//
-void CommonClass::tracer() {
+void CommonClass::tracer(uintptr_t closure) {
if (super && super->classLoader) {
JavaObject** Obj = super->classLoader->getJavaClassLoaderPtr();
- if (*Obj) mvm::Collector::markAndTraceRoot(Obj);
+ if (*Obj) mvm::Collector::markAndTraceRoot(Obj, closure);
for (uint32 i = 0; i < nbInterfaces; ++i) {
if (interfaces[i]->classLoader) {
JavaObject** Obj = interfaces[i]->classLoader->getJavaClassLoaderPtr();
- if (*Obj) mvm::Collector::markAndTraceRoot(Obj);
+ if (*Obj) mvm::Collector::markAndTraceRoot(Obj, closure);
}
}
}
if (classLoader)
- mvm::Collector::markAndTraceRoot(classLoader->getJavaClassLoaderPtr());
+ mvm::Collector::markAndTraceRoot(
+ classLoader->getJavaClassLoaderPtr(), closure);
for (uint32 i = 0; i < NR_ISOLATES; ++i) {
// If the delegatee was static allocated, we want to trace its fields.
if (delegatee[i]) {
- delegatee[i]->tracer();
- mvm::Collector::markAndTraceRoot(delegatee + i);
+ delegatee[i]->tracer(closure);
+ mvm::Collector::markAndTraceRoot(delegatee + i, closure);
}
}
}
-void Class::tracer() {
- CommonClass::tracer();
- if (classLoader != classLoader->bootstrapLoader)
- mvm::Collector::markAndTraceRoot(&bytes);
+void Class::tracer(uintptr_t closure) {
+ CommonClass::tracer(closure);
+ if (classLoader != classLoader->bootstrapLoader) {
+ mvm::Collector::markAndTraceRoot(&bytes, closure);
+ }
- for (uint32 i =0; i < NR_ISOLATES; ++i) {
+ for (uint32 i = 0; i < NR_ISOLATES; ++i) {
TaskClassMirror &M = IsolateInfo[i];
if (M.staticInstance) {
for (uint32 i = 0; i < nbStaticFields; ++i) {
JavaField& field = staticFields[i];
if (field.isReference()) {
JavaObject** ptr = field.getObjectFieldPtr(M.staticInstance);
- mvm::Collector::markAndTraceRoot(ptr);
+ mvm::Collector::markAndTraceRoot(ptr, closure);
}
}
}
@@ -196,31 +201,31 @@
// referenced by the delegatees.
//===----------------------------------------------------------------------===//
-void JnjvmClassLoader::tracer() {
+void JnjvmClassLoader::tracer(uintptr_t closure) {
for (ClassMap::iterator i = classes->map.begin(), e = classes->map.end();
i!= e; ++i) {
CommonClass* cl = i->second;
- if (cl->isClass()) cl->asClass()->tracer();
- else cl->tracer();
+ if (cl->isClass()) cl->asClass()->tracer(closure);
+ else cl->tracer(closure);
}
StringList* end = strings;
while (end) {
for (uint32 i = 0; i < end->length; ++i) {
JavaString** obj = end->strings + i;
- mvm::Collector::markAndTraceRoot(obj);
+ mvm::Collector::markAndTraceRoot(obj, closure);
}
end = end->prev;
}
}
-void JnjvmBootstrapLoader::tracer() {
+void JnjvmBootstrapLoader::tracer(uintptr_t closure) {
- JnjvmClassLoader::tracer();
+ JnjvmClassLoader::tracer(closure);
#define TRACE_DELEGATEE(prim) \
- prim->tracer();
+ prim->tracer(closure);
TRACE_DELEGATEE(upcalls->OfVoid);
TRACE_DELEGATEE(upcalls->OfBool);
@@ -248,19 +253,21 @@
//===----------------------------------------------------------------------===//
-void Jnjvm::tracer() {
+void Jnjvm::tracer(uintptr_t closure) {
- VirtualMachine::tracer();
- bootstrapLoader->tracer();
+ VirtualMachine::tracer(closure);
+ bootstrapLoader->tracer(closure);
- if (appClassLoader)
- mvm::Collector::markAndTraceRoot(appClassLoader->getJavaClassLoaderPtr());
+ if (appClassLoader) {
+ mvm::Collector::markAndTraceRoot(
+ appClassLoader->getJavaClassLoaderPtr(), closure);
+ }
JNIGlobalReferences* start = &globalRefs;
while (start) {
for (uint32 i = 0; i < start->length; ++i) {
JavaObject** obj = start->globalReferences + i;
- mvm::Collector::markAndTraceRoot(obj);
+ mvm::Collector::markAndTraceRoot(obj, closure);
}
start = start->next;
}
@@ -268,30 +275,32 @@
for (StringMap::iterator i = hashStr.map.begin(), e = hashStr.map.end();
i!= e; ++i) {
JavaString** str = &(i->second);
- mvm::Collector::markAndTraceRoot(str);
+ mvm::Collector::markAndTraceRoot(str, closure);
}
#if defined(ISOLATE_SHARING)
- mvm::Collector::markAndTraceRoot(&JnjvmSharedLoader::sharedLoader);
+ mvm::Collector::markAndTraceRoot(&JnjvmSharedLoader::sharedLoader, closure);
#endif
#ifdef SERVICE
- parent->tracer();
+ parent->tracer(closure);
#endif
}
-void JavaThread::tracer() {
- if (pendingException) mvm::Collector::markAndTraceRoot(&pendingException);
- mvm::Collector::markAndTraceRoot(&javaThread);
+void JavaThread::tracer(uintptr_t closure) {
+ if (pendingException) {
+ mvm::Collector::markAndTraceRoot(&pendingException, closure);
+ }
+ mvm::Collector::markAndTraceRoot(&javaThread, closure);
#ifdef SERVICE
- mvm::Collector::markAndTraceRoot(&ServiceException);
+ mvm::Collector::markAndTraceRoot(&ServiceException, closure);
#endif
JNILocalReferences* end = localJNIRefs;
while (end) {
for (uint32 i = 0; i < end->length; ++i) {
JavaObject** obj = end->localReferences + i;
- mvm::Collector::markAndTraceRoot(obj);
+ mvm::Collector::markAndTraceRoot(obj, closure);
}
end = end->prev;
}
Modified: vmkit/trunk/lib/Mvm/Compiler/JIT.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/Compiler/JIT.cpp?rev=104859&r1=104858&r2=104859&view=diff
==============================================================================
--- vmkit/trunk/lib/Mvm/Compiler/JIT.cpp (original)
+++ vmkit/trunk/lib/Mvm/Compiler/JIT.cpp Thu May 27 13:07:44 2010
@@ -453,7 +453,7 @@
protectEngine.unlock();
}
-void JITMethodInfo::scan(void* TL, void* ip, void* addr) {
+void JITMethodInfo::scan(uintptr_t closure, void* ip, void* addr) {
if (GCInfo) {
DEBUG(llvm::errs() << GCInfo->getFunction().getName() << '\n');
// All safe points have the same informations currently in LLVM.
@@ -464,7 +464,9 @@
KE = GCInfo->live_end(J); K != KE; ++K) {
intptr_t obj = *(intptr_t*)(spaddr + K->StackOffset);
// Verify that obj does not come from a JSR bytecode.
- if (!(obj & 1)) Collector::scanObject((void**)(spaddr + K->StackOffset));
+ if (!(obj & 1)) {
+ Collector::scanObject((void**)(spaddr + K->StackOffset), closure);
+ }
}
}
}
Modified: vmkit/trunk/lib/Mvm/GCMmap2/MvmGC.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/GCMmap2/MvmGC.h?rev=104859&r1=104858&r2=104859&view=diff
==============================================================================
--- vmkit/trunk/lib/Mvm/GCMmap2/MvmGC.h (original)
+++ vmkit/trunk/lib/Mvm/GCMmap2/MvmGC.h Thu May 27 13:07:44 2010
@@ -93,14 +93,14 @@
static int verbose;
- static bool isLive(void* ptr) {
+ static bool isLive(void* ptr, uintptr_t closure) {
GCChunkNode *node = o2node(ptr);
if(node && isMarked(node)) return true;
else return false;
}
- static void scanObject(void** ptr);
+ static void scanObject(void** ptr, uintptr_t closure);
static void initialise();
static void destroy();
@@ -294,14 +294,14 @@
static inline void trace(GCChunkNode *node) {
gcRoot *o = node->chunk();
- o->tracer();
+ o->tracer(0);
}
- static inline void markAndTrace(void* source, void *ptr) {
- markAndTraceRoot(ptr);
+ static inline void markAndTrace(void* source, void *ptr, uintptr_t closure) {
+ markAndTraceRoot(ptr, closure);
}
- static inline void markAndTraceRoot(void *ptr) {
+ static inline void markAndTraceRoot(void *ptr, uintptr_t closure) {
void* obj = *(void**)ptr;
if (obj) {
GCChunkNode *node = o2node(obj);
@@ -337,25 +337,25 @@
void setMinMemory(size_t sz){
}
- static gc* retainForFinalize(gc* val) {
- markAndTraceRoot(&val);
+ static gc* retainForFinalize(gc* val, uintptr_t closure) {
+ markAndTraceRoot(&val, closure);
return val;
}
- static gc* retainReferent(gc* val) {
- markAndTraceRoot(&val);
+ static gc* retainReferent(gc* val, uintptr_t closure) {
+ markAndTraceRoot(&val, closure);
return val;
}
- static gc* getForwardedReference(gc* val) {
+ static gc* getForwardedReference(gc* val, uintptr_t closure) {
return val;
}
- static gc* getForwardedReferent(gc* val) {
+ static gc* getForwardedReferent(gc* val, uintptr_t closure) {
return val;
}
- static gc* getForwardedFinalizable(gc* val) {
+ static gc* getForwardedFinalizable(gc* val, uintptr_t closure) {
return val;
}
Modified: vmkit/trunk/lib/Mvm/GCMmap2/gc.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/GCMmap2/gc.cpp?rev=104859&r1=104858&r2=104859&view=diff
==============================================================================
--- vmkit/trunk/lib/Mvm/GCMmap2/gc.cpp (original)
+++ vmkit/trunk/lib/Mvm/GCMmap2/gc.cpp Thu May 27 13:07:44 2010
@@ -14,8 +14,8 @@
using namespace mvm;
-extern "C" void MarkAndTrace(gc* gc) {
- Collector::markAndTraceRoot(&gc);
+extern "C" void MarkAndTrace(gc* gc, uintptr_t closure) {
+ Collector::markAndTraceRoot(&gc, closure);
}
extern "C" void* gcmalloc(size_t sz, VirtualTable* VT) {
@@ -34,7 +34,7 @@
// This is useless with GCmmap2, as the gcmalloc already did it.
}
-void Collector::scanObject(void** val) {
+void Collector::scanObject(void** val, uintptr_t closure) {
void* obj = *val;
if (obj) {
GCChunkNode *node = o2node(obj);
Modified: vmkit/trunk/lib/Mvm/GCMmap2/gccollector.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/GCMmap2/gccollector.cpp?rev=104859&r1=104858&r2=104859&view=diff
==============================================================================
--- vmkit/trunk/lib/Mvm/GCMmap2/gccollector.cpp (original)
+++ vmkit/trunk/lib/Mvm/GCMmap2/gccollector.cpp Thu May 27 13:07:44 2010
@@ -53,12 +53,12 @@
mvm::Thread* tcur = th;
// (1) Trace the VM.
- th->MyVM->tracer();
+ th->MyVM->tracer(0);
// (2) Trace the threads.
do {
- sc->scanStack(tcur);
- tcur->tracer();
+ sc->scanStack(tcur, 0);
+ tcur->tracer(0);
tcur = (mvm::Thread*)tcur->next();
} while (tcur != th);
@@ -70,16 +70,16 @@
cur = cur->prev();
// (4) Trace the weak reference queue.
- th->MyVM->scanWeakReferencesQueue();
+ th->MyVM->scanWeakReferencesQueue(0);
// (5) Trace the soft reference queue.
- th->MyVM->scanSoftReferencesQueue();
+ th->MyVM->scanSoftReferencesQueue(0);
// (6) Trace the finalization queue.
- th->MyVM->scanFinalizationQueue();
+ th->MyVM->scanFinalizationQueue(0);
// (7) Trace the phantom reference queue.
- th->MyVM->scanPhantomReferencesQueue();
+ th->MyVM->scanPhantomReferencesQueue(0);
// (8) Trace the new objects added by queues.
for(cur = cur->next(); cur != used_nodes; cur = cur->next())
Modified: vmkit/trunk/lib/Mvm/MMTk/MvmGC.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/MMTk/MvmGC.cpp?rev=104859&r1=104858&r2=104859&view=diff
==============================================================================
--- vmkit/trunk/lib/Mvm/MMTk/MvmGC.cpp (original)
+++ vmkit/trunk/lib/Mvm/MMTk/MvmGC.cpp Thu May 27 13:07:44 2010
@@ -67,44 +67,44 @@
th->realRoutine(_th);
}
-bool Collector::isLive(gc* ptr) {
+bool Collector::isLive(gc* ptr, uintptr_t closure) {
abort();
return false;
}
-void Collector::scanObject(void** ptr) {
+void Collector::scanObject(void** ptr, uintptr_t closure) {
abort();
}
-void Collector::markAndTrace(void* source, void* ptr) {
+void Collector::markAndTrace(void* source, void* ptr, uintptr_t closure) {
abort();
}
-void Collector::markAndTraceRoot(void* ptr) {
+void Collector::markAndTraceRoot(void* ptr, uintptr_t closure) {
abort();
}
-gc* Collector::retainForFinalize(gc* val) {
+gc* Collector::retainForFinalize(gc* val, uintptr_t closure) {
abort();
return NULL;
}
-gc* Collector::retainReferent(gc* val) {
+gc* Collector::retainReferent(gc* val, uintptr_t closure) {
abort();
return NULL;
}
-gc* Collector::getForwardedFinalizable(gc* val) {
+gc* Collector::getForwardedFinalizable(gc* val, uintptr_t closure) {
abort();
return NULL;
}
-gc* Collector::getForwardedReference(gc* val) {
+gc* Collector::getForwardedReference(gc* val, uintptr_t closure) {
abort();
return NULL;
}
-gc* Collector::getForwardedReferent(gc* val) {
+gc* Collector::getForwardedReferent(gc* val, uintptr_t closure) {
abort();
return NULL;
}
Modified: vmkit/trunk/lib/Mvm/MMTk/MvmGC.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/MMTk/MvmGC.h?rev=104859&r1=104858&r2=104859&view=diff
==============================================================================
--- vmkit/trunk/lib/Mvm/MMTk/MvmGC.h (original)
+++ vmkit/trunk/lib/Mvm/MMTk/MvmGC.h Thu May 27 13:07:44 2010
@@ -67,25 +67,15 @@
public:
static int verbose;
- static uintptr_t TraceLocal;
-
- static bool isLive(gc* ptr) __attribute__ ((always_inline));
-
- static void scanObject(void** ptr) __attribute__ ((always_inline));
-
- static void markAndTrace(void* source, void* ptr) __attribute__ ((always_inline));
-
- static void markAndTraceRoot(void* ptr) __attribute__ ((always_inline));
-
- static gc* retainForFinalize(gc* val) __attribute__ ((always_inline));
-
- static gc* retainReferent(gc* val) __attribute__ ((always_inline));
-
- static gc* getForwardedFinalizable(gc* val) __attribute__ ((always_inline));
-
- static gc* getForwardedReference(gc* val) __attribute__ ((always_inline));
-
- static gc* getForwardedReferent(gc* val) __attribute__ ((always_inline));
+ static bool isLive(gc* ptr, uintptr_t closure) __attribute__ ((always_inline));
+ static void scanObject(void** ptr, uintptr_t closure) __attribute__ ((always_inline));
+ static void markAndTrace(void* source, void* ptr, uintptr_t closure) __attribute__ ((always_inline));
+ static void markAndTraceRoot(void* ptr, uintptr_t closure) __attribute__ ((always_inline));
+ static gc* retainForFinalize(gc* val, uintptr_t closure) __attribute__ ((always_inline));
+ static gc* retainReferent(gc* val, uintptr_t closure) __attribute__ ((always_inline));
+ static gc* getForwardedFinalizable(gc* val, uintptr_t closure) __attribute__ ((always_inline));
+ static gc* getForwardedReference(gc* val, uintptr_t closure) __attribute__ ((always_inline));
+ static gc* getForwardedReferent(gc* val, uintptr_t closure) __attribute__ ((always_inline));
static void collect();
Modified: vmkit/trunk/lib/Mvm/Runtime/MethodInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/Runtime/MethodInfo.cpp?rev=104859&r1=104858&r2=104859&view=diff
==============================================================================
--- vmkit/trunk/lib/Mvm/Runtime/MethodInfo.cpp (original)
+++ vmkit/trunk/lib/Mvm/Runtime/MethodInfo.cpp Thu May 27 13:07:44 2010
@@ -23,7 +23,7 @@
using namespace mvm;
-void CamlMethodInfo::scan(void* TL, void* ip, void* addr) {
+void CamlMethodInfo::scan(uintptr_t closure, void* ip, void* addr) {
if (!CF && InstructionPointer) {
MethodInfo* MI = VirtualMachine::SharedStaticFunctions.IPToMethodInfo(ip);
if (MI != &DefaultMethodInfo::DM) {
@@ -35,7 +35,7 @@
//uintptr_t spaddr = (uintptr_t)addr + CF->FrameSize + sizeof(void*);
uintptr_t spaddr = ((uintptr_t*)addr)[0];
for (uint16 i = 0; i < CF->NumLiveOffsets; ++i) {
- Collector::scanObject((void**)(spaddr + CF->LiveOffsets[i]));
+ Collector::scanObject((void**)(spaddr + CF->LiveOffsets[i]), closure);
}
}
}
@@ -56,7 +56,7 @@
DefaultMethodInfo DefaultMethodInfo::DM;
-void DefaultMethodInfo::scan(void* TL, void* ip, void* addr) {
+void DefaultMethodInfo::scan(uintptr_t closure, void* ip, void* addr) {
}
Modified: vmkit/trunk/lib/Mvm/Runtime/Object.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/Runtime/Object.cpp?rev=104859&r1=104858&r2=104859&view=diff
==============================================================================
--- vmkit/trunk/lib/Mvm/Runtime/Object.cpp (original)
+++ vmkit/trunk/lib/Mvm/Runtime/Object.cpp Thu May 27 13:07:44 2010
@@ -171,13 +171,13 @@
}
-void VirtualMachine::scanFinalizationQueue() {
+void VirtualMachine::scanFinalizationQueue(uintptr_t closure) {
uint32 NewIndex = 0;
for (uint32 i = 0; i < CurrentIndex; ++i) {
gc* obj = FinalizationQueue[i];
- if (!Collector::isLive(obj)) {
- obj = Collector::retainForFinalize(FinalizationQueue[i]);
+ if (!Collector::isLive(obj, closure)) {
+ obj = Collector::retainForFinalize(FinalizationQueue[i], closure);
if (CurrentFinalizedIndex >= ToBeFinalizedLength)
growToBeFinalizedQueue();
@@ -185,20 +185,22 @@
/* Add to object table */
ToBeFinalized[CurrentFinalizedIndex++] = obj;
} else {
- FinalizationQueue[NewIndex++] = Collector::getForwardedFinalizable(obj);
+ FinalizationQueue[NewIndex++] =
+ Collector::getForwardedFinalizable(obj, closure);
}
}
CurrentIndex = NewIndex;
}
-void VirtualMachine::tracer() {
+void VirtualMachine::tracer(uintptr_t closure) {
for (uint32 i = 0; i < CurrentFinalizedIndex; ++i) {
- Collector::markAndTraceRoot(ToBeFinalized + i);
+ Collector::markAndTraceRoot(ToBeFinalized + i, closure);
}
}
-gc* ReferenceQueue::processReference(gc* reference, VirtualMachine* vm) {
- if (!Collector::isLive(reference)) {
+gc* ReferenceQueue::processReference(
+ gc* reference, VirtualMachine* vm, uintptr_t closure) {
+ if (!Collector::isLive(reference, closure)) {
vm->clearReferent(reference);
return 0;
}
@@ -210,15 +212,16 @@
if (semantics == SOFT) {
// TODO: are we are out of memory? Consider that we always are for now.
if (false) {
- Collector::retainReferent(referent);
+ Collector::retainReferent(referent, closure);
}
} else if (semantics == PHANTOM) {
// Nothing to do.
}
- if (Collector::isLive(referent)) {
- gc* newReferent = mvm::Collector::getForwardedReferent(referent);
- gc* newReference = mvm::Collector::getForwardedReference(reference);
+ if (Collector::isLive(referent, closure)) {
+ gc* newReferent = mvm::Collector::getForwardedReferent(referent, closure);
+ gc* newReference =
+ mvm::Collector::getForwardedReference(reference, closure);
vm->setReferent(newReference, newReferent);
return newReference;
} else {
@@ -229,37 +232,37 @@
}
-void ReferenceQueue::scan(VirtualMachine* vm) {
+void ReferenceQueue::scan(VirtualMachine* vm, uintptr_t closure) {
uint32 NewIndex = 0;
for (uint32 i = 0; i < CurrentIndex; ++i) {
gc* obj = References[i];
- gc* res = processReference(obj, vm);
+ gc* res = processReference(obj, vm, closure);
if (res) References[NewIndex++] = res;
}
CurrentIndex = NewIndex;
}
-void PreciseStackScanner::scanStack(mvm::Thread* th) {
+void PreciseStackScanner::scanStack(mvm::Thread* th, uintptr_t closure) {
StackWalker Walker(th);
while (MethodInfo* MI = Walker.get()) {
- MI->scan(0, Walker.ip, Walker.addr);
+ MI->scan(closure, Walker.ip, Walker.addr);
++Walker;
}
}
-void UnpreciseStackScanner::scanStack(mvm::Thread* th) {
+void UnpreciseStackScanner::scanStack(mvm::Thread* th, uintptr_t closure) {
register unsigned int **max = (unsigned int**)(void*)th->baseSP;
if (mvm::Thread::get() != th) {
register unsigned int **cur = (unsigned int**)th->waitOnSP();
- for(; cur<max; cur++) Collector::scanObject((void**)cur);
+ for(; cur<max; cur++) Collector::scanObject((void**)cur, closure);
} else {
jmp_buf buf;
setjmp(buf);
register unsigned int **cur = (unsigned int**)&buf;
- for(; cur<max; cur++) Collector::scanObject((void**)cur);
+ for(; cur<max; cur++) Collector::scanObject((void**)cur, closure);
}
}
Modified: vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp?rev=104859&r1=104858&r2=104859&view=diff
==============================================================================
--- vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp (original)
+++ vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp Thu May 27 13:07:44 2010
@@ -17,7 +17,6 @@
using namespace mvm;
-uintptr_t Collector::TraceLocal = 0;
int Collector::verbose = 0;
extern "C" void* JnJVM_org_mmtk_plan_marksweep_MSMutator_alloc__IIIII(uintptr_t Mutator, int32_t sz, int32_t align, int32_t offset, int32_t allocator, int32_t site) __attribute__((always_inline));
@@ -97,47 +96,40 @@
JnJVM_org_mmtk_plan_MutatorContext_deinitMutator__(th->MutatorContext);
}
-bool Collector::isLive(gc* ptr) {
- return JnJVM_org_mmtk_plan_marksweep_MSTraceLocal_isLive__Lorg_vmmagic_unboxed_ObjectReference_2(TraceLocal, ptr);
+bool Collector::isLive(gc* ptr, uintptr_t closure) {
+ return JnJVM_org_mmtk_plan_marksweep_MSTraceLocal_isLive__Lorg_vmmagic_unboxed_ObjectReference_2(closure, ptr);
}
-void Collector::scanObject(void** ptr) {
- JnJVM_org_mmtk_plan_TraceLocal_reportDelayedRootEdge__Lorg_vmmagic_unboxed_Address_2(TraceLocal, ptr);
+void Collector::scanObject(void** ptr, uintptr_t closure) {
+ JnJVM_org_mmtk_plan_TraceLocal_reportDelayedRootEdge__Lorg_vmmagic_unboxed_Address_2(closure, ptr);
}
-void Collector::markAndTrace(void* source, void* ptr) {
- assert(TraceLocal && "scanning without a trace local");
- JnJVM_org_mmtk_plan_TraceLocal_processEdge__Lorg_vmmagic_unboxed_ObjectReference_2Lorg_vmmagic_unboxed_Address_2(TraceLocal, source, ptr);
+void Collector::markAndTrace(void* source, void* ptr, uintptr_t closure) {
+ JnJVM_org_mmtk_plan_TraceLocal_processEdge__Lorg_vmmagic_unboxed_ObjectReference_2Lorg_vmmagic_unboxed_Address_2(closure, source, ptr);
}
-void Collector::markAndTraceRoot(void* ptr) {
- assert(TraceLocal && "scanning without a trace local");
- JnJVM_org_mmtk_plan_TraceLocal_processRootEdge__Lorg_vmmagic_unboxed_Address_2Z(TraceLocal, ptr, true);
+void Collector::markAndTraceRoot(void* ptr, uintptr_t closure) {
+ JnJVM_org_mmtk_plan_TraceLocal_processRootEdge__Lorg_vmmagic_unboxed_Address_2Z(closure, ptr, true);
}
-gc* Collector::retainForFinalize(gc* val) {
- assert(TraceLocal && "scanning without a trace local");
- return JnJVM_org_mmtk_plan_TraceLocal_retainForFinalize__Lorg_vmmagic_unboxed_ObjectReference_2(TraceLocal, val);
+gc* Collector::retainForFinalize(gc* val, uintptr_t closure) {
+ return JnJVM_org_mmtk_plan_TraceLocal_retainForFinalize__Lorg_vmmagic_unboxed_ObjectReference_2(closure, val);
}
-gc* Collector::retainReferent(gc* val) {
- assert(TraceLocal && "scanning without a trace local");
- return JnJVM_org_mmtk_plan_TraceLocal_retainReferent__Lorg_vmmagic_unboxed_ObjectReference_2(TraceLocal, val);
+gc* Collector::retainReferent(gc* val, uintptr_t closure) {
+ return JnJVM_org_mmtk_plan_TraceLocal_retainReferent__Lorg_vmmagic_unboxed_ObjectReference_2(closure, val);
}
-gc* Collector::getForwardedFinalizable(gc* val) {
- assert(TraceLocal && "scanning without a trace local");
- return JnJVM_org_mmtk_plan_TraceLocal_getForwardedFinalizable__Lorg_vmmagic_unboxed_ObjectReference_2(TraceLocal, val);
+gc* Collector::getForwardedFinalizable(gc* val, uintptr_t closure) {
+ return JnJVM_org_mmtk_plan_TraceLocal_getForwardedFinalizable__Lorg_vmmagic_unboxed_ObjectReference_2(closure, val);
}
-gc* Collector::getForwardedReference(gc* val) {
- assert(TraceLocal && "scanning without a trace local");
- return JnJVM_org_mmtk_plan_TraceLocal_getForwardedReference__Lorg_vmmagic_unboxed_ObjectReference_2(TraceLocal, val);
+gc* Collector::getForwardedReference(gc* val, uintptr_t closure) {
+ return JnJVM_org_mmtk_plan_TraceLocal_getForwardedReference__Lorg_vmmagic_unboxed_ObjectReference_2(closure, val);
}
-gc* Collector::getForwardedReferent(gc* val) {
- assert(TraceLocal && "scanning without a trace local");
- return JnJVM_org_mmtk_plan_TraceLocal_getForwardedReferent__Lorg_vmmagic_unboxed_ObjectReference_2(TraceLocal, val);
+gc* Collector::getForwardedReferent(gc* val, uintptr_t closure) {
+ return JnJVM_org_mmtk_plan_TraceLocal_getForwardedReferent__Lorg_vmmagic_unboxed_ObjectReference_2(closure, val);
}
void Collector::collect() {
Modified: vmkit/trunk/mmtk/mmtk-j3/FinalizableProcessor.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/mmtk-j3/FinalizableProcessor.cpp?rev=104859&r1=104858&r2=104859&view=diff
==============================================================================
--- vmkit/trunk/mmtk/mmtk-j3/FinalizableProcessor.cpp (original)
+++ vmkit/trunk/mmtk/mmtk-j3/FinalizableProcessor.cpp Thu May 27 13:07:44 2010
@@ -26,8 +26,6 @@
extern "C" void
Java_org_j3_mmtk_FinalizableProcessor_scan__Lorg_mmtk_plan_TraceLocal_2Z (JavaObject* FP, JavaObject* TL, uint8_t nursery) {
- assert(mvm::Collector::TraceLocal == (uintptr_t)TL && "Mismatch in trace local");
-
mvm::Thread* th = mvm::Thread::get();
- th->MyVM->scanFinalizationQueue();
+ th->MyVM->scanFinalizationQueue(reinterpret_cast<uintptr_t>(TL));
}
Modified: vmkit/trunk/mmtk/mmtk-j3/ReferenceProcessor.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/mmtk-j3/ReferenceProcessor.cpp?rev=104859&r1=104858&r2=104859&view=diff
==============================================================================
--- vmkit/trunk/mmtk/mmtk-j3/ReferenceProcessor.cpp (original)
+++ vmkit/trunk/mmtk/mmtk-j3/ReferenceProcessor.cpp Thu May 27 13:07:44 2010
@@ -22,17 +22,17 @@
};
extern "C" void Java_org_j3_mmtk_ReferenceProcessor_scan__Lorg_mmtk_plan_TraceLocal_2Z (ReferenceProcessor* RP, JavaObject* TL, uint8_t nursery) {
- assert(mvm::Collector::TraceLocal == (uintptr_t)TL && "Mismatch in trace local");
-
mvm::Thread* th = mvm::Thread::get();
uint32_t val = RP->ordinal;
- if (val == 0)
- th->MyVM->scanSoftReferencesQueue();
- else if (val == 1)
- th->MyVM->scanWeakReferencesQueue();
- else if (val == 2)
- th->MyVM->scanPhantomReferencesQueue();
+ if (val == 0) {
+ th->MyVM->scanSoftReferencesQueue(reinterpret_cast<uintptr_t>(TL));
+ } else if (val == 1) {
+ th->MyVM->scanWeakReferencesQueue(reinterpret_cast<uintptr_t>(TL));
+ } else {
+ assert(val == 2);
+ th->MyVM->scanPhantomReferencesQueue(reinterpret_cast<uintptr_t>(TL));
+ }
}
Modified: vmkit/trunk/mmtk/mmtk-j3/Scanning.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/mmtk-j3/Scanning.cpp?rev=104859&r1=104858&r2=104859&view=diff
==============================================================================
--- vmkit/trunk/mmtk/mmtk-j3/Scanning.cpp (original)
+++ vmkit/trunk/mmtk/mmtk-j3/Scanning.cpp Thu May 27 13:07:44 2010
@@ -17,26 +17,24 @@
extern "C" void Java_org_j3_mmtk_Scanning_computeThreadRoots__Lorg_mmtk_plan_TraceLocal_2 (JavaObject* Scanning, JavaObject* TL) {
// When entering this function, all threads are waiting on the rendezvous to
// finish.
- mvm::Collector::TraceLocal = (uintptr_t)TL;
mvm::Thread* th = mvm::Thread::get();
mvm::StackScanner* sc = th->MyVM->getScanner();
mvm::Thread* tcur = th;
do {
- sc->scanStack(tcur);
+ sc->scanStack(tcur, reinterpret_cast<uintptr_t>(TL));
tcur = (mvm::Thread*)tcur->next();
} while (tcur != th);
}
extern "C" void Java_org_j3_mmtk_Scanning_computeGlobalRoots__Lorg_mmtk_plan_TraceLocal_2 (JavaObject* Scanning, JavaObject* TL) {
- assert(mvm::Collector::TraceLocal == (uintptr_t)TL && "Mismatch in trace local");
- mvm::Thread::get()->MyVM->tracer();
+ mvm::Thread::get()->MyVM->tracer(reinterpret_cast<uintptr_t>(TL));
mvm::Thread* th = mvm::Thread::get();
mvm::Thread* tcur = th;
do {
- tcur->tracer();
+ tcur->tracer(reinterpret_cast<uintptr_t>(TL));
tcur = (mvm::Thread*)tcur->next();
} while (tcur != th);
@@ -53,11 +51,10 @@
extern "C" void Java_org_j3_mmtk_Scanning_specializedScanObject__ILorg_mmtk_plan_TransitiveClosure_2Lorg_vmmagic_unboxed_ObjectReference_2 (JavaObject* Scanning, uint32_t id, JavaObject* TC, JavaObject* obj) __attribute__ ((always_inline));
extern "C" void Java_org_j3_mmtk_Scanning_specializedScanObject__ILorg_mmtk_plan_TransitiveClosure_2Lorg_vmmagic_unboxed_ObjectReference_2 (JavaObject* Scanning, uint32_t id, JavaObject* TC, JavaObject* obj) {
- assert(mvm::Collector::TraceLocal == (uintptr_t)TC && "Mismatch in trace local");
assert(obj && "No object to trace");
if (obj->getVirtualTable()) {
assert(obj->getVirtualTable()->tracer && "No tracer in VT");
- obj->tracer();
+ obj->tracer(reinterpret_cast<uintptr_t>(TC));
}
}
More information about the vmkit-commits
mailing list