Frama-C API - Memory
Common Types and Signatures
General Definitions
Oriented equality or arbitrary relation
Access conditions
Abstract location or concrete value
type 'a rloc = | Rloc of Ctypes.c_object * 'a| Rrange of 'a * Ctypes.c_object * Lang.F.term option * Lang.F.term option
Contiguous set of locations
type 'a sloc = | Sloc of 'a| Sarray of 'a * Ctypes.c_object * int(*full sized range (optimized assigns)
*)| Srange of 'a * Ctypes.c_object * Lang.F.term option * Lang.F.term option| Sdescr of Lang.F.var list * 'a * Lang.F.pred
Structured set of locations
type 'a region = (Ctypes.c_object * 'a sloc) listTyped set of locations
Logical values, locations, or sets of
Container for the returned value of a function
Reversing Models
It is sometimes possible to reverse memory models abstractions into ACSL left-values via the definitions below.
and s_host = | Mvar of Frama_c_kernel.Cil_types.varinfo(*Variable
*)| Mmem of Lang.F.term(*Pointed value
*)| Mval of s_lval(*Pointed value of another abstract left-value
*)
type mval = | Maddr of s_lval(*The value is the address of an l-value in current memory
*)| Mlval of s_lval(*The value is the value of an l-value in current memory
*)| Minit of s_lval(*The value is the init state of an l-value in current memory
*)| Mchunk of Sigma.Chunk.t(*The value is an abstract memory chunk (description)
*)
Reversed abstract value
type update = | Mstore of s_lval * Lang.F.term(*An update of the ACSL left-value with the given value
*)
Reversed update
Memory Models
module type Model = sig ... endMemory Models.
C and ACSL Compilers
module type CodeSemantics = sig ... endCompiler for C expressions
module type LogicSemantics = sig ... endCompiler for ACSL expressions
module type LogicAssigns = sig ... endCompiler for Performing Assigns
module type Compiler = sig ... endAll Compilers Together
