[vmkit-commits] [vmkit] r69281 - in /vmkit/trunk/lib/JnJVM/VMCore: JavaClass.cpp JavaClass.h JnjvmClassLoader.cpp
Nicolas Geoffray
nicolas.geoffray at lip6.fr
Thu Apr 16 03:53:39 PDT 2009
Author: geoffray
Date: Thu Apr 16 05:53:29 2009
New Revision: 69281
URL: http://llvm.org/viewvc/llvm-project?rev=69281&view=rev
Log:
Move resolution of classes to initialiseVT, when java.lang.Object gets
resolved.
Modified:
vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp
vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h
vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp
Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp?rev=69281&r1=69280&r2=69281&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp Thu Apr 16 05:53:29 2009
@@ -739,11 +739,11 @@
// interfaces is not used if super is null.
interfaces = (Class**)
classLoader->allocator.Allocate(nbI * sizeof(Class*));
- nbInterfaces = nbI;
for (int i = 0; i < nbI; i++) {
const UTF8* name = ctpInfo->resolveClassName(reader.readU2());
interfaces[i] = classLoader->loadName(name, false, true);
}
+ nbInterfaces = nbI;
}
@@ -932,7 +932,7 @@
if (!needsInitialisationCheck()) {
setInitializationState(ready);
}
- if (!super) ClassArray::initialiseVT();
+ if (!super) ClassArray::initialiseVT(this);
setOwnerClass(0);
broadcastClass();
release();
@@ -1240,8 +1240,20 @@
}
-void ClassArray::initialiseVT() {
-
+void ClassArray::initialiseVT(Class* javaLangObject) {
+
+ ClassArray::SuperArray = javaLangObject;
+ JnjvmClassLoader* JCL = javaLangObject->classLoader;
+
+ // Initialize interfaces of array classes.
+ ClassArray::InterfacesArray[0] =
+ JCL->loadName(JCL->asciizConstructUTF8("java/lang/Cloneable"),
+ false, false);
+
+ ClassArray::InterfacesArray[1] =
+ JCL->loadName(JCL->asciizConstructUTF8("java/io/Serializable"),
+ false, false);
+
Class* cl = ClassArray::SuperArray;
assert(cl && "Initializing array VT without a super for arrays");
assert(cl->virtualVT->init && "Initializing array VT before JavaObjectVT");
@@ -1275,7 +1287,6 @@
#undef COPY
- JnjvmClassLoader* JCL = cl->classLoader;
// Load array classes that JnJVM internally uses.
upcalls->ArrayOfString =
JCL->constructArray(JCL->asciizConstructUTF8("[Ljava/lang/String;"));
Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h?rev=69281&r1=69280&r2=69281&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h Thu Apr 16 05:53:29 2009
@@ -935,7 +935,7 @@
/// initialiseVT - Initialise the primitive and reference array VT.
/// super is the java/lang/Object class.
///
- static void initialiseVT();
+ static void initialiseVT(Class* javaLangObject);
};
Modified: vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp?rev=69281&r1=69280&r2=69281&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp Thu Apr 16 05:53:29 2009
@@ -77,14 +77,7 @@
upcalls = new(allocator) Classpath();
bootstrapLoader = this;
-
- // Allocate interfaces.
- InterfacesArray =
- (Class**)allocator.Allocate(2 * sizeof(UserClass*));
-
- ClassArray::InterfacesArray =
- (Class**)allocator.Allocate(2 * sizeof(UserClass*));
-
+
// Try to find if we have a pre-compiled rt.jar
if (dlLoad) {
SuperArray = (Class*)dlsym(SELF_HANDLE, "java.lang.Object");
@@ -124,11 +117,17 @@
upcalls->ArrayOfObject =
constructArray(asciizConstructUTF8("[Ljava/lang/Object;"));
+ InterfacesArray = upcalls->ArrayOfObject->interfaces;
+ ClassArray::InterfacesArray = InterfacesArray;
}
}
if (!upcalls->OfChar) {
+ // Allocate interfaces.
+ InterfacesArray = (Class**)allocator.Allocate(2 * sizeof(UserClass*));
+ ClassArray::InterfacesArray = InterfacesArray;
+
// Create the primitive classes.
upcalls->OfChar = UPCALL_PRIMITIVE_CLASS(this, "char", 2);
upcalls->OfBool = UPCALL_PRIMITIVE_CLASS(this, "boolean", 1);
@@ -191,31 +190,7 @@
// hold the .zip file, we call the function after creation of the
// array classes.
analyseClasspathEnv(bootClasspathEnv);
-
-
- // We haven't found a pre-compiled rt.jar, load the root class ourself.
- if (!SuperArray) {
-
- // We can not resolve java.lang.Object yet, because we may not be
- // running in a Java thread, and we may not have a compiler
- // available.
- SuperArray = loadName(asciizConstructUTF8("java/lang/Object"), false,
- false);
- ClassArray::SuperArray = (Class*)SuperArray->getInternal();
-
- }
-
- // Initialize interfaces of array classes.
- InterfacesArray[0] = loadName(asciizConstructUTF8("java/lang/Cloneable"),
- false, false);
- InterfacesArray[1] = loadName(asciizConstructUTF8("java/io/Serializable"),
- false, false);
-
- ClassArray::InterfacesArray[0] = (Class*)InterfacesArray[0]->getInternal();
- ClassArray::InterfacesArray[1] = (Class*)(InterfacesArray[1]->getInternal());
-
-
Attribut::codeAttribut = asciizConstructUTF8("Code");
Attribut::exceptionsAttribut = asciizConstructUTF8("Exceptions");
Attribut::constantAttribut = asciizConstructUTF8("ConstantValue");
More information about the vmkit-commits
mailing list