In article <20160512093311.gd19...@mail.duskware.de>, Martin Husemann <mar...@duskware.de> wrote: >Here is an excerpt from example code that is known to work: > >/* For various ports, try to guess a fixed spot in the vm space > that's probably free. */ >#if defined(__sparc64__) ># define TRY_EMPTY_VM_SPACE 0x40000000000 >#elif defined(_LP64) ># define TRY_EMPTY_VM_SPACE 0x400000000000 >#elif defined(__mips__) || defined(__vax__) || defined (__arm__) ># define TRY_EMPTY_VM_SPACE 0x60000000 >#else ># define TRY_EMPTY_VM_SPACE 0xb0000000 >#endif > > addr = mmap ((void *) TRY_EMPTY_VM_SPACE, size, PROT_READ | PROT_WRITE, > MAP_PRIVATE | MAP_FIXED, fd, 0); > > >And size is allowed to be smaller than the page size.
Can't MAP_ALIGNED(n) be used to avoid this mess? You probably need a different argument depending on _LP64 or not, but that should be it... This could avoid using MAP_FIXED. christos