add MAP_ANONYMOUS const for amd64, fix MAP_PRIVATE on mips etc (see fe36254)

This commit is contained in:
Jacek Sieka
2016-10-12 22:31:59 +08:00
parent e6ff6dd9c8
commit d2d618dde7

View File

@@ -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,