[vmkit-commits] [vmkit] r85142 - in /vmkit/trunk/lib/Mvm: CommonThread/CollectionRV.cpp Compiler/JIT.cpp GCMmap2/MvmGC.h GCMmap2/gc.cpp MMTk/MvmGC.cpp MMTk/MvmGC.h Runtime/Object.cpp

Nicolas Geoffray nicolas.geoffray at lip6.fr
Mon Oct 26 12:02:15 PDT 2009


Author: geoffray
Date: Mon Oct 26 14:02:15 2009
New Revision: 85142

URL: http://llvm.org/viewvc/llvm-project?rev=85142&view=rev
Log:
Adapt to MMTk internface.


Modified:
    vmkit/trunk/lib/Mvm/CommonThread/CollectionRV.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/MMTk/MvmGC.cpp
    vmkit/trunk/lib/Mvm/MMTk/MvmGC.h
    vmkit/trunk/lib/Mvm/Runtime/Object.cpp

Modified: vmkit/trunk/lib/Mvm/CommonThread/CollectionRV.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/CommonThread/CollectionRV.cpp?rev=85142&r1=85141&r2=85142&view=diff

==============================================================================
--- vmkit/trunk/lib/Mvm/CommonThread/CollectionRV.cpp (original)
+++ vmkit/trunk/lib/Mvm/CommonThread/CollectionRV.cpp Mon Oct 26 14:02:15 2009
@@ -24,7 +24,6 @@
   }
 }
 
-
 void CollectionRV::waitStacks() {
   mvm::Thread* self = mvm::Thread::get();
   stackLock();

Modified: vmkit/trunk/lib/Mvm/Compiler/JIT.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/Compiler/JIT.cpp?rev=85142&r1=85141&r2=85142&view=diff

==============================================================================
--- vmkit/trunk/lib/Mvm/Compiler/JIT.cpp (original)
+++ vmkit/trunk/lib/Mvm/Compiler/JIT.cpp Mon Oct 26 14:02:15 2009
@@ -197,6 +197,18 @@
     F = dyn_cast<Function>(GA->getAliasee());
     Boot = (BootType)(uintptr_t)executionEngine->getPointerToFunction(F);
     Boot(Plan);
+    
+    
+    F = globalModule->getFunction("JnJVM_org_mmtk_plan_TraceLocal_reportDelayedRootEdge__Lorg_vmmagic_unboxed_Address_2");
+    assert(F && "Could not find reportDelayedRootEdge from TraceLocal");
+    gc::MMTkDelayedRoot = (gc::MMTkDelayedRootType)
+      (uintptr_t)executionEngine->getPointerToFunction(F);
+    
+    F = globalModule->getFunction("JnJVM_org_mmtk_plan_TraceLocal_processEdge__Lorg_vmmagic_unboxed_ObjectReference_2Lorg_vmmagic_unboxed_Address_2");
+    assert(F && "Could not find processEdge from TraceLocal");
+    gc::MMTkProcessEdge = (gc::MMTkProcessEdgeType)
+      (uintptr_t)executionEngine->getPointerToFunction(F);
+   
 
   }
 #endif
@@ -466,7 +478,7 @@
         //char* spaddr = (char*)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]));
         }
       }
       
@@ -489,7 +501,7 @@
           //char* spaddr = (char*)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]));
           }
         }
         addr = (void**)addr[0];
@@ -506,7 +518,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]));
         }
       } else {
         llvm::GCFunctionInfo* GFI = IPToGCFunctionInfo(vm, ip);
@@ -521,7 +533,7 @@
                KE = GFI->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*)obj);
+            if (!(obj & 1)) Collector::scanObject((void**)(spaddr + K->StackOffset));
           }
         }
       }
@@ -540,7 +552,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]));
       }
     }
     addr = (void**)addr[0];

Modified: vmkit/trunk/lib/Mvm/GCMmap2/MvmGC.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/GCMmap2/MvmGC.h?rev=85142&r1=85141&r2=85142&view=diff

==============================================================================
--- vmkit/trunk/lib/Mvm/GCMmap2/MvmGC.h (original)
+++ vmkit/trunk/lib/Mvm/GCMmap2/MvmGC.h Mon Oct 26 14:02:15 2009
@@ -77,7 +77,7 @@
     else return false;
   }
   
-  static void scanObject(void* obj);
+  static void scanObject(void** ptr);
 
   static void initialise();
   static void destroy();

Modified: vmkit/trunk/lib/Mvm/GCMmap2/gc.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/GCMmap2/gc.cpp?rev=85142&r1=85141&r2=85142&view=diff

==============================================================================
--- vmkit/trunk/lib/Mvm/GCMmap2/gc.cpp (original)
+++ vmkit/trunk/lib/Mvm/GCMmap2/gc.cpp Mon Oct 26 14:02:15 2009
@@ -31,7 +31,8 @@
   mvm::Thread::get()->endNative();
 }
 
-void Collector::scanObject(void* obj) {
+void Collector::scanObject(void** val) {
+  void* obj = *val;
   if (obj) {
     GCChunkNode *node = o2node(obj);
 

Modified: vmkit/trunk/lib/Mvm/MMTk/MvmGC.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/MMTk/MvmGC.cpp?rev=85142&r1=85141&r2=85142&view=diff

==============================================================================
--- vmkit/trunk/lib/Mvm/MMTk/MvmGC.cpp (original)
+++ vmkit/trunk/lib/Mvm/MMTk/MvmGC.cpp Mon Oct 26 14:02:15 2009
@@ -18,6 +18,9 @@
 gc::MMTkAllocType gc::MMTkGCAllocator = 0;
 gc::MMTkPostAllocType gc::MMTkGCPostAllocator = 0;
 gc::MMTkCheckAllocatorType gc::MMTkCheckAllocator = 0;
+gc::MMTkDelayedRootType gc::MMTkDelayedRoot = 0;
+
+uintptr_t Collector::TraceLocal = 0;
 
   
 static std::set<gc*> Set;

Modified: vmkit/trunk/lib/Mvm/MMTk/MvmGC.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/MMTk/MvmGC.h?rev=85142&r1=85141&r2=85142&view=diff

==============================================================================
--- vmkit/trunk/lib/Mvm/MMTk/MvmGC.h (original)
+++ vmkit/trunk/lib/Mvm/MMTk/MvmGC.h Mon Oct 26 14:02:15 2009
@@ -54,11 +54,20 @@
   typedef int (*MMTkCheckAllocatorType)(uintptr_t Mutator, int32_t bytes,
                                         int32_t align, int32_t allocator);
 
+  typedef void (*MMTkDelayedRootType)(uintptr_t TraceLocal, void** slot);
+  
+  typedef void (*MMTkProcessEdgeType)(uintptr_t TraceLocal, uintptr_t source,
+                                      void** slot);
+
   static MMTkAllocType MMTkGCAllocator;
   
   static MMTkPostAllocType MMTkGCPostAllocator;
   
   static MMTkCheckAllocatorType MMTkCheckAllocator;
+  
+  static MMTkDelayedRootType MMTkDelayedRoot;
+  
+  static MMTkProcessEdgeType MMTkProcessEdge;
 
 
   void* operator new(size_t sz, VirtualTable *VT) {
@@ -82,6 +91,8 @@
 class Collector {
 public:
 
+  static uintptr_t TraceLocal;
+
   static bool isLive(gc*) {
     abort();
   }
@@ -90,8 +101,10 @@
     abort();
   }
   
-  static void scanObject(void*) {
-    abort();
+  static void scanObject(void** ptr) {
+    assert(gc::MMTkDelayedRoot && "scanning without a function");
+    assert(TraceLocal && "scanning without a trace local");
+    gc::MMTkDelayedRoot(TraceLocal, ptr);
   }
   
   static void collect() {

Modified: vmkit/trunk/lib/Mvm/Runtime/Object.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/Runtime/Object.cpp?rev=85142&r1=85141&r2=85142&view=diff

==============================================================================
--- vmkit/trunk/lib/Mvm/Runtime/Object.cpp (original)
+++ vmkit/trunk/lib/Mvm/Runtime/Object.cpp Mon Oct 26 14:02:15 2009
@@ -277,7 +277,7 @@
         //char* spaddr = (char*)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]));
         }
       }
       oldAddr = addr;
@@ -299,7 +299,7 @@
           //char* spaddr = (char*)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]));
           }
         }
         addr = (void**)addr[0];
@@ -316,7 +316,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]));
         }
       }
       
@@ -334,7 +334,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]));
       }
     }
     addr = (void**)addr[0];
@@ -346,12 +346,12 @@
   register unsigned int  **max = (unsigned int**)(void*)th->baseSP;
   if (mvm::Thread::get() != th) {
     register unsigned int  **cur = (unsigned int**)th->getLastSP();
-    for(; cur<max; cur++) Collector::scanObject(*cur);
+    for(; cur<max; cur++) Collector::scanObject((void**)cur);
   } else {
     jmp_buf buf;
     setjmp(buf);
     register unsigned int  **cur = (unsigned int**)&buf;
-    for(; cur<max; cur++) Collector::scanObject(*cur);
+    for(; cur<max; cur++) Collector::scanObject((void**)cur);
   }
 }
 





More information about the vmkit-commits mailing list