I had good experience using STP for symbolic performance. STP was designed specifically for this task. In addition, there are a number of symbolic execution tools that have successfully used STP for this purpose, so there is reason to believe that STP does not suck. I would definitely recommend STP to others as the default choice for this kind of experimentation.
However, I have not tried other systems, so I do not know how STP compares with them.
Personally, I see STP as the baseline and the default for this type of application. So, if you only have time to try one solver, trying STP seems like a pretty smart choice.
If I were to guess, I would suggest that bitwise vector arithmetic is important for support, because any large system code will have a non-trivial amount of code that performs bitwise operations. In addition, I suspect / worry that some system code may rely on unsigned arithmetic to wrap modulo 2 n and if you try to model it with integers, you wonβt get the C semantics (because, as you say, integers are not correct for machine word arithmetic), and therefore, if you try to use a solver with an integer, you may encounter some difficulties. However, I have no solid evidence for any of these suspicions.
PS Z3 can also be a contender to be added to your list. (Do you really need your solver for open-source, if it is free? I would expect the symbolic runtime tool to use it only as a black box without changes.)
source share