Hi all! Jato 0.2 release is now available! Jato is an open source, JIT-only virtual machine for Java that aims to support the latest JVM specification. It can currently run many Java applications on 32-bit x86 Linux machines such as Eclipse. What's new in this release: - Jython and JRuby start up under the VM (requires GNU Classpath CVS HEAD) - Annotation support (Pekka Enberg, Nikhil Sarda) - More missing JNI APIs implemented (Joonas Reynders, Nikhil Sarda) - More missing reflection APIs implemented (Nikhil Sarda) - Linux/x86-64 port fixes (Eduard - Gabriel Munteanu, Sergey Mashkov, Pekka Enberg) - Linux/i386 bug fixes (Tomek Grabiec, Vegard Nossum) - SSA form bug fixes (Ana-Maria Farcasi) - Darwin port fixes (Michael Tremel) NOTE NOTE NOTE! You're strongly encouraged to use GNU Classpath CVS HEAD because it has important Jython and JRuby compatibility fixes that are not part of any release. There's a Github mirrof the GNU Classpath here for people who don't want to use CVS: https://github.com/penberg/classpath The source code for Jato is available for download here: http://www.kernel.org/pub/software/java/jato/jato-0.2.tar.bz2 You can also get 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 You can also report problems on Github: https://github.com/penberg/jato/issues For more information, please check out the Jato home page: http://www.jatovm.org/ Pekka --- Changes from v0.1.1 to v0.2: ---------------------------- Ana Farcasi (3): jit: fix initialization of a compilation unit test/unit: Added test for dominance frontier sets arch/x86: Fix print_jmp_memindex Ankit Laddha (1): arm: Add dummy functions to make Jato link on ARM Balagopal (1): vm: Add option -Xtrace:vtable for tracing all vtables Eduard - Gabriel Munteanu (9): x86-64: fix unwind emitter Add DEBUG option to the build system. New section on GDB support in Documentation/debugging.txt Discover GNU Classpath 0.98 on Gentoo x86-64: handle 32-bit imm movs x86-64: set the vm_type in args_map_assign() x86-64: fix regparm allocation for JNI arguments x86-64: fix float / double returns x86-64: fix invoke result propagation for float / double Farcasi Ana-Maria (4): jit: Fix crash in do_compute_dfns() vm: Fix -Xssa command line option parsing jit: Add tracing for SSA data structures x86: fix print_jmp_membase Joonas Reynders (36): runtime: Implement VMRuntime#traceMethodCalls tests: Introduce JNI test case Added JNI roundtrip tests for basic types. Float and double fail jni,test: Add basic instance roundtrip test to JNITest jni,test: Add JNI array types and roundtrip tests jni: Convert part of the JNI API to correspond the JNI spec JNI refactoring, jnienv methods 26-34 JNI CallXxxMethod-function names refactored to spec JNI CallNonvirtualXxxMethod-function names refactored to spec jni get and set field method names refactored according to spec JNI call static method function names refactored according to spec jni: JNI_{Get|Set}Static*Field API refactoring JNI function names 164-175 refactored according to spec Refactor the remaining JNI 1.1 function names JNI 1.2 and forward function names refactored according to spec Final refactoring of JNI functions, jvalue and const fixes jni: Refactor java_vm to JavaVM as per JNI specification Functional test for JNI GetVersion vm,jni: Moved Java and JNI version constants to java-version.h Remove unused JNI guard page mechanism vm: Fix defaultJNIEnv initialization and add test vm,jni: JNI_DefineClass implementation and test test/functional: Fixed java formatting test/functional: Add JNI FindClass tests Add a simple functional test for broken class files vm: Add debug printing functions runtime: java.lang.reflect.Method support for ToReflectedMethod and FromReflectedMethod runtime: java.lang.reflect.Field support for JNI ToReflectedField and FromReflectedField vm: java.lang.Object support for debug printing runtime: Move struct vm_method helpers to reflection.c runtime: Refactor vm_field to java.lang.reflect.Field wrapping jni: JNI GetSuperclass implementation and tests test/functional: Add tests for JNI isAssignableFrom test/functional: Add tests for JNI Throw function test/functional: Add tests for JNI ThrowNew function test/functional: Add tests for JNI ExceptionOccurred and ExceptionClear functions Karim Osman (1): Update README file Michael Tremel (2): vm: Use pthread_{get|set}specific() for vm_get_exec_env() x86: Make backtrace.c system-dependent Nikhil Sarda (26): runtime: Implement field annotations jit: Replaced list with hashmap for bytecode subroutine lookup vm: Debug printing supports fields. vm: Refactored out tests for reflection API for fields from MethodTest.java into FieldTest.java test/integration: Completed dsub, dmul, ddiv tests. test/integration: Added tests for bytecodes frem, fneg, drem and dneg. test/integration: Add test cases for fadd, fsub, fmul and fdiv bytecode instructions. test/integration: Added tests for the bytecodes aconst_null, bipush and sipush. test/integration: Added tests for bytecodes ireturn, freturn, dreturn, lreturn and areturn. test/integration: Added test for bytecode goto_w. test/integration: Added tests for bytecodes ifnull and ifnotnull. vm: Added getShort() method for java.lang.reflect.Field test/integration: Implemented tests for bytecodes fconst_0, fconst_1, fconst_2 and dconst_0, dconst_1. test/integration: Added test for bytecode lcmp test/integration: Added tests for bytecode fcmpl, fcmpg, dcmpl and dcmpg. test/integration: Added tests for bytecodes if_icmpeq, if_icmpne, if_icmplt, if_icmpge, if_icmpge, if_icmpgt, if_icmple. test/integration: Implemented test for bytecode swap. test/integration: Implemented tests for bytecodes i2d, i2l, i2f, i2s, l2i, l2f, l2d, f2i, f2l, f2d, d2i, d2l, d2f. vm/reflection: Added getFloat, getDouble, getByte and getChar methods for java.lang.reflect.Field vm/reflection: Added getBoolean method for java.lang.reflect.Field vm/reflection: Added getDeclaredAnnotations() for Method. vm/reflection: Implemented getDeclaredAnnotations() for Field. vm/reflection: Added parameter annotations. jni: Added isInstanceOf implementation and tests. reflection/annotations: Field annotations are lazily initialized. reflection/annotations: Method annotations are lazily initialized. Pekka Enberg (279): jni: Add support for weak references x86: Fix clobber list in arch/x86/call.c x86: Cleanup duplicate code in emit_jni_trampoline() x86: Fix clobber list in do_native_call() cafebabe: Cleanup inner classes attribute parsing regression: Fix type safety problem in MethodTest vm: Use ZIP_FL_NOCASE to locate manifest Revert "vm: Use ZIP_FL_NOCASE to locate manifest" vm: Improve error message if "jato -jar" fails jit: Fix up JNI arguments in HIR x86, jni: Cleanup JNI trampolines x86-64: Fix args map for JNI methods x86-64: Remove unused vm_native_call() function x86, vm: Don't use gregset_t in core code x86: Cleanup signal header file x86: Move save_signal_registers to signal_{32,64}.h x86, sys: Move Linux specific code under sys/linux-x86 darwin, x86: Fix build error due to missing Makefile Makefile: Define _XOPEN_SOURCE for Darwin x86-64: Fix broken build x86-64: Fix XMM register corruption in signal-bh.S x86-64: Valgrind workaround for EXPR_CLASS_FIELD x86-64: Fix 64-bit register push and pop codegen x86-64, jni: Add support for JNI trampolines x86: Fix broken build on 32-bit x86-64: Cleanup JNI trampolines x86-64: Fix typos in jni.S x86: Fix push and pop REX_B prefix x86: Unify __emit_push_reg() and __emit_pop_reg() x86: Unify __emit_push_imm() helper x86-64: Fix JNI trampoline stack offsets x86-64: Fix 64-bit JNI trampolines vm: Fix ->args_map for interface methods x86-64: Wire INSN_AND_REG_REG encoding x86-64: Wire INSN_OR_REG_REG encoding x86: Convert INSN_SAR_IMM_REG to use insn_encode x86-64: Wire INSN_IMM_REG encoding Documentation/debugging.txt updates runtime: Implement VMRuntime#traceInstructions() vm: Fix arraycopy() error handling runtime: Extract java.lang.VMSystem code runtime: Use JNI types for VMSystem APIs runtime: Fix VMSystem function naming convention runtime: Extract VMThread code jni: Implement NewDirectByteBuffer function jni: Implement JNI_ExceptionCheck function tools: Expression generator tool x86-64: Don't use REX_W prefix for PUSH/POP x86: Unify EXPR_CLASS_FIELD on 32-bit and 64-bit x86: Remove duplicate EXPR_CLASS_FIELD rule x86: Use J_NATIVE_PTR for get_var() x86-64: Fix EXPR_INSTANCE_FIELD for java.lang.ref.Reference x86-64: Fix PUSH and POP insn_encode() Makefile: Use GCC for determining ARCH Makefile: Fix gcc-arch.sh on Darwin x86-64: Reformat inline asm in arch/x86/call.c x86-64: Use inline asm symbolic operands in call.c x86: Kill unused fixed reg in EXPR_FVALUE vm: Cleanup unnecessary <vm/thread.h> includes vm: Introduce -Xnosystemclassloader option jit: Fix missing include in jit/gdb.c x86: Implement INSN_JMP_MEMBASE using insn_encode() x86: Implement INSN_JMP_MEMINDEX using insn_encode() x86-64: Fix high registers for insn_encode() x86-64: Fix operand_is_reg high() jit: Fix get_stack_args_count() Revert "jit: Fix get_stack_args_count()" jit: Fix get_stack_args_count() for JNI methods test: Fix JIT unit test breakage x86-64: Fix some eax/edx pairs on 64-bit jit: Make insert_arg() static jit: Fix args map indexing vm: Fix return value if classloading fails vm: Fix Jato exit status if killed by unhandled exception x86-64: Use insn_encode() for INSN_SUB_IMM_REG x86-64: Use insn_encode() for INSN_SUB_REG_REG x86: INSN_MOV_XMM_MEMLOCAL encoding x86-64: Use insn_encode for INSN_MOV_XMM_MEMLOCAL x86: Cleanup insn_encode() x86: Encode displacement first in x86_insn_encode x86: Use int32_t for disp and imm in struct x86_insn x86: Fix emitter function types x86: Cleanup struct initialization in insn_encode x86: Fix INSN_MOVSS and INSN_MOVSD names x86: Sort encode_table table in arch/x86/encode.c x86: Kill unused insn_need_disp() arg x86: Cleanup insn_encode() displacement encoding Add GNU Classpath build instructions to README Update GNU Classpath installation instructions x86: Use insn_encode() for INSN_XOR_XMM_REG_REG x86: Use insn_encode() for INSN_XOR_64_XMM_REG_REG x86: Fix XORPS and XORPS constant names x86: Use insn_encode for INSN_MOVSD_XMM_XMM x86: Use insn_encode for INSN_MOVSS_XMM_XMM x86: Kill unused function emit_mov_64_xmm_xmm() x86: Unify __emit_cmp_imm_reg() for 32-bit and 64-bit runtime: Refactor native VMClass code runtime: Move VMClass code to one file vm: Don't store inner classes attribute in struct vm_class Fix "make tags" target to include runtime directory jit: Fix all_exception_handlers_have_bb() runtime: Implement VMClass#getDeclaredAnnotations jit: Optimize struct live_interval size Revert "jit: Fix all_exception_handlers_have_bb()" jit: Split exception handler basic blocks Revert "jit: Optimize struct live_interval size" x86-64: Fix EXPR_TEMPORARY and J_LONG jit: Fix new_exception() constructor lookup jit: Fix assign_temporary for 32-bit x86: Don't use CONFIG_32_BIT in instruction selector x86: Use JNI trampoline to pass JNI env pointer vm: Use vmc->nr_interfaces in itable_add_entries() Makefile: Add cafebabe directory to "make tags" runtime: Implement Class#isLocalClass runtime: Implement Class#isMemberClass runtime: Fix Class#getModifiers for inner classes vm: Cleanup duplicate get_system_class_loader() function x86: Improve vtable lookup code linux,x86: Dump code on SIGSEGV x86, jit: Move x86 specific disassembler to arch/x86 arm: Fix scripts/gcc-arch.sh for arm arm: Empty architecture Makefiles arm: Dummy architecture headers tools: New regression test suite runner test: Improve test runner to use -Xnosystemclassloader x86-64: Enable some regression tests x86-64: Enable all passing tests x86: Enable x86-64 marked regression tests on 32-bit x86: Enable rest of the regression tests on 32-bit Makefile: Use tools/test.py for regression tests test: Fix MMIX register names Update Ubuntu build instructions x86: Use insn_encode() for INSN_MOVSS_MEMLOCAL_XMM x86: Use insn_encode() for INSN_MOVSD_MEMLOCAL_XMM x86: Use insn_encode() for INSN_MOVSD_XMM_MEMLOCAL x86-64: Encoding for some MOVSS and MOVSD instructions vm: Improve command line compatibility vm: Implement "-Xbootclasspath/a" command line regression: Add invokevirtual test case regression: Improve MethodInvokeVirtualTest jit: Allocate fixed vars lazily jit: Fix caller-saved register intervals jit: Use "uint8_t" for ->reg in struct live_interval regression: Add progress indicator to tools/test.py Makefile: Fix "make -j" build regression: Run tests in parallel Makefile: Use Jato with ECJ when compiling functional tests test/functional: Move regression tests to new directory Makefile: Fix "make check" errors test/unit: Move unit tests to new directory jit: Fix fixed var lazy allocation Fix and cleanup .gitignore vm: Introduce boxing/unboxing helper functions vm: Fix annotation element values for primitives functional/jni: Fix Makefile 'clean' target jni: Fix JNI floating point tests vm: Annotation array value support runtime: Rename runtime.c to java_lang_VMRuntime.c runtime: Implement VMRuntime.runFinalization vm: Preload primitive array classes runtime: Implement Class.getEnclosingMethod vm: Fix annotation array element parsing vm: Fix NOT_IMPLEMENTED error paths in vm/classloader.c cafebabe: Fix multiple element value pair parsing vm: Fix annotation string array element value parsing x86-64: Fix 'make check' target vm,jni: Fix jvalue use in API functions runtime: VMMethod.getAnnotation() stub runtime: Implement sun.misc.Unsafe API methods runtime: Rename unsafe.c to sun_misc_Unsafe.c test/function: Class.getAnnotation tests runtime: Cleanup sun_misc_Unsafe.c test,function: Enable more annotation tests vm: Fix annotation string array element value parsing vm: Fix more annotation array element value parsing Signed-off-by: Pekka Enberg <penberg@xxxxxxxxxx> x86-64: UnsafeTest is broken on 64-bit x86: Separate 32-bit and 64-bit instruction selectors x86-64: Cleanup 64-bit instruction selector tools/test.py: Fix progress bar test count x86-64: EXPR_VALUE instruction selector rule fix x86-32: Cleanup 32-bit instruction selector vm: Fix load_class_from_file() error handling x86,linux: Fix backtrace if IP is zero x86-64: Fix JNI trampoline return value corruption x86-64: Enable more functional tests x86-64: INSN_MOVSD_MEMDISP_XMM instruction encoding x86: Fix INSN_MOVSD_MEMDISP_XMM encoding x86: Fix INSN_MOVSD_MEMDISP_XMM on 64-bit x86-64: Fix JNI method vtable fixup x86-64: Enable passing functional test x86-64: INSN_MOVSD_XMM_MEMDISP encoding x86: Use insn_encode() for INSN_MOVSD_XMM_MEMDISP on 32-bit x86: Cleanup insn_need_sib() function Cleanup README x86-64: MOVSS memdisp instruction encoding x86: Use MOVSS memdisp instruction encoding on 32-bit arm: Add missing include to arch/cmpxchg.h x86: Fix XMM instruction type names x86: SSE instruction encoding for insn_encode() x86-64: Wire up SSE instruction encoding tools/test.py: Remove duplicate test runs tools/test.py: Enable ExceptionHandlerTest on 64-bit Makefile: Introduce LIB_OBJS Makefile: Generate libjvm.a static library Makefile: Extract architecture detection to separate file test/integration: JIT compiler integration test test/integration: Add bytecode markers test/integration: pop bytecode test case test/integration: add .gitignore file jit: Fix pop2 bytecode parsing test/integration: goto bytecode test case test/integration: Integer arithmetic test cases test/integration: lconst bytecode integration tests test/integration: Improve goto bytecode test case test/integration: Long arithmetic test cases x86-64: INSN_XOR encoding on 64-bit x86-64: Use assert() to stub missing rules x86-64: Fix FinallyTest on x86-64 tools/test.py: Enable LongArithmeticTest on x86-64 runtime: Implement VMClass.getDeclaredClasses test/integration: if<cond> bytecode test cases x86-64: Fix OP_DREM and OP_FREM instruction selection vm: Fix long and double annotation array element values vm: Support for annotation element class values vm: Fix class array annotation element values vm: Preload java/lang/Enum.valueOf() vm: Support for annotation enum element values vm,cafebabe: Annotation element value type support vm: Support for annotation array element values vm: Fix vm_object_alloc_array_raw() return value vm: Fix compile error in vm/object.c arm,linux: Add stub sys/signal.h header arm: Add more stub functions vm: Fix Java and JNI version mismatch vm, jni: Cleanup defaultJNIEnv and defaultJNIInvokeInterface tables vm,jni: Use JNI_NOT_IMPLEMENTED in JNI_GetDirectBufferCapacity test/functional: Kill VMClassTest x86-64: Fix EXPR_MULTIANEWARRAY call instruction x86: insn_encode() for FSTP and FSTP_64 Update README x86-64: Wire FSTP AND FST_64 instructions vm: Fix CamelCase name Fix common misspellings x86: Use double-precision rounding mode Makefile: Fix implicit dependency to $(PROGRAM) Makefile: Fix build on x86-64 x86-64: Enable MethodInvokeVirtualTest x86: Fix unwind on 32-bit x86,jit: Fix floating point conversion issues tools/gen: Latest version from Vegard cafebabe: Fix cafebabe_class_init() error handling path test/functional: Improve lcmp test cases vm,runtime: Add support for method annotations vm: Lindent vm/debug.c vm: Don't call is_primitive_array() if loader is NULL test/integration: Add test case for dadd bytecode instruction Makefile: Don't run ECJ under Jato runtime: Fix vm_object_to_vm_field() with GNU Classpath 0.97 jit: Kill asserts from interval_{start,end} functions x86: Optimize reg_supports_type() jit: Optimize alloc_interva() jit: Optimize interval_start() jit: Make struct live_range smaller on 64-bit vm: Initialize super_vtable to shut up GCC x86: insn_encode() for INSN_FLD_MEMLOCAL and INSN_FLD_64_MEMLOCAL x86-64: wire up INSN_FLD_MEMLOCAL and INSN_FLD_64_MEMLOCAL x86-64: Wire up more insns x86-64: Fix OP_DREM and OP_FREM code generation x86-64: Fix OP_FNEG code generation x86-64: OP_DNEG code generation x86-64: Fix EXPR_MULTIARRAY_SIZE_CHECK code generation x86-64: Fix EXPR_VALUE code generation for 64-bit immediates x86-64: Cleanup EXPR_VALUE code x86-64: Fix STMT_STORE code generation runtime: Fix missing include test/functional: Enable ClassTest.testGetEnclosingClass runtime: Rename classloader.c to java_lang_VMClassLoader.c runtime: Rename VMClassLoader native method implementations Jato 0.2 Sergey Mashkov (1): x86-64: Fix Reference.referent field access Tomek Grabiec (11): jato: fix UnsatisfiedLinkError on getExceptionTypes with gnu-classpath 0.97.2 jit: fix SIGSEGV on -Xtrace:invoke-verbose remove junk code vm: set VMThread.vmdata for main thread Fix do_native_call() with -O0 vm: fix relaxed-locking implementation lib: fix free_hash_map() lib: do not use vm_free to free records allocated by malloc() lib: cleanup defining operations on key in hash map lib: hash-map table size auto adjusting jit: use safe iteration when freeing list nodes Vegard Nossum (4): cafebabe: Fix loop variable in cafebabe_attribute_info_init() jit: Fix bug in emulate_lcmp() Fix erroneous initialisation of static final double fields x86: tell valgrind that we changed the JITed code