about summary refs log tree commit diff homepage
path: root/runtime
AgeCommit message (Collapse)Author
2018-07-04runtime: remove obsolete code for building modules instead of archivesJulian Büning
2018-07-04Reorder linking and optimizationsMartin Nowack
Link intrinsic library before executing optimizations. This makes sure that any optimization run by KLEE on the module is executed for the intrinsic library as well. Support .ll files as input for KLEE as well.
2018-07-04Reorganise runtime libraries provided by KLEEMartin Nowack
Strictly differentiate between the following type of libraries: * FreeStanding: contains minimal amount of methods a compiler would expect * klee-libc: contains a minimal libc implementation * POSIX: contains a POSIX layer that can be used on top of a libc implementation * Intrinsic: contains additional runtime functions which provide KLEE-specific functionalities, (e.g. checks) Builds always archives instead of single modules. This allows to reduce linked-in dependencies of tested applications.
2018-05-07Fixed utimes() behavior for symbolic files when the second argument is NULLyxliang01
2018-05-05Fix handling of errno if external functions are invokedMartin Nowack
If an external function in KLEE is invoked, it might update errno. Previously, the errno specific variable in a state was only updated if it was part of the executed instructions. That opened up a timeframe that increased the likelihood of errno being overwritten by another method call. This patch fixes two issues: * the errno of the KLEE process state is updated before the external function call allowing to detect changes to it later on * after the external call, the memory object of errno is directly updated with its new value, reducing the likelihood to be overwritten by another call Additional features: * Add support for `errno()` for Darwin as well. * Simplified errno handling in POSIX layer
2018-05-01Ensured program reliably has 3 paths to be explored, and removed unnecessary ↵Cristian Cadar
options. Make klee_abort() call abort() in replay, and removed trivial test which cannot be easily integrated into the test suite.
2018-05-01Implement klee_prefer_cex() and klee_abort() in Runtest and added ↵lyxia
corresponding tests
2017-10-04[CMake] Add global clean target `clean_all`. Fixes #718.Dan Liew
This target invokes the `clean` target but is also intended for use by other cleaning targets. The `clean_runtime` target is now declared as a dependency of `clean-all` so that the runtime is cleaned as well.
2017-10-04Remove Autoconf/Makefile build system and adjust the TravisCIDan Liew
configuration, TravisCI scripts and Dockerfile build appropriately. There are a bunch of clean ups this enables but this commit doesn't attempt them. We can do that in future commits.
2017-08-09Fixed a bug causing KLEE to generate files with no permissions bits set. ↵Cristian Cadar
This was introduced when we added the --readable-posix-inputs option.
2017-07-24Moved klee_choose from klee-libc to KLEE intrinsics.Cristian Cadar
2017-07-24[CMake] Add a sanity check to the runtime build system so that weDan Liew
provide a better error message (and stop earlier) when no C source files are found.
2017-07-24[CMake] Fix bug where the runtime build system would not rebuild bitcodeDan Liew
archive/modules when the list of source files that constitute it changes. To fix this a file is written in the build directory that contains the list of `.bc` files. This file is updated whenever the list of `.bc` files for a module changes and then the rule that builds the module/archive depends on that file. This fixes a bug reported by @ccadar in #718.
2017-03-30[CMake] Add the `clean_runtime` top level target to provide an easy wayDan Liew
to clean the runtime build. Unfortuantely there is no way to have the `clean` target trigger the `clean_runtime` target unfortunately.
2017-03-30[CMake] When supported pass `USES_TERMINAL` argument toDan Liew
`ExternalProject_Add_Step()` so that when using Ninja the output of the bitcode build system is shown immediately.
2017-03-30[CMake] Fix #631Dan Liew
This fixes a bug in the bitcode build system where the build would fail if the build directory was a symbolic link (i.e. create a symbolic link for the root of the build tree and try to do the build in that directory). The problem was that `DIR_SUFFIX` implicitly assumed that there was only one way to refer to the build tree which is an incorrect assumption in the presence of symbolic links. This has been fixed by using the `$(realpath)` GNU make built in to resolve all symbolic links. An additional sanity check has been added to check that `SRC_DIR` exists.
2017-03-28Merge pull request #616 from jirislaby/glibc_225Cristian Cadar
runtime: POSIX, make it compile with glibc 2.25
2017-03-20runtime: POSIX, check path prior dereferenceJiri Slaby
clang warns about check-after-use in POSIX runtime: runtime/POSIX/fd.c:573:17: warning: nonnull parameter 'path' will evaluate to 'true' on first r [-Wpointer-bool-conversion] (path ? __concretize_string(path) : NULL), ^~~~ ~ path is dereferenced in __get_sym_file before this check. So add a check to __get_sym_file and handle NULL appropriatelly by returning NULL too. Signed-off-by: Jiri Slaby <jirislaby@gmail.com>
2017-03-15runtime: POSIX, make it compile with glibc 2.25Jiri Slaby
With glibc 2.25, we see: runtime/POSIX/stubs.c:243:14: error: conflicting types for 'gnu_dev_major' unsigned int gnu_dev_major(unsigned long long int __dev) __attribute__((weak)); ^ /usr/include/sys/sysmacros.h:79:27: note: previous definition is here __SYSMACROS_DEFINE_MAJOR (__SYSMACROS_IMPL_TEMPL) ^ Glibc 2.25 switched from ULL to dev_t for gnu_dev_major, gnu_dev_minor, and gnu_dev_makedev. Handle by using an appropriate type according to the glibc version. Signed-off-by: Jiri Slaby <jirislaby@gmail.com>
2017-02-13Merge pull request #506 from delcypher/travis_asan_ubsanCristian Cadar
Modify scripts and a test to allow ASan/UBSan builds.
2017-02-11[CMake] More widely available rebuilding for runtimesLevente Kurusa
Signed-off-by: Levente Kurusa <levex@linux.com>
2017-01-19In legacy build system fix building libkleeRuntest when buildingDan Liew
with ASan.
2017-01-14Change how error handling is done in libkleeRuntest.Dan Liew
Previously error messages would be emitted but execution would continue which might not be desirable. Now a wrapper function (for fprintf) `report_internal_error()` is used which will cause the program to exit. The older behaviour of continuing to execute after an error can be achieved by setting a new environment variable `KLEE_RUN_TEST_ERRORS_NON_FATAL`. This commit also adds a test for each error case.
2017-01-14Fix bug reported privately by @danielschemmel .Dan Liew
If KLEE generates ktest files with `--posix-runtime` then if replaying using libkleeRuntest then replay would be incorrect because the `model_version` object would be unintentionally used during replay. For now just skip over that object and try the next one. Also emit a warning if the object names don't match.
2017-01-14Write tests to test `libkleeRuntest`. The `replay_posix_runtime.c`Dan Liew
test is marked XFAIL because there is a bug in the implementation of `libkleeRuntest`. Quite a few changes had to be made to the lit configuration in order to support these tests. To run the tests I had to fix #480 for the autoconf/Makefile build system otherwise the `libkleeRuntest` library would not be found by the system linker at runtime.
2016-12-28Changed preferred permissions from 0622 to the more standard 0644.Cristian Cadar
2016-12-03[CMake] Fix bug in the Makefile bitcode build system where the runtimeDan Liew
would not recompile if the `Makefile.cmake.bitcode.rules` file changed.
2016-12-03[CMake] Fix bug in the Makefile bitcode build system where the runtimeDan Liew
would not recompile if the LLVM C compiler flags changed. This could happen if the user did something like ``` make -f Makefile.cmake.bitcode LLVMCC.ExtraFlags=-Wall ```
2016-12-02CMake: support LLVMCC.ExtraFlagsJiri Slaby
With the old buildsystem we could pass CFLAGS when building runtime libs. Support passing some additional flags to cmake-based system too. We need this to build 32 and 64bit runtime libs separately (but not whole klee). Signed-off-by: Jiri Slaby <jslaby@suse.cz>
2016-11-20[CMake] Implement install of the kleeRuntest target.Dan Liew
2016-11-07Implement a CMake based build system for KLEE.Dan Liew
This is based off intial work by @jirislaby in #481. However it has been substantially modified. Notably it includes a separate build sytem to build the runtimes which is inspired by the old build system. The reason for doing this is because CMake is not well suited for building the runtime: * CMake is configured to use the host compiler, not the bitcode compiler. These are not the same thing. * Building the runtime using `add_custom_command()` is flawed because we can't automatically get transitive depencies (i.e. header file dependencies) unless the CMake generator is makefiles. (See `IMPLICIT_DEPENDS` of `add_custom_command()` in CMake). So for now we have a very simple build system for building the runtimes. In the future we can replace this with something more sophisticated if we need it. Support for all features of the old build system are implemented apart from recording the git revision and showing it in the output of `klee --help`. Another notable change is the CMake build system works much better with LLVM installs which don't ship with testing tools. The build system will download the sources for `FileCheck` and `not` tools if the corresponding binaries aren't available and will build them. However `lit` (availabe via `pip install lit`) and GTest must already be installed. Apart from better support for testing a significant advantage of the new CMake build system compared to the existing "Autoconf/Makefile" build system is that it is **not** coupled to LLVM's build system (unlike the existing build system). This means that LLVM's autoconf/Makefiles don't need to be installed somewhere on the system. Currently all tests pass. Support has been implemented in TravisCI and the Dockerfile for building with CMake. The existing "Autoconf/Makefile" build system has been left intact and so both build systems can coexist for a short while. We should remove the old build system as soon as possible though because it creates an unnecessary maintance burden.
2016-08-19Added -save-all-writes to klee_init_env help messageAndrea Mattavelli
2016-05-31Merge pull request #405 from ccadar/timesCristian Cadar
Fixed the stub for times() not to dereference a NULL pointer when cal…
2016-05-27Improved help message for POSIX environment options.Cristian Cadar
2016-05-27Fixed the stub for times() not to dereference a NULL pointer when call with ↵Cristian Cadar
a NULL argument. In respose of issue https://github.com/klee/klee/issues/399
2016-05-24Split creation of symbolic files and stdin in two distinct optionsAndrea Mattavelli
2016-03-22Add soname for Runtest dynamic libraryMartin Nowack
Based on llvm-shlib/Makefile SHARED_VERSION reflects the API version of the library itself
2016-03-05Fix SELinux signatures in runtimeLaszlo Szekeres
The SELinux function signatures have changed between version 2.2 and 2.3. In particular, the type of the "security context" parameter was changed from char * to const char *, with the following patch: SELinuxProject/selinux@9eb9c9327563014ad6a807814e7975424642d5b9. Recent Linux distributions (e.g. Ubuntu 15.10) ship with the updated version of libselinux. This change makes the SELinux runtime compatible with the newer versions of the library by replacing security_context_t with its original char * definition and defining it as const only if the installed library does so. Whether the system uses const char * types is detected with the configure script. Fixes klee/klee#303.
2015-06-03Added an option --readable-posix-inputs which is used to turn on/off the CEX ↵Cristian Cadar
preferences added in the POSIX model. Removed option --prefer-cex which controlled all CEX preferences.
2015-04-25Change install location of KLEE's bytecode runtime librariesDan Liew
to ``${PREFIX}/lib/klee/runtime``. This addresses issue #233
2015-04-25Clean up the installation/building of the runtime libraries.Dan Liew
* We don't need to build the native versions so that is now disabled * We don't need to install (and hence build) the bytecode archive library versions of klee-libc or kleeRuntimeIntrinsic for new versions of LLVM right now (this is kind of messy).
2015-04-02Use C instead of C++ comments in C files to silence compiler warnings.Cristian Cadar
2015-04-01[runtime] Fix include in klee_intMartin Nowack
2015-04-01[runtime] Fix comments to c style for c files and headersMartin Nowack
2014-09-14Replace fprintf with klee_warnings for POSIX libMartin Nowack
2014-01-09Fixed race condition in parallel build where a symbolic linkDan Liew
(for klee-uclibc) would be created before the destination directory existed.
2013-12-21klee-uclibc detection is now a lot cleaner. KLEE now assumesDan Liew
it can find klee-uclibc inside the same folder as the other runtime libraries with the name "klee-uclibc.bca" This is implemented as follows: * When building, a sym-link is created to klee-uclibc's libc.a file in the same directory that the rest of KLEE's runtime libraries are built. This done so that if a developer changes klee-uclibc on their system then the correct version of klee-uclibc is used by KLEE. * When installing, klee-uclibc's libc.a file is installed in the same directory that the rest of KLEE's runtime libraries are installed. In addition the configure script argument --with-uclibc can now operate in two ways. It can either be passed the path to the root of klee-uclibc or it can be passed a path to the libc.a file built by klee-uclibc. This new behaviour has been added to allow users to potential use pre-built versions of klee-uclibc.
2013-11-15Merge branch 'master' of https://github.com/ccadar/kleeCristian Cadar
2013-11-15Removed testing-env file. As for testing-dir that was removed in aCristian Cadar
prior patch, this is part of the CU experiments and doesn't really belong here.
2013-11-14Remove unused testing-dirMartin Nowack