We have tested verification with the following setup:
- Linux Ubuntu 17.10
- LLVM 5.0.0
- Z3 4.5.0
- Python 2.7.10
make hv6-verify
:
Runs the verification scripts for the hv6 kernel. This includes building the kernel
into LLVM IR, translating the kernel to Python using Irpy, and invoking hv6/spec/main.py
.
Individual tests can be run, for example, to run just the sys_set_runnable
test, invoke:
make hv6-verify -- -v --failfast HV6.test_sys_set_runnable`
make irpy/test
:
Runs the Irpy test suite, which compares symbolic execution results to running the C code
directly.
hv6/
:
Contains the implementation of the hv6 kernel
hv6/spec/
:
Contains the specification for the hv6 kernel
irpy/compiler/
:
Contains the implementation of the IR -> Python compiler used for
symbolic execution
irpy/libirpy/
:
Contains the Python library and resources for performing symbolic
execution over Python generated by the Irpy compiler
A few quick pointers:
- state-machine specification:
hv6/spec/kernel/spec/specs.py
- declarative specification:
hv6/spec/kernel/spec/top.py