+2017-12-20 Florian Weimer <fweimer@redhat.com>
+
+ [BZ #22635]
+ nptl: Provide full implementation of pthread_self in libc.so.
+ * nptl/Makefile (routines): Add pthread_self.
+ (libpthread-routines): Replace pthread_self with
+ compat-pthread_self.
+ * nptl/forward.c (pthread_self): Remove.
+ * nptl/nptl-init.c (pthread_functions): Do not initialize
+ ptr_pthread_self.
+ * nptl/pthread_self.c (pthread_self): Remove weak alias.
+ * nptl/compat-pthread_self.c: New file.
+ * sysdeps/nptl/pthread-functions.h (struct pthread_functions):
+ Remove ptr_pthread_self.
+
2017-12-19 Arnold D. Robbins <arnold@skeeve.com>
* posix/regcomp.c: Fix spelling in comments.
routines = alloca_cutoff forward libc-lowlevellock libc-cancellation \
libc-cleanup libc_pthread_init libc_multiple_threads \
- register-atfork unregister-atfork
+ register-atfork unregister-atfork pthread_self
shared-only-routines = forward
# We need to provide certain routines for compatibility with existing
libpthread-routines = nptl-init vars events version pt-interp \
pthread_create pthread_exit pthread_detach \
pthread_join pthread_tryjoin pthread_timedjoin \
- pthread_self pthread_equal pthread_yield \
+ compat-pthread_self pthread_equal pthread_yield \
pthread_getconcurrency pthread_setconcurrency \
pthread_getschedparam pthread_setschedparam \
pthread_setschedprio \
--- /dev/null
+/* Compatibility version of pthread_self in libpthread.
+ Copyright (C) 2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ 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/>. */
+
+/* Compatibility version of pthread_self for old binaries which link
+ directly against libpthread's version. */
+
+#include <shlib-compat.h>
+
+#if SHLIB_COMPAT (libpthread, GLIBC_2_0, GLIBC_2_27)
+# include "pthread_self.c"
+compat_symbol (libpthread, pthread_self, pthread_self, GLIBC_2_0);
+#endif
FORWARD (pthread_mutex_unlock, (pthread_mutex_t *mutex), (mutex), 0)
-
-FORWARD2 (pthread_self, pthread_t, (void), (), return 0)
-
-
FORWARD (__pthread_setcancelstate, (int state, int *oldstate),
(state, oldstate), 0)
strong_alias (__pthread_setcancelstate, pthread_setcancelstate)
.ptr_pthread_mutex_init = __pthread_mutex_init,
.ptr_pthread_mutex_lock = __pthread_mutex_lock,
.ptr_pthread_mutex_unlock = __pthread_mutex_unlock,
- .ptr_pthread_self = __pthread_self,
.ptr___pthread_setcancelstate = __pthread_setcancelstate,
.ptr_pthread_setcanceltype = __pthread_setcanceltype,
.ptr___pthread_cleanup_upto = __pthread_cleanup_upto,
#include "pthreadP.h"
#include <tls.h>
-
pthread_t
-__pthread_self (void)
+pthread_self (void)
{
return (pthread_t) THREAD_SELF;
}
-weak_alias (__pthread_self, pthread_self)
const pthread_mutexattr_t *);
int (*ptr_pthread_mutex_lock) (pthread_mutex_t *);
int (*ptr_pthread_mutex_unlock) (pthread_mutex_t *);
- pthread_t (*ptr_pthread_self) (void);
int (*ptr___pthread_setcancelstate) (int, int *);
int (*ptr_pthread_setcanceltype) (int, int *);
void (*ptr___pthread_cleanup_upto) (__jmp_buf, char *);