This is the mail archive of the cygwin mailing list for the Cygwin project.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: mmap() on 64K aligned address fails

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>

  main ()
    int pages = 10;
    void *addr, *addr2;

    addr = mmap (NULL, 2 * pages * getpagesize(), PROT_READ|PROT_WRITE,
    if (addr == MAP_FAILED)
      fprintf (stderr, "Gargl\n");
	munmap (addr, pages * getpagesize());
	addr2 = mmap (addr, pages * getpagesize(), PROT_READ|PROT_WRITE,
	if (addr2 == MAP_FAILED)
	  fprintf (stderr, "Frtzl\n");
	else if (addr2 != addr)
	  fprintf (stderr, "Urgl\n");
	  fprintf (stderr, "Haha\n");
    return 0;


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

Unsubscribe info:
Problem reports:

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]