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