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

Will Dietz wdietz2 at illinois.edu
Fri Dec 30 06:15:58 PST 2011


Author: wdietz2
Date: Fri Dec 30 08:15:58 2011
New Revision: 147374

URL: http://llvm.org/viewvc/llvm-project?rev=147374&view=rev
Log:
Initial work on generating constantpool objects for annotation reflection. (OJ)

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

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=147374&r1=147373&r2=147374&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/ClassLib/OpenJDK/JavaUpcalls.cpp (original)
+++ vmkit/trunk/lib/j3/ClassLib/OpenJDK/JavaUpcalls.cpp Fri Dec 30 08:15:58 2011
@@ -219,6 +219,8 @@
 JavaField* Classpath::methodClass;
 JavaField* Classpath::fieldClass;
 JavaField* Classpath::constructorClass;
+Class*     Classpath::constantPoolClass;
+JavaField* Classpath::constantPoolOop;
 
 JavaMethod* Classpath::EnqueueReference;
 Class*      Classpath::newReference;
@@ -855,6 +857,12 @@
     UPCALL_FIELD(loader, "java/lang/reflect/Constructor", "clazz",
                  "Ljava/lang/Class;", ACC_VIRTUAL);
 
+  constantPoolClass =
+    UPCALL_CLASS(loader, "sun/reflect/ConstantPool");
+  constantPoolOop =
+    UPCALL_FIELD(loader, "sun/reflect/ConstantPool", "constantPoolOop",
+                 "Ljava/lang/Object;", ACC_VIRTUAL);
+
   loader->loadName(loader->asciizConstructUTF8("java/lang/String"),
                                        true, false, NULL);
 
@@ -997,6 +1005,8 @@
   assertionStatusDirectivesClass->resolveClass();
   assertionStatusDirectivesClass->initialiseClass(jvm);
 
+  constantPoolClass->resolveClass();
+  constantPoolClass->initialiseClass(jvm);
 }
 
 

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=147374&r1=147373&r2=147374&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/ClassLib/OpenJDK/JavaUpcalls.h (original)
+++ vmkit/trunk/lib/j3/ClassLib/OpenJDK/JavaUpcalls.h Fri Dec 30 08:15:58 2011
@@ -256,6 +256,8 @@
   ISOLATE_STATIC JavaField* methodClass;
   ISOLATE_STATIC JavaField* fieldClass;
   ISOLATE_STATIC JavaField* constructorClass;
+  ISOLATE_STATIC UserClass* constantPoolClass;
+  ISOLATE_STATIC JavaField* constantPoolOop;
 
   ISOLATE_STATIC JavaMethod* EnqueueReference;
   ISOLATE_STATIC UserClass*  newReference;

Modified: vmkit/trunk/lib/j3/ClassLib/OpenJDK/OpenJDK.inc
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/OpenJDK/OpenJDK.inc?rev=147374&r1=147373&r2=147374&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/ClassLib/OpenJDK/OpenJDK.inc (original)
+++ vmkit/trunk/lib/j3/ClassLib/OpenJDK/OpenJDK.inc Fri Dec 30 08:15:58 2011
@@ -1863,7 +1863,28 @@
 
 JNIEXPORT jobject JNICALL
 JVM_GetClassConstantPool(JNIEnv *env, jclass cls) {
-  NYI();
+  JavaObjectClass * Cl = 0;
+  JavaObject* CP = 0;
+  llvm_gcroot(Cl, 0);
+  llvm_gcroot(CP, 0);
+  BEGIN_JNI_EXCEPTION
+
+  Cl = cls ? *(JavaObjectClass**)cls : 0;
+  verifyNull(Cl);
+
+  Jnjvm* vm = th->getJVM();
+
+  CP = vm->upcalls->constantPoolClass->doNew(vm);
+
+  // Set the constantPoolOop field to point to the Class this
+  // ConstantPool object is supposed to represent the constant pool for.
+  vm->upcalls->constantPoolOop->setInstanceObjectField(CP, Cl);
+
+  RETURN_REF_FROM_JNI(CP, jobject);
+
+  END_JNI_EXCEPTION
+
+  return 0;
 }
 
 JNIEXPORT jint JNICALL JVM_ConstantPoolGetSize





More information about the vmkit-commits mailing list