Allocate additional space on stack for indirect syscall
The caller is only required to allocate 16 bytes on the
stack for a0-a3. syscall is handling up to 6 arguments so
additional space is needed on the stack to avoid corrupting the
callers frame.
Change-Id: I054b31696decc3e17d9c70af18cd278b852235d1
diff --git a/libc/arch-mips/bionic/syscall.S b/libc/arch-mips/bionic/syscall.S
index 60754e8..af5bcc9 100644
--- a/libc/arch-mips/bionic/syscall.S
+++ b/libc/arch-mips/bionic/syscall.S
@@ -32,6 +32,12 @@
.align 4
.ent syscall
+/*
+ * The caller is only required to allocate 16 bytes of stack for a0-a3.
+ * syscall has up to 6 arguments, so we need space for the extra two arguments.
+ */
+#define STACKSIZE 2*4
+
syscall:
.set noreorder
.cpload $t9
@@ -42,9 +48,11 @@
lw $a3, 16($sp)
lw $t0, 20($sp)
lw $t1, 24($sp)
+ subu $sp, STACKSIZE
sw $t0, 16($sp)
sw $t1, 20($sp)
syscall
+ addu $sp, STACKSIZE
bnez $a3, 1f
move $a0, $v0
j $ra