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:
@ -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)
|
||||
|
Reference in New Issue
Block a user