[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