aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2002-12-19 08:41:52 +0000
committerUlrich Drepper <drepper@redhat.com>2002-12-19 08:41:52 +0000
commit7d092b69a0cd07e17a14027c9b544c9b6caac190 (patch)
tree5a748841ee2168442d8d5ff213ada95262b89935
parentdf45b31e8150087fad9ff5889fe1a95054e26730 (diff)
downloadglibc-7d092b69a0cd07e17a14027c9b544c9b6caac190.tar
glibc-7d092b69a0cd07e17a14027c9b544c9b6caac190.tar.gz
glibc-7d092b69a0cd07e17a14027c9b544c9b6caac190.tar.bz2
glibc-7d092b69a0cd07e17a14027c9b544c9b6caac190.zip
Update.
2002-12-19 Ulrich Drepper <drepper@redhat.com> * 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.
-rw-r--r--ChangeLog12
-rw-r--r--sysdeps/unix/sysv/linux/i386/system.c5
-rw-r--r--sysdeps/unix/sysv/linux/kernel-features.h8
3 files changed, 24 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index 058e0ef041..be2b655ec5 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,17 @@
+2002-12-19 Ulrich Drepper <drepper@redhat.com>
+
+ * 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 <drepper@redhat.com>
+ * 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 <unistd.h>
#include <sys/wait.h>
#include <bits/libc-lock.h>
+#include <kernel-features.h>
/* 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