[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