1
0
mirror of https://sourceware.org/git/glibc.git synced 2025-07-29 11:41:21 +03:00

powerpc: Remove rt_sigreturn usage on context function

As described in a recent glibc thread [1], the rt_sigreturn syscall
on setcontext and swapcontext is not used on default use and its
intention is no really supported since neither setcontext nor
swapcontext are async-signal-safe.

Checked on powerpc64-linux-gnu and powerpc-linux-gnu.

	* sysdeps/unix/sysv/linux/powerpc/powerpc32/setcontext-common.S:
	Remove rt_sigreturn call.
	* sysdeps/unix/sysv/linux/powerpc/powerpc32/swapcontext-common.S:
	Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc64/setcontext.S: Likewie.
	* sysdeps/unix/sysv/linux/powerpc/powerpc64/swapcontext.S: Likewise.

[1] https://sourceware.org/ml/libc-alpha/2019-02/msg00367.html
This commit is contained in:
Adhemerval Zanella
2019-02-15 11:55:16 -02:00
parent 0e16969129
commit ffe8a9a831
5 changed files with 7 additions and 162 deletions

View File

@ -47,21 +47,6 @@ ENTRY(__CONTEXT_FUNC_NAME)
cfi_offset(r31,-4)
lwz r31,_UC_REGS_PTR(r3)
/*
* If this ucontext refers to the point where we were interrupted
* by a signal, we have to use the rt_sigreturn system call to
* return to the context so we get both LR and CTR restored.
*
* Otherwise, the context we are restoring is either just after
* a procedure call (getcontext/swapcontext) or at the beginning
* of a procedure call (makecontext), so we don't need to restore
* r0, xer, ctr. We don't restore r2 since it will be used as
* the TLS pointer.
*/
lwz r0,_UC_GREGS+(PT_MSR*4)(r31)
cmpwi r0,0
bne 4f /* L(do_sigret) */
/* Restore the signal mask */
li r5,0
addi r4,r3,_UC_SIGMASK
@ -296,11 +281,4 @@ ENTRY(__CONTEXT_FUNC_NAME)
mtlr r0
blr
4: /* L(do_sigret): */
addi r1,r3,-0xd0
li r0,SYS_ify(rt_sigreturn)
sc
/* NOTREACHED */
END (__CONTEXT_FUNC_NAME)