[vmkit-commits] [vmkit] r55056 - in /vmkit/trunk/lib/JnJVM/VMCore: JavaInitialise.cpp JnjvmClassLoader.cpp JnjvmClassLoader.h VirtualTables.cpp

Nicolas Geoffray nicolas.geoffray at lip6.fr
Wed Aug 20 08:52:07 PDT 2008


Author: geoffray
Date: Wed Aug 20 10:52:05 2008
New Revision: 55056

URL: http://llvm.org/viewvc/llvm-project?rev=55056&view=rev
Log:
Hooks for the shared loader.
Add #includes for realpath.


Modified:
    vmkit/trunk/lib/JnJVM/VMCore/JavaInitialise.cpp
    vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp
    vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.h
    vmkit/trunk/lib/JnJVM/VMCore/VirtualTables.cpp

Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaInitialise.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaInitialise.cpp?rev=55056&r1=55055&r2=55056&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaInitialise.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaInitialise.cpp Wed Aug 20 10:52:05 2008
@@ -49,6 +49,9 @@
   INIT(DelegateeMap);
   INIT(JnjvmBootstrapLoader);
   INIT(JnjvmClassLoader);
+#ifdef MULTIPLE_VM
+  INIT(JnjvmSharedLoader);
+#endif
 #ifdef SERVICE_VM
   INIT(ServiceDomain);
 #endif

Modified: vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp?rev=55056&r1=55055&r2=55056&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp Wed Aug 20 10:52:05 2008
@@ -7,6 +7,8 @@
 //
 //===----------------------------------------------------------------------===//
 
+#include <limits.h>
+#include <unistd.h>
 #include <sys/stat.h>
 
 #include "debug.h"
@@ -27,7 +29,7 @@
 JnjvmBootstrapLoader* JnjvmClassLoader::bootstrapLoader = 0;
 
 #ifdef MULTIPLE_VM
-JnjvmClassLoader* JnjvmClassLoader::sharedLoader = 0;
+JnjvmSharedLoader* JnjvmClassLoader::sharedLoader = 0;
 #endif
 
 extern const char* GNUClasspathGlibj;
@@ -62,6 +64,25 @@
   return JCL;
 }
 
+#ifdef MULTIPLE_VM
+JnjvmSharedLoader* JnjvmSharedLoader::createSharedLoader() {
+  
+  JnjvmSharedLoader* JCL = gc_new(JnjvmSharedLoader)();
+  JCL->TheModule = new JnjvmModule("Bootstrap JnJVM");
+  JCL->TheModuleProvider = new JnjvmModuleProvider(JCL->TheModule);
+  JCL->TheModule->initialise(); 
+  
+  JCL->allocator = new JavaAllocator();
+  
+  JCL->hashUTF8 = new UTF8Map(JCL->allocator);
+  JCL->classes = allocator_new(allocator, ClassMap)();
+  JCL->javaTypes = new TypeMap(); 
+  JCL->javaSignatures = new SignMap(); 
+  
+  return JCL;
+}
+#endif
+
 JnjvmClassLoader::JnjvmClassLoader(JnjvmClassLoader& JCL, JavaObject* loader, Jnjvm* I) {
   TheModule = JCL.TheModule;
   TheModuleProvider = JCL.TheModuleProvider;
@@ -400,16 +421,30 @@
 
 ClassArray* JnjvmClassLoader::constructArray(const UTF8* name) {
   if (javaLoader != 0) {
-    JnjvmClassLoader * ld = ClassArray::arrayLoader(name, this, 1, name->size - 1);
-    ClassArray* res = (ClassArray*)ld->classes->lookupOrCreate(name, this, arrayDup);
+    JnjvmClassLoader * ld = 
+      ClassArray::arrayLoader(name, this, 1, name->size - 1);
+    ClassArray* res = 
+      (ClassArray*)ld->classes->lookupOrCreate(name, this, arrayDup);
     return res;
   } else {
     return (ClassArray*)classes->lookupOrCreate(name, this, arrayDup);
   }
 }
 
+Class* JnjvmSharedLoader::constructSharedClass(const UTF8* name,
+                                               ArrayUInt8* bytes) {
+  
+  return 0;
+}
+
 
 Class* JnjvmClassLoader::constructClass(const UTF8* name, ArrayUInt8* bytes) {
+#ifdef MULTIPLE_VM
+  if (this != bootstrapLoader && this != sharedLoader && bytes) {
+    Class* cl = sharedLoader->constructSharedClass(name, bytes);
+    if (cl) return cl;
+  }
+#endif
   classes->lock->lock();
   ClassMap::iterator End = classes->map.end();
   ClassMap::iterator I = classes->map.find(name);

Modified: vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.h?rev=55056&r1=55055&r2=55056&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.h Wed Aug 20 10:52:05 2008
@@ -41,6 +41,10 @@
 class UTF8Map;
 class ZipArchive;
 
+#ifdef MULTIPLE_VM
+class JnjvmSharedLoader;
+#endif
+
 /// JnjvmClassLoader - Runtime representation of a class loader. It contains
 /// its own tables (signatures, UTF8, types) which are mapped to a single
 /// table for non-isolate environments.
@@ -217,7 +221,7 @@
 #ifdef MULTIPLE_VM
   /// sharedLoader - Shared loader when multiple vms are executing.
   ///
-  static JnjvmClassLoader* sharedLoader;
+  static JnjvmSharedLoader* sharedLoader;
 #endif
 
   /// ~JnjvmClassLoader - Destroy the loader. Depending on the JVM
@@ -239,6 +243,32 @@
 
 };
 
+class JnjvmSharedLoader : public JnjvmClassLoader {
+private:
+  
+  /// internalLoad - Load the class with the given name.
+  ///
+  virtual CommonClass* internalLoad(const UTF8* utf8) {
+    fprintf(stderr, "Don't use me");
+    exit(1);
+  }
+
+public:
+  
+  /// VT - The virtual table of this class.
+  ///
+  static VirtualTable* VT;
+
+
+  /// constructSharedClass - Create a shared representation of the class.
+  /// If two classes have the same name but not the same array of bytes, 
+  /// raise an exception.
+  ///
+  Class* constructSharedClass(const UTF8* name, ArrayUInt8* bytes);
+
+  static JnjvmSharedLoader* createSharedLoader();
+};
+
 
 /// JnjvmBootstrapLoader - This class is for the bootstrap class loader, which
 /// loads base classes, ie glibj.zip or rt.jar and -Xbootclasspath.

Modified: vmkit/trunk/lib/JnJVM/VMCore/VirtualTables.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/VirtualTables.cpp?rev=55056&r1=55055&r2=55056&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/VirtualTables.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/VirtualTables.cpp Wed Aug 20 10:52:05 2008
@@ -37,6 +37,9 @@
   INIT(DelegateeMap);
   INIT(JnjvmBootstrapLoader);
   INIT(JnjvmClassLoader);
+#ifdef MULTIPLE_VM
+  INIT(JnjvmSharedLoader);
+#endif
 #ifdef SERVICE_VM
   INIT(ServiceDomain);
 #endif





More information about the vmkit-commits mailing list