[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