[vmkit-commits] [vmkit] r180314 - Removed VirtualTable usage when tracing objects in MMTk. Object tracing is now delegated to VirtualMachine.
Peter Senna Tschudin
peter.senna at gmail.com
Thu Apr 25 09:54:56 PDT 2013
Author: peter.senna
Date: Thu Apr 25 11:53:26 2013
New Revision: 180314
URL: http://llvm.org/viewvc/llvm-project?rev=180314&view=rev
Log:
Removed VirtualTable usage when tracing objects in MMTk. Object tracing is now delegated to VirtualMachine.
(cherry picked from commit 134bfd384358fa7270c7dc4d254ebba2992f447a)
Modified:
vmkit/trunk/include/vmkit/VirtualMachine.h
vmkit/trunk/lib/j3/VMCore/Jnjvm.cpp
vmkit/trunk/lib/j3/VMCore/Jnjvm.h
vmkit/trunk/mmtk/mmtk-j3/Scanning.cpp
Modified: vmkit/trunk/include/vmkit/VirtualMachine.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/vmkit/VirtualMachine.h?rev=180314&r1=180313&r2=180314&view=diff
==============================================================================
--- vmkit/trunk/include/vmkit/VirtualMachine.h (original)
+++ vmkit/trunk/include/vmkit/VirtualMachine.h Thu Apr 25 11:53:26 2013
@@ -190,6 +190,10 @@ public:
///
virtual void tracer(word_t closure) {}
+ /// traceObject - Method called during GC to trace live objects graph.
+ ///
+ virtual void traceObject(gc* object, word_t closure) = 0;
+
/// getObjectSize - Get the size of this object. Used by copying collectors.
///
virtual size_t getObjectSize(gc* object) = 0;
Modified: vmkit/trunk/lib/j3/VMCore/Jnjvm.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/Jnjvm.cpp?rev=180314&r1=180313&r2=180314&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/Jnjvm.cpp (original)
+++ vmkit/trunk/lib/j3/VMCore/Jnjvm.cpp Thu Apr 25 11:53:26 2013
@@ -1382,6 +1382,14 @@ void Jnjvm::addFinalizationCandidate(gc*
finalizerThread->addFinalizationCandidate(object);
}
+// This method is called during GC so no llvm_gcroot needed.
+void Jnjvm::traceObject(gc* obj, word_t closure) {
+ assert(obj && "No object to trace");
+ assert(obj->getVirtualTable() && "No virtual table");
+ assert(obj->getVirtualTable()->tracer && "No tracer in VT");
+ obj->tracer(closure);
+}
+
size_t Jnjvm::getObjectSize(gc* object) {
// TODO: because this is called during GC, there is no need to do
// llvm_gcroot. For clarity, it may be useful to have a special type
Modified: vmkit/trunk/lib/j3/VMCore/Jnjvm.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/Jnjvm.h?rev=180314&r1=180313&r2=180314&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/Jnjvm.h (original)
+++ vmkit/trunk/lib/j3/VMCore/Jnjvm.h Thu Apr 25 11:53:26 2013
@@ -130,6 +130,7 @@ private:
virtual void scanPhantomReferencesQueue(word_t closure);
virtual void scanFinalizationQueue(word_t closure);
virtual void addFinalizationCandidate(gc* obj);
+ virtual void traceObject(gc* obj, word_t closure);
virtual size_t getObjectSize(gc* obj);
virtual const char* getObjectTypeName(gc* obj);
virtual void printMethod(vmkit::FrameInfo* FI, word_t ip, word_t addr);
Modified: vmkit/trunk/mmtk/mmtk-j3/Scanning.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/mmtk-j3/Scanning.cpp?rev=180314&r1=180313&r2=180314&view=diff
==============================================================================
--- vmkit/trunk/mmtk/mmtk-j3/Scanning.cpp (original)
+++ vmkit/trunk/mmtk/mmtk-j3/Scanning.cpp Thu Apr 25 11:53:26 2013
@@ -49,10 +49,7 @@ extern "C" void Java_org_j3_mmtk_Scannin
extern "C" void Java_org_j3_mmtk_Scanning_specializedScanObject__ILorg_mmtk_plan_TransitiveClosure_2Lorg_vmmagic_unboxed_ObjectReference_2 (MMTkObject* Scanning, uint32_t id, MMTkObject* TC, gc* obj) ALWAYS_INLINE;
extern "C" void Java_org_j3_mmtk_Scanning_specializedScanObject__ILorg_mmtk_plan_TransitiveClosure_2Lorg_vmmagic_unboxed_ObjectReference_2 (MMTkObject* Scanning, uint32_t id, MMTkObject* TC, gc* obj) {
- assert(obj && "No object to trace");
- assert(obj->getVirtualTable() && "No virtual table");
- assert(obj->getVirtualTable()->tracer && "No tracer in VT");
- obj->tracer(reinterpret_cast<word_t>(TC));
+ vmkit::Thread::get()->MyVM->traceObject(obj, reinterpret_cast<word_t>(TC));
}
extern "C" void Java_org_j3_mmtk_Scanning_preCopyGCInstances__Lorg_mmtk_plan_TraceLocal_2 (MMTkObject* Scanning, MMTkObject* TL) {
@@ -61,10 +58,7 @@ extern "C" void Java_org_j3_mmtk_Scannin
extern "C" void Java_org_j3_mmtk_Scanning_scanObject__Lorg_mmtk_plan_TransitiveClosure_2Lorg_vmmagic_unboxed_ObjectReference_2 (
MMTkObject* Scanning, word_t TC, gc* obj) {
- assert(obj && "No object to trace");
- assert(obj->getVirtualTable() && "No virtual table");
- assert(obj->getVirtualTable()->tracer && "No tracer in VT");
- obj->tracer(TC);
+ vmkit::Thread::get()->MyVM->traceObject(obj, TC);
}
extern "C" void Java_org_j3_mmtk_Scanning_precopyChildren__Lorg_mmtk_plan_TraceLocal_2Lorg_vmmagic_unboxed_ObjectReference_2 (
More information about the vmkit-commits
mailing list