summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRich Felker <dalias@aerifal.cx>2012-09-09 00:55:31 -0400
committerRich Felker <dalias@aerifal.cx>2012-09-09 00:55:31 -0400
commit21419914c530c505cb450733b724257be703d9db (patch)
tree0c31ccce2b6a9ee5fb2cce79bd316160c5382389
parent41c5ee50eee769f85253946e4c4b5706de37e9e9 (diff)
downloadmusl-21419914c530c505cb450733b724257be703d9db.tar.gz
musl-21419914c530c505cb450733b724257be703d9db.tar.bz2
musl-21419914c530c505cb450733b724257be703d9db.tar.xz
musl-21419914c530c505cb450733b724257be703d9db.zip
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.
-rw-r--r--src/internal/mips/syscall.s4
1 files changed, 2 insertions, 2 deletions
diff --git a/src/internal/mips/syscall.s b/src/internal/mips/syscall.s
index 01a5917b..28575408 100644
--- a/src/internal/mips/syscall.s
+++ b/src/internal/mips/syscall.s
@@ -3,7 +3,7 @@
.global __syscall
.type __syscall,@function
__syscall:
- move $10, $4
+ move $25, $4
move $4, $5
move $5, $6
move $6, $7
@@ -13,7 +13,7 @@ __syscall:
subu $sp, $sp, 32
sw $8, 16($sp)
sw $9, 20($sp)
- move $2, $10
+ move $2, $25
syscall
beq $7, $0, 1f
addu $sp, $sp, 32