X-Recipient: archive-cygwin AT delorie DOT com DomainKey-Signature: a=rsa-sha1; c=nofws; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:date:from:to:subject:message-id:reply-to :references:mime-version:content-type:in-reply-to; q=dns; s= default; b=tb0hSKT5m/5OTR8egbCM4uWe7Xgl8FbxR1w3A2RVuUOY/kSHp5xBS s3JMid+d1WTw1YLXCJofuj1qX9Z7PugS4tQvL1SyeyzHGZorv8/t7/5RaEL54Zps Qu/DpB9R5pzQ1Dpw1bzOVDwtPo86Mc0naAvG7UirrHu7wO28urms3Q= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:date:from:to:subject:message-id:reply-to :references:mime-version:content-type:in-reply-to; s=default; bh=Zjqb8ZC+VmKI7TQyUX6OcS7YKi8=; b=G6oFYoJZLyEiOT+eXA5cy30kyu/z fIgOUmOpN77mzNf1YA2tvGu9NNY0Qlomqm+iGFnVmT3GPS8GmvjqsVl4GteBOOwf KoD8dUELG6DhGUD/83hF++Iqh9N4sQlW2wzdaLQRfgep46l3/l21wF0zVNXanYru NDR/Jh1Np6kwGKY= 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 X-Spam-SWARE-Status: No, score=-4.4 required=5.0 tests=AWL,BAYES_00,KHOP_PGP_SIGNED autolearn=ham version=3.3.2 Date: Mon, 19 Aug 2013 13:39:19 +0200 From: Corinna Vinschen To: cygwin AT cygwin DOT com Subject: Re: Stack size on 64-bit Cygwin Message-ID: <20130819113919.GA29385@calimero.vinschen.de> Reply-To: cygwin AT cygwin DOT com Mail-Followup-To: cygwin AT cygwin DOT com References: <520E905A DOT 409 AT cornell DOT edu> <20130819093242 DOT GB18757 AT calimero DOT vinschen DOT de> <5211F83A DOT 30901 AT cs DOT utoronto DOT ca> <5211FBB6 DOT 6070108 AT cs DOT utoronto DOT ca> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="h31gzZEtNLTqOjlF" Content-Disposition: inline In-Reply-To: <5211FBB6.6070108@cs.utoronto.ca> User-Agent: Mutt/1.5.21 (2010-09-15) X-Virus-Found: No --h31gzZEtNLTqOjlF Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Aug 19 07:04, Ryan Johnson wrote: > On 19/08/2013 6:49 AM, Ryan Johnson wrote: > >One thing I don't understand, though: shouldn't a stack overflow > >normally manifest as a seg fault when trying to access the invalid > >addresses, rather than silent memory corruption? That would be helpful. > >However, /proc/pid/maps for emacs shows: > >>00010000-00020000 rw-s 00000000 0000:0000 0 > >>[win heap 1 default shared] > >>00020000-00030000 rw-s 00000000 0000:0000 0 [win heap 2 default shared] > >>00030000-001E4000 =3D=3D=3Dp 00000000 0000:0000 0 [stack (tid 4896)] > >>001E4000-001E6000 rw-g 001B4000 0000:0000 0 [stack (tid 4896)] > >>001E6000-00230000 rw-p 001B6000 0000:0000 0 [stack (tid 4896)] > >GDB reports that thread 4896 is the main thread... so I guess > >Windows doesn't reserve a red zone around its stack, but instead > >chooses to place the main thread stack right next to the > >fully-mapped global shared heap to maximize the potential for Fun? Right. I have no idea what the two shared mem regions preceeding the stack are good for, though. > Some googling turns up > http://comments.gmane.org/gmane.comp.java.openjdk.hotspot.runtime.devel/7= 706 > >Windows only uses reserved but only partially committed memory for its s= tacks. In order to detect when to > >commit more stack, it installs a one-shot guard page (btw the same type= of guard page that is used for the > >hotspot yellow and red zone) right at the edge of the currently commited= stack zone. When a thread accesses > >this guard page an exception is thrown which Windows catches internally,= commits more stack and > >re-establishes the one-shot guard page at the new edge of the commited z= one. When Windows detects such an > >exception inside the _last 4 pages_ of a stack (I couldn't find any docu= mentation for that on MSDN, I found > >this value from manually testing on several Windows machines with 4k sta= ck pages) it throws a STACK_OVERFLOW_EXCEPTION. > So maybe emacs just had the incredibly bad luck to alloca() a large > buffer right at end-of-stack and then somehow managed to skip over > the 4 guard pages when accessing it? That's unlikely since alloca is designed to probe the stack in 4K steps. And STATUS_STACK_OVERFLOW is translated to a SEGV by Cygwin's exception handler. Corinna --=20 Corinna Vinschen Please, send mails regarding Cygwin to Cygwin Maintainer cygwin AT cygwin DOT com Red Hat --h31gzZEtNLTqOjlF Content-Type: application/pgp-signature -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.14 (GNU/Linux) iQIcBAEBAgAGBQJSEgPnAAoJEPU2Bp2uRE+gPX4P/2OSMro+WcgwszFtLV+eDcgR 0fOvnqQ+L4hifRi/neFkHDRMWb/Z3wbFJksKuICc7+BLlasmi/I0g12DgyPrEn9T C3OmbmeXPPl0IPyp7SxUR3sMNkWXTYaz9lJjYpW+tCagu1czteptI3vxHpjZcyXO T9ESQTTHSUzeA/quDVwB2KlTuzkOTTVHZgir5dnuihdSw3bNUYlI2fx/uCtO2HLT 8OSbWj2dHIFEWccCmlYw9bB4aJRj+wMPyuW0xiXiI8LFebHEz6Yhk07eUeDXeMJ6 QBEcz3smdcWotnxBjDmDwVNqXjJTBk9UgPmn+auKWaCtSpmD93FOUylwICKtqBdv FSWK2zLox92zb9TWk+16ZhU1dOvBVeF2JCkEqF+8YLDYmsSfGnd85C6unZDWe+8l I/Yb+4c4WpgNCQ/Ben56ePJ1tCtt5r9dpwZnMr0tAskKTsfeHci8IxxW6t9lAssi gwbiORvHwK4lWWIDrnqKlMVh2DQ1Fvkse1YP3rbTBhXiIamHRpMZpeoxEfZgxRMf FW9nR+WgP4gWWts0ZdorzF8tIwuptodNU9ZeVJwlXHkqR2CToH7XBnoELGYsdqqC luF26FzecqG7pWdMlJOyeUf0EtGiCZSrYqYvIIuJG37Cs4DSAIXOPhblDGyVK+9P yhm0DxxZ4P7bmDL0mP/F =vKmE -----END PGP SIGNATURE----- --h31gzZEtNLTqOjlF--