]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
linux: sparc: Fix syscall_cancel for LEON
authorAdhemerval Zanella <adhemerval.zanella@linaro.org>
Mon, 2 Sep 2024 19:58:24 +0000 (16:58 -0300)
committerAdhemerval Zanella <adhemerval.zanella@linaro.org>
Tue, 1 Oct 2024 13:37:21 +0000 (10:37 -0300)
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
checked some cancellation tests with qemu-system (targeting LEON3).

Acked-by: John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>
sysdeps/unix/sysv/linux/sparc/sparc32/syscall_cancel.S

index aa5c658ce1e61260bbdb9849107619e5e3a31787..0db93c77bf467e50b06db055d617ada54c5b8ddd 100644 (file)
@@ -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