[vmkit-commits] [vmkit] r55527 - in /vmkit/branches/isolate/lib/JnJVM: ./ Classpath/ Isolate/ LLVMRuntime/ VMCore/

Nicolas Geoffray nicolas.geoffray at lip6.fr
Thu Aug 28 23:13:41 PDT 2008


Author: geoffray
Date: Fri Aug 29 01:13:39 2008
New Revision: 55527

URL: http://llvm.org/viewvc/llvm-project?rev=55527&view=rev
Log:
Single VM runs as usual and Multi VM creates an exe!


Modified:
    vmkit/branches/isolate/lib/JnJVM/Classpath/ClasspathConstructor.cpp.inc
    vmkit/branches/isolate/lib/JnJVM/Classpath/ClasspathMethod.cpp.inc
    vmkit/branches/isolate/lib/JnJVM/Classpath/ClasspathVMClass.cpp.inc
    vmkit/branches/isolate/lib/JnJVM/Classpath/ClasspathVMClassLoader.cpp.inc
    vmkit/branches/isolate/lib/JnJVM/Classpath/ClasspathVMRuntime.cpp.inc
    vmkit/branches/isolate/lib/JnJVM/Classpath/ClasspathVMStackWalker.cpp.inc
    vmkit/branches/isolate/lib/JnJVM/Isolate/IsolateCommonClass.cpp
    vmkit/branches/isolate/lib/JnJVM/Isolate/IsolateCommonClass.h
    vmkit/branches/isolate/lib/JnJVM/Isolate/IsolateSharedLoader.cpp
    vmkit/branches/isolate/lib/JnJVM/Isolate/IsolateSharedLoader.h
    vmkit/branches/isolate/lib/JnJVM/Isolate/SharedMaps.h
    vmkit/branches/isolate/lib/JnJVM/LLVMRuntime/runtime-isolate.ll
    vmkit/branches/isolate/lib/JnJVM/Makefile
    vmkit/branches/isolate/lib/JnJVM/VMCore/JavaClass.cpp
    vmkit/branches/isolate/lib/JnJVM/VMCore/JavaConstantPool.cpp
    vmkit/branches/isolate/lib/JnJVM/VMCore/JavaConstantPool.h
    vmkit/branches/isolate/lib/JnJVM/VMCore/JavaInitialise.cpp
    vmkit/branches/isolate/lib/JnJVM/VMCore/JavaJIT.cpp
    vmkit/branches/isolate/lib/JnJVM/VMCore/JavaJIT.h
    vmkit/branches/isolate/lib/JnJVM/VMCore/JavaUpcalls.cpp
    vmkit/branches/isolate/lib/JnJVM/VMCore/Jni.cpp
    vmkit/branches/isolate/lib/JnJVM/VMCore/Jnjvm.cpp
    vmkit/branches/isolate/lib/JnJVM/VMCore/Jnjvm.h
    vmkit/branches/isolate/lib/JnJVM/VMCore/JnjvmClassLoader.cpp
    vmkit/branches/isolate/lib/JnJVM/VMCore/JnjvmClassLoader.h
    vmkit/branches/isolate/lib/JnJVM/VMCore/JnjvmModuleProvider.cpp
    vmkit/branches/isolate/lib/JnJVM/VMCore/NativeUtil.cpp
    vmkit/branches/isolate/lib/JnJVM/VMCore/NativeUtil.h
    vmkit/branches/isolate/lib/JnJVM/VMCore/VirtualTables.cpp

Modified: vmkit/branches/isolate/lib/JnJVM/Classpath/ClasspathConstructor.cpp.inc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/Classpath/ClasspathConstructor.cpp.inc?rev=55527&r1=55526&r2=55527&view=diff

==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/Classpath/ClasspathConstructor.cpp.inc (original)
+++ vmkit/branches/isolate/lib/JnJVM/Classpath/ClasspathConstructor.cpp.inc Fri Aug 29 01:13:39 2008
@@ -108,7 +108,15 @@
   verifyNull(cons);
   Jnjvm* vm = JavaThread::get()->isolate;
   JavaMethod* meth = (JavaMethod*)vm->upcalls->constructorSlot->getInt32Field((JavaObject*)cons);
-  return (jobjectArray)NativeUtil::getExceptionTypes(meth);
+  UserClass* cl = 0;
+#ifdef MULTIPLE_VM
+    jclass Cl = (jclass)vm->upcalls->methodClass->getInt32Field((JavaObject*)cons);
+    cl = (UserClass*)NativeUtil::resolvedImplClass(Cl, false);
+#else
+    cl = meth->classDef;
+#endif
+
+  return (jobjectArray)NativeUtil::getExceptionTypes(cl, meth);
 }
 
 }

Modified: vmkit/branches/isolate/lib/JnJVM/Classpath/ClasspathMethod.cpp.inc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/Classpath/ClasspathMethod.cpp.inc?rev=55527&r1=55526&r2=55527&view=diff

==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/Classpath/ClasspathMethod.cpp.inc (original)
+++ vmkit/branches/isolate/lib/JnJVM/Classpath/ClasspathMethod.cpp.inc Fri Aug 29 01:13:39 2008
@@ -206,7 +206,14 @@
   verifyNull(_meth);
   Jnjvm* vm = JavaThread::get()->isolate;
   JavaMethod* meth = (JavaMethod*)vm->upcalls->methodSlot->getInt32Field((JavaObject*)_meth);
-  return (jobjectArray)NativeUtil::getExceptionTypes(meth);
+  UserClass* cl = 0;
+#ifdef MULTIPLE_VM
+  jclass Cl = (jclass)vm->upcalls->methodClass->getInt32Field((JavaObject*)_meth);
+  cl = (UserClass*)NativeUtil::resolvedImplClass(Cl, false);
+#else
+  cl = meth->classDef;
+#endif
+  return (jobjectArray)NativeUtil::getExceptionTypes(cl, meth);
 }
 
 }

Modified: vmkit/branches/isolate/lib/JnJVM/Classpath/ClasspathVMClass.cpp.inc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/Classpath/ClasspathVMClass.cpp.inc?rev=55527&r1=55526&r2=55527&view=diff

==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/Classpath/ClasspathVMClass.cpp.inc (original)
+++ vmkit/branches/isolate/lib/JnJVM/Classpath/ClasspathVMClass.cpp.inc Fri Aug 29 01:13:39 2008
@@ -54,7 +54,7 @@
                                                         jobject loader) {
 
   Jnjvm* vm = JavaThread::get()->isolate; 
-  JnjvmClassLoader* JCL = JnjvmClassLoader::getJnjvmLoaderFromJavaObject((JavaObject*)loader);
+  JnjvmClassLoader* JCL = JnjvmClassLoader::getJnjvmLoaderFromJavaObject((JavaObject*)loader, vm);
   UserCommonClass* cl = JCL->lookupClassFromJavaString((JavaString*)str,
                                                    true, false);
   if (cl != 0) {

Modified: vmkit/branches/isolate/lib/JnJVM/Classpath/ClasspathVMClassLoader.cpp.inc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/Classpath/ClasspathVMClassLoader.cpp.inc?rev=55527&r1=55526&r2=55527&view=diff

==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/Classpath/ClasspathVMClassLoader.cpp.inc (original)
+++ vmkit/branches/isolate/lib/JnJVM/Classpath/ClasspathVMClassLoader.cpp.inc Fri Aug 29 01:13:39 2008
@@ -52,7 +52,7 @@
   Jnjvm* vm = JavaThread::get()->isolate;
   JavaString* name = (JavaString*)_name;
   const UTF8* utf8 = name->strToUTF8(vm);
-  JnjvmClassLoader* JCL = JnjvmClassLoader::getJnjvmLoaderFromJavaObject((JavaObject*)loader);
+  JnjvmClassLoader* JCL = JnjvmClassLoader::getJnjvmLoaderFromJavaObject((JavaObject*)loader, vm);
   UserCommonClass* cl = JCL->lookupClass(utf8);
 
   if (cl) return (jclass)(cl->getClassDelegatee(vm));
@@ -69,7 +69,7 @@
   Jnjvm* vm = JavaThread::get()->isolate;
   JavaString* str = (JavaString*)_str;
 
-  JnjvmClassLoader* JCL = JnjvmClassLoader::bootstrapLoader;
+  JnjvmClassLoader* JCL = vm->bootstrapLoader;
   UserCommonClass* cl = JCL->lookupClassFromJavaString(str, doResolve, false);
 
   if (cl != 0) {
@@ -91,7 +91,7 @@
                                                                   jint len, 
                                                                   jobject pd) {
   Jnjvm* vm = JavaThread::get()->isolate;
-  JnjvmClassLoader* JCL = JnjvmClassLoader::getJnjvmLoaderFromJavaObject((JavaObject*)loader);
+  JnjvmClassLoader* JCL = JnjvmClassLoader::getJnjvmLoaderFromJavaObject((JavaObject*)loader, vm);
   JavaString* str = (JavaString*)_str;
   const UTF8* name = str->value->javaToInternal(JCL->hashUTF8, str->offset, str->count);
   UserClass* cl = JCL->constructClass(name, (ArrayUInt8*)bytes);

Modified: vmkit/branches/isolate/lib/JnJVM/Classpath/ClasspathVMRuntime.cpp.inc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/Classpath/ClasspathVMRuntime.cpp.inc?rev=55527&r1=55526&r2=55527&view=diff

==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/Classpath/ClasspathVMRuntime.cpp.inc (original)
+++ vmkit/branches/isolate/lib/JnJVM/Classpath/ClasspathVMRuntime.cpp.inc Fri Aug 29 01:13:39 2008
@@ -52,7 +52,7 @@
   memmove(&(elements[lgPre + lgLib]), vm->postlib->elements, lgPost * sizeof(uint16));
   
   // TODO: find a better place to store the UTF8
-  const UTF8* res = JnjvmClassLoader::bootstrapLoader->readerConstructUTF8(elements, size);
+  const UTF8* res = vm->bootstrapLoader->readerConstructUTF8(elements, size);
 
   return (jobject)(vm->UTF8ToStr(res));
   

Modified: vmkit/branches/isolate/lib/JnJVM/Classpath/ClasspathVMStackWalker.cpp.inc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/Classpath/ClasspathVMStackWalker.cpp.inc?rev=55527&r1=55526&r2=55527&view=diff

==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/Classpath/ClasspathVMStackWalker.cpp.inc (original)
+++ vmkit/branches/isolate/lib/JnJVM/Classpath/ClasspathVMStackWalker.cpp.inc Fri Aug 29 01:13:39 2008
@@ -28,6 +28,7 @@
 
 extern "C" {
 
+#ifndef MULTIPLE_VM
 ArrayObject* recGetClassContext(Jnjvm* vm, int** stack, uint32 size, uint32 first, uint32 rec) {
   if (size != first) {
     JavaMethod* meth = JavaJIT::IPToJavaMethod(stack[first]);
@@ -42,7 +43,7 @@
     return ArrayObject::acons(rec, vm->upcalls->classArrayClass, &(vm->allocator));
   }
 }
-#ifndef MULTIPLE_VM
+
 JNIEXPORT jobject JNICALL Java_gnu_classpath_VMStackWalker_getClassContext(
 #ifdef NATIVE_JNI
 JNIEnv *env,

Modified: vmkit/branches/isolate/lib/JnJVM/Isolate/IsolateCommonClass.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/Isolate/IsolateCommonClass.cpp?rev=55527&r1=55526&r2=55527&view=diff

==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/Isolate/IsolateCommonClass.cpp (original)
+++ vmkit/branches/isolate/lib/JnJVM/Isolate/IsolateCommonClass.cpp Fri Aug 29 01:13:39 2008
@@ -7,10 +7,11 @@
 //
 //===----------------------------------------------------------------------===//
 
-#include "IsolateCommonClass.h"
+
 #include "IsolateSharedLoader.h"
 #include "JavaAllocator.h"
 #include "JavaClass.h"
+#include "JnjvmModule.h"
 
 using namespace jnjvm;
 
@@ -41,13 +42,16 @@
   classDef = cl;
   classLoader = JCL;
   delegatee = 0;
-  baseClass = 0;
+  _baseClass = 0;
+  _funcs = 0;
 }
 
-UserClassPrimitive::UserClassPrimitive(JnjvmClassLoader* JCL, const UTF8* name) {
-  ClassPrimitive* cl = JnjvmSharedLoader::sharedLoader->constructSharedClassPrimitive(name);
+UserClassPrimitive::UserClassPrimitive(JnjvmClassLoader* JCL, const UTF8* name,
+                                       uint32 nb) {
+  ClassPrimitive* cl = 
+    JnjvmSharedLoader::sharedLoader->constructSharedClassPrimitive(name, nb);
   if (!cl) {
-    cl = new ClassPrimitive(JCL, name);
+    cl = new ClassPrimitive(JCL, name, nb);
   }
   classDef = cl;
   classLoader = JCL;
@@ -81,7 +85,7 @@
             def->acquire();
             def->status = prepared;
             status = prepared;
-            def->classLoader->TheModule->resolveVirtualClass(cl);
+            def->classLoader->TheModule->resolveVirtualClass(def);
             def->status = resolved;
             status = resolved;
             classDef->broadcastClass();
@@ -107,3 +111,84 @@
     }
   }
 }
+
+UserConstantPool* UserClass::getCtpCache() {
+  fprintf(stderr, "implement me");
+  abort();
+  return 0;
+}
+
+UserConstantPool* UserClass::getConstantPool() {
+  fprintf(stderr, "implement me");
+  abort();
+  return 0;
+}
+
+UserClass* UserCommonClass::lookupClassFromMethod(JavaMethod* meth) {
+  fprintf(stderr, "implement me");
+  abort();
+  return 0;
+}
+
+UserCommonClass* UserCommonClass::getUserClass(CommonClass* cl) {
+  fprintf(stderr, "implement me");
+  abort();
+  return 0;
+}
+
+UserCommonClass* UserConstantPool::loadClass(uint32 index) {
+  fprintf(stderr, "implement me");
+  abort();
+  return 0;
+}
+
+void UserConstantPool::resolveMethod(uint32 index, UserCommonClass*& cl,
+                                     const UTF8*& utf8, Signdef*& sign) {
+  fprintf(stderr, "implement me");
+  abort();
+}
+  
+void UserConstantPool::resolveField(uint32 index, UserCommonClass*& cl,
+                                    const UTF8*& utf8, Typedef*& sign) {
+  fprintf(stderr, "implement me");
+  abort();
+}
+
+const UTF8* UserConstantPool::UTF8AtForString(uint32 entry) {
+  fprintf(stderr, "implement me");
+  abort();
+}
+
+AssessorDesc* UserClassArray::funcs() {
+  fprintf(stderr, "implement me");
+  abort();
+  return 0;
+}
+
+
+UserClassPrimitive* AssessorDesc::getPrimitiveClass() const {
+  fprintf(stderr, "implement me");
+  abort();
+  return 0;
+}
+
+UserClassArray* AssessorDesc::getArrayClass() const {
+  fprintf(stderr, "implement me");
+  abort();
+  return 0;
+}
+
+Class::Class(JnjvmClassLoader*, const UTF8*, ArrayUInt8*) {
+  fprintf(stderr, "implement me");
+  abort();
+}
+
+ClassPrimitive::ClassPrimitive(JnjvmClassLoader*, const UTF8*, uint32) {
+  fprintf(stderr, "implement me");
+  abort();
+}
+
+ClassArray::ClassArray(JnjvmClassLoader*, const UTF8*) {
+  fprintf(stderr, "implement me");
+  abort();
+}

Modified: vmkit/branches/isolate/lib/JnJVM/Isolate/IsolateCommonClass.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/Isolate/IsolateCommonClass.h?rev=55527&r1=55526&r2=55527&view=diff

==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/Isolate/IsolateCommonClass.h (original)
+++ vmkit/branches/isolate/lib/JnJVM/Isolate/IsolateCommonClass.h Fri Aug 29 01:13:39 2008
@@ -7,6 +7,10 @@
 //
 //===----------------------------------------------------------------------===//
 
+#ifndef JNJVM_JAVA_CLASS_H
+#error "Never use <IsolateCommonClass.h> directly, but include <JavaClass.h>"
+#endif
+
 #ifndef ISOLATE_COMMON_CLASS_H
 #define ISOLATE_COMMON_CLASS_H
 
@@ -81,8 +85,6 @@
   UserClass* super;
   std::vector<UserClass*> interfaces;
 
-  virtual void TRACER;
-  
   bool inheritName(const UTF8* Tname);
   bool isOfTypeName(const UTF8* name);
   bool isAssignableFrom(UserCommonClass* cl);
@@ -201,7 +203,6 @@
     return classDef->constructField(name, type, access);
   }
 
-  UserConstantPool* getCtpCache();
 
   UserClass* lookupClassFromMethod(JavaMethod* meth);
   UserCommonClass* getUserClass(CommonClass* cl);
@@ -254,6 +255,7 @@
     return &classDef->interfacesUTF8;
   }
   
+  UserCommonClass();
 };
 
 class UserClass : public UserCommonClass {
@@ -264,7 +266,8 @@
   virtual void TRACER;
 
   UserClass(JnjvmClassLoader* JCL, const UTF8* name, ArrayUInt8* bytes);
-  
+  UserClass() {}
+
   JavaObject* doNew(Jnjvm* vm);
   
   std::vector<UserClass*> innerClasses;
@@ -296,6 +299,7 @@
   
   UserConstantPool* ctpInfo;
   UserConstantPool* getConstantPool();
+  UserConstantPool* getCtpCache();
 
   uint64 getStaticSize() {
     return ((Class*)classDef)->getStaticSize();
@@ -327,6 +331,7 @@
 
   virtual void TRACER;
   UserClassArray(JnjvmClassLoader* JCL, const UTF8* name);
+  UserClassArray() {}
   
   void resolveComponent();
 

Modified: vmkit/branches/isolate/lib/JnJVM/Isolate/IsolateSharedLoader.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/Isolate/IsolateSharedLoader.cpp?rev=55527&r1=55526&r2=55527&view=diff

==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/Isolate/IsolateSharedLoader.cpp (original)
+++ vmkit/branches/isolate/lib/JnJVM/Isolate/IsolateSharedLoader.cpp Fri Aug 29 01:13:39 2008
@@ -17,6 +17,8 @@
 
 using namespace jnjvm;
 
+JnjvmSharedLoader* JnjvmSharedLoader::sharedLoader;
+
 JnjvmSharedLoader* JnjvmSharedLoader::createSharedLoader() {
   
   JnjvmSharedLoader* JCL = gc_new(JnjvmSharedLoader)();
@@ -66,13 +68,14 @@
   return res;
 }
 
-ClassPrimitive* JnjvmSharedLoader::constructSharedClassPrimitive(const UTF8* name) {
+ClassPrimitive*
+JnjvmSharedLoader::constructSharedClassPrimitive(const UTF8* name, uint32 nb) {
   nameClasses->lock->lock();
   SharedClassNameMap::iterator End = nameClasses->map.end();
   SharedClassNameMap::iterator I = nameClasses->map.find(name);
   ClassPrimitive* res = 0;
   if (I == End) {
-    res = new ClassPrimitive(this, name);
+    res = new ClassPrimitive(this, name, nb);
     nameClasses->map.insert(std::make_pair(name, res));
   } else {
     res = ((ClassPrimitive*)(I->second));

Modified: vmkit/branches/isolate/lib/JnJVM/Isolate/IsolateSharedLoader.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/Isolate/IsolateSharedLoader.h?rev=55527&r1=55526&r2=55527&view=diff

==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/Isolate/IsolateSharedLoader.h (original)
+++ vmkit/branches/isolate/lib/JnJVM/Isolate/IsolateSharedLoader.h Fri Aug 29 01:13:39 2008
@@ -33,7 +33,8 @@
   /// VT - The virtual table of this class.
   ///
   static VirtualTable* VT;
-
+  
+  virtual void TRACER;
 
   /// constructSharedClass - Create a shared representation of the class.
   /// If two classes have the same name but not the same array of bytes, 
@@ -41,7 +42,7 @@
   ///
   Class* constructSharedClass(const UTF8* name, ArrayUInt8* bytes);
   ClassArray* constructSharedClassArray(const UTF8* name);
-  ClassPrimitive* constructSharedClassPrimitive(const UTF8* name);
+  ClassPrimitive* constructSharedClassPrimitive(const UTF8* name, uint32 nb);
 
   static JnjvmSharedLoader* createSharedLoader();
 

Modified: vmkit/branches/isolate/lib/JnJVM/Isolate/SharedMaps.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/Isolate/SharedMaps.h?rev=55527&r1=55526&r2=55527&view=diff

==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/Isolate/SharedMaps.h (original)
+++ vmkit/branches/isolate/lib/JnJVM/Isolate/SharedMaps.h Fri Aug 29 01:13:39 2008
@@ -9,7 +9,10 @@
 
 #include "LockedMap.h"
 
-using namespace jnjvm;
+#ifndef ISOLATE_JNJVM_SHARED_MAPS_H
+#define ISOLATE_JNJVM_SHARED_MAPS_H
+
+namespace jnjvm {
 
 
 struct ltarray {
@@ -56,3 +59,7 @@
   virtual void TRACER;
 
 };
+
+} // end namespace jnjvm
+
+#endif //ISOLATE_JNJVM_SHARED_MAPS_H

Modified: vmkit/branches/isolate/lib/JnJVM/LLVMRuntime/runtime-isolate.ll
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/LLVMRuntime/runtime-isolate.ll?rev=55527&r1=55526&r2=55527&view=diff

==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/LLVMRuntime/runtime-isolate.ll (original)
+++ vmkit/branches/isolate/lib/JnJVM/LLVMRuntime/runtime-isolate.ll Fri Aug 29 01:13:39 2008
@@ -16,8 +16,8 @@
 ;;; constant call because the cache node never changes.
 declare i8** @getCtpCacheNode(%CacheNode*) readnone
 
-;;; getCtpCacheNode - Get the constant pool cache of a cache node. This is a
-;;; constant call because the cache node never changes.
+;;; getCtpCacheNode - Get the constant pool cache of a class. This is a
+;;; constant call because the constant pool never changes.
 declare i8** @getCtpClass(%JavaClass*) readnone
 
 ;;; getJnjvmExceptionClass - Get the exception user class for the given

Modified: vmkit/branches/isolate/lib/JnJVM/Makefile
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/Makefile?rev=55527&r1=55526&r2=55527&view=diff

==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/Makefile (original)
+++ vmkit/branches/isolate/lib/JnJVM/Makefile Fri Aug 29 01:13:39 2008
@@ -10,5 +10,13 @@
 
 DIRS = LLVMRuntime VMCore Classpath
 
+include $(LEVEL)/Makefile.config
+
+ifeq ($(ISOLATE_BUILD), 1) 
+    DIRS += Isolate
+endif
+
+
+
 include $(LEVEL)/Makefile.common
 

Modified: vmkit/branches/isolate/lib/JnJVM/VMCore/JavaClass.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/VMCore/JavaClass.cpp?rev=55527&r1=55526&r2=55527&view=diff

==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/VMCore/JavaClass.cpp (original)
+++ vmkit/branches/isolate/lib/JnJVM/VMCore/JavaClass.cpp Fri Aug 29 01:13:39 2008
@@ -279,7 +279,7 @@
     UserCommonClass* cl = loader->loadName(componentName, false, true);
     return cl->classLoader;
   } else {
-    return JnjvmClassLoader::bootstrapLoader;
+    return JavaThread::get()->isolate->bootstrapLoader;
   }
 }
 
@@ -721,6 +721,11 @@
     }
   }
 }
+#else
+void CommonClass::resolveClass() {
+  assert(status >= resolved && 
+         "Asking to resolve a not resolved-class in a isolate environment");
+}
 #endif
 
 void UserClass::resolveInnerOuterClasses() {

Modified: vmkit/branches/isolate/lib/JnJVM/VMCore/JavaConstantPool.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/VMCore/JavaConstantPool.cpp?rev=55527&r1=55526&r2=55527&view=diff

==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/VMCore/JavaConstantPool.cpp (original)
+++ vmkit/branches/isolate/lib/JnJVM/VMCore/JavaConstantPool.cpp Fri Aug 29 01:13:39 2008
@@ -265,9 +265,9 @@
   else return UTF8At(ctpDef[index]);
 }
 
-#ifndef MULTIPLE_VM
 CommonClass* JavaConstantPool::loadClass(uint32 index) {
   CommonClass* temp = isClassLoaded(index);
+#ifndef MULTIPLE_VM
   if (!temp) {
     JnjvmClassLoader* loader = classDef->classLoader;
     const UTF8* name = UTF8At(ctpDef[index]);
@@ -280,21 +280,24 @@
     }
     ctpRes[index] = temp;
   }
+#endif
   return temp;
 }
 
 CommonClass* JavaConstantPool::getMethodClassIfLoaded(uint32 index) {
   CommonClass* temp = isClassLoaded(index);
+#ifndef MULTIPLE_VM
   if (!temp) {
     JnjvmClassLoader* loader = classDef->classLoader;
+    assert(loader && "Class has no loader?");
     const UTF8* name = UTF8At(ctpDef[index]);
     temp = loader->lookupClass(name);
     if (!temp) 
       temp = JnjvmClassLoader::bootstrapLoader->lookupClass(name);
   }
+#endif
   return temp;
 }
-#endif
 
 Typedef* JavaConstantPool::resolveNameAndType(uint32 index) {
   void* res = ctpRes[index];
@@ -423,7 +426,7 @@
   return sign;
 }
 
-void JavaConstantPool::resolveMethod(uint32 index, UserCommonClass*& cl,
+void JavaConstantPool::resolveMethod(uint32 index, CommonClass*& cl,
                                      const UTF8*& utf8, Signdef*& sign) {
   sint32 entry = ctpDef[index];
   sint32 ntIndex = entry & 0xFFFF;
@@ -434,7 +437,7 @@
   cl->resolveClass();
 }
   
-void JavaConstantPool::resolveField(uint32 index, UserCommonClass*& cl,
+void JavaConstantPool::resolveField(uint32 index, CommonClass*& cl,
                                     const UTF8*& utf8, Typedef*& sign) {
   sint32 entry = ctpDef[index];
   sint32 ntIndex = entry & 0xFFFF;

Modified: vmkit/branches/isolate/lib/JnJVM/VMCore/JavaConstantPool.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/VMCore/JavaConstantPool.h?rev=55527&r1=55526&r2=55527&view=diff

==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/VMCore/JavaConstantPool.h (original)
+++ vmkit/branches/isolate/lib/JnJVM/VMCore/JavaConstantPool.h Fri Aug 29 01:13:39 2008
@@ -27,7 +27,6 @@
 class Reader;
 class Signdef;
 class Typedef;
-class UserCommonClass;
 class UTF8;
 
 
@@ -235,14 +234,14 @@
   /// perform class loading. This function is called just in time, ie when
   /// the method call is actually made and not yet resolved.
   ///
-  void resolveMethod(uint32 index, UserCommonClass*& cl,
+  void resolveMethod(uint32 index, CommonClass*& cl,
                      const UTF8*& utf8, Signdef*& sign);
   
   /// resolveField - Resolve the class and signature of the field. May
   /// perform class loading. This function is called just in time, ie when
   /// the field is accessed and not yet resolved.
   ///
-  void resolveField(uint32 index, UserCommonClass*& cl, const UTF8*& utf8,
+  void resolveField(uint32 index, CommonClass*& cl, const UTF8*& utf8,
                     Typedef*& sign);
   
   /// loadClass - Loads the class and returns it. This is called just in time, 
@@ -251,7 +250,7 @@
   /// MULTIANEWARRAY. This function is also called by the classpath for
   /// loading exception classes referenced by a method.
   ///
-  UserCommonClass* loadClass(uint32 index);
+  CommonClass* loadClass(uint32 index);
 
   /// JavaConstantPool - Default constructor.
   ///

Modified: vmkit/branches/isolate/lib/JnJVM/VMCore/JavaInitialise.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/VMCore/JavaInitialise.cpp?rev=55527&r1=55526&r2=55527&view=diff

==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/VMCore/JavaInitialise.cpp (original)
+++ vmkit/branches/isolate/lib/JnJVM/VMCore/JavaInitialise.cpp Fri Aug 29 01:13:39 2008
@@ -32,6 +32,11 @@
 #include "ServiceDomain.h"
 #endif
 
+#ifdef MULTIPLE_VM
+#include "SharedMaps.h"
+#include "IsolateSharedLoader.h"
+#endif
+
 using namespace jnjvm;
 
 static void initialiseVT() {
@@ -50,6 +55,13 @@
 #ifdef SERVICE_VM
   INIT(ServiceDomain);
 #endif
+#ifdef MULTIPLE_VM
+  INIT(JnjvmSharedLoader);
+  INIT(SharedClassByteMap);
+  INIT(SharedClassNameMap);
+  INIT(UserClass);
+  INIT(UserClassArray);
+#endif
 #undef INIT
 
 #define INIT(X) { \
@@ -65,9 +77,9 @@
 #undef INIT
 }
 
-static void initialiseStatics() {
+void Jnjvm::initialiseStatics() {
   
-  JnjvmBootstrapLoader* JCL = JnjvmClassLoader::bootstrapLoader = 
+  JnjvmBootstrapLoader* JCL = bootstrapLoader = 
     JnjvmBootstrapLoader::createBootstrapLoader();
   
   // Array initialization
@@ -170,10 +182,15 @@
 }
 
 void mvm::VirtualMachine::initialiseJVM() {
+#ifndef MULTIPLE_VM
   if (!JnjvmClassLoader::bootstrapLoader) {
     initialiseVT();
-    initialiseStatics(); 
+    Jnjvm::initialiseStatics();
+    JnjvmClassLoader::bootstrapLoader = Jnjvm::bootstrapLoader;
   }
+#else
+  initialiseVT(); 
+#endif
 }
 
 void Jnjvm::runApplication(int argc, char** argv) {

Modified: vmkit/branches/isolate/lib/JnJVM/VMCore/JavaJIT.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/VMCore/JavaJIT.cpp?rev=55527&r1=55526&r2=55527&view=diff

==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/VMCore/JavaJIT.cpp (original)
+++ vmkit/branches/isolate/lib/JnJVM/VMCore/JavaJIT.cpp Fri Aug 29 01:13:39 2008
@@ -390,14 +390,26 @@
   currentBlock = EndUnlock;
 }
 
+#ifdef MULTIPLE_VM
+Value* JavaJIT::getStaticInstanceCtp() {
+  /// get the -1 offset of the ctp
+  fprintf(stderr, "implement me");
+  abort();
+}
+#endif
+
 void JavaJIT::beginSynchronize() {
   Value* obj = 0;
   if (isVirtual(compilingMethod->access)) {
     obj = llvmFunction->arg_begin();
   } else {
+#ifndef MULTIPLE_VM
     LLVMClassInfo* LCI = 
       (LLVMClassInfo*)module->getClassInfo(compilingClass);
     obj = LCI->getStaticVar(this);
+#else
+    obj = getStaticInstanceCtp();
+#endif
   }
 #ifndef SERVICE_VM
   monitorEnter(obj);
@@ -417,9 +429,13 @@
   if (isVirtual(compilingMethod->access)) {
     obj = llvmFunction->arg_begin();
   } else {
+#ifndef MULTIPLE_VM
     LLVMClassInfo* LCI = 
       (LLVMClassInfo*)module->getClassInfo(compilingClass);
     obj = LCI->getStaticVar(this);
+#else
+    obj = getStaticInstanceCtp();
+#endif
   }
 #ifndef SERVICE_VM
   monitorExit(obj);
@@ -850,8 +866,12 @@
     if (isVirtual(compilingMethod->access)) {
       argsSync.push_back(llvmFunction->arg_begin());
     } else {
+#ifndef MULTIPLE_VM
       LLVMClassInfo* LCI = (LLVMClassInfo*)module->getClassInfo(compilingClass);
       Value* arg = LCI->getStaticVar(this);
+#else
+      Value* arg = getStaticInstanceCtp();
+#endif
       argsSync.push_back(arg);
     }
     llvm::CallInst::Create(JnjvmModule::ReleaseObjectFunction, argsSync.begin(), argsSync.end(),

Modified: vmkit/branches/isolate/lib/JnJVM/VMCore/JavaJIT.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/VMCore/JavaJIT.h?rev=55527&r1=55526&r2=55527&view=diff

==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/VMCore/JavaJIT.h (original)
+++ vmkit/branches/isolate/lib/JnJVM/VMCore/JavaJIT.h Fri Aug 29 01:13:39 2008
@@ -260,6 +260,7 @@
 
 #if defined(MULTIPLE_VM)
   llvm::Value* ctpCache;
+  llvm::Value* getStaticInstanceCtp();
 #endif
 
   static const char* OpcodeNames[256];

Modified: vmkit/branches/isolate/lib/JnJVM/VMCore/JavaUpcalls.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/VMCore/JavaUpcalls.cpp?rev=55527&r1=55526&r2=55527&view=diff

==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/VMCore/JavaUpcalls.cpp (original)
+++ vmkit/branches/isolate/lib/JnJVM/VMCore/JavaUpcalls.cpp Fri Aug 29 01:13:39 2008
@@ -200,7 +200,7 @@
 #endif
 
 void Classpath::createInitialThread(Jnjvm* vm, JavaObject* th) {
-  JnjvmClassLoader* JCL = JnjvmClassLoader::bootstrapLoader;
+  JnjvmClassLoader* JCL = vm->bootstrapLoader;
   JCL->loadName(newVMThread->getName(), true, true);
   newVMThread->initialiseClass(vm);
 
@@ -221,7 +221,7 @@
 }
 
 void Classpath::mapInitialThread(Jnjvm* vm) {
-  JnjvmClassLoader* JCL = JnjvmClassLoader::bootstrapLoader;
+  JnjvmClassLoader* JCL = vm->bootstrapLoader;
   JCL->loadName(newThread->getName(), true, true);
   newThread->initialiseClass(vm);
   JavaObject* th = newThread->doNew(vm);

Modified: vmkit/branches/isolate/lib/JnJVM/VMCore/Jni.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/VMCore/Jni.cpp?rev=55527&r1=55526&r2=55527&view=diff

==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/VMCore/Jni.cpp (original)
+++ vmkit/branches/isolate/lib/JnJVM/VMCore/Jni.cpp Fri Aug 29 01:13:39 2008
@@ -63,16 +63,16 @@
   BEGIN_EXCEPTION
 
   JnjvmClassLoader* loader = 0;
+  Jnjvm* vm = JavaThread::get()->isolate;
   UserClass* currentClass = JavaJIT::getCallingClass();
   if (currentClass) loader = currentClass->classLoader;
-  else loader = JnjvmClassLoader::bootstrapLoader;
+  else loader = vm->bootstrapLoader;
 
   const UTF8* utf8 = loader->asciizConstructUTF8(asciiz);
   sint32 len = utf8->size;
   
 
   UserCommonClass* cl = loader->lookupClassFromUTF8(utf8, 0, len, true, true);
-  Jnjvm* vm = JavaThread::get()->isolate;
   cl->initialiseClass(vm);
   return (jclass)(cl->getClassDelegatee(vm));
   

Modified: vmkit/branches/isolate/lib/JnJVM/VMCore/Jnjvm.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/VMCore/Jnjvm.cpp?rev=55527&r1=55526&r2=55527&view=diff

==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/VMCore/Jnjvm.cpp (original)
+++ vmkit/branches/isolate/lib/JnJVM/VMCore/Jnjvm.cpp Fri Aug 29 01:13:39 2008
@@ -83,6 +83,7 @@
 #ifndef MULTIPLE_VM
 /// If we're not in a multi-vm environment, this can be made static.
 std::vector<void*> Jnjvm::nativeLibs;
+JnjvmBootstrapLoader* Jnjvm::bootstrapLoader;
 #endif
 
 typedef void (*clinit_t)(Jnjvm* vm);
@@ -439,7 +440,7 @@
   sprintf(temp, "%s:%s", vm->classpath, jarFile);
   vm->setClasspath(temp);
   
-  ArrayUInt8* bytes = Reader::openFile(JnjvmClassLoader::bootstrapLoader,
+  ArrayUInt8* bytes = Reader::openFile(vm->bootstrapLoader,
                                        jarFile);
 
   ZipArchive archive(bytes);
@@ -562,7 +563,7 @@
         printInformation();
       } else {
         char* path = &cur[16];
-        JnjvmClassLoader::bootstrapLoader->analyseClasspathEnv(path);
+        vm->bootstrapLoader->analyseClasspathEnv(path);
       }
     } else if (!(strcmp(cur, "-enableassertions"))) {
       nyi();
@@ -649,7 +650,8 @@
     UserClass* cl = upcalls->newClassLoader;
     JavaObject* loader = 
       upcalls->getSystemClassLoader->invokeJavaObjectStatic(this, cl);
-    appClassLoader = JnjvmClassLoader::getJnjvmLoaderFromJavaObject(loader);
+    appClassLoader = JnjvmClassLoader::getJnjvmLoaderFromJavaObject(loader,
+                                                                    this);
   }
   return appClassLoader;
 }
@@ -659,7 +661,7 @@
 }
 
 void Jnjvm::loadBootstrap() {
-  JnjvmClassLoader* loader = JnjvmClassLoader::bootstrapLoader;
+  JnjvmClassLoader* loader = bootstrapLoader;
 #define LOAD_CLASS(cl) \
   cl->resolveClass(); \
   cl->initialiseClass(this);
@@ -834,7 +836,11 @@
   
   isolate->hashStr = new StringMap();
   isolate->globalRefsLock = mvm::Lock::allocNormal();
-  isolate->bootstrapLoader = JnjvmClassLoader::bootstrapLoader;
+
+#ifdef MULTIPLE_VM
+  isolate->initialiseStatics();
+#endif
+  
   isolate->upcalls = isolate->bootstrapLoader->upcalls;
 
 #ifdef MULTIPLE_VM

Modified: vmkit/branches/isolate/lib/JnJVM/VMCore/Jnjvm.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/VMCore/Jnjvm.h?rev=55527&r1=55526&r2=55527&view=diff

==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/VMCore/Jnjvm.h (original)
+++ vmkit/branches/isolate/lib/JnJVM/VMCore/Jnjvm.h Fri Aug 29 01:13:39 2008
@@ -22,6 +22,7 @@
 
 #include "JavaAllocator.h"
 #include "JavaTypes.h"
+#include "JnjvmConfig.h"
 
 namespace jnjvm {
 
@@ -215,7 +216,7 @@
   /// bootstraLoader - Bootstrap loader for base classes of this virtual
   /// machine.
   ///
-  JnjvmBootstrapLoader* bootstrapLoader;
+  ISOLATE_STATIC JnjvmBootstrapLoader* bootstrapLoader;
 
   /// upcalls - Upcalls to call Java methods and access Java fields.
   ///
@@ -325,6 +326,11 @@
   void setClasspath(char* cp) {
     classpath = cp;
   }
+  
+  /// initialiseStatics - Initializes the isolate. The function initialize
+  /// static variables in a single environment.
+  ///
+  ISOLATE_STATIC void initialiseStatics();
 
   /// allocateIsolate - Allocates a new JVM.
   ///

Modified: vmkit/branches/isolate/lib/JnJVM/VMCore/JnjvmClassLoader.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/VMCore/JnjvmClassLoader.cpp?rev=55527&r1=55526&r2=55527&view=diff

==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/VMCore/JnjvmClassLoader.cpp (original)
+++ vmkit/branches/isolate/lib/JnJVM/VMCore/JnjvmClassLoader.cpp Fri Aug 29 01:13:39 2008
@@ -302,17 +302,17 @@
 }
 
 
-JnjvmClassLoader* JnjvmClassLoader::getJnjvmLoaderFromJavaObject(JavaObject* loader) {
+JnjvmClassLoader* JnjvmClassLoader::getJnjvmLoaderFromJavaObject(JavaObject* loader, Jnjvm* vm) {
   
   if (loader == 0)
-    return bootstrapLoader;
+    return vm->bootstrapLoader;
   
-  Classpath* upcalls = bootstrapLoader->upcalls;
+  Classpath* upcalls = vm->bootstrapLoader->upcalls;
   JnjvmClassLoader* JCL = 
     (JnjvmClassLoader*)(upcalls->vmdataClassLoader->getObjectField(loader));
   
   if (!JCL) {
-    JCL = gc_new(JnjvmClassLoader)(*bootstrapLoader, loader, JavaThread::get()->isolate);
+    JCL = gc_new(JnjvmClassLoader)(*vm->bootstrapLoader, loader, JavaThread::get()->isolate);
     (upcalls->vmdataClassLoader->setObjectField(loader, (JavaObject*)JCL));
   }
 

Modified: vmkit/branches/isolate/lib/JnJVM/VMCore/JnjvmClassLoader.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/VMCore/JnjvmClassLoader.h?rev=55527&r1=55526&r2=55527&view=diff

==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/VMCore/JnjvmClassLoader.h (original)
+++ vmkit/branches/isolate/lib/JnJVM/VMCore/JnjvmClassLoader.h Fri Aug 29 01:13:39 2008
@@ -126,7 +126,7 @@
   /// getJnjvmLoaderFromJavaObject - Return the Jnjvm runtime representation
   /// of the given class loader.
   ///
-  static JnjvmClassLoader* getJnjvmLoaderFromJavaObject(JavaObject*);
+  static JnjvmClassLoader* getJnjvmLoaderFromJavaObject(JavaObject*, Jnjvm *vm);
   
   /// getJavaClassLoader - Return the Java representation of this class loader.
   ///
@@ -185,7 +185,7 @@
   /// bootstrapLoader - The bootstrap loader of the JVM. Loads the base
   /// classes.
   ///
-  static JnjvmBootstrapLoader* bootstrapLoader;
+  ISOLATE_STATIC JnjvmBootstrapLoader* bootstrapLoader;
   
   /// ~JnjvmClassLoader - Destroy the loader. Depending on the JVM
   /// configuration, this may destroy the tables, JIT module and

Modified: vmkit/branches/isolate/lib/JnJVM/VMCore/JnjvmModuleProvider.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/VMCore/JnjvmModuleProvider.cpp?rev=55527&r1=55526&r2=55527&view=diff

==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/VMCore/JnjvmModuleProvider.cpp (original)
+++ vmkit/branches/isolate/lib/JnJVM/VMCore/JnjvmModuleProvider.cpp Fri Aug 29 01:13:39 2008
@@ -31,7 +31,7 @@
 
   bool isStatic = ctpInfo->isAStaticCall(index);
 
-  UserCommonClass* cl = 0;
+  CommonClass* cl = 0;
   const UTF8* utf8 = 0;
   Signdef* sign = 0;
 
@@ -104,7 +104,9 @@
         "The method's offset is greater than the virtual table size");
     ((void**)meth->classDef->virtualVT)[offset] = val;
   } else {
+#ifndef MULTIPLE_VM
     meth->classDef->initialiseClass(JavaThread::get()->isolate);
+#endif
   }
 
   return false;

Modified: vmkit/branches/isolate/lib/JnJVM/VMCore/NativeUtil.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/VMCore/NativeUtil.cpp?rev=55527&r1=55526&r2=55527&view=diff

==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/VMCore/NativeUtil.cpp (original)
+++ vmkit/branches/isolate/lib/JnJVM/VMCore/NativeUtil.cpp Fri Aug 29 01:13:39 2008
@@ -401,15 +401,14 @@
 
 }
 
-ArrayObject* NativeUtil::getExceptionTypes(JavaMethod* meth) {
+ArrayObject* NativeUtil::getExceptionTypes(UserClass* cl, JavaMethod* meth) {
   Attribut* exceptionAtt = meth->lookupAttribut(Attribut::exceptionsAttribut);
   Jnjvm* vm = JavaThread::get()->isolate;
   if (exceptionAtt == 0) {
     return ArrayObject::acons(0, vm->upcalls->classArrayClass,
                               &(JavaThread::get()->isolate->allocator));
   } else {
-    Class* cl = meth->classDef;
-    JavaConstantPool* ctp = cl->getConstantPool();
+    UserConstantPool* ctp = cl->getConstantPool();
     Reader reader(exceptionAtt, cl->getBytes());
     uint16 nbe = reader.readU2();
     ArrayObject* res = ArrayObject::acons(nbe, vm->upcalls->classArrayClass,

Modified: vmkit/branches/isolate/lib/JnJVM/VMCore/NativeUtil.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/VMCore/NativeUtil.h?rev=55527&r1=55526&r2=55527&view=diff

==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/VMCore/NativeUtil.h (original)
+++ vmkit/branches/isolate/lib/JnJVM/VMCore/NativeUtil.h Fri Aug 29 01:13:39 2008
@@ -35,7 +35,7 @@
 
   static JavaObject* getClassType(JnjvmClassLoader* loader, Typedef* type);
   static ArrayObject* getParameterTypes(JnjvmClassLoader* loader, JavaMethod* meth);
-  static ArrayObject* getExceptionTypes(JavaMethod* meth);
+  static ArrayObject* getExceptionTypes(UserClass* cl, JavaMethod* meth);
 
 };
 

Modified: vmkit/branches/isolate/lib/JnJVM/VMCore/VirtualTables.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/VMCore/VirtualTables.cpp?rev=55527&r1=55526&r2=55527&view=diff

==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/VMCore/VirtualTables.cpp (original)
+++ vmkit/branches/isolate/lib/JnJVM/VMCore/VirtualTables.cpp Fri Aug 29 01:13:39 2008
@@ -20,6 +20,10 @@
 #ifdef SERVICE_VM
 #include "ServiceDomain.h"
 #endif
+#ifdef MULTIPLE_VM
+#include "SharedMaps.h"
+#include "IsolateSharedLoader.h"
+#endif
 
 using namespace jnjvm;
 
@@ -35,6 +39,13 @@
   INIT(ClassMap);
   INIT(JnjvmBootstrapLoader);
   INIT(JnjvmClassLoader);
+#ifdef MULTIPLE_VM
+  INIT(JnjvmSharedLoader);
+  INIT(SharedClassByteMap);
+  INIT(SharedClassNameMap);
+  INIT(UserClass);
+  INIT(UserClassArray);
+#endif
 #ifdef SERVICE_VM
   INIT(ServiceDomain);
 #endif
@@ -98,7 +109,7 @@
   appClassLoader->MARK_AND_TRACE;
   TRACE_VECTOR(JavaObject*, gc_allocator, globalRefs);
   bootstrapThread->MARK_AND_TRACE;
-  JnjvmClassLoader::bootstrapLoader->MARK_AND_TRACE; 
+  bootstrapLoader->MARK_AND_TRACE; 
 }
 
 void ClassMap::TRACER {
@@ -137,6 +148,38 @@
 #endif
 }
 
+#ifdef MULTIPLE_VM
+void UserClass::TRACER {
+  classLoader->MARK_AND_TRACE;
+  delegatee->MARK_AND_TRACE;
+  staticInstance->MARK_AND_TRACE;
+}
+
+void UserClassPrimitive::TRACER {
+  classLoader->MARK_AND_TRACE;
+  delegatee->MARK_AND_TRACE;
+}
+
+void UserClassArray::TRACER {
+  classLoader->MARK_AND_TRACE;
+  delegatee->MARK_AND_TRACE;
+}
+
+void SharedClassByteMap::TRACER {
+  for (iterator i = map.begin(), e = map.end(); i!= e; ++i) {
+    i->first->MARK_AND_TRACE;
+  }
+}
+
+void SharedClassNameMap::TRACER {
+}
+
+void JnjvmSharedLoader::TRACER {
+  byteClasses->MARK_AND_TRACE;
+  nameClasses->MARK_AND_TRACE;
+}
+#endif
+
 #ifdef SERVICE_VM
 void ServiceDomain::TRACER {
   JavaIsolate::PARENT_TRACER;





More information about the vmkit-commits mailing list