[vmkit-commits] [vmkit] r199584 - App class loader seems ok.
Gael Thomas
gael.thomas at lip6.fr
Sun Jan 19 03:28:24 PST 2014
Author: gthomas
Date: Sun Jan 19 05:28:24 2014
New Revision: 199584
URL: http://llvm.org/viewvc/llvm-project?rev=199584&view=rev
Log:
App class loader seems ok.
Modified:
vmkit/branches/mcjit/lib/j3/openjdk/j3lib.cc
vmkit/branches/mcjit/lib/j3/openjdk/j3openjdk.cc
vmkit/branches/mcjit/lib/j3/vm/j3.cc
vmkit/branches/mcjit/lib/j3/vm/j3classloader.cc
vmkit/branches/mcjit/lib/j3/vm/j3mangler.cc
Modified: vmkit/branches/mcjit/lib/j3/openjdk/j3lib.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/openjdk/j3lib.cc?rev=199584&r1=199583&r2=199584&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/openjdk/j3lib.cc (original)
+++ vmkit/branches/mcjit/lib/j3/openjdk/j3lib.cc Sun Jan 19 05:28:24 2014
@@ -63,7 +63,7 @@ void J3Lib::bootstrap(J3* vm) {
#define z_signature(id) vm->initialClassLoader->getSignature(0, vm->names()->get(id))
- J3Class* threadGroupClass = vm->initialClassLoader->loadClass(vm->names()->get("java/lang/ThreadGroup"));
+ J3Class* threadGroupClass = vm->initialClassLoader->loadClass(vm->names()->get("java.lang.ThreadGroup"));
J3Method* sysThreadGroupInit = threadGroupClass->findMethod(0, vm->initName, z_signature("()V"));
J3ObjectHandle* sysThreadGroup = J3ObjectHandle::doNewObject(threadGroupClass);
sysThreadGroupInit->invokeSpecial(sysThreadGroup);
@@ -81,7 +81,7 @@ void J3Lib::bootstrap(J3* vm) {
threadInit->invokeSpecial(mainThread, appThreadGroup, vm->utfToString("main", 0));
vm->initialClassLoader
- ->loadClass(vm->names()->get("java/lang/System"))
+ ->loadClass(vm->names()->get("java.lang.System"))
->findMethod(J3Cst::ACC_STATIC, vm->names()->get("initializeSystemClass"), z_signature("()V"))
->invokeStatic();
@@ -90,7 +90,7 @@ void J3Lib::bootstrap(J3* vm) {
J3ObjectHandle* J3Lib::newDirectByteBuffer(void* address, size_t len) {
J3* vm = J3Thread::get()->vm();
- J3Class* cl = vm->initialClassLoader->loadClass(vm->names()->get("java/nio/DirectByteBuffer"));
+ J3Class* cl = vm->initialClassLoader->loadClass(vm->names()->get("java.nio.DirectByteBuffer"));
J3ObjectHandle* res = J3ObjectHandle::doNewObject(cl);
cl->findMethod(0, vm->initName, vm->initialClassLoader->getSignature(0, vm->names()->get("(JI)V")))->invokeSpecial(res, address, len);
return res;
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=199584&r1=199583&r2=199584&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/openjdk/j3openjdk.cc (original)
+++ vmkit/branches/mcjit/lib/j3/openjdk/j3openjdk.cc Sun Jan 19 05:28:24 2014
@@ -703,7 +703,7 @@ jclass JNICALL JVM_FindClassFromBootLoad
jclass res;
enterJVM();
J3* vm = J3Thread::get()->vm();
- J3Class* cl = vm->initialClassLoader->findLoadedClass(vm->names()->get(name));
+ J3ObjectType* cl = vm->initialClassLoader->getTypeFromQualified(0, name);
res = cl ? cl->javaClass() : 0;
leaveJVM();
return res;
@@ -721,9 +721,10 @@ jclass JNICALL JVM_FindClassFromClassLoa
if(jloader)
J3::internalError("implement me: jloader");
J3ClassLoader* loader = J3Thread::get()->vm()->initialClassLoader;
- const vmkit::Name* name = vm->names()->get(jname);
- J3Class* cl = loader->loadClass(name);
+ J3ObjectType* cl = loader->getTypeFromQualified(0, jname);
+
if(!cl) {
+ const vmkit::Name* name = vm->names()->get(jname);
if(throwError)
J3::noClassDefFoundError(name);
else
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=199584&r1=199583&r2=199584&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3.cc Sun Jan 19 05:28:24 2014
@@ -107,24 +107,24 @@ void J3::run() {
nbArrayInterfaces = 2;
arrayInterfaces = (J3Type**)initialClassLoader->allocator()->allocate(2*sizeof(J3Type*));
- arrayInterfaces[0] = z_class("java/lang/Cloneable");
- arrayInterfaces[1] = z_class("java/io/Serializable");
+ arrayInterfaces[0] = z_class("java.lang.Cloneable");
+ arrayInterfaces[1] = z_class("java.io.Serializable");
charArrayClass = typeCharacter->getArray();
- objectClass = z_class("java/lang/Object");
+ objectClass = z_class("java.lang.Object");
objectClass->resolve();
- stringClass = z_class("java/lang/String");
+ stringClass = z_class("java.lang.String");
stringClassInit = z_method(0, stringClass, initName, names()->get("([CZ)V"));
stringClassValue = z_field(0, stringClass, "value", charArrayClass);
- classClass = z_class("java/lang/Class");
+ classClass = z_class("java.lang.Class");
J3Field vmData[] = { J3Field(J3Cst::ACC_PRIVATE, names()->get("** vmData **"), typeLong) };
classClass->resolve(vmData, 1);
classClassInit = z_method(0, classClass, initName, names()->get("()V"));
classClassVMData = classClass->findField(0, vmData[0].name(), vmData[0].type());
- classLoaderClass = z_class("java/lang/ClassLoader");
+ classLoaderClass = z_class("java.lang.ClassLoader");
classLoaderClass->resolve(vmData, 1);
classLoaderClassVMData = classLoaderClass->findField(0, vmData[0].name(), vmData[0].type());
classLoaderClassLoadClass = z_method(0, classLoaderClass, names()->get("loadClass"),
@@ -134,26 +134,26 @@ void J3::run() {
names()->get("getSystemClassLoader"),
names()->get("()Ljava/lang/ClassLoader;"));
- threadClass = z_class("java/lang/Thread");
+ threadClass = z_class("java.lang.Thread");
threadClassRun = z_method(0, threadClass, names()->get("run"), names()->get("()V"));
threadClassVMData = z_field(0, threadClass, "eetop", typeLong);
- fieldClass = z_class("java/lang/reflect/Field");
+ fieldClass = z_class("java.lang.reflect.Field");
fieldClassClass = z_field(0, fieldClass, "clazz", classClass);
fieldClassSlot = z_field(0, fieldClass, "slot", typeInteger);
fieldClassAccess = z_field(0, fieldClass, "modifiers", typeInteger);
fieldClassInit = z_method(0, fieldClass, initName,
names()->get("(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/Class;IILjava/lang/String;[B)V"));
- constructorClass = z_class("java/lang/reflect/Constructor");
+ constructorClass = z_class("java.lang.reflect.Constructor");
constructorClassClass = z_field(0, constructorClass, "clazz", classClass);
constructorClassSlot = z_field(0, constructorClass, "slot", typeInteger);
constructorClassInit = z_method(0, constructorClass, initName,
names()->get("(Ljava/lang/Class;[Ljava/lang/Class;[Ljava/lang/Class;IILjava/lang/String;[B[B)V"));
- throwableClassBacktrace = z_field(0, z_class("java/lang/Throwable"), "backtrace", objectClass);
+ throwableClassBacktrace = z_field(0, z_class("java.lang.Throwable"), "backtrace", objectClass);
- stackTraceElementClass = z_class("java/lang/StackTraceElement");
+ stackTraceElementClass = z_class("java.lang.StackTraceElement");
stackTraceElementClassInit = z_method(0, stackTraceElementClass, initName,
names()->get("(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;I)V"));
@@ -173,7 +173,7 @@ void J3::run() {
//options()->debugExecute = 0;
J3ObjectHandle* res = z_method(J3Cst::ACC_STATIC,
- z_class("sun/launcher/LauncherHelper"),
+ z_class("sun.launcher.LauncherHelper"),
names()->get("checkAndLoadMain"),
names()->get("(ZILjava/lang/String;)Ljava/lang/Class;"))
->invokeStatic(1, 1, utfToString("HelloWorld")).valObject;
Modified: vmkit/branches/mcjit/lib/j3/vm/j3classloader.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/vm/j3classloader.cc?rev=199584&r1=199583&r2=199584&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3classloader.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3classloader.cc Sun Jan 19 05:28:24 2014
@@ -152,7 +152,7 @@ J3Type* J3ClassLoader::getTypeInternal(J
memset(buf, 0, len + 1 - pos);
for(; pos < len && (c = type[pos]) != J3Cst::ID_End; pos++)
- buf[pos - start] = c;
+ buf[pos - start] = c == '/' ? '.' : c;
if(type[pos] != J3Cst::ID_End)
wrongType(from, type, len);
@@ -213,8 +213,10 @@ J3ObjectType* J3ClassLoader::getTypeFrom
return getTypeFromDescriptor(from, J3Thread::get()->vm()->names()->get(type, 0, length))->asObjectType();
else {
char buf[length+1];
- for(size_t i=0; i<length; i++)
- buf[i] = type[i];
+ for(size_t i=0; i<length; i++) {
+ char c = type[i];
+ buf[i] = c == '/' ? '.' : c;
+ }
buf[length] = 0;
return loadClass(J3Thread::get()->vm()->names()->get(buf));
}
Modified: vmkit/branches/mcjit/lib/j3/vm/j3mangler.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/vm/j3mangler.cc?rev=199584&r1=199583&r2=199584&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3mangler.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3mangler.cc Sun Jan 19 05:28:24 2014
@@ -99,6 +99,7 @@ J3Mangler* J3Mangler::mangle(uint16_t c)
*cur++ = '_';
*cur++ = '3';
break;
+ case '.':
case '/':
c = '_';
default:
More information about the vmkit-commits
mailing list