{-# LINE 1 "GHC/RTS/Flags.hsc" #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# LINE 2 "GHC/RTS/Flags.hsc" #-}
{-# LANGUAGE RecordWildCards #-}
module GHC.RTS.Flags
( RTSFlags (..)
, GCFlags (..)
, ConcFlags (..)
, MiscFlags (..)
, DebugFlags (..)
, CCFlags (..)
, ProfFlags (..)
, TraceFlags (..)
, TickyFlags (..)
, getRTSFlags
, getGCFlags
, getConcFlags
, getMiscFlags
, getDebugFlags
, getCCFlags
, getProfFlags
, getTraceFlags
, getTickyFlags
) where
{-# LINE 33 "GHC/RTS/Flags.hsc" #-}
{-# LINE 34 "GHC/RTS/Flags.hsc" #-}
import Control.Applicative
import Control.Monad
import Foreign.C.String (peekCString)
import Foreign.C.Types (CChar, CInt)
import Foreign.Ptr (Ptr, nullPtr)
import Foreign.Storable (peekByteOff)
import GHC.Base
import GHC.Enum
import GHC.IO
import GHC.Real
import GHC.Show
import GHC.Word
type Time = Word64
type Nat = Word32
{-# LINE 55 "GHC/RTS/Flags.hsc" #-}
data GiveGCStats
= NoGCStats
| CollectGCStats
| OneLineGCStats
| SummaryGCStats
| VerboseGCStats
deriving (Show)
instance Enum GiveGCStats where
fromEnum NoGCStats = 0
{-# LINE 66 "GHC/RTS/Flags.hsc" #-}
fromEnum CollectGCStats = 1
{-# LINE 67 "GHC/RTS/Flags.hsc" #-}
fromEnum OneLineGCStats = 2
{-# LINE 68 "GHC/RTS/Flags.hsc" #-}
fromEnum SummaryGCStats = 3
{-# LINE 69 "GHC/RTS/Flags.hsc" #-}
fromEnum VerboseGCStats = 4
{-# LINE 70 "GHC/RTS/Flags.hsc" #-}
toEnum 0 = NoGCStats
{-# LINE 72 "GHC/RTS/Flags.hsc" #-}
toEnum 1 = CollectGCStats
{-# LINE 73 "GHC/RTS/Flags.hsc" #-}
toEnum 2 = OneLineGCStats
{-# LINE 74 "GHC/RTS/Flags.hsc" #-}
toEnum 3 = SummaryGCStats
{-# LINE 75 "GHC/RTS/Flags.hsc" #-}
toEnum 4 = VerboseGCStats
{-# LINE 76 "GHC/RTS/Flags.hsc" #-}
toEnum e = error ("invalid enum for GiveGCStats: " ++ show e)
data GCFlags = GCFlags
{ statsFile :: Maybe FilePath
, giveStats :: GiveGCStats
, maxStkSize :: Nat
, initialStkSize :: Nat
, stkChunkSize :: Nat
, stkChunkBufferSize :: Nat
, maxHeapSize :: Nat
, minAllocAreaSize :: Nat
, minOldGenSize :: Nat
, heapSizeSuggestion :: Nat
, heapSizeSuggestionAuto :: Bool
, oldGenFactor :: Double
, pcFreeHeap :: Double
, generations :: Nat
, steps :: Nat
, squeezeUpdFrames :: Bool
, compact :: Bool
, compactThreshold :: Double
, sweep :: Bool
, ringBell :: Bool
, frontpanel :: Bool
, idleGCDelayTime :: Time
, doIdleGC :: Bool
, heapBase :: Word
, allocLimitGrace :: Word
} deriving (Show)
data ConcFlags = ConcFlags
{ ctxtSwitchTime :: Time
, ctxtSwitchTicks :: Int
} deriving (Show)
data MiscFlags = MiscFlags
{ tickInterval :: Time
, installSignalHandlers :: Bool
, machineReadable :: Bool
, linkerMemBase :: Word
} deriving (Show)
data DebugFlags = DebugFlags
{ scheduler :: Bool
, interpreter :: Bool
, weak :: Bool
, gccafs :: Bool
, gc :: Bool
, block_alloc :: Bool
, sanity :: Bool
, stable :: Bool
, prof :: Bool
, linker :: Bool
, apply :: Bool
, stm :: Bool
, squeeze :: Bool
, hpc :: Bool
, sparks :: Bool
} deriving (Show)
data DoCostCentres
= CostCentresNone
| CostCentresSummary
| CostCentresVerbose
| CostCentresAll
| CostCentresXML
deriving (Show)
instance Enum DoCostCentres where
fromEnum CostCentresNone = 0
{-# LINE 150 "GHC/RTS/Flags.hsc" #-}
fromEnum CostCentresSummary = 1
{-# LINE 151 "GHC/RTS/Flags.hsc" #-}
fromEnum CostCentresVerbose = 2
{-# LINE 152 "GHC/RTS/Flags.hsc" #-}
fromEnum CostCentresAll = 3
{-# LINE 153 "GHC/RTS/Flags.hsc" #-}
fromEnum CostCentresXML = 4
{-# LINE 154 "GHC/RTS/Flags.hsc" #-}
toEnum 0 = CostCentresNone
{-# LINE 156 "GHC/RTS/Flags.hsc" #-}
toEnum 1 = CostCentresSummary
{-# LINE 157 "GHC/RTS/Flags.hsc" #-}
toEnum 2 = CostCentresVerbose
{-# LINE 158 "GHC/RTS/Flags.hsc" #-}
toEnum 3 = CostCentresAll
{-# LINE 159 "GHC/RTS/Flags.hsc" #-}
toEnum 4 = CostCentresXML
{-# LINE 160 "GHC/RTS/Flags.hsc" #-}
toEnum e = error ("invalid enum for DoCostCentres: " ++ show e)
data CCFlags = CCFlags
{ doCostCentres :: DoCostCentres
, profilerTicks :: Int
, msecsPerTick :: Int
} deriving (Show)
data DoHeapProfile
= NoHeapProfiling
| HeapByCCS
| HeapByMod
| HeapByDescr
| HeapByType
| HeapByRetainer
| HeapByLDV
| HeapByClosureType
deriving (Show)
instance Enum DoHeapProfile where
fromEnum NoHeapProfiling = 0
{-# LINE 181 "GHC/RTS/Flags.hsc" #-}
fromEnum HeapByCCS = 1
{-# LINE 182 "GHC/RTS/Flags.hsc" #-}
fromEnum HeapByMod = 2
{-# LINE 183 "GHC/RTS/Flags.hsc" #-}
fromEnum HeapByDescr = 4
{-# LINE 184 "GHC/RTS/Flags.hsc" #-}
fromEnum HeapByType = 5
{-# LINE 185 "GHC/RTS/Flags.hsc" #-}
fromEnum HeapByRetainer = 6
{-# LINE 186 "GHC/RTS/Flags.hsc" #-}
fromEnum HeapByLDV = 7
{-# LINE 187 "GHC/RTS/Flags.hsc" #-}
fromEnum HeapByClosureType = 8
{-# LINE 188 "GHC/RTS/Flags.hsc" #-}
toEnum 0 = NoHeapProfiling
{-# LINE 190 "GHC/RTS/Flags.hsc" #-}
toEnum 1 = HeapByCCS
{-# LINE 191 "GHC/RTS/Flags.hsc" #-}
toEnum 2 = HeapByMod
{-# LINE 192 "GHC/RTS/Flags.hsc" #-}
toEnum 4 = HeapByDescr
{-# LINE 193 "GHC/RTS/Flags.hsc" #-}
toEnum 5 = HeapByType
{-# LINE 194 "GHC/RTS/Flags.hsc" #-}
toEnum 6 = HeapByRetainer
{-# LINE 195 "GHC/RTS/Flags.hsc" #-}
toEnum 7 = HeapByLDV
{-# LINE 196 "GHC/RTS/Flags.hsc" #-}
toEnum 8 = HeapByClosureType
{-# LINE 197 "GHC/RTS/Flags.hsc" #-}
toEnum e = error ("invalid enum for DoHeapProfile: " ++ show e)
data ProfFlags = ProfFlags
{ doHeapProfile :: DoHeapProfile
, heapProfileInterval :: Time
, heapProfileIntervalTicks :: Word
, includeTSOs :: Bool
, showCCSOnException :: Bool
, maxRetainerSetSize :: Word
, ccsLength :: Word
, modSelector :: Maybe String
, descrSelector :: Maybe String
, typeSelector :: Maybe String
, ccSelector :: Maybe String
, ccsSelector :: Maybe String
, retainerSelector :: Maybe String
, bioSelector :: Maybe String
} deriving (Show)
data DoTrace
= TraceNone
| TraceEventLog
| TraceStderr
deriving (Show)
instance Enum DoTrace where
fromEnum TraceNone = 0
{-# LINE 224 "GHC/RTS/Flags.hsc" #-}
fromEnum TraceEventLog = 1
{-# LINE 225 "GHC/RTS/Flags.hsc" #-}
fromEnum TraceStderr = 2
{-# LINE 226 "GHC/RTS/Flags.hsc" #-}
toEnum 0 = TraceNone
{-# LINE 228 "GHC/RTS/Flags.hsc" #-}
toEnum 1 = TraceEventLog
{-# LINE 229 "GHC/RTS/Flags.hsc" #-}
toEnum 2 = TraceStderr
{-# LINE 230 "GHC/RTS/Flags.hsc" #-}
toEnum e = error ("invalid enum for DoTrace: " ++ show e)
data TraceFlags = TraceFlags
{ tracing :: DoTrace
, timestamp :: Bool
, traceScheduler :: Bool
, traceGc :: Bool
, sparksSampled :: Bool
, sparksFull :: Bool
, user :: Bool
} deriving (Show)
data TickyFlags = TickyFlags
{ showTickyStats :: Bool
, tickyFile :: Maybe FilePath
} deriving (Show)
data RTSFlags = RTSFlags
{ gcFlags :: GCFlags
, concurrentFlags :: ConcFlags
, miscFlags :: MiscFlags
, debugFlags :: DebugFlags
, costCentreFlags :: CCFlags
, profilingFlags :: ProfFlags
, traceFlags :: TraceFlags
, tickyFlags :: TickyFlags
} deriving (Show)
foreign import ccall safe "getGcFlags"
getGcFlagsPtr :: IO (Ptr ())
foreign import ccall safe "getConcFlags"
getConcFlagsPtr :: IO (Ptr ())
foreign import ccall safe "getMiscFlags"
getMiscFlagsPtr :: IO (Ptr ())
foreign import ccall safe "getDebugFlags"
getDebugFlagsPtr :: IO (Ptr ())
foreign import ccall safe "getCcFlags"
getCcFlagsPtr :: IO (Ptr ())
foreign import ccall safe "getProfFlags" getProfFlagsPtr :: IO (Ptr ())
foreign import ccall safe "getTraceFlags"
getTraceFlagsPtr :: IO (Ptr ())
foreign import ccall safe "getTickyFlags"
getTickyFlagsPtr :: IO (Ptr ())
getRTSFlags :: IO RTSFlags
getRTSFlags = do
RTSFlags <$> getGCFlags
<*> getConcFlags
<*> getMiscFlags
<*> getDebugFlags
<*> getCCFlags
<*> getProfFlags
<*> getTraceFlags
<*> getTickyFlags
peekFilePath :: Ptr () -> IO (Maybe FilePath)
peekFilePath ptr
| ptr == nullPtr = return Nothing
| otherwise = return (Just "<filepath>")
peekCStringOpt :: Ptr CChar -> IO (Maybe String)
peekCStringOpt ptr
| ptr == nullPtr = return Nothing
| otherwise = Just <$> peekCString ptr
getGCFlags :: IO GCFlags
getGCFlags = do
ptr <- getGcFlagsPtr
GCFlags <$> (peekFilePath =<< (\hsc_ptr -> peekByteOff hsc_ptr 0) ptr)
{-# LINE 307 "GHC/RTS/Flags.hsc" #-}
<*> (toEnum . fromIntegral <$>
((\hsc_ptr -> peekByteOff hsc_ptr 8) ptr :: IO Nat))
{-# LINE 309 "GHC/RTS/Flags.hsc" #-}
<*> (\hsc_ptr -> peekByteOff hsc_ptr 12) ptr
{-# LINE 310 "GHC/RTS/Flags.hsc" #-}
<*> (\hsc_ptr -> peekByteOff hsc_ptr 16) ptr
{-# LINE 311 "GHC/RTS/Flags.hsc" #-}
<*> (\hsc_ptr -> peekByteOff hsc_ptr 20) ptr
{-# LINE 312 "GHC/RTS/Flags.hsc" #-}
<*> (\hsc_ptr -> peekByteOff hsc_ptr 24) ptr
{-# LINE 313 "GHC/RTS/Flags.hsc" #-}
<*> (\hsc_ptr -> peekByteOff hsc_ptr 28) ptr
{-# LINE 314 "GHC/RTS/Flags.hsc" #-}
<*> (\hsc_ptr -> peekByteOff hsc_ptr 32) ptr
{-# LINE 315 "GHC/RTS/Flags.hsc" #-}
<*> (\hsc_ptr -> peekByteOff hsc_ptr 40) ptr
{-# LINE 316 "GHC/RTS/Flags.hsc" #-}
<*> (\hsc_ptr -> peekByteOff hsc_ptr 44) ptr
{-# LINE 317 "GHC/RTS/Flags.hsc" #-}
<*> (\hsc_ptr -> peekByteOff hsc_ptr 48) ptr
{-# LINE 318 "GHC/RTS/Flags.hsc" #-}
<*> (\hsc_ptr -> peekByteOff hsc_ptr 56) ptr
{-# LINE 319 "GHC/RTS/Flags.hsc" #-}
<*> (\hsc_ptr -> peekByteOff hsc_ptr 64) ptr
{-# LINE 320 "GHC/RTS/Flags.hsc" #-}
<*> (\hsc_ptr -> peekByteOff hsc_ptr 72) ptr
{-# LINE 321 "GHC/RTS/Flags.hsc" #-}
<*> (\hsc_ptr -> peekByteOff hsc_ptr 76) ptr
{-# LINE 322 "GHC/RTS/Flags.hsc" #-}
<*> (\hsc_ptr -> peekByteOff hsc_ptr 80) ptr
{-# LINE 323 "GHC/RTS/Flags.hsc" #-}
<*> (\hsc_ptr -> peekByteOff hsc_ptr 84) ptr
{-# LINE 324 "GHC/RTS/Flags.hsc" #-}
<*> (\hsc_ptr -> peekByteOff hsc_ptr 88) ptr
{-# LINE 325 "GHC/RTS/Flags.hsc" #-}
<*> (\hsc_ptr -> peekByteOff hsc_ptr 96) ptr
{-# LINE 326 "GHC/RTS/Flags.hsc" #-}
<*> (\hsc_ptr -> peekByteOff hsc_ptr 100) ptr
{-# LINE 327 "GHC/RTS/Flags.hsc" #-}
<*> (\hsc_ptr -> peekByteOff hsc_ptr 104) ptr
{-# LINE 328 "GHC/RTS/Flags.hsc" #-}
<*> (\hsc_ptr -> peekByteOff hsc_ptr 112) ptr
{-# LINE 329 "GHC/RTS/Flags.hsc" #-}
<*> (\hsc_ptr -> peekByteOff hsc_ptr 120) ptr
{-# LINE 330 "GHC/RTS/Flags.hsc" #-}
<*> (\hsc_ptr -> peekByteOff hsc_ptr 128) ptr
{-# LINE 331 "GHC/RTS/Flags.hsc" #-}
<*> (\hsc_ptr -> peekByteOff hsc_ptr 136) ptr
{-# LINE 332 "GHC/RTS/Flags.hsc" #-}
getConcFlags :: IO ConcFlags
getConcFlags = do
ptr <- getConcFlagsPtr
ConcFlags <$> (\hsc_ptr -> peekByteOff hsc_ptr 0) ptr
{-# LINE 337 "GHC/RTS/Flags.hsc" #-}
<*> (\hsc_ptr -> peekByteOff hsc_ptr 8) ptr
{-# LINE 338 "GHC/RTS/Flags.hsc" #-}
getMiscFlags :: IO MiscFlags
getMiscFlags = do
ptr <- getMiscFlagsPtr
MiscFlags <$> (\hsc_ptr -> peekByteOff hsc_ptr 0) ptr
{-# LINE 343 "GHC/RTS/Flags.hsc" #-}
<*> (\hsc_ptr -> peekByteOff hsc_ptr 8) ptr
{-# LINE 344 "GHC/RTS/Flags.hsc" #-}
<*> (\hsc_ptr -> peekByteOff hsc_ptr 12) ptr
{-# LINE 345 "GHC/RTS/Flags.hsc" #-}
<*> (\hsc_ptr -> peekByteOff hsc_ptr 16) ptr
{-# LINE 346 "GHC/RTS/Flags.hsc" #-}
getDebugFlags :: IO DebugFlags
getDebugFlags = do
ptr <- getDebugFlagsPtr
DebugFlags <$> (\hsc_ptr -> peekByteOff hsc_ptr 0) ptr
{-# LINE 351 "GHC/RTS/Flags.hsc" #-}
<*> (\hsc_ptr -> peekByteOff hsc_ptr 4) ptr
{-# LINE 352 "GHC/RTS/Flags.hsc" #-}
<*> (\hsc_ptr -> peekByteOff hsc_ptr 8) ptr
{-# LINE 353 "GHC/RTS/Flags.hsc" #-}
<*> (\hsc_ptr -> peekByteOff hsc_ptr 12) ptr
{-# LINE 354 "GHC/RTS/Flags.hsc" #-}
<*> (\hsc_ptr -> peekByteOff hsc_ptr 16) ptr
{-# LINE 355 "GHC/RTS/Flags.hsc" #-}
<*> (\hsc_ptr -> peekByteOff hsc_ptr 20) ptr
{-# LINE 356 "GHC/RTS/Flags.hsc" #-}
<*> (\hsc_ptr -> peekByteOff hsc_ptr 24) ptr
{-# LINE 357 "GHC/RTS/Flags.hsc" #-}
<*> (\hsc_ptr -> peekByteOff hsc_ptr 28) ptr
{-# LINE 358 "GHC/RTS/Flags.hsc" #-}
<*> (\hsc_ptr -> peekByteOff hsc_ptr 32) ptr
{-# LINE 359 "GHC/RTS/Flags.hsc" #-}
<*> (\hsc_ptr -> peekByteOff hsc_ptr 36) ptr
{-# LINE 360 "GHC/RTS/Flags.hsc" #-}
<*> (\hsc_ptr -> peekByteOff hsc_ptr 40) ptr
{-# LINE 361 "GHC/RTS/Flags.hsc" #-}
<*> (\hsc_ptr -> peekByteOff hsc_ptr 44) ptr
{-# LINE 362 "GHC/RTS/Flags.hsc" #-}
<*> (\hsc_ptr -> peekByteOff hsc_ptr 48) ptr
{-# LINE 363 "GHC/RTS/Flags.hsc" #-}
<*> (\hsc_ptr -> peekByteOff hsc_ptr 52) ptr
{-# LINE 364 "GHC/RTS/Flags.hsc" #-}
<*> (\hsc_ptr -> peekByteOff hsc_ptr 56) ptr
{-# LINE 365 "GHC/RTS/Flags.hsc" #-}
getCCFlags :: IO CCFlags
getCCFlags = do
ptr <- getCcFlagsPtr
CCFlags <$> (toEnum . fromIntegral
<$> ((\hsc_ptr -> peekByteOff hsc_ptr 0) ptr :: IO Nat))
{-# LINE 371 "GHC/RTS/Flags.hsc" #-}
<*> (\hsc_ptr -> peekByteOff hsc_ptr 4) ptr
{-# LINE 372 "GHC/RTS/Flags.hsc" #-}
<*> (\hsc_ptr -> peekByteOff hsc_ptr 8) ptr
{-# LINE 373 "GHC/RTS/Flags.hsc" #-}
getProfFlags :: IO ProfFlags
getProfFlags = do
ptr <- getProfFlagsPtr
ProfFlags <$> (toEnum <$> (\hsc_ptr -> peekByteOff hsc_ptr 0) ptr)
{-# LINE 378 "GHC/RTS/Flags.hsc" #-}
<*> (\hsc_ptr -> peekByteOff hsc_ptr 8) ptr
{-# LINE 379 "GHC/RTS/Flags.hsc" #-}
<*> (\hsc_ptr -> peekByteOff hsc_ptr 16) ptr
{-# LINE 380 "GHC/RTS/Flags.hsc" #-}
<*> (\hsc_ptr -> peekByteOff hsc_ptr 20) ptr
{-# LINE 381 "GHC/RTS/Flags.hsc" #-}
<*> (\hsc_ptr -> peekByteOff hsc_ptr 24) ptr
{-# LINE 382 "GHC/RTS/Flags.hsc" #-}
<*> (\hsc_ptr -> peekByteOff hsc_ptr 28) ptr
{-# LINE 383 "GHC/RTS/Flags.hsc" #-}
<*> (\hsc_ptr -> peekByteOff hsc_ptr 32) ptr
{-# LINE 384 "GHC/RTS/Flags.hsc" #-}
<*> (peekCStringOpt =<< (\hsc_ptr -> peekByteOff hsc_ptr 40) ptr)
{-# LINE 385 "GHC/RTS/Flags.hsc" #-}
<*> (peekCStringOpt =<< (\hsc_ptr -> peekByteOff hsc_ptr 48) ptr)
{-# LINE 386 "GHC/RTS/Flags.hsc" #-}
<*> (peekCStringOpt =<< (\hsc_ptr -> peekByteOff hsc_ptr 56) ptr)
{-# LINE 387 "GHC/RTS/Flags.hsc" #-}
<*> (peekCStringOpt =<< (\hsc_ptr -> peekByteOff hsc_ptr 64) ptr)
{-# LINE 388 "GHC/RTS/Flags.hsc" #-}
<*> (peekCStringOpt =<< (\hsc_ptr -> peekByteOff hsc_ptr 72) ptr)
{-# LINE 389 "GHC/RTS/Flags.hsc" #-}
<*> (peekCStringOpt =<< (\hsc_ptr -> peekByteOff hsc_ptr 80) ptr)
{-# LINE 390 "GHC/RTS/Flags.hsc" #-}
<*> (peekCStringOpt =<< (\hsc_ptr -> peekByteOff hsc_ptr 88) ptr)
{-# LINE 391 "GHC/RTS/Flags.hsc" #-}
getTraceFlags :: IO TraceFlags
getTraceFlags = do
ptr <- getTraceFlagsPtr
TraceFlags <$> (toEnum . fromIntegral
<$> ((\hsc_ptr -> peekByteOff hsc_ptr 0) ptr :: IO CInt))
{-# LINE 397 "GHC/RTS/Flags.hsc" #-}
<*> (\hsc_ptr -> peekByteOff hsc_ptr 4) ptr
{-# LINE 398 "GHC/RTS/Flags.hsc" #-}
<*> (\hsc_ptr -> peekByteOff hsc_ptr 8) ptr
{-# LINE 399 "GHC/RTS/Flags.hsc" #-}
<*> (\hsc_ptr -> peekByteOff hsc_ptr 12) ptr
{-# LINE 400 "GHC/RTS/Flags.hsc" #-}
<*> (\hsc_ptr -> peekByteOff hsc_ptr 16) ptr
{-# LINE 401 "GHC/RTS/Flags.hsc" #-}
<*> (\hsc_ptr -> peekByteOff hsc_ptr 20) ptr
{-# LINE 402 "GHC/RTS/Flags.hsc" #-}
<*> (\hsc_ptr -> peekByteOff hsc_ptr 24) ptr
{-# LINE 403 "GHC/RTS/Flags.hsc" #-}
getTickyFlags :: IO TickyFlags
getTickyFlags = do
ptr <- getTickyFlagsPtr
TickyFlags <$> (\hsc_ptr -> peekByteOff hsc_ptr 0) ptr
{-# LINE 408 "GHC/RTS/Flags.hsc" #-}
<*> (peekFilePath =<< (\hsc_ptr -> peekByteOff hsc_ptr 8) ptr)
{-# LINE 409 "GHC/RTS/Flags.hsc" #-}