aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorgfleury <gfleury@disroot.org>2025-08-15 20:14:57 +0200
committerSamuel Thibault <samuel.thibault@ens-lyon.org>2025-08-16 01:44:51 +0200
commit36982b0fdbbce231afc8828f53a561196ba3b898 (patch)
treec0556edc8601c3aff2e77e8e492ec493f91e2ef0
parenta901f2599eff6ef8893d677cf9b0adf811d40587 (diff)
downloadglibc-36982b0fdbbce231afc8828f53a561196ba3b898.zip
glibc-36982b0fdbbce231afc8828f53a561196ba3b898.tar.gz
glibc-36982b0fdbbce231afc8828f53a561196ba3b898.tar.bz2
htl: move pthread_exit into libc.
Message-ID: <20250815181500.107433-17-gfleury@disroot.org>
-rw-r--r--htl/Makefile2
-rw-r--r--htl/Versions4
-rw-r--r--htl/forward.c30
-rw-r--r--htl/pt-exit.c9
-rw-r--r--htl/pt-initialize.c1
-rw-r--r--htl/pt-setcancelstate.c2
-rw-r--r--htl/pt-setcanceltype.c2
-rw-r--r--sysdeps/htl/pthread-functions.h3
-rw-r--r--sysdeps/htl/pthreadP.h9
-rw-r--r--sysdeps/mach/hurd/i386/libc.abilist1
-rw-r--r--sysdeps/mach/hurd/i386/libpthread.abilist1
-rw-r--r--sysdeps/mach/hurd/x86_64/libpthread.abilist1
12 files changed, 15 insertions, 50 deletions
diff --git a/htl/Makefile b/htl/Makefile
index 4982409..8530098 100644
--- a/htl/Makefile
+++ b/htl/Makefile
@@ -26,7 +26,6 @@ LCLHDRS :=
libpthread-routines := \
pt-create \
- pt-exit \
pt-initialize \
pt-join \
pt-spin-inlines \
@@ -141,6 +140,7 @@ routines := \
pt-destroy-specific \
pt-detach \
pt-docancel \
+ pt-exit \
pt-getattr \
pt-getconcurrency \
pt-getcpuclockid \
diff --git a/htl/Versions b/htl/Versions
index 322c09f..44af006 100644
--- a/htl/Versions
+++ b/htl/Versions
@@ -58,6 +58,7 @@ libc {
pthread_key_create;
pthread_key_delete;
pthread_kill;
+ pthread_exit;
pthread_mutex_destroy;
pthread_mutex_getprioceiling;
pthread_mutex_init;
@@ -245,6 +246,7 @@ libc {
__pthread_condattr_init;
__pthread_default_condattr;
__pthread_destroy_specific;
+ __pthread_exit;
__pthread_getspecific;
__pthread_key_delete;
__pthread_max_threads;
@@ -297,7 +299,7 @@ libpthread {
pthread_atfork;
- pthread_create; pthread_exit;
+ pthread_create;
pthread_join;
diff --git a/htl/forward.c b/htl/forward.c
index 21acf66..9294d25 100644
--- a/htl/forward.c
+++ b/htl/forward.c
@@ -27,33 +27,3 @@
/* Pointers to the libc functions. */
struct pthread_functions __libc_pthread_functions attribute_hidden;
int __libc_pthread_functions_init attribute_hidden;
-
-
-#define FORWARD2(name, rettype, decl, params, defaction) \
-rettype \
-name decl \
-{ \
- if (!__libc_pthread_functions_init) \
- defaction; \
- \
- return PTHFCT_CALL (ptr_##name, params); \
-}
-
-/* Same as FORWARD2, only without return. */
-#define FORWARD_NORETURN(name, rettype, decl, params, defaction) \
-rettype \
-name decl \
-{ \
- if (!__libc_pthread_functions_init) \
- defaction; \
- \
- PTHFCT_CALL (ptr_##name, params); \
-}
-
-#define FORWARD(name, decl, params, defretval) \
- FORWARD2 (name, int, decl, params, return defretval)
-
-/* Use an alias to avoid warning, as pthread_exit is declared noreturn. */
-FORWARD_NORETURN (__pthread_exit, void, (void *retval), (retval),
- exit (EXIT_SUCCESS))
-strong_alias (__pthread_exit, pthread_exit);
diff --git a/htl/pt-exit.c b/htl/pt-exit.c
index 2aba043..9d331d0 100644
--- a/htl/pt-exit.c
+++ b/htl/pt-exit.c
@@ -25,7 +25,7 @@
#include <pthreadP.h>
#include <atomic.h>
-
+#include <shlib-compat.h>
/* Terminate the current thread and make STATUS available to any
thread that might join it. */
@@ -112,4 +112,9 @@ __pthread_exit (void *status)
abort ();
}
-weak_alias (__pthread_exit, pthread_exit);
+libc_hidden_def (__pthread_exit)
+versioned_symbol (libc, __pthread_exit, pthread_exit, GLIBC_2_21);
+
+#if OTHER_SHLIB_COMPAT (libpthread, GLIBC_2_12, GLIBC_2_21)
+compat_symbol (libpthread, __pthread_exit, pthread_exit, GLIBC_2_12);
+#endif
diff --git a/htl/pt-initialize.c b/htl/pt-initialize.c
index b4e8b15..a4e49ed 100644
--- a/htl/pt-initialize.c
+++ b/htl/pt-initialize.c
@@ -27,7 +27,6 @@
#if IS_IN (libpthread)
static const struct pthread_functions pthread_functions = {
- .ptr___pthread_exit = __pthread_exit,
.ptr__IO_flockfile = _cthreads_flockfile,
.ptr__IO_funlockfile = _cthreads_funlockfile,
.ptr__IO_ftrylockfile = _cthreads_ftrylockfile,
diff --git a/htl/pt-setcancelstate.c b/htl/pt-setcancelstate.c
index 0d5692e..d1f14de 100644
--- a/htl/pt-setcancelstate.c
+++ b/htl/pt-setcancelstate.c
@@ -45,7 +45,7 @@ __pthread_setcancelstate (int state, int *oldstate)
p->cancel_pending = 2;
__pthread_mutex_unlock (&p->cancel_lock);
- if (cancelled && __pthread_exit)
+ if (cancelled)
__pthread_exit (PTHREAD_CANCELED);
return 0;
diff --git a/htl/pt-setcanceltype.c b/htl/pt-setcanceltype.c
index b33931c..73aac5f 100644
--- a/htl/pt-setcanceltype.c
+++ b/htl/pt-setcanceltype.c
@@ -42,7 +42,7 @@ __pthread_setcanceltype (int type, int *oldtype)
cancelled = (p->cancel_state == PTHREAD_CANCEL_ENABLE) && p->cancel_pending && (p->cancel_type == PTHREAD_CANCEL_ASYNCHRONOUS);
__pthread_mutex_unlock (&p->cancel_lock);
- if (cancelled && __pthread_exit)
+ if (cancelled)
__pthread_exit (PTHREAD_CANCELED);
return 0;
diff --git a/sysdeps/htl/pthread-functions.h b/sysdeps/htl/pthread-functions.h
index aec13a6..1fde0ae 100644
--- a/sysdeps/htl/pthread-functions.h
+++ b/sysdeps/htl/pthread-functions.h
@@ -21,8 +21,6 @@
#include <pthread.h>
-void __pthread_exit (void *) __attribute__ ((__noreturn__));
-
void _cthreads_flockfile (FILE *);
void _cthreads_funlockfile (FILE *);
int _cthreads_ftrylockfile (FILE *);
@@ -32,7 +30,6 @@ int _cthreads_ftrylockfile (FILE *);
so if possible avoid breaking it and append new hooks to the end. */
struct pthread_functions
{
- void (*ptr___pthread_exit) (void *) __attribute__ ((__noreturn__));
void (*ptr__IO_flockfile) (FILE *);
void (*ptr__IO_funlockfile) (FILE *);
int (*ptr__IO_ftrylockfile) (FILE *);
diff --git a/sysdeps/htl/pthreadP.h b/sysdeps/htl/pthreadP.h
index 98850e9..e0f0f7d 100644
--- a/sysdeps/htl/pthreadP.h
+++ b/sysdeps/htl/pthreadP.h
@@ -182,6 +182,7 @@ void __cthread_detach (__cthread_t);
int __pthread_detach (pthread_t __threadp);
libc_hidden_proto (__pthread_detach)
void __pthread_exit (void *value) __attribute__ ((__noreturn__));
+libc_hidden_proto (__pthread_exit)
int __pthread_join (pthread_t, void **);
int __cthread_keycreate (__cthread_key_t *);
int __cthread_getspecific (__cthread_key_t, void **);
@@ -233,14 +234,6 @@ libc_hidden_proto (__pthread_get_cleanup_stack)
hidden_proto (__pthread_create)
#endif
-#if !defined(__NO_WEAK_PTHREAD_ALIASES) && !IS_IN (libpthread)
-# ifdef weak_extern
-weak_extern (__pthread_exit)
-# else
-# pragma weak __pthread_exit
-# endif
-#endif
-
#define ASSERT_TYPE_SIZE(type, size) \
_Static_assert (sizeof (type) == size, \
"sizeof (" #type ") != " #size)
diff --git a/sysdeps/mach/hurd/i386/libc.abilist b/sysdeps/mach/hurd/i386/libc.abilist
index da2ad4a..2ec557b 100644
--- a/sysdeps/mach/hurd/i386/libc.abilist
+++ b/sysdeps/mach/hurd/i386/libc.abilist
@@ -75,6 +75,7 @@ GLIBC_2.12 pthread_condattr_setclock F
GLIBC_2.12 pthread_condattr_setpshared F
GLIBC_2.12 pthread_detach F
GLIBC_2.12 pthread_equal F
+GLIBC_2.12 pthread_exit F
GLIBC_2.12 pthread_getattr_np F
GLIBC_2.12 pthread_getconcurrency F
GLIBC_2.12 pthread_getcpuclockid F
diff --git a/sysdeps/mach/hurd/i386/libpthread.abilist b/sysdeps/mach/hurd/i386/libpthread.abilist
index 094f7de..3f3c17c 100644
--- a/sysdeps/mach/hurd/i386/libpthread.abilist
+++ b/sysdeps/mach/hurd/i386/libpthread.abilist
@@ -19,7 +19,6 @@ GLIBC_2.12 ftrylockfile F
GLIBC_2.12 funlockfile F
GLIBC_2.12 pthread_atfork F
GLIBC_2.12 pthread_create F
-GLIBC_2.12 pthread_exit F
GLIBC_2.12 pthread_join F
GLIBC_2.12 pthread_spin_destroy F
GLIBC_2.12 pthread_spin_init F
diff --git a/sysdeps/mach/hurd/x86_64/libpthread.abilist b/sysdeps/mach/hurd/x86_64/libpthread.abilist
index 926d31b..6dfca3f 100644
--- a/sysdeps/mach/hurd/x86_64/libpthread.abilist
+++ b/sysdeps/mach/hurd/x86_64/libpthread.abilist
@@ -37,7 +37,6 @@ GLIBC_2.38 mtx_trylock F
GLIBC_2.38 mtx_unlock F
GLIBC_2.38 pthread_clockjoin_np F
GLIBC_2.38 pthread_create F
-GLIBC_2.38 pthread_exit F
GLIBC_2.38 pthread_hurd_cond_timedwait_np F
GLIBC_2.38 pthread_hurd_cond_wait_np F
GLIBC_2.38 pthread_join F