SableVM release news. * Version 1.13 ============== - Updated the class library to the GNU Classpath 0.19 release. - Fixed internal libffi on ia64. - Fixed possible interpeter crashes on ia64. - Other small bugfixes. * Version 1.12 ============== - Added libffi and libpopt to the sources (system-wide installations are used if found). - Fixed write barriers for generational garbage collector. - Imported GNU Classpath 0.16 release (plus later fixes). - Disabled inlined engine on alpha. - Added jar-sablevm wrapper for fastjar. - Fixed NaN -> int conversion. - Ensured inlined engine works even when user sets CFLAGS for compilation. - Improved AIX support. - Improved Cygwin support (but not in SableVM SDK). - Fixed some bugs. * Version 1.11 ============== - Fixed many important bugs of version 1.1.10. - Imported GNU Classpath CVS snapshot as of March 12, 2005. - Added debugging traces on assertion failures in stop/resume java transitions, and fixed revealed bugs. - Added assertions to check that the env pointer is valid in JNI calls. - Implemented non-blocking locking, and used it to solve a hashcode bug. - Solved many subtle bugs resulting in incompletely initialized threads and stack corruption. - Cleaned up suspend/resume code. - Fixed various other minor bugs. - Added javac-sablevm wrapper for jikes and javac in java home dirs. - Added creation of rt.jar symlink to libclasspath.jar. - Transformed the staging development branch into the development trunk, and used new release numbering scheme. * Version 1.1.10 ================ - Imported the code of GNU Classpath 0.14. - Implemented most of the missing JNI 1.2 functions. - Implemented the new JNI 1.4 nio related functions. - Added svnclean target to makefile. - Added the m4svm_parse_attribute_elseifexternal macro to handle attributes with full package prefixes. - Fixed the java-sablevm wrapper to better handle LD_LIBRARY_PATH, -Djava.library.path and CLASSPATH setting. - Disabled the timezone setting in java-sablevm wrapper - classpath should now do it on its own. - Fixed Object.wait() when timeout is specified. This fixes Ant pauses. - Changed _svmm_fatal_error() to actually print the function name, when possible. - Added thread IDs to verbose instruction output - Implemented Java_java_lang_VMRuntime_[free|total|max]Memory(). - Implemented basic JDK home support. - Fixed various bugs. * Version 1.1.9 =============== - Added the necessary support to run both Eclipse 2 and Eclipse 3 without using external libraries. Instructions are available at http://sablevm.org/wiki/Eclipse . - Merged code from GNU Classpath 0.13 release. - Improved error messages related to exceptions at bootstrap (ie. binding to non-existant native methods). - Implemented some missing JNI functions. - Added some missing system-dependant Java properties. - Enabled "real life brokenness" option by default to better handle native code not adhering to the Java specs. - Improved cross-compiliation support. - Updated manual pages. * Version 1.1.8 =============== - Added the necessary support to run both Eclipse 2 and Eclipse 3 (using the xerces and xalan libraries). Instructions are available at http://sablevm.org/wiki/Eclipse . - Added -Xgnuclasspath:/dir/ectory option to java-sablevm wrapper. This allows for running SableVM with an unmodified GNU Classpath out-of-the-box using an override .jar provided daily at http://sablevm.org/download/snapshot/ . - Imported a new GNU Classpath CVS snapshot as of December 28, 2004. - Implemented some missing JNI functions needed by qt/java. - Set BOOTCLASSPATH in java-sablevm to help jikes find our libs. - Wrapped the exception thrown by a constructor or a method invoked through reflection in an InvocationTargetException instance. - Added ProtectionDomain handling for classes loaded via j.l.ClassLoader. - Started to use URLClassLoader instead of gnu.j.l.SystemClassLoader, which apparently was used by us exclusively. - Added sablevm.verbose.exit bootstrap property to dump stack trace on System.exit(). - Added sablevm.verbose.exceptions bootstrap property to dump stack trace on every thrown exception. - Enabled GCC unused and long-long warnings, then fixed tons of warnings. - Implemented [Get|Release]PrimitiveArrayCritical. - Solved a class loading related deadlock. - Fixed a VMThread.sleep bug. - Passed the class name as a parameter to LinkageError and ClassCircularityError in java.lang.ClassLoader. - Added function name as message to UnsatisfiedLinkError for missing native functions. - Implemented various other improvements. - Fixed various other bugs. * Version 1.1.7 =============== - Imported new GNU Classpath CVS snapshot as of Sun Oct 10 18:00:00 UTC 2004. - Added handling of Jar/Zip files on boot classpath (closes BUG:2). - Provided user-friendly failure messages for bootstrap problems. This should get rid of the hated "sablevm: cannot create vm". - Allowed for multiple elements and prepending/appending to boot class path. - Added --with-profiling switch to make most functions non-"static". - Made sablevm-classpath install its files in more standard locations. - Explicitely disallowed compilation of classpath with gcj or kjc (it never worked reliably). - Made jikes and gcc be less verbose by default (to avoid confusion). - Removed some obsolete code from various places. - Added new Generational Garbage Collector ("experimental", available on request, by passing --with-gc=gencopy to configure). - Made several bugfixes of: - JNI methods not returning NULL on errors (closes BUG:12). - IsInstanceOf always returning JNI_FALSE (closes BUG:63). - A copy&paste mistake in PopLocalFrame (closes BUG:62). - Several JNI methods not returning NULL on errors (closes BUG:12). - IsInstanceOf always returning JNI_FALSE (closes BUG:63). - "New array" memory allocation size overflow (closes BUG:8). - Out-of-source builds (closes BUG:55). - Handling of 'double' values on ARM. - FPU in 64-bit precision mode on Linux / Intel x86 (closes BUG:1). - F2L, F2I, D2L, D2I not checking for overflows (closes BUG:54). - SIGPIPE killing the VM (closes BUG:51). - GNU make detection on non-GNU/Linux platforms. - Case-insensitive grepping for "Main-Class:" string in MANIFEST.MF. * Version 1.1.6 =============== - Synchronized sablevm-classpath with the latest GNU Classpath CVS (post 0.10 release) as of July 10, 2004. - Improved AWT and Swing support. - Added additional checks to autogen.sh for FreeBSD. - Added new DecoderUS_ASCII, Spring and SpringLayout classes. - Added a sablevm.verbose.synchronization (DEBUG) option to help debugging deadlocks. - Improved TimeZone handling. - Added detection of non-GNU-compatible "make" to issue warnings and errors appropriately. - Added useful additional information in stack dumps. - Added new documentation. - Fixed various bugs. * Version 1.1.5 =============== - Synchronized sablevm-classpath with the latest GNU Classpath CVS as of May 29, 2004. - Improved the support for Ant 1.6. - Switched to libtool handling to find the right library suffixes. This helps some platforms like OpenBSD and Cygwin. - Fixed a corner case problem with class loading. - Made some other small bug fixes. * Version 1.1.4 =============== - Updated sablevm-classpath with the recent GNU Classpath 0.09 release and later GNU Classpath CVS changes as of May 4, 2004. - Improved support for AWT and Swing. - Eliminated the dependency lt_dlopen(NULL) which seem broken on some platforms such as Cygwin and some *BSD. - Switched to new, complete implementation of VMProcess/Process from GNU Classpath instead of using our own previous partial implementation. - Added x86_64 (AMD64) support to the already supported 8 other architectures of Debian GNU/Linux (alpha, hppa, i386, ia64, m68k, powerpc, s390, sparc). The support for the remaining mips and mipsel architectures of Debian is apparently implemented but it has not yet been confirmed. - Improved autodetection of build parameters on non-GNU/Linux systems. This includes selection of dynamic libraries, availability of m4 preprocessor and auto-disabling "signals for exceptions" on platforms that don't seem to support signals. - Made sure that the m4 preprocessor will not be needed to build from sablevm-*.tar.gz distribution files. m4 is only required to build directly from a snapshot of the Subversion repository. - Updated and improved manual pages. - Made some other little improvements and applied a few bug fixes. * Version 1.1.3 =============== - Cleaned up build process so that "./configure ; make ; make install" works out of the box for both sablevm-classpath (as it does for sablevm). * Version 1.1.2 =============== - Uses GNU Classpath 0.08+CVS. - Various minor bugfixes and enhancements. * Version 1.1.1 =============== - Works now with GNU Classpath 0.08. - Implemented Thread.interrupt() and related methods. - Other small bugfixes and improvements. * Version 1.1.0 =============== - SableVM now uses a much newer version of GNU Classpath. - many bug fixes, and feature enhancements (such as semi-automatic inlinability customization). * Version 1.0.9 =============== - Port to various Debian architectures. - Port to Mac OS X. - Bug fixes. * Version 1.0.8 =============== - Bug fixes. * Version 1.0.7 =============== - Port inline-threaded engine to ia64 and alpha. - Get SableVM to execute classes compiled using Jikes 1.18. - Minor bug fixes. * Version 1.0.6 =============== - Port to PowerPC - Add more reflection hooks. * Version 1.0.5 =============== - Port to ia64. - Minor bug fixes. * Version 1.0.4 =============== - Work around the libffi header bug by defining new configure macros. - Implement _svmf_iflush() for processors with distinct data and instruction caches. - Minor bug fixes. * Version 1.0.3 =============== - Fixed configure.ac to select an inline-threaded interpreter engine by default on i*86. The 1.0.2 version was erroneously defaulting to a slower direct-threaded engine. - Collect some additional interesting statistics (when STATISTICS is defined in configure.ac, of course). * Version 1.0.2 =============== - SableVM is ported to the Alpha 64 bits architecture, thanks to the effort of Grzegorz Prokopski . It took him 24 hours, and the "diff" size was 25 lines. :-) What port is next? - Some of the few holes left in JNI and in reflection native code have been filled. * Version 1.0.1 =============== - SableVM now waits until all non-daemon threads are died before quitting. - SableVM is now known to run all SPECjvm98 benchmarks, SableCC 2.17.3, and Soot 1.2.3. - Convenient build scripts have been added. * Version 1.0.0 =============== - Threaded interpreter engine in three flavors: - inline threaded (Requires GNU C) - direct threaded (Requires GNU C) - switch threaded (pure ISO C + POSIX) - Two-word object header. ("java.lang.Object" instances are 2 words long, including the hashcode, the lock, the vtable, and additional bits). - Two flavors of object layout: bidirectional and traditional. - The bidirectional object layout allows for tracing an object, at GC time, without accessing any data outside the object (vtable, type structure), in most cases. Best effort has been made in the traditional layout to minimize external access. - Precise stop-the-world copying garbage collector. Heap parameters are specifiable on the command-line (properties). - Stop-the-world uses regular non-atomic check operations (except around native calls). Threads running native code are considered "stopped" from the VM's point of view. - Minimization of regular checks by only applying them on back jumps to basic blocks that do not include operations like "new", and "invoke*", which already contain a check. - Efficient locals map data-flow analysis which works in presence of arbitrarily complex jsr / exception mix. - Space efficient stack and local GC maps. - Constant time access to the current stack and local GC map for every frame on the Java stack. - Grow-on-need Java stack size, with command-line (properties) specifiable parameters. - Grow-on-need class-loader memory management, with command-line (properties) specifiable parameters. - "invokeinterface" at the speed of "invokevirtual", using sparse interface vtables without memory loss. Holes in the vtables are recycled on a class-loader basis for storing other data. - Thin locks without spin-locking in case of contention. - A choice of explicit or signal based null checks. Signal based checks cost 0 processor cycles on success, but can be expensive in case of exceptions. Also, signal based check increase the cost of native->Java method invocation (the cost of a "siglongjmp"). - Java based "application class loader" (or system class loader), which allows for putting .jar files on the classpath. - Support for Runtime.traceInstructions/traceMethodCalls in the debugging version of the interpreter. - Easily readable/debuggable code, using explicitly generated commented source files for repetitive code. This is done using a set of simple-to-use m4 macros that can be conveniently hidden in C code (allowing automatic tools like "indent" to work). No need to understand m4 for reading the VM's source code (except if you want to look at .m4[.*] files, which is not necessary). - Licensed under the terms of the GNU Lesser General Public License (LGPL). - And more, for your pleasure!