[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