diff options
author | Erik de Castro Lopo <erikd@mega-nerd.com> | 2016-05-24 19:26:56 +1000 |
---|---|---|
committer | Erik de Castro Lopo <erikd@mega-nerd.com> | 2016-05-25 07:32:09 +1000 |
commit | fe8a4e5d77ef8b2bdb2e7e87d50eb477c94bce43 (patch) | |
tree | 36b0c877bce4ecc04beb8dccc60f1209c1692dc1 /rts/sm/OSMem.h | |
parent | 95dfdceb8b4dcc54a366949577d9ee389bad5bc3 (diff) | |
download | haskell-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.h | 17 |
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 /* |