www.delorie.com/archives/browse.cgi | search |
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:message-id:date:from:mime-version:to:subject | |
:references:in-reply-to:content-type:content-transfer-encoding; | |
q=dns; s=default; b=jSZtPACRA3HOBzfa7doKYeCB+VrGjtVi1kDX2161X2W | |
720EkLbZ6+xeSMcerXpojRumcgPCHZzYABe5OXgHQI53RgHKmhqgIo9YDlRbVC5d | |
Y3WjZbKoqHnG4jUn7HzBW/16L9n86VUndWXnnEPvKabGMSfyuOPQtw0c3ZEvEgKw | |
= | |
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:message-id:date:from:mime-version:to:subject | |
:references:in-reply-to:content-type:content-transfer-encoding; | |
s=default; bh=qzuAx6msyxwz7EVNqVKISQhcqoI=; b=mu5oM46AJzXqT9rOK | |
MX/gzIM8Ed9U73PvlZ/q4niTuJSatyoHE6++0L2cqCakRyU1S9y64uH62Q5KrlE7 | |
8m3O6w+ceOMj033ZzWDFoQpyUU7rOu+z0NuiK/XqURFL+PazrIJVoln5cwcWbKIq | |
FWxEBJ3nIxmJCU+EM1uPRCz2sA= | |
Mailing-List: | contact cygwin-help AT cygwin DOT com; run by ezmlm |
List-Id: | <cygwin.cygwin.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 |
X-Spam-SWARE-Status: | No, score=-4.3 required=5.0 tests=AWL,BAYES_00,KHOP_RCVD_UNTRUST,KHOP_THREADED,RCVD_IN_DNSWL_LOW,RCVD_IN_HOSTKARMA_NO,RP_MATCHES_RCVD,SPF_NEUTRAL autolearn=ham version=3.3.2 |
Message-ID: | <5211FBB6.6070108@cs.utoronto.ca> |
Date: | Mon, 19 Aug 2013 07:04:22 -0400 |
From: | Ryan Johnson <ryan DOT johnson AT cs DOT utoronto DOT ca> |
User-Agent: | Mozilla/5.0 (Windows NT 6.1; WOW64; rv:17.0) Gecko/20130801 Thunderbird/17.0.8 |
MIME-Version: | 1.0 |
To: | cygwin AT cygwin DOT com |
Subject: | Re: Stack size on 64-bit Cygwin |
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> |
In-Reply-To: | <5211F83A.30901@cs.utoronto.ca> |
On 19/08/2013 6:49 AM, Ryan Johnson wrote: > On 19/08/2013 5:32 AM, Corinna Vinschen wrote: >> On Aug 16 16:49, Ken Brown wrote: >>> The problem that has been discussed at length in the thread "64-bit >>> emacs crashes a lot" appears to have been solved on the emacs-devel >>> list. (I say "appears to" because I'm waiting for Ryan to confirm >>> this.) The problem went away for me when I built emacs with >>> 'LDFLAGS=-Wl,--stack,4194304'. I'm wondering if it's just that >>> emacs needs an unusually big stack or if the default stack size on >>> 64-bit Cygwin should be increased for all applications. >>> >>> I noticed that ulimit -s gives 2025 on both 32-bit Cygwin and 64-bit >>> Cygwin. Shouldn't 64-bit applications need a larger stack than >>> 32-bit applications in general? >> From my POV, if you have a stack-active application, just add the >> aforementioned --stack linker option, or call peflags -x after the >> build. The latter can be done any time > FYI, I just tried upping the stack size on /usr/bin/emacs-nox, but it > still crashes. Most likely because the damage was already done during > bootstrap, when it has much larger memory requirements than normal. > > Still no crashes so far in the version I linked with --stack, though. > > 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? > > 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 ===p 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? Some googling turns up http://comments.gmane.org/gmane.comp.java.openjdk.hotspot.runtime.devel/7706 > Windows only uses reserved but only partially committed memory for its stacks. 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 zone. When Windows detects such an > exception inside the _last 4 pages_ of a stack (I couldn't find any documentation for that on MSDN, I found > this value from manually testing on several Windows machines with 4k stack 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? Very strange... > > Ryan -- 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
webmaster | delorie software privacy |
Copyright © 2019 by DJ Delorie | Updated Jul 2019 |