[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