This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Make soft-float powerpc swapcontext restore the signal mask (bug 21045)
- From: Joseph Myers <joseph at codesourcery dot com>
- To: <libc-alpha at sourceware dot org>
- Date: Thu, 12 Jan 2017 22:39:55 +0000
- Subject: Make soft-float powerpc swapcontext restore the signal mask (bug 21045)
- Authentication-results: sourceware.org; auth=none
The soft-float powerpc version of swapcontext does not restore the
signal mask, resulting in stdlib/tst-setcontext2 failing:
after getcontext
after setcontext
after swapcontext
FAIL: SIGUSR2 is blocked after swapcontext.
This patch fixes this by adjusting the arguments passed to
__sigprocmask so that it restores the saved signal mask as well as
saving the existing one. (For hard-float, this code is only used for
a compat symbol, not for the current version of swapcontext.)
Tested for soft-float powerpc. Any comments?
2017-01-12 Joseph Myers <joseph@codesourcery.com>
[BZ #21045]
* sysdeps/unix/sysv/linux/powerpc/powerpc32/swapcontext-common.S
(__CONTEXT_FUNC_NAME): Pass address of signal mask to be restored
to __sigprocmask.
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/swapcontext-common.S b/sysdeps/unix/sysv/linux/powerpc/powerpc32/swapcontext-common.S
index a0bcbf1..6696d54 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/swapcontext-common.S
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/swapcontext-common.S
@@ -271,7 +271,8 @@ ENTRY(__CONTEXT_FUNC_NAME)
/* Restore ucontext (parm1) from stack. */
lwz r12,_FRAME_PARM_SAVE1(r1)
- li r4,0
+ lwz r4,_FRAME_PARM_SAVE2(r1)
+ addi r4,r4,_UC_SIGMASK
stw r3,_UC_REGS_PTR(r12)
addi r5,r12,_UC_SIGMASK
li r3,SIG_SETMASK
--
Joseph S. Myers
joseph@codesourcery.com