#!/usr/local/bin/rune -x # import "sys"; import ; int main(int ac, string_p *av) { FdMap map; int *ptr; int i; volatile char c; map.mmap(1024*1024, PROT_READ|PROT_WRITE, MAP_ANON|MAP_PRIVATE); stdio.stdout->format("error %d\n", map.error); ptr = map.base; for (i = 0; i < 1024*1024/4; ++i) { ++ptr[i]; } ptr = NULL; map.madvise(MADV_NOSYNC); map.msync(); map.munmap(); map.mmap(1024*1024, PROT_READ|PROT_WRITE, MAP_ANON|MAP_PRIVATE); stdio.stdout->format("error %d\n", map.error); ptr = map.base; for (i = 0; i < 1024*1024/4; ++i) { ++ptr[i]; } map.mprotect(PROT_READ, 512*1024, 512*1024); for (i = 0; i < 1024*1024/4; ++i) { c = ptr[i]; ++c; } stdio.stdout->format("should see a seg-fault at index 131072\n"); for (i = 0; i < 1024*1024/4; ++i) { if (((i + 1) & 32767) == 0) stdio.stdout->format("index %d\n", i + 1); ++ptr[i]; } map.madvise(MADV_FREE, 512*1024, 512*1024); map.munmap(); }