summaryrefslogtreecommitdiff
path: root/rts/RtsFlags.c
diff options
context:
space:
mode:
authorIan Lynagh <igloo@earth.li>2010-03-13 15:45:55 +0000
committerIan Lynagh <igloo@earth.li>2010-03-13 15:45:55 +0000
commit929d166932ee207871e66cc305059f356241c06b (patch)
treea8eec6032460dafe24abfdaa233b56c6bbf26cd5 /rts/RtsFlags.c
parent1e31c2960f7a9fc61119237d8a35b0516d6accca (diff)
downloadhaskell-929d166932ee207871e66cc305059f356241c06b.tar.gz
Add a link-time flag to en/disable the RTS options
If RTS options are disabled then: * The ghc_rts_opts C code variable is processed as normal * The GHCRTS environment variable is ignored and, if it is defined, a warning is emitted * The +RTS flag gives an error and terminates the program
Diffstat (limited to 'rts/RtsFlags.c')
-rw-r--r--rts/RtsFlags.c17
1 files changed, 15 insertions, 2 deletions
diff --git a/rts/RtsFlags.c b/rts/RtsFlags.c
index b99995b16d..790bf426c2 100644
--- a/rts/RtsFlags.c
+++ b/rts/RtsFlags.c
@@ -10,6 +10,7 @@
#include "PosixSource.h"
#include "Rts.h"
+#include "RtsOpts.h"
#include "RtsUtils.h"
#include "Profiling.h"
@@ -413,7 +414,13 @@ setupRtsFlags(int *argc, char *argv[], int *rts_argc, char *rts_argv[])
char *ghc_rts = getenv("GHCRTS");
if (ghc_rts != NULL) {
- splitRtsFlags(ghc_rts, rts_argc, rts_argv);
+ if (rtsOptsEnabled) {
+ splitRtsFlags(ghc_rts, rts_argc, rts_argv);
+ }
+ else {
+ errorBelch("Warning: Ignoring GHCRTS variable");
+ // We don't actually exit, just warn
+ }
}
}
@@ -432,7 +439,13 @@ setupRtsFlags(int *argc, char *argv[], int *rts_argc, char *rts_argv[])
break;
}
else if (strequal("+RTS", argv[arg])) {
- mode = RTS;
+ if (rtsOptsEnabled) {
+ mode = RTS;
+ }
+ else {
+ errorBelch("RTS options are disabled");
+ stg_exit(EXIT_FAILURE);
+ }
}
else if (strequal("-RTS", argv[arg])) {
mode = PGM;