[vmkit-commits] [vmkit] r59250 - in /vmkit/trunk: include/mvm/ lib/JnJVM/LLVMRuntime/ lib/JnJVM/VMCore/ lib/Mvm/Allocator/ lib/Mvm/CommonThread/ lib/Mvm/GCMmap2/ lib/Mvm/Runtime/
Nicolas Geoffray
nicolas.geoffray at lip6.fr
Thu Nov 13 09:25:01 PST 2008
Author: geoffray
Date: Thu Nov 13 11:24:49 2008
New Revision: 59250
URL: http://llvm.org/viewvc/llvm-project?rev=59250&view=rev
Log:
Code cleanup, mostly removal of old MULTIPLE_GC macros.
Modified:
vmkit/trunk/include/mvm/VirtualMachine.h
vmkit/trunk/lib/JnJVM/LLVMRuntime/runtime-default.ll
vmkit/trunk/lib/JnJVM/LLVMRuntime/runtime-multi-mmap.ll
vmkit/trunk/lib/JnJVM/LLVMRuntime/runtime-single-mmap.ll
vmkit/trunk/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp
vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.h
vmkit/trunk/lib/JnJVM/VMCore/LowerConstantCalls.cpp
vmkit/trunk/lib/Mvm/Allocator/gcchunk.h
vmkit/trunk/lib/Mvm/CommonThread/ctthread.cpp
vmkit/trunk/lib/Mvm/GCMmap2/MvmGC.h
vmkit/trunk/lib/Mvm/GCMmap2/gc.cpp
vmkit/trunk/lib/Mvm/GCMmap2/gccollector.cpp
vmkit/trunk/lib/Mvm/GCMmap2/gccollector.h
vmkit/trunk/lib/Mvm/GCMmap2/gcinit.cpp
vmkit/trunk/lib/Mvm/Runtime/Object.cpp
vmkit/trunk/lib/Mvm/Runtime/Sigsegv.cpp
Modified: vmkit/trunk/include/mvm/VirtualMachine.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/mvm/VirtualMachine.h?rev=59250&r1=59249&r2=59250&view=diff
==============================================================================
--- vmkit/trunk/include/mvm/VirtualMachine.h (original)
+++ vmkit/trunk/include/mvm/VirtualMachine.h Thu Nov 13 11:24:49 2008
@@ -42,6 +42,16 @@
static CompilationUnit* initialiseCLIVM();
static VirtualMachine* createCLIVM(CompilationUnit* C = 0);
+
+
+#ifdef ISOLATE
+ uint32 IsolateID;
+#endif
+
+#ifdef SERVICE
+ uint64_t memoryUsed;
+ uint64_t gcTriggered;
+#endif
mvm::Allocator gcAllocator;
Modified: vmkit/trunk/lib/JnJVM/LLVMRuntime/runtime-default.ll
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/LLVMRuntime/runtime-default.ll?rev=59250&r1=59249&r2=59250&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/LLVMRuntime/runtime-default.ll (original)
+++ vmkit/trunk/lib/JnJVM/LLVMRuntime/runtime-default.ll Thu Nov 13 11:24:49 2008
@@ -183,6 +183,8 @@
declare void @jniProceedPendingException()
declare i8* @getSJLJBuffer()
+declare %JavaObject* @gcmalloc(i32, %VT)
+
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Debugging methods ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Modified: vmkit/trunk/lib/JnJVM/LLVMRuntime/runtime-multi-mmap.ll
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/LLVMRuntime/runtime-multi-mmap.ll?rev=59250&r1=59249&r2=59250&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/LLVMRuntime/runtime-multi-mmap.ll (original)
+++ vmkit/trunk/lib/JnJVM/LLVMRuntime/runtime-multi-mmap.ll Thu Nov 13 11:24:49 2008
@@ -4,5 +4,3 @@
declare void @MarkAndTrace(%JavaObject*, i8*)
declare void @JavaObjectTracer(%JavaObject*, i8*)
-declare %JavaObject* @gcmalloc(i32, %VT, i8*)
-declare i8* @getCollector(i8*) readnone
Modified: vmkit/trunk/lib/JnJVM/LLVMRuntime/runtime-single-mmap.ll
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/LLVMRuntime/runtime-single-mmap.ll?rev=59250&r1=59249&r2=59250&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/LLVMRuntime/runtime-single-mmap.ll (original)
+++ vmkit/trunk/lib/JnJVM/LLVMRuntime/runtime-single-mmap.ll Thu Nov 13 11:24:49 2008
@@ -4,4 +4,3 @@
declare void @MarkAndTrace(%JavaObject*)
declare void @JavaObjectTracer(%JavaObject*)
-declare %JavaObject* @gcmalloc(i32, %VT)
Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp?rev=59250&r1=59249&r2=59250&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp Thu Nov 13 11:24:49 2008
@@ -358,39 +358,14 @@
}
extern "C" void JavaObjectAquire(JavaObject* obj) {
-#ifdef SERVICE_VM
- ServiceDomain* vm = (ServiceDomain*)JavaThread::get()->getJVM();
- if (!(vm->GC->isMyObject(obj))) {
- vm->serviceError(vm, "I'm locking an object I don't own");
- }
-#endif
obj->acquire();
}
extern "C" void JavaObjectRelease(JavaObject* obj) {
- verifyNull(obj);
-#ifdef SERVICE_VM
- ServiceDomain* vm = (ServiceDomain*)JavaThread::get()->getJVM();
- if (!(vm->GC->isMyObject(obj))) {
- vm->serviceError(vm, "I'm unlocking an object I don't own");
- }
-#endif
obj->release();
}
-#ifdef SERVICE_VM
-extern "C" void JavaObjectAquireInSharedDomain(JavaObject* obj) {
- verifyNull(obj);
- obj->acquire();
-}
-
-extern "C" void JavaObjectReleaseInSharedDomain(JavaObject* obj) {
- verifyNull(obj);
- obj->release();
-}
-#endif
-
extern "C" bool instanceOf(JavaObject* obj, UserCommonClass* cl) {
return obj->instanceOf(cl);
}
Modified: vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.h?rev=59250&r1=59249&r2=59250&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.h Thu Nov 13 11:24:49 2008
@@ -322,10 +322,6 @@
///
virtual void waitForExit();
-#ifdef ISOLATE
- uint32 IsolateID;
-#endif
-
};
} // end namespace jnjvm
Modified: vmkit/trunk/lib/JnJVM/VMCore/LowerConstantCalls.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/LowerConstantCalls.cpp?rev=59250&r1=59249&r2=59250&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/LowerConstantCalls.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/LowerConstantCalls.cpp Thu Nov 13 11:24:49 2008
@@ -63,6 +63,23 @@
return CE;
}
+#ifdef ISOLATE
+static Value* getTCM(JnjvmModule* module, Value* Arg, Instruction* CI) {
+ std::vector<Value*> GEP;
+ GEP.push_back(module->constantZero);
+ GEP.push_back(module->OffsetTaskClassMirrorInClassConstant);
+ Value* TCMArray = GetElementPtrInst::Create(Arg, GEP.begin(), GEP.end(),
+ "", CI);
+ GEP.clear();
+ GEP.push_back(module->constantZero);
+ // TODO get the isolate id
+ GEP.push_back(module->constantZero);
+ Value* TCM = GetElementPtrInst::Create(TCMArray, GEP.begin(), GEP.end(), "",
+ CI);
+ return TCM;
+}
+#endif
+
bool LowerConstantCalls::runOnFunction(Function& F) {
JnjvmModule* module = (JnjvmModule*)F.getParent();
bool Changed = false;
@@ -288,7 +305,7 @@
Changed = true;
#if !defined(ISOLATE_SHARING) && !defined(ISOLATE)
ConstantExpr* CE = getClass(module, Call);
- assert(CE && "Wrong use if GetStaticInstanceFunction");
+ assert(CE && "Wrong use of GetStaticInstanceFunction");
ConstantInt* C = (ConstantInt*)CE->getOperand(0);
Class* cl = (Class*)C->getZExtValue();
@@ -299,20 +316,9 @@
CI->eraseFromParent();
#elif defined(ISOLATE)
+ Value* TCM = getTCM(module, Call.getArgument(0), CI);
std::vector<Value*> GEP;
GEP.push_back(module->constantZero);
- GEP.push_back(module->OffsetTaskClassMirrorInClassConstant);
- Value* TCMArray = GetElementPtrInst::Create(Call.getArgument(0),
- GEP.begin(), GEP.end(),
- "", CI);
- GEP.clear();
- GEP.push_back(module->constantZero);
- // TODO get the isolate id
- GEP.push_back(module->constantZero);
- Value* TCM = GetElementPtrInst::Create(TCMArray, GEP.begin(),
- GEP.end(), "", CI);
- GEP.clear();
- GEP.push_back(module->constantZero);
GEP.push_back(module->OffsetStaticInstanceInTaskClassMirrorConstant);
Value* Replace = GetElementPtrInst::Create(TCM, GEP.begin(),
GEP.end(), "", CI);
@@ -345,19 +351,9 @@
indexes.end(), "", CI);
#else
+ Value* TCM = getTCM(module, Call.getArgument(0), CI);
std::vector<Value*> GEP;
GEP.push_back(module->constantZero);
- GEP.push_back(module->OffsetTaskClassMirrorInClassConstant);
- Value* TCMArray = GetElementPtrInst::Create(Cl, GEP.begin(),
- GEP.end(), "", CI);
- GEP.clear();
- GEP.push_back(module->constantZero);
- // TODO get the isolate id
- GEP.push_back(module->constantZero);
- Value* TCM = GetElementPtrInst::Create(TCMArray, GEP.begin(),
- GEP.end(), "", CI);
- GEP.clear();
- GEP.push_back(module->constantZero);
GEP.push_back(module->OffsetStatusInTaskClassMirrorConstant);
Value* StatusPtr = GetElementPtrInst::Create(TCM, GEP.begin(),
GEP.end(), "", CI);
Modified: vmkit/trunk/lib/Mvm/Allocator/gcchunk.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/Allocator/gcchunk.h?rev=59250&r1=59249&r2=59250&view=diff
==============================================================================
--- vmkit/trunk/lib/Mvm/Allocator/gcchunk.h (original)
+++ vmkit/trunk/lib/Mvm/Allocator/gcchunk.h Thu Nov 13 11:24:49 2008
@@ -10,6 +10,8 @@
#ifndef _GC_CHUNK_H_
#define _GC_CHUNK_H_
+#include "mvm/VirtualMachine.h"
+
#include "gcmapper.h"
#include "types.h"
@@ -25,8 +27,8 @@
/* bit 0-2: la marque */
/* bit 3: est-on collectable */
public:
-#ifdef SERVICE_GC
- void* meta; // who allocated me
+#ifdef SERVICE
+ VirtualMachine* meta; // who allocated me
#endif
static const signed int maskCollectable = 8;
static const signed int maskNotCollectable = 0;
Modified: vmkit/trunk/lib/Mvm/CommonThread/ctthread.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/CommonThread/ctthread.cpp?rev=59250&r1=59249&r2=59250&view=diff
==============================================================================
--- vmkit/trunk/lib/Mvm/CommonThread/ctthread.cpp (original)
+++ vmkit/trunk/lib/Mvm/CommonThread/ctthread.cpp Thu Nov 13 11:24:49 2008
@@ -133,20 +133,9 @@
void Thread::internalThreadStart(mvm::Thread* th) {
th->baseSP = (void*)&th;
-#ifdef MULTIPLE_GC
- GC->inject_my_thread(th);
-#else
- Collector::inject_my_thread(th);
-#endif
-
-
+ Collector::inject_my_thread(th);
th->routine(th);
-
-#ifdef MULTIPLE_GC
- GC->remove_my_thread(th);
-#else
Collector::remove_my_thread(th);
-#endif
}
Modified: vmkit/trunk/lib/Mvm/GCMmap2/MvmGC.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/GCMmap2/MvmGC.h?rev=59250&r1=59249&r2=59250&view=diff
==============================================================================
--- vmkit/trunk/lib/Mvm/GCMmap2/MvmGC.h (original)
+++ vmkit/trunk/lib/Mvm/GCMmap2/MvmGC.h Thu Nov 13 11:24:49 2008
@@ -43,15 +43,13 @@
#ifndef MULTIPLE_GC
void markAndTrace() const;
-#endif
size_t objectSize() const;
void * operator new(size_t sz, VirtualTable *VT);
void * operator new(size_t sz);
void operator delete(void *);
void * realloc(size_t n);
-#ifdef MULTIPLE_GC
-#define collector_new(Class, Collector) __gc_new(Class::VT, Collector) Class
+#else
void markAndTrace(Collector* GC) const;
size_t objectSize(Collector* GC) const;
void * operator new(size_t sz, VirtualTable *VT, Collector* GC);
@@ -62,48 +60,33 @@
};
-#ifdef MULTIPLE_GC
-#define STATIC
-#else
-#define STATIC static
-#endif
-
class Collector {
public:
-#ifdef SERVICE_GC
- uint64 memoryUsed;
- uint64 gcTriggered;
- bool isMyObject(const void* o) { return getCollectorFromObject(o) == this; }
- static Collector* getCollectorFromObject(const void*o);
-#endif
typedef void (*markerFn)(void*);
static void initialise(markerFn mark);
- STATIC void destroy();
+ static void destroy();
- STATIC void die_if_sigsegv_occured_during_collection(void *addr);
- STATIC int isStable(gc_lock_recovery_fct_t, int, int, int, int,
+ static void die_if_sigsegv_occured_during_collection(void *addr);
+ static int isStable(gc_lock_recovery_fct_t, int, int, int, int,
int, int, int, int);
- STATIC unsigned int enable(unsigned int n);
- STATIC void gcStats(size_t &no, size_t &nbb);
- STATIC void maybeCollect();
- STATIC void collect(void);
- STATIC void inject_my_thread(mvm::Thread* th);
- STATIC void remove_my_thread(mvm::Thread* th);
-#ifdef MULTIPLE_GC
- static Collector* allocate();
-#endif
-
- STATIC gc *begOf(const void *o);
- STATIC int byteOffset(void *o);
- inline STATIC bool isObject(const void *o) { return begOf((void*)o); }
- STATIC void applyFunc(void (*func)(gcRoot *o, void *data), void *data);
- STATIC void registerMemoryError(void (*func)(unsigned int));
- STATIC int getMaxMemory(void);
- STATIC int getFreeMemory(void);
- STATIC int getTotalMemory(void);
- STATIC void setMaxMemory(size_t);
- STATIC void setMinMemory(size_t);
+ static unsigned int enable(unsigned int n);
+ static void gcStats(size_t &no, size_t &nbb);
+ static void maybeCollect();
+ static void collect(void);
+ static void inject_my_thread(mvm::Thread* th);
+ static void remove_my_thread(mvm::Thread* th);
+
+ static gc *begOf(const void *o);
+ static int byteOffset(void *o);
+ inline static bool isObject(const void *o) { return begOf((void*)o); }
+ static void applyFunc(void (*func)(gcRoot *o, void *data), void *data);
+ static void registerMemoryError(void (*func)(unsigned int));
+ static int getMaxMemory(void);
+ static int getFreeMemory(void);
+ static int getTotalMemory(void);
+ static void setMaxMemory(size_t);
+ static void setMinMemory(size_t);
};
#endif
Modified: vmkit/trunk/lib/Mvm/GCMmap2/gc.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/GCMmap2/gc.cpp?rev=59250&r1=59249&r2=59250&view=diff
==============================================================================
--- vmkit/trunk/lib/Mvm/GCMmap2/gc.cpp (original)
+++ vmkit/trunk/lib/Mvm/GCMmap2/gc.cpp Thu Nov 13 11:24:49 2008
@@ -16,39 +16,31 @@
using namespace mvm;
-#ifdef MULTIPLE_GC
-#define COLLECTOR ((GCCollector*)(mvm::Thread::get()->GC))->
-#else
-#define COLLECTOR GCCollector::
-#endif
-
typedef void (*memoryError_t)(unsigned int);
memoryError_t GCCollector::internMemoryError;
-#ifdef MULTIPLE_GC
-void gc::markAndTrace(Collector* GC) const {
- ((GCCollector*)GC)->markAndTrace((void*)this);
-}
-extern "C" void MarkAndTrace(gc* gc, Collector* GC) {
- ((GCCollector*)GC)->markAndTrace((void*)gc);
-}
-#else
+#ifndef MULTIPLE_GC
+
void gc::markAndTrace() const {
GCCollector::markAndTrace((void*)this);
}
+
extern "C" void MarkAndTrace(gc* gc) {
GCCollector::markAndTrace((void*)gc);
}
-#endif
+
+extern "C" gc* gcmalloc(size_t sz, VirtualTable* VT) {
+ return (gc*)GCCollector::gcmalloc(VT, sz);
+}
size_t gc::objectSize() const {
- return COLLECTOR objectSize((gc*)this);
+ return GCCollector::objectSize((gc*)this);
}
void *gc::operator new(size_t sz, VirtualTable *vt) {
- return COLLECTOR gcmalloc(vt, sz);
+ return GCCollector::gcmalloc(vt, sz);
}
void *gc::operator new(size_t sz) {
@@ -60,11 +52,22 @@
}
void *gc::realloc(size_t n) {
- return COLLECTOR gcrealloc(this, n);
+ return GCCollector::gcrealloc(this, n);
}
+#else
-#ifdef MULTIPLE_GC
+void gc::markAndTrace(Collector* GC) const {
+ ((GCCollector*)GC)->markAndTrace((void*)this);
+}
+
+extern "C" void MarkAndTrace(gc* gc, Collector* GC) {
+ ((GCCollector*)GC)->markAndTrace((void*)gc);
+}
+
+extern "C" gc* gcmalloc(size_t sz, VirtualTable* VT, Collector* GC) {
+ return (gc*)((GCCollector*)GC)->gcmalloc(VT, sz);
+}
size_t gc::objectSize(Collector* GC) const {
return ((GCCollector*)GC)->objectSize((gc*)this);
@@ -87,28 +90,21 @@
}
#endif
-#undef COLLECTOR
-#ifdef MULTIPLE_GC
-#define COLLECTOR ((GCCollector*)this)->
-#else
-#define COLLECTOR GCCollector::
-#endif
-
unsigned int Collector::enable(unsigned int n) {
- return COLLECTOR enable(n);
+ return GCCollector::enable(n);
}
int Collector::isStable(gc_lock_recovery_fct_t fct, int a0, int a1, int a2,
int a3, int a4, int a5, int a6, int a7) {
- return COLLECTOR isStable(fct, a0, a1, a2, a3, a4, a5, a6, a7);
+ return GCCollector::isStable(fct, a0, a1, a2, a3, a4, a5, a6, a7);
}
void Collector::die_if_sigsegv_occured_during_collection(void *addr) {
- COLLECTOR die_if_sigsegv_occured_during_collection(addr);
+ GCCollector::die_if_sigsegv_occured_during_collection(addr);
}
void Collector::gcStats(size_t &no, size_t &nbb) {
- COLLECTOR gcStats(&no, &nbb);
+ GCCollector::gcStats(&no, &nbb);
}
void Collector::initialise(markerFn marker) {
@@ -116,36 +112,36 @@
}
void Collector::destroy() {
- COLLECTOR destroy();
+ GCCollector::destroy();
}
void Collector::inject_my_thread(mvm::Thread* th) {
#ifdef HAVE_PTHREAD
- COLLECTOR inject_my_thread(th);
+ GCCollector::inject_my_thread(th);
#endif
}
void Collector::maybeCollect() {
- COLLECTOR maybeCollect();
+ GCCollector::maybeCollect();
}
void Collector::collect(void) {
- COLLECTOR collect();
+ GCCollector::collect();
}
gc *Collector::begOf(const void *obj) {
- return (gc*)COLLECTOR begOf((void*)obj);
+ return (gc*)GCCollector::begOf((void*)obj);
}
int Collector::byteOffset(void *obj) {
- int beg = (intptr_t)COLLECTOR begOf(obj);
+ int beg = (intptr_t)GCCollector::begOf(obj);
intptr_t off = (intptr_t)obj;
return (off-beg);
}
void Collector::applyFunc(void (*func)(gcRoot *o, void *data), void *data) {
- return COLLECTOR applyFunc(func, data);
+ return GCCollector::applyFunc(func, data);
}
int Collector::getMaxMemory(void){
@@ -167,62 +163,40 @@
}
void Collector::registerMemoryError(void (*func)(unsigned int)){
- COLLECTOR internMemoryError = func;
- //onMemoryError = &COLLECTOR defaultMemoryError;
+ GCCollector::internMemoryError = func;
+ //onMemoryError = &GCCollector::defaultMemoryError;
}
void Collector::remove_my_thread(mvm::Thread* th) {
#ifdef HAVE_PTHREAD
- COLLECTOR remove_thread(th);
+ GCCollector::remove_thread(th);
#endif
}
-#undef COLLECTOR
void GCThread::waitCollection() {
-#if defined(MULTIPLE_GC)
-#if defined(SERVICE_GC)
- GCCollector* GC = GCCollector::collectingGC;
-#else
- GCCollector* GC = ((GCCollector*)mvm::Thread::get()->GC);
-#endif
-#define COLLECTOR GC->
-#else
-#define COLLECTOR GCCollector::
-#endif
mvm::Thread* th = mvm::Thread::get();
- unsigned int cm = COLLECTOR current_mark;
+ unsigned int cm = GCCollector::current_mark;
if(th != current_collector) {
collectorGo();
- while((COLLECTOR current_mark == cm) &&
- (COLLECTOR status == COLLECTOR stat_collect))
+ while((GCCollector::current_mark == cm) &&
+ (GCCollector::status == GCCollector::stat_collect))
_collectionCond.wait(&_stackLock);
}
}
#ifdef HAVE_PTHREAD
-#undef COLLECTOR
void GCCollector::siggc_handler(int) {
-#if defined(MULTIPLE_GC)
-#if defined(SERVICE_GC)
- GCCollector* GC = collectingGC;
-#else
- GCCollector* GC = ((GCCollector*)mvm::Thread::get()->GC);
-#endif
-#define COLLECTOR GC->
-#else
-#define COLLECTOR GCCollector::
-#endif
mvm::Thread* th = mvm::Thread::get();
jmp_buf buf;
setjmp(buf);
- COLLECTOR threads->stackLock();
+ GCCollector::threads->stackLock();
if(!th) /* The thread is being destroyed */
- COLLECTOR threads->another_mark();
+ GCCollector::threads->another_mark();
else {
register unsigned int **cur = (unsigned int**)(void*)&buf;
register unsigned int **max = (unsigned int**)th->baseSP;
@@ -230,42 +204,16 @@
GCChunkNode *node;
for(; cur<max; cur++) {
- if((node = o2node(*cur)) && (!COLLECTOR isMarked(node))) {
+ if((node = o2node(*cur)) && (!GCCollector::isMarked(node))) {
node->remove();
- node->append(COLLECTOR used_nodes);
- COLLECTOR mark(node);
+ node->append(GCCollector::used_nodes);
+ GCCollector::mark(node);
}
}
- COLLECTOR threads->another_mark();
- COLLECTOR threads->waitCollection();
+ GCCollector::threads->another_mark();
+ GCCollector::threads->waitCollection();
}
- COLLECTOR threads->stackUnlock();
-#undef COLLECTOR
+ GCCollector::threads->stackUnlock();
}
#endif // HAVE_PTHREAD
-
-#ifdef MULTIPLE_GC
-Collector* Collector::allocate() {
- GCCollector* GC = new GCCollector();
- GC->initialise(GCCollector::bootstrapGC->_marker);
- return GC;
-}
-#endif // MULTIPLE_GC
-
-#ifdef SERVICE_GC
-Collector* Collector::getCollectorFromObject(const void* o) {
- return (Collector*)GCCollector::o2node((void*)o)->meta;
-}
-#endif
-
-#ifdef MULTIPLE_GC
-extern "C" gc* gcmalloc(size_t sz, VirtualTable* VT, Collector* GC) {
- return (gc*)((GCCollector*)GC)->gcmalloc(VT, sz);
-}
-#else
-extern "C" gc* gcmalloc(size_t sz, VirtualTable* VT) {
- return (gc*)GCCollector::gcmalloc(VT, sz);
-}
-#endif
-
Modified: vmkit/trunk/lib/Mvm/GCMmap2/gccollector.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/GCMmap2/gccollector.cpp?rev=59250&r1=59249&r2=59250&view=diff
==============================================================================
--- vmkit/trunk/lib/Mvm/GCMmap2/gccollector.cpp (original)
+++ vmkit/trunk/lib/Mvm/GCMmap2/gccollector.cpp Thu Nov 13 11:24:49 2008
@@ -11,7 +11,6 @@
using namespace mvm;
-#if !defined(MULTIPLE_GC) || defined(SERVICE_GC)
GCAllocator *GCCollector::allocator = 0;
#ifdef HAVE_PTHREAD
GCThread *GCCollector::threads;
@@ -26,17 +25,7 @@
GCChunkNode *GCCollector::unused_nodes;
unsigned int GCCollector::current_mark;
-#endif
-
-#ifdef MULTIPLE_GC
-GCCollector* GCCollector::bootstrapGC;
-#endif
-
-#ifdef SERVICE_GC
-GCCollector* GCCollector::collectingGC;
-#endif
-#if !defined(SERVICE_GC) && !defined(MULTIPLE_GC)
int GCCollector::_collect_freq_auto;
int GCCollector::_collect_freq_maybe;
int GCCollector::_since_last_collection;
@@ -44,7 +33,6 @@
bool GCCollector::_enable_auto;
bool GCCollector::_enable_maybe;
bool GCCollector::_enable_collection;
-#endif
typedef void (*destructor_t)(void*);
@@ -57,10 +45,6 @@
unused_nodes->attrape(used_nodes);
-#ifdef SERVICE_GC
- collectingGC = this;
-#endif
-
#ifdef HAVE_PTHREAD
threads->synchronize();
#endif
@@ -69,11 +53,7 @@
trace(cur);
if(_marker)
-#ifdef MULTIPLE_GC
- _marker(this);
-#else
_marker(0);
-#endif
status = stat_finalize;
/* finalize */
@@ -88,8 +68,9 @@
GCChunkNode *next = 0;
for(cur=finalizable.next(); cur!=&finalizable; cur=next) {
-#ifdef SERVICE_GC
- ((Collector*)cur->meta)->memoryUsed -= real_nbb(cur);
+#ifdef SERVICE
+ VirtualMachine* vm = cur->meta;
+ vm->memoryUsed -= real_nbb(cur);
#endif
register gc_header *c = cur->chunk();
next = cur->next();
Modified: vmkit/trunk/lib/Mvm/GCMmap2/gccollector.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/GCMmap2/gccollector.h?rev=59250&r1=59249&r2=59250&view=diff
==============================================================================
--- vmkit/trunk/lib/Mvm/GCMmap2/gccollector.h (original)
+++ vmkit/trunk/lib/Mvm/GCMmap2/gccollector.h Thu Nov 13 11:24:49 2008
@@ -17,24 +17,6 @@
#endif
#include "mvm/GC/GC.h"
-#ifdef MULTIPLE_GC
-#define STATIC
-#else
-#define STATIC static
-#endif
-
-#if defined(MULTIPLE_GC) && !defined(SERVICE_GC)
-#define STATIC_FIELD
-#else
-#define STATIC_FIELD static
-#endif
-
-#if defined(MULTIPLE_GC)
-#define STATIC_NO_SERVICE
-#else
-#define STATIC_NO_SERVICE static
-#endif
-
namespace mvm {
class GCCollector : public Collector {
@@ -42,38 +24,38 @@
#ifdef HAVE_PTHREAD
friend class GCThread;
#endif
- STATIC_FIELD GCAllocator *allocator; /* The allocator */
+ static GCAllocator *allocator; /* The allocator */
- STATIC_FIELD GCChunkNode *used_nodes; /* Used memory nodes */
- STATIC_FIELD GCChunkNode *unused_nodes; /* Unused memory nodes */
- STATIC_FIELD unsigned int current_mark;
-
- STATIC_NO_SERVICE int _collect_freq_auto; /* Collection frequency in gcmalloc/gcrealloc */
- STATIC_NO_SERVICE int _collect_freq_maybe; /* Collection frequency in maybeCollect */
- STATIC_NO_SERVICE int _since_last_collection; /* Bytes left since last collection */
- STATIC_NO_SERVICE bool _enable_auto; /* Automatic collection? */
- STATIC_NO_SERVICE bool _enable_maybe; /* Collection in maybeCollect()? */
- STATIC_NO_SERVICE bool _enable_collection; /* collection authorized? */
- STATIC_FIELD int status;
+ static GCChunkNode *used_nodes; /* Used memory nodes */
+ static GCChunkNode *unused_nodes; /* Unused memory nodes */
+ static unsigned int current_mark;
+
+ static int _collect_freq_auto; /* Collection frequency in gcmalloc/gcrealloc */
+ static int _collect_freq_maybe; /* Collection frequency in maybeCollect */
+ static int _since_last_collection; /* Bytes left since last collection */
+ static bool _enable_auto; /* Automatic collection? */
+ static bool _enable_maybe; /* Collection in maybeCollect()? */
+ static bool _enable_collection; /* collection authorized? */
+ static int status;
enum { stat_collect, stat_finalize, stat_alloc, stat_broken };
#ifdef HAVE_PTHREAD
static void siggc_handler(int);
- STATIC inline void lock() { threads->lock(); }
- STATIC inline void unlock() { threads->unlock(); }
+ static inline void lock() { threads->lock(); }
+ static inline void unlock() { threads->unlock(); }
#else
static void siggc_handler(int) { }
- STATIC inline void lock() { }
- STATIC inline void unlock() { }
+ static inline void lock() { }
+ static inline void unlock() { }
#endif
/* Interface for collection, verifies enable_collect */
- STATIC void collect_unprotect();
+ static void collect_unprotect();
/* The collection */
- STATIC void do_collect();
+ static void do_collect();
static inline GCChunkNode *o2node(void *p) {
return GCHash::get(p)->o2node(p, GCChunkNode::maskCollectable);
@@ -84,55 +66,49 @@
}
public:
- STATIC_FIELD Collector::markerFn _marker; /* The function which traces roots */
-#ifdef SERVICE_GC
- static GCCollector* collectingGC;
-#endif
-#ifdef MULTIPLE_GC
- static GCCollector* bootstrapGC;
-#endif
- STATIC_FIELD GCThread *threads; /* le gestionnaire de thread et de synchro */
+ static Collector::markerFn _marker; /* The function which traces roots */
+ static GCThread *threads; /* le gestionnaire de thread et de synchro */
static void (*internMemoryError)(unsigned int);
#ifdef HAVE_PTHREAD
- STATIC inline void unlock_dont_recovery() { threads->unlock_dont_recovery(); }
- STATIC void die_if_sigsegv_occured_during_collection(void *addr);
+ static inline void unlock_dont_recovery() { threads->unlock_dont_recovery(); }
+ static void die_if_sigsegv_occured_during_collection(void *addr);
#else
- STATIC void die_if_sigsegv_occured_during_collection(void *addr) { }
+ static void die_if_sigsegv_occured_during_collection(void *addr) { }
#endif
- STATIC void defaultMemoryError(unsigned int sz){
+ static void defaultMemoryError(unsigned int sz){
unlock();
internMemoryError(sz);
lock();
}
- STATIC void initialise(Collector::markerFn marker);
- STATIC void destroy();
+ static void initialise(Collector::markerFn marker);
+ static void destroy();
static int siggc();
#ifdef HAVE_PTHREAD
- STATIC void inject_my_thread(mvm::Thread* th);
- STATIC inline void remove_thread(mvm::Thread* th) {
+ static void inject_my_thread(mvm::Thread* th);
+ static inline void remove_thread(mvm::Thread* th) {
threads->remove(th);
}
- STATIC inline int isStable(gc_lock_recovery_fct_t fct, int a0, int a1, int a2,
+ static inline int isStable(gc_lock_recovery_fct_t fct, int a0, int a1, int a2,
int a3, int a4, int a5, int a6, int a7) {
return threads->isStable(fct, a0, a1, a2, a3, a4, a5, a6, a7);
}
#else
- STATIC inline int isStable(gc_lock_recovery_fct_t fct, int a0, int a1, int a2,
+ static inline int isStable(gc_lock_recovery_fct_t fct, int a0, int a1, int a2,
int a3, int a4, int a5, int a6, int a7) {
return 0;
}
#endif
- STATIC inline void *allocate_unprotected(size_t sz) {
+ static inline void *allocate_unprotected(size_t sz) {
return allocator->alloc(sz);
}
- STATIC inline void free_unprotected(void *ptr) {
+ static inline void free_unprotected(void *ptr) {
allocator->free(ptr);
}
@@ -144,40 +120,41 @@
return 0;
}
- STATIC void gcStats(size_t *no, size_t *nbb);
+ static void gcStats(size_t *no, size_t *nbb);
static inline size_t objectSize(void *ptr) {
GCChunkNode *node = o2node(ptr);
return node ? real_nbb(node) : 0;
}
- STATIC inline void collect() {
+ static inline void collect() {
lock();
collect_unprotect();
unlock();
}
- STATIC inline void maybeCollect() {
+ static inline void maybeCollect() {
if(_enable_auto &&
(_since_last_collection <= (_collect_freq_auto - _collect_freq_maybe)))
collect();
}
- STATIC inline void *gcmalloc(VirtualTable *vt, size_t n) {
+ static inline void *gcmalloc(VirtualTable *vt, size_t n) {
lock();
_since_last_collection -= n;
if(_enable_auto && (_since_last_collection <= 0)) {
-#ifdef SERVICE_GC
- ++gcTriggered;
+#ifdef SERVICE
+ mvm::Thread::get()->vm->gcTriggered++;
#endif
collect_unprotect();
}
register GCChunkNode *header = allocator->alloc_chunk(n + sizeof(gc_header), 1, current_mark & 1);
-#ifdef SERVICE_GC
- header->meta = this;
- memoryUsed += n;
+#ifdef SERVICE
+ VirtualMachine* vm = mvm::Thread::get()->vm;
+ header->meta = vm;
+ vm->memoryUsed += n;
#endif
header->append(used_nodes);
//printf("Allocate %d bytes at %p [%p] %d %d\n", n, header->chunk()->_2gc(),
@@ -190,7 +167,7 @@
return p->_2gc();
}
- STATIC inline void *gcrealloc(void *ptr, size_t n) {
+ static inline void *gcrealloc(void *ptr, size_t n) {
lock();
GCPage *desc = GCHash::get(ptr);
@@ -204,16 +181,18 @@
_since_last_collection -= (n - old_sz);
if(_enable_auto && (_since_last_collection <= 0)) {
-#ifdef SERVICE_GC
- ++gcTriggered;
+#ifdef SERVICE
+ mvm::Thread::get()->vm->gcTriggered++;
#endif
collect_unprotect();
}
GCChunkNode *res = allocator->realloc_chunk(desc, node, n+sizeof(gc_header));
-#ifdef SERVICE_GC
- res->meta = this;
- memoryUsed += (n - old_sz);
+
+#ifdef SERVICE
+ VirtualMachine* vm = mvm::Thread::get()->vm;
+ header->meta = vm;
+ vm->memoryUsed += (n - old_sz);
#endif
if(res != node) {
@@ -227,31 +206,27 @@
return obj->_2gc();
}
- STATIC inline unsigned int enable(unsigned int n) {
+ static inline unsigned int enable(unsigned int n) {
register unsigned int old = _enable_collection;
_enable_collection = n;
return old;
}
- STATIC inline bool isMarked(GCChunkNode *node) {
+ static inline bool isMarked(GCChunkNode *node) {
return node->mark() == (current_mark & 1);
}
- STATIC inline void mark(GCChunkNode *node) {
+ static inline void mark(GCChunkNode *node) {
node->_mark(current_mark & 1);
}
- STATIC inline void trace(GCChunkNode *node) {
+ static inline void trace(GCChunkNode *node) {
gc_header *o = node->chunk();
-#ifdef MULTIPLE_GC
- o->_2gc()->tracer(this);
-#else
o->_2gc()->tracer();
-#endif
markAndTrace(o);
}
- STATIC inline void markAndTrace(void *ptr) {
+ static inline void markAndTrace(void *ptr) {
GCChunkNode *node = o2node(ptr);
if(node && !isMarked(node)) {
@@ -262,18 +237,6 @@
}
}
- STATIC inline void applyFunc(void (*func)(gcRoot *o, void *data), void *data){
- lock(); /* Make sure no one collects or allocates */
- status = stat_collect; /* Forbids collections */
- GCChunkNode *cur=used_nodes->next(); /* Get starter */
- unlock(); /* One can allocate now */
-
- for(; cur!=used_nodes; cur=cur->next())
- func(cur->chunk()->_2gc(), data);
-
- /* No need to lock ! */
- status = stat_alloc;
- }
};
}
Modified: vmkit/trunk/lib/Mvm/GCMmap2/gcinit.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/GCMmap2/gcinit.cpp?rev=59250&r1=59249&r2=59250&view=diff
==============================================================================
--- vmkit/trunk/lib/Mvm/GCMmap2/gcinit.cpp (original)
+++ vmkit/trunk/lib/Mvm/GCMmap2/gcinit.cpp Thu Nov 13 11:24:49 2008
@@ -27,11 +27,6 @@
void GCCollector::initialise(Collector::markerFn marker) {
-#ifdef SERVICE_GC
- gcTriggered = 0;
- memoryUsed = 0;
- if (this == bootstrapGC) {
-#endif
used_nodes = new GCChunkNode();
unused_nodes = new GCChunkNode();
#ifdef HAVE_PTHREAD
@@ -60,9 +55,6 @@
current_mark = 0;
status = stat_alloc;
-#ifdef SERVICE_GC
- }
-#endif
_collect_freq_auto = def_collect_freq_auto;
_collect_freq_maybe = def_collect_freq_maybe;
Modified: vmkit/trunk/lib/Mvm/Runtime/Object.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/Runtime/Object.cpp?rev=59250&r1=59249&r2=59250&view=diff
==============================================================================
--- vmkit/trunk/lib/Mvm/Runtime/Object.cpp (original)
+++ vmkit/trunk/lib/Mvm/Runtime/Object.cpp Thu Nov 13 11:24:49 2008
@@ -40,11 +40,7 @@
PrintBuffer *PrintBuffer::writeObj(const Object *obj) {
-#ifdef MULTIPLE_GC
- Object *beg = (Object*)mvm::Thread::get()->GC->begOf(obj);
-#else
Object *beg = (Object*)Collector::begOf(obj);
-#endif
if(beg) {
if(beg == obj) {
Modified: vmkit/trunk/lib/Mvm/Runtime/Sigsegv.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/Runtime/Sigsegv.cpp?rev=59250&r1=59249&r2=59250&view=diff
==============================================================================
--- vmkit/trunk/lib/Mvm/Runtime/Sigsegv.cpp (original)
+++ vmkit/trunk/lib/Mvm/Runtime/Sigsegv.cpp Thu Nov 13 11:24:49 2008
@@ -50,12 +50,8 @@
#endif
/* Free the GC if it sisgegv'd. No other collection is possible */
-#ifndef MULTIPLE_GC
Collector::die_if_sigsegv_occured_during_collection(addr);
-#else
- mvm::Thread::get()->GC->die_if_sigsegv_occured_during_collection(addr);
-#endif
-
+
// sys_exit(0);
if(client_sigsegv_handler)
client_sigsegv_handler(n, addr);
More information about the vmkit-commits
mailing list