diff options
Diffstat (limited to 'libc/sysdeps/linux')
| -rw-r--r-- | libc/sysdeps/linux/common/fork.c | 18 | ||||
| -rw-r--r-- | libc/sysdeps/linux/cris/fork.c | 12 | ||||
| -rw-r--r-- | libc/sysdeps/linux/ia64/fork.S | 14 | ||||
| -rw-r--r-- | libc/sysdeps/linux/sparc/fork.S | 17 | ||||
| -rw-r--r-- | libc/sysdeps/linux/xtensa/fork.c | 17 | 
5 files changed, 47 insertions, 31 deletions
diff --git a/libc/sysdeps/linux/common/fork.c b/libc/sysdeps/linux/common/fork.c index 88958b144..fa1f4affa 100644 --- a/libc/sysdeps/linux/common/fork.c +++ b/libc/sysdeps/linux/common/fork.c @@ -8,15 +8,15 @@   */  #include <sys/syscall.h> -#include <unistd.h> -#ifdef __ARCH_USE_MMU__ - -#ifdef __NR_fork -#define __NR___libc_fork __NR_fork -_syscall0(pid_t, __libc_fork) -weak_alias(__libc_fork,fork) +#if defined __NR_fork && defined __ARCH_USE_MMU__ +# include <unistd.h> +# include <cancel.h> +_syscall0(pid_t, fork) +# ifdef __UCLIBC_HAS_THREADS__ +strong_alias(fork,__libc_fork)  libc_hidden_weak(fork) -#endif - +# else +libc_hidden_def(fork) +# endif  #endif diff --git a/libc/sysdeps/linux/cris/fork.c b/libc/sysdeps/linux/cris/fork.c index 19aa17271..7aff48974 100644 --- a/libc/sysdeps/linux/cris/fork.c +++ b/libc/sysdeps/linux/cris/fork.c @@ -6,13 +6,17 @@  #include "sysdep.h" -#define __NR___libc_fork __NR_fork -SYSCALL__ (__libc_fork, 0) +#if defined __NR_fork && defined __ARCH_USE_MMU__ +# include <cancel.h> + +SYSCALL__ (fork, 0)  	/* R1 is now 0 for the parent and 1 for the child.  Decrement it to  	   make it -1 (all bits set) for the parent, and 0 (no bits set)  	   for the child.  Then AND it with R0, so the parent gets  	   R0&-1==R0, and the child gets R0&0==0.  */       /* i dunno what the blurb above is useful for. we just return. */  __asm__("ret\n\tnop"); -weak_alias(__libc_fork,fork) -libc_hidden_weak(fork) + +lt_strong_alias(fork) +lt_libc_hidden(fork) +#endif diff --git a/libc/sysdeps/linux/ia64/fork.S b/libc/sysdeps/linux/ia64/fork.S index 0023a3be4..968bb1c73 100644 --- a/libc/sysdeps/linux/ia64/fork.S +++ b/libc/sysdeps/linux/ia64/fork.S @@ -24,7 +24,10 @@  /* pid_t fork(void); */  /* Implemented as a clone system call with parameters SIGCHLD and 0	*/ -ENTRY(__libc_fork) +#ifdef __UCLIBC_HAS_THREADS__ +.weak fork +#endif +ENTRY(fork)  	alloc r2=ar.pfs,0,0,2,0  	mov out0=SIGCHLD	/* Return SIGCHLD when child finishes	*/  				/* no other clone flags; nothing shared	*/ @@ -34,7 +37,8 @@ ENTRY(__libc_fork)  	cmp.eq p6,p0=-1,r10  (p6)	br.cond.spnt.few __syscall_error  	ret -PSEUDO_END(__libc_fork) - -weak_alias (__libc_fork, fork) -libc_hidden_weak (fork) +PSEUDO_END(fork) +#ifdef __UCLIBC_HAS_THREADS__ +strong_alias(fork,__libc_fork) +#endif +libc_hidden_def(fork) diff --git a/libc/sysdeps/linux/sparc/fork.S b/libc/sysdeps/linux/sparc/fork.S index 7ead409f0..1795eb638 100644 --- a/libc/sysdeps/linux/sparc/fork.S +++ b/libc/sysdeps/linux/sparc/fork.S @@ -23,11 +23,14 @@  #include <sys/syscall.h>  .text -.global	__libc_fork -.type	__libc_fork,%function +.global	fork +#ifdef __UCLIBC_HAS_THREADS__ +.weak   fork +#endif +.type	fork,%function  .align 4 -__libc_fork: +fork:  	mov __NR_fork, %g1  	ta	0x10  	bcc,a	9000f @@ -44,6 +47,8 @@ __libc_fork:  	retl  	and	%o0, %o1, %o0 -.size __libc_fork,.-__libc_fork -weak_alias(__libc_fork,fork) -libc_hidden_weak(fork) +.size fork,.-fork +#ifdef __UCLIBC_HAS_THREADS__ +strong_alias(fork,__libc_fork) +#endif +libc_hidden_def(fork) diff --git a/libc/sysdeps/linux/xtensa/fork.c b/libc/sysdeps/linux/xtensa/fork.c index f8b77bfb5..e9b681c67 100644 --- a/libc/sysdeps/linux/xtensa/fork.c +++ b/libc/sysdeps/linux/xtensa/fork.c @@ -7,16 +7,19 @@   * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.   */ -#include <unistd.h> -#include <sys/syscall.h> -#define _SIGNAL_H -#include <bits/signum.h>  /* Xtensa doesn't provide a 'fork' system call, so we use 'clone'.  */ +#include <sys/syscall.h> + +#if defined __NR_clone && defined __ARCH_USE_MMU__ +# include <unistd.h> +# include <signal.h> +# include <cancel.h> -pid_t __libc_fork(void) +pid_t fork(void)  {  	return (pid_t) INLINE_SYSCALL(clone, 2, SIGCHLD, 0);  } -weak_alias(__libc_fork, fork) -libc_hidden_weak(fork) +lt_strong_alias(fork) +lt_libc_hidden(fork) +#endif  | 
