Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
This branch is 334 commits ahead, 498 commits behind klee:master.

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time

Agamotto (OSDI '20)

This repository contains the code and experiments for the OSDI '20 paper "Agamotto: How Persistent is your Persistent Memory Application?" Agamotto is based on Klee (described below).

Here are the instructions for running/using the OSDI'20 artifact.

Core Additions and Layout

artifact/: This directory contains all of the information needed to build Agamotto and reproduce the key results from the paper. This directory also contains a README with instructions explaining how to run and use the OSDI'20 Artifact.

lib/Core/NvmHeuristics.{cpp,h}: This contains the core logic behind Agamotto's search strategy.

lib/Core/RootCause.{cpp,h}: This contains the bug tracking and reporting mechanisms used in Agamotto.

lib/Core/CustomCheckerHandler.{cpp,h}: Contains the APIs for the custom semantic bug oracles.

runtime/POSIX/: Contains PM-specific modifications to the environment model (modeling persistent files), as well as ports of Cloud9's extended environment model. Also contains symbolic socket handlers used in the evaluation of Redis and memcached.

KLEE Symbolic Virtual Machine

KLEE is a symbolic virtual machine built on top of the LLVM compiler infrastructure. Currently, there are two primary components:

  1. The core symbolic virtual machine engine; this is responsible for executing LLVM bitcode modules with support for symbolic values. This is comprised of the code in lib/.

  2. A POSIX/Linux emulation layer oriented towards supporting uClibc, with additional support for making parts of the operating system environment symbolic.

Additionally, there is a simple library for replaying computed inputs on native code (for closed programs). There is also a more complicated infrastructure for replaying the inputs generated for the POSIX/Linux emulation layer, which handles running native programs in an environment that matches a computed test input, including setting up files, pipes, environment variables, and passing command line arguments.

For further information, see the webpage.


KLEE Symbolic Execution Engine







No packages published


  • C 68.4%
  • C++ 23.9%
  • Python 2.2%
  • CMake 1.8%
  • Shell 1.5%
  • LLVM 1.0%
  • Other 1.2%