mirror of
https://sourceware.org/git/glibc.git
synced 2025-07-30 22:43:12 +03:00
mips: Remove rt_sigreturn usage on context function
Similar to powerpc, mips also issues rt_sigreturn for setcontext case the v0 value saved is not the one set by setcontext or makecontext. As for powerpc, it is intention is no really supported since setcontext is not async-signal-safe. Checked the context tests on mips64-linux-gnu and mips-linux-gnu. * sysdeps/unix/sysv/linux/mips/getcontext.S (__getcontext): Remove the magic flag store. * sysdeps/unix/sysv/linux/mips/makecontext.S (__makecontext): Likewise. * sysdeps/unix/sysv/linux/mips/swapcontext.S (__swapcontext): Likewise. * sysdeps/unix/sysv/linux/mips/setcontext.S (__setcontext): Remove rt_sigreturn call.
This commit is contained in:
@ -77,12 +77,6 @@ NESTED (__setcontext, FRAMESZ, ra)
|
||||
.set at
|
||||
#endif
|
||||
|
||||
/* Check for the magic flag. */
|
||||
li v0, 1
|
||||
/* zero */
|
||||
REG_L v1, (MCONTEXT_GREGOFF + 0 * MCONTEXT_GREGSZ + MCONTEXT_GREGS)(a0)
|
||||
bne v0, v1, 98f
|
||||
|
||||
REG_S a0, A0OFF(sp)
|
||||
|
||||
/* rt_sigprocmask (SIG_SETMASK, &ucp->uc_sigmask, NULL, _NSIG8) */
|
||||
@ -154,38 +148,6 @@ NESTED (__setcontext, FRAMESZ, ra)
|
||||
move v0, zero
|
||||
jr t9
|
||||
|
||||
98:
|
||||
/* This is a context obtained from a signal handler.
|
||||
Perform a full restore by pushing the context
|
||||
passed onto a simulated signal frame on the stack
|
||||
and call the signal return syscall as if a signal
|
||||
handler exited normally. */
|
||||
PTR_ADDIU sp, -((RT_SIGFRAME_SIZE + ALSZ) & ALMASK)
|
||||
cfi_adjust_cfa_offset ((RT_SIGFRAME_SIZE + ALSZ) & ALMASK)
|
||||
|
||||
/* Only ucontext is referred to from rt_sigreturn,
|
||||
copy it. */
|
||||
PTR_ADDIU t1, sp, RT_SIGFRAME_UCONTEXT
|
||||
li t3, ((UCONTEXT_SIZE + SZREG - 1) / SZREG) - 1
|
||||
0:
|
||||
REG_L t2, (a0)
|
||||
PTR_ADDIU a0, SZREG
|
||||
REG_S t2, (t1)
|
||||
PTR_ADDIU t1, SZREG
|
||||
.set noreorder
|
||||
bgtz t3, 0b
|
||||
addiu t3, -1
|
||||
.set reorder
|
||||
|
||||
/* rt_sigreturn () -- no arguments, sp points to struct rt_sigframe. */
|
||||
li v0, SYS_ify (rt_sigreturn)
|
||||
syscall
|
||||
|
||||
/* Restore the stack and fall through to the error
|
||||
path. Successful rt_sigreturn never returns to
|
||||
its calling place. */
|
||||
PTR_ADDIU sp, ((RT_SIGFRAME_SIZE + ALSZ) & ALMASK)
|
||||
cfi_adjust_cfa_offset (-((RT_SIGFRAME_SIZE + ALSZ) & ALMASK))
|
||||
99:
|
||||
#ifdef __PIC__
|
||||
PTR_LA t9, JUMPTARGET (__syscall_error)
|
||||
|
Reference in New Issue
Block a user