[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