summary refs log tree commit diff stats
path: root/lib/system
diff options
context:
space:
mode:
authorJacek Sieka <arnetheduck@gmail.com>2016-10-12 22:31:59 +0800
committerJacek Sieka <arnetheduck@gmail.com>2016-10-12 22:31:59 +0800
commitd2d618dde75d5a8189a943268b1cbb1aed28dc48 (patch)
treea4fe9e5eddfb1dd2b5908bb03070d8e1a95f0ce7 /lib/system
parente6ff6dd9c89b3156fe50f61f6a28bcaba4aca91c (diff)
downloadNim-d2d618dde75d5a8189a943268b1cbb1aed28dc48.tar.gz
add MAP_ANONYMOUS const for amd64, fix MAP_PRIVATE on mips etc (see fe36254)
Diffstat (limited to 'lib/system')
-rw-r--r--lib/system/osalloc.nim13
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,