[vmkit-commits] [vmkit] r198302 - Implement JVM_FindClassFromClassLoader
Gael Thomas
gael.thomas at lip6.fr
Thu Jan 2 04:37:38 PST 2014
Author: gthomas
Date: Thu Jan 2 06:37:37 2014
New Revision: 198302
URL: http://llvm.org/viewvc/llvm-project?rev=198302&view=rev
Log:
Implement JVM_FindClassFromClassLoader
Modified:
vmkit/branches/mcjit/include/j3/j3.h
vmkit/branches/mcjit/lib/j3/openjdk/j3openjdk.cc
vmkit/branches/mcjit/lib/j3/vm/j3.cc
vmkit/branches/mcjit/lib/j3/vm/j3jni.cc
Modified: vmkit/branches/mcjit/include/j3/j3.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/include/j3/j3.h?rev=198302&r1=198301&r2=198302&view=diff
==============================================================================
--- vmkit/branches/mcjit/include/j3/j3.h (original)
+++ vmkit/branches/mcjit/include/j3/j3.h Thu Jan 2 06:37:37 2014
@@ -123,6 +123,7 @@ namespace j3 {
static JNIEnv* jniEnv();
+ static void classNotFoundException(const vmkit::Name* name) __attribute__((noreturn));
static void noClassDefFoundError(const vmkit::Name* name) __attribute__((noreturn));
static void classFormatError(J3Class* cl, const wchar_t* reason, ...) __attribute__((noreturn));
static void noSuchMethodError(const wchar_t* msg,
Modified: vmkit/branches/mcjit/lib/j3/openjdk/j3openjdk.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/openjdk/j3openjdk.cc?rev=198302&r1=198301&r2=198302&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/openjdk/j3openjdk.cc (original)
+++ vmkit/branches/mcjit/lib/j3/openjdk/j3openjdk.cc Thu Jan 2 06:37:37 2014
@@ -348,11 +348,31 @@ jclass JNICALL JVM_FindClassFromBootLoad
* or NoClassDefFoundError depending on the value of the last
* argument.
*/
-jclass JNICALL JVM_FindClassFromClassLoader(JNIEnv* env, const char *name, jboolean init, jobject loader, jboolean throwError) {
- enterJVM();
- fprintf(stderr, " class loader: %p\n", loader);
- NYI();
+jclass JNICALL JVM_FindClassFromClassLoader(JNIEnv* env, const char *jname, jboolean init, jobject jloader, jboolean throwError) {
+ jclass res;
+ enterJVM();
+ J3* vm = J3Thread::get()->vm();
+ if(jloader)
+ J3::internalError(L"implement me: jloader");
+ J3ClassLoader* loader = J3Thread::get()->vm()->initialClassLoader;
+ const vmkit::Name* name = vm->names()->get(jname);
+ J3Class* cl = loader->loadClass(name);
+ if(!cl) {
+ if(throwError)
+ J3::noClassDefFoundError(name);
+ else
+ J3::classNotFoundException(name);
+ }
+
+ if(init)
+ cl->initialise();
+ else
+ cl->resolve();
+
+ res = cl->javaClass();
+
leaveJVM();
+ return res;
}
/*
Modified: vmkit/branches/mcjit/lib/j3/vm/j3.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/vm/j3.cc?rev=198302&r1=198301&r2=198302&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3.cc Thu Jan 2 06:37:37 2014
@@ -188,6 +188,10 @@ void J3::nullPointerException() {
internalError(L"implement me: null pointer exception");
}
+void J3::classNotFoundException(const vmkit::Name* name) {
+ internalError(L"ClassNotFoundException: %ls", name);
+}
+
void J3::noClassDefFoundError(const vmkit::Name* name) {
internalError(L"NoClassDefFoundError: %ls", name);
}
Modified: vmkit/branches/mcjit/lib/j3/vm/j3jni.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/vm/j3jni.cc?rev=198302&r1=198301&r2=198302&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3jni.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3jni.cc Thu Jan 2 06:37:37 2014
@@ -477,8 +477,7 @@ void JNICALL GetStringUTFRegion(JNIEnv*
for(uint32_t i=0; i<len; i++)
buf[i] = content->getCharAt(start+i);
- //buf[len] = 0;
-
+ buf[len] = 0;
leaveJVM();
}
More information about the vmkit-commits
mailing list