From 11372c665a2db1ec81fb6128fe535c39bcca7b6c Mon Sep 17 00:00:00 2001 From: Markos Chandras Date: Thu, 11 Oct 2012 11:01:37 +0100 Subject: fork: Use clone if arch does not have the fork syscall Signed-off-by: Markos Chandras Signed-off-by: Bernhard Reutner-Fischer --- libc/sysdeps/linux/common/fork.c | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) (limited to 'libc/sysdeps/linux/common/fork.c') diff --git a/libc/sysdeps/linux/common/fork.c b/libc/sysdeps/linux/common/fork.c index fa1f4affa..b5715c7a0 100644 --- a/libc/sysdeps/linux/common/fork.c +++ b/libc/sysdeps/linux/common/fork.c @@ -9,14 +9,34 @@ #include -#if defined __NR_fork && defined __ARCH_USE_MMU__ +#if defined __ARCH_USE_MMU__ # include -# include +extern __typeof(fork) __libc_fork; +# if defined __NR_fork +# include +# define __NR___libc_fork __NR_fork _syscall0(pid_t, fork) + +# elif defined __NR_clone && !defined __NR_fork +# include +# include +# include +pid_t fork(void) +{ + pid_t pid = INLINE_SYSCALL(clone, 4, SIGCHLD, NULL, NULL, NULL); + + if (pid < 0) + return -1; + + return pid; +} + +# endif # ifdef __UCLIBC_HAS_THREADS__ strong_alias(fork,__libc_fork) libc_hidden_weak(fork) # else libc_hidden_def(fork) # endif + #endif -- cgit v1.2.3