From: corinna Date: Fri, 16 Jul 2004 14:32:03 +0000 (+0000) Subject: * mmap.cc (mmap_record::alloc_page_map): Mark pages as allocated even X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=0828260f76b1f4a7a153b9ef6ff13f80ad059fea;p=pf3gnuchains%2Fsourceware.git * mmap.cc (mmap_record::alloc_page_map): Mark pages as allocated even on Windows 9x, FWIW. --- diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index c217329395..4064114168 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,5 +1,10 @@ 2004-07-15 Corinna Vinschen + * mmap.cc (mmap_record::alloc_page_map): Mark pages as allocated even + on Windows 9x, FWIW. + +2004-07-15 Corinna Vinschen + * mmap.cc (mprotect): When MAP_WRITE protection is requested, use READWRITE or WRITECOPY protection, whatever has been used when the page has been allocated initially. diff --git a/winsup/cygwin/mmap.cc b/winsup/cygwin/mmap.cc index 16611480ca..ebca63d592 100644 --- a/winsup/cygwin/mmap.cc +++ b/winsup/cygwin/mmap.cc @@ -168,26 +168,29 @@ mmap_record::alloc_page_map (_off64_t off, DWORD len) sizeof (DWORD)))) return false; + off -= offset_; + len = PAGE_CNT (len); + if (wincap.virtual_protect_works_on_shared_pages ()) { DWORD old_prot; + DWORD vlen = len * getpagesize (); - off -= offset_; - len = PAGE_CNT (len) * getpagesize (); if (off > 0 && !VirtualProtect (base_address_, off, PAGE_NOACCESS, &old_prot)) syscall_printf ("VirtualProtect(%x,%D) failed: %E", base_address_, off); - if (off + len < size_to_map_ - && !VirtualProtect (base_address_ + off + len, - size_to_map_ - len - off, + if (off + vlen < size_to_map_ + && !VirtualProtect (base_address_ + off + vlen, + size_to_map_ - vlen - off, PAGE_NOACCESS, &old_prot)) syscall_printf ("VirtualProtect(%x,%D) failed: %E", - base_address_ + off + len, size_to_map_ - len - off); - off /= getpagesize (); - len /= getpagesize (); - while (len-- > 0) - MAP_SET (off + len); + base_address_ + off + vlen, size_to_map_ - vlen - off); } + + off /= getpagesize (); + + while (len-- > 0) + MAP_SET (off + len); return true; }