Closed langston-barrett closed 4 months ago
Ah, whoops, this breaks something in UC-Crux.
Indeed, UC-Crux does actually create LLVMOverride
s that use callCFG
to call LLVM CFGs. The way I see it, there are two paths forward:
ext
a type parameter of LLVMOverride
. Then the overrides in Crucible-LLVM would be polymorphic over ext
, while the ones in UC-Crux would fix ext
to LLVM
. This is the most flexible solution, as it allows each override to choose a particular extension if it needs it, or not if not.@RyanGlScott any thoughts?
I am fine with either option, but option (1) sounds slightly more appealing since we want to make LLVMOverride
more like TypedOverride
anyway (https://github.com/GaloisInc/crucible/issues/1138), and TypedOverride
is already parameterized by ext
.
I'd also vote for option 1: I think it's probably too early to give up on uc-crux-llvm's potential.
Previously, the
OverrideSim
action for anLLVMOverride
was assumed to have a fixedext
parameter, namely,LLVM
. While this is intuitively appealing, it turns out not to be necessary. This is because there are only a few operations in theOverrideSim
monad that make essential use of theext
parameter, such as registering or calling a CFG in the given language extension. These operations are unlikely to be used when defining, e.g., overrides for libc functions.The motivation for generalizing the parameter is to enable the reuse of
LLVMOverride
s in other Crucible language extensions that make use of the LLVM memory model, namely, Macaw.