[vmkit-commits] [vmkit] r145476 - in /vmkit/trunk/lib/j3/ClassLib/OpenJDK: ClasspathReflect.h JavaUpcalls.cpp JavaUpcalls.h

Will Dietz wdietz2 at illinois.edu
Tue Nov 29 19:55:45 PST 2011


Author: wdietz2
Date: Tue Nov 29 21:55:45 2011
New Revision: 145476

URL: http://llvm.org/viewvc/llvm-project?rev=145476&view=rev
Log:
OpenJDK: Put references on special NullQueue if no queue specified.

Modified:
    vmkit/trunk/lib/j3/ClassLib/OpenJDK/ClasspathReflect.h
    vmkit/trunk/lib/j3/ClassLib/OpenJDK/JavaUpcalls.cpp
    vmkit/trunk/lib/j3/ClassLib/OpenJDK/JavaUpcalls.h

Modified: vmkit/trunk/lib/j3/ClassLib/OpenJDK/ClasspathReflect.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/OpenJDK/ClasspathReflect.h?rev=145476&r1=145475&r2=145476&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/ClassLib/OpenJDK/ClasspathReflect.h (original)
+++ vmkit/trunk/lib/j3/ClassLib/OpenJDK/ClasspathReflect.h Tue Nov 29 21:55:45 2011
@@ -16,6 +16,8 @@
 #include "JavaObject.h"
 #include "JavaThread.h"
 #include "JavaString.h"
+#include "Jnjvm.h"
+#include "JavaUpcalls.h"
 
 extern "C" j3::JavaObject* internalFillInStackTrace(j3::JavaObject*);
 namespace j3 {
@@ -305,6 +307,11 @@
     llvm_gcroot(q, 0);
     vmkit::Collector::objectReferenceWriteBarrier(
         (gc*)self, (gc**)&(self->referent), (gc*)r);
+    if (!q) {
+      JavaField * field = JavaThread::get()->getJVM()->upcalls->NullRefQueue;
+      q = field->getStaticObjectField();
+    }
+    assert(q);
     vmkit::Collector::objectReferenceWriteBarrier(
         (gc*)self, (gc**)&(self->queue), (gc*)q);
   }

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=145476&r1=145475&r2=145476&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/ClassLib/OpenJDK/JavaUpcalls.cpp (original)
+++ vmkit/trunk/lib/j3/ClassLib/OpenJDK/JavaUpcalls.cpp Tue Nov 29 21:55:45 2011
@@ -220,6 +220,7 @@
 
 JavaMethod* Classpath::EnqueueReference;
 Class*      Classpath::newReference;
+JavaField*  Classpath::NullRefQueue;
 
 void Classpath::CreateJavaThread(Jnjvm* vm, JavaThread* myth,
                                  const char* thName, JavaObject* Group) {
@@ -850,6 +851,10 @@
     UPCALL_METHOD(loader, "java/lang/ref/Reference",  "enqueue", "()Z",
                   ACC_VIRTUAL);
 
+  NullRefQueue =
+    UPCALL_FIELD(loader, "java/lang/ref/ReferenceQueue",
+        "NULL", "Ljava/lang/ref/ReferenceQueue;", ACC_STATIC);
+
   JavaMethod* initWeakReference =
     UPCALL_METHOD(loader, "java/lang/ref/WeakReference", "<init>",
                   "(Ljava/lang/Object;)V",

Modified: vmkit/trunk/lib/j3/ClassLib/OpenJDK/JavaUpcalls.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/OpenJDK/JavaUpcalls.h?rev=145476&r1=145475&r2=145476&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/ClassLib/OpenJDK/JavaUpcalls.h (original)
+++ vmkit/trunk/lib/j3/ClassLib/OpenJDK/JavaUpcalls.h Tue Nov 29 21:55:45 2011
@@ -258,6 +258,7 @@
 
   ISOLATE_STATIC JavaMethod* EnqueueReference;
   ISOLATE_STATIC Class*      newReference;
+  ISOLATE_STATIC JavaField*  NullRefQueue;
 
   ISOLATE_STATIC UserClass*  EnumClass;
 





More information about the vmkit-commits mailing list