소스 검색

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>
Mike Frysinger 15 년 전
부모
커밋
711ad9f92c
3개의 변경된 파일14개의 추가작업 그리고 28개의 파일을 삭제
  1. 1 1
      libc/sysdeps/linux/bfin/Makefile.arch
  2. 0 20
      libc/sysdeps/linux/bfin/vfork.S
  3. 13 7
      libc/sysdeps/linux/common/vfork.c

+ 1 - 1
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
 

+ 0 - 20
libc/sysdeps/linux/bfin/vfork.S

@@ -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)

+ 13 - 7
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