package goblint

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

Access and data race 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.

type marshal = unit
val should_join : 'a -> 'b -> bool
val vdecl : ('a, 'b, 'c, 'd) Analyses.ctx -> 'e -> 'f
val asm : ('a, 'b, 'c, 'd) Analyses.ctx -> 'e
val skip : ('a, 'b, 'c, 'd) Analyses.ctx -> 'e
val event : ('a, 'b, 'c, 'd) Analyses.ctx -> 'e -> 'f -> 'g
val morphstate : 'a -> 'b -> 'c
val sync : ('a, 'b, 'c, 'd) Analyses.ctx -> 'e -> 'f
val context : 'a -> 'b -> 'c
val access : 'a -> 'b -> unit
val name : unit -> string
module D = Lattice.Unit
module C = Lattice.Unit
module V0 : sig ... end
module V : sig ... end
module V0Set : sig ... end
module G : sig ... end
val safe : int Prelude.Ana.ref
val vulnerable : int Prelude.Ana.ref
val unsafe : int Prelude.Ana.ref
val init : 'a -> unit
val side_vars : ('a, [> `Lifted2 of V0Set.t ], 'b, [> `Right of CilType.Varinfo.t ]) Analyses.ctx -> Access.LVOpt.t -> Access.T.t -> unit
val side_access : ('a, [> `Lifted1 of Access.AS.t | `Lifted2 of V0Set.t ], 'b, [> `Left of Access.LVOpt.t * Access.T.t | `Right of CilType.Varinfo.t ]) Analyses.ctx -> Access.T.t -> Access.LVOpt.t -> (int * AccessKind.t * Node.t * CilType.Exp.t * MCPAccess.A.t) -> unit
val do_access : (D.t, G.t, C.t, V.t) Analyses.ctx -> AccessKind.t -> bool -> int -> Prelude.Ana.exp -> unit
val access_one_top : ?force:bool -> ?deref:bool -> (D.t, G.t, C.t, V.t) Analyses.ctx -> AccessKind.t -> bool -> Prelude.Ana.exp -> 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 -> 'b -> 'c -> 'd -> unit list
val exitstate : 'a -> unit

Transfer functions:

val branch : (D.t, G.t, C.t, V.t) Analyses.ctx -> Prelude.Ana.exp -> 'a -> D.t
val return : (D.t, G.t, C.t, V.t) Analyses.ctx -> Prelude.Ana.exp 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 : (D.t, G.t, C.t, V.t) Analyses.ctx -> Prelude.Ana.lval option -> Prelude.Ana.exp -> 'a -> Prelude.Ana.exp list -> 'b -> 'c -> 'd
val threadspawn : (D.t, G.t, C.t, V.t) Analyses.ctx -> Prelude.Ana.lval option -> 'a -> 'b -> 'c -> D.t
val query : ('b, [> `Bot | `Lifted1 of Access.AS.t | `Lifted2 of V0Set.t ], 'c, V.t) Analyses.ctx -> 'a Queries.t -> 'a0 Queries.result
val finalize : unit -> unit