[vmkit-commits] [vmkit] r85213 - in /vmkit/trunk/mmtk/mmtk-j3: Collection.cpp Scanning.cpp

Nicolas Geoffray nicolas.geoffray at lip6.fr
Tue Oct 27 02:00:11 PDT 2009


Author: geoffray
Date: Tue Oct 27 04:00:10 2009
New Revision: 85213

URL: http://llvm.org/viewvc/llvm-project?rev=85213&view=rev
Log:
Implement some functions.


Modified:
    vmkit/trunk/mmtk/mmtk-j3/Collection.cpp
    vmkit/trunk/mmtk/mmtk-j3/Scanning.cpp

Modified: vmkit/trunk/mmtk/mmtk-j3/Collection.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/mmtk-j3/Collection.cpp?rev=85213&r1=85212&r2=85213&view=diff

==============================================================================
--- vmkit/trunk/mmtk/mmtk-j3/Collection.cpp (original)
+++ vmkit/trunk/mmtk/mmtk-j3/Collection.cpp Tue Oct 27 04:00:10 2009
@@ -47,12 +47,14 @@
   // Nothing to do.
 }
 
+extern "C" void Java_org_j3_mmtk_Collection_prepareMutator__Lorg_mmtk_plan_MutatorContext_2 (JavaObject* C, JavaObject* MC) {
+}
+
 
 extern "C" void Java_org_j3_mmtk_Collection_joinCollection__ () { JavaThread::get()->printBacktrace(); abort(); }
 extern "C" void Java_org_j3_mmtk_Collection_reportPhysicalAllocationFailed__ () { JavaThread::get()->printBacktrace(); abort(); }
 extern "C" void Java_org_j3_mmtk_Collection_triggerAsyncCollection__I () { JavaThread::get()->printBacktrace(); abort(); }
 extern "C" void Java_org_j3_mmtk_Collection_noThreadsInGC__ () { JavaThread::get()->printBacktrace(); abort(); }
-extern "C" void Java_org_j3_mmtk_Collection_prepareMutator__Lorg_mmtk_plan_MutatorContext_2 () { JavaThread::get()->printBacktrace(); abort(); }
 extern "C" void Java_org_j3_mmtk_Collection_activeGCThreads__ () { JavaThread::get()->printBacktrace(); abort(); }
 extern "C" void Java_org_j3_mmtk_Collection_activeGCThreadOrdinal__ () { JavaThread::get()->printBacktrace(); abort(); }
 extern "C" void Java_org_j3_mmtk_Collection_requestMutatorFlush__ () { JavaThread::get()->printBacktrace(); abort(); }

Modified: vmkit/trunk/mmtk/mmtk-j3/Scanning.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/mmtk-j3/Scanning.cpp?rev=85213&r1=85212&r2=85213&view=diff

==============================================================================
--- vmkit/trunk/mmtk/mmtk-j3/Scanning.cpp (original)
+++ vmkit/trunk/mmtk/mmtk-j3/Scanning.cpp Tue Oct 27 04:00:10 2009
@@ -12,12 +12,29 @@
 
 using namespace jnjvm;
 
-extern "C" void Java_org_j3_mmtk_Scanning_computeThreadRoots__Lorg_mmtk_plan_TraceLocal_2 (JavaObject* Scanning, JavaObject* TraceLocal) {
-  JavaThread::get()->printBacktrace(); abort();
+extern "C" void Java_org_j3_mmtk_Scanning_computeThreadRoots__Lorg_mmtk_plan_TraceLocal_2 (JavaObject* Scanning, JavaObject* TL) {
+  mvm::Collector::TraceLocal = (uintptr_t)TL;
+  mvm::Thread* th = mvm::Thread::get();
+  th->inGC = true;
+  th->MyVM->startCollection();
+  th->MyVM->rendezvous.synchronize();
 }
 
-extern "C" void Java_org_j3_mmtk_Scanning_computeGlobalRoots__Lorg_mmtk_plan_TraceLocal_2 () {
-  JavaThread::get()->printBacktrace(); abort();
+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* th = mvm::Thread::get();
+  mvm::Thread* tcur = th;
+
+  // (1) Trace the VM.
+  th->MyVM->tracer();
+
+  // (2) Trace the threads.
+  do {
+    tcur->tracer();
+    tcur = (mvm::Thread*)tcur->next();
+  } while (tcur != th);
 }
 
 extern "C" void Java_org_j3_mmtk_Scanning_computeStaticRoots__Lorg_mmtk_plan_TraceLocal_2 () {





More information about the vmkit-commits mailing list