[PATCH] Cygwin: exceptions: Fix AArch64 non-incyg signal handling
Jon Turney
jon.turney@dronecode.org.uk
Wed Jun 17 11:07:44 GMT 2026
On 12/06/2026 09:02, Máte Dimand wrote:
> This patch fixes crashes that occur when a signal interrupts sigfe or
> any non-cygwin function that does not preserve the LR register in its
> prologue/epilogue. This crash was discovered through the "run-heredoc"
> testcase in bash's testsuite, which caused bash to call "read"
> frequently, leading to a high chance of a signal interrupting sigfe.
Interesting.
It seems like it should be possible to construct a relatively simple
test to demonstrate this. Could you suggest what that test might look like?
> The "sigdelayed" function in gendef clobbers the LR register to return
> to the instruction where the thread was interrupted. Picking any other
> register for branching back would also clobber said register. Leaf
> functions are not guaranteed to be compiled with LR being preserved on
> the stack. The solution is to use RtlRestoreContext to restore all
> registers without needing to sacrifice any.
>
> The patch includes a C++ version of sigdelayed, which calls
> RtlRestoreContext at the end. The non-incyg signal handling codepath
> will change the thread's IP register to this new function instead of
> the original sigdelayed function written in assembly. Cygwin functions
> interrupted by signals still use the original function.
Hmmm... it seems like this is functionally incremental to a patch which
hasn't been applied yet, but I can't work out which one.
> Signed-off-by: Máté Dimand <mate.dimand@arm.com>
Thanks.
> | git am
> warning: Patch sent with format=flowed; space at the end of lines might be lost.
> Applying: Cygwin: exceptions: Fix AArch64 non-incyg signal handling
> error: corrupt patch at line 11
> Patch failed at 0001 Cygwin: exceptions: Fix AArch64 non-incyg signal handling
I spent about an hour trying to salvage this, without success. Could I
possibly trouble you to resend it as an attachment?
More information about the Cygwin-patches
mailing list