[vmkit-commits] [vmkit] r199085 - Better management of bootstrap paths

Gael Thomas gael.thomas at lip6.fr
Mon Jan 13 01:41:27 PST 2014


Author: gthomas
Date: Mon Jan 13 03:41:26 2014
New Revision: 199085

URL: http://llvm.org/viewvc/llvm-project?rev=199085&view=rev
Log:
Better management of bootstrap paths

Modified:
    vmkit/branches/mcjit/include/j3/j3lib.h
    vmkit/branches/mcjit/include/j3/j3options.h
    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/j3codegen.cc
    vmkit/branches/mcjit/lib/j3/vm/j3options.cc

Modified: vmkit/branches/mcjit/include/j3/j3lib.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/include/j3/j3lib.h?rev=199085&r1=199084&r2=199085&view=diff
==============================================================================
--- vmkit/branches/mcjit/include/j3/j3lib.h (original)
+++ vmkit/branches/mcjit/include/j3/j3lib.h Mon Jan 13 03:41:26 2014
@@ -8,15 +8,13 @@ namespace j3 {
 	class J3;
 	class J3ClassLoader;
 	class J3ObjectHandle;
+	class J3Options;
 
 	class J3Lib {
 	public:
-		static const char*  systemClassesArchives();
-		static const char*  systemLibraryPath();
-		static const char*  extDirs();
-		static void         loadSystemLibraries(J3ClassLoader* loader);
-
-		static void         bootstrap(J3* vm);
+		static void processOptions(J3* vm);
+		static void loadSystemLibraries(J3ClassLoader* loader);
+		static void bootstrap(J3* vm);
 
 		static J3ObjectHandle* newDirectByteBuffer(void* address, size_t len);
 	};

Modified: vmkit/branches/mcjit/include/j3/j3options.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/include/j3/j3options.h?rev=199085&r1=199084&r2=199085&view=diff
==============================================================================
--- vmkit/branches/mcjit/include/j3/j3options.h (original)
+++ vmkit/branches/mcjit/include/j3/j3options.h Mon Jan 13 03:41:26 2014
@@ -25,10 +25,14 @@ namespace j3 {
 	public:
 		bool           assertionsEnabled;
 		const char*    selfBitCodePath;
+
+		const char*    javaHome;
 		const char*    bootClasspath;
 		const char*    systemLibraryPath;
-		const char*    classpath;
 		const char*    extDirs;
+
+		const char*    classpath;
+
 		bool           debugEnterIndent;
 		uint32_t       genDebugExecute;
 		uint32_t       debugExecute;

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=199085&r1=199084&r2=199085&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/openjdk/j3lib.cc (original)
+++ vmkit/branches/mcjit/lib/j3/openjdk/j3lib.cc Mon Jan 13 03:41:26 2014
@@ -14,12 +14,48 @@
 using namespace j3;
 
 #ifdef LINUX_OS
-#define OPENJDK_LIBPATH OPENJDK_HOME"jre/lib/amd64"
+#define OPENJDK_LIBPATH_SUFFIX "jre/lib/amd64"
 #else
-#define OPENJDK_LIBPATH OPENJDK_HOME"jre/lib"
+#define OPENJDK_LIBPATH_SUFFIX "jre/lib"
 #endif
 
-static const char* rtjar = OPENJDK_HOME"jre/lib/rt.jar";
+static char* buildPath(const char* base, const char* suffix) {
+	size_t baseLen = strlen(base);
+	size_t suffixLen = strlen(suffix);
+
+	char* res = (char*)malloc(baseLen + suffixLen + 1);
+	memcpy(res, base, baseLen);
+	memcpy(res + baseLen, suffix, suffixLen + 1);
+
+	return res;
+}
+
+void J3Lib::processOptions(J3* vm) {
+	const char* jh = getenv("JAVA_HOME");
+	jh = jh ? jh : OPENJDK_HOME;
+
+	vm->options()->javaHome = jh ? jh : OPENJDK_HOME;
+	vm->options()->bootClasspath = buildPath(jh, "jre/lib/rt.jar");
+	vm->options()->systemLibraryPath = buildPath(jh, OPENJDK_LIBPATH_SUFFIX);
+	vm->options()->extDirs = buildPath(jh, "jre/lib/ext");
+}
+
+void J3Lib::loadSystemLibraries(J3ClassLoader* loader) {
+	const char* spath = J3Thread::get()->vm()->options()->systemLibraryPath;
+	char* libinstrument = buildPath(spath, "/libinstrument"SHLIBEXT);
+	char* libjava = buildPath(spath, "/libjava"SHLIBEXT);
+	/* JavaRuntimeSupport checks for a symbol defined in this library */
+	void* h0 = dlopen(libinstrument, RTLD_LAZY | RTLD_GLOBAL);
+	void* handle = dlopen(libjava, RTLD_LAZY | RTLD_LOCAL);
+
+	free(libinstrument);
+	free(libjava);
+
+	if(!handle || !h0)
+		J3::internalError("Unable to find java system library: %s\n", dlerror());
+
+	loader->addNativeLibrary(handle);
+}
 
 void J3Lib::bootstrap(J3* vm) {
 	J3ObjectHandle* prev = J3Thread::get()->tell();
@@ -51,29 +87,6 @@ void J3Lib::bootstrap(J3* vm) {
 	J3Thread::get()->restore(prev);
 }
 
-const char* J3Lib::systemClassesArchives() {
-	return rtjar;
-}
-
-const char* J3Lib::systemLibraryPath() {
-	return OPENJDK_LIBPATH;
-}
-
-const char* J3Lib::extDirs() {
-	return OPENJDK_HOME"jre/lib/ext";
-}
-
-void J3Lib::loadSystemLibraries(J3ClassLoader* loader) {
-	/* JavaRuntimeSupport checks for a symbol defined in this library */
-	void* h0 = dlopen(OPENJDK_LIBPATH"/libinstrument"SHLIBEXT, RTLD_LAZY | RTLD_GLOBAL);
-	void* handle = dlopen(OPENJDK_LIBPATH"/libjava"SHLIBEXT, RTLD_LAZY | RTLD_LOCAL);
-	
-	if(!handle || !h0)
-		J3::internalError("Unable to find java system library: %s\n", dlerror());
-
-	loader->addNativeLibrary(handle);
-}
-
 J3ObjectHandle* J3Lib::newDirectByteBuffer(void* address, size_t len) {
 	J3* vm = J3Thread::get()->vm();
 	J3Class* cl = vm->initialClassLoader->loadClass(vm->names()->get("java/nio/DirectByteBuffer"));

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=199085&r1=199084&r2=199085&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/openjdk/j3openjdk.cc (original)
+++ vmkit/branches/mcjit/lib/j3/openjdk/j3openjdk.cc Mon Jan 13 03:41:26 2014
@@ -146,7 +146,7 @@ jobject JNICALL JVM_InitProperties(JNIEn
 																												 vm->names()->get("(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/Object;")));
 
 #define setProp(key, val) _setProp->invokeVirtual(p, vm->utfToString(key), vm->utfToString(val));
-#define setPropEnv(key, val) ({ const char* tmp = getenv(val); if(!tmp) tmp = ""; setProp(key, val); })
+#define setPropEnv(key, val, def) ({ const char* tmp = getenv(val); if(!tmp) tmp = def; setProp(key, val); })
 
 	/*
 	** <dt>java.version         <dd>Java version number
@@ -172,7 +172,7 @@ jobject JNICALL JVM_InitProperties(JNIEn
   setProp("java.version", "1.8");
   setProp("java.vendor", "The VMKit Project");
   setProp("java.vendor.url", "http://vmkit.llvm.org");
-	setPropEnv("java.home", "JAVA_HOME");
+	setProp("java.home", vm->options()->javaHome);
   setProp("java.class.version", "52.0");
   setProp("java.class.path", vm->options()->classpath);
 	//"file:///Users/gthomas/research/vmkit4/vmkit");//vm->options()->classpath);
@@ -182,9 +182,9 @@ jobject JNICALL JVM_InitProperties(JNIEn
   setProp("file.separator", "/");
   setProp("path.separator", ":");
   setProp("line.separator", "\n");
-  setPropEnv("user.name", "USERNAME");
-  setPropEnv("user.home", "HOME");
-	setPropEnv("user.dir", "PWD");
+  setPropEnv("user.name", "USERNAME", "");
+  setPropEnv("user.home", "HOME", "");
+	setPropEnv("user.dir", "PWD", "");
 
   setProp("java.boot.class.path", vm->options()->bootClasspath);
   setProp("sun.boot.library.path", vm->options()->systemLibraryPath);
@@ -204,7 +204,7 @@ jobject JNICALL JVM_InitProperties(JNIEn
   setProp("java.vm.vendor", "The VMKit Project");
   setProp("java.vm.name", "J3");
   setProp("java.specification.version", "1.8");
-  setPropEnv("java.library.path", "LD_LIBRARY_PATH");
+  setPropEnv("java.library.path", "LD_LIBRARY_PATH", "");
 
 
   setProp("java.io.tmpdir", "/tmp");

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=199085&r1=199084&r2=199085&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3.cc Mon Jan 13 03:41:26 2014
@@ -68,6 +68,7 @@ void J3::introspect() {
 
 void J3::start(int argc, char** argv) {
 	_options.process(argc, argv);
+	J3Lib::processOptions(this);
 
 	vmkit::ThreadAllocator::initialize(sizeof(J3Thread), options()->stackSize);
 

Modified: vmkit/branches/mcjit/lib/j3/vm/j3codegen.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/vm/j3codegen.cc?rev=199085&r1=199084&r2=199085&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3codegen.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3codegen.cc Mon Jan 13 03:41:26 2014
@@ -1425,7 +1425,7 @@ void J3CodeGen::translate() {
 				break;
 
 			case J3Cst::BC_jsr: nyi();                    /* 0xa8 */
-			case J3Cst::BC_ret: nyi();                    /* 0xa9 wide */
+			case J3Cst::BC_ret: /* wide */ nyi();         /* 0xa9 */
 			case J3Cst::BC_tableswitch:                   /* 0xaa */
 				tableSwitch();
 				_onEndPoint();

Modified: vmkit/branches/mcjit/lib/j3/vm/j3options.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/vm/j3options.cc?rev=199085&r1=199084&r2=199085&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3options.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3options.cc Mon Jan 13 03:41:26 2014
@@ -11,10 +11,7 @@ using namespace j3;
 J3Options::J3Options() {
 	assertionsEnabled = 1;
 	selfBitCodePath = SELF_BITCODE;
-	bootClasspath = J3Lib::systemClassesArchives();
-	systemLibraryPath = J3Lib::systemLibraryPath();
 	classpath = ".";
-	extDirs = J3Lib::extDirs();
 
 	debugEnterIndent = 1;
 





More information about the vmkit-commits mailing list