This is the mail archive of the
mailing list for the Cygwin project.
Re: mmap() on 64K aligned address fails
On Nov 27 16:47, Ren? Berber wrote:
> Samuel Thibault wrote:
> > 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,
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");
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");
fprintf (stderr, "Haha\n");
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