summaryrefslogtreecommitdiff
path: root/libc
diff options
context:
space:
mode:
authorMike Frysinger <vapier@gentoo.org>2009-07-23 04:03:17 -0400
committerMike Frysinger <vapier@gentoo.org>2009-07-23 04:04:22 -0400
commit711ad9f92c1cf992c4a3d9f4f709bd692be7789c (patch)
tree26d1fd479950c0beec1efe4d9ae12f4f1504aa5f /libc
parent7c837e1b2d658cb45f00ef767f3ec57ba72362ae (diff)
create real common vfork() function
Rather than force people to always implement their own vfork(), have the default implementation be sane. For now, only the Blackfin port uses the new code. Signed-off-by: Mike Frysinger <vapier@gentoo.org>
Diffstat (limited to 'libc')
-rw-r--r--libc/sysdeps/linux/bfin/Makefile.arch2
-rw-r--r--libc/sysdeps/linux/bfin/vfork.S20
-rw-r--r--libc/sysdeps/linux/common/vfork.c20
3 files changed, 14 insertions, 28 deletions
diff --git a/libc/sysdeps/linux/bfin/Makefile.arch b/libc/sysdeps/linux/bfin/Makefile.arch
index 4b44ed02c..c44a7dcda 100644
--- a/libc/sysdeps/linux/bfin/Makefile.arch
+++ b/libc/sysdeps/linux/bfin/Makefile.arch
@@ -8,7 +8,7 @@
CSRC := bsdsetjmp.c clone.c \
sram-alloc.c sram-free.c dma-memcpy.c
-SSRC := __longjmp.S setjmp.S bsd-_setjmp.S vfork.S
+SSRC := __longjmp.S setjmp.S bsd-_setjmp.S
ARCH_HEADERS := bfin_fixed_code.h bfin_l1layout.h bfin_sram.h
diff --git a/libc/sysdeps/linux/bfin/vfork.S b/libc/sysdeps/linux/bfin/vfork.S
deleted file mode 100644
index 4e9aa844e..000000000
--- a/libc/sysdeps/linux/bfin/vfork.S
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * Copyright (C) 2000-2006 Erik Andersen <andersen@uclibc.org>
- *
- * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
- */
-
-#include <sys/syscall.h>
-
-.text
-.global ___vfork
-.hidden ___vfork
-.type ___vfork,STT_FUNC;
-.align 4
-___vfork:
- p0 = __NR_vfork;
- excpt 0;
- rts;
-.size ___vfork,.-___vfork
-weak_alias(__vfork,vfork)
-libc_hidden_weak(vfork)
diff --git a/libc/sysdeps/linux/common/vfork.c b/libc/sysdeps/linux/common/vfork.c
index eda76aeac..e7c920892 100644
--- a/libc/sysdeps/linux/common/vfork.c
+++ b/libc/sysdeps/linux/common/vfork.c
@@ -4,24 +4,30 @@
* Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
*/
-/* Trivial implementation for arches that lack vfork */
#include <unistd.h>
#include <sys/types.h>
#include <sys/syscall.h>
-#ifdef __ARCH_USE_MMU__
+extern __typeof(vfork) __vfork attribute_hidden;
-#ifdef __NR_fork
-/* libc_hidden_proto(fork) */
+#ifdef __NR_vfork
+
+# define __NR___vfork __NR_vfork
+_syscall0(pid_t, __vfork)
+
+weak_alias(__vfork,vfork)
+libc_hidden_weak(vfork)
+
+#elif defined __ARCH_USE_MMU__ && defined __NR_fork
+
+/* Trivial implementation for arches that lack vfork */
-extern __typeof(vfork) __vfork attribute_hidden;
pid_t __vfork(void)
{
return fork();
}
-/* libc_hidden_proto(vfork) */
+
weak_alias(__vfork,vfork)
libc_hidden_weak(vfork)
-#endif
#endif