module SlicingActions:sig
..end
This module deals with the action management. It consists of the definitions of the different kinds of actions, and the management of the action list.
typeselect =
SlicingTypes.sl_mark PdgMarks.select
type
n_or_d_marks
selection mode (ie which mark to associate to the node and how to propagate in the different kinds of dependencies)
val build_simple_node_selection : ?nd_marks:n_or_d_marks ->
SlicingTypes.sl_mark -> n_or_d_marks
Build a description to tell that the associated nodes have to be marked
with the given mark, and than the same one will be propagated through
their dependencies. (see also SlicingActions.build_node_and_dpds_selection
)
val build_addr_dpds_selection : ?nd_marks:n_or_d_marks ->
SlicingTypes.sl_mark -> n_or_d_marks
Only the control dependencies of the nodes will be marked
val build_data_dpds_selection : ?nd_marks:n_or_d_marks ->
SlicingTypes.sl_mark -> n_or_d_marks
Only the control dependencies of the nodes will be marked
val build_ctrl_dpds_selection : ?nd_marks:n_or_d_marks ->
SlicingTypes.sl_mark -> n_or_d_marks
Only the control dependencies of the nodes will be marked
val build_node_and_dpds_selection : ?nd_marks:n_or_d_marks ->
SlicingTypes.sl_mark -> n_or_d_marks
Build a description to tell how the selected PDG nodes and their
dependencies will have to be marked
(see SlicingTypes.Internals.node_or_dpds
).
This description depend on the mark that has been asked for.
First of all, whatever the mark is, the node is selected as spare
,
so that it will be visible, and so will its dependencies. Then,
if is_ctrl mark
propagate a m1 control mark through the control dependencies
and do a similar thing for addr
and data
val translate_crit_to_select : Db.Pdg.t ->
?to_select:select ->
((PdgTypes.Node.t * Locations.Zone.t option) list *
n_or_d_marks)
list -> select
val mk_fct_crit : SlicingInternals.fct_info ->
SlicingInternals.fct_crit -> SlicingInternals.criterion
build an action to apply the criteria to the persistent selection of the function. It means that it will be applied to all slices.
val mk_crit_fct_user_select : SlicingInternals.fct_info ->
select -> SlicingInternals.criterion
val mk_crit_fct_top : SlicingInternals.fct_info ->
SlicingTypes.sl_mark -> SlicingInternals.criterion
val mk_crit_prop_persit_marks : SlicingInternals.fct_info ->
select -> SlicingInternals.criterion
val mk_ff_user_select : SlicingInternals.fct_slice ->
select -> SlicingInternals.criterion
val mk_crit_choose_call : SlicingInternals.fct_slice -> Cil_types.stmt -> SlicingInternals.criterion
val mk_crit_change_call : SlicingInternals.fct_slice ->
Cil_types.stmt -> SlicingInternals.called_fct -> SlicingInternals.criterion
val mk_crit_missing_inputs : SlicingInternals.fct_slice ->
Cil_types.stmt -> select * bool -> SlicingInternals.criterion
val mk_crit_missing_outputs : SlicingInternals.fct_slice ->
Cil_types.stmt -> select * bool -> SlicingInternals.criterion
val mk_crit_examines_calls : SlicingInternals.fct_slice ->
SlicingTypes.sl_mark PdgMarks.info_called_outputs ->
SlicingInternals.criterion
val mk_appli_select_calls : SlicingInternals.fct_info -> SlicingInternals.criterion
val mk_crit_mark_calls : SlicingInternals.fct_info ->
Cil_types.kernel_function ->
SlicingTypes.sl_mark -> SlicingInternals.criterion
val mk_crit_add_output_marks : SlicingInternals.fct_slice ->
select -> SlicingInternals.criterion
val print_nd_and_mark_list : Stdlib.Format.formatter -> n_or_d_marks -> unit
Printing
val print_nodes : Stdlib.Format.formatter -> PdgTypes.Node.t list -> unit
val print_sel_marks_list : Stdlib.Format.formatter -> select -> unit
val print_crit : Stdlib.Format.formatter -> SlicingInternals.criterion -> unit
val print_f_crit : Stdlib.Format.formatter -> SlicingInternals.fct_user_crit -> unit
val print_list_crit : Stdlib.Format.formatter -> SlicingInternals.criterion list -> unit