summaryrefslogtreecommitdiffstats
path: root/winsup/cygwin/exceptions.cc
diff options
context:
space:
mode:
authorChristopher Faylor <me@cgf.cx>2003-08-20 05:15:33 +0000
committerChristopher Faylor <me@cgf.cx>2003-08-20 05:15:33 +0000
commit6f6d673cc5aa647a25afb9a5048f5045d7f8a1d8 (patch)
tree45db4e3830111666450a3506e5478b9b1c36eac6 /winsup/cygwin/exceptions.cc
parent5f31e0f30557788f0f451fd69fbc70a89c271c18 (diff)
downloadcygnal-6f6d673cc5aa647a25afb9a5048f5045d7f8a1d8.tar.gz
cygnal-6f6d673cc5aa647a25afb9a5048f5045d7f8a1d8.tar.bz2
cygnal-6f6d673cc5aa647a25afb9a5048f5045d7f8a1d8.zip
* sigproc.cc (wait_sig): Ensure that myself->getsigtodo array is flushed on a
__SIGFLUSH. Christopher Faylor <cgf@redhat.com> * exceptions.cc (_sigreturn): Handle nested signals without growing the stack.
Diffstat (limited to 'winsup/cygwin/exceptions.cc')
-rw-r--r--winsup/cygwin/exceptions.cc9
1 files changed, 5 insertions, 4 deletions
diff --git a/winsup/cygwin/exceptions.cc b/winsup/cygwin/exceptions.cc
index 537f55e99..034e5605d 100644
--- a/winsup/cygwin/exceptions.cc
+++ b/winsup/cygwin/exceptions.cc
@@ -1220,13 +1220,14 @@ __asm__ volatile ("\n\
.text \n\
_sigreturn: \n\
addl $4,%%esp # Remove argument \n\
- movl %%esp,%%ebp \n\
- addl $36,%%ebp \n\
call _set_process_mask@4 \n\
\n\
cmpl $0,%4 # Did a signal come in? \n\
jz 1f # No, if zero \n\
- call _call_signal_handler_now@0 # yes handle the signal \n\
+ movl %2,%%eax \n\
+ movl %%esp,%%ebp \n\
+ movl %%eax,36(%%ebp) # Restore return address \n\
+ jmp 3f \n\
\n\
1: popl %%eax # saved errno \n\
testl %%eax,%%eax # Is it < 0 \n\
@@ -1257,7 +1258,7 @@ _sigdelayed0: \n\
pushl %%ebx \n\
pushl %%eax \n\
pushl %6 # saved errno \n\
- pushl %3 # oldmask \n\
+3: pushl %3 # oldmask \n\
pushl %4 # signal argument \n\
pushl $_sigreturn \n\
\n\