[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