diff options
author | Ian Lynagh <igloo@earth.li> | 2010-08-05 01:11:37 +0000 |
---|---|---|
committer | Ian Lynagh <igloo@earth.li> | 2010-08-05 01:11:37 +0000 |
commit | 320738062c7a81f062c5adab98a1a1c4fdbd4bc7 (patch) | |
tree | c7852c0dae4d2c50b78797fab6ce65a6e88da98f /rts/RtsFlags.c | |
parent | d0fb9a95f40453321b82e23d9b322e79340b48c9 (diff) | |
download | haskell-320738062c7a81f062c5adab98a1a1c4fdbd4bc7.tar.gz |
Make -rtsopts more flexible
The default is a new "some" state, which allows only known-safe flags
that we want on by default. Currently this is only "--info".
Diffstat (limited to 'rts/RtsFlags.c')
-rw-r--r-- | rts/RtsFlags.c | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/rts/RtsFlags.c b/rts/RtsFlags.c index 5eb7800540..2e8ee9e9c8 100644 --- a/rts/RtsFlags.c +++ b/rts/RtsFlags.c @@ -413,7 +413,7 @@ setupRtsFlags(int *argc, char *argv[], int *rts_argc, char *rts_argv[]) char *ghc_rts = getenv("GHCRTS"); if (ghc_rts != NULL) { - if (rtsOptsEnabled) { + if (rtsOptsEnabled != rtsOptsNone) { splitRtsFlags(ghc_rts, rts_argc, rts_argv); } else { @@ -438,7 +438,7 @@ setupRtsFlags(int *argc, char *argv[], int *rts_argc, char *rts_argv[]) break; } else if (strequal("+RTS", argv[arg])) { - if (rtsOptsEnabled) { + if (rtsOptsEnabled != rtsOptsNone) { mode = RTS; } else { @@ -450,7 +450,14 @@ setupRtsFlags(int *argc, char *argv[], int *rts_argc, char *rts_argv[]) mode = PGM; } else if (mode == RTS && *rts_argc < MAX_RTS_ARGS-1) { - rts_argv[(*rts_argc)++] = argv[arg]; + if ((rtsOptsEnabled == rtsOptsAll) || + strequal(argv[arg], "--info")) { + rts_argv[(*rts_argc)++] = argv[arg]; + } + else { + errorBelch("Most RTS options are disabled. Link with -rtsopts to enable them."); + stg_exit(EXIT_FAILURE); + } } else if (mode == PGM) { argv[(*argc)++] = argv[arg]; |