summaryrefslogtreecommitdiff
path: root/rts
diff options
context:
space:
mode:
authorJavran Cheng <Javran.c@gmail.com>2015-04-17 10:52:00 +1000
committerErik de Castro Lopo <erikd@mega-nerd.com>2015-04-17 12:06:54 +1000
commit51af102e5c6c56e0987432aa5a21fe10e24090e9 (patch)
tree5e8a94af428f03b981d51e67c050b816f8e5b239 /rts
parent3b90d8c8cfb4f56cec3eb5e1ede12c22a9e28d79 (diff)
downloadhaskell-51af102e5c6c56e0987432aa5a21fe10e24090e9.tar.gz
Better hints when RTS options not available (Trac #9579)
This patch provides user with a better hint when most RTS options are not available (not compiled with `-rtsopts`). A new field "rtsOptsEnabled" is added into RtsFlags.MiscFlags to tell the availablity of RTS options. Some concerns: * Unlike other flag fields in "libraries/base/GHC/RTS/Flags.hsc", "RtsOptsEnabled" is defined in "includes/RtsAPI.h" and lacks constant macros. Therefore In "GHC.RTS", "RtsOptsEnabled" simply derives Enum instance and reads as of type "CInt". * There are other ways to change RTS options (e.g. `-with-rtsopts`), but it might be too verbose to mention. Test Plan: validate Reviewers: austin, hvr, thomie, simonmar Reviewed By: thomie Subscribers: thomie, rwbarton Differential Revision: https://phabricator.haskell.org/D767 GHC Trac Issues: #9579
Diffstat (limited to 'rts')
-rw-r--r--rts/ProfHeap.c9
-rw-r--r--rts/hooks/OutOfHeap.c14
-rw-r--r--rts/hooks/StackOverflow.c10
3 files changed, 26 insertions, 7 deletions
diff --git a/rts/ProfHeap.c b/rts/ProfHeap.c
index 8d3f408c3a..ba1adcd5d0 100644
--- a/rts/ProfHeap.c
+++ b/rts/ProfHeap.c
@@ -9,6 +9,7 @@
#include "PosixSource.h"
#include "Rts.h"
+#include "RtsFlags.h"
#include "RtsUtils.h"
#include "Profiling.h"
#include "ProfHeap.h"
@@ -279,7 +280,13 @@ nextEra( void )
era++;
if (era == max_era) {
- errorBelch("maximum number of censuses reached; use +RTS -i to reduce");
+ if (rtsConfig.rts_opts_enabled == RtsOptsAll) {
+ errorBelch("maximum number of censuses reached;\n"
+ "use +RTS -i to reduce");
+ } else {
+ errorBelch("maximum number of censuses reached;\n"
+ "Relink with -rtsopts and use `+RTS -i` to reduce");
+ }
stg_exit(EXIT_FAILURE);
}
diff --git a/rts/hooks/OutOfHeap.c b/rts/hooks/OutOfHeap.c
index 501bccddb7..bb8752846f 100644
--- a/rts/hooks/OutOfHeap.c
+++ b/rts/hooks/OutOfHeap.c
@@ -7,19 +7,23 @@
#include "PosixSource.h"
#include "Rts.h"
#include "Hooks.h"
+#include "RtsFlags.h"
#include <stdio.h>
void
OutOfHeapHook (W_ request_size, W_ heap_size) /* both sizes in bytes */
{
- /* fprintf(stderr, "Heap exhausted;\nwhile trying to allocate %lu bytes in a %lu-byte heap;\nuse `+RTS -H<size>' to increase the total heap size.\n", */
-
(void)request_size; /* keep gcc -Wall happy */
if (heap_size > 0) {
- errorBelch("Heap exhausted;\nCurrent maximum heap size is %" FMT_Word " bytes (%" FMT_Word " MB);\nuse `+RTS -M<size>' to increase it.",
- heap_size, heap_size / (1024*1024));
+ errorBelch("Heap exhausted;\n"
+ "Current maximum heap size is %" FMT_Word
+ " bytes (%" FMT_Word " MB);\n"
+ "%s `+RTS -M<size>' to increase it.",
+ heap_size, heap_size / (1024*1024),
+ ((rtsConfig.rts_opts_enabled == RtsOptsAll)
+ ? "use"
+ : "relink with -rtsopts and use"));
} else {
errorBelch("out of memory");
}
}
-
diff --git a/rts/hooks/StackOverflow.c b/rts/hooks/StackOverflow.c
index 1095b1b81d..1ae8603eec 100644
--- a/rts/hooks/StackOverflow.c
+++ b/rts/hooks/StackOverflow.c
@@ -7,11 +7,19 @@
#include "PosixSource.h"
#include "Rts.h"
#include "Hooks.h"
+#include "RtsFlags.h"
#include <stdio.h>
void
StackOverflowHook (W_ stack_size) /* in bytes */
{
- fprintf(stderr, "Stack space overflow: current size %" FMT_Word " bytes.\nUse `+RTS -Ksize -RTS' to increase it.\n", stack_size);
+ fprintf(stderr,
+ "Stack space overflow: current size %" FMT_Word " bytes.\n"
+ "%s `+RTS -Ksize -RTS' to increase it.\n",
+ stack_size,
+ ((rtsConfig.rts_opts_enabled == RtsOptsAll)
+ ? "Use"
+ : "Relink with -rtsopts and use")
+ );
}