On Tue, 04 May 2010 10:22:44 -0600, Charles Davis <cda...@mymail.mines.edu> wrote: > On 5/4/10 10:17 AM, Johann "Myrkraverk" Oskarsson wrote: >> Hi all, >> >> In the Solaris/BSD implementation of reserve_area() in libs/wine/mmap.c >> there is >> >> for (i = 0; i < size; i += pagesize) >> if (mincore( (caddr_t)addr + i, pagesize, &vec ) != -1) >> break; >> >> &vec is never used again in that function. What is the point of >> mincore() ? > It's trying to see if the address is valid. From the manpage: > > RETURN VALUES > Upon successful completion, a value of 0 is returned. Otherwise, > a value of -1 is returned and errno is set to indicate the error. > > ERRORS > [EINVAL] addr is not a valid address for user mode. > > [EFAULT] an error occurred trying to copy to the output > character array vec. > > vec is to make sure it failed because the address was invalid, not > because it couldn't write the flags out. > > Chip
It's a clever, though stop-the-world expensive way to determine which areas of the address space already have mappings present so MAP_FIXED can be used without accidentally clobbering another mapping. The strategy probably should be revisited for OpenSolaris since mmap now accepts an address hint. -Albert