diff options
author | Javran Cheng <Javran.c@gmail.com> | 2015-04-17 10:52:00 +1000 |
---|---|---|
committer | Erik de Castro Lopo <erikd@mega-nerd.com> | 2015-04-17 12:06:54 +1000 |
commit | 51af102e5c6c56e0987432aa5a21fe10e24090e9 (patch) | |
tree | 5e8a94af428f03b981d51e67c050b816f8e5b239 /rts/hooks | |
parent | 3b90d8c8cfb4f56cec3eb5e1ede12c22a9e28d79 (diff) | |
download | haskell-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/hooks')
-rw-r--r-- | rts/hooks/OutOfHeap.c | 14 | ||||
-rw-r--r-- | rts/hooks/StackOverflow.c | 10 |
2 files changed, 18 insertions, 6 deletions
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") + ); } |