A few places in the code check for existence of vfork by testing if __NR_vfork is defined. Newer kernels don't have a vfork syscall in which case, the library implements the vfork function using __NR_clone.
This patch adds a test for __UCLIBC_VFORK_USES_CLONE__ feature definition which an architecture may define if vfork is implemented using clone. Signed-off-by: Mark Salter <[email protected]> --- libc/stdio/popen.c | 2 +- libc/stdlib/system.c | 2 +- libc/stdlib/unix_grantpt.c | 2 +- libc/sysdeps/linux/c6x/bits/uClibc_arch_features.h | 3 +++ 4 files changed, 6 insertions(+), 3 deletions(-) diff --git a/libc/stdio/popen.c b/libc/stdio/popen.c index d5c60cf..72ee60d 100644 --- a/libc/stdio/popen.c +++ b/libc/stdio/popen.c @@ -29,7 +29,7 @@ /* uClinux-2.0 has vfork, but Linux 2.0 doesn't */ #include <sys/syscall.h> -#if ! defined __NR_vfork +#if ! defined __NR_vfork && ! defined __UCLIBC_VFORK_USES_CLONE__ # define vfork fork # define VFORK_LOCK ((void) 0) # define VFORK_UNLOCK ((void) 0) diff --git a/libc/stdlib/system.c b/libc/stdlib/system.c index a92c307..cfea08e 100644 --- a/libc/stdlib/system.c +++ b/libc/stdlib/system.c @@ -26,7 +26,7 @@ extern __typeof(system) __libc_system; #if !defined __UCLIBC_HAS_THREADS_NATIVE__ || defined __sparc__ /* uClinux-2.0 has vfork, but Linux 2.0 doesn't */ #include <sys/syscall.h> -#ifndef __NR_vfork +#if !defined __NR_vfork && !defined __UCLIBC_VFORK_USES_CLONE__ # define vfork fork #endif diff --git a/libc/stdlib/unix_grantpt.c b/libc/stdlib/unix_grantpt.c index 1be0a7d..cba7fc9 100644 --- a/libc/stdlib/unix_grantpt.c +++ b/libc/stdlib/unix_grantpt.c @@ -33,7 +33,7 @@ /* uClinux-2.0 has vfork, but Linux 2.0 doesn't */ #include <sys/syscall.h> -#if ! defined __NR_vfork +#if ! defined(__NR_vfork) && ! defined(__NR_clone) #define vfork fork #endif diff --git a/libc/sysdeps/linux/c6x/bits/uClibc_arch_features.h b/libc/sysdeps/linux/c6x/bits/uClibc_arch_features.h index 59e7de9..936748a 100644 --- a/libc/sysdeps/linux/c6x/bits/uClibc_arch_features.h +++ b/libc/sysdeps/linux/c6x/bits/uClibc_arch_features.h @@ -45,4 +45,7 @@ /* only weird assemblers generally need this */ #define __UCLIBC_ASM_LINE_SEP__ @ +/* define if vfork function exists */ +#define __UCLIBC_VFORK_USES_CLONE__ + #endif /* _BITS_UCLIBC_ARCH_FEATURES_H */ -- 1.7.9.1 _______________________________________________ uClibc mailing list [email protected] http://lists.busybox.net/mailman/listinfo/uclibc
