Repository for ASE 2017 paper, "Modular Verification of Interrupt-driven Software".
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.


This repository is about thread modular abstract interpretation (Using the APRON library) for interrupt-driven programs by adopting priority information.

The source code is a modified version from

Right now, all files are not cleaned up including test files.

However, subset of result tables can be printed since some output files are uploaded.


The program is an LLVM opt pass. It is built using CMake. Since we are using CMake, this likely requires LLVM version 3.6.0

Modify the CMakeLists file variable APRON_PREFIX to be the location where Apron is installed

Assuming your LLVM library files are in a standard location (more on this below), simply:

mkdir build
cd build
cmake ../

The result of the build process is an .so file,

If you need to tell CMake where LLVM lives, you need to add the option -DLLVM_DIR, e.g.,

cmake -DLLVM_DIR=/home/chungha/src/share/llvm/cmake ../

The directory passed to LLVM_DIR should be the location where the LLVM CMake files are (e.g., LLVM-Config.cmake).

You also may need to set -DZ3_INC and -DZ3_LIB to the include directory, and library file for Z3, respectively.

Test Path

You need to modify LLVM path and build path in src/test/ file to test program such as LLVM_PREFIX, WORKLIST_SO, Z3_BIN.


If you want to check the program's invariants using assert, you have to use in this way.

Instead of using assert(a==1), you have to write down if (a != 1) { assert(0); }.

Because of post dominator relation, I need to implement my tool to support only this case (assert makes the program unreachable so some post dominator relationship is lost).

Directory description

  • icbmc: This is the directory where I tested icbmc binary file from DATE15 paper with my benchmarks.

  • src: It contains main implementation (worlist-ai, utils, CMakeLists.txt) and a test directory (test)

  • src/test: It contains script files to run the test and benchmark programs. Also, the result files are included in each directory.