mirror of
https://github.com/GaloisInc/macaw.git
synced 2024-12-26 07:33:33 +03:00
Apply the state transformer
Committing now to experiment with adding failure modes to PPCGenerator
This commit is contained in:
parent
620b6f5980
commit
19b65973fc
@ -22,6 +22,7 @@ import Data.Proxy ( Proxy(..) )
|
|||||||
import qualified Data.Sequence as Seq
|
import qualified Data.Sequence as Seq
|
||||||
import qualified Data.Text as T
|
import qualified Data.Text as T
|
||||||
import Data.Word ( Word64 )
|
import Data.Word ( Word64 )
|
||||||
|
import Text.Printf ( printf )
|
||||||
|
|
||||||
import qualified Dismantle.PPC as D
|
import qualified Dismantle.PPC as D
|
||||||
|
|
||||||
@ -89,6 +90,15 @@ disassembleBlock lookupSemantics mem gs curIPAddr maxOffset = do
|
|||||||
Just addr -> return (BVValue (pointerRepr (Proxy @ppc)) (fromIntegral addr))
|
Just addr -> return (BVValue (pointerRepr (Proxy @ppc)) (fromIntegral addr))
|
||||||
case lookupSemantics ipVal i of
|
case lookupSemantics ipVal i of
|
||||||
Nothing -> failAt gs off curIPAddr (UnsupportedInstruction i)
|
Nothing -> failAt gs off curIPAddr (UnsupportedInstruction i)
|
||||||
|
Just transformer -> do
|
||||||
|
-- FIXME: Do we need to add failure modes here? Probably. There are
|
||||||
|
-- some invalid encodings that we could encounter that would be worth
|
||||||
|
-- failing for.
|
||||||
|
gs1 <- liftST $ execGenerator gs $ do
|
||||||
|
let line = printf "%s: %s" (show curIPAddr) (show (D.ppInstruction i))
|
||||||
|
addStmt (Comment (T.pack line))
|
||||||
|
transformer
|
||||||
|
undefined
|
||||||
|
|
||||||
tryDisassembleBlock :: (ArchWidth ppc, ArchReg ppc ~ PPCReg ppc, MM.MemWidth (ArchAddrWidth ppc))
|
tryDisassembleBlock :: (ArchWidth ppc, ArchReg ppc ~ PPCReg ppc, MM.MemWidth (ArchAddrWidth ppc))
|
||||||
=> (Value ppc s (BVType (ArchAddrWidth ppc)) -> D.Instruction -> Maybe (PPCGenerator ppc s ()))
|
=> (Value ppc s (BVType (ArchAddrWidth ppc)) -> D.Instruction -> Maybe (PPCGenerator ppc s ()))
|
||||||
|
Loading…
Reference in New Issue
Block a user