module MarkPair: sig
.. end
a MarkPair
is associated with each element of the PDG in a slice.
The first component gives the mark propagated from a user request, while
the second one is used to propagate informations to the called functions.
type
t = SlicingMarks.T.t_pdg_mark
val create : m1:SlicingInternals.t_mark ->
m2:SlicingInternals.t_mark -> SlicingInternals.t_pdg_mark
val mk_m1 : SlicingInternals.t_mark -> SlicingInternals.t_pdg_mark
val mk_m2 : SlicingInternals.t_mark -> SlicingInternals.t_pdg_mark
val mk_m : SlicingInternals.t_mark ->
SlicingInternals.t_mark -> SlicingInternals.t_pdg_mark
val mk_m1_data : SlicingInternals.t_pdg_mark
val mk_m1_addr : SlicingInternals.t_pdg_mark
val mk_m1_ctrl : SlicingInternals.t_pdg_mark
val mk_m1_cav : SlicingInternals.t_pdg_mark
val mk_m1_spare : SlicingInternals.t_pdg_mark
val mk_gen_spare : SlicingInternals.t_pdg_mark
val bottom : SlicingInternals.t_pdg_mark
val user_mark : SlicingMarks.T.t_pdg_mark -> SlicingMarks.Mark.t
val is_bottom : SlicingMarks.T.t_pdg_mark -> bool
val is_top : SlicingMarks.T.t_pdg_mark -> bool
val is_ctrl : SlicingMarks.T.t_pdg_mark -> bool
val is_addr : SlicingMarks.T.t_pdg_mark -> bool
val is_data : SlicingMarks.T.t_pdg_mark -> bool
val is_spare : SlicingMarks.T.t_pdg_mark -> bool
val compare : SlicingMarks.T.t_pdg_mark -> SlicingMarks.T.t_pdg_mark -> int
val is_included : SlicingMarks.T.t_pdg_mark -> SlicingMarks.T.t_pdg_mark -> bool
val pretty : Format.formatter -> SlicingMarks.T.t_pdg_mark -> unit
val to_string : SlicingMarks.T.t_pdg_mark -> string
val minus : SlicingMarks.T.t_pdg_mark ->
SlicingMarks.T.t_pdg_mark -> SlicingInternals.t_pdg_mark
val merge : SlicingMarks.T.t_pdg_mark ->
SlicingMarks.T.t_pdg_mark -> SlicingInternals.t_pdg_mark
val merge_user_marks : SlicingMarks.T.t_pdg_mark ->
SlicingMarks.T.t_pdg_mark -> SlicingInternals.t_pdg_mark
merge only ma_1 et mb_1, m_2 is always bottom
val merge_all : SlicingMarks.T.t_pdg_mark list -> SlicingMarks.T.t_pdg_mark
val inter : SlicingMarks.T.t_pdg_mark ->
SlicingMarks.T.t_pdg_mark -> SlicingInternals.t_pdg_mark
val inter_all : SlicingMarks.T.t_pdg_mark list -> SlicingMarks.T.t_pdg_mark
val combine : SlicingMarks.T.t_pdg_mark ->
SlicingMarks.T.t_pdg_mark ->
SlicingInternals.t_pdg_mark * SlicingInternals.t_pdg_mark
combine ma mb
is used to add the mb
to the ma
.
Returns two marks : the first one is the new mark (= merge),
and the second is the one to propagate.
Notice that if the mark to propagate is bottom,
it means that mb
was included in ma
.
val missing_output : call:SlicingMarks.T.t_pdg_mark ->
called:SlicingMarks.T.t_pdg_mark -> SlicingInternals.t_pdg_mark option
we want to know if the called function g
with output marks
m_out_called
compute enough things to be used in f
call
with output marks m_out_call
.
Remember the mf1
marks propagates as mg2
and the marks to add
can only be m2
marks.
TODO : write this down in the specification
and check with Patrick if it is ok.
val missing_input : call:SlicingMarks.T.t_pdg_mark ->
called:SlicingMarks.T.t_pdg_mark -> SlicingInternals.t_pdg_mark option
tells if the caller (f
) computes enough inputs for the callee (g
).
Remember that mg1
has to be propagated as mf1
,
but mg2
has to be propagated as mf2=spare