[vmkit-commits] [vmkit] r68323 - in /vmkit/trunk: include/jnjvm/JavaCompiler.h lib/JnJVM/VMCore/Jnjvm.cpp lib/JnJVM/VMCore/JnjvmClassLoader.cpp lib/JnJVM/VMCore/JnjvmClassLoader.h tools/llcj/llcj.cpp
Nicolas Geoffray
nicolas.geoffray at lip6.fr
Thu Apr 2 09:46:06 PDT 2009
Author: geoffray
Date: Thu Apr 2 11:46:06 2009
New Revision: 68323
URL: http://llvm.org/viewvc/llvm-project?rev=68323&view=rev
Log:
Add a few turnarounds for running Java executable files.
Modified:
vmkit/trunk/include/jnjvm/JavaCompiler.h
vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp
vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp
vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.h
vmkit/trunk/tools/llcj/llcj.cpp
Modified: vmkit/trunk/include/jnjvm/JavaCompiler.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/jnjvm/JavaCompiler.h?rev=68323&r1=68322&r2=68323&view=diff
==============================================================================
--- vmkit/trunk/include/jnjvm/JavaCompiler.h (original)
+++ vmkit/trunk/include/jnjvm/JavaCompiler.h Thu Apr 2 11:46:06 2009
@@ -37,8 +37,6 @@
}
virtual bool isStaticCompiling() {
- fprintf(stderr, "Checking static compilation in an empty compiler");
- abort();
return false;
}
Modified: vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp?rev=68323&r1=68322&r2=68323&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp Thu Apr 2 11:46:06 2009
@@ -886,8 +886,16 @@
void Jnjvm::executeClass(const char* className, ArrayObject* args) {
try {
- const UTF8* name = appClassLoader->asciizConstructUTF8(className);
- UserClass* cl = (UserClass*)appClassLoader->loadName(name, true, true);
+
+ // First try to see if we are a self-contained executable.
+ UserClass* cl = appClassLoader->loadClassFromSelf(this, className);
+
+ // If not, load the class.
+ if (!cl) {
+ const UTF8* name = appClassLoader->asciizConstructUTF8(className);
+ cl = (UserClass*)appClassLoader->loadName(name, true, true);
+ }
+
cl->initialiseClass(this);
const UTF8* funcSign =
Modified: vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp?rev=68323&r1=68322&r2=68323&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp Thu Apr 2 11:46:06 2009
@@ -1020,6 +1020,17 @@
}
}
+Class* JnjvmClassLoader::loadClassFromSelf(Jnjvm* vm, const char* name) {
+ assert(classes->map.size() == 0);
+ Class* cl = (Class*)dlsym(SELF_HANDLE, name);
+ if (cl) {
+ static_init_t init = (static_init_t)(uintptr_t)cl->classLoader;
+ init(this);
+ insertAllMethodsInVM(vm);
+ }
+ return cl;
+}
+
// Extern "C" functions called by the vmjc static intializer.
extern "C" void vmjcAddPreCompiledClass(JnjvmClassLoader* JCL,
Modified: vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.h?rev=68323&r1=68322&r2=68323&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.h Thu Apr 2 11:46:06 2009
@@ -277,6 +277,10 @@
/// this class file.
///
void loadLibFromFile(Jnjvm* vm, const char* name);
+
+ /// loadClassFromSelf - Load the main class if we are an executable.
+ ///
+ Class* loadClassFromSelf(Jnjvm* vm, const char* name);
};
Modified: vmkit/trunk/tools/llcj/llcj.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tools/llcj/llcj.cpp?rev=68323&r1=68322&r2=68323&view=diff
==============================================================================
--- vmkit/trunk/tools/llcj/llcj.cpp (original)
+++ vmkit/trunk/tools/llcj/llcj.cpp Thu Apr 2 11:46:06 2009
@@ -197,7 +197,9 @@
gccArgv[gccArgc++] = "-ljnjvm";
gccArgv[gccArgc++] = "-lvmjc";
gccArgv[gccArgc++] = "-lLLVMSupport";
+#if !defined(__MACH__)
gccArgv[gccArgc++] = "-rdynamic";
+#endif
gccArgv[gccArgc++] = 0;
res = sys::Program::ExecuteAndWait(Prog, gccArgv);
More information about the vmkit-commits
mailing list