Wp.MemMemoryval t_addr : Lang.F.tauval t_malloc : Lang.F.tauallocation tables
val t_init : Lang.F.tauinitialization tables
val t_mem : Lang.F.tau -> Lang.F.taut_addr indexed array
val a_null : Lang.F.termNull address. Same as a_addr 0 0
val a_global : Lang.F.term -> Lang.F.termZero-offset base. Same as a_addr base 0
val a_addr : Lang.F.term -> Lang.F.term -> Lang.F.termConstructor for { base ; offset }
val a_shift : Lang.F.term -> Lang.F.term -> Lang.F.termShift: a_shift a k adds k to a.offset
val a_base : Lang.F.term -> Lang.F.termReturns the base
val a_offset : Lang.F.term -> Lang.F.termReturns the offset
val a_base_offset : Lang.F.term -> Lang.F.term -> Lang.F.termReturns the offset in bytes from the logic offset (which is a memory cell index, actually)
val f_null : Lang.lfunval f_base : Lang.lfunval f_global : Lang.lfunval f_shift : Lang.lfunval f_offset : Lang.lfunval f_havoc : Lang.lfunval f_set_init : Lang.lfunval f_region : Lang.lfunval f_addr_of_int : Lang.lfunPhysical address
val f_int_of_addr : Lang.lfunPhysical address
val p_addr_lt : Lang.lfunval p_addr_le : Lang.lfunval p_linked : Lang.lfunval p_framed : Lang.lfunval p_sconst : Lang.lfunval p_cinits : Lang.lfunval p_is_init_r : Lang.lfunval p_separated : Lang.lfunval p_included : Lang.lfunval p_valid_rd : Lang.lfunval p_valid_rw : Lang.lfunval p_valid_obj : Lang.lfunval p_invalid : Lang.lfunval p_eqmem : Lang.lfunval p_monotonic : Lang.lfunRegister simplifiers for functions producing addr terms:
~base es is the simplifier for (f es).base~offset es is the simplifier for (f es).offset~linear:true register simplifier f(f(p,i),k)=f(p,i+j) on f~equal a b is the set_eq_builtin for fThe equality builtin is wrapped inside a default builtin that compares f es by computing base and offset.
val register :
?base:( Lang.F.term list -> Lang.F.term ) ->
?offset:( Lang.F.term list -> Lang.F.term ) ->
?equal:( Lang.F.term -> Lang.F.term -> Lang.F.pred ) ->
?linear:bool ->
Lang.lfun ->
unitframes ~addr are frame conditions for reading a value at address addr from a chunk of memory. The value read at addr have length offset, while individual element in memory chunk have type tau and offset length sizeof.
Memory variables use ~basename or "mem" by default.
val frames :
addr:Lang.F.term ->
offset:Lang.F.term ->
sizeof:Lang.F.term ->
?basename:string ->
Lang.F.tau ->
Sigs.frame listval separated :
shift:( 'a -> Ctypes.c_object -> Lang.F.term -> 'a ) ->
addrof:( 'a -> Lang.F.term ) ->
sizeof:( Ctypes.c_object -> Lang.F.term ) ->
'a Sigs.rloc ->
'a Sigs.rloc ->
Lang.F.predval included :
shift:( 'a -> Ctypes.c_object -> Lang.F.term -> 'a ) ->
addrof:( 'a -> Lang.F.term ) ->
sizeof:( Ctypes.c_object -> Lang.F.term ) ->
'a Sigs.rloc ->
'a Sigs.rloc ->
Lang.F.pred