summaryrefslogtreecommitdiff
path: root/rts/RtsFlags.c
diff options
context:
space:
mode:
authorIan Lynagh <igloo@earth.li>2010-08-05 01:11:37 +0000
committerIan Lynagh <igloo@earth.li>2010-08-05 01:11:37 +0000
commit320738062c7a81f062c5adab98a1a1c4fdbd4bc7 (patch)
treec7852c0dae4d2c50b78797fab6ce65a6e88da98f /rts/RtsFlags.c
parentd0fb9a95f40453321b82e23d9b322e79340b48c9 (diff)
downloadhaskell-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.c13
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];