Use STB_SECONDARY binding on pthread functions in libc so that they will
be preempted by definitions in libpthread at link-time as well as at
run-time.
* csu/libc-tls.c (__pthread_initialize_minimal): Mark it
secondary if HAVE_ASM_SECONDARY_DIRECTIVE is defined.
* misc/error.c (error): Replace pthread_setcancelstate with
__pthread_setcancelstate.
(error_at_line): Likewise.
* posix/wordexp.c (parse_comm): Likewise.
* stdlib/fmtmsg.c (fmtmsg): Likewise.
* nptl/Makefile:
(routines): Add libc-pthread-secondary.
(CFLAGS-libc-pthread-secondary.c): New.
* nptl/Versions [HAVE_ASM_SECONDARY_DIRECTIVE] (libc:GLIBC_2.0):
Add pthread_once.
[HAVE_ASM_SECONDARY_DIRECTIVE] (libc:GLIBC_PRIVATE): Add
_pthread_cleanup_pop_restore, _pthread_cleanup_push_defer,
__pthread_getspecific, __pthread_setspecific,
__pthread_key_create, __pthread_mutex_lock,
__pthread_mutex_unlock, __pthread_once,
__pthread_rwlock_rdlock, __pthread_rwlock_wrlock,
__pthread_rwlock_unlock and __pthread_unwind.
[HAVE_ASM_SECONDARY_DIRECTIVE] (libpthread:GLIBC_PRIVATE):
Likewise.
* cleanup_defer_compat.c: Include <shlib-compat.h>.
Add GLIBC_2_0 and GLIBC_PRIVATE versions for
_pthread_cleanup_pop_restore and _pthread_cleanup_push_defer.
* nptl/forward.c [HAVE_ASM_SECONDARY_DIRECTIVE] (FORWARD2): New.
(FORWARD_NORETURN): Likewise.
(pthread_setcancelstate): Renamed to ...
(__pthread_setcancelstate): This.
(pthread_setcancelstate): Add an alias.
* nptl/libc-pthread-secondary.c: New file.
* nptl/nptl-init.c (pthread_functions): Don't include secondary
pthread functions in libc if HAVE_ASM_SECONDARY_DIRECTIVE is
defined. Replace ptr_pthread_setcancelstate with
ptr___pthread_setcancelstate.
* sysdeps/nptl/pthread-functions.h (pthread_functions): Likewise.
* nptl/pthread_getspecific.c: Include <shlib-compat.h>.
Add GLIBC_2_0 and GLIBC_PRIVATE versions for
__pthread_getspecific.
* nptl/pthread_key_create.c: Include <shlib-compat.h>.
Add GLIBC_2_0 and GLIBC_PRIVATE versions for
__pthread_key_create.
* nptl/pthread_mutex_lock.c: Include <shlib-compat.h>.
Add GLIBC_2_0 and GLIBC_PRIVATE versions for
__pthread_mutex_lock.
* nptl/pthread_mutex_unlock.c: Include <shlib-compat.h>.
Add GLIBC_2_0 and GLIBC_PRIVATE versions for
__pthread_mutex_unlock.
* nptl/pthread_once.c: Include <shlib-compat.h>.
Add GLIBC_2_0 and GLIBC_PRIVATE versions for
__pthread_once.
* nptl/pthread_rwlock_rdlock.c: Include <shlib-compat.h>.
Add GLIBC_2_0 and GLIBC_PRIVATE versions for
__pthread_rwlock_rdlock.
* nptl/pthread_rwlock_unlock.c: Include <shlib-compat.h>.
Add GLIBC_2_0 and GLIBC_PRIVATE versions for
__pthread_rwlock_unlock.
* nptl/pthread_rwlock_wrlock.c: Include <shlib-compat.h>.
Add GLIBC_2_0 and GLIBC_PRIVATE versions for
__pthread_rwlock_wrlock.
* nptl/pthread_setspecific.c: Include <shlib-compat.h>.
Add GLIBC_2_0 and GLIBC_PRIVATE versions for
__pthread_setspecific.
* nptl/pthreadP.h (__pthread_unwind): Don't mark it weak if
HAVE_ASM_SECONDARY_DIRECTIVE is defined.
(__pthread_cond_broadcast_2_0): Declare only if not in libc.
(__pthread_cond_destroy_2_0): Likewise.
(__pthread_cond_init_2_0): Likewise.
(__pthread_cond_signal_2_0): Likewise.
(__pthread_cond_timedwait_2_0): Likewise.
(__pthread_cond_wait_2_0): Likewise.
* scripts/abilist.awk: Support secondary symbols.
* sysdeps/generic/localplt.data: Add __pthread_getspecific,
__pthread_key_create, __pthread_once, __pthread_rwlock_rdlock,
__pthread_rwlock_wrlock, __pthread_rwlock_unlock,
__pthread_setcancelstate, __pthread_setspecific,
__pthread_unwind. _pthread_cleanup_pop_restore and
_pthread_cleanup_push_defer.
* sysdeps/unix/sysv/linux/i386/localplt.data: Likewise.
* sysdeps/x86_64/localplt.data: Likewise.
* sysdeps/nptl/bits/libc-lockP.h (PTFAVAIL): Defined as 1 if
HAVE_ASM_SECONDARY_DIRECTIVE is defined.
(__libc_maybe_call): Always call FUNC if
HAVE_ASM_SECONDARY_DIRECTIVE is defined.
(__libc_ptf_call): Likewise.
(__libc_ptf_call_always): Likewise.
(__pthread_mutex_init): Don't mark it weak if
HAVE_ASM_SECONDARY_DIRECTIVE is defined.
(__pthread_mutex_destroy): Likewise.
(__pthread_mutex_lock): Likewise.
(__pthread_mutex_trylock): Likewise.
(__pthread_mutex_unlock): Likewise.
(__pthread_mutexattr_init): Likewise.
(__pthread_mutexattr_destroy): Likewise.
(__pthread_mutexattr_settype): Likewise.
(__pthread_rwlock_destroy): Likewise.
(__pthread_rwlock_rdlock): Likewise.
(__pthread_rwlock_tryrdlock): Likewise.
(__pthread_rwlock_wrlock): Likewise.
(__pthread_rwlock_trywrlock): Likewise.
(__pthread_rwlock_unlock): Likewise.
(__pthread_key_create): Likewise.
(__pthread_setspecific): Likewise.
(__pthread_getspecific): Likewise.
(__pthread_once): Likewise.
(__pthread_initialize): Likewise.
(__pthread_atfork): Likewise.
(_pthread_cleanup_push_defer): Likewise.
(_pthread_cleanup_pop_restore): Likewise.
(__pthread_setcancelstate): New prototype.
(pthread_setcancelstate): Renamed to ...
(__pthread_setcancelstate): This. Don't mark it weak if
HAVE_ASM_SECONDARY_DIRECTIVE is defined.
* sysdeps/nptl/jmp-unwind.c: Include <bits/libc-lock.h>
instead of <nptl/pthreadP.h>.
(__pthread_cleanup_upto): Don't mark it weak if
HAVE_ASM_SECONDARY_DIRECTIVE is defined.
(_longjmp_unwind): Use __libc_ptf_call.
* sysdeps/unix/sysv/linux/s390/jmp-unwind.c: Likewise.
* sysdeps/unix/sysv/linux/fatal-prepare.h (FATAL_PREPARE): Always
call __pthread_setcancelstate if HAVE_ASM_SECONDARY_DIRECTIVE is
defined. Replace pthread_setcancelstate with
__pthread_setcancelstate.
* sysdeps/unix/sysv/linux/i386/libc.abilist: Add pthread_once.
* sysdeps/unix/sysv/linux/x86_64/64/libc.abilist: Likewise.
* sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist: Likewise.
* sysdeps/unix/sysv/linux/i386/i486/libc-lowlevellock.S: Make
__lll_lock_wait_private and __lll_unlock_wake_private weak in
libc.a.
* sysdeps/unix/sysv/linux/x86_64/libc-lowlevellock.S: Likewise.
* sysdeps/unix/sysv/linux/x86_64/cancellation.S (__pthread_unwind):
Don't mark it weak if HAVE_ASM_SECONDARY_DIRECTIVE is defined.
<regexp.h> (not to be confused with <regex.h>) is an obsolete and
frankly horrible regular expression-matching API. It was part of SVID
but was withdrawn in Issue 5 (for reference, we're on Issue 7 now).
It doesn't do anything you can't do with <regex.h>, and using it
involves defining a bunch of macros before including the header.
Moreover, the code in regexp.h that uses those macros has been buggy
since its creation (in 1996) and no one has noticed, which indicates
to me that there are no users. (Specifically, RETURN() is used in a
whole bunch of cases where it should have been ERROR().)
The header is given a warning and marked deprecated for 2.22.