Module Build.BuildPdg


module BuildPdg: sig .. end
Module to build the PDG.

type t_state = State.t 
type t_loc = Locations.Zone.t 
type t_arg_nodes = t_node list 

type t = {
   fct : Db_types.kernel_function;
   mutable topinput : PdgTypes.Node.t option;
   mutable other_inputs : (PdgTypes.Node.t * Build.Dpd.td * Locations.Zone.t) list;
   graph : Build.G.t;
   states : State.t_states;
   index : PdgTypes.Pdg.t_index;
   ctrl_dpds : Build.SimpleNodeSet.t Cilutil.InstrHashtbl.t; (*The nodes to which each stmt control-depend on. The links will be added in the graph at the end.*)
   decl_nodes : t_node Cilutil.VarinfoHashtbl.t; (*map between declaration nodes and the variables to build the dependencies.*)
}
The PDG used during its computation.
val create : Kernel_function.t -> t
val get_kf : t -> Db_types.kernel_function
val get_states : t -> State.t_states
val pretty : Format.formatter -> t -> unit
val test_and_merge_states : old:State.t -> State.t -> bool * State.t
val print_state : Format.formatter -> State.t -> unit
val process_declarations : t ->
formals:Cilutil.VarinfoHashtbl.key list ->
locals:Cilutil.VarinfoHashtbl.key list -> State.t
val process_call_node : t -> Cil_types.stmt -> unit
val process_call_args : t ->
State.t ->
Cil_types.stmt ->
(Locations.Zone.t * Cilutil.VarinfoSet.t) list -> int * PdgTypes.Node.t list
val process_call_params : t ->
State.t ->
Cil_types.stmt -> Kernel_function.t -> State.t_node list -> State.t
Add a PDG node for each formal argument, and add its dependencies to the corresponding argument node.
val process_call_ouput : t ->
State.t ->
State.t ->
Cil_types.stmt ->
int ->
Locations.Zone.t -> bool -> Locations.Zone.t -> Locations.Zone.t -> State.t
val process_call_return : t ->
State.t ->
State.t ->
Cil_types.stmt ->
l_loc:Locations.Zone.t ->
exact:bool ->
l_dpds:Locations.Zone.t ->
l_decl:Cilutil.VarinfoSet.t ->
r_dpds:Locations.Zone.t -> Locations.Zone.t -> State.t
mix between process_call_ouput and process_asgn
val process_asgn : t ->
State.t ->
Cil_types.stmt ->
l_loc:Locations.Zone.t ->
exact:bool ->
l_dpds:Locations.Zone.t ->
l_decl:Cilutil.VarinfoSet.t ->
r_dpds:Locations.Zone.t -> r_decl:Cilutil.VarinfoSet.t -> State.t
val process_skip : t -> Cil_types.stmt -> unit
val process_jump : t -> Cil_types.stmt -> Cil_types.stmt list -> unit
val process_jump_with_exp : t ->
Cil_types.stmt ->
Cil_types.stmt list ->
State.t -> Locations.Zone.t -> Cilutil.VarinfoSet.t -> unit
val process_block : t -> Cil_types.stmt -> Cil_types.block -> unit
val process_entry_point : t -> Cil_types.stmt list -> unit
val add_retres : t ->
State.t ->
Cil_types.stmt -> Locations.Zone.t -> Cilutil.VarinfoSet.t -> State.t
val store_last_state : t -> State.t -> unit
val finalize_pdg : t -> Function_Froms.t option -> PdgTypes.Pdg.t
from_opt : for undefined functions (declarations)