X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Fincludes%2FRtsFlags.h;h=c997b2239611a23809eeab13b0c108d2fe5b5d1d;hb=c137ecd7e6e83d0f9c39b15ccdb9f2355f243c91;hp=209a0b3123fdc7c5c71e5891c22cffc8b35c2f25;hpb=7457757f193b28b5fe8fee01edbed012c2fda897;p=ghc-hetmet.git diff --git a/ghc/includes/RtsFlags.h b/ghc/includes/RtsFlags.h index 209a0b3..c997b22 100644 --- a/ghc/includes/RtsFlags.h +++ b/ghc/includes/RtsFlags.h @@ -1,5 +1,4 @@ /* ----------------------------------------------------------------------------- - * $Id: RtsFlags.h,v 1.42 2002/07/17 09:21:49 simonmar Exp $ * * (c) The GHC Team, 1998-1999 * @@ -42,39 +41,30 @@ struct GC_FLAGS { rtsBool ringBell; rtsBool frontpanel; + + int idleGCDelayTicks; /* in milliseconds */ }; -/* Hack: this struct uses bitfields so that we can use a binary arg - * with the -D flag. - * Remember to update the corresponding bit of RtsFlags.c if you - * change/extend this struct. - */ struct DEBUG_FLAGS { - /* flags to control debugging output in various subsystems */ - rtsBool scheduler : 1; /* 1 */ - rtsBool evaluator : 1; /* 2 */ - rtsBool codegen : 1; /* 4 */ - rtsBool weak : 1; /* 8 */ - rtsBool gccafs : 1; /* 16 */ - rtsBool gc : 1; /* 32 */ - rtsBool block_alloc : 1; /* 64 */ - - /* flags to control consistency checking (often very expensive!) */ - rtsBool sanity : 1; /* 128 */ - - rtsBool stable : 1; /* 256 */ - rtsBool prof : 1; /* 512 */ - rtsBool gran : 1; /* 1024 */ - rtsBool par : 1; /* 2048 */ - - /* The object linker */ - rtsBool linker : 1; /* 4096 */ + /* flags to control debugging output & extra checking in various subsystems */ + rtsBool scheduler; /* 's' */ + rtsBool interpreter; /* 'i' */ + rtsBool codegen; /* 'c' */ + rtsBool weak; /* 'w' */ + rtsBool gccafs; /* 'G' */ + rtsBool gc; /* 'g' */ + rtsBool block_alloc; /* 'b' */ + rtsBool sanity; /* 'S' warning: might be expensive! */ + rtsBool stable; /* 't' */ + rtsBool prof; /* 'p' */ + rtsBool gran; /* 'r' */ + rtsBool par; /* 'P' */ + rtsBool linker; /* 'l' the object linker */ + rtsBool apply; /* 'a' */ + rtsBool stm; /* 'm' */ + rtsBool squeeze; /* 'z' stack squeezing & lazy blackholing */ }; -#define MAX_DEBUG_OPTION 13 -#define DEBUG_MASK(n) ((nat)(ldexp(1,n))) -#define MAX_DEBUG_MASK ((nat)(ldexp(1,(MAX_DEBUG_OPTION+1))-1)) - struct COST_CENTRE_FLAGS { unsigned int doCostCentres; # define COST_CENTRES_SUMMARY 1 @@ -86,14 +76,8 @@ struct COST_CENTRE_FLAGS { int msecsPerTick; /* derived */ }; -#ifdef PROFILING struct PROFILING_FLAGS { unsigned int doHeapProfile; - - nat profileInterval; /* delta between samples (in ms) */ - nat profileIntervalTicks; /* delta between samples (in 'ticks') */ - - # define NO_HEAP_PROFILING 0 /* N.B. Used as indexes into arrays */ # define HEAP_BY_CCS 1 # define HEAP_BY_MOD 2 @@ -102,8 +86,16 @@ struct PROFILING_FLAGS { # define HEAP_BY_RETAINER 6 # define HEAP_BY_LDV 7 +# define HEAP_BY_INFOPTR 1 /* DEBUG only */ +# define HEAP_BY_CLOSURE_TYPE 2 /* DEBUG only */ + + nat profileInterval; /* delta between samples (in ms) */ + nat profileIntervalTicks; /* delta between samples (in 'ticks') */ + rtsBool includeTSOs; + + rtsBool showCCSOnException; - + nat maxRetainerSetSize; char* modSelector; @@ -115,15 +107,6 @@ struct PROFILING_FLAGS { char* bioSelector; }; -#elif defined(DEBUG) -# define NO_HEAP_PROFILING 0 -# define HEAP_BY_INFOPTR 1 -# define HEAP_BY_CLOSURE_TYPE 2 -struct PROFILING_FLAGS { - unsigned int doHeapProfile; /* heap profile using symbol table */ - -}; -#endif /* DEBUG || PROFILING */ struct CONCURRENT_FLAGS { int ctxtSwitchTime; /* in milliseconds */ @@ -178,12 +161,12 @@ struct PAR_FLAGS { }; #endif /* PAR */ -#ifdef SMP +#ifdef THREADED_RTS struct PAR_FLAGS { nat nNodes; /* number of threads to run simultaneously */ unsigned int maxLocalSparks; }; -#endif /* SMP */ +#endif /* THREADED_RTS */ #ifdef GRAN struct GRAN_STATS_FLAGS { @@ -257,8 +240,8 @@ struct GRAN_FLAGS { struct GRAN_COST_FLAGS Costs; /* cost metric for simulation */ struct GRAN_DEBUG_FLAGS Debug; /* debugging options */ - nat maxThreads; // ToDo: share with SMP and GUM - // rtsBool labelling; + nat maxThreads; /* ToDo: share with THREADED_RTS and GUM */ + /* rtsBool labelling; */ nat packBufferSize; nat packBufferSize_internal; @@ -294,54 +277,52 @@ struct GRAN_FLAGS { rtsBool RandomSteal; /* steal spark/thread from random proc */ rtsBool NoForward; /* no forwarding of fetch messages */ - // unsigned int debug; - // rtsBool event_trace; - // rtsBool event_trace_all; + /* unsigned int debug; */ + /* rtsBool event_trace; */ + /* rtsBool event_trace_all; */ }; #endif /* GRAN */ -#ifdef TICKY_TICKY struct TICKY_FLAGS { rtsBool showTickyStats; FILE *tickyFile; }; -#endif /* TICKY_TICKY */ /* Put them together: */ -struct RTS_FLAGS { - struct GC_FLAGS GcFlags; - struct DEBUG_FLAGS DebugFlags; - struct CONCURRENT_FLAGS ConcFlags; - -#if defined(PROFILING) || defined(PAR) +typedef struct _RTS_FLAGS { + /* The first portion of RTS_FLAGS is invariant. */ + struct GC_FLAGS GcFlags; + struct CONCURRENT_FLAGS ConcFlags; + struct DEBUG_FLAGS DebugFlags; struct COST_CENTRE_FLAGS CcFlags; -#endif -#if defined(PROFILING) || defined(DEBUG) - struct PROFILING_FLAGS ProfFlags; -#endif -#if defined(SMP) || defined(PAR) + struct PROFILING_FLAGS ProfFlags; + struct TICKY_FLAGS TickyFlags; + +#if defined(THREADED_RTS) || defined(PAR) struct PAR_FLAGS ParFlags; #endif #ifdef GRAN struct GRAN_FLAGS GranFlags; #endif -#ifdef TICKY_TICKY - struct TICKY_FLAGS TickyFlags; -#endif -}; +} RTS_FLAGS; #ifdef COMPILING_RTS_MAIN -extern DLLIMPORT struct RTS_FLAGS RtsFlags; +extern DLLIMPORT RTS_FLAGS RtsFlags; +#elif IN_STG_CODE +/* Hack because the C code generator can't generate '&label'. */ +extern RTS_FLAGS RtsFlags[]; #else -extern struct RTS_FLAGS RtsFlags; +extern RTS_FLAGS RtsFlags; #endif /* Routines that operate-on/to-do-with RTS flags: */ -void initRtsFlagsDefaults(void); -void setupRtsFlags(int *argc, char *argv[], int *rts_argc, char *rts_argv[]); +extern void initRtsFlagsDefaults(void); +extern void setupRtsFlags(int *argc, char *argv[], int *rts_argc, char *rts_argv[]); +extern void setProgName(char *argv[]); + /* * The printf formats are here, so we are less likely to make