[vmkit-commits] [vmkit] r75006 - in /vmkit/trunk: include/jnjvm/JnjvmModule.h include/mvm/Allocator.h lib/JnJVM/VMCore/JavaClass.h lib/JnJVM/VMCore/JnjvmClassLoader.cpp lib/JnJVM/VMCore/JnjvmClassLoader.h
Nicolas Geoffray
nicolas.geoffray at lip6.fr
Wed Jul 8 07:17:31 PDT 2009
Author: geoffray
Date: Wed Jul 8 09:17:23 2009
New Revision: 75006
URL: http://llvm.org/viewvc/llvm-project?rev=75006&view=rev
Log:
Clear the contents of JITInfos when changing compilers.
Modified:
vmkit/trunk/include/jnjvm/JnjvmModule.h
vmkit/trunk/include/mvm/Allocator.h
vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h
vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp
vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.h
Modified: vmkit/trunk/include/jnjvm/JnjvmModule.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/jnjvm/JnjvmModule.h?rev=75006&r1=75005&r2=75006&view=diff
==============================================================================
--- vmkit/trunk/include/jnjvm/JnjvmModule.h (original)
+++ vmkit/trunk/include/jnjvm/JnjvmModule.h Wed Jul 8 09:17:23 2009
@@ -93,6 +93,12 @@
virtualSizeConstant(0),
virtualType(0),
staticType(0) {}
+
+ virtual void clear() {
+ virtualType = 0;
+ staticType = 0;
+ virtualSizeConstant = 0;
+ }
};
class LLVMMethodInfo : public mvm::JITInfo, private llvm::Annotation {
@@ -111,6 +117,12 @@
LLVMMethodInfo(JavaMethod* M);
static JavaMethod* get(const llvm::Function* F);
+
+ virtual void clear() {
+ methodFunction = 0;
+ offsetConstant = 0;
+ functionType = 0;
+ }
};
class LLVMFieldInfo : public mvm::JITInfo {
@@ -125,6 +137,10 @@
LLVMFieldInfo(JavaField* F) :
fieldDef(F),
offsetConstant(0) {}
+
+ virtual void clear() {
+ offsetConstant = 0;
+ }
};
class LLVMSignatureInfo : public mvm::JITInfo {
@@ -634,7 +650,7 @@
bool generateStubs;
bool assumeCompiled;
-
+ bool runClinit;
bool compileRT;
Modified: vmkit/trunk/include/mvm/Allocator.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/mvm/Allocator.h?rev=75006&r1=75005&r2=75006&view=diff
==============================================================================
--- vmkit/trunk/include/mvm/Allocator.h (original)
+++ vmkit/trunk/include/mvm/Allocator.h Wed Jul 8 09:17:23 2009
@@ -80,6 +80,7 @@
/// <Class>::getInfo and destroyed when the <Class> object is destroyed.
struct JITInfo : public mvm::PermanentObject {
virtual ~JITInfo() {}
+ virtual void clear() {}
};
} // end namespace mvm
Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h?rev=75006&r1=75005&r2=75006&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h Wed Jul 8 09:17:23 2009
@@ -692,6 +692,10 @@
return static_cast<Ty*>(JInfo);
}
+ void clearInfo() {
+ if (JInfo) JInfo->clear();
+ }
+
/// resolveClass - If the class has not been resolved yet, resolve it.
///
void resolveClass();
@@ -1170,6 +1174,10 @@
return static_cast<Ty*>(JInfo);
}
+ void clearInfo() {
+ if (JInfo) JInfo->clear();
+ }
+
#define JNI_NAME_PRE "Java_"
#define JNI_NAME_PRE_LEN 5
@@ -1292,6 +1300,10 @@
"Invalid concrete type or multiple inheritence for getInfo");
return static_cast<Ty*>(JInfo);
}
+
+ void clearInfo() {
+ if (JInfo) JInfo->clear();
+ }
bool isReference() {
Modified: vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp?rev=75006&r1=75005&r2=75006&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp Wed Jul 8 09:17:23 2009
@@ -294,6 +294,37 @@
}
+void JnjvmClassLoader::setCompiler(JavaCompiler* Comp) {
+
+ // Set the new compiler.
+ TheCompiler = Comp;
+
+ // Clean up JITInfo of all classes.
+ for (ClassMap::iterator i = classes->map.begin(), e = classes->map.end();
+ i!= e; ++i) {
+ CommonClass* ccl = i->second;
+ if (ccl->isClass()) {
+ Class* cl = ccl->asClass();
+ cl->clearInfo();
+
+ for (uint32 i = 0; i < cl->nbVirtualMethods; ++i) {
+ cl->virtualMethods[i].clearInfo();
+ }
+
+ for (uint32 i = 0; i < cl->nbStaticMethods; ++i) {
+ cl->staticMethods[i].clearInfo();
+ }
+
+ for (uint32 i = 0; i < cl->nbVirtualFields; ++i) {
+ cl->virtualFields[i].clearInfo();
+ }
+ for (uint32 i = 0; i < cl->nbStaticFields; ++i) {
+ cl->staticFields[i].clearInfo();
+ }
+ }
+ }
+}
+
ArrayUInt8* JnjvmBootstrapLoader::openName(const UTF8* utf8) {
char* asciiz = (char*)alloca(utf8->size + 1);
for (sint32 i = 0; i < utf8->size; ++i)
Modified: vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.h?rev=75006&r1=75005&r2=75006&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.h Wed Jul 8 09:17:23 2009
@@ -127,7 +127,7 @@
/// setCompiler - Set the compiler of classes loaded by this class loader.
///
- void setCompiler(JavaCompiler* Comp) { TheCompiler = Comp; }
+ void setCompiler(JavaCompiler* Comp);
/// tracer - Traces a JnjvmClassLoader for GC.
///
More information about the vmkit-commits
mailing list