[vmkit-commits] [vmkit] r198554 - Unify primitive classes + new openjdk interface functions + new properties.

Gael Thomas gael.thomas at lip6.fr
Sun Jan 5 02:10:56 PST 2014


Author: gthomas
Date: Sun Jan  5 04:10:56 2014
New Revision: 198554

URL: http://llvm.org/viewvc/llvm-project?rev=198554&view=rev
Log:
Unify primitive classes + new openjdk interface functions + new properties.

Modified:
    vmkit/branches/mcjit/lib/j3/openjdk/j3openjdk.cc
    vmkit/branches/mcjit/lib/j3/vm/j3class.cc

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=198554&r1=198553&r2=198554&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/openjdk/j3openjdk.cc (original)
+++ vmkit/branches/mcjit/lib/j3/openjdk/j3openjdk.cc Sun Jan  5 04:10:56 2014
@@ -11,6 +11,7 @@
 
 #include <dlfcn.h>
 #include <sys/utsname.h>
+#include <sys/time.h>
 
 using namespace j3;
 
@@ -78,7 +79,16 @@ jstring JNICALL JVM_InternString(JNIEnv*
 /*
  * java.lang.System
  */
-jlong JNICALL JVM_CurrentTimeMillis(JNIEnv* env, jclass ignored) { enterJVM(); NYI(); leaveJVM(); }
+jlong JNICALL JVM_CurrentTimeMillis(JNIEnv* env, jclass ignored) { 
+	jlong res;
+	enterJVM(); 
+	struct timeval tv;
+	gettimeofday(&tv, 0);
+	res = tv.tv_sec*1e3 + tv.tv_usec/1000;
+	leaveJVM(); 
+	return res;
+}
+
 jlong JNICALL JVM_NanoTime(JNIEnv* env, jclass ignored) { enterJVM(); NYI(); leaveJVM(); }
 void JNICALL JVM_ArrayCopy(JNIEnv* env, jclass ignored, jobject src, jint src_pos, jobject dst, jint dst_pos, jint length) { 
 	enterJVM(); 
@@ -138,6 +148,11 @@ jobject JNICALL JVM_InitProperties(JNIEn
   setProp("java.boot.class.path", vm->options()->bootClasspath);
   setProp("sun.boot.library.path", vm->options()->systemLibraryPath);
   setProp("sun.boot.class.path", vm->options()->bootClasspath);
+  setProp("file.separator", "/");
+  setProp("path.separator", ":");
+  setProp("line.separator", "\n");
+	setPropEnv("java.home", "JAVA_HOME");
+
 #if 0
   setProp("java.vm.specification.version", "1.2");
   setProp("java.vm.specification.vendor", "Sun Microsystems, Inc");
@@ -149,7 +164,6 @@ jobject JNICALL JVM_InitProperties(JNIEn
   setProp("java.runtime.version", "1.8");
   setProp("java.vendor", "The VMKit Project");
   setProp("java.vendor.url", "http://vmkit.llvm.org");
-	setPropEnv("java.home", "JAVA_HOME");
   setProp("java.class.version", "52.0");
   setProp("java.vm.version", "0.5");
   setProp("java.vm.vendor", "The VMKit Project");
@@ -259,14 +273,21 @@ jlong JNICALL JVM_TotalMemory(void) { en
 jlong JNICALL JVM_FreeMemory(void) { enterJVM(); NYI(); leaveJVM(); }
 jlong JNICALL JVM_MaxMemory(void) { enterJVM(); NYI(); leaveJVM(); }
 jint JNICALL JVM_ActiveProcessorCount(void) { enterJVM(); NYI(); leaveJVM(); }
-void * JNICALL JVM_LoadLibrary(const char *name) { enterJVM(); NYI(); leaveJVM(); }
+
+void* JNICALL JVM_LoadLibrary(const char *name) { 
+	void* res;
+	enterJVM(); 
+	res = dlopen(name, RTLD_LAZY | RTLD_LOCAL);
+	leaveJVM(); 
+	return res;
+}
+
 void JNICALL JVM_UnloadLibrary(void * handle) { enterJVM(); NYI(); leaveJVM(); }
 
 void * JNICALL JVM_FindLibraryEntry(void *handle, const char *name) { 
 	void* res;
 	enterJVM(); 
 	res = dlsym(handle, name);
-	fprintf(stderr, " find entry %s in %p => %p\n", name, handle, res);
 	leaveJVM(); 
 	return res;
 }
@@ -442,29 +463,28 @@ jclass JNICALL JVM_FindPrimitiveClass(JN
 
 	enterJVM(); 
 	J3* vm = J3Thread::get()->vm();
-
 	J3ClassLoader* loader = vm->initialClassLoader;
 	vmkit::Names* names = vm->names();
-	J3Class* cl;
+	J3Type* cl;
 
   if(!strcmp(utf, "boolean"))
-		cl = loader->loadClass(names->get("java/lang/Boolean"));
+		cl = vm->typeBoolean;
 	else if(!strcmp(utf, "byte"))
-		cl = loader->loadClass(names->get("java/lang/Byte"));
+		cl = vm->typeByte;
 	else if(!strcmp(utf, "char"))
-		cl = loader->loadClass(names->get("java/lang/Character"));
+		cl = vm->typeCharacter;
 	else if(!strcmp(utf, "short"))
-		cl = loader->loadClass(names->get("java/lang/Short"));
+		cl = vm->typeShort;
 	else if(!strcmp(utf, "int"))
-		cl = loader->loadClass(names->get("java/lang/Integer"));
+		cl = vm->typeInteger;
 	else if(!strcmp(utf, "long"))
-		cl = loader->loadClass(names->get("java/lang/Long"));
+		cl = vm->typeLong;
 	else if(!strcmp(utf, "float"))
-		cl = loader->loadClass(names->get("java/lang/Float"));
+		cl = vm->typeFloat;
 	else if(!strcmp(utf, "double"))
-		cl = loader->loadClass(names->get("java/lang/Double"));
+		cl = vm->typeDouble;
 	else if(!strcmp(utf, "void"))
-		cl = loader->loadClass(names->get("java/lang/Void"));
+		cl = vm->typeVoid;
 	else
 		J3::internalError("unsupported primitive: %s", utf);
 
@@ -572,7 +592,20 @@ jboolean JNICALL JVM_IsArrayClass(JNIEnv
 	return res;
 }
 
-jboolean JNICALL JVM_IsPrimitiveClass(JNIEnv* env, jclass cls) { enterJVM(); NYI(); leaveJVM(); }
+jboolean JNICALL JVM_IsPrimitiveClass(JNIEnv* env, jclass cls) { 
+	jboolean res = 0;
+	enterJVM(); 
+	J3* vm = J3Thread::get()->vm();
+	if(0) {}
+#define testIt(id, ctype, llvmType, scale)			\
+	else if(cls->isSame(vm->type##id->javaClass()))	\
+		res = 1;
+	onJavaTypes(testIt)
+#undef testIt
+	leaveJVM(); 
+	return res;
+}
+
 jclass JNICALL JVM_GetComponentType(JNIEnv* env, jclass cls) { 
 	jclass res;
 	enterJVM();

Modified: vmkit/branches/mcjit/lib/j3/vm/j3class.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/vm/j3class.cc?rev=198554&r1=198553&r2=198554&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3class.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3class.cc Sun Jan  5 04:10:56 2014
@@ -936,6 +936,5 @@ J3Primitive::J3Primitive(J3ClassLoader*
 
 void J3Primitive::defineJavaClass(const char* className) {
 	J3* vm = J3Thread::get()->vm();
-	fprintf(stderr, " ---> %s\n", className);
 	_javaClass = vm->initialClassLoader->loadClass(vm->names()->get(className))->javaClass(0);
 }





More information about the vmkit-commits mailing list