You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
SMACK only generates one region for both x and y whereas if we choose to use mystrlen, SMACK produces two regions. If we adopt a context-sensitive version of sea-dsa, we will get a region for each call site of strlen.
The text was updated successfully, but these errors were encountered:
sea-dsa's context-sensitive analysis produces a graph for each function, where each pointer of the function is associated with a cell. Take one of sea-dsa's regression tests as an example,
Compiling it with O1 and invoking the context-sensitive version of sea-dsa produces the following three graphs.
So a rudimentary attempt to add the context-sensitive memory model is to encode the functions in store-passing style. Namely, each Boogie procedure takes input as the regions which its pointers are associated with and returns the updated regions.
For example, for f, g, and main, their signatures are,
For each procedure, we assign the in version of a region into its out version because parameters are immutable in Boogie. So, for example, we do the following in g:
entry:
M.out.1 := M.in.1;
M.out.2 := M.in.2;
In this way, we always use the out version of a region when encoding load/store instructions.
Motivation
Small functions that modify/access pointers such as
strlen
,strcmp
, andxmalloc
cause DSA to merge nodes unnecessarily. For example,SMACK only generates one region for both
x
andy
whereas if we choose to usemystrlen
, SMACK produces two regions. If we adopt a context-sensitive version of sea-dsa, we will get a region for each call site ofstrlen
.The text was updated successfully, but these errors were encountered: