[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