summaryrefslogtreecommitdiff
path: root/includes/stg
diff options
context:
space:
mode:
authorFrancesco Mazzoli <f@mazzo.li>2016-09-09 18:15:49 +0100
committerTamar Christina <tamar@zhox.com>2016-09-09 18:24:30 +0100
commit1b5f9207a649a64a1bba20b0283253425f9208d7 (patch)
tree06b3373e9111c5061a578d1fe214a8d5810c852e /includes/stg
parent65d9597d98ead78198bb747aed4e1163ee0d60d3 (diff)
downloadhaskell-1b5f9207a649a64a1bba20b0283253425f9208d7.tar.gz
Make start address of `osReserveHeapMemory` tunable via command line -xb
Summary: We stumbled upon a case where an external library (OpenCL) does not work if a specific address (0x200000000) is taken. It so happens that `osReserveHeapMemory` starts trying to mmap at 0x200000000: ``` void *hint = (void*)((W_)8 * (1 << 30) + attempt * BLOCK_SIZE); at = osTryReserveHeapMemory(*len, hint); ``` This makes it impossible to use Haskell programs compiled with GHC 8 with C functions that use OpenCL. See this example ​https://github.com/chpatrick/oclwtf for a repro. This patch allows the user to work around this kind of behavior outside our control by letting the user override the starting address through an RTS command line flag. Reviewers: bgamari, Phyx, simonmar, erikd, austin Reviewed By: Phyx, simonmar Subscribers: rwbarton, thomie Differential Revision: https://phabricator.haskell.org/D2513
Diffstat (limited to 'includes/stg')
-rw-r--r--includes/stg/Types.h4
1 files changed, 4 insertions, 0 deletions
diff --git a/includes/stg/Types.h b/includes/stg/Types.h
index 0ad3c5c77d..3a08eb2f85 100644
--- a/includes/stg/Types.h
+++ b/includes/stg/Types.h
@@ -124,6 +124,8 @@ typedef uint32_t StgHalfWord;
#define FMT_HexWord FMT_HexWord64
#define FMT_Int FMT_Int64
+#define strToStgWord strtoull
+
#elif SIZEOF_VOID_P == 4
typedef int32_t StgInt;
typedef uint32_t StgWord;
@@ -139,6 +141,8 @@ typedef uint16_t StgHalfWord;
#define FMT_HexWord FMT_HexWord32
#define FMT_Int FMT_Int32
+#define strToStgWord strtoul
+
#else
#error GHC untested on this architecture: sizeof(void *) != 4 or 8
#endif