[vmkit-commits] [vmkit] r55048 - in /vmkit/trunk/lib/JnJVM: Classpath/ClasspathVMClassLoader.cpp.inc VMCore/JavaClass.cpp VMCore/JavaClass.h VMCore/Jnjvm.cpp VMCore/Jnjvm.h VMCore/JnjvmClassLoader.cpp VMCore/VirtualTables.cpp

Nicolas Geoffray nicolas.geoffray at lip6.fr
Wed Aug 20 06:46:53 PDT 2008


Author: geoffray
Date: Wed Aug 20 08:46:53 2008
New Revision: 55048

URL: http://llvm.org/viewvc/llvm-project?rev=55048&view=rev
Log:
Give the protection domain as parameter to getClassDelegatee, by default
set to 0. Also let the bootstrap class loader trace the delegatee of primitive
classes.


Modified:
    vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMClassLoader.cpp.inc
    vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp
    vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h
    vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp
    vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.h
    vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp
    vmkit/trunk/lib/JnJVM/VMCore/VirtualTables.cpp

Modified: vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMClassLoader.cpp.inc
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMClassLoader.cpp.inc?rev=55048&r1=55047&r2=55048&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMClassLoader.cpp.inc (original)
+++ vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMClassLoader.cpp.inc Wed Aug 20 08:46:53 2008
@@ -99,15 +99,10 @@
     if (cl->status == hashed) {
       cl->bytes = (ArrayUInt8*)bytes;
       cl->status = loaded;
-#ifndef MULTIPLE_VM
-      cl->delegatee = (JavaObject*)pd;
-#else
-      JavaThread::get()->isolate->delegatees->hash(cl, (JavaObject*)pd);
-#endif
     }
     cl->release();
   }
-  return (jclass)(cl->getClassDelegatee());
+  return (jclass)(cl->getClassDelegatee((JavaObject*)pd));
 }
 
 JNIEXPORT void JNICALL Java_java_lang_VMClassLoader_resolveClass(

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp Wed Aug 20 08:46:53 2008
@@ -524,8 +524,8 @@
   
 }
 
-JavaObject* CommonClass::getClassDelegatee() {
-  return JavaThread::get()->isolate->getClassDelegatee(this);
+JavaObject* CommonClass::getClassDelegatee(JavaObject* pd) {
+  return JavaThread::get()->isolate->getClassDelegatee(this, pd);
 }
 
 void CommonClass::resolveClass(bool doClinit) {

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h Wed Aug 20 08:46:53 2008
@@ -378,7 +378,7 @@
   /// getClassDelegatee - Return the java/lang/Class representation of this
   /// class.
   ///
-  JavaObject* getClassDelegatee();
+  JavaObject* getClassDelegatee(JavaObject* pd = 0);
 
   /// initialiseClass - If the class has a static initializer and has not been
   /// initialized yet, call it.

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp Wed Aug 20 08:46:53 2008
@@ -321,37 +321,35 @@
 }
 
 #ifndef MULTIPLE_VM
-JavaObject* Jnjvm::getClassDelegatee(CommonClass* cl) {
+JavaObject* Jnjvm::getClassDelegatee(CommonClass* cl, JavaObject* pd) {
   cl->acquire();
   if (!(cl->delegatee)) {
     JavaObject* delegatee = Classpath::newClass->doNew(this);
     cl->delegatee = delegatee;
-    Classpath::initClass->invokeIntSpecial(this, delegatee, cl);
-  } else if (cl->delegatee->classOf != Classpath::newClass) {
-    JavaObject* pd = cl->delegatee;
-    JavaObject* delegatee = Classpath::newClass->doNew(this);
-    cl->delegatee = delegatee;;
-    Classpath::initClassWithProtectionDomain->invokeIntSpecial(this, delegatee,
-                                                               cl, pd);
+    if (!pd) {
+      Classpath::initClass->invokeIntSpecial(this, delegatee, cl);
+    } else {
+      Classpath::initClassWithProtectionDomain->invokeIntSpecial(this,
+                                                                 delegatee,
+                                                                 cl, pd);
+    }
   }
   cl->release();
   return cl->delegatee;
 }
 #else
-JavaObject* Jnjvm::getClassDelegatee(CommonClass* cl) {
+JavaObject* Jnjvm::getClassDelegatee(CommonClass* cl, JavaObject* pd) {
   cl->acquire();
   JavaObject* val = delegatees->lookup(cl);
   if (!val) {
     val = Classpath::newClass->doNew(this);
     delegatees->hash(cl, val);
-    Classpath::initClass->invokeIntSpecial(this, val, cl);
-  } else if (val->classOf != Classpath::newClass) {
-    JavaObject* pd = val;
-    val = Classpath::newClass->doNew(this);
-    delegatees->remove(cl);
-    delegatees->hash(cl, val);
-    Classpath::initClassWithProtectionDomain->invokeIntSpecial(this, val, cl,
-                                                               pd);
+    if (!pd) {
+      Classpath::initClass->invokeIntSpecial(this, val, cl);
+    } else {
+      Classpath::initClassWithProtectionDomain->invokeIntSpecial(this, val, cl,
+                                                                 pd);
+    }
   }
   cl->release();
   return val;

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.h Wed Aug 20 08:46:53 2008
@@ -278,14 +278,15 @@
   /// statics - The static instances of classes, in a multi-vm environment.
   ///
   StaticInstanceMap* statics;
-  
+
+private:
   /// delegatees - The java/lang/Class equivalents of internal classes. This is
   /// also in a multi-vm environment.
   ///
   DelegateeMap* delegatees;
 #endif
   
-  
+public:
   /// Exceptions - These are the only exceptions VMKit will make.
   ///
   void arrayStoreException();
@@ -329,7 +330,7 @@
   /// getClassDelegatee - Get the java/lang/Class object representing the
   /// internal class.
   ///
-  JavaObject* getClassDelegatee(CommonClass*);
+  JavaObject* getClassDelegatee(CommonClass* cl, JavaObject* pd = 0);
 
   /// ~Jnjvm - Destroy the JVM.
   ///

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp Wed Aug 20 08:46:53 2008
@@ -26,6 +26,10 @@
 
 JnjvmBootstrapLoader* JnjvmClassLoader::bootstrapLoader = 0;
 
+#ifdef MULTIPLE_VM
+JnjvmClassLoader* JnjvmClassLoader::sharedLoader = 0;
+#endif
+
 extern const char* GNUClasspathGlibj;
 extern const char* GNUClasspathLibs;
 

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/VirtualTables.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/VirtualTables.cpp Wed Aug 20 08:46:53 2008
@@ -138,6 +138,21 @@
        e = bootArchives.end(); i != e; ++i) {
     (*i)->bytes->MARK_AND_TRACE;
   }
+#ifndef MULTIPLE_VM
+#define TRACE_DELEGATEE(prim) \
+  prim->classType->delegatee->MARK_AND_TRACE
+
+  TRACE_DELEGATEE(AssessorDesc::dVoid);
+  TRACE_DELEGATEE(AssessorDesc::dBool);
+  TRACE_DELEGATEE(AssessorDesc::dByte);
+  TRACE_DELEGATEE(AssessorDesc::dChar);
+  TRACE_DELEGATEE(AssessorDesc::dShort);
+  TRACE_DELEGATEE(AssessorDesc::dInt);
+  TRACE_DELEGATEE(AssessorDesc::dFloat);
+  TRACE_DELEGATEE(AssessorDesc::dLong);
+  TRACE_DELEGATEE(AssessorDesc::dDouble);
+#undef TRACE_DELEGATEE
+#endif
 }
 
 #ifdef SERVICE_VM





More information about the vmkit-commits mailing list