diff --git a/osek-verification.cabal b/osek-verification.cabal index ff2a7c0ee65534a65f8aa846931df2ff5e9ac1fe..0330434eda7a8951124bf2dae4a98e9382264ce3 100644 --- a/osek-verification.cabal +++ b/osek-verification.cabal @@ -23,6 +23,7 @@ library , CFG.Sanitize , Search.States2Dot , Search.Search2 + , Search.Types , Protocol hs-source-dirs: src build-depends: base >=4.9 && <4.10 diff --git a/src/Search/Search.hs b/src/Search/Search.hs index 95fcf2ff25fc2c713e602a50dd3edfd792f5305f..e5814ec6b97466dfccb7e5a1ad66ca8c6b808e26 100644 --- a/src/Search/Search.hs +++ b/src/Search/Search.hs @@ -10,7 +10,6 @@ import Data.Map (Map) import qualified Data.Map as M import Data.Maybe import Data.Monoid -import Data.Set (Set) import qualified Data.Set as S import Data.Text (Text) import qualified Data.Text as T @@ -23,25 +22,8 @@ import System.Process import Data.Aeson import Protocol +import Search.Types -data Metadata = Metadata - { metaFunc :: Text -- ^ Function Name - , metaSyscall :: Text -- ^ Next Syscall - } - --- | (Statehash, Metadata) -data Vertex = Vertex - { vertState :: Text - , vertMeta :: Metadata - } - -instance Eq Vertex where - Vertex x meta1 == Vertex y meta2 = (x, metaSyscall meta1) == (y, metaSyscall meta2) - -instance Ord Vertex where - compare (Vertex x meta1) (Vertex y meta2) = compare (x, metaSyscall meta1) (y, metaSyscall meta2) - -type Graph = Map Vertex (Set Vertex) type DecisionNumber = Int type Decision = (Vertex, DecisionNumber) @@ -170,7 +152,7 @@ parseLine handle = do return $ Decision num Just (BeforeSyscall state call func) -> return $ NewState $ Vertex state (Metadata func call) - Just (AtBasicBlock state abb) -> + Just (AtBasicBlock state abb meta) -> parseLine handle -- TODO handleLine :: Handle -> IORef State -> IO LineOut diff --git a/src/Search/Types.hs b/src/Search/Types.hs new file mode 100644 index 0000000000000000000000000000000000000000..d19705d0b1805276d38b1bb76f6a2a733ae66f56 --- /dev/null +++ b/src/Search/Types.hs @@ -0,0 +1,28 @@ +module Search.Types + ( Metadata(..) + , Vertex(..) + , Graph + ) where + +import Data.Text (Text) +import Data.Map (Map) +import Data.Set (Set) + +data Metadata = Metadata + { metaFunc :: Text -- ^ Function Name + , metaSyscall :: Text -- ^ Next Syscall + } + +-- | (Statehash, Metadata) +data Vertex = Vertex + { vertState :: Text + , vertMeta :: Metadata + } + +instance Eq Vertex where + Vertex x meta1 == Vertex y meta2 = (x, metaSyscall meta1) == (y, metaSyscall meta2) + +instance Ord Vertex where + compare (Vertex x meta1) (Vertex y meta2) = compare (x, metaSyscall meta1) (y, metaSyscall meta2) + +type Graph = Map Vertex (Set Vertex)