crucible-0.8.0.0: Crucible is a library for language-agnostic symbolic simulation
Copyright(c) Galois Inc 2015
LicenseBSD3
MaintainerRob Dockins <rdockins@galois.com>
Stabilityprovisional
Safe HaskellNone
LanguageHaskell2010

Lang.Crucible.Analysis.ForwardDataflow

Description

Deprecated: Lang.Crucible.Analysis.Fixpoint is a better implementation of these ideas

This module defines a generic framework for forward dataflow analysis, with some additional control-flow data on the side.

We calculate a fixpoint of a given analysis via the straightforward method of iterating the transfer function until no more updates occur.

Our current method for doing this is quite naive, and more efficient methods exist.

Documentation

data SymDom Source #

Constructors

Dead 
Symbolic 
Concrete 

Instances

Instances details
Show SymDom Source # 
Instance details

Defined in Lang.Crucible.Analysis.ForwardDataflow

Eq SymDom Source # 
Instance details

Defined in Lang.Crucible.Analysis.ForwardDataflow

Methods

(==) :: SymDom -> SymDom -> Bool #

(/=) :: SymDom -> SymDom -> Bool #

Ord SymDom Source # 
Instance details

Defined in Lang.Crucible.Analysis.ForwardDataflow

symbolicResults :: forall ext (blocks :: Ctx (Ctx CrucibleType)) (init :: Ctx CrucibleType) (ret :: CrucibleType). IsSyntaxExtension ext => CFG ext blocks init ret -> String Source #

sym_reg_transfer :: forall (ctx :: Ctx CrucibleType) (tp :: CrucibleType). Reg ctx tp -> Assignment (Ignore SymDom :: CrucibleType -> Type) ctx -> SymDom Source #

sym_expr_transfer :: forall ext (ctx :: Ctx CrucibleType) (tp :: CrucibleType). IsSyntaxExtension ext => Expr ext ctx tp -> Assignment (Ignore SymDom :: CrucibleType -> Type) ctx -> SymDom Source #

sym_call_transfer :: forall (args :: Ctx CrucibleType) (ret :: CrucibleType) (ctx :: Ctx CrucibleType) (a :: CrucibleType -> Type). CtxRepr args -> TypeRepr ret -> Reg ctx (FunctionHandleType args ret) -> Ignore SymDom (FunctionHandleType args ret) -> Assignment a args -> Ignore SymDom ret Source #

data KildallPair (a :: k -> Type) c (tp :: k) Source #

Constructors

KP (a tp) c 

Instances

Instances details
(ShowF a, Show c) => ShowF (KildallPair a c :: k -> Type) Source # 
Instance details

Defined in Lang.Crucible.Analysis.ForwardDataflow

Methods

withShow :: forall p q (tp :: k) a0. p (KildallPair a c) -> q tp -> (Show (KildallPair a c tp) => a0) -> a0 #

showF :: forall (tp :: k). KildallPair a c tp -> String #

showsPrecF :: forall (tp :: k). Int -> KildallPair a c tp -> String -> String #

(ShowF a, Show c) => Show (KildallPair a c tp) Source # 
Instance details

Defined in Lang.Crucible.Analysis.ForwardDataflow

Methods

showsPrec :: Int -> KildallPair a c tp -> ShowS #

show :: KildallPair a c tp -> String #

showList :: [KildallPair a c tp] -> ShowS #

newtype Ignore a (b :: k) Source #

Constructors

Ignore 

Fields

Instances

Instances details
Show a => ShowF (Ignore a :: k -> Type) Source # 
Instance details

Defined in Lang.Crucible.Analysis.ForwardDataflow

Methods

withShow :: forall p q (tp :: k) a0. p (Ignore a :: k -> Type) -> q tp -> (Show (Ignore a tp) => a0) -> a0 #

showF :: forall (tp :: k). Ignore a tp -> String #

showsPrecF :: forall (tp :: k). Int -> Ignore a tp -> String -> String #

Show a => Show (Ignore a tp) Source # 
Instance details

Defined in Lang.Crucible.Analysis.ForwardDataflow

Methods

showsPrec :: Int -> Ignore a tp -> ShowS #

show :: Ignore a tp -> String #

showList :: [Ignore a tp] -> ShowS #

Eq a => Eq (Ignore a b) Source # 
Instance details

Defined in Lang.Crucible.Analysis.ForwardDataflow

Methods

(==) :: Ignore a b -> Ignore a b -> Bool #

(/=) :: Ignore a b -> Ignore a b -> Bool #

Ord a => Ord (Ignore a b) Source # 
Instance details

Defined in Lang.Crucible.Analysis.ForwardDataflow

Methods

compare :: Ignore a b -> Ignore a b -> Ordering #

(<) :: Ignore a b -> Ignore a b -> Bool #

(<=) :: Ignore a b -> Ignore a b -> Bool #

(>) :: Ignore a b -> Ignore a b -> Bool #

(>=) :: Ignore a b -> Ignore a b -> Bool #

max :: Ignore a b -> Ignore a b -> Ignore a b #

min :: Ignore a b -> Ignore a b -> Ignore a b #

data KildallForward ext (blocks :: Ctx (Ctx CrucibleType)) (a :: CrucibleType -> Type) c Source #

Constructors

KildallForward 

Fields

kildall_transfer :: forall ext a c (blocks :: Ctx (Ctx CrucibleType)) (ret :: CrucibleType) (ctx :: Ctx CrucibleType). KildallForward ext blocks a c -> TypeRepr ret -> Block ext blocks ret ctx -> (Assignment a ctx, c) -> State (Assignment (KildallPair (Assignment a) c) blocks, a ret, c) (Set (Some (BlockID blocks))) Source #

kildall_forward :: forall ext a c (blocks :: Ctx (Ctx CrucibleType)) (ret :: CrucibleType) (init :: Ctx CrucibleType). KildallForward ext blocks a c -> CFG ext blocks init ret -> (Assignment a init, c) -> (Assignment (KildallPair (Assignment a) c) blocks, a ret, c) Source #