From 766c7efe28fb066252eeb9b8e47e22970307c09e Mon Sep 17 00:00:00 2001 From: Chris Dearman Date: Mon, 16 Dec 2013 14:10:13 -0800 Subject: [PATCH] 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 --- libc/arch-mips/bionic/syscall.S | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/libc/arch-mips/bionic/syscall.S b/libc/arch-mips/bionic/syscall.S index 60754e82e..af5bcc9ab 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 @@ syscall: 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