2014-07-07 Roland McGrath <roland@hack.frob.com>
+ * NEWS: NPTL is no longer an add-on!
+ * nptl/internaltypes.h: Moved ...
+ * sysdeps/nptl/internaltypes.h: ... here.
+ * sysdeps/nptl/aio_misc.h: Use <nptl/pthreadP.h> in #include.
+ * sysdeps/nptl/fork.c: Likewise.
+ * sysdeps/nptl/gai_misc.h: Likewise.
+ * sysdeps/nptl/librt-cancellation.c: Likewise.
+ * sysdeps/nptl/jmp-unwind.c: Likewise.
+ * sysdeps/nptl/setxid.h: Likewise.
+ * sysdeps/unix/sysv/linux/aarch64/Implies: New file.
+ * sysdeps/unix/sysv/linux/alpha/Implies: Add alpha/nptl.
+ * sysdeps/unix/sysv/linux/arm/Implies: New file.
+ * sysdeps/unix/sysv/linux/hppa/Implies: New file.
+ * sysdeps/unix/sysv/linux/i386/Implies: Add i386/nptl.
+ * sysdeps/unix/sysv/linux/i386/i686/Implies: New file.
+ * sysdeps/unix/sysv/linux/ia64/Implies: Add ia64/nptl.
+ * sysdeps/unix/sysv/linux/m68k/Implies: New file.
+ * sysdeps/unix/sysv/linux/microblaze/Implies: New file.
+ * sysdeps/unix/sysv/linux/mips/Implies: New file.
+ * sysdeps/unix/sysv/linux/powerpc/Implies: New file.
+ * sysdeps/unix/sysv/linux/s390/Implies: Add s390/nptl.
+ * sysdeps/unix/sysv/linux/sh/Implies: New file.
+ * sysdeps/unix/sysv/linux/sparc/Implies: New file.
+ * sysdeps/unix/sysv/linux/tile/Implies: New file.
+ * sysdeps/unix/sysv/linux/x86_64/Implies: Add x86_64/nptl.
+ * sysdeps/unix/sysv/linux/x86_64/x32/Implies: New file.
+ * nptl/Makeconfig: Moved ...
+ * sysdeps/nptl/Makeconfig: ... here.
+ * nptl/configure: File removed.
+ * nptl/ANNOUNCE: File removed.
+ * sysdeps/unix/sysv/linux/configure.ac: Remove nptl sanity check.
+ * sysdeps/unix/sysv/linux/configure: Regenerated.
+
* nptl/Makefile (routines): Add libc_pthread_init,
libc_multiple_threads, register-atfork and unregister-atfork.
(libpthread-routines): Add pthread_mutex_cond_lock and pt-fork here.
* All supported architectures now use the main glibc sysdeps directory
instead of some being in a separate "ports" directory (which was
distributed separately before glibc 2.17).
+
+* The NPTL implementation of POSIX pthreads is no longer an "add-on".
+ On configurations that support it (all Linux configurations), it's now
+ used regardless of the --enable-add-ons switch to configure. It is no
+ longer possible to build such configurations without pthreads support.
\f
Version 2.19
+++ /dev/null
-Now that the Linux kernel is once again able to run all the tests we
-have and since glibc 2.3 was released it was time for a new code drop.
-I've uploaded the second code drop for the Native POSIX Thread
-Library:
-
- ftp://people.redhat.com/drepper/nptl/nptl-0.2.tar.bz2
-
-You need
-
-- the latest of Linus' kernel from BitKeeper (or 2.5.41 when it
- is released);
-
-- glibc 2.3
-
-- the very latest in tools such as
-
- + gcc either from the current development branch or the gcc 3.2
- from Red Hat Linux 8;
-
- + binutils preferrably from CVS, from H.J. Lu's latest release for
- Linux, or from RHL 8.
-
-
-Compiling glibc should proceed smoothly. But there are a number of
-tests which fail, mostly because some functionality is missing in
-glibc. Ignore those errors. It is only important that all tests in
-nptl/ are passing. Run
-
- make subdirs=nptl check
-
-to run all thread tests.
-
-
-This version features several improvements:
-
-- all APIs are now implemented;
-
-- fork handling has been improved; stacks in the child are freed;
- atfork handlers are removed if they were registered from a module
- which gets unloaded.
-
-- pthread_tryjoin_np and pthread_timedjoin_np are implemented
-
-- TSD handling corrected and optimized.
-
-- many more tests which also test the underlying kernel implementation.
-
-- the build infrastructure has been implemented so that the DSO and
- archives are built in usable form and with correct named.
-
-- libthread_db has been implemented. This is the library which is
- needed by all program which need to get access to internals of
- libpthread (mainly debuggers).
-
-- the CPU clock functions are implemented
-
-
-
-The white paper hasn't yet been updated. It's still available at
-
- http://people.redhat.com/drepper/nptl-design.pdf
-
-
-This release should be ready for some serious testing. I know it is
-hard to compile which I why I'm looking into providing binary RPMs.
-They can be used on non-critical systems. I'll only be able to
-provide binaries for RHL8 based systems, though, and the kernel still
-must be installed separately.
-
-
-The next steps will include:
-
-- write more tests and fix the bugs which are discovered this way
-
-- update the white paper
-
-- write and run more performance tests
-
-- port to IA-64
-
-
-Interested parties are once again invited to join the mailing we
-created:
-
-
- phil-list@redhat.com
-
-Go to
-
- https://listman.redhat.com/mailman/listinfo/phil-list
-
-to subscribe, unsubscribe, or review the archive.
+++ /dev/null
-# Copyright (C) 2002-2014 Free Software Foundation, Inc.
-# This file is part of the GNU C Library.
-# Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
-
-# The GNU C Library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-
-# The GNU C Library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-
-# You should have received a copy of the GNU Lesser General Public
-# License along with the GNU C Library; if not, see
-# <http://www.gnu.org/licenses/>.
-
-# Makeconfig fragment for NPTL add-on.
-# This gets included at the end of the main glibc Makeconfig.
-
-have-thread-library = yes
-
-shared-thread-library = $(common-objpfx)nptl/libpthread_nonshared.a \
- $(common-objpfx)nptl/libpthread.so
-static-thread-library = $(common-objpfx)nptl/libpthread.a
-
-rpath-dirs += nptl
-
-# This makes for ptw-*.? object rules in sysd-rules.
-ptw-CPPFLAGS := -DPTW
-sysd-rules-patterns += ptw-%:%
+++ /dev/null
-# This is a shell script fragment sourced by the main configure script.
-# We're obliged to give here the canonical name that will be used to
-# as a subdirectory to search for in other add-ons' sysdeps trees.
-
-libc_add_on_canonical=nptl
-
-# Only linux configurations support NPTL.
-if test $add_ons_automatic = yes; then
- case "$config_os" in
- *linux*) ;;
- *) libc_add_on= ;;
- esac
-fi
+++ /dev/null
-/* Copyright (C) 2002-2014 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#ifndef _INTERNALTYPES_H
-#define _INTERNALTYPES_H 1
-
-#include <stdint.h>
-
-
-struct pthread_attr
-{
- /* Scheduler parameters and priority. */
- struct sched_param schedparam;
- int schedpolicy;
- /* Various flags like detachstate, scope, etc. */
- int flags;
- /* Size of guard area. */
- size_t guardsize;
- /* Stack handling. */
- void *stackaddr;
- size_t stacksize;
- /* Affinity map. */
- cpu_set_t *cpuset;
- size_t cpusetsize;
-};
-
-#define ATTR_FLAG_DETACHSTATE 0x0001
-#define ATTR_FLAG_NOTINHERITSCHED 0x0002
-#define ATTR_FLAG_SCOPEPROCESS 0x0004
-#define ATTR_FLAG_STACKADDR 0x0008
-#define ATTR_FLAG_OLDATTR 0x0010
-#define ATTR_FLAG_SCHED_SET 0x0020
-#define ATTR_FLAG_POLICY_SET 0x0040
-
-
-/* Mutex attribute data structure. */
-struct pthread_mutexattr
-{
- /* Identifier for the kind of mutex.
-
- Bit 31 is set if the mutex is to be shared between processes.
-
- Bit 0 to 30 contain one of the PTHREAD_MUTEX_ values to identify
- the type of the mutex. */
- int mutexkind;
-};
-
-
-/* Conditional variable attribute data structure. */
-struct pthread_condattr
-{
- /* Combination of values:
-
- Bit 0 : flag whether conditional variable will be sharable between
- processes.
-
- Bit 1-7: clock ID. */
- int value;
-};
-
-
-/* The __NWAITERS field is used as a counter and to house the number
- of bits for other purposes. COND_CLOCK_BITS is the number
- of bits needed to represent the ID of the clock. COND_NWAITERS_SHIFT
- is the number of bits reserved for other purposes like the clock. */
-#define COND_CLOCK_BITS 1
-#define COND_NWAITERS_SHIFT 1
-
-
-/* Read-write lock variable attribute data structure. */
-struct pthread_rwlockattr
-{
- int lockkind;
- int pshared;
-};
-
-
-/* Barrier data structure. */
-struct pthread_barrier
-{
- unsigned int curr_event;
- int lock;
- unsigned int left;
- unsigned int init_count;
- int private;
-};
-
-
-/* Barrier variable attribute data structure. */
-struct pthread_barrierattr
-{
- int pshared;
-};
-
-
-/* Thread-local data handling. */
-struct pthread_key_struct
-{
- /* Sequence numbers. Even numbers indicated vacant entries. Note
- that zero is even. We use uintptr_t to not require padding on
- 32- and 64-bit machines. On 64-bit machines it helps to avoid
- wrapping, too. */
- uintptr_t seq;
-
- /* Destructor for the data. */
- void (*destr) (void *);
-};
-
-/* Check whether an entry is unused. */
-#define KEY_UNUSED(p) (((p) & 1) == 0)
-/* Check whether a key is usable. We cannot reuse an allocated key if
- the sequence counter would overflow after the next destroy call.
- This would mean that we potentially free memory for a key with the
- same sequence. This is *very* unlikely to happen, A program would
- have to create and destroy a key 2^31 times (on 32-bit platforms,
- on 64-bit platforms that would be 2^63). If it should happen we
- simply don't use this specific key anymore. */
-#define KEY_USABLE(p) (((uintptr_t) (p)) < ((uintptr_t) ((p) + 2)))
-
-
-/* Handling of read-write lock data. */
-// XXX For now there is only one flag. Maybe more in future.
-#define RWLOCK_RECURSIVE(rwlock) ((rwlock)->__data.__flags != 0)
-
-
-/* Semaphore variable structure. */
-struct new_sem
-{
- unsigned int value;
- int private;
- unsigned long int nwaiters;
-};
-
-struct old_sem
-{
- unsigned int value;
-};
-
-
-/* Compatibility type for old conditional variable interfaces. */
-typedef struct
-{
- pthread_cond_t *cond;
-} pthread_cond_2_0_t;
-
-#endif /* internaltypes.h */
--- /dev/null
+# Copyright (C) 2002-2014 Free Software Foundation, Inc.
+# This file is part of the GNU C Library.
+# Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
+
+# The GNU C Library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+
+# The GNU C Library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+
+# You should have received a copy of the GNU Lesser General Public
+# License along with the GNU C Library; if not, see
+# <http://www.gnu.org/licenses/>.
+
+# Makeconfig fragment for NPTL add-on.
+# This gets included at the end of the main glibc Makeconfig.
+
+have-thread-library = yes
+
+shared-thread-library = $(common-objpfx)nptl/libpthread_nonshared.a \
+ $(common-objpfx)nptl/libpthread.so
+static-thread-library = $(common-objpfx)nptl/libpthread.a
+
+rpath-dirs += nptl
+
+# This makes for ptw-*.? object rules in sysd-rules.
+ptw-CPPFLAGS := -DPTW
+sysd-rules-patterns += ptw-%:%
correct aio_suspend and lio_listio implementations. */
#include <assert.h>
-#include <pthreadP.h>
+#include <nptl/pthreadP.h>
#include <lowlevellock.h>
#define DONT_NEED_AIO_MISC_COND 1
#include <ldsodefs.h>
#include <bits/stdio-lock.h>
#include <atomic.h>
-#include <pthreadP.h>
+#include <nptl/pthreadP.h>
#include <fork.h>
#include <arch-fork.h>
#include <assert.h>
#include <signal.h>
-#include <pthreadP.h>
+#include <nptl/pthreadP.h>
#include <lowlevellock.h>
#define DONT_NEED_GAI_MISC_COND 1
--- /dev/null
+/* Copyright (C) 2002-2014 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#ifndef _INTERNALTYPES_H
+#define _INTERNALTYPES_H 1
+
+#include <stdint.h>
+
+
+struct pthread_attr
+{
+ /* Scheduler parameters and priority. */
+ struct sched_param schedparam;
+ int schedpolicy;
+ /* Various flags like detachstate, scope, etc. */
+ int flags;
+ /* Size of guard area. */
+ size_t guardsize;
+ /* Stack handling. */
+ void *stackaddr;
+ size_t stacksize;
+ /* Affinity map. */
+ cpu_set_t *cpuset;
+ size_t cpusetsize;
+};
+
+#define ATTR_FLAG_DETACHSTATE 0x0001
+#define ATTR_FLAG_NOTINHERITSCHED 0x0002
+#define ATTR_FLAG_SCOPEPROCESS 0x0004
+#define ATTR_FLAG_STACKADDR 0x0008
+#define ATTR_FLAG_OLDATTR 0x0010
+#define ATTR_FLAG_SCHED_SET 0x0020
+#define ATTR_FLAG_POLICY_SET 0x0040
+
+
+/* Mutex attribute data structure. */
+struct pthread_mutexattr
+{
+ /* Identifier for the kind of mutex.
+
+ Bit 31 is set if the mutex is to be shared between processes.
+
+ Bit 0 to 30 contain one of the PTHREAD_MUTEX_ values to identify
+ the type of the mutex. */
+ int mutexkind;
+};
+
+
+/* Conditional variable attribute data structure. */
+struct pthread_condattr
+{
+ /* Combination of values:
+
+ Bit 0 : flag whether conditional variable will be sharable between
+ processes.
+
+ Bit 1-7: clock ID. */
+ int value;
+};
+
+
+/* The __NWAITERS field is used as a counter and to house the number
+ of bits for other purposes. COND_CLOCK_BITS is the number
+ of bits needed to represent the ID of the clock. COND_NWAITERS_SHIFT
+ is the number of bits reserved for other purposes like the clock. */
+#define COND_CLOCK_BITS 1
+#define COND_NWAITERS_SHIFT 1
+
+
+/* Read-write lock variable attribute data structure. */
+struct pthread_rwlockattr
+{
+ int lockkind;
+ int pshared;
+};
+
+
+/* Barrier data structure. */
+struct pthread_barrier
+{
+ unsigned int curr_event;
+ int lock;
+ unsigned int left;
+ unsigned int init_count;
+ int private;
+};
+
+
+/* Barrier variable attribute data structure. */
+struct pthread_barrierattr
+{
+ int pshared;
+};
+
+
+/* Thread-local data handling. */
+struct pthread_key_struct
+{
+ /* Sequence numbers. Even numbers indicated vacant entries. Note
+ that zero is even. We use uintptr_t to not require padding on
+ 32- and 64-bit machines. On 64-bit machines it helps to avoid
+ wrapping, too. */
+ uintptr_t seq;
+
+ /* Destructor for the data. */
+ void (*destr) (void *);
+};
+
+/* Check whether an entry is unused. */
+#define KEY_UNUSED(p) (((p) & 1) == 0)
+/* Check whether a key is usable. We cannot reuse an allocated key if
+ the sequence counter would overflow after the next destroy call.
+ This would mean that we potentially free memory for a key with the
+ same sequence. This is *very* unlikely to happen, A program would
+ have to create and destroy a key 2^31 times (on 32-bit platforms,
+ on 64-bit platforms that would be 2^63). If it should happen we
+ simply don't use this specific key anymore. */
+#define KEY_USABLE(p) (((uintptr_t) (p)) < ((uintptr_t) ((p) + 2)))
+
+
+/* Handling of read-write lock data. */
+// XXX For now there is only one flag. Maybe more in future.
+#define RWLOCK_RECURSIVE(rwlock) ((rwlock)->__data.__flags != 0)
+
+
+/* Semaphore variable structure. */
+struct new_sem
+{
+ unsigned int value;
+ int private;
+ unsigned long int nwaiters;
+};
+
+struct old_sem
+{
+ unsigned int value;
+};
+
+
+/* Compatibility type for old conditional variable interfaces. */
+typedef struct
+{
+ pthread_cond_t *cond;
+} pthread_cond_2_0_t;
+
+#endif /* internaltypes.h */
#include <setjmp.h>
#include <stddef.h>
-#include <pthreadP.h>
+#include <nptl/pthreadP.h>
extern void __pthread_cleanup_upto (__jmp_buf env, char *targetframe);
#pragma weak __pthread_cleanup_upto
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
-#include "pthreadP.h"
+#include <nptl/pthreadP.h>
#define __pthread_enable_asynccancel __librt_enable_asynccancel
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
-#include <pthreadP.h>
+#include <nptl/pthreadP.h>
#include <sysdep.h>
#define __SETXID_1(cmd, arg1) \
+aarch64/nptl
unix/sysv/linux/generic
unix/sysv/linux/wordsize-64
+alpha/nptl
unix/sysv/linux/wordsize-64
# These supply the ABI compatibility for when long double was double.
ieee754/ldbl-64-128
CPPFLAGS=$OLD_CPPFLAGS
fi
-# Under Linux the NPTL add-on should be available.
-case $add_ons in
- # It is available. Good.
- *nptl*)
- nptl_missing=
- ;;
- *)
- nptl_missing=yes
- ;;
-esac
-
-if test "$nptl_missing"; then
- if test $enable_sanity = yes; then
- echo "\
-*** On GNU/Linux systems it is normal to compile GNU libc with the
-*** \`nptl' add-on. Without that, the library will be
-*** incompatible with normal GNU/Linux systems.
-*** If you really mean to not use this add-on, run configure again
-*** using the extra parameter \`--disable-sanity-checks'."
- exit 1
- else
- echo "\
-*** WARNING: Are you sure you do not want to use the \`nptl'
-*** add-on?"
- fi
-fi
-
if test "$prefix" = "/usr/local" -o "$prefix" = "/usr/local/" -o "$prefix" = "NONE"; then
if test $enable_sanity = yes; then
echo "\
CPPFLAGS=$OLD_CPPFLAGS
fi
-# Under Linux the NPTL add-on should be available.
-case $add_ons in
- # It is available. Good.
- *nptl*)
- nptl_missing=
- ;;
- *)
- nptl_missing=yes
- ;;
-esac
-
-if test "$nptl_missing"; then
- if test $enable_sanity = yes; then
- echo "\
-*** On GNU/Linux systems it is normal to compile GNU libc with the
-*** \`nptl' add-on. Without that, the library will be
-*** incompatible with normal GNU/Linux systems.
-*** If you really mean to not use this add-on, run configure again
-*** using the extra parameter \`--disable-sanity-checks'."
- exit 1
- else
- echo "\
-*** WARNING: Are you sure you do not want to use the \`nptl'
-*** add-on?"
- fi
-fi
-
if test "$prefix" = "/usr/local" -o "$prefix" = "/usr/local/" -o "$prefix" = "NONE"; then
if test $enable_sanity = yes; then
echo "\
unix/sysv/linux/x86
+i386/nptl
--- /dev/null
+i386/i686/nptl
+ia64/nptl
unix/sysv/linux/wordsize-64
--- /dev/null
+microblaze/nptl
--- /dev/null
+powerpc/nptl
+s390/nptl
+
# These supply the ABI compatibility for when long double was double.
ieee754/ldbl-64-128
ieee754/ldbl-opt
--- /dev/null
+sparc/nptl
unix/sysv/linux/x86
unix/sysv/linux/wordsize-64
+x86_64/nptl
--- /dev/null
+x86_64/x32/nptl