This is the mail archive of the cygwin-developers mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: New 64 bit Cygwin DLL


On Tue, Mar 19, 2013 at 10:46:22AM +0100, Corinna Vinschen wrote:
>Hi guys,
>
>
>at long last, it looks like we found the real bug which was the reason
>for the random crashes.
>
>There's a function sigdelayed, written in assembler, which is called
>when a thread got a signal.  Due to the way the function is called,
>it turned out that it was missing two crucial features:
>
>- It can be called with any stack alignment, but on x86_64 it's important
>  that the stack is always 16 byte aligned when calling functions.  So
>  sigdelayed had to make sure to align the stack before trundling along.

>- sigdelayed only saved and restored the CPU registers which are
>  callee-saved in the Microsoft ABI, plus the registers used for the
>  return value of a function.  Given how sigdelayed is called, this
>  was insufficient.  The original, interrupted function needs the CPU
>  in its original state when sigdelayed returns to it, so sigdelayed
>  has to save and restore *all* registers.

That's not really true for the 32-bit version.  eax and ebx aren't
normally saved around function calls but they are for sigdelayed.  It
doesn't currently save floating point and debugging registers though.

I thought I mentioned when you asked what could be causing these
random problems that it was likely to be related to signals.  I
guess I just thought it though since I can't find the email which
I thought I sent suggesting it.  Sorry.

cgf


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]