1
0
mirror of https://sourceware.org/git/glibc.git synced 2025-08-08 17:42:12 +03:00

linux: sparc: Fix syscall_cancel for LEON

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>
This commit is contained in:
Adhemerval Zanella
2024-09-02 16:58:24 -03:00
parent 44fa9c1080
commit 49c3682ce1

View File

@@ -42,7 +42,11 @@ __syscall_cancel_arch_start:
__syscall_do_cancel() */ __syscall_do_cancel() */
ld [%i0], %g2 ld [%i0], %g2
andcc %g2, TCB_CANCELED_BITMASK, %g0 andcc %g2, TCB_CANCELED_BITMASK, %g0
#ifdef __sparcv9
bne,pn %icc, 2f bne,pn %icc, 2f
#else
bne 2f
#endif
/* Issue a 6 argument syscall. */ /* Issue a 6 argument syscall. */
mov %i1, %g1 mov %i1, %g1
mov %i2, %o0 mov %i2, %o0
@@ -60,8 +64,13 @@ __syscall_cancel_arch_end:
sub %g0, %o0, %o0 sub %g0, %o0, %o0
1: 1:
mov %o0, %i0 mov %o0, %i0
#ifdef __sparcv9
return %i7+8 return %i7+8
nop nop
#else
jmp %i7+8
restore
#endif
2: 2:
call __syscall_do_cancel, 0 call __syscall_do_cancel, 0