Skip to content

Commit

Permalink
An interactive debugger for Crucible{,-LLVM} (#1283)
Browse files Browse the repository at this point in the history
An interactive debugger for Crucible{,-LLVM}
  • Loading branch information
langston-barrett authored Feb 7, 2025
1 parent a250201 commit 46a231e
Show file tree
Hide file tree
Showing 94 changed files with 5,702 additions and 170 deletions.
26 changes: 22 additions & 4 deletions .github/workflows/crux-llvm-build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -153,8 +153,10 @@ jobs:
with_ghc() { $NS -c ${@}; }
(cd crucible; with_ghc ghc -o $(setup_bin) $(setup_src) && ./$(setup_bin) clean)
(cd crucible-cli; with_ghc ghc -o $(setup_bin) $(setup_src) && ./$(setup_bin) clean)
(cd crucible-debug; with_ghc ghc -o $(setup_bin) $(setup_src) && ./$(setup_bin) clean)
(cd crucible-llvm; with_ghc ghc -o $(setup_bin) $(setup_src) && ./$(setup_bin) clean)
(cd crucible-llvm-cli; with_ghc ghc -o $(setup_bin) $(setup_src) && ./$(setup_bin) clean)
(cd crucible-llvm-debug; with_ghc ghc -o $(setup_bin) $(setup_src) && ./$(setup_bin) clean)
(cd crucible-llvm-syntax; with_ghc ghc -o $(setup_bin) $(setup_src) && ./$(setup_bin) clean)
(cd crux; with_ghc ghc -o $(setup_bin) $(setup_src) && ./$(setup_bin) clean)
(cd crux-llvm; with_ghc ghc -o $(setup_bin) $(setup_src) && ./$(setup_bin) clean)
Expand All @@ -166,21 +168,26 @@ jobs:

- name: Generate source distributions
shell: bash
run: cabal sdist crucible-symio crucible-llvm crucible-llvm-syntax crux-llvm uc-crux-llvm crucible-cli crucible-llvm-cli
run: cabal sdist crucible-symio crux-llvm uc-crux-llvm crucible-{cli,debug} crucible-llvm{,-cli,-debug,-syntax}

- shell: bash
run: |
.github/ci.sh build exe:crucible
.github/ci.sh build lib:crucible
.github/ci.sh build lib:crucible-syntax
.github/ci.sh build pkg:crucible-cli
.github/ci.sh build exe:crucible-debug
.github/ci.sh build lib:crucible-llvm
.github/ci.sh build lib:crucible-llvm-syntax
.github/ci.sh build exe:crucible-llvm
.github/ci.sh build pkg:crucible-llvm-cli
.github/ci.sh build exe:crucible-llvm-debug
.github/ci.sh build exe:crux-llvm
.github/ci.sh build exe:crux-llvm-for-ide
.github/ci.sh build exe:crux-llvm-svcomp
.github/ci.sh build exe:uc-crux-llvm
- shell: bash
name: Haddock
run: cabal v2-haddock crucible-symio crucible-llvm{,-syntax} crux-llvm uc-crux-llvm
run: cabal v2-haddock crucible-debug crucible-symio crucible-llvm{,-debug,-syntax} crux-llvm uc-crux-llvm

- shell: bash
name: Test crucible
Expand All @@ -190,6 +197,13 @@ jobs:
name: Test crucible-cli
run: .github/ci.sh test crucible-cli

- shell: bash
name: Test crucible-debug
run: cd crucible-debug && ../.github/ci.sh test pkg:crucible-debug
# NOTE(lb): Not sure what's going on with these tests... and I don't
# have a Windows machine to debug.
if: runner.os != Windows

- shell: bash
name: Test crucible-symio
run: cabal test pkg:crucible-symio
Expand All @@ -210,6 +224,10 @@ jobs:
run: .github/ci.sh test crucible-llvm-cli
if: runner.os == 'Linux'

- shell: bash
name: Test crucible-llvm-debug
run: .github/ci.sh test crucible-llvm-debug

- shell: bash
name: Test crux-llvm
run: .github/ci.sh test crux-llvm
Expand Down
5 changes: 5 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -67,10 +67,15 @@ developers:
* **`crucible-cli`** provides a CLI for interacting with the Crucible
simulator, via programs written in `crucible-syntax`.

* **`crucible-debug`** provides an interactive debugger for Crucible programs.

* **`crucible-llvm-cli`** provides a CLI for interacting with the Crucible
simulator, via programs written in `crucible-syntax` with the extensions
provided by `crucible-llvm{,-syntax}`.

* **`crucible-llvm-debug`** provides extensions to `crucible-debug` for
Crucible programs using the `crucible-llvm` memory model.

* **`crucible-syntax`** provides a native S-Expression based concrete
syntax for crucible programs. It is useful for being able to
directly interact with the core Crucible simulator without bringing
Expand Down
117 changes: 62 additions & 55 deletions cabal.GHC-9.4.8.config
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ constraints: any.BoundedChan ==1.0.3.0,
any.aeson ==2.2.3.0,
aeson +ordered-keymap,
any.alex ==3.2.7.4,
any.ansi-terminal ==1.1.1,
any.ansi-terminal ==1.1.2,
ansi-terminal -example,
any.ansi-terminal-types ==1.1,
any.array ==0.5.4.0,
Expand All @@ -29,8 +29,8 @@ constraints: any.BoundedChan ==1.0.3.0,
attoparsec -developer,
any.barbies ==2.1.1.0,
any.base ==4.17.2.1,
any.base-compat ==0.14.0,
any.base-orphans ==0.9.2,
any.base-compat ==0.14.1,
any.base-orphans ==0.9.3,
any.base16-bytestring ==1.0.2.0,
any.base64-bytestring ==1.2.1.0,
any.bifunctors ==5.6.2,
Expand All @@ -54,11 +54,11 @@ constraints: any.BoundedChan ==1.0.3.0,
any.clock ==0.8.4,
clock -llvm,
any.colour ==2.3.6,
any.comonad ==5.0.8,
any.comonad ==5.0.9,
comonad +containers +distributive +indexed-traversable,
any.concurrent-extra ==0.7.0.12,
any.concurrent-output ==1.10.21,
any.conduit ==1.3.5,
any.conduit ==1.3.6,
any.config-schema ==1.3.0.0,
any.config-value ==0.8.3,
any.constraints ==0.14.2,
Expand All @@ -69,30 +69,30 @@ constraints: any.BoundedChan ==1.0.3.0,
any.cryptohash-sha1 ==0.11.101.0,
any.cryptohash-sha256 ==0.11.102.1,
cryptohash-sha256 -exe +use-cbits,
any.data-default-class ==0.1.2.0,
any.data-default ==0.8.0.0,
any.data-default-class ==0.2.0.0,
any.data-fix ==0.3.4,
any.deepseq ==1.4.8.0,
any.deriving-compat ==0.6.6,
deriving-compat +base-4-9 +new-functor-classes +template-haskell-2-11,
any.deriving-compat ==0.6.7,
any.directory ==1.3.7.1,
any.distributive ==0.6.2.1,
distributive +semigroups +tagged,
any.dlist ==1.0,
dlist -werror,
any.dotgen ==0.4.3,
dotgen -devel,
any.entropy ==0.4.1.10,
any.entropy ==0.4.1.11,
entropy -donotgetentropy,
any.erf ==2.0.0.0,
any.exceptions ==0.10.5,
any.extra ==1.7.16,
any.fgl ==5.8.2.0,
any.extra ==1.8,
any.fgl ==5.8.3.0,
fgl +containers042,
any.fgl-visualize ==0.1.0.1,
any.filemanip ==0.3.6.3,
any.filepath ==1.4.2.2,
any.fingertree ==0.1.5.0,
any.foldable1-classes-compat ==0.1,
any.foldable1-classes-compat ==0.1.1,
foldable1-classes-compat +tagged,
any.free ==5.2,
any.generic-lens ==2.2.2.0,
Expand All @@ -104,70 +104,74 @@ constraints: any.BoundedChan ==1.0.3.0,
any.ghc-boot-th ==9.4.8,
any.ghc-prim ==0.9.1,
any.gitrev ==1.3.1,
any.happy ==1.20.1.1,
any.happy ==1.20.1.1 || ==2.1.4,
any.happy-lib ==2.1.4,
any.hashable ==1.4.7.0,
hashable -arch-native +integer-gmp -random-initial-seed,
any.hashtables ==1.3.1,
any.hashtables ==1.4.2,
hashtables -bounds-checking -debug -detailed-profiling -portable -sse42 +unsafe-tricks,
any.haskeline ==0.8.2,
any.haskell-lexer ==1.1.1,
any.haskell-lexer ==1.1.2,
any.haskell-src-exts ==1.23.1,
any.haskell-src-meta ==0.8.14,
any.hedgehog ==1.4,
any.haskell-src-meta ==0.8.15,
any.hedgehog ==1.5,
any.hsc2hs ==0.68.10,
hsc2hs -in-ghc-tree,
any.hspec ==2.11.9,
any.hspec-api ==2.11.9,
any.hspec-core ==2.11.9,
any.hspec-discover ==2.11.9,
any.hspec ==2.11.10,
any.hspec-api ==2.11.10,
any.hspec-core ==2.11.10,
any.hspec-discover ==2.11.10,
any.hspec-expectations ==0.8.4,
any.ieee754 ==0.8.0,
any.indexed-profunctors ==0.1.1.1,
any.indexed-traversable ==0.1.4,
any.indexed-traversable-instances ==0.1.2,
any.integer-conversion ==0.1.1,
any.integer-logarithms ==1.0.3.1,
any.integer-logarithms ==1.0.4,
integer-logarithms -check-bounds +integer-gmp,
any.invariant ==0.6.3,
any.invariant ==0.6.4,
any.io-streams ==1.5.2.2,
io-streams +network -nointeractivetests +zlib,
any.isocline ==1.0.9,
any.itanium-abi ==0.1.2,
any.json ==0.11,
json +generic -mapdict +parsec +pretty +split-base,
any.kan-extensions ==5.2.6,
any.kvitable ==1.0.3.0,
any.lens ==5.2.3,
any.kvitable ==1.1.0.1,
any.lens ==5.3.3,
lens -benchmark-uniplate -dump-splices +inlining -j +test-hunit +test-properties +test-templates +trustworthy,
any.libBF ==0.6.8,
libBF -system-libbf,
any.libyaml ==0.1.4,
libyaml -no-unicode -system-libyaml,
any.libyaml-clib ==0.2.5,
any.lifted-async ==0.10.2.5,
any.lifted-async ==0.10.2.7,
any.lifted-base ==0.2.3.12,
llvm-pretty-bc-parser -fuzz -regressions,
any.logict ==0.8.1.0,
any.logict ==0.8.2.0,
any.lucid ==2.11.20230408,
any.lumberjack ==1.0.3.0,
any.megaparsec ==9.6.1,
megaparsec -dev,
any.microlens ==0.4.13.1,
any.microlens-th ==0.4.3.15,
any.microlens-th ==0.4.3.16,
any.mmorph ==1.2.0,
any.monad-control ==1.0.3.1,
any.monadLib ==3.10.1,
any.mono-traversable ==1.0.17.0,
any.monadLib ==3.10.3,
any.mono-traversable ==1.0.21.0,
any.mtl ==2.2.2,
any.network ==3.2.1.0,
any.named-text ==1.2.1.0,
named-text +with-json,
any.network ==3.2.7.0,
network -devel,
any.network-uri ==2.6.4.2,
any.optparse-applicative ==0.18.1.0,
optparse-applicative +process,
any.ordered-containers ==0.2.4,
any.os-string ==2.0.6,
any.os-string ==2.0.7,
any.panic ==0.4.0.1,
any.parallel ==3.2.2.0,
any.parameterized-utils ==2.1.8.0,
any.parameterized-utils ==2.1.9.0,
parameterized-utils +unsafe-operations,
any.parsec ==3.1.16.1,
any.parser-combinators ==1.3.0,
Expand All @@ -182,21 +186,23 @@ constraints: any.BoundedChan ==1.0.3.0,
any.profunctors ==5.6.2,
any.pvar ==1.0.0.0,
any.quickcheck-io ==0.2.0,
any.random ==1.2.1.2,
any.random ==1.2.1.3,
any.raw-strings-qq ==1.1,
any.reflection ==2.1.8,
any.reflection ==2.1.9,
reflection -slow +template-haskell,
any.regex-base ==0.94.0.2,
any.regex-compat ==0.95.2.1,
any.regex-posix ==0.96.0.1,
regex-posix -_regex-posix-clib,
any.resourcet ==1.3.0,
any.ring-buffer ==0.4.1,
any.rts ==1.0.2,
any.s-cargot ==0.1.6.0,
s-cargot -build-example,
any.safe ==0.3.21,
any.safe-exceptions ==0.1.7.4,
any.scheduler ==2.0.0.1,
any.sayable ==1.2.5.0,
any.scheduler ==2.0.1.0,
any.scientific ==0.3.8.0,
scientific -integer-simple,
any.semialign ==1.3.1,
Expand All @@ -208,18 +214,18 @@ constraints: any.BoundedChan ==1.0.3.0,
any.simple-get-opt ==0.4,
any.smallcheck ==1.2.1.1,
any.split ==0.2.5,
any.splitmix ==0.1.0.5,
any.splitmix ==0.1.1,
splitmix -optimised-mixer,
any.stm ==2.5.1.0,
any.streaming-commons ==0.2.2.6,
any.streaming-commons ==0.2.3.0,
streaming-commons -use-bytestring-builder,
any.strict ==0.5.1,
any.string-interpolate ==0.3.4.0,
string-interpolate -bytestring-builder -extended-benchmarks -text-builder,
any.syb ==0.7.2.4,
any.tagged ==0.8.8,
any.tagged ==0.8.9,
tagged +deepseq +transformers,
any.tasty ==1.5,
any.tasty ==1.5.3,
tasty +unix,
any.tasty-checklist ==1.0.6.0,
any.tasty-expected-failure ==0.12.3,
Expand All @@ -228,12 +234,12 @@ constraints: any.BoundedChan ==1.0.3.0,
any.tasty-hedgehog ==1.4.0.2,
any.tasty-hspec ==1.2.0.4,
any.tasty-hunit ==0.10.2,
any.tasty-quickcheck ==0.11,
any.tasty-quickcheck ==0.11.1,
any.tasty-smallcheck ==0.8.2,
any.tasty-sugar ==2.2.1.0,
any.tasty-sugar ==2.2.2.0,
any.template-haskell ==2.19.0.0,
any.temporary ==1.3,
any.terminal-size ==0.3.3,
any.terminal-size ==0.3.4,
any.terminfo ==0.4.1.5,
any.text ==2.0.2,
any.text-conversions ==0.3.1.1,
Expand All @@ -242,37 +248,37 @@ constraints: any.BoundedChan ==1.0.3.0,
text-short -asserts,
any.tf-random ==0.5,
any.th-abstraction ==0.6.0.0,
any.th-compat ==0.1.5,
any.th-expand-syns ==0.4.11.0,
any.th-lift ==0.8.4,
any.th-compat ==0.1.6,
any.th-expand-syns ==0.4.12.0,
any.th-lift ==0.8.6,
any.th-lift-instances ==0.1.20,
any.th-orphans ==0.13.14,
any.th-orphans ==0.13.16,
any.th-reify-many ==0.1.10,
any.these ==1.2.1,
any.time ==1.12.2,
any.time-compat ==1.9.7,
any.time-compat ==1.9.8,
any.transformers ==0.5.6.2,
any.transformers-base ==0.4.6,
transformers-base +orphaninstances,
any.transformers-compat ==0.7.2,
transformers-compat -five +five-three -four +generic-deriving +mtl -three -two,
any.typed-process ==0.2.11.1,
any.typed-process ==0.2.12.0,
any.unbounded-delays ==0.1.1.1,
any.uniplate ==1.6.13,
any.unix ==2.7.3,
any.unix-compat ==0.7.2,
any.unix-compat ==0.7.3,
any.unliftio ==0.2.25.0,
any.unliftio-core ==0.2.1.0,
any.unordered-containers ==0.2.20,
unordered-containers -debug,
any.utf8-string ==1.0.2,
any.uuid-types ==1.0.6,
any.vector ==0.13.1.0,
any.vector ==0.13.2.0,
vector +boundschecks -internalchecks -unsafechecks -wall,
any.vector-algorithms ==0.9.0.2,
vector-algorithms +bench +boundschecks -internalchecks -llvm +properties -unsafechecks,
any.vector-algorithms ==0.9.1.0,
vector-algorithms +bench +boundschecks -internalchecks -llvm -unsafechecks,
any.vector-stream ==0.1.0.1,
any.versions ==6.0.7,
any.versions ==6.0.8,
any.void ==0.7.3,
void -safe,
any.websockets ==0.13.0.0,
Expand All @@ -285,5 +291,6 @@ constraints: any.BoundedChan ==1.0.3.0,
yaml +no-examples +no-exe,
any.zenc ==0.1.2,
any.zlib ==0.7.1.0,
zlib -bundled-c-zlib +non-blocking-ffi -pkg-config,
any.zlib-bindings ==0.1.1.5
index-state: hackage.haskell.org 2024-08-01T22:40:06Z
index-state: hackage.haskell.org 2025-02-05T20:39:53Z
Loading

0 comments on commit 46a231e

Please sign in to comment.