Arm has released Morello Instruction Emulator 2.0 on 28th of July 2022. What are the main changes and improvements that are included in this release?
This release brings several significant changes some of which break backward compatibility.
First of all, starting with the 2.0 version the tool comes in form of an installer. It is a Bash script that will guide a user through EULA acceptance and allow to choose destination directory. For automated use cases such as when Morello IE is used as part of CI, you can indicate EULA acceptance using command line argument --i-agree-to-the-contained-eula.
With the development of C libraries supporting Morello (for example, Morello port of Musl C library), there is no need any more to support purecap Morello applications that are linked to a non-Morello C library. This interoperability layer has been removed from the emulator along with a number of command line options that controlled it.
User guide has been updated accordingly, outlining the changes to the command line options and listing deprecated options.
Metrics collected by the tracer module have been re-worked and extended allowing more precise measurements of your Morello applications performance. It is now easier to control the scope of tracing because relevant command line options accept symbol names with optional offset. For example,
morelloie -trace -fr fun+0 -to fun+128 -- ./app
This is similar to how a break point can be specified using the -break option of the debugger module. This module has been improved to better support debugging of dynamically linked Morello applications. You will be able to see which modules are loaded by your applications and which symbols belong to each of the modules. This aims to simplify finding bugs and sources of errors.
This tools is based on DynamoRIO framework which has been updated to version 9.0. This has brought in recent improvements of encoding and decoding of AArch64 instructions.
You will also notice improved help information (available via --help option). There is only one launcher binary that can also load custom instrumentation clients.
We have fixed a number of bugs and improved performance related to handling of LDXR / STXR regions. One of the most prominent fixes concerns how emulator handles signal and thread cancellations.
You can use the tool to run, trace and debug purecap Linux applications that use threads and shared libraries. Have a go!