macaw/symbolic/macaw-symbolic.cabal
Tristan Ravitch dbb4c83f08
Add a testing framework for macaw-symbolic (#184)
The new test suites cover x86_64, PowerPC, and ARM. They test that the semantics are actually correct (rather than just seeing if symbolic execution produces any result). The `Data.Macaw.Symbolic.Testing` module in macaw-symbolic provides some common utilities for symbolic execution engine setup, while there are tailored test harnesses for each architecture.

The semantics of the test harnesses are documented in each architecture test suite, but they:
1. Discover all of the test binaries (which are generated from the included makefiles)
2. Treat each function whose name begins with `test_` as a test entry point
3. Symbolically executes each test case with fully symbolic register states
4. Extracts the return value after symbolic execution, which is treated as the predicate to an assertion that must be proved
    - If the test case is in the `pass` subdirectory, it is proved and expected to hold
    - If the test case is in the `fail` subdirectory, it is proved and expected to not hold.

Each test harness supports two options for debugging:
- Dumping generated SMT queries
- Dumping generated Macaw IR for inspection

This testing uncovered a bug in the (previously untested) macaw-aarch32-symbolic code. It required a number of submodule updates to:

- Adapt to some what4 changes
- Fix a bug in the LLVM memory model that lets these tests pass
- Adapt to changes to some crucible APIs

This change also modifies the CI configuration to install SMT solvers earlier (which are now needed for all of the symbolic package tests).
2021-03-01 09:21:44 -08:00

58 lines
1.2 KiB
Plaintext

name: macaw-symbolic
version: 0.0.1
author: Galois, Inc.
maintainer: jhendrix@galois.com
build-type: Simple
cabal-version: >= 1.10
license: BSD3
license-file: LICENSE
library
build-depends:
base >= 4,
bv-sized >= 1.0.0,
containers,
elf-edit,
IntervalMap >= 0.6 && < 0.7,
crucible >= 0.4,
crucible-llvm,
lens,
macaw-base,
mtl,
parameterized-utils,
prettyprinter >= 1.7.0,
text,
vector,
bytestring,
what4 >= 1.1 && < 1.2
hs-source-dirs: src
exposed-modules:
Data.Macaw.Symbolic
Data.Macaw.Symbolic.Backend
Data.Macaw.Symbolic.Memory
Data.Macaw.Symbolic.MemOps
Data.Macaw.Symbolic.Testing
other-modules:
Data.Macaw.Symbolic.Bitcast
Data.Macaw.Symbolic.CrucGen
Data.Macaw.Symbolic.PersistentState
ghc-options: -Wall -Wcompat
ghc-prof-options: -O2 -fprof-auto-top
default-language: Haskell2010
if impl(ghc >= 8.6)
default-extensions: NoStarIsType
test-suite doctests
type: exitcode-stdio-1.0
default-language: Haskell2010
hs-source-dirs: test
main-is: doctest.hs
ghc-options: -Wall -Wcompat -threaded
build-depends: base, macaw-base, macaw-symbolic, doctest >= 0.10 && < 0.17