package frama-c
Install
dune-project
Dependency
Authors
-
MMichele Alberti
-
TThibaud Antignac
-
GGergö Barany
-
PPatrick Baudin
-
TThibaut Benjamin
-
AAllan Blanchard
-
LLionel Blatter
-
FFrançois Bobot
-
RRichard Bonichon
-
QQuentin Bouillaguet
-
DDavid Bühler
-
ZZakaria Chihani
-
LLoïc Correnson
-
JJulien Crétin
-
PPascal Cuoq
-
ZZaynah Dargaye
-
BBasile Desloges
-
JJean-Christophe Filliâtre
-
PPhilippe Herrmann
-
MMaxime Jacquemin
-
FFlorent Kirchner
-
AAlexander Kogtenkov
-
TTristan Le Gall
-
JJean-Christophe Léchenet
-
MMatthieu Lemerre
-
DDara Ly
-
DDavid Maison
-
CClaude Marché
-
AAndré Maroneze
-
TThibault Martin
-
FFonenantsoa Maurica
-
MMelody Méaulle
-
BBenjamin Monate
-
YYannick Moy
-
AAnne Pacalet
-
VValentin Perrelle
-
GGuillaume Petiot
-
DDario Pinto
-
VVirgile Prevosto
-
AArmand Puccetti
-
FFélix Ridoux
-
VVirgile Robles
-
MMuriel Roger
-
JJulien Signoles
-
NNicolas Stouls
-
KKostyantyn Vorobyov
-
BBoris Yakobowski
Maintainers
Sources
sha256=5b13574a16a58971c27909bee94ae7f37b17d897852b40c768a3d4e2e09e39d2
doc/frama-c.kernel/Frama_c_kernel/Db/Value/index.html
Module Db.Value
Deprecated module: use the Eva.mli API instead.
type state = Cvalue.Model.tInternal state of the value analysis.
type t = Cvalue.V.tInternal representation of a value.
val proxy : State_builder.Proxy.tval self : State.tInternal state of the value analysis from projects viewpoint.
val compute : (unit -> unit) refCompute the value analysis using the entry point of the current project. You may set it with Globals.set_entry_point.
module Table_By_Callstack :
State_builder.Hashtbl
with type key = Cil_types.stmt
and type data = state Value_types.Callstack.Hashtbl.tTable containing the results of the value analysis, ie. the state before the evaluation of each reachable statement.
module AfterTable_By_Callstack :
State_builder.Hashtbl
with type key = Cil_types.stmt
and type data = state Value_types.Callstack.Hashtbl.tTable containing the state of the value analysis after the evaluation of each reachable and evaluable statement. Filled only if Value_parameters.ResultsAfter is set.
val ignored_recursive_call : Cil_types.kernel_function -> boolThis functions returns true if the value analysis found and ignored a recursive call to this function during the analysis.
val condition_truth_value : Cil_types.stmt -> bool * boolProvided stmt is an 'if' construct, fst (condition_truth_value stmt) (resp. snd) is true if and only if the condition of the 'if' has been evaluated to true (resp. false) at least once during the analysis.
Parameterization
val use_spec_instead_of_definition : (Cil_types.kernel_function -> bool) refTo be called by derived analyses to determine if they must use the body of the function (if available), or only its spec. Used for value builtins, and option -val-use-spec.
Arguments of the main function
The functions below are related to the arguments that are passed to the function that is analysed by the value analysis. Specific arguments are set by fun_set_args. Arguments reset to default values when fun_use_default_args is called, when the ast is changed, or if the options -libentry or -main are changed.
val fun_set_args : t list -> unitSpecify the arguments to use.
val fun_get_args : unit -> t list optionFor this function, the result None means that default values are used for the arguments.
Raised by Db.Compute when the arguments set by fun_set_args are not coherent with the prototype of the function (if there are too few or too many of them)
Initial state of the analysis
The functions below are related to the value of the global variables when the value analysis is started. If globals_set_initial_state has not been called, the given state is used. A default state (which depends on the option -libentry) is used when globals_use_default_initial_state is called, or when the ast changes.
val globals_set_initial_state : state -> unitSpecify the initial state to use.
val globals_state : unit -> stateInitial state used by the analysis
Getters
State of the analysis at various points
val get_initial_state : Cil_types.kernel_function -> stateval get_initial_state_callstack :
Cil_types.kernel_function ->
state Value_types.Callstack.Hashtbl.t optionval get_state : ?after:bool -> Cil_types.kinstr -> stateafter is false by default.
val get_stmt_state_callstack :
after:bool ->
Cil_types.stmt ->
state Value_types.Callstack.Hashtbl.t optionval get_stmt_state : ?after:bool -> Cil_types.stmt -> stateafter is false by default.
val fold_stmt_state_callstack :
(state -> 'a -> 'a) ->
'a ->
after:bool ->
Cil_types.stmt ->
'aval fold_state_callstack :
(state -> 'a -> 'a) ->
'a ->
after:bool ->
Cil_types.kinstr ->
'aval find : state -> Locations.location -> tEvaluations
val eval_lval :
(?with_alarms:CilE.warn_mode ->
Locations.Zone.t option ->
state ->
Cil_types.lval ->
Locations.Zone.t option * t)
refval eval_expr :
(?with_alarms:CilE.warn_mode -> state -> Cil_types.exp -> t) refval eval_expr_with_state :
(?with_alarms:CilE.warn_mode -> state -> Cil_types.exp -> state * t) refval reduce_by_cond : (state -> Cil_types.exp -> bool -> state) refval find_lv_plus :
(Cvalue.Model.t -> Cil_types.exp -> (Cil_types.lval * Ival.t) list) refreturns 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 * Kernel_function.Hptset.t)
refval expr_to_kernel_function_state :
(state ->
deps:Locations.Zone.t option ->
Cil_types.exp ->
Locations.Zone.t * Kernel_function.Hptset.t)
refval call_to_kernel_function : Cil_types.stmt -> Kernel_function.Hptset.tReturn the functions that can be called from this call.
val valid_behaviors :
(Cil_types.kernel_function -> state -> Cil_types.funbehavior list) refval add_formals_to_state :
(state -> Cil_types.kernel_function -> Cil_types.exp list -> state) refadd_formals_to_state state kf exps evaluates exps in state and binds them to the formal arguments of kf in the resulting state
Reachability
val is_accessible : Cil_types.kinstr -> boolval is_reachable : state -> boolval is_reachable_stmt : Cil_types.stmt -> boolAbout kernel functions
val find_return_loc : Cil_types.kernel_function -> Locations.locationReturn the location of the returned lvalue of the given function.
val is_called : (Cil_types.kernel_function -> bool) refval callers :
(Cil_types.kernel_function ->
(Cil_types.kernel_function * Cil_types.stmt list) list)
refState before a kinstr
val access : (Cil_types.kinstr -> Cil_types.lval -> t) refval access_expr : (Cil_types.kinstr -> Cil_types.exp -> t) refval access_location : (Cil_types.kinstr -> Locations.location -> t) refLocations of left values
val lval_to_loc :
(Cil_types.kinstr ->
?with_alarms:CilE.warn_mode ->
Cil_types.lval ->
Locations.location)
refval 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)
refval lval_to_loc_with_deps_state :
(state ->
deps:Locations.Zone.t ->
Cil_types.lval ->
Locations.Zone.t * Locations.location)
refval lval_to_loc_state : (state -> Cil_types.lval -> Locations.location) refval lval_to_offsetmap :
(Cil_types.kinstr ->
?with_alarms:CilE.warn_mode ->
Cil_types.lval ->
Cvalue.V_Offsetmap.t option)
refval lval_to_offsetmap_state :
(state -> Cil_types.lval -> Cvalue.V_Offsetmap.t option) refval lval_to_zone :
(Cil_types.kinstr ->
?with_alarms:CilE.warn_mode ->
Cil_types.lval ->
Locations.Zone.t)
refval lval_to_zone_state : (state -> Cil_types.lval -> Locations.Zone.t) refDoes not emit alarms.
val lval_to_zone_with_deps_state :
(state ->
for_writing:bool ->
deps:Locations.Zone.t option ->
Cil_types.lval ->
Locations.Zone.t * Locations.Zone.t * bool)
reflval_to_zone_with_deps_state state ~for_writing ~deps lv computes res_deps, zone_lv, exact, where res_deps are the memory zones needed to evaluate lv in state joined with deps. zone_lv contains the valid memory zones that correspond to the location that lv evaluates to in state. If for_writing is true, zone_lv is restricted to memory zones that are writable. exact indicates that lv evaluates to a valid location of cardinal at most one.
val lval_to_precise_loc_state :
(?with_alarms:CilE.warn_mode ->
state ->
Cil_types.lval ->
state * Precise_locs.precise_location * Cil_types.typ)
refval lval_to_precise_loc_with_deps_state :
(state ->
deps:Locations.Zone.t option ->
Cil_types.lval ->
Locations.Zone.t * Precise_locs.precise_location)
refval assigns_inputs_to_zone :
(state -> Cil_types.assigns -> Locations.Zone.t) refEvaluation of the \from clause of an assigns clause.
val assigns_outputs_to_zone :
(state ->
result:Cil_types.varinfo option ->
Cil_types.assigns ->
Locations.Zone.t)
refEvaluation of the left part of assigns clause (without \from).
val assigns_outputs_to_locations :
(state ->
result:Cil_types.varinfo option ->
Cil_types.assigns ->
Locations.location list)
refEvaluation of the left part of assigns clause (without \from). Each assigns term results in one location.
val verify_assigns_froms :
(Kernel_function.t -> pre:state -> Function_Froms.t -> unit) refFor internal use only. Evaluate the assigns clause of the given function in the given prestate, compare it with the computed froms, return warning and set statuses.
module Logic : sig ... endCallbacks
type callstack = Value_types.callstackActions to perform at end of each function analysis. Not compatible with option -memexec-all
module Record_Value_Callbacks :
Hook.Iter_hook
with type param = callstack * state Cil_datatype.Stmt.Hashtbl.t Lazy.tmodule Record_Value_Superposition_Callbacks :
Hook.Iter_hook
with type param = callstack * state list Cil_datatype.Stmt.Hashtbl.t Lazy.tmodule Record_Value_After_Callbacks :
Hook.Iter_hook
with type param = callstack * state Cil_datatype.Stmt.Hashtbl.t Lazy.tval no_results : (Cil_types.fundec -> bool) refReturns true if the user has requested that no results should be recorded for this function. If possible, hooks registered on Record_Value_Callbacks and Record_Value_Callbacks_New should not force their lazy argument
module Call_Value_Callbacks :
Hook.Iter_hook with type param = state * callstackActions to perform at each treatment of a "call" statement. state is the state before the call.
module Call_Type_Value_Callbacks :
Hook.Iter_hook
with type param =
[ `Builtin of Value_types.call_froms
| `Spec of Cil_types.funspec
| `Def
| `Memexec ]
* state
* callstackActions to perform at each treatment of a "call" statement. state is the state before the call.
module Compute_Statement_Callbacks :
Hook.Iter_hook with type param = Cil_types.stmt * callstack * state listActions to perform whenever a statement is handled.
val rm_asserts : (unit -> unit) refPretty printing
val pretty : Format.formatter -> t -> unitval pretty_state : Format.formatter -> state -> unitval display : (Format.formatter -> Cil_types.kernel_function -> unit) ref