[vmkit-commits] [vmkit] r58200 - in /vmkit/trunk: include/mvm/CompilationUnit.h include/mvm/VirtualMachine.h lib/JnJVM/VMCore/JavaConstantPool.cpp lib/JnJVM/VMCore/JavaInitialise.cpp lib/JnJVM/VMCore/JnjvmClassLoader.cpp lib/JnJVM/VMCore/JnjvmClassLoader.h lib/N3/VMCore/N3Initialise.cpp tools/jnjvm/Main.cpp tools/vmkit/CommandLine.cpp tools/vmkit/CommandLine.h tools/vmkit/Launcher.cpp

Nicolas Geoffray nicolas.geoffray at lip6.fr
Sun Oct 26 12:28:26 PDT 2008


Author: geoffray
Date: Sun Oct 26 14:28:25 2008
New Revision: 58200

URL: http://llvm.org/viewvc/llvm-project?rev=58200&view=rev
Log:
Static initialization of a VM returns a compilation unit, which is then passed to
the VM factory.

In JnJVM, this makes the bootstrap loader non static.


Added:
    vmkit/trunk/include/mvm/CompilationUnit.h
Modified:
    vmkit/trunk/include/mvm/VirtualMachine.h
    vmkit/trunk/lib/JnJVM/VMCore/JavaConstantPool.cpp
    vmkit/trunk/lib/JnJVM/VMCore/JavaInitialise.cpp
    vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp
    vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.h
    vmkit/trunk/lib/N3/VMCore/N3Initialise.cpp
    vmkit/trunk/tools/jnjvm/Main.cpp
    vmkit/trunk/tools/vmkit/CommandLine.cpp
    vmkit/trunk/tools/vmkit/CommandLine.h
    vmkit/trunk/tools/vmkit/Launcher.cpp

Added: vmkit/trunk/include/mvm/CompilationUnit.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/mvm/CompilationUnit.h?rev=58200&view=auto

==============================================================================
--- vmkit/trunk/include/mvm/CompilationUnit.h (added)
+++ vmkit/trunk/include/mvm/CompilationUnit.h Sun Oct 26 14:28:25 2008
@@ -0,0 +1,36 @@
+//===---- CompilingUnit.h - A compilation unit to compile source files ----===//
+//
+//                            The VMKit project
+//
+// This file is distributed under the University of Pierre et Marie Curie 
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// A compilation unit contains a module and a module provider to compile source
+// files of a virtual machine, e.g .java files in Java.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef MVM_COMPILATION_UNIT_H
+#define MVM_COMPILATION_UNIT_H
+
+#include "mvm/Object.h"
+
+namespace llvm {
+  class Module;
+  class ModuleProvider;
+}
+
+namespace mvm {
+
+class CompilationUnit : public mvm::Object {
+public:
+  llvm::Module* TheModule;
+  llvm::ModuleProvider* TheModuleProvider;
+
+};
+}
+
+
+#endif

Modified: vmkit/trunk/include/mvm/VirtualMachine.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/mvm/VirtualMachine.h?rev=58200&r1=58199&r2=58200&view=diff

==============================================================================
--- vmkit/trunk/include/mvm/VirtualMachine.h (original)
+++ vmkit/trunk/include/mvm/VirtualMachine.h Sun Oct 26 14:28:25 2008
@@ -15,6 +15,7 @@
 #ifndef MVM_VIRTUALMACHINE_H
 #define MVM_VIRTUALMACHINE_H
 
+#include "mvm/CompilationUnit.h"
 #include "mvm/Object.h"
 
 namespace mvm {
@@ -30,11 +31,11 @@
   /// the arguments, hence it is the virtual machine's job to parse them.
   virtual void runApplication(int argc, char** argv) = 0;
 
-  static void initialiseJVM();
-  static VirtualMachine* createJVM();
+  static CompilationUnit* initialiseJVM();
+  static VirtualMachine* createJVM(CompilationUnit* C = 0);
   
-  static void initialiseCLIVM();
-  static VirtualMachine* createCLIVM();
+  static CompilationUnit* initialiseCLIVM();
+  static VirtualMachine* createCLIVM(CompilationUnit* C = 0);
   
 };
 

Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaConstantPool.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaConstantPool.cpp?rev=58200&r1=58199&r2=58200&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaConstantPool.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaConstantPool.cpp Sun Oct 26 14:28:25 2008
@@ -307,7 +307,7 @@
     const UTF8* name = UTF8At(ctpDef[index]);
     temp = loader->lookupClass(name);
     if (!temp) 
-      temp = JnjvmClassLoader::bootstrapLoader->lookupClass(name);
+      temp = loader->bootstrapLoader->lookupClass(name);
   }
 #endif
   return temp;

Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaInitialise.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaInitialise.cpp?rev=58200&r1=58199&r2=58200&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaInitialise.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaInitialise.cpp Sun Oct 26 14:28:25 2008
@@ -62,29 +62,26 @@
 }
 
 #ifdef ISOLATE_SHARING
-void mvm::VirtualMachine::initialiseJVM() {
+mvm::CompilationUnit* mvm::VirtualMachine::initialiseJVM() {
   initialiseVT();
-  if (!JnjvmSharedLoader::sharedLoader) {
-    JnjvmSharedLoader::sharedLoader = JnjvmSharedLoader::createSharedLoader();
-  }
+  JnjvmSharedLoader::sharedLoader = JnjvmSharedLoader::createSharedLoader();
+  return JnjvmSharedLoader::sharedLoader;
 }
 
-mvm::VirtualMachine* mvm::VirtualMachine::createJVM() {
+mvm::VirtualMachine* mvm::VirtualMachine::createJVM(mvm::CompilationUnit* C) {
   JnjvmBootstraLoader* bootstrapLoader = gc_new(JnjvmBootstrapLoader)(0);
   Jnjvm* vm = gc_new(Jnjvm)(bootstrapLoader);
   return vm;
 }
 #else
   
-void mvm::VirtualMachine::initialiseJVM() {
+mvm::CompilationUnit* mvm::VirtualMachine::initialiseJVM() {
   initialiseVT();
-  if (!JnjvmClassLoader::bootstrapLoader) {
-    JnjvmClassLoader::bootstrapLoader = gc_new(JnjvmBootstrapLoader)(0);
-  }
+  return gc_new(JnjvmBootstrapLoader)(0);
 }
 
-mvm::VirtualMachine* mvm::VirtualMachine::createJVM() {
-  Jnjvm* vm = gc_new(Jnjvm)(JnjvmClassLoader::bootstrapLoader);
+mvm::VirtualMachine* mvm::VirtualMachine::createJVM(mvm::CompilationUnit* C) {
+  Jnjvm* vm = gc_new(Jnjvm)((JnjvmBootstrapLoader*)C);
   return vm;
 }
 

Modified: vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp?rev=58200&r1=58199&r2=58200&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp Sun Oct 26 14:28:25 2008
@@ -37,11 +37,6 @@
 
 using namespace jnjvm;
 
-#ifndef ISOLATE_SHARING
-JnjvmBootstrapLoader* JnjvmClassLoader::bootstrapLoader = 0;
-#endif
-
-
 extern const char* GNUClasspathGlibj;
 extern const char* GNUClasspathLibs;
 

Modified: vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.h?rev=58200&r1=58199&r2=58200&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.h Sun Oct 26 14:28:25 2008
@@ -16,6 +16,7 @@
 #include "types.h"
 
 #include "mvm/Allocator.h"
+#include "mvm/CompilationUnit.h"
 #include "mvm/Object.h"
 #include "mvm/PrintBuffer.h"
 
@@ -49,7 +50,7 @@
 /// its own tables (signatures, UTF8, types) which are mapped to a single
 /// table for non-isolate environments.
 ///
-class JnjvmClassLoader : public mvm::Object {
+class JnjvmClassLoader : public mvm::CompilationUnit {
 private:
    
   
@@ -192,7 +193,7 @@
   /// bootstrapLoader - The bootstrap loader of the JVM. Loads the base
   /// classes.
   ///
-  ISOLATE_STATIC JnjvmBootstrapLoader* bootstrapLoader;
+  JnjvmBootstrapLoader* bootstrapLoader;
   
   /// ~JnjvmClassLoader - Destroy the loader. Depending on the JVM
   /// configuration, this may destroy the tables, JIT module and

Modified: vmkit/trunk/lib/N3/VMCore/N3Initialise.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/N3/VMCore/N3Initialise.cpp?rev=58200&r1=58199&r2=58200&view=diff

==============================================================================
--- vmkit/trunk/lib/N3/VMCore/N3Initialise.cpp (original)
+++ vmkit/trunk/lib/N3/VMCore/N3Initialise.cpp Sun Oct 26 14:28:25 2008
@@ -10,6 +10,7 @@
 
 #include <vector>
 
+#include "mvm/CompilationUnit.h"
 #include "mvm/JIT.h"
 #include "mvm/Threads/Locks.h"
 
@@ -327,11 +328,12 @@
 }
 
 
-void mvm::VirtualMachine::initialiseCLIVM() {
+mvm::CompilationUnit* mvm::VirtualMachine::initialiseCLIVM() {
   if (!N3::bootstrapVM) {
     initialiseVT();
     initialiseStatics();
   }
+  return 0;
 }
 
 void VirtualMachine::runApplication(int argc, char** argv) {
@@ -339,7 +341,7 @@
   ((N3*)this)->runMain(argc, argv);
 }
 
-mvm::VirtualMachine* mvm::VirtualMachine::createCLIVM() {
+mvm::VirtualMachine* mvm::VirtualMachine::createCLIVM(mvm::CompilationUnit* C) {
   N3* vm = N3::allocate("", N3::bootstrapVM);
   return vm;
 }

Modified: vmkit/trunk/tools/jnjvm/Main.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tools/jnjvm/Main.cpp?rev=58200&r1=58199&r2=58200&view=diff

==============================================================================
--- vmkit/trunk/tools/jnjvm/Main.cpp (original)
+++ vmkit/trunk/tools/jnjvm/Main.cpp Sun Oct 26 14:28:25 2008
@@ -26,8 +26,8 @@
   Thread::initialise();
   Collector::initialise(0, &base);
   
-  VirtualMachine::initialiseJVM();
-  VirtualMachine* vm = VirtualMachine::createJVM();
+  CompilationUnit* CU = VirtualMachine::initialiseJVM();
+  VirtualMachine* vm = VirtualMachine::createJVM(CU);
   vm->runApplication(argc, argv);
 
   return 0;

Modified: vmkit/trunk/tools/vmkit/CommandLine.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tools/vmkit/CommandLine.cpp?rev=58200&r1=58199&r2=58200&view=diff

==============================================================================
--- vmkit/trunk/tools/vmkit/CommandLine.cpp (original)
+++ vmkit/trunk/tools/vmkit/CommandLine.cpp Sun Oct 26 14:28:25 2008
@@ -100,6 +100,7 @@
   } 
 }
 
+#if 0
 extern "C" int startApp(thread_arg_t* arg) {
   int argc = arg->argc;
   char** argv = arg->argv;
@@ -120,6 +121,7 @@
 #endif
   return 0;
 }
+#endif
 
 void CommandLine::executeInstr() {
   if (!strcmp(argv[0], "load")) {
@@ -152,6 +154,7 @@
 
   } else {
     create_vm_t func = vmlets[argv[0]];
+    mvm::CompilationUnit* CU = compilers[argv[0]];
     if (!func) {
       fprintf(stderr, "\t Unknown vm %s\n", argv[0]);
     } else {
@@ -163,7 +166,7 @@
       int tid = 0;
       Thread::start(&tid, (int (*)(void *))startApp, thread_arg);
 #else
-      VirtualMachine* VM = func();
+      VirtualMachine* VM = func(CU);
       try {
         VM->runApplication(argc, argv);
       } catch(...) {

Modified: vmkit/trunk/tools/vmkit/CommandLine.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tools/vmkit/CommandLine.h?rev=58200&r1=58199&r2=58200&view=diff

==============================================================================
--- vmkit/trunk/tools/vmkit/CommandLine.h (original)
+++ vmkit/trunk/tools/vmkit/CommandLine.h Sun Oct 26 14:28:25 2008
@@ -29,7 +29,7 @@
 #endif
 
 typedef int (*boot_t)();
-typedef mvm::VirtualMachine* (*create_vm_t)();
+typedef mvm::VirtualMachine* (*create_vm_t)(mvm::CompilationUnit*);
 
 namespace mvm {
 
@@ -54,6 +54,7 @@
   char _yyChar;
   
   std::map<const char*, create_vm_t, ltstr> vmlets;
+  std::map<const char*, mvm::CompilationUnit*, ltstr> compilers;
 
   CommandLine();
   

Modified: vmkit/trunk/tools/vmkit/Launcher.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tools/vmkit/Launcher.cpp?rev=58200&r1=58199&r2=58200&view=diff

==============================================================================
--- vmkit/trunk/tools/vmkit/Launcher.cpp (original)
+++ vmkit/trunk/tools/vmkit/Launcher.cpp Sun Oct 26 14:28:25 2008
@@ -69,25 +69,29 @@
   
   if (VMToRun == RunJava) {
 #if WITH_JNJVM
-    mvm::VirtualMachine::initialiseJVM();
-    mvm::VirtualMachine* vm = mvm::VirtualMachine::createJVM();
+    mvm::CompilationUnit* CU = mvm::VirtualMachine::initialiseJVM();
+    mvm::VirtualMachine* vm = mvm::VirtualMachine::createJVM(CU);
     vm->runApplication(argc, argv);
 #endif
   } else if (VMToRun == RunNet) {
 #if WITH_N3
-    mvm::VirtualMachine::initialiseCLIVM();
-    mvm::VirtualMachine* vm = mvm::VirtualMachine::createCLIVM();
+    mvm::CompilationUnit* CU = mvm::VirtualMachine::initialiseCLIVM();
+    mvm::VirtualMachine* vm = mvm::VirtualMachine::createCLIVM(CU);
     vm->runApplication(argc, argv);
 #endif
   } else {
     mvm::CommandLine MyCl;
 #if WITH_JNJVM
-    mvm::VirtualMachine::initialiseJVM();
+    mvm::CompilationUnit* JVMCompiler = 
+      mvm::VirtualMachine::initialiseJVM();
     MyCl.vmlets["java"] = (mvm::VirtualMachine::createJVM);
+    MyCl.compilers["java"] = JVMCompiler;
 #endif
 #if WITH_N3
-    mvm::VirtualMachine::initialiseCLIVM();
+    mvm::CompilationUnit* CLICompiler = 
+      mvm::VirtualMachine::initialiseCLIVM();
     MyCl.vmlets["net"] = (mvm::VirtualMachine::createCLIVM);
+    MyCl.compilers["net"] = CLICompiler;
 #endif
     MyCl.start();
   }





More information about the vmkit-commits mailing list