summaryrefslogtreecommitdiff
path: root/rts/ExecPage.c
diff options
context:
space:
mode:
Diffstat (limited to 'rts/ExecPage.c')
-rw-r--r--rts/ExecPage.c24
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");
+}