Several Crucible frontends (jvm, llvm, go) make use of types that include:
An override "handler", with a type like forall bak. IsSymBackend sym bak => bak -> Ctx.Assignment (RegValue sym) args -> OverrideSim p sym ext rtp args ret (RegValue sym ret)
A CtxRepr args
A TypeRepr ret
Several language extensions make use of the LLVM memory model (e.g., LLVM, WASM, and Macaw), and could concievably share override implementations relating to memory. One could also imagine sharing implementations of overrides like crucible_assert. To make this task easier, it would be nice to unify these notions of "typed overrides", by adding a type to the base Crucible library and using it in the different frontends.
Several Crucible frontends (jvm, llvm, go) make use of types that include:
forall bak. IsSymBackend sym bak => bak -> Ctx.Assignment (RegValue sym) args -> OverrideSim p sym ext rtp args ret (RegValue sym ret)
CtxRepr args
TypeRepr ret
Several language extensions make use of the LLVM memory model (e.g., LLVM, WASM, and Macaw), and could concievably share override implementations relating to memory. One could also imagine sharing implementations of overrides like
crucible_assert
. To make this task easier, it would be nice to unify these notions of "typed overrides", by adding a type to the base Crucible library and using it in the different frontends.