diff options
author | Ben Gamari <ben@smart-cactus.org> | 2021-07-12 20:07:59 -0400 |
---|---|---|
committer | Marge Bot <ben+marge-bot@smart-cactus.org> | 2021-07-27 04:47:51 -0400 |
commit | 0e875c3f1d7373812ddae9962edfc9538465d2ed (patch) | |
tree | 49a86dcbe6b875c042dc3e21070114a8cd4d5471 /rts/ExecPage.c | |
parent | 3b07d8270341725c862230d8aec213fe34bd9fb6 (diff) | |
download | haskell-0e875c3f1d7373812ddae9962edfc9538465d2ed.tar.gz |
rts: Introduce and use ExecPage abstraction
Here we introduce a very thin abstraction for allocating, filling, and
freezing executable pages to replace allocateExec.
Diffstat (limited to 'rts/ExecPage.c')
-rw-r--r-- | rts/ExecPage.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/rts/ExecPage.c b/rts/ExecPage.c new file mode 100644 index 0000000000..6f5b6e281a --- /dev/null +++ b/rts/ExecPage.c @@ -0,0 +1,24 @@ +/* + * Utilities for managing dynamically-allocated executable pages. + * + * These are primarily used to back the adjustor code produced by the native + * adjustor implementations. + */ + +#include "Rts.h" +#include "LinkerInternals.h" +#include "sm/OSMem.h" + +ExecPage *allocateExecPage() { + ExecPage *page = (ExecPage *) mmapAnonForLinker(getPageSize()); + return page; +} + +void freezeExecPage(ExecPage *page) { + mmapForLinkerMarkExecutable(page, getPageSize()); + flushExec(getPageSize(), page); +} + +void freeExecPage(ExecPage *page) { + munmapForLinker(page, getPageSize(), "freeExecPage"); +} |