summaryrefslogtreecommitdiffstats
path: root/libc
diff options
context:
space:
mode:
authorElliott Hughes <enh@google.com>2014-01-02 15:41:33 -0800
committerElliott Hughes <enh@google.com>2014-01-03 14:27:17 -0800
commitc5bf703c4cfa2ca4f35a83c9afaf4ee123cb617c (patch)
tree59d892fb966be1108fde54815857f0696087d264 /libc
parent7b0c23f1ac5df8654e0790b9eb3bbfcbf36c0e5f (diff)
downloadbionic-c5bf703c4cfa2ca4f35a83c9afaf4ee123cb617c.zip
bionic-c5bf703c4cfa2ca4f35a83c9afaf4ee123cb617c.tar.gz
bionic-c5bf703c4cfa2ca4f35a83c9afaf4ee123cb617c.tar.bz2
Remove as many hard-coded constants from the MIPS vfork.S as possible.
We could do better, but not without MIPS cleaning up their kernel headers. Change-Id: Ib4d4ce5d720ce8ca27a3f9a1ae07a9a277675af9
Diffstat (limited to 'libc')
-rw-r--r--libc/arch-mips/bionic/vfork.S24
1 files changed, 16 insertions, 8 deletions
diff --git a/libc/arch-mips/bionic/vfork.S b/libc/arch-mips/bionic/vfork.S
index 2e2e4ff..414caaf 100644
--- a/libc/arch-mips/bionic/vfork.S
+++ b/libc/arch-mips/bionic/vfork.S
@@ -27,10 +27,13 @@
*/
#include <asm/unistd.h>
+#include <linux/sched.h>
- .text
+// TODO: mips' uapi signal.h is missing #ifndef __ASSEMBLY__.
+// #include <asm/signal.h>
+#define SIGCHLD 18
-/* int vfork() implemented using clone() */
+ .text
.type vfork, @function
.global vfork
@@ -40,17 +43,22 @@ vfork:
.set noreorder
.cpload $t9
- li $a0, 0x4112 /* CLONE_VM | CLONE_VFORK | SIGCHLD */
- move $a1, $sp
+ li $a0, (CLONE_VM | CLONE_VFORK | SIGCHLD)
+ li $a1, 0
+ li $a2, 0
+ li $a3, 0
+ subu $sp, 8
+ sw $0, 16($sp)
li $v0, __NR_clone
syscall
- bnez $a3,1f
- nop
+ addu $sp, 8
+ bnez $a3, 1f
+ move $a0, $v0
j $ra
nop
1:
- la $t9,__set_errno
+ la $t9, __set_errno
j $t9
- move $a0,$v0
+ nop
.end vfork