delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/2005/11/28/06:51:21

X-Spam-Check-By: sourceware.org
Date: Mon, 28 Nov 2005 12:51:09 +0100
From: Corinna Vinschen <corinna-cygwin AT cygwin DOT com>
To: cygwin AT cygwin DOT com
Subject: Re: mmap() on 64K aligned address fails
Message-ID: <20051128115109.GF2999@calimero.vinschen.de>
Reply-To: cygwin AT cygwin DOT com
Mail-Followup-To: cygwin AT cygwin DOT com
References: <dm8oki$48t$1 AT sea DOT gmane DOT org> <20051126180331 DOT GI5074 AT bouh DOT residence DOT ens-lyon DOT fr> <dmajga$8lq$1 AT sea DOT gmane DOT org> <20051126214701 DOT GW5074 AT bouh DOT residence DOT ens-lyon DOT fr> <dmaov2$nk0$1 AT sea DOT gmane DOT org> <dmavc9$5bt$1 AT sea DOT gmane DOT org> <20051127130652 DOT GT2999 AT calimero DOT vinschen DOT de> <dmdba8$dd4$1 AT sea DOT gmane DOT org> <20051127222246 DOT GJ5150 AT bouh DOT residence DOT ens-lyon DOT fr> <dmdd26$hrf$1 AT sea DOT gmane DOT org>
Mime-Version: 1.0
In-Reply-To: <dmdd26$hrf$1@sea.gmane.org>
User-Agent: Mutt/1.4.2i
Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm
List-Unsubscribe: <mailto:cygwin-unsubscribe-archive-cygwin=delorie DOT com AT cygwin DOT com>
List-Subscribe: <mailto:cygwin-subscribe AT cygwin DOT com>
List-Archive: <http://sourceware.org/ml/cygwin/>
List-Post: <mailto:cygwin AT cygwin DOT com>
List-Help: <mailto:cygwin-help AT cygwin DOT com>, <http://sourceware.org/ml/#faqs>
Sender: cygwin-owner AT cygwin DOT com
Mail-Followup-To: cygwin AT cygwin DOT com
Delivered-To: mailing list cygwin AT cygwin DOT com

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;
  }


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 -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019