Wrap gcc on Windows, to provide the -B flags
[ghc-hetmet.git] / rts / RtsFlags.c
index d200bf2..1403801 100644 (file)
@@ -135,7 +135,7 @@ void initRtsFlagsDefaults(void)
 #endif
 
 #ifdef TRACING
-    RtsFlags.TraceFlags.trace_stderr  = rtsFalse;
+    RtsFlags.TraceFlags.tracing       = TRACE_NONE;
     RtsFlags.TraceFlags.timestamp     = rtsFalse;
     RtsFlags.TraceFlags.scheduler     = rtsFalse;
 #endif
@@ -152,8 +152,9 @@ void initRtsFlagsDefaults(void)
     RtsFlags.ParFlags.migrate           = rtsTrue;
     RtsFlags.ParFlags.wakeupMigrate     = rtsFalse;
     RtsFlags.ParFlags.parGcEnabled      = 1;
-    RtsFlags.ParFlags.parGcGen          = 1;
-    RtsFlags.ParFlags.parGcLoadBalancing = 1;
+    RtsFlags.ParFlags.parGcGen          = 0;
+    RtsFlags.ParFlags.parGcLoadBalancingEnabled = rtsTrue;
+    RtsFlags.ParFlags.parGcLoadBalancingGen = 1;
     RtsFlags.ParFlags.setAffinity       = 0;
 #endif
 
@@ -307,10 +308,11 @@ usage_text[] = {
 #if defined(THREADED_RTS) && !defined(NOSMP)
 "  -N<n>     Use <n> processors (default: 1)",
 "  -N        Determine the number of processors to use automatically",
-"  -q1       Use one OS thread for GC (turns off parallel GC)",
-"  -qg<n>    Use parallel GC only for generations >= <n> (default: 1)",
-"  -qb       Disable load-balancing in the parallel GC",
-"  -qa       Use the OS to set thread affinity",
+"  -qg[<n>]  Use parallel GC only for generations >= <n>",
+"            (default: 0, -qg alone turns off parallel GC)",
+"  -qb[<n>]  Use load-balancing in the parallel GC only for generations >= <n>",
+"            (default: 1, -qb alone turns off load-balancing)",
+"  -qa       Use the OS to set thread affinity (experimental)",
 "  -qm       Don't automatically migrate threads between CPUs",
 "  -qw       Migrate a thread to the current CPU when it is woken up",
 #endif
@@ -650,7 +652,7 @@ error = rtsTrue;
                  }
                   // -Dx also turns on -v.  Use -l to direct trace
                   // events to the .eventlog file instead.
-                  RtsFlags.TraceFlags.trace_stderr = rtsTrue;
+                  RtsFlags.TraceFlags.tracing = TRACE_STDERR;
                  break;
              }
 #endif
@@ -758,20 +760,21 @@ error = rtsTrue;
 #ifdef TRACING
                 switch(rts_argv[arg][2]) {
                case '\0':
-                  RtsFlags.TraceFlags.trace_stderr = rtsFalse;
-                  break;
+                    RtsFlags.TraceFlags.tracing = TRACE_EVENTLOG;
+                    break;
                 case 's':
-                  RtsFlags.TraceFlags.scheduler = rtsTrue;
-                  break;
+                    RtsFlags.TraceFlags.tracing = TRACE_EVENTLOG;
+                    RtsFlags.TraceFlags.scheduler = rtsTrue;
+                    break;
                default:
                    errorBelch("unknown RTS option: %s",rts_argv[arg]);
                    error = rtsTrue;
                    break;
                 }
 #else
-                  errorBelch("not built for: -eventlog");
+                errorBelch("not built for: -eventlog");
 #endif
-                  break;
+                break;
 
              case 'P': /* detailed cost centre profiling (time/alloc) */
              case 'p': /* cost centre profiling (time/alloc) */
@@ -1008,21 +1011,25 @@ error = rtsTrue;
                        errorBelch("incomplete RTS option: %s",rts_argv[arg]);
                        error = rtsTrue;
                        break;
-                    case '1':
-                        RtsFlags.ParFlags.parGcEnabled = rtsFalse;
-                        break;
                     case 'g':
-                        if (rts_argv[arg][3] != '\0') {
+                        if (rts_argv[arg][3] == '\0') {
+                            RtsFlags.ParFlags.parGcEnabled = rtsFalse;
+                        } else {
+                            RtsFlags.ParFlags.parGcEnabled = rtsTrue;
                             RtsFlags.ParFlags.parGcGen
                                 = strtol(rts_argv[arg]+3, (char **) NULL, 10);
-                        } else {
-                            errorBelch("bad value for -qg");
-                            error = rtsTrue;
                         }
                         break;
                    case 'b':
-                       RtsFlags.ParFlags.parGcLoadBalancing = rtsFalse;
-                       break;
+                        if (rts_argv[arg][3] == '\0') {
+                            RtsFlags.ParFlags.parGcLoadBalancingEnabled = rtsFalse;
+                        }
+                        else {
+                            RtsFlags.ParFlags.parGcLoadBalancingEnabled = rtsTrue;
+                            RtsFlags.ParFlags.parGcLoadBalancingGen
+                                = strtol(rts_argv[arg]+3, (char **) NULL, 10);
+                        }
+                        break;
                    case 'a':
                        RtsFlags.ParFlags.setAffinity = rtsTrue;
                        break;
@@ -1074,7 +1081,7 @@ error = rtsTrue;
                 switch(rts_argv[arg][2]) {
 #ifdef TRACING
                 case '\0':
-                    RtsFlags.TraceFlags.trace_stderr = rtsTrue;
+                    RtsFlags.TraceFlags.tracing = TRACE_STDERR;
                     break;
                case 't':
                    RtsFlags.TraceFlags.timestamp = rtsTrue;