-
Notifications
You must be signed in to change notification settings - Fork 273
DRAFT: Control Flow Retrace feature #8636
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: develop
Are you sure you want to change the base?
Conversation
Codecov ReportAttention: Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## develop #8636 +/- ##
=========================================
Coverage 80.37% 80.37%
=========================================
Files 1686 1687 +1
Lines 206885 207009 +124
Branches 73 73
=========================================
+ Hits 166276 166376 +100
- Misses 40609 40633 +24 ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
61240e2
to
d7e20dd
Compare
Adds a feature to retrace and verify a single control flow path. The path can be given using `--retrace` as a string of 0s and 1s. From a very brief evaluation test, it seems to be faster than bounded loop unwinding. Only that it might be challenging to find a path to retrace. The 0s and 1s in the input retrace string follow the goto decisions in cbmc's internal goto program representation. During symbolic execution, files and line numbers for each decision are logged to the console, so the interactive use should be intuitive. Co-authored-by: Yosephine Setiawan <[email protected]>
I have not changed these lines but check-clang-format failed nonetheless. Thus, I added this extra commit.
978abb8
to
7554fc5
Compare
This adds one test file for the new --retrace feature.
I added the test file Apart from that, testing seems to work well. I would also add the |
Description
Adds a feature to retrace and verify a single control flow path. The path can be given using
--retrace
as a string of 0s and 1s. From a very brief evaluation test, it seems to be faster than bounded loop unwinding. Only that it might be challenging to find a path to retrace. The 0s and 1s in the input retrace string follow the goto decisions in cbmc's internal goto program representation. During symbolic execution, files and line numbers for each decision are logged to the console, so the interactive use should be intuitive.Some examples and evaluations are here: examples_and_evaluation.zip
Use Cases
Open problems/questions
--unwind
and--paths
. We tried to implement this also in cbmc, but we faced several problems, like where to store the intermediate tracing decisions, as multiple branches are explored and states are sometimes copied, sometimes reused. Furthermore, the methodsymex_goto()
is very complicated so that it is not trivial, when and which tracing decisions were taken.Technical remarks
The implementation is mainly in the new method
goto_retrace()
insymex_goto.cpp
.