module Sets:Provides function to extract information from the PDG.sig
..end
PDG (program dependence graph) access functions.
module M: Macros
module P: PdgTypes.Pdg
module PI: PdgTypes.InternalPdg
module D: PdgTypes.Dpd
module N: PdgTypes.Node
module G: PdgTypes.G
module FI: PdgIndex.FctIndex
module K: PdgIndex.Key
typet_node =
PdgTypes.Node.t
typet_loc =
Locations.Zone.t
typet_pdg =
PdgTypes.Pdg.t
typet_dpds_kind =
PdgTypes.Dpd.td
typet_nodes_and_undef =
(t_node * t_loc option) list * t_loc option
val get_init_state : PI.t -> State.t
val get_last_state : PI.t -> State.t
val get_stmt_state : PI.t -> Cil_types.stmt -> State.t
val find_node : PI.t -> PdgIndex.Key.t -> PdgTypes.Node.t
val find_simple_stmt_nodes : PI.t -> Cil_types.stmt -> PdgTypes.Node.t list
val add_stmt_nodes : PI.t -> PdgTypes.Node.t list -> Cil_types.stmt -> PdgTypes.Node.t list
val find_stmt_and_blocks_nodes : PI.t -> Cil_types.stmt -> PdgTypes.Node.t list
val find_stmt_node : PI.t -> Cil_types.stmt -> PdgTypes.Node.t
val find_entry_point_node : PI.t -> PdgTypes.Node.t
val find_top_input_node : PI.t -> PdgTypes.Node.t
val find_loc_nodes : PI.t ->
State.t ->
Locations.Zone.t ->
(State.t_node * Locations.Zone.t option) list * Locations.Zone.t option
val find_location_nodes_at_stmt : PI.t ->
Cil_types.stmt ->
before:bool ->
Locations.Zone.t ->
(State.t_node * Locations.Zone.t option) list * Locations.Zone.t option
val find_location_nodes_at_end : PI.t ->
Locations.Zone.t ->
(State.t_node * Locations.Zone.t option) list * Locations.Zone.t option
val find_location_nodes_at_begin : PI.t ->
Locations.Zone.t ->
(State.t_node * Locations.Zone.t option) list * Locations.Zone.t option
val find_label_node : PI.t -> Cil_types.stmt -> Cil_types.label -> PdgTypes.Node.t
val find_decl_var_node : PI.t -> Cil_types.varinfo -> PdgTypes.Node.t
val find_output_node : PI.t -> PdgTypes.Node.t
val find_input_node : PI.t -> int -> PdgTypes.Node.t
val find_all_input_nodes : PI.t -> PdgTypes.Node.t list
val find_call_input_nodes : PI.t ->
Cil_types.stmt ->
PdgIndex.Signature.t_in_key ->
(State.t_node * Locations.Zone.t option) list * Locations.Zone.t option
val find_call_ctrl_node : PI.t -> Cil_types.stmt -> PdgTypes.Node.t
val find_call_num_input_node : PI.t -> Cil_types.stmt -> int -> PdgTypes.Node.t
val find_call_output_node : PI.t -> Cil_types.stmt -> PdgTypes.Node.t
val find_output_nodes : PI.t ->
PdgIndex.Signature.t_out_key ->
(State.t_node * Locations.Zone.t option) list * Locations.Zone.t option
val is_call_to_f : Cil_types.stmt -> Cil_types.varinfo -> bool
val find_call_stmts : Db_types.kernel_function -> caller:Kernel_function.t -> Cil_types.stmt list
val add_node_in_list : N.t -> N.t list -> N.t list * bool
val add_node_and_custom_dpds : (N.t -> N.t list) -> N.t list -> N.t -> N.t list
val add_nodes_and_custom_dpds : (N.t -> N.t list) ->
N.t list -> N.t list -> N.t list
val custom_related_nodes : (N.t -> N.t list) -> N.t list -> N.t list
val filter_nodes : ('a * 'b) list -> 'a list
val get_both_dpds : P.t -> PdgTypes.Node.t -> PdgTypes.Node.t list
val direct_dpds : P.t -> PdgTypes.Node.t -> PdgTypes.Node.t list
val direct_x_dpds : PdgTypes.Dpd.td -> P.t -> PdgTypes.Node.t -> PdgTypes.Node.t list
val direct_data_dpds : P.t -> PdgTypes.Node.t -> PdgTypes.Node.t list
val direct_ctrl_dpds : P.t -> PdgTypes.Node.t -> PdgTypes.Node.t list
val direct_addr_dpds : P.t -> PdgTypes.Node.t -> PdgTypes.Node.t list
node_list
the results of add_node_and_dpds_or_codpds
for all the nodes
val all_rec_dpds : P.t -> N.t list -> N.t list
val find_nodes_all_x_dpds : PdgTypes.Dpd.td -> P.t -> PdgTypes.Node.t list -> N.t list
val all_x_dpds : PdgTypes.Dpd.td -> P.t -> PdgTypes.Node.t -> N.t list
dpd_type
dependencies of the node,
and recursively, all the dependencies of those nodes
(regardless to their kind)val find_nodes_all_dpds : P.t -> PdgTypes.Node.t list -> N.t list
val find_nodes_all_data_dpds : P.t -> PdgTypes.Node.t list -> N.t list
val find_nodes_all_ctrl_dpds : P.t -> PdgTypes.Node.t list -> N.t list
val find_nodes_all_addr_dpds : P.t -> PdgTypes.Node.t list -> N.t list
val direct_uses : P.t -> PdgTypes.Node.t -> PdgTypes.Node.t list
val direct_x_uses : PdgTypes.Dpd.td -> P.t -> PdgTypes.Node.t -> PdgTypes.Node.t list
val direct_data_uses : P.t -> PdgTypes.Node.t -> PdgTypes.Node.t list
val direct_ctrl_uses : P.t -> PdgTypes.Node.t -> PdgTypes.Node.t list
val direct_addr_uses : P.t -> PdgTypes.Node.t -> PdgTypes.Node.t list
val all_uses : P.t -> PdgTypes.Node.t list -> N.t list
val all_related_nodes : P.t -> N.t list -> N.t list
all_uses
U all_dpds
.val find_call_out_nodes_to_select : PI.t ->
PdgTypes.Node.t list -> PI.t -> Cil_types.stmt -> PdgTypes.Node.t list
out
such that
find_output_nodes pdg_called out_key
intersects called_selected_nodes
.val find_in_nodes_to_select_for_this_call : PI.t ->
PdgTypes.Node.t list -> Cil_types.stmt -> PI.t -> PdgTypes.Node.t list