This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH 2/2] mips: Remove rt_sigreturn usage on context function


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]