Mail Archives: cygwin/2005/11/28/06:55:15
On Nov 28 12:51, Corinna Vinschen wrote:
> On Nov 27 16:47, Ren? Berber wrote:
> > Samuel Thibault wrote:
> > [snip]
> > > Memmapping to malloced memory could very well be forbidden. Why would
> > > one want to do this?
> >
> > As I said before, the test is one that comes with gcc-4.0.2, it fails only on
> > Windows as far as I know. To answer your question: is just a test, it should
> > work with some Windows related tweaking but it's just a test.
> >
> > Besides, what other memory is there available that a process has under its
> > control? Yes, I know, mmap() should be used w/o MAP_FIXED and let the OS choose
> > where to map, but the interesting part of this test is to use MAP_FIXED.
>
> The problem is that the application using MAP_FIXED has no idea if the
> address it's using is *allowed*. There might be already a mapping
> active, maybe just the application's code is mapped at that point, or
> the address is generally invalid for shared memory usage.
>
> Many mmap tests make such invalid assumptions about the memory. Just
> because they are part of gcc doesn't make them right. The only blessed
> usage of MAP_FIXED is if the application knows that the memory address
> is valid. One way to do this is to establish a non-FIXED mmap first,
> like this:
>
> #include <stdio.h>
> #include <stdlib.h>
> #include <errno.h>
> #include <sys/mman.h>
>
> int
> main ()
> {
> int pages = 10;
> void *addr, *addr2;
>
> addr = mmap (NULL, 2 * pages * getpagesize(), PROT_READ|PROT_WRITE,
> MAP_SHARED|MAP_ANONYMOUS, -1, 0);
> if (addr == MAP_FAILED)
> fprintf (stderr, "Gargl\n");
> else
> {
> munmap (addr, pages * getpagesize());
> addr2 = mmap (addr, pages * getpagesize(), PROT_READ|PROT_WRITE,
> MAP_SHARED|MAP_FIXED|MAP_ANONYMOUS, -1, 0);
> if (addr2 == MAP_FAILED)
> fprintf (stderr, "Frtzl\n");
> else if (addr2 != addr)
> fprintf (stderr, "Urgl\n");
> else
> fprintf (stderr, "Haha\n");
> }
> return 0;
> }
Btw., the above test won't work on Cygwin 1.5.18 due to a incorrect
test in Cygwin's mmap implementation. This will be fixed in 1.5.19.
For a start, mmap/munmap the whole page area instead just the half of
it. That should work.
Corinna
--
Corinna Vinschen Please, send mails regarding Cygwin to
Cygwin Project Co-Leader cygwin AT cygwin DOT com
Red Hat, Inc.
--
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/
- Raw text -