From b03bc56b7930d60237f1dd1ed40f23c2635929c9 Mon Sep 17 00:00:00 2001 From: KwongYuan Wong Date: Tue, 27 Mar 2012 11:13:13 -0700 Subject: [PATCH] [MIPS] Check error status from pipe system call Change-Id: Iaaea0e826c2678aa7f6fad9d46b16302a4d3b876 --- libc/arch-mips/bionic/pipe.S | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/libc/arch-mips/bionic/pipe.S b/libc/arch-mips/bionic/pipe.S index 85565692a..0baf246f3 100644 --- a/libc/arch-mips/bionic/pipe.S +++ b/libc/arch-mips/bionic/pipe.S @@ -26,6 +26,12 @@ * SUCH DAMAGE. */ +/* + * The MIPS pipe syscall returns results in two registers, which + * we have to copy into the supplied array. This prevents us from + * using an auto-generated stub. + */ + #include .text @@ -38,12 +44,17 @@ .ent pipe pipe: .set noreorder - + .cpload $t9 li $v0,__NR_pipe syscall /* syscall returns results in v0,v1 */ - - sw $v0,0($a0) - sw $v1,4($a0) + bnez $a3, 1f /* check errno */ + nop + sw $v0, 0($a0) + sw $v1, 4($a0) j $ra - move $v0,$zero + move $v0, $zero +1: + la $t9, __set_errno + j $t9 + move $a0, $v0 /* delay slot, prepare args for __set_errno */ .end pipe