[vmkit-commits] [vmkit] r63299 - in /vmkit/trunk/lib: JnJVM/VMCore/JavaClass.cpp JnJVM/VMCore/JavaClass.h JnJVM/VMCore/JavaConstantPool.h JnJVM/VMCore/Jnjvm.cpp JnJVM/VMCore/JnjvmModule.cpp JnJVM/VMCore/JnjvmModule.h JnJVM/VMCore/LockedMap.h Mvm/BoehmGC/MvmGC.h Mvm/BoehmGC/gc.cpp
Nicolas Geoffray
nicolas.geoffray at lip6.fr
Thu Jan 29 00:57:54 PST 2009
Author: geoffray
Date: Thu Jan 29 02:57:54 2009
New Revision: 63299
URL: http://llvm.org/viewvc/llvm-project?rev=63299&view=rev
Log:
Fixes for using Boehm's GC.
Modified:
vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp
vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h
vmkit/trunk/lib/JnJVM/VMCore/JavaConstantPool.h
vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp
vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp
vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.h
vmkit/trunk/lib/JnJVM/VMCore/LockedMap.h
vmkit/trunk/lib/Mvm/BoehmGC/MvmGC.h
vmkit/trunk/lib/Mvm/BoehmGC/gc.cpp
Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp?rev=63299&r1=63298&r2=63299&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp Thu Jan 29 02:57:54 2009
@@ -706,7 +706,11 @@
}
void* UserClass::allocateStaticInstance(Jnjvm* vm) {
+#ifdef USE_GC_BOEHM
+ void* val = GC_MALLOC(getStaticSize());
+#else
void* val = classLoader->allocator.Allocate(getStaticSize());
+#endif
setStaticInstance(val);
return val;
}
Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h?rev=63299&r1=63298&r2=63299&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h Thu Jan 29 02:57:54 2009
@@ -362,6 +362,11 @@
//
static UserCommonClass* resolvedImplClass(Jnjvm* vm, JavaObject* delegatee,
bool doClinit);
+#ifdef USE_GC_BOEHM
+ void* operator new(size_t sz, mvm::BumpPtrAllocator& allocator) {
+ return GC_MALLOC(sz);
+ }
+#endif
};
/// ClassPrimitive - This class represents internal classes for primitive
Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaConstantPool.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaConstantPool.h?rev=63299&r1=63298&r2=63299&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaConstantPool.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaConstantPool.h Thu Jan 29 02:57:54 2009
@@ -259,7 +259,7 @@
/// ~JavaConstantPool - Delete the constant pool.
///
- ~JavaConstantPool() {}
+ ~JavaConstantPool() {}
};
} // end namespace jnjvm
Modified: vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp?rev=63299&r1=63298&r2=63299&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp Thu Jan 29 02:57:54 2009
@@ -905,8 +905,8 @@
upcalls->uncaughtException->invokeIntSpecial(this, upcalls->threadGroup,
group, obj, exc);
}catch(...) {
- printf("Even uncaught exception throwed an exception!\n");
- assert(0);
+ fprintf(stderr, "Even uncaught exception throwed an exception!\n");
+ abort();
}
}
}
@@ -1049,8 +1049,8 @@
throwable = upcalls->newThrowable;
- for (std::vector<JavaString*>::iterator i = loader->strings.begin(),
- e = loader->strings.end(); i != e; ++i) {
+ for (std::vector<JavaString*, gc_allocator<JavaString*> >::iterator i =
+ loader->strings.begin(), e = loader->strings.end(); i != e; ++i) {
hashStr.insert(*i);
}
Modified: vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp?rev=63299&r1=63298&r2=63299&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp Thu Jan 29 02:57:54 2009
@@ -516,6 +516,7 @@
#endif
+#ifdef WITH_TRACER
llvm::Function* JnjvmModule::makeTracer(Class* cl, bool stat) {
LLVMClassInfo* LCI = (LLVMClassInfo*)getClassInfo(cl);
@@ -598,6 +599,7 @@
return func;
}
+#endif
Constant* JnjvmModule::CreateConstantForJavaObject(CommonClass* cl) {
const StructType* STy =
@@ -1194,11 +1196,16 @@
ClassElts.push_back(Constant::getNullValue(ptrType));
// staticTracer
- Function* F = makeTracer(cl, true);
const Type* FTy = STy->getContainedType(STy->getNumContainedTypes() - 1);
+#ifdef WITH_TRACER
+ Function* F = makeTracer(cl, true);
Constant* staticTracer = ConstantExpr::getCast(Instruction::BitCast, F, FTy);
+#else
+ Constant* staticTracer = ConstantExpr::getNullValue(FTy);
+#endif
ClassElts.push_back(staticTracer);
+
return ConstantStruct::get(STy, ClassElts);
}
@@ -1268,10 +1275,14 @@
Elemts.push_back(N);
// Tracer
+#ifdef WITH_TRACER
Function* Tracer = makeTracer(classDef, false);
Elemts.push_back(Tracer ?
ConstantExpr::getCast(Instruction::BitCast, Tracer, PTy) : N);
-
+#else
+ Elemts.push_back(N);
+#endif
+
// Printer
Elemts.push_back(ConstantExpr::getBitCast(ObjectPrinter, PTy));
@@ -1327,8 +1338,8 @@
// Special handling for finalize method. Don't put a finalizer
// if there is none, or if it is empty.
- if (meth.offset == 0 && !staticCompilation) {
-#ifdef ISOLATE_SHARING
+ if (meth.offset == 0) {
+#if defined(ISOLATE_SHARING) || defined(USE_GC_BOEHM)
((void**)VT)[0] = 0;
#else
JnjvmClassLoader* loader = cl->classLoader;
@@ -1347,8 +1358,9 @@
}
}
#endif
+ } else {
+ ((void**)VT)[meth.offset] = EE->getPointerToFunctionOrStub(func);
}
- ((void**)VT)[meth.offset] = EE->getPointerToFunctionOrStub(func);
}
#ifdef WITH_TRACER
@@ -1417,6 +1429,7 @@
if (!classDef->virtualVT) {
Mod->makeVT((Class*)classDef);
} else {
+#ifdef WITH_TRACER
// So the class is vmjc'ed. Create the virtual tracer.
Function* func = Function::Create(JnjvmModule::MarkAndTraceType,
GlobalValue::ExternalLinkage,
@@ -1425,6 +1438,7 @@
void* ptr = ((void**)classDef->virtualVT)[VT_TRACER_OFFSET];
Mod->executionEngine->addGlobalMapping(func, ptr);
virtualTracerFunction = func;
+#endif
}
} else {
Mod->makeVT(classDef);
@@ -1462,13 +1476,14 @@
uint64 size = Mod->getTypeSize(structType);
cl->staticSize = size;
-
+#ifdef WITH_TRACER
if (!Mod->isStaticCompiling()) {
Function* F = Mod->makeTracer(cl, true);
cl->staticTracer = (void (*)(void*)) (uintptr_t)
Mod->executionEngine->getPointerToFunction(F);
F->deleteBody();
}
+#endif
}
return staticType;
}
Modified: vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.h?rev=63299&r1=63298&r2=63299&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.h Thu Jan 29 02:57:54 2009
@@ -229,8 +229,10 @@
bool staticCompilation;
-
+#ifdef WITH_TRACER
llvm::Function* makeTracer(Class* cl, bool stat);
+#endif
+
void makeVT(Class* cl);
void allocateVT(Class* cl);
Modified: vmkit/trunk/lib/JnJVM/VMCore/LockedMap.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/LockedMap.h?rev=63299&r1=63298&r2=63299&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/LockedMap.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/LockedMap.h Thu Jan 29 02:57:54 2009
@@ -140,6 +140,13 @@
class ClassMap :
public LockedMap<const UTF8*, UserCommonClass*, ltutf8, JnjvmClassLoader* > {
+
+#ifdef USE_GC_BOEHM
+public:
+ void* operator new(size_t sz, mvm::BumpPtrAllocator& allocator) {
+ return GC_MALLOC(sz);
+ }
+#endif
};
class StringMap :
Modified: vmkit/trunk/lib/Mvm/BoehmGC/MvmGC.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/BoehmGC/MvmGC.h?rev=63299&r1=63298&r2=63299&view=diff
==============================================================================
--- vmkit/trunk/lib/Mvm/BoehmGC/MvmGC.h (original)
+++ vmkit/trunk/lib/Mvm/BoehmGC/MvmGC.h Thu Jan 29 02:57:54 2009
@@ -21,6 +21,11 @@
#define TRACER tracer()
#define PARENT_TRACER tracer()
#define MARK_AND_TRACE markAndTrace()
+#define CALL_TRACER tracer()
+
+namespace mvm {
+ class Thread;
+}
extern "C" void * GC_dlopen(const char *path, int mode) throw ();
@@ -34,12 +39,12 @@
void markAndTrace() const {}
- size_t objectSize() const {
+ size_t objectSize() const {
gc_header * res = (gc_header*)(GC_base((void*)this));
return (GC_size(res) - sizeof(gc_header));
}
- void * operator new(size_t sz, VirtualTable *VT) {
+ void* operator new(size_t sz, VirtualTable *VT) {
gc_header * res = (gc_header*) GC_MALLOC(sz + sizeof(gc_header));
res -> _XXX_vt= VT;
@@ -50,15 +55,15 @@
return res->_2gc();
}
- void * operator new(size_t sz) {
+ void* operator new(size_t sz) {
return malloc(sz);
}
- void operator delete(void * p) {
+ void operator delete(void * p) {
//GC_FREE(p);
}
- void * realloc(size_t n) {
+ void* realloc(size_t n) {
void * old = GC_base(this);
gc_header * res = (gc_header*) GC_REALLOC(old, n + sizeof(gc_header));
return res->_2gc();
@@ -73,7 +78,7 @@
typedef void (*markerFn)(void*);
- static void initialise(markerFn mark, void *base_sp);
+ static void initialise(markerFn mark);
static void destroy() {}
static void die_if_sigsegv_occured_during_collection(void *addr){}
@@ -103,9 +108,9 @@
GC_gcollect();
}
- static void inject_my_thread(void *sp);
+ static void inject_my_thread(mvm::Thread*);
- static void remove_my_thread() {}
+ static void remove_my_thread(mvm::Thread*) {}
static Collector* allocate() { return 0; }
static gc* begOf(const void *obj) {
Modified: vmkit/trunk/lib/Mvm/BoehmGC/gc.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/BoehmGC/gc.cpp?rev=63299&r1=63298&r2=63299&view=diff
==============================================================================
--- vmkit/trunk/lib/Mvm/BoehmGC/gc.cpp (original)
+++ vmkit/trunk/lib/Mvm/BoehmGC/gc.cpp Thu Jan 29 02:57:54 2009
@@ -12,13 +12,11 @@
using namespace mvm;
-void Collector::inject_my_thread(void* base_sp) {
- mvm::Thread::get()->baseSP = base_sp;
+void Collector::inject_my_thread(mvm::Thread* th) {
GC_init();
}
-void Collector::initialise(markerFn mark, void *base_sp) {
- mvm::Thread::get()->baseSP = base_sp;
+void Collector::initialise(markerFn mark) {
GC_INIT();
}
More information about the vmkit-commits
mailing list