aboutsummaryrefslogtreecommitdiff
path: root/winsup/cygwin/exceptions.cc
diff options
context:
space:
mode:
authorCorinna Vinschen <corinna@vinschen.de>2015-06-27 12:08:07 +0200
committerCorinna Vinschen <corinna@vinschen.de>2015-06-27 12:08:07 +0200
commitc2c1b843092768bd922f587bba9107c97f2a7ade (patch)
tree2c73294a2c042a9a8d071eae457245857c4083f8 /winsup/cygwin/exceptions.cc
parentba170254e6c2a81e847779f719ff61912437444e (diff)
downloadnewlib-c2c1b843092768bd922f587bba9107c97f2a7ade.zip
newlib-c2c1b843092768bd922f587bba9107c97f2a7ade.tar.gz
newlib-c2c1b843092768bd922f587bba9107c97f2a7ade.tar.bz2
Handle ss_flags value longjmp safe.
* exceptions.cc (_cygtls::call_signal_handler): Drop manipulating thread's ss_flags here. It's not safe against longjmp. * signal.cc (sigaltstack): Check if we're running on the alternate stack and set ss_flags returned in oss to SS_ONSTACK. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
Diffstat (limited to 'winsup/cygwin/exceptions.cc')
-rw-r--r--winsup/cygwin/exceptions.cc4
1 files changed, 0 insertions, 4 deletions
diff --git a/winsup/cygwin/exceptions.cc b/winsup/cygwin/exceptions.cc
index d493abb..90a8ff2 100644
--- a/winsup/cygwin/exceptions.cc
+++ b/winsup/cygwin/exceptions.cc
@@ -1599,8 +1599,6 @@ _cygtls::call_signal_handler ()
uintptr_t new_sp = (uintptr_t) _my_tls.altstack.ss_sp
+ _my_tls.altstack.ss_size;
new_sp &= ~0xf;
- /* Mark alternate stack as used. */
- _my_tls.altstack.ss_flags = SS_ONSTACK;
/* In assembler: Save regs on new stack, move to alternate stack,
call thisfunc, revert stack regs. */
#ifdef __x86_64__
@@ -1671,8 +1669,6 @@ _cygtls::call_signal_handler ()
[FUNC] "o" (thisfunc)
: "memory");
#endif
- /* Revert alternate stack to unused. */
- _my_tls.altstack.ss_flags = 0;
}
else
/* No alternate signal stack requested or available, just call