[vmkit-commits] [vmkit] r85229 - in /vmkit/trunk: include/mvm/VirtualMachine.h lib/JnJVM/Classpath/JavaUpcalls.cpp lib/JnJVM/VMCore/Jnjvm.h lib/Mvm/GCMmap2/MvmGC.h lib/Mvm/Runtime/Object.cpp
Nicolas Geoffray
nicolas.geoffray at lip6.fr
Tue Oct 27 04:34:38 PDT 2009
Author: geoffray
Date: Tue Oct 27 06:34:38 2009
New Revision: 85229
URL: http://llvm.org/viewvc/llvm-project?rev=85229&view=rev
Log:
Adjust to MMTk API.
Modified:
vmkit/trunk/include/mvm/VirtualMachine.h
vmkit/trunk/lib/JnJVM/Classpath/JavaUpcalls.cpp
vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.h
vmkit/trunk/lib/Mvm/GCMmap2/MvmGC.h
vmkit/trunk/lib/Mvm/Runtime/Object.cpp
Modified: vmkit/trunk/include/mvm/VirtualMachine.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/mvm/VirtualMachine.h?rev=85229&r1=85228&r2=85229&view=diff
==============================================================================
--- vmkit/trunk/include/mvm/VirtualMachine.h (original)
+++ vmkit/trunk/include/mvm/VirtualMachine.h Tue Oct 27 06:34:38 2009
@@ -389,6 +389,10 @@
/// by the VM.
//
virtual gc** getReferentPtr(gc*) { return 0; }
+
+ /// setReferent - Set the referent of the reference. Should be overriden
+ /// by the VM.
+ virtual void setReferent(gc* reference, gc* referent) { }
/// enqueueReference - Calls the enqueue method. Should be overriden
/// by the VM.
Modified: vmkit/trunk/lib/JnJVM/Classpath/JavaUpcalls.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Classpath/JavaUpcalls.cpp?rev=85229&r1=85228&r2=85229&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/Classpath/JavaUpcalls.cpp (original)
+++ vmkit/trunk/lib/JnJVM/Classpath/JavaUpcalls.cpp Tue Oct 27 06:34:38 2009
@@ -1062,7 +1062,11 @@
gc** Jnjvm::getReferentPtr(gc* _obj) {
JavaObjectReference* obj = (JavaObjectReference*)_obj;
return (gc**)obj->getReferentPtr();
- }
+}
+
+void Jnjvm::setReferent(gc* obj, gc* val) {
+ ((JavaObjectReference*)obj)->setReferent((JavaObject*)val);
+}
void Jnjvm::clearReferent(gc* _obj) {
JavaObjectReference* obj = (JavaObjectReference*)_obj;
Modified: vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.h?rev=85229&r1=85228&r2=85229&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.h Tue Oct 27 06:34:38 2009
@@ -360,6 +360,7 @@
virtual void clearReferent(gc*);
virtual gc** getReferentPtr(gc*);
+ virtual void setReferent(gc*, gc*);
virtual bool enqueueReference(gc*);
protected:
Modified: vmkit/trunk/lib/Mvm/GCMmap2/MvmGC.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/GCMmap2/MvmGC.h?rev=85229&r1=85228&r2=85229&view=diff
==============================================================================
--- vmkit/trunk/lib/Mvm/GCMmap2/MvmGC.h (original)
+++ vmkit/trunk/lib/Mvm/GCMmap2/MvmGC.h Tue Oct 27 06:34:38 2009
@@ -308,6 +308,24 @@
void setMinMemory(size_t sz){
}
+ static gc* retainForFinalize(gc* val) {
+ markAndTraceRoot(&val);
+ return val;
+ }
+
+ static gc* retainReferent(gc* val) {
+ markAndTraceRoot(&val);
+ return val;
+ }
+
+ static gc* getForwardedReference(gc* val) {
+ return val;
+ }
+
+ static gc* getForwardedFinalizable(gc* val) {
+ return val;
+ }
+
};
}
Modified: vmkit/trunk/lib/Mvm/Runtime/Object.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/Runtime/Object.cpp?rev=85229&r1=85228&r2=85229&view=diff
==============================================================================
--- vmkit/trunk/lib/Mvm/Runtime/Object.cpp (original)
+++ vmkit/trunk/lib/Mvm/Runtime/Object.cpp Tue Oct 27 06:34:38 2009
@@ -177,7 +177,7 @@
gc* obj = FinalizationQueue[i];
if (!Collector::isLive(obj)) {
- Collector::markAndTraceRoot(FinalizationQueue + i);
+ obj = Collector::retainForFinalize(FinalizationQueue[i]);
if (CurrentFinalizedIndex >= ToBeFinalizedLength)
growToBeFinalizedQueue();
@@ -185,7 +185,7 @@
/* Add to object table */
ToBeFinalized[CurrentFinalizedIndex++] = obj;
} else {
- FinalizationQueue[NewIndex++] = obj;
+ FinalizationQueue[NewIndex++] = Collector::getForwardedFinalizable(obj);
}
}
CurrentIndex = NewIndex;
@@ -201,21 +201,24 @@
return 0;
}
- gc** referent = vm->getReferentPtr(reference);
+ gc* referent = *(vm->getReferentPtr(reference));
if (!referent) return 0;
if (semantics == SOFT) {
// TODO: are we are out of memory? Consider that we always are for now.
if (false) {
- Collector::markAndTrace(reference, referent);
+ Collector::retainReferent(referent);
}
} else if (semantics == PHANTOM) {
// Nothing to do.
}
- if (Collector::isLive(*referent)) {
- return reference;
+ if (Collector::isLive(referent)) {
+ gc* newReferent = mvm::Collector::getForwardedReference(referent);
+ gc* newReference = mvm::Collector::getForwardedReference(reference);
+ vm->setReferent(newReference, newReferent);
+ return newReference;
} else {
vm->clearReferent(reference);
vm->addToEnqueue(reference);
More information about the vmkit-commits
mailing list