diff options
author | Joseph Myers <joseph@codesourcery.com> | 2017-01-16 21:34:48 +0000 |
---|---|---|
committer | Joseph Myers <joseph@codesourcery.com> | 2017-01-16 21:34:48 +0000 |
commit | b040e1b0842c35ab444e8502db6ae59389d1e3d5 (patch) | |
tree | 0a16223224cd1a2defdfb03773bec88883ab87af | |
parent | 502697713f4f129b602d7213253a9982ee1989f1 (diff) | |
download | glibc-b040e1b0842c35ab444e8502db6ae59389d1e3d5.zip glibc-b040e1b0842c35ab444e8502db6ae59389d1e3d5.tar.gz glibc-b040e1b0842c35ab444e8502db6ae59389d1e3d5.tar.bz2 |
Make soft-float powerpc swapcontext restore the signal mask (bug 21045).
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.
[BZ #21045]
* sysdeps/unix/sysv/linux/powerpc/powerpc32/swapcontext-common.S
(__CONTEXT_FUNC_NAME): Pass address of signal mask to be restored
to __sigprocmask.
-rw-r--r-- | ChangeLog | 7 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/powerpc/powerpc32/swapcontext-common.S | 3 |
2 files changed, 9 insertions, 1 deletions
@@ -1,3 +1,10 @@ +2017-01-16 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. + 2017-01-16 Chris Metcalf <cmetcalf@mellanox.com> * sysdeps/tile/tilegx/memchr.c (__memchr): Handle pointer 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 |