[ANNOUNCEMENT] Updated for 32-bit, new for 64-bit: libsigsegv-2.10-2

Ken Brown kbrown@cornell.edu
Mon Jul 20 13:03:00 GMT 2015


On 7/20/2015 7:20 AM, Corinna Vinschen wrote:
> On Jul 19 10:37, Corinna Vinschen wrote:
>> On Jul 18 14:41, Eric Blake wrote:
>>> On 07/18/2015 02:11 PM, Corinna Vinschen wrote:
>>>> OTOH, calling certain Cygwin functions might require lots of stack.
>>>> E.g. open/read/write/close requires more than 2K stack, so MINSIGSTKSZ
>>>> shouldn't be too small.
>>>>
>>>> So, what about MINSIGSTKSZ == 8192 and SIGSTKSZ == 32768?
>>>>
>>>> Or MINSIGSTKSZ == 16384 and SIGSTKSZ == 65536?
>>>>
>>>> That could go into Cygwin 2.2.0 which I could release next week.
>>>
>>> Might help, but feels a little unclean.  As I said, old clients of
>>> libsigsegv were using the fallback definition of 16k; setting
>>> MINSIGSTKSZ to 16k would let the sigaltstack() succeed where it is now
>>> failing, but if cygwin ever consumes all 16k rather than the current 400
>>> or so bytes, that leaves nothing for the application (normally, an
>>> application only expects to use SIGSTKSZ - MINSIGSTKSZ for its own use,
>>> if it uses the system-recommended sizing).
>>
>> Cygwin shouldn't really consume 16K stack by itself when called from the
>> application.  Large buffers should use the tmp_pathbuf facility throughout.
>>
>> But there are still functions using big stack buffers.  I mention them
>> here for bookkeeping as much as for information and discussion:
>>
>> - Debugging code in dcrt0.cc, initial_env() uses 96K stack on process
>>    startup.  Usually disabled.  Non-critical.
>>
>> - dll_list::alloc, called during DLL initialization uses 64K stack.
>>    Calling dlopen from the alternate stack would be fatal.  The buffer
>>    is used in code called under Windows loader lock conditions, so this
>>    could be converted to a static buffer.
>>
>> - A function called error_start_init uses 32K of stack and is called
>>    if the env var CYGWIN is set to "error_init:...".  That's very unlikely
>>    from a SEGV handler.  Not nice, but probably non-critical.
>>
>> - pinfo::status_exit is called when a process exits due to a signal
>>    from Windows.  This usually shouldn't happen inside the signal
>>    handler, but it might.  pinfo::status_exit uses a 32K buffer.
>>
>> - Stracing a process ends up using >48K of stack.
>>
>> That means even the current 32K are not quite sufficient, though, only
>> in unlikely border cases, apparently.
>>
>> Anyway, I plan to change this in the next few days.  Given this, I'll
>> set MINSIGSTKSZ to 8K and SIGSTKSZ to 32K in 2.2.
>
> I uploaded snapshots as well as a 2.2.0-0.1 test release.  Please
> give it a try.

Everything is fine as far as emacs is concerned.  I'll rebuild clisp and 
test it later today.

Ken



More information about the Cygwin-apps mailing list