TEMU 2.1.0

TEMU 2.1.0 was released on 2015-11-12.

New Features

  • Command Line Interface Improvements:

    • Variable support, these can be used as parameters to commands. They are set using the var-set command or by assigning them using VAR=VALUE syntax.

    • Default variables can now be taken by some commands. Current default variables include DEFAULT_CPU (used by some CPU commands, e.g. register set and inspection commands), DEFAULT_MACHINE (used by some machine commands) and DEFAULT_RUNNABLE (used by the run, step and time commands). System configs have been updated to assign these variables.

  • Experimental DWARF support. When loading an ELF file, it is possible to add the parameter dwarf=1, this enables experimental DWARF parsing (and a whole lot of terminal output dumping the DWARF records). Currently, there is support in the disassembler command where instead of an address, it is possible to specify func=name, where name is the name of the function to disassemble. E.g: "dis cpu=cpu0 func=main" will dissassemble the main function. Note as this feature is experimental, it is likely that there are bugs (e.g. incorrect parsing, memory leaks, etc), and many parsing errors are currently handled with assert().

  • Added a non-time-based event API. This is used to issue for example trap taken events that the user can intercept. Currently, the following events are defined 'temu.cpuErrorMode', 'temu.cpuTrapEntry' and temu.cpuTrapExit'. Note that there isn’t any standard reporting of these (except the error mode event) and the user should provides his own event handlers in that can report the events.

  • Added GUI based console. A problem with the inline serial console was that it was printing too much info in the T-EMU console window when booting systems with lots of output like Linux. There is now a graphical user interface console with rudimentary VT100 support that also supports console input. This keeps your emulator command window clean from serial output. The GUI console does not log traffic at the moment.

  • GdbServer now available. The GdbServer is available as firstly a library, secondly through a stand-alone tool (temu-gdbserver) and thirdly as a command in the temu command line interface. Note that it is available as a C library, and C libs in the emulator are not seen as API stable. A stable C library may be made available later if there is need for one.

  • Adding Python scripting support to command line interface.

  • Adding cache emulation support. Note that unlike hardware, emulating a cache will slow down the emulation. The cache emulation interfaces and a generic cache model are available through libTEMUMemory. The cache APIs exist to allow the user to do detailed performance analysis and estimate the impact from running with and without caches. Note, that for normal usage, it is best to emulate caches by setting the average waitstates on the RAM and / or ROM models.

    • LEON2, 3 and 4 now support caches in the CPU models. Caches are optional and you do not pay for something that is not used.

    • LEON2SoC is now working as a cache controller to keep taps on flushing bits.

Changes

  • CPU Changes

    • SPARCv8

      • LEON4

        • Add support for NGMP reset values

  • Rebased to LLVM 3.7, giving around 10% performance improvements.

  • Added some custom LLVM optimisation passes (2-3 % extra performance).

Deprecations

  • Logging function temu_logCritical() is deprecated. It is renamed as temu_logFatal()` to more clearly illustrate the intent.

  • temu_MemoryKind is no longer used. The enum will be removed later.

  • temu_MemoryMapIface is deprecated. The interface is no longer used and the function interface is preferred. At present users should not implement their own memory spaces. This may change in the future, but at the moment, all fields in the interface are deprecated and the interface will be removed in the future.