1
0
mirror of https://sourceware.org/git/glibc.git synced 2026-10-24 01:33:52 +03:00

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.
This commit is contained in:
Joseph Myers
2017-01-16 21:34:48 +00:00
parent 502697713f
commit b040e1b084
2 changed files with 9 additions and 1 deletions

View File

@@ -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