summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorElliott Hughes <enh@google.com>2012-09-11 16:47:25 -0700
committerAndroid Git Automerger <android-git-automerger@android.com>2012-09-11 16:47:25 -0700
commitcc0f225365d7103baaba80517850489a5ff17d89 (patch)
tree0a657c6afc8437cb32d45c702390e954b28fc1f7
parentf50b99f471a9af07b2dec6ac3fe1abca5ba9a20b (diff)
parent7f798147980798718ac893229ae20dba9e3a26c7 (diff)
downloadbionic-cc0f225365d7103baaba80517850489a5ff17d89.zip
bionic-cc0f225365d7103baaba80517850489a5ff17d89.tar.gz
bionic-cc0f225365d7103baaba80517850489a5ff17d89.tar.bz2
am 7f798147: am cc8668f2: Merge "[MIPS] Check error status from pipe system call"
* commit '7f798147980798718ac893229ae20dba9e3a26c7': [MIPS] Check error status from pipe system call
-rw-r--r--libc/arch-mips/bionic/pipe.S21
1 files changed, 16 insertions, 5 deletions
diff --git a/libc/arch-mips/bionic/pipe.S b/libc/arch-mips/bionic/pipe.S
index 8556569..0baf246 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 <asm/unistd.h>
.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