diff mbox series

linux: sparc: Fix syscall_cancel for LEON

Message ID 20240902195841.1455273-1-adhemerval.zanella@linaro.org
State New
Headers show
Series linux: sparc: Fix syscall_cancel for LEON | expand

Commit Message

Adhemerval Zanella Netto Sept. 2, 2024, 7:58 p.m. UTC
LEON2/LEON3 are both sparcv8, which does not support branch hints
(bne,pn) nor the return instruction.

Checked with a build for sparcv8-linux-gnu targetting leon. I also
check some cancellation tests with qemu-system (targeting LEON3).
---
 sysdeps/unix/sysv/linux/sparc/sparc32/syscall_cancel.S | 9 +++++++++
 1 file changed, 9 insertions(+)

Comments

John Paul Adrian Glaubitz Sept. 26, 2024, 6:07 p.m. UTC | #1
On Mon, 2024-09-02 at 16:58 -0300, Adhemerval Zanella wrote:
> LEON2/LEON3 are both sparcv8, which does not support branch hints
> (bne,pn) nor the return instruction.
> 
> Checked with a build for sparcv8-linux-gnu targetting leon. I also
> check some cancellation tests with qemu-system (targeting LEON3).
  ^^^^^
This should be "checked".

> ---
>  sysdeps/unix/sysv/linux/sparc/sparc32/syscall_cancel.S | 9 +++++++++
>  1 file changed, 9 insertions(+)
> 
> diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/syscall_cancel.S b/sysdeps/unix/sysv/linux/sparc/sparc32/syscall_cancel.S
> index aa5c658ce1..0db93c77bf 100644
> --- a/sysdeps/unix/sysv/linux/sparc/sparc32/syscall_cancel.S
> +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/syscall_cancel.S
> @@ -42,7 +42,11 @@ __syscall_cancel_arch_start:
>  	     __syscall_do_cancel()  */
>  	ld	[%i0], %g2
>  	andcc	%g2, TCB_CANCELED_BITMASK, %g0
> +#ifdef __sparcv9
>  	bne,pn	%icc, 2f
> +#else
> +	bne	2f
> +#endif
>  	/* Issue a 6 argument syscall.  */
>  	 mov	%i1, %g1
>  	mov	%i2, %o0
> @@ -60,8 +64,13 @@ __syscall_cancel_arch_end:
>  	sub	%g0, %o0, %o0
>  1:
>  	mov	%o0, %i0
> +#ifdef __sparcv9
>  	return	%i7+8
>  	 nop
> +#else
> +	jmp	%i7+8
> +	 restore
> +#endif
>  
>  2:
>  	call	__syscall_do_cancel, 0

Acked-by: John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>

Thanks,
Adrian
diff mbox series

Patch

diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/syscall_cancel.S b/sysdeps/unix/sysv/linux/sparc/sparc32/syscall_cancel.S
index aa5c658ce1..0db93c77bf 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc32/syscall_cancel.S
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/syscall_cancel.S
@@ -42,7 +42,11 @@  __syscall_cancel_arch_start:
 	     __syscall_do_cancel()  */
 	ld	[%i0], %g2
 	andcc	%g2, TCB_CANCELED_BITMASK, %g0
+#ifdef __sparcv9
 	bne,pn	%icc, 2f
+#else
+	bne	2f
+#endif
 	/* Issue a 6 argument syscall.  */
 	 mov	%i1, %g1
 	mov	%i2, %o0
@@ -60,8 +64,13 @@  __syscall_cancel_arch_end:
 	sub	%g0, %o0, %o0
 1:
 	mov	%o0, %i0
+#ifdef __sparcv9
 	return	%i7+8
 	 nop
+#else
+	jmp	%i7+8
+	 restore
+#endif
 
 2:
 	call	__syscall_do_cancel, 0