Subject: Re: Wine & NetBSD?
To: der Mouse <mouse@Rodents.Montreal.QC.CA>
From: Jason R Thorpe <thorpej@wasabisystems.com>
List: tech-kern
Date: 11/20/2001 07:04:27
On Tue, Nov 20, 2001 at 11:54:13PM +0900, Bang Jun-Young wrote:
> On Tue, Nov 20, 2001 at 03:32:02AM -0500, der Mouse wrote:
> > > mmap((void *)0x50000000, 4096, PROT_READ, 0, fd, 0);
> > > mmap((void *)0x50000000, 4096, PROT_READ, MAP_FIXED, fd, 0);
> > > mmap((void *)0x50000000, 4096, PROT_READ, 0, fd, 0);
> > > mmap((void *)0x50000000, 4096, PROT_READ, MAP_FIXED, fd, 0);
> >
> > > Here I expected the second and the fourth mmap()'s would fail, since
> > > there was a mapping already done at 0x50000000 by the first mmap.
> > > Even if the second succeeded, I expected at least the fourth would
> > > fail. The result was that they _all_ succeded.
> >
> > mmap(2) - at least on my machines - says, in part,
> >
> > A successful
> > .Fa mmap
> > deletes any previous mapping in the allocated address range.
> >
> > This seems to me to be a fairly clear statement that if you mmap
> > something on top of something else, the previous mapping is, to the
> > extent that it conflicts with the new one, unmapped and replaced.
>
> At first I expected that, but the result shows that mmap(2) doesn't
> act like that: the third mmap call returned 0x50001000, not 0x50000000.
> If the manpage was right, mmap should zap the previous mapping at
> 0x50000000.
No, because you did not use MAP_FIXED. The first argument to mmap is
only used as a hint if MAP_FIXED is not supplied...
--
-- Jason R. Thorpe <thorpej@wasabisystems.com>