This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: [PATCH 2/2] mips: Remove rt_sigreturn usage on context function
- From: Adhemerval Zanella <adhemerval dot zanella at linaro dot org>
- To: libc-alpha at sourceware dot org
- Date: Wed, 17 Apr 2019 14:10:03 -0300
- Subject: Re: [PATCH 2/2] mips: Remove rt_sigreturn usage on context function
- References: <20190215141132.24404-1-adhemerval.zanella@linaro.org> <20190215141132.24404-2-adhemerval.zanella@linaro.org>
If no one opposes I will commit this shortly.
On 15/02/2019 12:11, Adhemerval Zanella wrote:
> 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.
> ---
> sysdeps/unix/sysv/linux/mips/getcontext.S | 5 ---
> sysdeps/unix/sysv/linux/mips/makecontext.S | 5 ---
> sysdeps/unix/sysv/linux/mips/setcontext.S | 38 ----------------------
> sysdeps/unix/sysv/linux/mips/swapcontext.S | 5 ---
> 4 files changed, 53 deletions(-)
>
> diff --git a/sysdeps/unix/sysv/linux/mips/getcontext.S b/sysdeps/unix/sysv/linux/mips/getcontext.S
> index 4f7f89ee9a..015bd5bff6 100644
> --- a/sysdeps/unix/sysv/linux/mips/getcontext.S
> +++ b/sysdeps/unix/sysv/linux/mips/getcontext.S
> @@ -78,11 +78,6 @@ NESTED (__getcontext, FRAMESZ, ra)
> .set at
> #endif
>
> - /* Store a magic flag. */
> - li v1, 1
> - /* zero */
> - REG_S v1, (MCONTEXT_GREGOFF + 0 * MCONTEXT_GREGSZ + MCONTEXT_GREGS)(a0)
> -
> REG_S s0, (MCONTEXT_GREGOFF + 16 * MCONTEXT_GREGSZ + MCONTEXT_GREGS)(a0)
> REG_S s1, (MCONTEXT_GREGOFF + 17 * MCONTEXT_GREGSZ + MCONTEXT_GREGS)(a0)
> REG_S s2, (MCONTEXT_GREGOFF + 18 * MCONTEXT_GREGSZ + MCONTEXT_GREGS)(a0)
> diff --git a/sysdeps/unix/sysv/linux/mips/makecontext.S b/sysdeps/unix/sysv/linux/mips/makecontext.S
> index 4439fec3ff..3f40f7c9f2 100644
> --- a/sysdeps/unix/sysv/linux/mips/makecontext.S
> +++ b/sysdeps/unix/sysv/linux/mips/makecontext.S
> @@ -93,11 +93,6 @@ NESTED (__makecontext, FRAMESZ, ra)
> REG_S a7, A7OFF(sp)
> #endif
>
> - /* Store a magic flag. */
> - li v1, 1
> - /* zero */
> - REG_S v1, (MCONTEXT_GREGOFF + 0 * MCONTEXT_GREGSZ + MCONTEXT_GREGS)(a0)
> -
> /* Set up the stack. */
> PTR_L t0, STACK_SP(a0)
> PTR_L t2, STACK_SIZE(a0)
> diff --git a/sysdeps/unix/sysv/linux/mips/setcontext.S b/sysdeps/unix/sysv/linux/mips/setcontext.S
> index b6553bdb5e..98afe6cbac 100644
> --- a/sysdeps/unix/sysv/linux/mips/setcontext.S
> +++ b/sysdeps/unix/sysv/linux/mips/setcontext.S
> @@ -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)
> diff --git a/sysdeps/unix/sysv/linux/mips/swapcontext.S b/sysdeps/unix/sysv/linux/mips/swapcontext.S
> index 9c68961345..6612e757cd 100644
> --- a/sysdeps/unix/sysv/linux/mips/swapcontext.S
> +++ b/sysdeps/unix/sysv/linux/mips/swapcontext.S
> @@ -87,11 +87,6 @@ NESTED (__swapcontext, FRAMESZ, ra)
> .set at
> #endif
>
> - /* Store a magic flag. */
> - li v1, 1
> - /* zero */
> - REG_S v1, (MCONTEXT_GREGOFF + 0 * MCONTEXT_GREGSZ + MCONTEXT_GREGS)(a0)
> -
> REG_S s0, (MCONTEXT_GREGOFF + 16 * MCONTEXT_GREGSZ + MCONTEXT_GREGS)(a0)
> REG_S s1, (MCONTEXT_GREGOFF + 17 * MCONTEXT_GREGSZ + MCONTEXT_GREGS)(a0)
> REG_S s2, (MCONTEXT_GREGOFF + 18 * MCONTEXT_GREGSZ + MCONTEXT_GREGS)(a0)
>