[vmkit-commits] [vmkit] r86554 - in /vmkit/trunk: include/mvm/JIT.h lib/JnJVM/Compiler/JavaJIT.cpp lib/JnJVM/VMCore/JnjvmClassLoader.h lib/Mvm/Compiler/JIT.cpp lib/Mvm/Compiler/LLVMRuntime.ll lib/Mvm/GCMmap2/MvmGC.h lib/Mvm/GCMmap2/gc.cpp mmtk/mmtk-alloc/Selected.cpp mmtk/mmtk-fake/Selected.cpp mmtk/mmtk-j3/VM.cpp
Nicolas Geoffray
nicolas.geoffray at lip6.fr
Mon Nov 9 08:50:54 PST 2009
Author: geoffray
Date: Mon Nov 9 10:50:54 2009
New Revision: 86554
URL: http://llvm.org/viewvc/llvm-project?rev=86554&view=rev
Log:
Put addFinalizationCandidate out of gcmalloc.
Modified:
vmkit/trunk/include/mvm/JIT.h
vmkit/trunk/lib/JnJVM/Compiler/JavaJIT.cpp
vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.h
vmkit/trunk/lib/Mvm/Compiler/JIT.cpp
vmkit/trunk/lib/Mvm/Compiler/LLVMRuntime.ll
vmkit/trunk/lib/Mvm/GCMmap2/MvmGC.h
vmkit/trunk/lib/Mvm/GCMmap2/gc.cpp
vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp
vmkit/trunk/mmtk/mmtk-fake/Selected.cpp
vmkit/trunk/mmtk/mmtk-j3/VM.cpp
Modified: vmkit/trunk/include/mvm/JIT.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/mvm/JIT.h?rev=86554&r1=86553&r2=86554&view=diff
==============================================================================
--- vmkit/trunk/include/mvm/JIT.h (original)
+++ vmkit/trunk/include/mvm/JIT.h Mon Nov 9 10:50:54 2009
@@ -124,6 +124,8 @@
llvm::Function* conditionalSafePoint;
llvm::Function* unconditionalSafePoint;
llvm::Function* AllocateFunction;
+ llvm::Function* AllocateUnresolvedFunction;
+ llvm::Function* AddFinalizationCandidate;
llvm::Constant* constantInt8Zero;
llvm::Constant* constantZero;
Modified: vmkit/trunk/lib/JnJVM/Compiler/JavaJIT.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Compiler/JavaJIT.cpp?rev=86554&r1=86553&r2=86554&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/Compiler/JavaJIT.cpp (original)
+++ vmkit/trunk/lib/JnJVM/Compiler/JavaJIT.cpp Mon Nov 9 10:50:54 2009
@@ -1896,9 +1896,14 @@
}
VT = new BitCastInst(VT, module->ptrType, "", currentBlock);
- Value* val = invoke(module->AllocateFunction, Size, VT, "",
- currentBlock);
-
+ Value* val = invoke(cl ? module->AllocateFunction :
+ module->AllocateUnresolvedFunction,
+ Size, VT, "", currentBlock);
+
+ if (cl && cl->virtualVT->destructor) {
+ CallInst::Create(module->AddFinalizationCandidate, val, "", currentBlock);
+ }
+
val = new BitCastInst(val, module->JavaObjectType, "", currentBlock);
push(val, false);
}
Modified: vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.h?rev=86554&r1=86553&r2=86554&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.h Mon Nov 9 10:50:54 2009
@@ -433,8 +433,10 @@
public:
static VMClassLoader* allocate(JnjvmClassLoader* J) {
- VMClassLoader* res =
- (VMClassLoader*)gc::operator new(sizeof(VMClassLoader), &VT);
+ VMClassLoader* res = 0;
+ llvm_gcroot(res, 0);
+ res = (VMClassLoader*)gc::operator new(sizeof(VMClassLoader), &VT);
+ mvm::Thread::get()->MyVM->addFinalizationCandidate(res);
res->JCL = J;
return res;
}
Modified: vmkit/trunk/lib/Mvm/Compiler/JIT.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/Compiler/JIT.cpp?rev=86554&r1=86553&r2=86554&view=diff
==============================================================================
--- vmkit/trunk/lib/Mvm/Compiler/JIT.cpp (original)
+++ vmkit/trunk/lib/Mvm/Compiler/JIT.cpp Mon Nov 9 10:50:54 2009
@@ -427,6 +427,10 @@
conditionalSafePoint = module->getFunction("conditionalSafePoint");
AllocateFunction = module->getFunction("gcmalloc");
assert(AllocateFunction && "No allocate function");
+ AllocateUnresolvedFunction = module->getFunction("gcmallocUnresolved");
+ assert(AllocateUnresolvedFunction && "No allocateUnresolved function");
+ AddFinalizationCandidate = module->getFunction("addFinalizationCandidate");
+ assert(AddFinalizationCandidate && "No addFinalizationCandidate function");
}
@@ -552,6 +556,7 @@
F->setAttributes(SF->getAttributes());
}
}
+
Function* SF = Src->getFunction("gcmalloc");
if (SF && !SF->isDeclaration()) {
Function* F = Function::Create(SF->getFunctionType(),
@@ -563,6 +568,31 @@
executionEngine->updateGlobalMapping(F, ptr);
}
}
+
+ SF = Src->getFunction("gcmallocUnresolved");
+ if (SF && !SF->isDeclaration()) {
+ Function* F = Function::Create(SF->getFunctionType(),
+ GlobalValue::ExternalLinkage,
+ SF->getName(), Dst);
+ F->setAttributes(SF->getAttributes());
+ if (executionEngine) {
+ void* ptr = executionEngine->getPointerToFunction(SF);
+ executionEngine->updateGlobalMapping(F, ptr);
+ }
+ }
+
+ SF = Src->getFunction("addFinalizationCandidate");
+ if (SF && !SF->isDeclaration()) {
+ Function* F = Function::Create(SF->getFunctionType(),
+ GlobalValue::ExternalLinkage,
+ SF->getName(), Dst);
+ F->setAttributes(SF->getAttributes());
+ if (executionEngine) {
+ void* ptr = executionEngine->getPointerToFunction(SF);
+ executionEngine->updateGlobalMapping(F, ptr);
+ }
+ }
+
}
void JITMethodInfo::scan(void* TL, void* ip, void* addr) {
Modified: vmkit/trunk/lib/Mvm/Compiler/LLVMRuntime.ll
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/Compiler/LLVMRuntime.ll?rev=86554&r1=86553&r2=86554&view=diff
==============================================================================
--- vmkit/trunk/lib/Mvm/Compiler/LLVMRuntime.ll (original)
+++ vmkit/trunk/lib/Mvm/Compiler/LLVMRuntime.ll Mon Nov 9 10:50:54 2009
@@ -83,3 +83,5 @@
declare void @llvm.gcroot(i8**, i8*)
declare i8* @gcmalloc(i32, i8*)
+declare i8* @gcmallocUnresolved(i32, i8*)
+declare void @addFinalizationCandidate(i8*)
Modified: vmkit/trunk/lib/Mvm/GCMmap2/MvmGC.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/GCMmap2/MvmGC.h?rev=86554&r1=86553&r2=86554&view=diff
==============================================================================
--- vmkit/trunk/lib/Mvm/GCMmap2/MvmGC.h (original)
+++ vmkit/trunk/lib/Mvm/GCMmap2/MvmGC.h Mon Nov 9 10:50:54 2009
@@ -177,12 +177,6 @@
unlock();
-#if !defined(WITHOUT_FINALIZER)
- if (vt->destructor) {
- mvm::Thread::get()->MyVM->addFinalizationCandidate((gc*)p);
- }
-#endif
-
return p;
#endif
}
Modified: vmkit/trunk/lib/Mvm/GCMmap2/gc.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/GCMmap2/gc.cpp?rev=86554&r1=86553&r2=86554&view=diff
==============================================================================
--- vmkit/trunk/lib/Mvm/GCMmap2/gc.cpp (original)
+++ vmkit/trunk/lib/Mvm/GCMmap2/gc.cpp Mon Nov 9 10:50:54 2009
@@ -23,6 +23,20 @@
return res;
}
+extern "C" void* gcmallocUnresolved(size_t sz, VirtualTable* VT) {
+ void* res = 0;
+ llvm_gcroot(res, 0);
+ res = Collector::gcmalloc(VT, sz);
+ if (VT->destructor)
+ mvm::Thread::get()->MyVM->addFinalizationCandidate(res);
+ return res;
+}
+
+extern "C" void addFinalizationCandidate(gc* obj) {
+ llvm_gcroot(obj, 0);
+ mvm::Thread::get()->MyVM->addFinalizationCandidate(obj);
+}
+
void Collector::scanObject(void** val) {
void* obj = *val;
if (obj) {
Modified: vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp?rev=86554&r1=86553&r2=86554&view=diff
==============================================================================
--- vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp (original)
+++ vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp Mon Nov 9 10:50:54 2009
@@ -20,7 +20,7 @@
extern "C" void JnJVM_org_mmtk_plan_marksweep_MSMutator_postAlloc__Lorg_vmmagic_unboxed_ObjectReference_2Lorg_vmmagic_unboxed_ObjectReference_2II(uintptr_t Mutator, uintptr_t ref, uintptr_t typeref,
int32_t bytes, int32_t allocator) __attribute__((always_inline));
-extern "C" void* gcmalloc(size_t sz, void* _VT) {
+extern "C" void* gcmalloc(uint32_t sz, void* _VT) {
gc* res = 0;
llvm_gcroot(res, 0);
VirtualTable* VT = (VirtualTable*)_VT;
@@ -30,9 +30,23 @@
res = (gc*)JnJVM_org_mmtk_plan_marksweep_MSMutator_alloc__IIIII(Mutator, sz, 0, 0, allocator, 0);
res->setVirtualTable(VT);
JnJVM_org_mmtk_plan_marksweep_MSMutator_postAlloc__Lorg_vmmagic_unboxed_ObjectReference_2Lorg_vmmagic_unboxed_ObjectReference_2II(Mutator, (uintptr_t)res, (uintptr_t)VT, sz, allocator);
-
- if (VT->destructor) {
- mvm::Thread::get()->MyVM->addFinalizationCandidate(res);
- }
return res;
}
+
+extern "C" void addFinalizationCandidate(void* obj) __attribute__((always_inline));
+
+extern "C" void addFinalizationCandidate(void* obj) {
+ llvm_gcroot(obj, 0);
+ mvm::Thread::get()->MyVM->addFinalizationCandidate((gc*)obj);
+}
+
+extern "C" void* gcmallocUnresolved(uint32_t sz, void* _VT) {
+ gc* res = 0;
+ llvm_gcroot(res, 0);
+ VirtualTable* VT = (VirtualTable*)_VT;
+ res = (gc*)gcmalloc(sz, VT);
+ if (VT->destructor) addFinalizationCandidate(res);
+ return res;
+}
+
+
Modified: vmkit/trunk/mmtk/mmtk-fake/Selected.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/mmtk-fake/Selected.cpp?rev=86554&r1=86553&r2=86554&view=diff
==============================================================================
--- vmkit/trunk/mmtk/mmtk-fake/Selected.cpp (original)
+++ vmkit/trunk/mmtk/mmtk-fake/Selected.cpp Mon Nov 9 10:50:54 2009
@@ -28,9 +28,17 @@
sz = llvm::RoundUpToAlignment(sz, sizeof(void*));
res = internalMalloc(0, sz, 0, 0, 0, 0);
res->setVirtualTable(VT);
-
- if (VT->destructor) {
+ return res;
+}
+
+extern "C" void* gcmallocUnresolved(size_t sz, VirtualTable* VT) {
+ gc* res = (gc*)gcmalloc(sz, VT);
+ if (VT->destructor)
mvm::Thread::get()->MyVM->addFinalizationCandidate(res);
- }
return res;
}
+
+extern "C" void addFinalizationCandidate(gc* obj) {
+ mvm::Thread::get()->MyVM->addFinalizationCandidate(obj);
+}
+
Modified: vmkit/trunk/mmtk/mmtk-j3/VM.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/mmtk-j3/VM.cpp?rev=86554&r1=86553&r2=86554&view=diff
==============================================================================
--- vmkit/trunk/mmtk/mmtk-j3/VM.cpp (original)
+++ vmkit/trunk/mmtk/mmtk-j3/VM.cpp Mon Nov 9 10:50:54 2009
@@ -19,9 +19,28 @@
extern "C" void Java_org_j3_runtime_VM_sysWrite__Ljava_lang_String_2 () { JavaThread::get()->printBacktrace(); abort(); }
extern "C" void Java_org_j3_runtime_VM_sysWriteln__ () { JavaThread::get()->printBacktrace(); abort(); }
extern "C" void Java_org_j3_runtime_VM_sysWriteln__Ljava_lang_String_2 () { JavaThread::get()->printBacktrace(); abort(); }
-extern "C" void Java_org_j3_runtime_VM__1assert__ZLjava_lang_String_2 () { JavaThread::get()->printBacktrace(); abort(); }
-extern "C" void Java_org_j3_runtime_VM_sysExit__I () { JavaThread::get()->printBacktrace(); abort(); }
-extern "C" void Java_org_j3_runtime_VM_sysFail__Ljava_lang_String_2 () { JavaThread::get()->printBacktrace(); abort(); }
+
+extern "C" void Java_org_j3_runtime_VM__1assert__ZLjava_lang_String_2 () {
+#ifdef DEBUG
+ JavaThread::get()->printBacktrace();
+#endif
+ abort();
+}
+
+extern "C" void Java_org_j3_runtime_VM_sysExit__I () {
+#ifdef DEBUG
+ JavaThread::get()->printBacktrace();
+#endif
+ abort();
+}
+
+
+extern "C" void Java_org_j3_runtime_VM_sysFail__Ljava_lang_String_2 () {
+#ifdef DEBUG
+ JavaThread::get()->printBacktrace();
+#endif
+ abort();
+}
extern "C" void Java_org_j3_runtime_VM__1assert__Z (bool cond) {
More information about the vmkit-commits
mailing list