X-Recipient: archive-cygwin AT delorie DOT com X-SWARE-Spam-Status: No, hits=-0.4 required=5.0 tests=AWL,BAYES_00,SPF_NEUTRAL,TW_YG,T_RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Message-ID: <4D89D4AA.6070903@cornell.edu> Date: Wed, 23 Mar 2011 07:08:26 -0400 From: Ken Brown User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.15) Gecko/20110303 Thunderbird/3.1.9 MIME-Version: 1.0 To: cygwin AT cygwin DOT com Subject: Re: Broken autoconf mmap test References: <4D8668C6 DOT 8020500 AT cornell DOT edu> <4D890D95 DOT 6090302 AT redhat DOT com> <4D891A55 DOT 6050601 AT cornell DOT edu> <20110323091921 DOT GB10657 AT calimero DOT vinschen DOT de> In-Reply-To: <20110323091921.GB10657@calimero.vinschen.de> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-IsSubscribed: yes Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , 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 3/23/2011 5:19 AM, Corinna Vinschen wrote: > On Mar 22 17:53, Ken Brown wrote: >> On 3/22/2011 4:59 PM, Eric Blake wrote: >>> On 03/20/2011 02:51 PM, Ken Brown wrote: >>>> What's the status of the broken autoconf mmap test, which always fails >>>> on Cygwin even though Cygwin has a working mmap? >>> >>> Autoconf 2.65 and newer do not have the bug. But packages still exist >>> where configure was generated with< 2.65, so these packages still have >>> the bug unless you either rerun newer autoconf, or pre-seed the cache. >>> >>>> Was this ever resolved? I see that cygport is still using the workaround >>>> >>>> export ac_cv_func_mmap_fixed_mapped=yes >>> >>> This workaround is still necessary, as long as there are still packages >>> that don't run autoreconf and where configure was generated with a >>> too-old autoconf. >> >> I'm still seeing failures when building both emacs and texlive, even >> after autoreconf with the current (2.68) version installed. >> Attached is the relevant portion of config.log from an emacs build. >> This is a build of the current emacs trunk, after running >> 'autoreconf -I m4'. The same thing happens if I build emacs-23.3. >> If you want to try to reproduce it, here's the source: >> >> wget http://ftp.gnu.org/pub/gnu/emacs/emacs-23.3.tar.gz >> >> In case it's relevant, my system is 64-bit Windows 7, with the most >> recent cygwin snapshot: > > It is relevant, but it has nothing to do with Windows 7. Actually, the > autoconf mmap test is testing a scenario which does not work on 64 bit > Windows systems. Here's what happens in a nutshell. > > The actual pagesize on Windows is 4K. But there's something called > "allocation granularity" which is 64K. If you request virtual memory on > Windows, the memory address is always aligned to the allocation > granularity boundary. Even if you request 4K chunks, they are 64K > aligned. > > If you mmap anonymous memory, this is no big problem. Cygwin always > requests memory in 64K chunks since Cygwin's pagesize is set to 64K. > > However, if you mmap a file, there's a problem. The mapping always > starts on a 64K boundary, but it end on the next 4K boundary beyond EOF. > So, for a file of size 1 byte, the memory section will be 4K. The other > 60K following in the virtual address space are lost. And they are not > allocated. And i you try to access them you get a SEGV. > > Fortunately, Cygwin uses the native NT calls in mmap. The native calls > support a flag called AT_ROUND_TO_PAGE, which allows to allocate memory > on a 4K boundary. So what Cygwin does is to mmap the file, and then to > request virtual memory rounded to the next 4K page to fill the rest of > the 64K allocation area. Now we have the full 64K allocated. > > Unfortunately this doesn't work on 64 bit Windows. The reason is that > the WOW64 layer does not support the AT_ROUND_TO_PAGE flag. If you try > to use it, the OS call returns STTAUS_INVALID_PARAMETER. So you can't > allocate the remainder of the 64K allocation slot at all. > > Back to the autoconf mmap test. What it does is to mmap a file of size > 1 byte. Then it tests each byte in the mapped page. And since the > pagesize in Cygwin is 64K it tests all of 64K. > > Given the above description, you can now imagine this works fine on 32 > bit Windows, but it crashes on 64 bit Windows. Thanks for the explanation, Corinna. I've reported this to the autoconf list. Ken -- Problem reports: http://cygwin.com/problems.html FAQ: http://cygwin.com/faq/ Documentation: http://cygwin.com/docs.html Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple