X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=rts%2FRtsFlags.c;h=497cd88aba87144015d0ad2818af6942e3c39df1;hb=66579ff945831c5fc9a17c58c722ff01f2268d76;hp=4f69f49fecc58ca81518ebd65ea8e915dc3331fa;hpb=f732e7862bb1fcc65fcfbcfb6eaaf6dde39fdd5f;p=ghc-hetmet.git diff --git a/rts/RtsFlags.c b/rts/RtsFlags.c index 4f69f49..497cd88 100644 --- a/rts/RtsFlags.c +++ b/rts/RtsFlags.c @@ -147,6 +147,7 @@ void initRtsFlagsDefaults(void) #endif RtsFlags.GcFlags.compact = rtsFalse; RtsFlags.GcFlags.compactThreshold = 30.0; + RtsFlags.GcFlags.sweep = rtsFalse; #ifdef RTS_GTK_FRONTPANEL RtsFlags.GcFlags.frontpanel = rtsFalse; #endif @@ -353,13 +354,14 @@ usage_text[] = { " -c Auto-enable compaction of the oldest generation when live data is", " at least % of the maximum heap size set with -M (default: 30%)", " -c Enable compaction for all major collections", +" -w Use mark-region for the oldest generation (experimental)", #if defined(THREADED_RTS) " -I Perform full GC after idle time (default: 0.3, 0 == off)", #endif "", -" -t One-line GC statistics (default file: .stat)", -" -s Summary GC statistics (with -Sstderr going to stderr)", -" -S Detailed GC statistics", +" -t[] One-line GC statistics (if omitted, uses stderr)", +" -s[] Summary GC statistics (if omitted, uses stderr)", +" -S[] Detailed GC statistics (if omitted, uses stderr)", #ifdef RTS_GTK_FRONTPANEL " -f Display front panel (requires X11 & GTK+)", #endif @@ -447,7 +449,7 @@ usage_text[] = { "", #endif /* DEBUG */ #if defined(THREADED_RTS) && !defined(NOSMP) -" -N Use OS threads (default: 1)", +" -N Use OS threads (default: 1) (also sets -g)", " -g Use OS threads for GC (default: 1)", " -qm Don't automatically migrate threads between CPUs", " -qw Migrate a thread to the current CPU when it is woken up", @@ -750,6 +752,10 @@ error = rtsTrue; } break; + case 'w': + RtsFlags.GcFlags.sweep = rtsTrue; + break; + case 'F': RtsFlags.GcFlags.oldGenFactor = atof(rts_argv[arg]+2); @@ -912,7 +918,7 @@ error = rtsTrue; { int r; r = open_stats_file(arg, *argc, argv, - *rts_argc, rts_argv, STAT_FILENAME_FMT, + *rts_argc, rts_argv, NULL, &RtsFlags.GcFlags.statsFile); if (r == -1) { error = rtsTrue; } } @@ -1121,10 +1127,18 @@ error = rtsTrue; if (rts_argv[arg][2] != '\0') { RtsFlags.ParFlags.nNodes = strtol(rts_argv[arg]+2, (char **) NULL, 10); + // set -g at the same time as -N by default + RtsFlags.ParFlags.gcThreads = RtsFlags.ParFlags.nNodes; if (RtsFlags.ParFlags.nNodes <= 0) { errorBelch("bad value for -N"); error = rtsTrue; } +#if defined(PROFILING) + if (RtsFlags.ParFlags.nNodes > 1) { + errorBelch("bad option %s: only -N1 is supported with profiling", rts_argv[arg]); + error = rtsTrue; + } +#endif } ) break; @@ -1133,16 +1147,10 @@ error = rtsTrue; if (rts_argv[arg][2] != '\0') { RtsFlags.ParFlags.gcThreads = strtol(rts_argv[arg]+2, (char **) NULL, 10); - if (RtsFlags.ParFlags.nNodes <= 0) { + if (RtsFlags.ParFlags.gcThreads <= 0) { errorBelch("bad value for -g"); error = rtsTrue; } -#if defined(PROFILING) - if (RtsFlags.ParFlags.nNodes > 1) { - errorBelch("bad option %s: only -N1 is supported with profiling", rts_argv[arg]); - error = rtsTrue; - } -#endif } ) break; @@ -2335,16 +2343,17 @@ open_stats_file ( { FILE *f = NULL; - if (strequal(rts_argv[arg]+2, "stderr")) { /* use debugBelch */ + if (strequal(rts_argv[arg]+2, "stderr") + || (FILENAME_FMT == NULL && rts_argv[arg][2] == '\0')) { f = NULL; /* NULL means use debugBelch */ } else { - if (rts_argv[arg][2] != '\0') { /* stats file specified */ - f = fopen(rts_argv[arg]+2,"w"); - } else { - char stats_filename[STATS_FILENAME_MAXLEN]; /* default . */ - sprintf(stats_filename, FILENAME_FMT, argv[0]); - f = fopen(stats_filename,"w"); - } + if (rts_argv[arg][2] != '\0') { /* stats file specified */ + f = fopen(rts_argv[arg]+2,"w"); + } else { + char stats_filename[STATS_FILENAME_MAXLEN]; /* default . */ + sprintf(stats_filename, FILENAME_FMT, argv[0]); + f = fopen(stats_filename,"w"); + } if (f == NULL) { errorBelch("Can't open stats file %s\n", rts_argv[arg]+2); return -1;