Hi all!
I'm proud to announce the release 0.1.1 of Jato!
Jato is an open source, JIT-only virtual machine for Java that aims to
support
the JVM specification version 2 including 1.5 amendments. It is not complete
but you can run some Java applications with it on 32-bit x86 Linux machines.
Jato uses Boehm GC as its garbage collector and GNU Classpath to provide
essential Java run-time libraries. A port to the x86-64 architecture is
currently ongoing.
Highlights of this release:
- Fixes to make Eclipse, Jython, Lusearch, and Xalan in DaCapo
benchmarks to
work (Tomek, Pekka)
- Relaxed locking for monitors to improve performance (Tomek)
- Fixes to the x86-64 port (Pekka)
- Initial work to make Jato compile on Darwin (Pekka)
You can download the full source distribution here:
http://www.kernel.org/pub/software/java/jato/jato-0.1.1.tar.bz2
or fetch the latest sources from the git repository:
git clone git://git.kernel.org/pub/scm/java/jato/jato.git
If you have questions, comments, or suggestions, feel free to drop by at
#jato
on irc.freenode.net or send an email to our mailing list at:
http://groups.google.com/group/jatovm?hl=en
For more information, please check out the Jato home page at:
http://www.jatovm.org/
Pekka
---
Changes from v0.1.0 to v0.1.1:
------------------------------
Arthur HUILLET (1):
lib/string: fix size computation and str_vprintf
Eduard - Gabriel Munteanu (2):
vm: quit gracefully when there's nothing to load
x86-64: fix call to fixup_vtable() from trampolines
Jim Huang (1):
vm: Update URL to Java online documentation
Pekka Enberg (146):
runtime: Implement Runtime.availableProcessors()
runtime: Implement Runtime.freeMemory() and Runtime.totalMemory()
torture: More DaCapo tests run now
torture: Enable more DaCapo tests now that we're faster
torture: Add JRuby to torture suite
x86: Extract register number encoding to separate file
x86: Move ModR/M and SIB encoding to encode.h
x86: Move common atomic ops to atomic.h
x86-64: Remove 'atomic_t' redefinition
x86: Fix pointer cmpxchg() on 64-bit
x86: Generic instruction encoding
torture: Add script for comparing DaCapo JVM performance
cafebabe: Remove 'pragma once' from header files
vm: Remove unused variables from vm/thread.c
boehmgc: Auto-detect when running under valgrind
x86: Make called_from_jit_trampoline() more robust
Merge branches 'boehmgc/valgrind' and 'x86/stackframe'
vm: Fix PRELOAD_OPTIONAL handling
vm: Fix Classpath 0.98 support
Merge branch 'master' of git@xxxxxxxxxx:penberg/jato
Revert "jit: fix vtable fixup"
x86: Optimize fixup_direct_calls() locking
x86: Convert INSN_RET to use generic instruction encode
vm: Introduce a -Xnewgc command line option
gc: Fix verbose GC handling in gc_alloc()
x86: Remove volatile from atomic_t definition
jit: Don't ensure class init if already compiled
Makefile: Introduce 'tags' target
Makefile: Fix 'tags' target to append to tags file
vm: Make struct vm_object smaller
torture: Enable dacapo xalan and lusearch tests
torture: Improve dacapo comparison pretty-printing
torture: Cleanup strach directory after each dacapo test
torture: Clean up compare-dacapo script some more
vm: Fix comparison between signed and unsigned
torture: Fix compare-dacapo for xalan
vm: Move ->array_length out of struct vm_object
test: Fix object-stub.c compilation error
vm: Fix up version number confusion
Makefile: Remove references to JamVM
x86-64: Fix REG_EAX references in instruction selector
Makefile: Remove unused OS variable
x86-64: Fix 32-bit cross compile on 64-bit
runtime: Use GNU classpath VMSystem.nanoTime()
runtime: Use switch statement instead of sparse array
Revert "vm: fix condition in transform_method_for_call()"
Revert "vm: implement CallNonvirtualXXXMethod() JNI function family"
Revert "vm: implement mising requirement for CallXXXMethod() JNI
function familiy"
Revert "runtime: make vm_object_to_vm_method() work for
java.lang.reflect.Constructor"
x86: Convert some SSE instructions to use insn_encode
torture: Enable 'eclipse' dacapo benchmark
test: Fix 'make check'
x86: Fix typo in encode.c
x86: Convert more SSE instructions to use insn_encode()
jit: Fail lazily for missing methods
x86-64: Fix backtrace register names
x86-64: Fix '-Xtrace:invoke' on 64-bit
runtime: Use throw_oom_error()
x86-64: Kill 64-bit emitter alias macros
x86: Extract fixup code in a separate file
x86-64: Fix method tracing register clobber
x86-64: Don't clobber XMM registers in signal bottom halfs
x86: Use abort() for crash dumps
x86-64: Fix interface method invocation
test: Fix compilation error
x86: Add register to register instruction encoding
x86: Use insn_encode() for more register to register insns
x86: Immediate to register instruction encoding
x86: Convert more immediate to register insns
x86: Enable encode tests on 64-bit
x86-64: REX prefix encoding
x86: Merge 32-bit and 64-bit emitter tables
x86: Inline GENERIC_X86_EMITTERS to emitter table
x86: Unify INSN_ADD_IMM_REG instruction
x86-64: Improve REX prefix encoding
x86: Fix 32-bit build breakage
x86: Encoding for indirect calls
x86-64: Fix indirect call encoding
x86: Fix 32-bit build breakage
x86: Don't use struct insn operand array
x86: Use ->operand for single operand insns
x86-64: Kill DST_NONE encoding magic
x86: Use 64 bits for encoding table entries
x86: push and pop register encoding
x86-64: Unify push and pop register encoding
x86: INSN_CLTD_REG_REG encoding
x86: INSN_NEG_REG encoding
x86-64: Unify INSN_CLTD encoding
x86-64: Unify INSN_NEG_REG encoding
x86: Better diagnostic for missing emitters
x86: Convert shift instruction encoding
Merge branch 'master' of github.com:penberg/jato
x86-64: Add shift instruction encoding to 64-bit
x86: Fix compilation with clang
jit: Fix compilation with clang
vm: Remove vm_array_fields() wrapper
vm, x86: Cleanup array element offsetting
vm, x86: Cleanup struct vm_object ->fields offsetting
boehmhc: Fix compilation on Darwin
Add valgrind header file to the tree
x86: Add encoding for INSN_PUSH_MEMLOCAL
x86-64: Wire INSN_PUSH_MEMLOCAL for 64-bit
x86: Encoding for INSN_POP_MEMLOCAL
x86-64, test: Fix encoding test breakage
x86-64: wire INSN_POP_MEMLOCAL for 64-bit
regression: Fix warning in MethodTest
regression: Fix warnings in BranchTest
jit, lib, vm: Include stdlib.h for malloc()
Add list of open projects in TODO file
x86: movsx and movsz encoding
x86: Remove unused emit_pop_memlocal() function
x86-64: Unify INSN_MOVZX_16_REG_REG encoding
x86-64: Wire INSN_MOVSX encoding on 64-bit
jni: Add GetDirectBufferAddress JNI function
Fix .mailmap to exclude bogus email addresses
Makefile: Use -MD to generate dependencies and objects
Makefile: Be quiet about entering to directories
Makefile: Sanitize "make clean" output
x86: Fix CALL_REG LIR tracing
jit: Optimize nr_bblock() function
jit: Dominance frontier computation for SSA form
Makefile: Cleanup object file declarations
boehmgc: Fix GCC build options
Makefile: Use Jato to run Jasmin
Kill obsolete regression testing script
Drop valgrind installation requirement
Update README file
Add COPYING file and update GPLv2 URL in LICENSE
Jato v0.1.1
torture: Fix Dacapo URL
torture: Fix JUnit URL
x86: Format do_native_call() inline assembly
x86: Use symbolic operands for inline assembly
x86: Extract native call argument marshaling
x86: Use C code to call vm_enter_vm_native()
x86: Add helper macros for do_native_call()
x86: Implement native_call() for J_FLOAT and J_DOUBLE
vm: Improve GNU Classpath discovery error reporting
reflection: Add stub for VMClassLoader#resolveClass()
vm: Parse InnerClasses attribute of classes
reflection: Implement VMClass#getDeclaringClass()
vm: Parse Exceptions attribute of methods
reflection: Implement getExceptionTypes() methods
Merge branches 'x86/call', 'runtime/reflection' and
'runtime/classloader'
torture: Enable Jython in DaCapo benchmarks
Makefile: Don't use Jato for Jasmin on x86-64
Tomek Grabiec (88):
vm: use vm_free() to free memory allocated with vm_alloc()
boehmgc: fix boehmgc under valgrind
vm: disable registration of finalizers for now
x86: add support for some atomic operations and memory barrier
operations
runtime: add missing vm_class_ensure_object()
vm: implement relaxed-lock protocol for monitors
runtime: fix native_vmclass_get_declared_constructors()
runtime: fix off-by-one error in
native_vmstackwalker_getclasscontext()
runtime: implement sun.misc.Unsafe.putObject()
runtime: implement sun.misc.Unsafe.park() and unpark()
runtime: fix bug in native_unsafe_park()
jit: fix vtable fixup
vm: remove unnecessary memory barriers in relaxed-lock
vm: speed up -Xtrace:method
vm: fix argument parsing
vm: cleanup in jit/exception.c
jit: exception trace should not be filtered
vm: introduce helpers for exception throwing
vm: introduce vm_object_alloc_array_of() helper
vm: use appropriate class loaders for super classes and
implemented interfaces
vm: convert class name to dot form before calling external
classloader
vm: fix is_primitive_array() and vm_class_get_array_class()
vm: add stub for VMThread.nativeSetPriority()
runtime: implement java.lang.reflect.VMArray.createObjectArray()
runtime: implement VMRuntime.maxMemory()
vm: fix bug in vm_object_check_array()
vm: remove busy waiting in vm_thread_interrupt()
jit: remove fixup_static() call from jit_magic_trampoline()
vm: introduce -Xtrace:gate <regex>
jit: make signal_new_*() functions take printf-like arguments for
message construction.
jit: test whether object is throwable and throw error if it is not.
jit: cleanup exception throwing
vm: move exception_holder to struct vm_exec_env.
jit: move new_exception() to jit/exception.c
vm: remove unnecessary memory barriers.
vm: fix bug in assuring .object of struct vm_class
vm: fix bug in unwrap()
runtime: implement VMConstructor.getModifiersInternal()
jit: use light weight locking in trampoline
jit: fixup vtable entry for the class of this when in invokevirtual
test: fix make check breakage
vm: use compile lock in class initialization
vm: Introduce -bootclasspath which allows to explicitly set the
boot classpath
vm: implement JNI functions: GetPrimitiveArrayCritical and
ReleasePrimitiveArrayCritical
vm: define native for VMMethod.getReturnType()
vm: optimize stack trace filling
vm: introduce vm_call_method_this() helper
vm, lib: add missing list node initializers
vm: add missing include in preload.h
vm: preliminary support for weak, soft and phantom references
vm: Make hash-map allocate GC-neutral entries and use strong
references for interned strings.
vm: free memory of thread specific structures on collection of
VMThread
vm: create posix thread in detached state
vm: throw error if native thread creation fails
vm: document memory allocate functions
vm: define default value for java.home property
vm: add missing memory barrier in vm_object_unlock()
vm: print stack trace for each thread in respond to SIGQUIT
vm: move slas_to_dots() and dots_to_slash() to vm/utf8.c
vm: fix class names for arrays in vm/preload.c
vm: use offsetof() instead of sizeof()
vm: use bootstrap classloader to load bootstrap classes only
vm: fix array class loading
vm: fix primitive class names
vm: implement JNI function AllocObject
vm: implement JNI function FromReflectedMethod
runtime: make vm_object_to_vm_method() work for
java.lang.reflect.Constructor
vm: implement mising requirement for CallXXXMethod() JNI function
familiy
vm: implement CallNonvirtualXXXMethod() JNI function family
vm: fix condition in transform_method_for_call()
runtime: make vm_object_to_vm_method() work for
java.lang.reflect.Constructor
vm: implement mising requirement for CallXXXMethod() JNI function
familiy
vm: implement CallNonvirtualXXXMethod() JNI function family
jit: fix copy_exception_handler()
jit: throw error if trampoline called for method for which
compilation failed
jit: allow compilation unit recompilation in jit_magic_trampoline
vm: Call java.lang.Class constructor in
native_vmclassloader_defineclass()
vm: use vm_class_get_field_recursive() in
vm_jni_common_get_field_id()
jit: cleanup in jit_magic_trampoline()
vm: implement CallXXXMethodV JNI function family
vm: implement isSameObject() JNI function
vm: implement GetStringLength() JNI function
vm: implement java.lang.reflect.Field.getInt()
vm: handle case when java.lang.ref.Reference is resurected in GC
cycle
vm: fix vm_call_method_this_a() when method comes from interface
class
jit: throw exceptions occurred during compilation
vm: declare native handler for java.lang.reflect.VMField.getInt()
vm: fix memory leak in classloader_load()
Vegard Nossum (1):
x86: Fix bottom half FPU state clobbering