On Jul 12 13:43, Brian Ford wrote:
> On Wed, 12 Jul 2006, Corinna Vinschen wrote:
> > On Jul 12 10:48, Brian Ford wrote:
> > > This is just a heads up for now as I plan to try and produce an STC
> > > with cygcheck output later today or tomorrow as time allows.  But, just in
> > > case it rings any bells...
> >
> > Does it work with 1.5.20?
> 
> No, nor 1.5.19.

The problem results from introducing MAP_NORESERVE in 1.5.19.  That's
the reason the same code works on 1.5.18.  Your code simply defines
MAP_NORESERVE to 0 under 1.5.18.

The message you see is from a call to VirtualProtect, which must not be
called on reserved pages (which is MEM_RESERVE'd, which is, funny
enough, the Windows define equivalent to Linux' MAP_NORESERVE).  I fixed
that in CVS.

> #include <sys/mman.h>
> #include <sys/types.h>
> #include <sys/stat.h>
> #include <fcntl.h>
> #include <stdio.h>
> #include <unistd.h>
> 
> 
> int
> main(void)
> {
>     int   fd, virt_size;
>     void *addr;
> 
>     fd = -1;
> 
>     addr      = NULL;
>     virt_size = 0x18000000;
>     addr = mmap(addr, virt_size, (PROT_READ|PROT_WRITE),
>               (MAP_NORESERVE|MAP_PRIVATE|MAP_ANON), fd, 0);
>     if (addr == MAP_FAILED)
>     {
>       perror("mapping VM scratch space");
>       close(fd);
>       return -1;
>     }
> 
>     *(volatile char *)addr;

      ^^^^^^^^^^^^^^^^^^^^^^^
This is a bug in your application.  You can't rely on being able to
access memory mmap'ed with MAP_NORESERVE.  This might succeed on Linux,
but it's not guaranteed.  It certainly doesn't work this way on Cygwin.
Call something like `mprotect (addr, virt_size, PROT_READ|PROT_WRITE)'
before accessing the mmap'ed memory.


Thanks for the testcase,
Corinna

-- 
Corinna Vinschen                  Please, send mails regarding Cygwin to
Cygwin Project Co-Leader          cygwin AT cygwin DOT com
Red Hat

--
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/

Reply via email to