Files
musl/src/internal/mips/syscall.s
Rich Felker 21419914c5 fix broken mips syscall asm
this code was using $10 to save the syscall number, but $10 is not
necessarily preserved by the kernel across syscalls. only mattered for
syscalls that got interrupted by a signal and restarted. as far as i
can tell, $25 is preserved by the kernel across syscalls.
2012-09-09 00:55:31 -04:00

23 lines
376 B
ArmAsm

.set noreorder
.global __syscall
.type __syscall,@function
__syscall:
move $25, $4
move $4, $5
move $5, $6
move $6, $7
lw $7, 16($sp)
lw $8, 20($sp)
lw $9, 24($sp)
subu $sp, $sp, 32
sw $8, 16($sp)
sw $9, 20($sp)
move $2, $25
syscall
beq $7, $0, 1f
addu $sp, $sp, 32
subu $2, $0, $2
1: jr $ra
nop