Commit Graph

80 Commits

Author SHA1 Message Date
Joe Ranweiler
27b2a490ee Comment out unsupported KLEE functions
We don't declare the functions to ensure compilation fails fast, not
linking. We keep the commented prototype for the sake of documentation,
instead of just deleting it. We may also eventually be able to impl the
functions if we extend the DeepState API.
2018-02-25 10:27:47 -08:00
Joe Ranweiler
994d29b2d3 Add no-op impls for KLEE-internal debugging functions 2018-02-25 10:27:47 -08:00
Joe Ranweiler
e33b910182 Add no-op impls for KLEE engine commands
These functions do not have a DeepState equivalent, nor do they impact
the semantics of the symbolic program to be executed.
2018-02-25 10:27:47 -08:00
Joe Ranweiler
6b95aab503 Impl klee_silent_exit() 2018-02-25 10:27:47 -08:00
Joe Ranweiler
9e3d1d1eb2 Impl KLEE warning funcs 2018-02-25 10:27:47 -08:00
Joe Ranweiler
236ee6856e Add lib impl for klee_make_symbolic() 2018-02-23 15:42:17 -08:00
Joe Ranweiler
f7791f216f Add stub header that declares the KLEE API 2018-02-23 15:42:17 -08:00
Joe Ranweiler
f39a89d059 Use consistent naming conventions 2018-02-21 19:32:26 -08:00
Joe Ranweiler
49fd41f5e1 Return bool from DeepState_Catch... functions 2018-02-21 19:31:45 -08:00
Joe Ranweiler
691cf24108 Remove usage of old internal globals
- Use `DeepState_CurrentTestRun` global shared struct
- Allocate memory for the above in `DeepState_Setup()`
- Update `DeepState_Catch...` functions to map enums to status ints
2018-02-21 19:22:20 -08:00
Joe Ranweiler
f07fd1cab7 Split up mapping and init of current test run globals
- Use `DeepState_AllocCurrentTestRun()` to map memory in take-over setup
- Add error handling for `mmap()` call
- Unify init of test globals via `DeepState_InitCurrentTestRun()`
2018-02-21 19:09:01 -08:00
Joe Ranweiler
4f711da986 Use DeepState_CurrentTestRun in take-over test case replays
- Map shared memory for `DeepState_CurrentTestRun`
- For non-crashing forked test runs, inspect the above to figure out
  what happened. In particular, this supports `CHECK` and soft failures.
2018-02-21 18:52:23 -08:00
Joe Ranweiler
d4dc9eaa01 Add struct for info about single test runs, update in global setters
Instead of exit codes, we will use the global instance of this (shared
with a parent process) to determine the result of forked test runs.
2018-02-21 18:49:42 -08:00
Joe Ranweiler
9d47f21f5a Hide mutation of test globals behind internal functions 2018-02-21 17:17:43 -08:00
Joe Ranweiler
341c2da0f8 Fix type of --take_over flag 2018-02-21 16:56:12 -08:00
Joe Ranweiler
c09feec114 Call DeepState_Begin() for each forked take-over test case 2018-02-20 15:52:14 -08:00
Joe Ranweiler
23dbbbdc57 Log all test run result cases in native take-over
Warning: this does not work correctly with tests that soft fail, e.g.
via a `CHECK` assertion. This is because the soft failures only update
the child's `DeepState_TestFailed` global variable, but do not exit.
What we will soon do is share memory with the child process, and derive
the "test result" from that shared memeory.
2018-02-20 15:43:34 -08:00
Joe Ranweiler
a81f816d89 If in take-over mode, exit on fatal error
In take-over mode, the "test" is the entire binary being executed as a
child process. So, we want to exit, rather than trying to `longjmp()` to
`DeepState_ReturnToRun`, which was never initialized.
2018-02-20 15:43:34 -08:00
Joe Ranweiler
065c97c2c0 Add --take_over flag to native binaries 2018-02-20 15:43:34 -08:00
Joe Ranweiler
661c600d2b Add impl of native takeover test case replay 2018-02-20 15:43:34 -08:00
Joe Ranweiler
93a95b0e96 Use native fake test and file name that matches executors 2018-02-20 15:43:34 -08:00
Joe Ranweiler
4d5e390c15 Factor out native runs of saved cases for a single test 2018-02-20 15:43:34 -08:00
Joe Ranweiler
45fcfe0921 Add DeepState_TakeOver() interface 2018-02-20 10:31:29 -08:00
Joe Ranweiler
226d0f5513 Add enum for test run results and exit codes 2018-02-15 12:43:12 -08:00
Joe Ranweiler
0b82d4e409 Run saved .crash test cases in native harness 2018-02-14 12:30:14 -08:00
Joe Ranweiler
23af5b562d Add DeepState_Crash() hook 2018-02-14 12:22:38 -08:00
Joe Ranweiler
86d0fac206 Log error when test crashes 2018-02-14 12:06:26 -08:00
Joe Ranweiler
ac7e57a833 Consistently stub test case save hooks 2018-02-14 10:24:15 -08:00
Joe Ranweiler
ab43f75361 Add hook to save crashing tests 2018-02-14 10:24:15 -08:00
Joe Ranweiler
68595a9493 Fix handling of test failures due to uncaught exceptions
We don't just want to exit here, but `longjmp()` back to the conditional
via a call to `DeepState_Fail()`. In doing so, we end up in the common
`DeepState_CatchFail()` branch, which exits with the same nonzero error
code, but also saves the test case if appropriate.
2018-02-14 10:10:51 -08:00
Joe Ranweiler
a68520642a Fully factor out forking and running a single test 2018-02-13 14:37:14 -08:00
Joe Ranweiler
3c5d5daeaf Use more accurate function name 2018-02-13 14:37:14 -08:00
Joe Ranweiler
b61b3e7f2d Fork for all test runs 2018-02-13 14:37:14 -08:00
Joe Ranweiler
8f39961b3f Save result of forked test run if flag set 2018-02-13 14:37:14 -08:00
Joe Ranweiler
8ff5f6cac6 Fork when running saved test cases
This anticipates support for crashing tests.
2018-02-13 14:23:44 -08:00
Joe Ranweiler
879000bc73 Document functions for running saved test cases 2018-02-11 12:52:56 -08:00
Joe Ranweiler
d25a181771 Fix indent level 2018-02-10 16:09:37 -08:00
Joe Ranweiler
579cba3705 Check for error when stating test input file 2018-02-10 16:09:37 -08:00
Joe Ranweiler
d81cbba137 Clear log stream before failing with longjmp in fatal log
When an assertion fails in the C++ API, it ultimately invokes a
`Fatal`-level `DeepState_Log()`. This calls `DeepState_Fail()`, which
longjmps. If we don't clear the log buffer here, it won't get cleared by
the usual logic which does so. This causes hanging, unflushed log
messages to persist between tests.

This relationship should eventually be inverted and decoupled.
2018-02-10 16:09:37 -08:00
Joe Ranweiler
4a90b2a5e8 Skip tests with no saved cases to run 2018-02-10 16:09:37 -08:00
Joe Ranweiler
f3d13e37b3 Factor out initializing input from file 2018-02-10 16:09:36 -08:00
Joe Ranweiler
78cc5d46be Add initial impl of running saved test cases 2018-02-10 16:09:36 -08:00
Joe Ranweiler
2c7334ab0d Fix typo in error message 2018-02-10 16:09:36 -08:00
Joe Ranweiler
dd8a1c6608 Use external linkage for global input buffer
This is to support running saved auto-generated test cases.
2018-02-08 16:07:35 -08:00
Joe Ranweiler
c6eca451c5 Fix flag decl and defs 2018-02-08 14:16:16 -08:00
Peter Goodman
1aa468dabc Minor formatting changes. 2018-02-06 12:18:06 +08:00
Peter Goodman
2eaeb7480c Adding Google Flags-like command-line option parsing, though implemented in C, to the main executable. The code is ported from Granary2. 2018-01-07 16:25:31 -05:00
Peter Goodman
622afcdb98 Made variadic argument lists work in 32 bit x86. 2017-12-13 23:53:48 -05:00
Peter Goodman
303da80e78 Add OneOf for C-strings, vectors, and arrays. 2017-12-13 23:08:50 -05:00
Peter Goodman
1433f34960 Makeing 100% sure that the format_bufs are NUL-terminated. 2017-12-13 22:46:20 -05:00