Module type Domain_sig.With_Queries

module Context : Context
type binary
type memory
module Query : sig ... end
val should_focus : size:int -> Context.t -> memory -> binary -> (binary * int * int) option

should_focus ~size ctx mem addr asks the domain whether it is useful to "focus" (or "unfold", i.e. try to represent precisely the memory region pointed to by addr, as long as aliasing info ensures that it is sound) a loaded value. size should be the size of addr. If the answer is yes, then the returned value should contain three things about the region to focus: its base, its size (in bits) and the offset of addr in it (in bits).

val may_alias : ptr_size:int -> Context.t -> size1:int -> size2:int -> binary -> binary -> bool

may_alias ~ptr_size ~size1 ~size2 ctx addr1 addr2 should return whether the region starting at addr1 of size size1 bytes and the region starting at addr2 of size size2 bytes may have a non-empty intersection. This function is used by focusing abstractions to discard a focused region when writing in a possibly aliased address. ptr_size is the size in bits of both addr1 and addr2.