[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