[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