module Value: sig
.. end
The Value analysis itself.
See also internal documentation.
type
state = Relations_type.Model.t
Internal state of the value analysis.
type
t = Cvalue_type.V.t
Internal representation of a value.
exception Aborted
val self : Project.Computation.t
Internal state of the value analysis from project viewpoints.
Consult the Plugin Development Guide for additional details.
val mark_as_computed : unit -> unit
Indicate that the value analysis has been done already.
val compute : (unit -> unit) Pervasives.ref
val is_computed : unit -> bool
val degeneration_occurred : (Cil_types.kinstr -> Cil_types.lval option -> unit) Pervasives.ref
This hook is called by the value analysis in the seldom
case a total degeneration occurs.
Getters
val get_initial_state : Db_types.kernel_function -> state
val get_state : Cil_types.kinstr -> state
val globals_state : unit -> state
Return the default initial values of globals. This might be
different from the initial state of the value analysis in
the library case.
val find : state -> Locations.location -> t
Evaluations
val eval_lval : (with_alarms:CilE.warn_mode ->
Locations.Zone.t option ->
state ->
Cil_types.lval -> Locations.Zone.t option * Cvalue_type.V.t)
Pervasives.ref
val eval_expr : (with_alarms:CilE.warn_mode ->
state -> Cil_types.exp -> Cvalue_type.V.t)
Pervasives.ref
val eval_expr_with_state : (with_alarms:CilE.warn_mode ->
state -> Cil_types.exp -> state * Cvalue_type.V.t)
Pervasives.ref
val find_lv_plus : (with_alarms:CilE.warn_mode ->
Relations_type.Model.t -> Cil_types.exp -> (Cil_types.lval * Ival.t) list)
Pervasives.ref
returns the list of all decompositions of expr
into the sum an lvalue
and an interval.
Values and kernel functions
val expr_to_kernel_function : (Cil_types.kinstr ->
with_alarms:CilE.warn_mode ->
deps:Locations.Zone.t option ->
Cil_types.exp -> Locations.Zone.t * Db_types.kernel_function list)
Pervasives.ref
val expr_to_kernel_function_state : (state ->
deps:Locations.Zone.t option ->
Cil_types.exp -> Locations.Zone.t * Db_types.kernel_function list)
Pervasives.ref
exception Not_a_call
val call_to_kernel_function : Cil_types.stmt -> Db_types.kernel_function list
Return the functions that can be called from this call.
Raises Not_a_call
if the statement is not a call.
val valid_behaviors : (Db_types.kernel_function -> state -> Cil_types.funbehavior list)
Pervasives.ref
Reachability
val is_accessible : Cil_types.kinstr -> bool
val is_reachable : state -> bool
val is_reachable_stmt : Cil_types.stmt -> bool
About kernel functions
exception Void_Function
val find_return_loc : Db_types.kernel_function -> Locations.location
Return the location of the returned lvalue of the given function.
Raises Void_Function
is the function does not return any value.
val is_called : (Db_types.kernel_function -> bool) Pervasives.ref
val callers : (Db_types.kernel_function ->
(Db_types.kernel_function * Cil_types.stmt list) list)
Pervasives.ref
Returns the list of callers with their call sites. Each function is
present only once in the list.
val never_terminates : (Db_types.kernel_function -> bool) Pervasives.ref
Returns true
if the function never reaches its return.
Values in kinstr
val access : (Cil_types.kinstr -> Cil_types.lval -> t) Pervasives.ref
val access_expr : (Cil_types.kinstr -> Cil_types.exp -> t) Pervasives.ref
val access_location : (Cil_types.kinstr -> Locations.location -> t) Pervasives.ref
val access_after : (Cil_types.kinstr -> Cil_types.lval -> t) Pervasives.ref
Raises Not_found
if the kinstr has no accessible successors.
val access_location_after : (Cil_types.kinstr -> Locations.location -> t) Pervasives.ref
Raises Not_found
if the kinstr has no accessible successors.
val lval_to_offsetmap_after : (Cil_types.kinstr -> Cil_types.lval -> Cvalue_type.V_Offsetmap.t option)
Pervasives.ref
Raises Not_found
if the kinstr has no accessible successors.
Locations of left values
val lval_to_loc : (Cil_types.kinstr ->
with_alarms:CilE.warn_mode -> Cil_types.lval -> Locations.location)
Pervasives.ref
val lval_to_loc_with_deps : (Cil_types.kinstr ->
with_alarms:CilE.warn_mode ->
deps:Locations.Zone.t ->
Cil_types.lval -> Locations.Zone.t * Locations.location)
Pervasives.ref
val lval_to_loc_with_deps_state : (state ->
deps:Locations.Zone.t ->
Cil_types.lval -> Locations.Zone.t * Locations.location)
Pervasives.ref
val lval_to_loc_state : (state -> Cil_types.lval -> Locations.location) Pervasives.ref
val lval_to_offsetmap : (Cil_types.kinstr ->
Cil_types.lval ->
with_alarms:CilE.warn_mode -> Cvalue_type.V_Offsetmap.t option)
Pervasives.ref
val lval_to_zone : (Cil_types.kinstr ->
with_alarms:CilE.warn_mode -> Cil_types.lval -> Locations.Zone.t)
Pervasives.ref
val lval_to_zone_state : (state -> Cil_types.lval -> Locations.Zone.t) Pervasives.ref
Does not emit alarms.
val assigns_to_zone_inputs_state : (state ->
Cil_types.identified_term Cil_types.assigns list -> Locations.Zone.t)
Pervasives.ref
Callbacks
module Record_Value_Callbacks: Hook.S
with type param = (kernel_function * kinstr) list
* state Cilutil.InstrHashtbl.t
Actions to perform at end of each function analysis.
module Record_Value_Superposition_Callbacks: Hook.S
with type param = (kernel_function * kinstr) list
* State_set.t Cilutil.InstrHashtbl.t
module Call_Value_Callbacks: Hook.S
with type param = state * (kernel_function * kinstr) list
Actions to perform at each treatment of a "call" statement.
Pretty printing
val pretty : Format.formatter -> t -> unit
val pretty_state_without_null : Format.formatter -> state -> unit
val pretty_state : Format.formatter -> state -> unit
val display : Format.formatter -> Db_types.kernel_function -> unit
val display_globals : Format.formatter -> unit -> unit
Internal use only
val noassert_get_state : Cil_types.kinstr -> state
val initial_state_only_globals : (unit -> state) Pervasives.ref
val update_table : Cil_types.kinstr -> state -> unit
val memoize : (Db_types.kernel_function -> unit) Pervasives.ref
val merge_initial_state : Db_types.kernel_function -> state -> unit
Store an additional possible initial state for the given function as
well as its values for actuals.