From 7d092b69a0cd07e17a14027c9b544c9b6caac190 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Thu, 19 Dec 2002 08:41:52 +0000 Subject: [PATCH] Update. 2002-12-19 Ulrich Drepper * sysdeps/unix/sysv/linux/i386/system.c: Define FORK only if __ASSUME_CLONE_THREAD_FLAGS is defined. * sysdeps/unix/sysv/linux/kernel-features.h (__ASSUME_CLONE_THREAD_FLAGS): Define for x86 and kernel >= 2.5.50. * sysdeps/unix/sysv/linux/i386/brk.c: Use INTERNAL_SYSCALL instead of asm. * sysdeps/unix/sysv/linux/i386/sigaction.c: Likewise. --- ChangeLog | 12 ++++++++++++ sysdeps/unix/sysv/linux/i386/system.c | 5 ++++- sysdeps/unix/sysv/linux/kernel-features.h | 8 ++++++++ 3 files changed, 24 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 058e0ef041..be2b655ec5 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,17 @@ +2002-12-19 Ulrich Drepper + + * sysdeps/unix/sysv/linux/i386/system.c: Define FORK only if + __ASSUME_CLONE_THREAD_FLAGS is defined. + * sysdeps/unix/sysv/linux/kernel-features.h + (__ASSUME_CLONE_THREAD_FLAGS): Define for x86 and kernel >= + 2.5.50. + 2002-12-18 Ulrich Drepper + * sysdeps/unix/sysv/linux/i386/brk.c: Use INTERNAL_SYSCALL instead + of asm. + * sysdeps/unix/sysv/linux/i386/sigaction.c: Likewise. + * elf/dl-support.c [NEED_DL_SYSINFO]: Define and initialize _dl_sysinfo. [DL_SYSINFO_IMPLEMENTATION]: If defined use it to generate the needed diff --git a/sysdeps/unix/sysv/linux/i386/system.c b/sysdeps/unix/sysv/linux/i386/system.c index 1107fd6668..aa33471fa4 100644 --- a/sysdeps/unix/sysv/linux/i386/system.c +++ b/sysdeps/unix/sysv/linux/i386/system.c @@ -22,6 +22,7 @@ #include #include #include +#include /* We have to and actually can handle cancelable system(). The big problem: we have to kill the child process if necessary. To do @@ -31,8 +32,10 @@ return. It might still be in the kernel when the cancellation request comes. Therefore we have to use the clone() calls ability to have the kernel write the PID into the user-level variable. */ -#define FORK() \ +#ifdef __ASSUME_CLONE_THREAD_FLAGS +# define FORK() \ INLINE_SYSCALL (clone, 3, CLONE_PARENT_SETTID | SIGCHLD, 0, &pid) +#endif static void cancel_handler (void *arg); diff --git a/sysdeps/unix/sysv/linux/kernel-features.h b/sysdeps/unix/sysv/linux/kernel-features.h index 0796a8a1fd..c84305c583 100644 --- a/sysdeps/unix/sysv/linux/kernel-features.h +++ b/sysdeps/unix/sysv/linux/kernel-features.h @@ -232,3 +232,11 @@ # define __ASSUME_FCNTL64 1 # define __ASSUME_GETDENTS64_SYSCALL 1 #endif + +/* The late 2.5 kernels saw a lot of new CLONE_* flags. Summarize + their availability with one define. The changes were made first + for i386 and the have to be done separately for the other archs. + For i386 we pick 2.5.50 as the first version with support. */ +#if __LINUX_KERNEL_VERSION >= 132432 +# define __ASSUME_CLONE_THREAD_FLAGS 1 +#endif