summaryrefslogtreecommitdiff
path: root/rts/sm/OSMem.h
diff options
context:
space:
mode:
authorErik de Castro Lopo <erikd@mega-nerd.com>2016-05-24 19:26:56 +1000
committerErik de Castro Lopo <erikd@mega-nerd.com>2016-05-25 07:32:09 +1000
commitfe8a4e5d77ef8b2bdb2e7e87d50eb477c94bce43 (patch)
tree36b0c877bce4ecc04beb8dccc60f1209c1692dc1 /rts/sm/OSMem.h
parent95dfdceb8b4dcc54a366949577d9ee389bad5bc3 (diff)
downloadhaskell-fe8a4e5d77ef8b2bdb2e7e87d50eb477c94bce43.tar.gz
Runtime linker: Break m32 allocator out into its own file
This makes the code a little more modular and allows the removal of some CPP hackery. By providing dummy implementations of of the `m32_*` functions (which simply call `errorBelch`) it means that the call sites for these functions are syntax checked even when `RTS_LINKER_USE_MMAP` is `0`. Also changes some size parameter types from `unsigned int` to `size_t`. Test Plan: Validate on Linux, OS X and Windows Reviewers: Phyx, hsyl20, bgamari, simonmar, austin Reviewed By: simonmar, austin Subscribers: thomie Differential Revision: https://phabricator.haskell.org/D2237
Diffstat (limited to 'rts/sm/OSMem.h')
-rw-r--r--rts/sm/OSMem.h17
1 files changed, 16 insertions, 1 deletions
diff --git a/rts/sm/OSMem.h b/rts/sm/OSMem.h
index a9d4fc9cd2..8518f05d1b 100644
--- a/rts/sm/OSMem.h
+++ b/rts/sm/OSMem.h
@@ -16,10 +16,25 @@ void *osGetMBlocks(uint32_t n);
void osFreeMBlocks(void *addr, uint32_t n);
void osReleaseFreeMemory(void);
void osFreeAllMBlocks(void);
-W_ getPageSize (void);
+size_t getPageSize (void);
StgWord64 getPhysicalMemorySize (void);
void setExecutable (void *p, W_ len, rtsBool exec);
+INLINE_HEADER size_t
+roundDownToPage (size_t x)
+{
+ size_t size = getPageSize();
+ return (x & ~(size - 1));
+}
+
+INLINE_HEADER size_t
+roundUpToPage (size_t x)
+{
+ size_t size = getPageSize();
+ return ((x + size - 1) & ~(size - 1));
+}
+
+
#ifdef USE_LARGE_ADDRESS_SPACE
/*