mirror of
https://github.com/fluencelabs/musl
synced 2025-07-31 06:11:57 +00:00
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.
23 lines
376 B
ArmAsm
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
|