OSDN Git Service

Make uClibc vfork() use kernels vfork() instead of fork().
authorJoakim Tjernlund <joakim.tjernlund@transmode.se>
Wed, 17 Aug 2005 20:04:05 +0000 (20:04 -0000)
committerJoakim Tjernlund <joakim.tjernlund@transmode.se>
Wed, 17 Aug 2005 20:04:05 +0000 (20:04 -0000)
libc/sysdeps/linux/powerpc/Makefile
libc/sysdeps/linux/powerpc/vfork.S [new file with mode: 0644]

index eb212ba..4c345c0 100644 (file)
@@ -25,10 +25,10 @@ SCRT_OBJ = $(patsubst %,S%, $(CRT_OBJ))
 CTOR_TARGETS=$(TOPDIR)lib/crti.o $(TOPDIR)lib/crtn.o
 
 SSRC=__longjmp.S setjmp.S bsd-setjmp.S bsd-_setjmp.S brk.S \
-       clone.S __uClibc_syscall.S syscall.S
+       clone.S __uClibc_syscall.S syscall.S vfork.S
 SOBJS=$(patsubst %.S,%.o, $(SSRC))
 
-CSRC=mmap.c vfork.c __syscall_error.c pread_write.c ioctl.c
+CSRC=mmap.c __syscall_error.c pread_write.c ioctl.c
 COBJS=$(patsubst %.c,%.o, $(CSRC))
 
 OBJS=$(SOBJS) $(COBJS)
diff --git a/libc/sysdeps/linux/powerpc/vfork.S b/libc/sysdeps/linux/powerpc/vfork.S
new file mode 100644 (file)
index 0000000..67d8aae
--- /dev/null
@@ -0,0 +1,23 @@
+#include <sys/syscall.h>
+
+#ifndef __NR_vfork
+
+/* No vfork so use fork instead */
+.weak vfork ; vfork = __libc_fork
+
+#else
+
+.text
+.global __vfork
+.type   __vfork,@function
+.type   __syscall_error,@function
+
+__vfork:
+       li      0, __NR_vfork
+       sc
+       bnslr+
+       b       __syscall_error
+.size __vfork,.-__vfork
+
+.weak vfork ; vfork = __vfork
+#endif