Attempt to fix #2512 and #2063; add +RTS -xm<address> -RTS option
[ghc-hetmet.git] / includes / RtsFlags.h
index 17d2363..55b00bb 100644 (file)
@@ -39,17 +39,20 @@ struct GC_FLAGS {
     rtsBool compact;           /* True <=> "compact all the time" */
     double  compactThreshold;
 
+    rtsBool sweep;             /* use "mostly mark-sweep" instead of copying
+                                 * for the oldest generation */
     rtsBool ringBell;
     rtsBool frontpanel;
 
-    int idleGCDelayTicks;      /* in milliseconds */
+    int idleGCDelayTime;       /* in milliseconds */
+
+    StgWord heapBase;           /* address to ask the OS for memory */
 };
 
 struct DEBUG_FLAGS {  
     /* 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' */
@@ -63,6 +66,7 @@ struct DEBUG_FLAGS {
     rtsBool apply;          /* 'a' */
     rtsBool stm;            /* 'm' */
     rtsBool squeeze;        /* 'z'  stack squeezing & lazy blackholing */
+    rtsBool hpc;           /* 'c' coverage */
 };
 
 struct COST_CENTRE_FLAGS {
@@ -86,8 +90,7 @@ 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 */
+# define HEAP_BY_CLOSURE_TYPE   8
 
     nat                 profileInterval;      /* delta between samples (in ms) */
     nat                 profileIntervalTicks; /* delta between samples (in 'ticks') */
@@ -98,6 +101,8 @@ struct PROFILING_FLAGS {
 
     nat                 maxRetainerSetSize;
 
+    nat                 ccsLength;
+
     char*               modSelector;
     char*               descrSelector;
     char*               typeSelector;
@@ -113,6 +118,13 @@ struct CONCURRENT_FLAGS {
     int ctxtSwitchTicks;       /* derived */
 };
 
+struct MISC_FLAGS {
+    int tickInterval;     /* in milliseconds */
+    rtsBool install_signal_handlers;
+    StgWord linkerMemBase;       /* address to ask the OS for memory
+                                  * for the linker, NULL ==> off */
+};
+
 #ifdef PAR
 /* currently the same as GRAN_STATS_FLAGS */
 struct PAR_STATS_FLAGS {
@@ -167,6 +179,7 @@ struct PAR_FLAGS {
   rtsBool        migrate;        /* migrate threads between capabilities */
   rtsBool        wakeupMigrate;  /* migrate a thread on wakeup */
   unsigned int  maxLocalSparks;
+  nat            gcThreads;      /* number of threads for parallel GC */
 };
 #endif /* THREADED_RTS */
 
@@ -290,6 +303,29 @@ struct TICKY_FLAGS {
     FILE   *tickyFile;
 };
 
+struct TRACE_FLAGS {
+    rtsBool sched;             /* trace scheduler events for profiling */
+    rtsBool gc;                 /* trace GC events */
+    rtsBool timestamp;          /* add timestamps to traces */
+};
+
+#ifdef USE_PAPI
+#define MAX_PAPI_USER_EVENTS 8
+
+struct PAPI_FLAGS {
+    nat     eventType;          /* The type of events to count */
+    nat     numUserEvents;
+    char *  userEvents[MAX_PAPI_USER_EVENTS];
+};
+
+#define PAPI_FLAG_CACHE_L1 1
+#define PAPI_FLAG_CACHE_L2 2
+#define PAPI_FLAG_BRANCH 3
+#define PAPI_FLAG_STALLS 4
+#define PAPI_FLAG_CB_EVENTS 5
+#define PAPI_USER_EVENTS 6
+
+#endif
 
 /* Put them together: */
 
@@ -297,10 +333,12 @@ typedef struct _RTS_FLAGS {
     /* The first portion of RTS_FLAGS is invariant. */
     struct GC_FLAGS         GcFlags;
     struct CONCURRENT_FLAGS  ConcFlags;
+    struct MISC_FLAGS        MiscFlags;
     struct DEBUG_FLAGS      DebugFlags;
     struct COST_CENTRE_FLAGS CcFlags;
     struct PROFILING_FLAGS   ProfFlags;
     struct TICKY_FLAGS      TickyFlags;
+    struct TRACE_FLAGS       TraceFlags;
 
 #if defined(THREADED_RTS) || defined(PAR)
     struct PAR_FLAGS   ParFlags;
@@ -308,6 +346,9 @@ typedef struct _RTS_FLAGS {
 #ifdef GRAN
     struct GRAN_FLAGS  GranFlags;
 #endif
+#ifdef USE_PAPI
+    struct PAPI_FLAGS   PapiFlags;
+#endif
 } RTS_FLAGS;
 
 #ifdef COMPILING_RTS_MAIN