Skip to content

Releases: klee/klee

KLEE 3.1

29 Feb 21:43
Compare
Choose a tag to compare

KLEE 3.1, 29 February 2024

Incorporating changes from 8 June 2023 to 29 February 2024.
Maintainers during this time span: @ccadar, @MartinNowack, @251.
Documentation at http://klee.github.io/releases/docs/v3.1

Major features and important changes

  • New execution tree implementation and klee-exec-tree tool (@251)
  • KDAlloc is now the default allocator in KLEE (KDAlloc was introduced in KLEE 3.0)
  • Resolve memory reads/writes to single objects in more cases (@tkuchta)
  • Concretize values based on seeds when available (@ccadar)
  • Fixed some interactions with external code (@ccadar, @MartinNowack, mishok2503)

LLVM support

  • Current recommended version is still LLVM 13
  • Added support for LLVM 15 and 16 (@MartinNowack)
  • Removed support for LLVM <11 (@danielschemmel)
  • KLEE 3.1 will be the last version with support for LLVM <13

Options, scripts and KLEE intrinsics added, changed or removed

  • New klee-exec-tree tool (@251)
  • New --write-exec-tree and --exec-tree-batch-size options (@251)
  • Renamed --compress-process-tree to --compress-exec-tree (@ccadar)
  • PTree is now called ExecutionTree in the code (@ccadar)
  • KDAlloc (--kdalloc) is now enabled by default (@ccadar)
  • Replaced --suppress-external-warnings and --all-external-warnings with --external-call-warnings=none|once-per-function|all (@ccadar)
  • Keep in the KLEE and Kleaver help menus only the KLEE/Kleaver option categories (@ccadar)
  • Removed --cex-cache-exp, a broken experimental optimisation for validity (@ccadar)
  • Removed --zero-seed-extension, and merge it with --allow-seed-extension (@ccadar)

Other changes

KLEE 3.0

07 Jun 20:00
Compare
Choose a tag to compare

KLEE 3.0, 7 June 2023

Incorporating changes from 8 April 2022 to 7 June 2023.
Maintainers during this time span: @ccadar, @MartinNowack, @251 (@251 joined as a new maintainer during 2022).
Documentation at http://klee.github.io/releases/docs/v3.0

Major features

LLVM support

  • Current recommended version is LLVM 13
  • Added support for LLVM 14 (@lzaoral)
  • Removed support for LLVM <9
  • KLEE 3.0 will be the last version with support for LLVM <11

Options, scripts and KLEE intrinsics added, changed or removed

  • Renamed gen-bout to ktest-gen, and gen-random-bout to ktest-randgen (@ccadar)
  • Added option --stp-sat-solver for selecting the SAT solver used by STP (@251)
  • Added many more runtime statistics that can be inspected with klee-stats, and renamed several of them (@251)
  • Removed unused model_version from the tests generated when the POSIX runtime is enabled (@ccadar)
  • Removed unused option --replay-keep-symbolic (@251)
  • Added support for the @llvm.f{ma,muladd}.f* intrinsics (@lzaoral)
  • Allow UcLibc to support a runtime option rather than a compile-time one (@arrowd)
  • Added support for llvm.experimental.noalias.scope.decl (@operasfantom)
  • Modified names of SMT variables to use underscores instead of dashes, e.g., A_data instead of A-data (@ccadar)

Other changes

KLEE 2.3

04 Apr 12:45
Compare
Choose a tag to compare

KLEE 2.3, 4 April 2022

Incorporating changes from 8 December 2020 to March 2022.
Maintainers during this time span: @ccadar and @MartinNowack
Documentation at http://klee.github.io/releases/docs/v2.3

LLVM support

  • Current recommended version is LLVM 11
  • Added support for LLVM 12 and 13 (@lzaoral)
  • Removed support for LLVM <6
  • KLEE 2.3 will be the last version with support for LLVM <9

Options, scripts and KLEE intrinsics added, changed or removed

  • Added --max-static-pct-check-delay to specify the number of forks after which the --max-static-*-pct checks are enforced (@ccadar)
  • In klee-stats, added --print-columns to print user-defined columns, e.g. --print-columns 'Path,Instrs,Time(s)' (@251)
  • Disabled Doxygen generation by default; it can be enabled via CMake option ENABLE_DOXYGEN=ON

Other changes

KLEE 2.2

07 Dec 15:06
Compare
Choose a tag to compare

KLEE 2.2 on 7 December 2020

Incorporating changes from 4 March 2020 to 7 December 2020.
Maintainers during this time span: @ccadar and @MartinNowack
Documentation at http://klee.github.io/releases/docs/v2.2

Major features

  • Added support for C++ exceptions (@corrodedHash, @futile, @jbuening)
  • Correctly copy variadic arguments with byval attribute (@ccadar)
  • Modified the random path searcher to work on a subset of states (@kren1)
  • Added state IDs to improve determinism (@251)
  • Overhauled the (Travis CI) build scripts (@MartinNowack)
  • Restructured header files (@ccadar)

LLVM support

  • Current recommended version is LLVM 9
  • Added support for LLVM 11 (@lzaoral)
  • We have decided to extend support for LLVM 3.8 to 5, but KLEE 2.2 will be the last version with support for LLVM <6

Options, scripts and KLEE intrinsics added, changed or removed

  • Changed --debug-print-instructions to also print state IDs (@251)
  • Added -rng-initial-seed to set the seed for KLEE's random number generator (@251)
  • Added klee_is_replay intrinsic which returns whether the code is being executed symbolically or in replay mode (@alastairreid)
  • Added --compress-process-tree to remove intermediate nodes in the process tree when possible (@sebastianpoeplau)
  • Added klee-zesti, a ZESTI-like wrapper (@kren1)
  • Added --table-format=readable-csv/csv to klee-stats (@251)

Other changes

  • Fixed GlobalAlias initialization (@jbuening)
  • Enforced fork/branch limits in branch() and fix double termination (@251)
  • Enhanced POSIX runtime in the case where a symbolic file is given as an absolute path, i.e. /current/work/dir/A (@kren1)
  • Named jobs in Travis CI for better visualization of results (@ccadar)
  • Fixes and improvements in the statistics code including klee-stats (@251)
  • Added a simple model for GET/SET_LK (@kren1)
  • Fixed bug in the handling of vectorized code (@Warfley)
  • Fixed bug in the handling of STP array names (@MartinNowack)
  • Fixed bug in Z3Solver::getConstraintLog (@daniel-grumberg)
  • Added support for reading strings from the middle of objects in readStringAtAddress (@mchalupa)
  • Disabled asm lifting for memory fences with return values (@MartinNowack)
  • Fixed bug when the search requires MD2U (@adrianherrera)
  • Added support for fshr/fshl intrinsics (@alastairreid)
  • Refactored the constraint manager (@MartinNowack)
  • Changed DiscretePDF to use IDs instead of pointers to remove nondeterminism (@251)
  • Added a more robust handling of unknown intrinsics: if an unknown intrinsic is encountered on a path, that path is terminated but the others can proceed (@alastairreid)
  • Fixed PTree::remove to clean the tree properly (@sebastianpoeplau)
  • Added support for multiple symbolic files to gen-bout (@kren1)
  • Added a PR template, with a checklist documenting the most frequent issues we have encountered (@ccadar)
  • Fixed the behaviour of klee-stats for broken or empty DBs (@251)
  • Added support for klee_open_merge and klee_close_merge in replay (@ccadar)
  • Fixed the handling of global variables while validating direct call targets (@MartinNowack)
  • Fixed the handling of the fabs intrinsic (@dlaprell)
  • Added support for the fneg instruction (@jbuening)
  • Removed incompatibility between merging and the random path search (@251)
  • Fixed the behaviour of klee-libc to call the functions in __cxa_atexit in reverse order (@tomsik68)
  • Fixed the behaviour of bcmp in klee-libc (@alastairreid)
  • Added support for multi-version bitcode libraries (@MartinNowack)
  • Added support for several fortified functions, -D_FORTIFY_SOURCE (@ccadar)
  • Modernize ref<> and isa<> nullptr checks (@jbuening)
  • Switched CI from Travis CI to GitHub Actions (@MartinNowack, with thanks to @jordr)
  • Smaller refactorings, fixes and improvements, test cases, maintenance, comments, web version, website, etc. (@251, @adrianherrera, @alastairreid, @andrewvaughanj, @andronat, @arrowd, @ccadar, @dependabot, @i-ky, @jbuening, @jiseongg, @jordr, @kren1, @lahiri-phdworks, @MartinNowack, @yxliang01)

KLEE 2.1

03 Mar 16:38
Compare
Choose a tag to compare

KLEE 2.1, 3 March 2020

Incorporating changes from 20 March 2019 to 3 March 2020.
Maintainers during this time span: @ccadar and @MartinNowack
Documentation at http://klee.github.io/releases/docs/v2.1

Major features

LLVM support

  • Added support for LLVM 9 and 10 (@jbuening)
  • Removed support for LLVM <3.8 (@jbuening)
  • KLEE 2.1 will be the last version with support for LLVM <6

Options, scripts and KLEE intrinsics added, changed or removed

  • Replaced intrinsic klee_alias_function("foo", "bar") with option -function-alias=foo:bar, which supports regular expressions (@jbuening, @SolalPirelli)
  • Removed -max-instruction-time (@251)
  • Added -timer-interval (default 1s) to specify the minimum interval to check timers (@251)
  • Added nurs:rp searcher which uses non-uniform random search with 1/2^depth (@kren1)
  • Replaced the behavior of the nurs:depth searcher to use NURS with depth (@kren1)
  • klee-stats: new --grafana option (see above)
  • klee-stats: new --to-csv option for converting statistics to the CSV format (@251)
  • klee-stats: removed --sample-interval, --sort-by, --compare-by, --precision. These can be now simulated by querying the SQL database directly (@kren1)
  • klee-replay: added --keep-replay-dir option to keep the replay directory (@ccadar)

Other changes

KLEE 2.0

19 Mar 18:15
Compare
Choose a tag to compare

KLEE 2.0, 19 March 2019

Incorporating changes from 22 July 2017 to 19 March 2019
Maintainers during this time span: @andreamattavelli, @ccadar, @delcypher, @MartinNowack
Documentation at http://klee.github.io/releases/docs/v2.0

Major features

LLVM support

  • Added support for LLVM 3.7 - 7.0 (@jirislaby)
  • Added support for LLVM 8.0 (@MartinNowack)
  • KLEE 2.0 will be the last release with support for LLVM 3.4 to 3.7
  • Removed support for LLVM <3.4 (@MartinNowack)

Options, scripts and intrinsics changed or removed

  • Renamed several options (@ccadar)
    • --environ to --env-file
    • --no-output to --write-no-tests
    • --red-zone-space to --redzone-size
    • --run-in to --run-in-dir
    • --seed-out to --seed-file
    • --seed-out-dir to --seed-dir
    • --stop-after-n-tests to --max-tests
    • --use-cache to --use-branch-cache
    • --use-construct-hash to --use-construct-hash-stp
    • --warn-all-externals to --warn-all-external-symbols
  • Replaced --no-externals and --allow-external-sym-calls with --external-calls (@ccadar)
  • Added --libcxx option to enable LibC++ support (see Major features above)
  • Added option --max-stack-frames to limit the number of stack frames used (@MartinNowack)
  • Added --klee-call-optimisation option, which can be set to false to disable some optimizations that interact incorrectly with the checks injected by KLEE. See #1059 for more details (@MartinNowack)
  • Added support for disabling --batch-instructions and --batch-time by setting them to zero (@ccadar)
  • Removed option --disable-opt (@ccadar)
  • Removed klee-gcc and klee-clang (@251, @MartinNowack)
  • Removed support for klee_make_symbolic with two arguments (@ccadar)
  • Allow NULL as name to klee_int, to create "unnamed" object (@251)
  • New time API used in options (@251)
  • Improved the output of ktest-tool and added an --extract option (@251)
  • Categorized options in --help, improved help messages, and hid LLVM options by default (@ccadar)

Other changes

  • Updated build system to detect whether STP, Z3, metaSMT are available (@delcypher)
  • Fixed test case counter: previously the number of test cases generated by KLEE was always incremented, even if a symbolic solution was not found (@andreamattavelli)
  • Added checks for div/mod by zero and overshifts in constant expressions (@ccadar)
  • Fixed a bug causing KLEE to generate files with no permissions bits set (@ccadar)
  • Added clean_doxygen target and a global clean_all target to the build system (@delcypher)
  • Fixed initialization of distance to uncovered instructions when KLEE relies on default searchers (@andreamattavelli)
  • Fixed assert in BFSSearcher that does not hold as part of interleaved searcher (@jbuening)
  • Fixed huge allocation size constant (@davidtr1037)
  • Added Codecov support (@andreamattavelli, @MartinNowack)
  • Store cex cache stats and report them in klee-stats (@helicopter88)
  • Fixed incorrectly incremented stats for dumped states (@251)
  • Fixed bug where KLEE would not output test cases when --exit-on-error is enabled (@buszk)
  • Added support for blockaddress and indirectbr instructions (@251)
  • Implemented klee_prefer_cex() and klee_abort() for replay mode (@Lysxia)
  • Fixed handling of errno when external functions are invoked (@MartinNowack)
  • Fixed utimes() behavior for symbolic files when the second argument is NULL (@yxliang01)
  • Improved handling of constant array in Z3 (@kren1)
  • Improved the handling of external calls with symbolic data (@kren1)
  • Abort execution if --only-output-states-covering-new is enabled but its dependency --output-istats is not (@ccadar)
  • Improved ConstantExpr performance (@kren1)
  • Improved linking and optimizations order (@MartinNowack)
  • Enabled TCMalloc by default (@kren1)
  • Disabled unit testing in default build (@andreamattavelli)
  • Added resolve time to klee-stats --print-all (@251)
  • Improved the startup sequence enabling the POSIX runtime (@MartinNowack)
  • Added ASan and UBSan flags to lit (@251)
  • Added support for handling multiple SIGSEGVs in external calls (@251)
  • Added checks for correct usage of the POSIX mode (@ccadar)
  • Added support for klee-replay on OSX (@251)
  • Added lowering pass for atomic instructions (@erzett, @futile)
  • Improved handling of metadata (@MartinNowack)
  • Improved efficiency of div/mod and shift checks by skipping unnecessary checks (@MartinNowack)
  • Added support for memalign (@corrodedHash)
  • Enable C++14 support (@MartinNowack)
  • Fixed issue with aliases that point to other aliases (@jbuening)
  • Added workaround for the LLVM bug PR39177 (@jbuening)
  • Updated dependency build system for KLEE (@MartinNowack)
  • Fixed the Docker deployment for KLEE (@MartinNowack)
  • Added support for compiling KLEE with MSan and UBSan's integer sanitizer (@MartinNowack)
  • Fixed representation of ReadExpr's into equivalent arrays (@MartinNowack)
  • Added support for debug information provided by newer LLVM versions (@MartinNowack)
  • Added many KLEE-related publications (@251)
  • Smaller refactorings, fixes and improvements, test cases, maintenance,
    comments, web version, website, etc. (@andronat, @251, @andreamattavelli, @ccadar, @corrodedHash, @danielschemmel, @delcypher, @itbot08, @jasondavies, @jbuening, @jirislaby, @kren1, @Lysxia, @MartinNowack, @Mic92, @odeits-vidder, @SolalPirelli, @szeyiuchau, @Tipwheal, @yannicnoller)

KLEE 1.4.0

21 Jul 16:33
Compare
Choose a tag to compare

KLEE 1.4.0, 21 July 2017

(Incorporating changes from 4 November 2016 up to and including 21 July 2017)
Documentation at http://klee.github.io/releases/docs/v1.4.0/

This will be the last version supporting LLVM 2.9 and the autoconf build system.

KLEE 1.3.0

30 Nov 17:51
Compare
Choose a tag to compare

KLEE 1.3.0, 30 November 2016

(Incorporating changes from 1 April up to and including 3 November 2016)

KLEE 1.2.0

31 Mar 16:57
Compare
Choose a tag to compare

KLEE 1.2.0, 31 March 2016

KLEE 1.1.0

13 Nov 12:57
Compare
Choose a tag to compare

KLEE 1.1.0, 13 November 2015

  • Made LLVM 3.4 and STP 2.1.0 the recommended versions for installing KLEE (Cristian Cadar, @ccadar; Dan Liew, @delcypher; Martin Nowack, @MartinNowack; Mate Soos, @msoos)
  • Added instructions for using the Docker images (Dan Liew, @delcypher)
  • Added NEWS file to keep track of changes for each release (Cristian Cadar, @ccadar)
  • Added coverage information for the current KLEE codebase (Timotej Kapus, @kren1)
  • Added -entry-point=FOO option, where FOO is the name of the function to use as the entry point for execution (Riccardo Schirone, @ret2libc)
  • Switched STP to v2.1.0 (instead of the old r940) in TravisCI (Martin Nowack, @MartinNowack)
  • Improved Dockerfiles to use specific dependency versions (Dan Liew, @delcypher)
  • Bug fix: Fixed signed division by constant 1/-1 (Martin Nowack, @MartinNowack, reported by Timotej Kapus, @kren1)
  • Bug fix: Generate SRrem expressions correctly (Martin Nowack, @MartinNowack, reported by Timotej Kapus, @kren1)
  • Bug fix: Allowed the generation of initial values for queries with empty constraint set (Martin Nowack, @MartinNowack)
  • Bug fix: Fixed assertion failure in getDirectCallTarget (Sean Bartell, @yotann)
  • Bug fix/test improvement: Use a temporary directory instead of /tmp in futimesat test (Andrew Chi, @andrewchi)
  • Various fixes and improvements to the website (Eric Rizzi, @holycrap872; Martin Nowack, @MartinNowack; Bheesham Persaud, @bheesham; Gu Zhengxiong, @NoviceLive; Cristian Cadar, @ccadar)