diff options
author | Moritz Angermann <moritz.angermann@gmail.com> | 2021-02-13 16:44:19 +0800 |
---|---|---|
committer | Marge Bot <ben+marge-bot@smart-cactus.org> | 2021-03-29 17:25:49 -0400 |
commit | e754ff7f178a629a2261cba77a29d9510391aebd (patch) | |
tree | 77aca9f315288b52efbc9d410a57300a4029279d /includes/rts | |
parent | 4421fb34b3a70db1323833337c94ac4364824124 (diff) | |
download | haskell-e754ff7f178a629a2261cba77a29d9510391aebd.tar.gz |
Allocate Adjustors and mark them readable in two steps
This drops allocateExec for darwin, and replaces it with
a alloc, write, mark executable strategy instead. This prevents
us from trying to allocate an executable range and then write to
it, which X^W will prohibit on darwin.
This will *only* work if we can use mmap.
Diffstat (limited to 'includes/rts')
-rw-r--r-- | includes/rts/storage/GC.h | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/includes/rts/storage/GC.h b/includes/rts/storage/GC.h index 6acfd10cea..12f0e32f0f 100644 --- a/includes/rts/storage/GC.h +++ b/includes/rts/storage/GC.h @@ -205,9 +205,15 @@ typedef void* AdjustorExecutable; AdjustorWritable allocateExec(W_ len, AdjustorExecutable *exec_addr); void flushExec(W_ len, AdjustorExecutable exec_addr); -#if (defined(arm_HOST_ARCH) || defined(aarch64_HOST_ARCH)) && (defined(ios_HOST_OS) || defined(darwin_HOST_OS)) +#if defined(darwin_HOST_OS) AdjustorWritable execToWritable(AdjustorExecutable exec); #endif + +#if RTS_LINKER_USE_MMAP +AdjustorWritable allocateWrite(W_ bytes); +void markExec(W_ bytes, AdjustorWritable writ); +void freeWrite(W_ bytes, AdjustorWritable writ); +#endif void freeExec (AdjustorExecutable p); // Used by GC checks in external .cmm code: |