blob: 07cd3091afd03f5e328bc8c59a88d81f18dab330 [file] [log] [blame]
//===---------------------------------------------------------------------===//
// General notes
//===---------------------------------------------------------------------===//
VMKit is the composition of three libraries:
1) MVM: mostly a garbage collector
2) JnJVM: a Java Virtual Machine implemented with MVM and LLVM
3) N3: a CLI implementation with MVM and LLVM
JnJVM and N3 work on Linux/x86 (note that you may have to disable SSE on some
architecture), and mostly work on Linux/PPC (there are some errors with
floating points). Portage to Darwin has been done some time ago, so it should
not be too hard.
JnJVM and N3 use GCC's unwinding library (libgcc_s.so).
There are mainly two options in the ./configure script
--with-gnu-classpath-local-prefix: the local build of GNU classpath
--with-pnet-local-prefix: the local build of PNET
--with-llvm: the local build of LLVM
--with-gc: user either boehm or single-mmap
Running make on the root tree will produce three executables:
1) lib/Mvm/main: a command line tool to load virtual machines dynamically
2) lib/JnJVM/main: running the JnJVM like any other JVM
3) lib/N3/main: running N3 like CLR
JnJVM and N3 have their own README notes.
//===---------------------------------------------------------------------===//
// Target specific LLVM patches (not required)
//===---------------------------------------------------------------------===//
If you experience problems, you can apply the patches for your corresponding
arch. I'd be interested to get some info on your specific problem if the
patch fixes it.
Patch for PowerPC:
- Bugfix for handling some external symbols (FIXME: does this still happen?)
- Thread safety when doing native code patching (TODO: submit to llvm-dev)
- CFI instructions for callbacks (TODO: find a correct macro to enable this)
- Emit a hand-made frame table for stubs (TODO: submit to llvm-dev)
Patch for X86
- Disable SSE (It can sigsegv on some x86 archs. Having test cases would be
nice)
- Enable CFI instructions for callbacks (TODO: find a correct macro to enable
by default)
//===---------------------------------------------------------------------===//
// TODOs
//===---------------------------------------------------------------------===//
- A compiler/system dependency interface
- A better autoconf support
- Remove old, historical references and files
- Currently old object are allocated by MVM'GC. Make some classes
hand-allocated.
- Port to Darwin
- Improve exception handling performance: it's currently ugly and inefficient
//===---------------------------------------------------------------------===//
// Disclaimer
//===---------------------------------------------------------------------===//
JnJVM, N3 and MVM were developed with "having functional virtual machines as
quick as possible" in mind. The usage of mixed C/C++ and the absence of clean
interfaces, is due to the initial developers lazyness. But now that the VMs
run, things should go better.