[llvm-commits] [vmkit] r52407 - in /vmkit/trunk/lib/JnJVM/VMCore: JavaInitialise.cpp Jnjvm.cpp Jnjvm.h JnjvmModule.cpp JnjvmModuleProvider.cpp JnjvmModuleProvider.h
Nicolas Geoffray
nicolas.geoffray at lip6.fr
Tue Jun 17 07:26:15 PDT 2008
Author: geoffray
Date: Tue Jun 17 09:26:15 2008
New Revision: 52407
URL: http://llvm.org/viewvc/llvm-project?rev=52407&view=rev
Log:
Implement Java object finalization.
Modified:
vmkit/trunk/lib/JnJVM/VMCore/JavaInitialise.cpp
vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp
vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.h
vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp
vmkit/trunk/lib/JnJVM/VMCore/JnjvmModuleProvider.cpp
vmkit/trunk/lib/JnJVM/VMCore/JnjvmModuleProvider.h
Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaInitialise.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaInitialise.cpp?rev=52407&r1=52406&r2=52407&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaInitialise.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaInitialise.cpp Tue Jun 17 09:26:15 2008
@@ -182,6 +182,7 @@
DEF_UTF8(log1p);
DEF_UTF8(sinh);
DEF_UTF8(tanh);
+ DEF_UTF8(finalize);
#undef DEF_UTF8
Modified: vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp?rev=52407&r1=52406&r2=52407&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp Tue Jun 17 09:26:15 2008
@@ -73,6 +73,7 @@
DEF_UTF8(log1p);
DEF_UTF8(sinh);
DEF_UTF8(tanh);
+ DEF_UTF8(finalize);
#undef DEF_UTF8
Modified: vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.h?rev=52407&r1=52406&r2=52407&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.h Tue Jun 17 09:26:15 2008
@@ -174,6 +174,7 @@
static const UTF8* log1p;
static const UTF8* sinh;
static const UTF8* tanh;
+ static const UTF8* finalize;
void analyseClasspathEnv(const char*);
Modified: vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp?rev=52407&r1=52406&r2=52407&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp Tue Jun 17 09:26:15 2008
@@ -191,22 +191,42 @@
return VT;
} else {
JavaMethod* meth = meths->second;
- JavaMethod* parent = cl->super?
- cl->super->lookupMethodDontThrow(meth->name, meth->type, false, true) : 0;
-
- uint64_t offset = 0;
- if (!parent) {
- offset = cl->virtualTableSize++;
- meth->offset = offset;
+ VirtualTable* VT = 0;
+ if (meth->name->equals(Jnjvm::finalize)) {
+ VT = allocateVT(cl, ++meths);
+ meth->offset = 0;
+ Function* func = cl->isolate->TheModuleProvider->parseFunction(meth);
+ if (!cl->super) meth->canBeInlined = true;
+ Function::iterator BB = func->begin();
+ BasicBlock::iterator I = BB->begin();
+ if (isa<ReturnInst>(I)) {
+ ((void**)VT)[0] = 0;
+ } else {
+ ExecutionEngine* EE = mvm::jit::executionEngine;
+ // LLVM does not allow recursive compilation. Create the code now.
+ ((void**)VT)[0] = EE->getPointerToFunction(func);
+ }
} else {
- offset = parent->offset;
- meth->offset = parent->offset;
+
+ JavaMethod* parent = cl->super?
+ cl->super->lookupMethodDontThrow(meth->name, meth->type, false, true) :
+ 0;
+
+ uint64_t offset = 0;
+ if (!parent) {
+ offset = cl->virtualTableSize++;
+ meth->offset = offset;
+ } else {
+ offset = parent->offset;
+ meth->offset = parent->offset;
+ }
+ VT = allocateVT(cl, ++meths);
+ LLVMMethodInfo* LMI = getMethodInfo(meth);
+ Function* func = LMI->getMethod();
+ ExecutionEngine* EE = mvm::jit::executionEngine;
+ ((void**)VT)[offset] = EE->getPointerToFunctionOrStub(func);
}
- VirtualTable* VT = allocateVT(cl, ++meths);
- LLVMMethodInfo* LMI = getMethodInfo(meth);
- Function* func = LMI->getMethod();
- ExecutionEngine* EE = mvm::jit::executionEngine;
- ((void**)VT)[offset] = EE->getPointerToFunctionOrStub(func);
+
return VT;
}
}
@@ -249,7 +269,9 @@
}
}
#endif
-
+
+
+
#ifdef WITH_TRACER
LLVMClassInfo* LCI = (LLVMClassInfo*)getClassInfo(cl);
const Type* type = stat ? LCI->getStaticType() : LCI->getVirtualType();
Modified: vmkit/trunk/lib/JnJVM/VMCore/JnjvmModuleProvider.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JnjvmModuleProvider.cpp?rev=52407&r1=52406&r2=52407&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmModuleProvider.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmModuleProvider.cpp Tue Jun 17 09:26:15 2008
@@ -105,6 +105,15 @@
}
void* JnjvmModuleProvider::materializeFunction(JavaMethod* meth) {
+ Function* func = parseFunction(meth);
+
+ void* res = mvm::jit::executionEngine->getPointerToGlobal(func);
+ mvm::Code* m = mvm::jit::getCodeFromPointer(res);
+ if (m) m->setMetaInfo(meth);
+ return res;
+}
+
+Function* JnjvmModuleProvider::parseFunction(JavaMethod* meth) {
LLVMMethodInfo* LMI = ((JnjvmModule*)TheModule)->getMethodInfo(meth);
Function* func = LMI->getMethod();
if (func->hasNotBeenReadFromBitcode()) {
@@ -122,11 +131,7 @@
mvm::jit::runPasses(func, perFunctionPasses);
}
}
-
- void* res = mvm::jit::executionEngine->getPointerToGlobal(func);
- mvm::Code* m = mvm::jit::getCodeFromPointer(res);
- if (m) m->setMetaInfo(meth);
- return res;
+ return func;
}
llvm::Function* JnjvmModuleProvider::addCallback(Class* cl, uint32 index,
Modified: vmkit/trunk/lib/JnJVM/VMCore/JnjvmModuleProvider.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JnjvmModuleProvider.h?rev=52407&r1=52406&r2=52407&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmModuleProvider.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmModuleProvider.h Tue Jun 17 09:26:15 2008
@@ -51,6 +51,7 @@
bool materializeFunction(Function *F, std::string *ErrInfo = 0);
void* materializeFunction(JavaMethod* meth);
+ llvm::Function* parseFunction(JavaMethod* meth);
Module* materializeModule(std::string *ErrInfo = 0) { return TheModule; }
};
More information about the llvm-commits
mailing list