[vmkit-commits] [vmkit] r54671 - in /vmkit/trunk: include/mvm/VirtualMachine.h lib/JnJVM/VMCore/JavaInitialise.cpp lib/JnJVM/VMCore/Jnjvm.h lib/N3/VMCore/N3Initialise.cpp lib/N3/VMCore/VirtualMachine.h

Nicolas Geoffray nicolas.geoffray at lip6.fr
Tue Aug 12 00:48:22 PDT 2008


Author: geoffray
Date: Tue Aug 12 02:48:20 2008
New Revision: 54671

URL: http://llvm.org/viewvc/llvm-project?rev=54671&view=rev
Log:
Add a common virtual machine class, to be the base
class of all virtual machines.


Added:
    vmkit/trunk/include/mvm/VirtualMachine.h
Modified:
    vmkit/trunk/lib/JnJVM/VMCore/JavaInitialise.cpp
    vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.h
    vmkit/trunk/lib/N3/VMCore/N3Initialise.cpp
    vmkit/trunk/lib/N3/VMCore/VirtualMachine.h

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

==============================================================================
--- vmkit/trunk/include/mvm/VirtualMachine.h (added)
+++ vmkit/trunk/include/mvm/VirtualMachine.h Tue Aug 12 02:48:20 2008
@@ -0,0 +1,43 @@
+//===--------- VirtualMachine.h - Registering a VM ------------------------===//
+//
+//                            The VMKit project
+//
+// This file is distributed under the University of Pierre et Marie Curie 
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// Ultimately, this would be like a generic way of defining a VM. But we're not
+// quite there yet.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef MVM_VIRTUALMACHINE_H
+#define MVM_VIRTUALMACHINE_H
+
+#include "mvm/Object.h"
+
+namespace mvm {
+
+/// VirtualMachine - This class is the root of virtual machine classes. It
+/// defines what a VM should be. Currently, a VM only initializes itself
+/// and runs applications.
+///
+class VirtualMachine : public mvm::Object {
+public:
+  
+  /// runApplication - Run an application. The application name is in
+  /// 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 void initialiseCLIVM();
+  static VirtualMachine* createCLIVM();
+  
+};
+
+
+} // end namespace mvm
+#endif // MVM_VIRTUALMACHINE_H

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaInitialise.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaInitialise.cpp Tue Aug 12 02:48:20 2008
@@ -10,6 +10,7 @@
 #include <signal.h>
 #include <vector>
 
+#include "mvm/VirtualMachine.h"
 #include "mvm/Threads/Locks.h"
 
 #include "JavaArray.h"
@@ -182,40 +183,22 @@
 
 extern "C" void ClasspathBoot();
 
-void handler(int val, siginfo_t* info, void* addr) {
-  printf("[%d] Crash in JnJVM at %p\n", mvm::Thread::self(), addr);
-  JavaJIT::printBacktrace();
-  assert(0);
+void mvm::VirtualMachine::initialiseJVM() {
+  if (!JavaIsolate::bootstrapVM) {
+    initialiseVT();
+    initialiseStatics();
+  
+    ClasspathBoot();
+    Classpath::initialiseClasspath(JavaIsolate::bootstrapVM);
+  }
 }
 
-extern "C" int boot() {
-  
-  struct sigaction sa;
-  
-  sigaction(SIGINT, 0, &sa);
-  sa.sa_sigaction = handler;
-  sa.sa_flags |= (SA_RESTART | SA_SIGINFO | SA_NODEFER);
-  sigaction(SIGINT, &sa, 0);
-  
-  sigaction(SIGILL, 0, &sa);
-  sa.sa_sigaction = handler;
-  sa.sa_flags |= (SA_RESTART | SA_SIGINFO | SA_NODEFER);
-  sigaction(SIGILL, &sa, 0);
-  
-  sigaction(SIGSEGV, 0, &sa);
-  sa.sa_sigaction = handler;
-  sa.sa_flags |= (SA_RESTART | SA_SIGINFO | SA_NODEFER);
-  sigaction(SIGSEGV, &sa, 0);
-
-  initialiseVT();
-  initialiseStatics();
-  
-  ClasspathBoot();
-  Classpath::initialiseClasspath(JavaIsolate::bootstrapVM);
-  return 0; 
+void Jnjvm::runApplication(int argc, char** argv) {
+  mvm::Thread::threadKey->set(((JavaIsolate*)this)->bootstrapThread);
+  ((JavaIsolate*)this)->runMain(argc, argv);
 }
 
-extern "C" int start_app(int argc, char** argv) {
+mvm::VirtualMachine* mvm::VirtualMachine::createJVM() {
 #if !defined(MULTIPLE_VM)
   JavaIsolate* vm = (JavaIsolate*)JavaIsolate::bootstrapVM;
 #else
@@ -226,6 +209,5 @@
   JavaIsolate* vm = JavaIsolate::allocateIsolate(JavaIsolate::bootstrapVM);
 #endif
 #endif
-  vm->runMain(argc, argv);
-  return 0;
+  return vm;
 }

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.h Tue Aug 12 02:48:20 2008
@@ -14,6 +14,7 @@
 
 #include "mvm/Object.h"
 #include "mvm/PrintBuffer.h"
+#include "mvm/VirtualMachine.h"
 #include "mvm/Threads/Cond.h"
 #include "mvm/Threads/Locks.h"
 
@@ -55,7 +56,7 @@
 class AllocationMap;
 class ZipArchive;
 
-class Jnjvm : public mvm::Object{
+class Jnjvm : public mvm::VirtualMachine {
 public:
 #ifdef MULTIPLE_GC
   Collector* GC;
@@ -266,6 +267,8 @@
     return gc::operator new(sz, VT, GC);
   }
 #endif
+
+  virtual void runApplication(int argc, char** argv);
 };
 
 } // end namespace jnjvm

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

==============================================================================
--- vmkit/trunk/lib/N3/VMCore/N3Initialise.cpp (original)
+++ vmkit/trunk/lib/N3/VMCore/N3Initialise.cpp Tue Aug 12 02:48:20 2008
@@ -327,14 +327,19 @@
 }
 
 
-extern "C" int boot(int argc, char **argv, char **envp) {
-  initialiseVT();
-  initialiseStatics();
-  return 0;
+void mvm::VirtualMachine::initialiseCLIVM() {
+  if (!N3::bootstrapVM) {
+    initialiseVT();
+    initialiseStatics();
+  }
 }
 
-extern "C" int start_app(int argc, char** argv) {
+void VirtualMachine::runApplication(int argc, char** argv) {
+  mvm::Thread::threadKey->set(this->bootstrapThread);  
+  ((N3*)this)->runMain(argc, argv);
+}
+
+mvm::VirtualMachine* mvm::VirtualMachine::createCLIVM() {
   N3* vm = N3::allocate("", N3::bootstrapVM);
-  vm->runMain(argc, argv);
-  return 0; 
+  return vm;
 }

Modified: vmkit/trunk/lib/N3/VMCore/VirtualMachine.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/N3/VMCore/VirtualMachine.h?rev=54671&r1=54670&r2=54671&view=diff

==============================================================================
--- vmkit/trunk/lib/N3/VMCore/VirtualMachine.h (original)
+++ vmkit/trunk/lib/N3/VMCore/VirtualMachine.h Tue Aug 12 02:48:20 2008
@@ -16,6 +16,7 @@
 
 #include "mvm/Object.h"
 #include "mvm/PrintBuffer.h"
+#include "mvm/VirtualMachine.h"
 #include "mvm/Threads/Cond.h"
 #include "mvm/Threads/Locks.h"
 
@@ -43,7 +44,7 @@
   static ThreadSystem* allocateThreadSystem();
 };
 
-class VirtualMachine : public mvm::Object{
+class VirtualMachine : public mvm::VirtualMachine {
 public:
   static VirtualTable* VT;
   ThreadSystem* threadSystem; 
@@ -123,6 +124,9 @@
   llvm::Module* module;
   N3ModuleProvider* TheModuleProvider;
   VMThread* bootstrapThread;
+
+  virtual void runApplication(int argc, char** argv);
+
 };
 
 } // end namespace n3





More information about the vmkit-commits mailing list