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:
@@ -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
|
||||||
|
Reference in New Issue
Block a user