package goblint

  1. Overview
  2. Docs
Legend:
Library
Module
Module type
Parameter
Class
Class type

Access analyzer without base --- this is the new standard

include module type of struct include Analyses.DefaultSpec end

Relatively safe default implementations of some boring Spec functions.

module P = Analyses.UnitP
type marshal = unit
val finalize : unit -> unit
val asm : ('a, 'b, 'c, 'd) Analyses.ctx -> 'a
val skip : ('a, 'b, 'c, 'd) Analyses.ctx -> 'a
val morphstate : 'a -> 'b -> 'b
val sync : ('a, 'b, 'c, 'd) Analyses.ctx -> 'e -> 'a
val paths_as_set : ('a, 'b, 'c, 'd) Analyses.ctx -> 'a list
module A = Analyses.UnitA
val access : 'a -> 'b -> unit
val name : unit -> string
module D = Lattice.Unit
module C = Lattice.Unit
module V : sig ... end
val collect_local : bool Stdlib.ref
val emit_single_threaded : bool Stdlib.ref
val init : 'a -> unit
val do_access : (D.t, G.t, C.t, V.t) Analyses.ctx -> AccessKind.t -> bool -> GoblintCil.exp -> unit
val access_one_top : ?force:bool -> ?deref:bool -> (D.t, G.t, C.t, V.t) Analyses.ctx -> AccessKind.t -> bool -> CilType.Exp.t -> unit

Three access levels:

  1. deref=false, reach=false - Access exp without dereferencing, used for all normal reads and all function call arguments.
  2. deref=true, reach=false - Access exp by dereferencing once (may-point-to), used for lval writes and shallow special accesses.
  3. deref=true, reach=true - Access exp by dereferencing transitively (reachable), used for deep special accesses.
val startstate : 'a -> unit

We just lift start state, global and dependency functions:

val threadenter : 'a -> multiple:'b -> 'c -> 'd -> 'e -> unit list
val exitstate : 'a -> unit
val context : 'a -> 'b -> unit

Transfer functions:

val branch : (D.t, G.t, C.t, V.t) Analyses.ctx -> CilType.Exp.t -> 'a -> D.t
val return : (D.t, G.t, C.t, V.t) Analyses.ctx -> CilType.Exp.t option -> 'a -> D.t
val body : (D.t, 'a, 'b, 'c) Analyses.ctx -> 'd -> D.t
val enter : (D.t, 'a, 'b, 'c) Analyses.ctx -> 'd -> 'e -> 'f -> (D.t * D.t) list
val combine_env : (D.t, G.t, C.t, V.t) Analyses.ctx -> 'a -> CilType.Exp.t -> 'b -> CilType.Exp.t list -> 'c -> 'd -> 'e -> 'd
val combine_assign : (D.t, G.t, C.t, V.t) Analyses.ctx -> GoblintCil.lval option -> 'a -> 'b -> 'c -> 'd -> 'e -> 'f -> D.t
val threadspawn : (D.t, G.t, C.t, V.t) Analyses.ctx -> multiple:'a -> GoblintCil.lval option -> 'b -> 'c -> 'd -> D.t
val query : ('b, G.t, 'c, MyCFG.node) Analyses.ctx -> 'a Queries.t -> 'a Queries.result
val event : (unit, G.t, 'a, MyCFG.node) Analyses.ctx -> Events.t -> 'b -> unit
OCaml

Innovation. Community. Security.