Darwin Mangler: include alignment statements for symbol stubs
[ghc-hetmet.git] / ghc / includes / RtsFlags.h
index 301743a..c997b22 100644 (file)
@@ -1,5 +1,4 @@
 /* -----------------------------------------------------------------------------
- * $Id: RtsFlags.h,v 1.39 2001/11/25 16:57:38 sof Exp $
  *
  * (c) The GHC Team, 1998-1999
  *
@@ -10,6 +9,8 @@
 #ifndef RTSFLAGS_H
 #define RTSFLAGS_H
 
+#include <stdio.h>
+
 /* For defaults, see the @initRtsFlagsDefaults@ routine. */
 
 struct GC_FLAGS {
@@ -40,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
@@ -84,46 +76,37 @@ 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
 # define HEAP_BY_DESCR         4
 # define HEAP_BY_TYPE          5
-/* Flags for retainer and lag-drag-void profiling */
 # 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;
-  
-# define CCchar    'C'
-# define MODchar   'M'
-# define DESCRchar 'D'
-# define TYPEchar  'Y'
+
+    nat                 maxRetainerSetSize;
 
     char*               modSelector;
     char*               descrSelector;
     char*               typeSelector;
     char*               ccSelector;
-
-
-};
-#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 */
+    char*               ccsSelector;
+    char*               retainerSelector;
+    char*               bioSelector;
 
 };
-#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