[vmkit-commits] [vmkit] r61587 - in /vmkit/trunk/lib/JnJVM/VMCore: Jnjvm.cpp JnjvmModule.cpp JnjvmModule.h
Nicolas Geoffray
nicolas.geoffray at lip6.fr
Fri Jan 2 09:05:18 PST 2009
Author: geoffray
Date: Fri Jan 2 11:05:18 2009
New Revision: 61587
URL: http://llvm.org/viewvc/llvm-project?rev=61587&view=rev
Log:
Do not define external values when static compiling.
Modified:
vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp
vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp
vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.h
Modified: vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp?rev=61587&r1=61586&r2=61587&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp Fri Jan 2 11:05:18 2009
@@ -1095,6 +1095,11 @@
static void compileClass(Class* cl) {
+ // Use the owner class field of the class so that we know if the class
+ // belongs to the list of classes that we are static compiling.
+ cl->setOwnerClass(JavaThread::get());
+ llvm::Value* LCL = cl->classLoader->getModule()->getNativeClass(cl);
+ cl->classLoader->getModule()->getInitializationState(LCL);
for (uint32 i = 0; i < cl->nbVirtualMethods; ++i) {
JavaMethod& meth = cl->virtualMethods[i];
Modified: vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp?rev=61587&r1=61586&r2=61587&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp Fri Jan 2 11:05:18 2009
@@ -87,6 +87,12 @@
llvm::ConstantInt* JnjvmModule::JavaObjectLockOffsetConstant;
llvm::ConstantInt* JnjvmModule::JavaObjectClassOffsetConstant;
+
+static bool isCompiling(Class* cl) {
+ // A class is being static compiled if owner class is not null.
+ return (cl->getOwnerClass() != 0);
+}
+
Constant* JnjvmModule::getNativeClass(CommonClass* classDef) {
if (staticCompilation) {
@@ -109,16 +115,18 @@
nativeClasses.insert(std::make_pair(classDef, varGV));
- Constant* C = 0;
- if (classDef->isClass()) {
- C = CreateConstantFromClass((Class*)classDef);
- } else if (classDef->isPrimitive()) {
- C = CreateConstantFromClassPrimitive((ClassPrimitive*)classDef);
- } else {
- C = CreateConstantFromClassArray((ClassArray*)classDef);
- }
+ if (classDef->isClass() && isCompiling(classDef->asClass())) {
+ Constant* C = 0;
+ if (classDef->isClass()) {
+ C = CreateConstantFromClass((Class*)classDef);
+ } else if (classDef->isPrimitive()) {
+ C = CreateConstantFromClassPrimitive((ClassPrimitive*)classDef);
+ } else {
+ C = CreateConstantFromClassArray((ClassArray*)classDef);
+ }
- varGV->setInitializer(C);
+ varGV->setInitializer(C);
+ }
return varGV;
@@ -246,7 +254,9 @@
JavaObjectType);
javaClasses.insert(std::make_pair(cl, res));
- varGV->setInitializer(CreateConstantFromJavaClass(cl));
+ if (cl->isClass() && isCompiling(cl->asClass())) {
+ varGV->setInitializer(CreateConstantFromJavaClass(cl));
+ }
return res;
} else {
return I->second;
@@ -309,6 +319,11 @@
virtual_table_iterator End = virtualTables.end();
virtual_table_iterator I = virtualTables.find(classDef);
if (I == End) {
+
+ if (isCompiling(classDef)) {
+ classDef->virtualVT = makeVT(classDef);
+ }
+
const ArrayType* ATy = dyn_cast<ArrayType>(VTType->getContainedType(0));
const PointerType* PTy = dyn_cast<PointerType>(ATy->getContainedType(0));
ATy = ArrayType::get(PTy, classDef->virtualTableSize);
@@ -318,13 +333,16 @@
res = ConstantExpr::getCast(Instruction::BitCast, varGV, VTType);
virtualTables.insert(std::make_pair(classDef, res));
-
- Function* Finalizer = ((Function**)classDef->virtualVT)[0];
- Function* Tracer = LCI->getVirtualTracer();
- Constant* C = CreateConstantFromVT(classDef->virtualVT,
- classDef->virtualTableSize, Finalizer,
- Tracer);
- varGV->setInitializer(C);
+
+ if (isCompiling(classDef)) {
+ classDef->virtualVT = makeVT(classDef);
+ Function* Finalizer = ((Function**)classDef->virtualVT)[0];
+ Function* Tracer = LCI->getVirtualTracer();
+ Constant* C = CreateConstantFromVT(classDef->virtualVT,
+ classDef->virtualTableSize,
+ Finalizer, Tracer);
+ varGV->setInitializer(C);
+ }
return res;
} else {
@@ -1076,7 +1094,7 @@
ClassElts.push_back(Constant::getNullValue(ptrType));
// staticTracer
- Function* F = (Function*)(uintptr_t)cl->staticTracer;
+ Function* F = makeTracer(cl, true);
const Type* FTy = STy->getContainedType(STy->getNumContainedTypes() - 1);
Constant* staticTracer = ConstantExpr::getCast(Instruction::BitCast, F, FTy);
ClassElts.push_back(staticTracer);
@@ -1169,6 +1187,10 @@
memcpy(VT, JavaObjectVT, VT_SIZE);
#else
if (cl->super) {
+ if (isStaticCompiling() && !cl->super->virtualVT) {
+ cl->super->virtualVT = makeVT(cl->super);
+ }
+
cl->virtualTableSize = cl->super->virtualTableSize;
} else {
cl->virtualTableSize = VT_NB_FUNCS;
@@ -1284,9 +1306,10 @@
virtualSizeConstant = ConstantInt::get(Type::Int32Ty, size);
JnjvmModule* Mod = classDef->classLoader->getModule();
- classDef->virtualVT = Mod->makeVT((Class*)classDef);
+ if (!Mod->isStaticCompiling()) {
+ classDef->virtualVT = Mod->makeVT((Class*)classDef);
+ }
-
}
return virtualType;
@@ -1321,10 +1344,8 @@
cl->staticSize = size;
JnjvmModule* Mod = cl->classLoader->getModule();
- Function* F = Mod->makeTracer(cl, true);
- if (Mod->isStaticCompiling()) {
- cl->staticTracer = (void (*)(void*)) (uintptr_t) F;
- } else {
+ if (!Mod->isStaticCompiling()) {
+ Function* F = Mod->makeTracer(cl, true);
cl->staticTracer = (void (*)(void*)) (uintptr_t)
Mod->executionEngine->getPointerToFunction(F);
F->deleteBody();
Modified: vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.h?rev=61587&r1=61586&r2=61587&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.h Fri Jan 2 11:05:18 2009
@@ -421,7 +421,9 @@
llvm::Value* getIsolate(Jnjvm* vm, llvm::Value* Where);
#endif
-
+
+ void cleanupStaticCompiler(JnjvmClassLoader* loader);
+
private:
static llvm::Module* initialModule;
More information about the vmkit-commits
mailing list