1{-# LANGUAGE RecordWildCards, DeriveGeneric, GeneralizedNewtypeDeriving, 2 BangPatterns, CPP #-} 3module GHCi.ResolvedBCO 4 ( ResolvedBCO(..) 5 , ResolvedBCOPtr(..) 6 , isLittleEndian 7 ) where 8 9import Prelude -- See note [Why do we import Prelude here?] 10import SizedSeq 11import GHCi.RemoteTypes 12import GHCi.BreakArray 13 14import Data.Array.Unboxed 15import Data.Binary 16import GHC.Generics 17import GHCi.BinaryArray 18 19 20#include "MachDeps.h" 21 22isLittleEndian :: Bool 23#if defined(WORDS_BIGENDIAN) 24isLittleEndian = True 25#else 26isLittleEndian = False 27#endif 28 29-- ----------------------------------------------------------------------------- 30-- ResolvedBCO 31 32-- | A 'ResolvedBCO' is one in which all the 'Name' references have been 33-- resolved to actual addresses or 'RemoteHValues'. 34-- 35-- Note, all arrays are zero-indexed (we assume this when 36-- serializing/deserializing) 37data ResolvedBCO 38 = ResolvedBCO { 39 resolvedBCOIsLE :: Bool, 40 resolvedBCOArity :: {-# UNPACK #-} !Int, 41 resolvedBCOInstrs :: UArray Int Word16, -- insns 42 resolvedBCOBitmap :: UArray Int Word64, -- bitmap 43 resolvedBCOLits :: UArray Int Word64, -- non-ptrs 44 resolvedBCOPtrs :: (SizedSeq ResolvedBCOPtr) -- ptrs 45 } 46 deriving (Generic, Show) 47 48-- | The Binary instance for ResolvedBCOs. 49-- 50-- Note, that we do encode the endianness, however there is no support for mixed 51-- endianness setups. This is primarily to ensure that ghc and iserv share the 52-- same endianness. 53instance Binary ResolvedBCO where 54 put ResolvedBCO{..} = do 55 put resolvedBCOIsLE 56 put resolvedBCOArity 57 putArray resolvedBCOInstrs 58 putArray resolvedBCOBitmap 59 putArray resolvedBCOLits 60 put resolvedBCOPtrs 61 get = ResolvedBCO 62 <$> get <*> get <*> getArray <*> getArray <*> getArray <*> get 63 64data ResolvedBCOPtr 65 = ResolvedBCORef {-# UNPACK #-} !Int 66 -- ^ reference to the Nth BCO in the current set 67 | ResolvedBCOPtr {-# UNPACK #-} !(RemoteRef HValue) 68 -- ^ reference to a previously created BCO 69 | ResolvedBCOStaticPtr {-# UNPACK #-} !(RemotePtr ()) 70 -- ^ reference to a static ptr 71 | ResolvedBCOPtrBCO ResolvedBCO 72 -- ^ a nested BCO 73 | ResolvedBCOPtrBreakArray {-# UNPACK #-} !(RemoteRef BreakArray) 74 -- ^ Resolves to the MutableArray# inside the BreakArray 75 deriving (Generic, Show) 76 77instance Binary ResolvedBCOPtr 78