OSDN Git Service

Allocate additional space on stack for indirect syscall
authorChris Dearman <chris.dearman@imgtec.com>
Mon, 16 Dec 2013 22:10:13 +0000 (14:10 -0800)
committerElliott Hughes <enh@google.com>
Fri, 20 Dec 2013 23:36:00 +0000 (15:36 -0800)
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

index 60754e8..af5bcc9 100644 (file)
     .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