diff options
author | Andreas Rumpf <rumpf_a@web.de> | 2016-10-24 22:05:11 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-10-24 22:05:11 +0200 |
commit | 60d13c488df30970d94325711be634dc33a359dd (patch) | |
tree | d58fbb02e3adc953af8dda3bb65e1e22aafd08d4 | |
parent | fb1406f68fa8906e19d646a39459e3413a92aed0 (diff) | |
parent | d2d618dde75d5a8189a943268b1cbb1aed28dc48 (diff) | |
download | Nim-60d13c488df30970d94325711be634dc33a359dd.tar.gz |
Merge pull request #4888 from arnetheduck/mmap-fixes
add MAP_ANONYMOUS const for amd64, fix MAP_PRIVATE on mips etc
-rw-r--r-- | lib/system/osalloc.nim | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/lib/system/osalloc.nim b/lib/system/osalloc.nim index 316dd74d7..b0639a75a 100644 --- a/lib/system/osalloc.nim +++ b/lib/system/osalloc.nim @@ -81,20 +81,27 @@ elif defined(posix): const PROT_READ = 1 # page can be read PROT_WRITE = 2 # page can be written - MAP_PRIVATE = 2'i32 # Changes are private when defined(macosx) or defined(bsd): const MAP_ANONYMOUS = 0x1000 + const MAP_PRIVATE = 0x02 # Changes are private elif defined(solaris): const MAP_ANONYMOUS = 0x100 + const MAP_PRIVATE = 0x02 # Changes are private + elif defined(linux) and defined(amd64): + # actually, any architecture using asm-generic, but being conservative here, + # some arches like mips and alpha use different values + const MAP_ANONYMOUS = 0x20 + const MAP_PRIVATE = 0x02 # Changes are private else: var MAP_ANONYMOUS {.importc: "MAP_ANONYMOUS", header: "<sys/mman.h>".}: cint + MAP_PRIVATE {.importc: "MAP_PRIVATE", header: "<sys/mman.h>".}: cint - proc mmap(adr: pointer, len: int, prot, flags, fildes: cint, + proc mmap(adr: pointer, len: csize, prot, flags, fildes: cint, off: int): pointer {.header: "<sys/mman.h>".} - proc munmap(adr: pointer, len: int): cint {.header: "<sys/mman.h>".} + proc munmap(adr: pointer, len: csize): cint {.header: "<sys/mman.h>".} proc osAllocPages(size: int): pointer {.inline.} = result = mmap(nil, size, PROT_READ or PROT_WRITE, |