Appendix D Release History ************************** vmips-1.3.2 was released on 20 July 2005. User-visible changes in version 1.3.2 (since version 1.3.1): * A bug was fixed in the code which responded to address-translation exceptions by loading the CP0 Context register. It was loading the wrong virtual page number. * Problems compiling VMIPS with gcc 4.1.x have been fixed. vmips-1.3.1 was released on 5 January 2005. User-visible changes in version 1.3.1 (since version 1.3): * VMIPS now compiles and passes most of its regression tests under Microsoft Windows using Cygwin. There is one known failure (misc-tests/echo), but the failure stems from the testsuite, not VMIPS; I suspect that my old version of Expect is at fault. * The build status report script, `buildstat.sh', has been removed from the distribution. (Since it was broken in version 1.3 and no one complained, we're assuming that no one will miss it much!) * Two bugs in the testsuite that could have led to spurious test failures have been fixed. vmips-1.3 was released on 8 October 2004. User-visible changes in version 1.3 (since version 1.2.2): * The VMIPS code base has been cleaned up substantially. The most important visible effect of this is that VMIPS compiles much more quickly now. * A new, experimental executable-file loader has been integrated. Presently it is only usable for loading ECOFF files into the kernel segments (0x80000000-0xbfffffff). The ROM monitor has a new `call' command you can use to take advantage of this. * Vmipstool can now disassemble binary instructions from the command line, e.g. `vmipstool --disassemble-word '. * The `excmsg' option used to report all exceptions, including things like clock interrupts. This made using `excmsg' in any nontrivial kernel code almost impossible. Now you must also specify 'reportirq' to get reports of interrupt exceptions. * The `haltjrra' option has been removed. * The DECstation 5000/200-compatible CSR device now supports delivery of interrupts from devices attached to CSR interrupt lines, such as the DZ11 serial device. * The DZ11 serial device now supports interrupt-driven I/O properly. It previously only worked correctly if polling was used. * The documentation has received the usual slight adjustments. In addition, the test-suite documentation has been extensively revised and integrated into the programmer's manual. * The options-processing code has been revised slightly to print a better error message when an invalid option is specified. vmips-1.2.2 was released on 23 August 2004. User-visible changes in version 1.2.2 (since version 1.2.1): * A bug in the Makefiles and configure scripts has been fixed, where some files would not be installed if you didn't configure with cross compilation tools (using `--with-mips'). * Vladimir Machulsky found and fixed a bug in the debugger interface, where the register file would be sent to gdb incorrectly. Thanks! * VMIPS will no longer abort and dump core when bad command-line rguments are passed to it. Instead, it will print an error message and exit with a non-zero exit code. * A bug in the command-line option processor was fixed, where using a completely empty `~/.vmipsrc' or the `-F /dev/null' option could cause the options parser to parse garbage, usually resulting in harmless, but annoying error messages. vmips-1.2.1 was released on 26 July 2004. User-visible changes in version 1.2.1 (since version 1.2): * Fixed a bug where delay slot execution could be triggered even when emulating a malformed jr (jump-register) instruction. * Fixed a bug where, upon taking a TLB Miss exception, the ASID of the page that could not be looked up would be overwritten (in the CP0 EntryHi register) with garbage. * Fixed a bug in VMIPS configurations with multiple interrupt devices, where Interrupt Pending bits of the CP0 Cause from previous interrupts could be left asserted even if the device that asserted them had subsequently deasserted them. * Fixed a bug where the memory dump file and ROM file would be opened in text mode. They are now opened in binary mode. vmips-1.2 was released on 26 June 2004. User-visible changes in version 1.2 (since version 1.1.3): * Many documentation updates have been made. Note that the documentation has been relicensed under the MIT license, instead of the GNU FDL. * Many facets of VMIPS are now configurable at runtime, instead of at compile time. For instance: It is now possible to build and install VMIPS without having previously installed MIPS cross-compiler tools. In particular, VMIPS now incorporates the portions of GNU libopcodes used to implement the MIPS disassembler, so linking against an installed version of libopcodes from GNU binutils is no longer necessary. It is now possible to switch the VMIPS CPU from big-endian to little-endian mode or vice-versa using a command-line option. It is now possible to change the name of the configuration file that VMIPS reads on startup using a command-line option. The "-o configfile" option, which never worked, has been removed. * vmipstool now shares command-line processing code with vmips. It also has a new -swap-words option that allows you to byteswap all the 4-byte words in a file. * You can now specify numeric constants in command line options which are multiples of 1024, 1024^2, or 1024^3 using the K, M, or G suffixes. * Several new emulated devices based on the DECstation 5000/200 have been added. In particular, it is no longer possible to disable the serial device at compile time (or with `-o nousetty'), but you can choose whether to use the DECstation serial chip or the SPIM-compatible serial console (or neither) using new command-line options. In addition, the ROM program distributed with VMIPS supports a "boot environment" similar to that provided by the DECstation PROM. The new DECstation-compatible devices have not been comprehensively validated; they should be considered "beta" quality at this point. * There is a new tracing framework you can use to generate runtime execution traces of programs that run in VMIPS. See the documentation of the "tracing" command-line option and the other options that begin with "trace" for more details. * The VMIPS interface to GDB now supports the "remote Z-packet" interface for setting breakpoints. * VMIPS now prints more informative diagnostic messages about the causes of bus errors and interrupts. * You can now use ^C (your terminal's Interrupt key) to stop VMIPS and break into the debugger, if the `-o debug' command line option was set, or ^\ (your terminal's Quit key) to halt VMIPS in an orderly manner at any time. * The `--disable-debug' option to `configure' now strips the compiled VMIPS binaries, although it has been documented to do this for some time now. vmips-1.1.3 was released on 24 October 2003. User-visible changes in version 1.1.3 (since version 1.1.2): * A bug in comparing large immediate constants near UINT_MAX using the sltiu instruction has been fixed. * A bug where the meaning of the `dirty' bit in TLB entries was accidentally reversed has been fixed. * A bug in specifying which bits are treated as writable in the CP0 EntryLo register by the tlbr instruction has been fixed. Thanks to Mingyu Chen for pointing out these last two bugs. vmips-1.1.2 was released on 20 August 2003. User-visible changes in version 1.1.2 (since version 1.1.1): * An instruction that turns on interrupts in the system control coprocessor (coprocessor 0) will no longer immediately take an exception if an interrupt is pending; now it will happen at least one instruction later. * When building VMIPS in debug mode, the coprocessor 0 Cause register may no longer contain random, non-clearable interrupt-pending bits. * The coprocessor 0 Cause register's interrupt-pending and coprocessor-error bits are now correctly updated when an exception is taken. * The VMIPS physical-memory manager will now allow you to place two devices directly adjacent to one another in memory; it used to complain that they overlapped, when they actually did not. * A typo was fixed in the testsuite documentation. vmips-1.1.1 was released on 16 June 2003. User-visible changes in version 1.1.1 (since version 1.1): * A bug involving shifts by 0 or 32 bits (e.g., using instructions like srlv) producing incorrect results has been fixed. * The absence of an FPU attached to coprocessor slot 1 can now be detected by user programs. * The system control coprocessor (coprocessor 0) now returns the correct ID number for the R3000A processor in the PRId register. * Emulation of store-byte and store-halfword operations for emulated devices that only support store-word should now work correctly on byte-swapped configurations. * A bug in vmipstool which caused it to fail to find alternate linker scripts (supplied with the -ld-script option) has been fixed. * A gcc warning caused by a (harmless) comment in asm_regnames.h has been quashed. * A bug where little-endian vmips configurations would dump core when the disassembler was used (e.g., when the instdump option was turned on) has been fixed. * `configure' no longer ignores its -with-mips-include option. vmips-1.1 was released on 14 March 2003. User-visible changes in version 1.1 (since version 1.0.4): * If you are using g++ to compile VMIPS, you must use g++ version 2.95 or later. Also, you must specify the -target option to `configure', with an argument that matches the -target option to binutils `configure'. See `INSTALL'. * VMIPS now supports GNU standard -help and -version options. * The manual now includes improved documentation for using gdb and Insight to control VMIPS, a section on the differences between SPIM's console and the SPIM-compatible console device, a section on proper error reporting from VMIPS extensions, and many other minor revisions. * Using gdb to control VMIPS is now much more robust in the face of errors and exceptions. * VMIPS 1.1 makes it possible to use the 2nd display/keyboard channel of the SPIM-compatible console device, using the `ttydev2' option. * VMIPS now includes a halt device, which can be used to halt the simulator without using a special instruction. * VMIPS 1.1 is much faster than VMIPS 1.0.4. This is due in large part to the efforts of Paul Twohey, who reimplemented the clock and SPIM-compatible console devices, and cleaned up the code a bit. * The VMIPS distribution now includes a regression test suite, based on DejaGNU (replaces the old test_code directory). In order to support this, the formats of lots of random messages that VMIPS prints out have changed. * We now support 64-bit hosts (e.g., Alpha). vmips-1.0.4 was released on 28 April 2002. User-visible changes in version 1.0.4 (since version 1.0.3): * Fixed bug where the first instruction of an interrupt handler would be executed twice in a row. Thanks to Paul Twohey. * Workaround some problems in the way casts are used in VMIPS by specifying -fno-strict-aliasing to gcc in configure; this should help avoid miscompilations for now, until the code can be rewritten for cast-safety. * Fix bug where vmips would dereference a NULL pointer when trying to use a SPIMConsole device with a non-attached serial host. Thanks to Paul Twohey. * Reorder some tests in the SPIMConsole code for a slight speedup when interrupts are turned off. * Fix bug where virtual page numbers were being incorrectly interpreted by the system control coprocessor, resulting in excess TLB misses being generated. Thanks to Sanjeev Datla. vmips-1.0.3 was released on 12 January 2002. User-visible changes in version 1.0.3 (since version 1.0.2): * Fixed bug in debugger interface; TLB translations caused by the debugger trying to access user space could fail if the virtual page number was not 0. * Fixed bugs in the following instructions: lb, lh, lwr, lwl, swr, swl, nor. * Clarified some especially confusing comments in the source code, in one of the test cases, and in the testsuite README. * The sample setup code now halts on all exceptions, including user TLB miss exceptions. * Fixed some warnings compiling xmboot using recent versions of gcc. vmips-1.0.2 was released on 17 December 2001. User-visible changes in version 1.0.2 (since version 1.0.1): * Add warning message to man page directing the interested reader to the Info manual. * New default handling of `-o ttydev' option; manual updated. * /etc/vmipsrc contains only comments by default. These two fixes work around a bug in Darwin select(2)'s tty handling. * Only print host processor endianness if `-o bootmsg' is set. Fixes bug where `-o bootmsg' should (but doesn't) turn this message off. * Remove test_code/testdev.S from the branch. This is a test for a feature (TestDev) which wasn't distributed with 1.0.x. * Comment out extra tokens after #endif in test_code/{sort.c,tester.c}. Fixes bug where gcc 3.0 gives warnings compiling these files. vmips-1.0.1 was released on 27 November 2001. User-visible changes in version 1.0.1 (since version 1.0): * Fixed format-string bug in vmipstool. * Fixed "extra tokens after #endif" warning in sample_code/asm_regnames.h. vmips-1.0 was released on 28 October 2001. User-visible changes in version 1.0 (since version 0.9): * A standard clock device has been added. * The "vmipstool" front end to compilation tools was added, and most of the random scripts lying around have been consolidated into it. * The memory-mapped test device known as "TestDev" has been removed. * Debian and Red Hat packaging files have been added. * The installation procedure has been greatly improved. * The VMIPS manual has been completed. * Many, many bugs fixed as a result of a concerted attempt at testing everything. Doubtless, some bugs still remain. * Some portability fixes. * Dumping of the stack (when registers are dumped) now works. * Many strange messages the debugger backend used to print out have been quelled. Also, killing the debugger connection should no longer cause a crash. * vmips now supports -help, -version and -print-config command-line options. * The SPIM-compatible console device now works better when the host machine is byte-swapped with respect to the MIPS target. vmips-0.9 was released on 9 May 2001. User-visible changes in version 0.9 (since version 20001014): * vmips.debug is no longer built. * Read-only memory is now really read-only. This allowed us to add debugger support for breakpoints in ROM. * Debugger support for exception handling - CPU exceptions are now delivered to your GDB, if it is attached, giving you a chance to poke around before the target is made aware of the condition. * Many tasty configury updates, making it easier to build. * Miscellaneous bugs fixed in many places. * Branch on coprocessor 0 instructions now have defined behavior. * Many places which erroneously had text after #endif in the source have been corrected to use comments instead, allowing you to compile vmips with newer C++ compilers. * Some old test code that used to run at the beginning of every vmips job has been removed, so you will no longer see the familiar messages it printed out. User-visible changes since version 20000517: * Emulating a little-endian MIPS on a big-endian host passes preliminary tests. Build process queries MIPS tools for their endianness automatically. Builds tested on Solaris SPARC, i386 Linux, FreeBSD and HP-UX. Distribution building (gmake distcheck) almost works. User-visible changes since version 19991114: * Polling input and output via the SPIM-compatible console device now work. User-visible changes since version 19990829: * Build processes seeks out MIPS tools; Installation documentation now briefly documents how to build cross tools. User-visible changes since version 19990823: * Spim console documentation completed; first attempt at spim console code. User-visible changes since version 19990801: * Documentation Makefile.in has been built. * Some documentation has been updated. * VMIPS is being adapted to use GNU Autoconf and Automake.