fix broken mips syscall asm
authorRich Felker <dalias@aerifal.cx>
Sun, 9 Sep 2012 04:55:31 +0000 (00:55 -0400)
committerRich Felker <dalias@aerifal.cx>
Sun, 9 Sep 2012 04:55:31 +0000 (00:55 -0400)
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.

src/internal/mips/syscall.s

index 01a5917b4fe64e070bce9738e4614290aa8f21b0..285754087872ed1325cbee01b17c000adc22aa60 100644 (file)
@@ -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