1.7.0 CVS mmap failure

Brian Ford Brian.Ford@FlightSafety.com
Fri Jan 5 18:42:00 GMT 2007

On Fri, 5 Jan 2007, Corinna Vinschen wrote:

> In the failing case this should still work, since 0x7fff7000 + 0x9000
> (36864 dec) == 0x80000000, so the mapping should fit into the usual 2
> Gig address space.  Why Windows fails to do it, I have no idea.  The
> error code 487 means invalid address which might mean "already taken"
> address, but that's not visible in the strace.  To figure that out would
> require to add a bit of VirtualQuery code to mmap and add appropriate
> debug output.

I'm not quite sure exactly what this means, but I stumbled onto it in gdb:

(gdb) info w32 selector
Selector $fs
0x03b: base=0x7fffe000 limit=0x00000fff 32-bit Data (Read/Write, Exp-up)
Priviledge level = 3. Byte granular.

So, it does indeed look taken.

> Actually this shows a problem in the mmap implementation with respect to
> MEM_TOP_DOWN.  I think, what mmap should actually do is to create a
> lightweight MAP_RESERVE anonymous mapping of the whole requested mapping
> size, then close it again and then reopen it with the address it got
> in this first try.  This would probably ensure that the subsequent two
> mapping will work.

I don't know what mmap magic Cygwin uses internally to do this, but can't
you just map the big region, then overmap the disk file without the map,
unmap, remap, remap?

Brian Ford
Lead Realtime Software Engineer
VITAL - Visual Simulation Systems
FlightSafety International
the best safety device in any aircraft is a well-trained crew...

Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Problem reports:       http://cygwin.com/problems.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/

More information about the Cygwin mailing list