Isla

Ubuntu-20.04

Isla is a symbolic execution engine for Sail, as well as an anagram.

It can be used to evaluate the relaxed-memory behavior of instruction set architectures specified in Sail, using an axiomatic memory model specified in a subset of the cat language used by the herd7 tools. For example:

Message passing example

It can also be used for test generation, generating simplified semantics (summaries) for concrete opcodes, as well as many other possible use cases.

Build

Currently tested with (stable) Rust 1.39: cargo build --release

By default we require that z3 is available as a shared library. On Ubuntu 20.04 LTS and above this should be available by just running apt install z3. However the version of z3 that is available in older Ubuntu LTS versions (and likely other linux distros) is quite old, so you may experience link errors in that case. The build.rs script is configured so it can use a libz3.so shared library placed in the root directory of this repository. If this is done then LD_LIBRARY_PATH must also be set when executing so that the more recent z3 library is used.

Alternatively, you can run ISLA_STATIC_Z3=y cargo build --release and it will build an executable with z3 statically linked, by checking out and building an appropriate version of z3 as a static library. See the vendor.sh and build.rs scripts for how this is done. This will take a long time however!

Isla interprets IR produced by Sail. To generate this IR in the correct format a tool is available in the isla-sail directory. Building this requires various arcane OCaml incantations, but mostly one can follow the Sail install guide here, followed by the instructions here. It will only work with the latest HEAD of the sail2branch in the Sail repository.

For litmus tests in the .litmus format used by herd7 there is another OCaml tool based on parsing code from herd7 itself in the isla-litmus directory, which translates that format into a simple TOML representation. This OCaml program is standalone and does not depend on any libraries, and should build with dune >= 1.2.

Project structure

Funding

This software was developed by the University of Cambridge Computer Laboratory (Department of Computer Science and Technology), in part under DARPA/AFRL contract FA8650-18-C-7809 ("CIFV"), in part funded by EPSRC Programme Grant EP/K008528/1 "REMS: Rigorous Engineering for Mainstream Systems", and in part funded from the European Research Council (ERC) under the European Union’s Horizon 2020 research and innovation programme (grant agreement No 789108, "ELVER").