aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTakashi Yano <takashi.yano@nifty.ne.jp>2025-03-24 09:26:34 +0900
committerTakashi Yano <takashi.yano@nifty.ne.jp>2025-03-24 21:28:13 +0900
commitbb2a8a8cb3ae8753dd275caffdef567f3c2da1b6 (patch)
treee304ddc64effc6369269b4fec7d0811af5a5c964
parent764dbcafb3ec2aad04cfd02e4b3493bf7383a384 (diff)
downloadnewlib-bb2a8a8cb3ae8753dd275caffdef567f3c2da1b6.zip
newlib-bb2a8a8cb3ae8753dd275caffdef567f3c2da1b6.tar.gz
newlib-bb2a8a8cb3ae8753dd275caffdef567f3c2da1b6.tar.bz2
Cygwin: signal: Clear direction flag in sigdeleyed
x86_64 ABI requires the direction flag in CPU flags register cleared. https://learn.microsoft.com/en-us/cpp/build/x64-software-conventions However, currently that flag is not maintained in signal handler. Therefore, if the signal handler is called when that flag is set, it destroys the data and may crash if rep instruction is used in the signal handler. With this patch, the direction flag is cleared in sigdelayed() by adding cld instruction. Addresses: https://cygwin.com/pipermail/cygwin/2025-March/257704.html Fixes: 1fd5e000ace5 ("import winsup-2000-02-17 snapshot") Reported-by: Christian Franke <Christian.Franke@t-online.de> Reviewed-by: Corinna Vischen <corinna@vinschen.de> Signed-off-by: Takashi Yano <takashi.yano@nifty.ne.jp>
-rw-r--r--winsup/cygwin/release/3.6.13
-rwxr-xr-xwinsup/cygwin/scripts/gendef1
2 files changed, 4 insertions, 0 deletions
diff --git a/winsup/cygwin/release/3.6.1 b/winsup/cygwin/release/3.6.1
index 0b54b5f..0b05f45 100644
--- a/winsup/cygwin/release/3.6.1
+++ b/winsup/cygwin/release/3.6.1
@@ -3,3 +3,6 @@ Fixes:
- Console mode is really restored to the previous mode.
Addresses: https://github.com/msys2/msys2-runtime/issues/268
+
+- Clear direction flag in sigdeleyed before calling signal handler.
+ Addresses: https://cygwin.com/pipermail/cygwin/2025-March/257704.html
diff --git a/winsup/cygwin/scripts/gendef b/winsup/cygwin/scripts/gendef
index a2f0392..861a240 100755
--- a/winsup/cygwin/scripts/gendef
+++ b/winsup/cygwin/scripts/gendef
@@ -179,6 +179,7 @@ sigdelayed:
movq %rsp,%rbp
pushf
.seh_pushreg %rax # fake, there's no .seh_pushreg for the flags
+ cld # x86_64 ABI requires direction flag cleared
# stack is aligned or unaligned on entry!
# make sure it is aligned from here on
# We could be called from an interrupted thread which doesn't know