[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