[vmkit-commits] [vmkit] r121065 - in /vmkit/branches/multi-vm: include/mvm/VirtualMachine.h lib/J3/VMCore/Jnjvm.cpp lib/J3/VMCore/Jnjvm.h lib/J3/VMCore/ReferenceQueue.cpp lib/J3/VMCore/ReferenceQueue.h lib/Mvm/Runtime/SystemThreads.cpp
Gael Thomas
gael.thomas at lip6.fr
Mon Dec 6 15:30:15 PST 2010
Author: gthomas
Date: Mon Dec 6 17:30:14 2010
New Revision: 121065
URL: http://llvm.org/viewvc/llvm-project?rev=121065&view=rev
Log:
remove java specific functions from ReferenceThread
Modified:
vmkit/branches/multi-vm/include/mvm/VirtualMachine.h
vmkit/branches/multi-vm/lib/J3/VMCore/Jnjvm.cpp
vmkit/branches/multi-vm/lib/J3/VMCore/Jnjvm.h
vmkit/branches/multi-vm/lib/J3/VMCore/ReferenceQueue.cpp
vmkit/branches/multi-vm/lib/J3/VMCore/ReferenceQueue.h
vmkit/branches/multi-vm/lib/Mvm/Runtime/SystemThreads.cpp
Modified: vmkit/branches/multi-vm/include/mvm/VirtualMachine.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/multi-vm/include/mvm/VirtualMachine.h?rev=121065&r1=121064&r2=121065&view=diff
==============================================================================
--- vmkit/branches/multi-vm/include/mvm/VirtualMachine.h (original)
+++ vmkit/branches/multi-vm/include/mvm/VirtualMachine.h Mon Dec 6 17:30:14 2010
@@ -55,10 +55,6 @@
//===----------------------------------------------------------------------===//
// (2) GC-related methods.
//===----------------------------------------------------------------------===//
- /// finalizeObject - invoke the finalizer of a java object
- ///
- virtual void finalizeObject(mvm::gc* obj) {}
-
/// startCollection - Preliminary code before starting a GC.
///
virtual void startCollection() {}
@@ -66,6 +62,24 @@
/// endCollection - Code after running a GC.
///
virtual void endCollection() {}
+
+ /// finalizeObject - invoke the finalizer of a java object
+ ///
+ virtual void finalizeObject(mvm::gc* obj) {}
+
+ /// getReferentPtr - return the referent of a reference
+ ///
+ virtual mvm::gc** getReferent(mvm::gc* ref) { abort(); }
+
+ /// setReferentPtr - set the referent of a reference
+ ///
+ virtual void setReferent(mvm::gc* ref, mvm::gc* val) { abort(); }
+
+ /// enqueueReference - enqueue the reference
+ ///
+ virtual bool enqueueReference(mvm::gc* _obj) { abort(); }
+
+
/// scanWeakReferencesQueue - Scan all weak references. Called by the GC
/// before scanning the finalization queue.
Modified: vmkit/branches/multi-vm/lib/J3/VMCore/Jnjvm.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/multi-vm/lib/J3/VMCore/Jnjvm.cpp?rev=121065&r1=121064&r2=121065&view=diff
==============================================================================
--- vmkit/branches/multi-vm/lib/J3/VMCore/Jnjvm.cpp (original)
+++ vmkit/branches/multi-vm/lib/J3/VMCore/Jnjvm.cpp Mon Dec 6 17:30:14 2010
@@ -1076,7 +1076,7 @@
llvm_gcroot(javaLoader, 0);
JnjvmClassLoader* loader = bootstrapLoader;
- referenceThread = new ReferenceThread(this);
+ referenceThread = new ReferenceThread(vmkit);
javaReferenceThread = new JavaThread(this, referenceThread);
referenceThread->allVmsData[vmID] = javaReferenceThread;
referenceThread->attach(this);
@@ -1406,6 +1406,29 @@
meth->invokeIntVirtualBuf(this, cl, obj, 0);
}
+mvm::gc** Jnjvm::getReferent(mvm::gc* _obj) {
+ llvm_gcroot(_obj, 0);
+ JavaObjectReference* obj = (JavaObjectReference*)_obj;
+ llvm_gcroot(obj, 0);
+ return (mvm::gc**)JavaObjectReference::getReferentPtr(obj);
+}
+
+void Jnjvm::setReferent(mvm::gc* _obj, mvm::gc* val) {
+ llvm_gcroot(_obj, 0);
+ JavaObjectReference* obj = (JavaObjectReference*)_obj;
+ llvm_gcroot(obj, 0);
+ llvm_gcroot(val, 0);
+ JavaObjectReference::setReferent(obj, (JavaObject*)val);
+}
+
+bool Jnjvm::enqueueReference(mvm::gc* _obj) {
+ JavaObject* obj = (JavaObject*)_obj;
+ llvm_gcroot(obj, 0);
+ JavaMethod* meth = upcalls->EnqueueReference;
+ UserClass* cl = JavaObject::getClass(obj)->asClass();
+ return (bool)meth->invokeIntSpecialBuf(this, cl, obj, 0);
+}
+
void Jnjvm::startCollection() {
referenceThread->ToEnqueueLock.acquire();
referenceThread->SoftReferencesQueue.acquire();
Modified: vmkit/branches/multi-vm/lib/J3/VMCore/Jnjvm.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/multi-vm/lib/J3/VMCore/Jnjvm.h?rev=121065&r1=121064&r2=121065&view=diff
==============================================================================
--- vmkit/branches/multi-vm/lib/J3/VMCore/Jnjvm.h (original)
+++ vmkit/branches/multi-vm/lib/J3/VMCore/Jnjvm.h Mon Dec 6 17:30:14 2010
@@ -314,7 +314,19 @@
/// finalizeObject - invoke the finalizer of a java object
///
virtual void finalizeObject(mvm::gc* obj);
-
+
+ /// getReferentPtr - return the referent of a reference
+ ///
+ virtual mvm::gc** getReferent(mvm::gc* ref);
+
+ /// setReferentPtr - set the referent of a reference
+ ///
+ virtual void setReferent(mvm::gc* ref, mvm::gc* val);
+
+ /// enqueueReference - enqueue the reference
+ ///
+ virtual bool enqueueReference(mvm::gc* _obj);
+
/// setReferenceThread - Set the enqueue thread of this VM.
///
void setReferenceThread(ReferenceThread* th) { referenceThread = th; }
Modified: vmkit/branches/multi-vm/lib/J3/VMCore/ReferenceQueue.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/multi-vm/lib/J3/VMCore/ReferenceQueue.cpp?rev=121065&r1=121064&r2=121065&view=diff
==============================================================================
--- vmkit/branches/multi-vm/lib/J3/VMCore/ReferenceQueue.cpp (original)
+++ vmkit/branches/multi-vm/lib/J3/VMCore/ReferenceQueue.cpp Mon Dec 6 17:30:14 2010
@@ -15,33 +15,40 @@
using namespace j3;
-ReferenceThread::ReferenceThread(Jnjvm* vm) :
- MutatorThread(vm->vmkit),
- WeakReferencesQueue(ReferenceQueue::WEAK),
- SoftReferencesQueue(ReferenceQueue::SOFT),
- PhantomReferencesQueue(ReferenceQueue::PHANTOM) {
+ReferenceThread::ReferenceThread(mvm::VMKit* vmkit) :
+ MutatorThread(vmkit),
+ WeakReferencesQueue(ReferenceQueue::WEAK),
+ SoftReferencesQueue(ReferenceQueue::SOFT),
+ PhantomReferencesQueue(ReferenceQueue::PHANTOM) {
ToEnqueue = new mvm::gc*[INITIAL_QUEUE_SIZE];
ToEnqueueLength = INITIAL_QUEUE_SIZE;
ToEnqueueIndex = 0;
-
- MyVM = vm;
}
-
-bool enqueueReference(mvm::gc* _obj) {
- Jnjvm* vm = JavaThread::get()->getJVM();
- JavaObject* obj = (JavaObject*)_obj;
+mvm::gc** getReferent(mvm::gc* obj) {
llvm_gcroot(obj, 0);
- JavaMethod* meth = vm->upcalls->EnqueueReference;
- UserClass* cl = JavaObject::getClass(obj)->asClass();
- return (bool)meth->invokeIntSpecialBuf(vm, cl, obj, 0);
+ mvm::VirtualMachine* vm = obj->getVirtualTable()->vm;
+ mvm::Thread::get()->attach(vm);
+ return vm->getReferent(obj);
}
-void invokeEnqueue(mvm::gc* res) {
- llvm_gcroot(res, 0);
+void setReferent(mvm::gc* obj, mvm::gc* val) {
+ printf("set referent: %p %p\n", obj, val);
+ llvm_gcroot(obj, 0);
+ llvm_gcroot(val, 0);
+ mvm::VirtualMachine* vm = obj->getVirtualTable()->vm;
+ mvm::Thread::get()->attach(vm);
+ vm->setReferent(obj, val);
+}
+
+void invokeEnqueue(mvm::gc* obj) {
+ llvm_gcroot(obj, 0);
TRY {
- enqueueReference(res);
+ mvm::VirtualMachine* vm = obj->getVirtualTable()->vm;
+ mvm::Thread::get()->attach(vm);
+
+ vm->enqueueReference(obj);
} IGNORE;
mvm::Thread::get()->clearPendingException();
}
@@ -92,32 +99,13 @@
ToEnqueue[ToEnqueueIndex++] = obj;
}
-mvm::gc** getReferentPtr(mvm::gc* _obj) {
- JavaObjectReference* obj = (JavaObjectReference*)_obj;
- llvm_gcroot(obj, 0);
- return (mvm::gc**)JavaObjectReference::getReferentPtr(obj);
-}
-
-void setReferent(mvm::gc* _obj, mvm::gc* val) {
- JavaObjectReference* obj = (JavaObjectReference*)_obj;
- llvm_gcroot(obj, 0);
- llvm_gcroot(val, 0);
- JavaObjectReference::setReferent(obj, (JavaObject*)val);
-}
-
-void clearReferent(mvm::gc* _obj) {
- JavaObjectReference* obj = (JavaObjectReference*)_obj;
- llvm_gcroot(obj, 0);
- JavaObjectReference::setReferent(obj, NULL);
-}
-
mvm::gc* ReferenceQueue::processReference(mvm::gc* reference, ReferenceThread* th, uintptr_t closure) {
if (!mvm::Collector::isLive(reference, closure)) {
- clearReferent(reference);
+ setReferent(reference, 0);
return NULL;
}
- mvm::gc* referent = *(getReferentPtr(reference));
+ mvm::gc* referent = *(getReferent(reference));
if (!referent) {
return NULL;
@@ -139,7 +127,7 @@
setReferent(newReference, newReferent);
return newReference;
} else {
- clearReferent(newReference);
+ setReferent(newReference, 0);
th->addToEnqueue(newReference);
return NULL;
}
Modified: vmkit/branches/multi-vm/lib/J3/VMCore/ReferenceQueue.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/multi-vm/lib/J3/VMCore/ReferenceQueue.h?rev=121065&r1=121064&r2=121065&view=diff
==============================================================================
--- vmkit/branches/multi-vm/lib/J3/VMCore/ReferenceQueue.h (original)
+++ vmkit/branches/multi-vm/lib/J3/VMCore/ReferenceQueue.h Mon Dec 6 17:30:14 2010
@@ -131,7 +131,7 @@
PhantomReferencesQueue.addReference(ref);
}
- ReferenceThread(Jnjvm* vm);
+ ReferenceThread(mvm::VMKit* vmkit);
virtual void localDestroy() {
delete[] ToEnqueue;
Modified: vmkit/branches/multi-vm/lib/Mvm/Runtime/SystemThreads.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/multi-vm/lib/Mvm/Runtime/SystemThreads.cpp?rev=121065&r1=121064&r2=121065&view=diff
==============================================================================
--- vmkit/branches/multi-vm/lib/Mvm/Runtime/SystemThreads.cpp (original)
+++ vmkit/branches/multi-vm/lib/Mvm/Runtime/SystemThreads.cpp Mon Dec 6 17:30:14 2010
@@ -80,17 +80,13 @@
typedef void (*destructor_t)(void*);
-void invokeFinalizer(mvm::gc* obj) {
+void invokeFinalize(mvm::gc* obj) {
llvm_gcroot(obj, 0);
- VirtualMachine* vm = obj->getVirtualTable()->vm; //JavaThread::get()->getJVM();
- mvm::Thread::get()->attach(vm);
- vm->finalizeObject(obj);
-}
-
-void invokeFinalize(mvm::gc* res) {
- llvm_gcroot(res, 0);
TRY {
- invokeFinalizer(res);
+ llvm_gcroot(obj, 0);
+ VirtualMachine* vm = obj->getVirtualTable()->vm; //JavaThread::get()->getJVM();
+ mvm::Thread::get()->attach(vm);
+ vm->finalizeObject(obj);
} IGNORE;
mvm::Thread::get()->clearPendingException();
}
More information about the vmkit-commits
mailing list