[vmkit-commits] [vmkit] r143831 - in /vmkit/trunk/lib/J3: ClassLib/OpenJDK/JavaUpcalls.cpp VMCore/JnjvmClassLoader.cpp
Will Dietz
wdietz2 at illinois.edu
Sat Nov 5 14:10:19 PDT 2011
Author: wdietz2
Date: Sat Nov 5 16:10:18 2011
New Revision: 143831
URL: http://llvm.org/viewvc/llvm-project?rev=143831&view=rev
Log:
In OpenJDK, use the 'classes' field of ClassLoader to track VMClassLoader.
Also, don't just check the 'vmdata' field for non-null, since in OJ it will be
initialized to an empty vector. Instead, consider the field uninitialized if
it's either null or of the wrong type.
Modified:
vmkit/trunk/lib/J3/ClassLib/OpenJDK/JavaUpcalls.cpp
vmkit/trunk/lib/J3/VMCore/JnjvmClassLoader.cpp
Modified: vmkit/trunk/lib/J3/ClassLib/OpenJDK/JavaUpcalls.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/ClassLib/OpenJDK/JavaUpcalls.cpp?rev=143831&r1=143830&r2=143831&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/ClassLib/OpenJDK/JavaUpcalls.cpp (original)
+++ vmkit/trunk/lib/J3/ClassLib/OpenJDK/JavaUpcalls.cpp Sat Nov 5 16:10:18 2011
@@ -552,10 +552,9 @@
UPCALL_FIELD(loader, "java/nio/Buffer", "address", "Lgnu/classpath/Pointer;",
ACC_VIRTUAL);
- // TODO: Resolve how to tie a ClassLoader to its internal representation
- //vmdataClassLoader =
- // UPCALL_FIELD(loader, "java/lang/ClassLoader", "vmdata", "Ljava/lang/Object;",
- // ACC_VIRTUAL);
+ vmdataClassLoader =
+ UPCALL_FIELD(loader, "java/lang/ClassLoader", "classes", "Ljava/util/Vector;",
+ ACC_VIRTUAL);
newStackTraceElement =
UPCALL_CLASS(loader, "java/lang/StackTraceElement");
Modified: vmkit/trunk/lib/J3/VMCore/JnjvmClassLoader.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/JnjvmClassLoader.cpp?rev=143831&r1=143830&r2=143831&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/VMCore/JnjvmClassLoader.cpp (original)
+++ vmkit/trunk/lib/J3/VMCore/JnjvmClassLoader.cpp Sat Nov 5 16:10:18 2011
@@ -808,11 +808,14 @@
vmdata =
(VMClassLoader*)(upcalls->vmdataClassLoader->getInstanceObjectField(loader));
- if (vmdata == NULL) {
+ // If the vmdata field isn't set yet, or it's set to something other than
+ // a VMClassLoader (which happens in the OpenJDK port), then initialize
+ // the field now.
+ if (vmdata == NULL || !VMClassLoader::isVMClassLoader(vmdata)) {
JavaObject::acquire(loader);
vmdata =
(VMClassLoader*)(upcalls->vmdataClassLoader->getInstanceObjectField(loader));
- if (!vmdata) {
+ if (!vmdata || !VMClassLoader::isVMClassLoader(vmdata)) {
vmdata = VMClassLoader::allocate();
mvm::BumpPtrAllocator* A = new mvm::BumpPtrAllocator();
JCL = new(*A, "Class loader") JnjvmClassLoader(*A, *vm->bootstrapLoader,
More information about the vmkit-commits
mailing list