Verifying x86 semantics
Shell Haskell Coq Racket Python Makefile
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
lib
src
test
.dir-locals.el
.gitignore
.gitmodules
Dockerfile
Makefile
README.md

README.md

SaltShaker is a solver-aided tool that checks, for all possible machine states, that an x86 instruction executed by RockSalt’s Coq x86 semantics behaves according to its instruction specifications extracted from STOKE. SaltShaker verified the RockSalt semantics of over 15,000 instruction instantiations in under 2h, found 7 bugs in RockSalt, and found 1 bug in STOKE. We reported these bugs, and they were subsequently fixed by the respective developers.

Running

Checkout the project with:

git clone --recursive git@github.com:uwplse/SaltShaker

Build with:

docker build -t x86sem .

Verify a couple of instruction variants with:

docker run x86sem

Development

Run development environment console:

docker rm -f x86sem; docker run --name x86sem --entrypoint /bin/bash -v $(pwd):/x86sem -ti x86sem

If you like the fish shell (i do) run:

docker rm -f x86sem; docker run --name x86sem --entrypoint /usr/bin/fish -v (pwd):/x86sem -ti x86sem

Build project in development environment console:

make -C /x86sem

Connect emacs to development environment locally:

emacs /docker:x86sem:/x86sem/src/coq/Compare.v

Connect emacs to development environment remotely:

emacs "/ssh:user@machine|docker:x86sem:/x86sem/src/coq/Compare.v"

Make sure your emacs has ProofGeneral and docker-tramp installed, and enable-remote-dir-locals must be set.