From 9e7d885f3509a25ee804f2837e24b49a378a1fe1 Mon Sep 17 00:00:00 2001 From: Jacek Sieka Date: Mon, 8 Jul 2019 09:14:35 +0200 Subject: dynlib: use posix module (#11623) --- tests/mmaptest.nim | 33 +++++++++------------------------ 1 file changed, 9 insertions(+), 24 deletions(-) (limited to 'tests/mmaptest.nim') diff --git a/tests/mmaptest.nim b/tests/mmaptest.nim index 84036cbf0..7abdab45f 100644 --- a/tests/mmaptest.nim +++ b/tests/mmaptest.nim @@ -1,25 +1,7 @@ # Small test program to test for mmap() weirdnesses -include "lib/system/ansi_c" - -const - PageSize = 4096 - PROT_READ = 1 # page can be read - PROT_WRITE = 2 # page can be written - MAP_PRIVATE = 2 # Changes are private - -when defined(macosx) or defined(bsd): - const MAP_ANONYMOUS = 0x1000 -elif defined(solaris): - const MAP_ANONYMOUS = 0x100 -else: - var - MAP_ANONYMOUS {.importc: "MAP_ANONYMOUS", header: "".}: cint - -proc mmap(adr: pointer, len: int, prot, flags, fildes: cint, - off: int): pointer {.header: "".} - -proc munmap(adr: pointer, len: int) {.header: "".} +import system/ansi_c +import posix proc osAllocPages(size: int): pointer {.inline.} = result = mmap(nil, size, PROT_READ or PROT_WRITE, @@ -31,18 +13,21 @@ proc osAllocPages(size: int): pointer {.inline.} = proc osDeallocPages(p: pointer, size: int) {.inline} = cfprintf(c_stdout, "freed pages %p..%p\n", p, cast[int](p) + size) - munmap(p, size-1) + discard munmap(p, size-1) proc `+!!`(p: pointer, size: int): pointer {.inline.} = result = cast[pointer](cast[int](p) + size) +const + PageShift = when defined(cpu16): 8 else: 12 # \ + # my tests showed no improvments for using larger page sizes. + PageSize = 1 shl PageShift + var p = osAllocPages(3 * PageSize) osDeallocPages(p, PageSize) # If this fails the OS has freed the whole block starting at 'p': -echo(cast[ptr int](p +!! (pageSize*2))[]) +echo(cast[ptr int](p +!! (PageSize*2))[]) osDeallocPages(p +!! PageSize*2, PageSize) osDeallocPages(p +!! PageSize, PageSize) - - -- cgit 1.4.1-2-gfad0