Module Pulselib.PulseAbductiveDomain
module BaseAddressAttributes = PulseBaseAddressAttributesmodule BaseDomain = PulseBaseDomainmodule BaseMemory = PulseBaseMemorymodule BaseStack = PulseBaseStackmodule type BaseDomainSig = sig ... endsignature common to the "normal"
Domain, representing the post at the current program point, and the invertedPreDomain, representing the inferred pre-condition
module PostDomain : BaseDomainSigThe post abstract state at each program point, or current state.
module PreDomain : BaseDomainSigThe inferred pre-condition at each program point, biabduction style.
type t= private{post : PostDomain.t;state at the current program point
pre : PreDomain.t;inferred pre at the current program point
skipped_calls : PulseBasicInterface.SkippedCalls.t;set of skipped calls
path_condition : PulseBasicInterface.PathCondition.t;arithmetic facts
}biabduction-style pre/post state + skipped calls
val leq : lhs:t -> rhs:t -> boolval pp : Stdlib.Format.formatter -> t -> unitval mk_initial : IR.Procdesc.t -> tval get_pre : t -> BaseDomain.tval get_post : t -> BaseDomain.t
module Stack : sig ... endstack operations like
BaseStackbut that also take care of propagating facts to the precondition
module Memory : sig ... endmemory operations like
BaseMemorybut that also take care of propagating facts to the precondition
module AddressAttributes : sig ... endattribute operations like
BaseAddressAttributesbut that also take care of propagating facts to the precondition
val is_local : IR.Var.t -> t -> boolval find_post_cell_opt : PulseBasicInterface.AbstractValue.t -> t -> BaseDomain.cell optionval discard_unreachable : t -> t * Pulselib.PulseBasicInterface.AbstractValue.Set.t * BaseAddressAttributes.tdiscard_unreachable astategarbage collects unreachable addresses in the state to make it smaller, and retuns the new state, the live addresses, and the attributes of discarded addresses
val add_skipped_call : IR.Procname.t -> PulseBasicInterface.Trace.t -> t -> tval add_skipped_calls : PulseBasicInterface.SkippedCalls.t -> t -> tval set_path_condition : PulseBasicInterface.PathCondition.t -> t -> tval of_post : IR.Procdesc.t -> t -> tval set_post_edges : PulseBasicInterface.AbstractValue.t -> BaseMemory.Edges.t -> t -> tdirectly set the edges for the given address, bypassing abduction altogether
val set_post_cell : (PulseBasicInterface.AbstractValue.t * PulseBasicInterface.ValueHistory.t) -> BaseDomain.cell -> IBase.Location.t -> t -> tdirectly set the edges and attributes for the given address, bypassing abduction altogether