This is the mail archive of the cygwin@sourceware.cygnus.com 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]

problems with mmap/munmap - HELP


Hi,
I'm a new user of gnu-win32-gcc, btw congratulations to all people working on 
this project.

I'd like to port a compiler initially written for the unix world. A key 
feature of my system is that it uses the MMU to avoid to chech stacks 
overflows.
Indeed, i use 3 stacks and to avoid to check for overflows i use the 
mmap/munmap facility. More precisely I allocate a 'big' space with mmap 
(MAP_ANONYMOUS) whose size  equals to the sum of the size of each stack + 3 
pages (obtained by getpagesize()), then I munmap the page which follows each 
stack. Here is the memory map obtained:

       +-----------------+
       |  a free page    | <- page given back by munmap
       +-----------------+
       |    space for    |
       |      stack      |
       |       # 3       |
       |        :        |
       +-----------------+
       |  a free page    | <- page given back by munmap
       +-----------------+
       |    space for    |
       |      stack      |
       |       # 2       |
       |        :        |
       +-----------------+
       |  a free page    | <- page given back by munmap
       +-----------------+
       |    space for    |
       |      stack      |
       |       # 1       |
       |        :        |
       +-----------------+ <- address given by mmap

When a stack overflows, an attempt to read/write into the munmapped page 
occurs, the MMU triggers than a signal (SIGSEGV) that i catch to inform the
user about the overflow.

The problem under gnu-win32-gcc is that i cannot munmap at an address 
different from the one returned by mmap (so i can only give back the first 
page, ie. inside the space for the first stack).

How could I do ? Where are the docs about mmap ? I have also seen a function 
mprotect(), could I use it ?

Since this mechanism is very important in my implementation I'd really likle 
to find an efficient solution.

Please Help :-)




-- 
Daniel Diaz
INRIA Rocquencourt - 78153 Le Chesnay Cedex
FRANCE               tel: +33 1 39 63 52 67
                email: Daniel.Diaz@inria.fr
============================================


-
For help on using this list (especially unsubscribing), send a message to
"gnu-win32-request@cygnus.com" with one line of text: "help".


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