[v8,6/8] nptl: Add abilist symbols for C11 threads

Message ID 1517591084-11347-7-git-send-email-adhemerval.zanella@linaro.org
State New
Headers show
Series
  • Add support for ISO C threads.h
Related show

Commit Message

Adhemerval Zanella Feb. 2, 2018, 5:04 p.m.
This patch adds the required abilist symbols for C11 thread support.

Checked with a build for all major ABI (aarch64-linux-gnu, alpha-linux-gnu,
arm-linux-gnueabi, i386-linux-gnu, ia64-linux-gnu, m68k-linux-gnu,
microblaze-linux-gnu [1], mips{64}-linux-gnu, nios2-linux-gnu,
powerpc{64le}-linux-gnu, s390{x}-linux-gnu, sparc{64}-linux-gnu,
tile{pro,gx}-linux-gnu, and x86_64-linux-gnu).

Also ran a full check on aarch64-linux-gnu, x86_64-linux-gnu, i686-linux-gnu,
arm-linux-gnueabhf, and powerpc64le-linux-gnu.

	* sysdeps/unix/sysv/linux/aarch64/libpthread.abilist: Add C11 thread
	symbols.
	* sysdeps/unix/sysv/linux/alpha/libpthread.abilist: Likewise.
	* sysdeps/unix/sysv/linux/arm/libpthread.abilist: Likewise.
	* sysdeps/unix/sysv/linux/hppa/libpthread.abilist: Likewise.
	* sysdeps/unix/sysv/linux/i386/libpthread.abilist: Likewise.
	* sysdeps/unix/sysv/linux/ia64/libpthread.abilist: Likewise.
	* sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist: Likewise.
	* sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist: Likewise.
	* sysdeps/unix/sysv/linux/microblaze/libpthread.abilist: Likewise.
	* sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist: Likewise.
	* sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist: Likewise.
	* sysdeps/unix/sysv/linux/nios2/libpthread.abilist: Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist:
	Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc64/libpthread-le.abilist:
	Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc64/libpthread.abilist:
	Likewise.
	* sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist: Likewise.
	* sysdpes/unix/sysv/linux/s390/s390-32/libpthread.abilist: Likewise.
	* sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist: Likewise.
	* sysdeps/unix/sysv/linux/sh/libpthread.abilist: Likewise.
	* sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist: Likewise.
	* sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist: Likewise.
	* sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libpthread.abilist:
	Likewise.
	* sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libpthread.abilist:
	Likewise.
	* sysdeps/unix/sysv/linux/tile/tilepro/libpthread.abilist: Likewise.
	* sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist: Likewise.
	* sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist: Likewise.
---
 ChangeLog                                          | 33 ++++++++++++++++++++++
 sysdeps/unix/sysv/linux/aarch64/libpthread.abilist | 26 +++++++++++++++++
 sysdeps/unix/sysv/linux/alpha/libpthread.abilist   | 26 +++++++++++++++++
 sysdeps/unix/sysv/linux/arm/libpthread.abilist     | 26 +++++++++++++++++
 sysdeps/unix/sysv/linux/hppa/libpthread.abilist    | 26 +++++++++++++++++
 sysdeps/unix/sysv/linux/i386/libpthread.abilist    | 26 +++++++++++++++++
 sysdeps/unix/sysv/linux/ia64/libpthread.abilist    | 26 +++++++++++++++++
 .../sysv/linux/m68k/coldfire/libpthread.abilist    | 26 +++++++++++++++++
 .../unix/sysv/linux/m68k/m680x0/libpthread.abilist | 26 +++++++++++++++++
 .../unix/sysv/linux/microblaze/libpthread.abilist  | 26 +++++++++++++++++
 .../unix/sysv/linux/mips/mips32/libpthread.abilist | 26 +++++++++++++++++
 .../unix/sysv/linux/mips/mips64/libpthread.abilist | 26 +++++++++++++++++
 sysdeps/unix/sysv/linux/nios2/libpthread.abilist   | 26 +++++++++++++++++
 .../linux/powerpc/powerpc32/libpthread.abilist     | 26 +++++++++++++++++
 .../linux/powerpc/powerpc64/libpthread-le.abilist  | 26 +++++++++++++++++
 .../linux/powerpc/powerpc64/libpthread.abilist     | 26 +++++++++++++++++
 .../unix/sysv/linux/riscv/rv64/libpthread.abilist  | 26 +++++++++++++++++
 .../sysv/linux/s390/s390-32/libpthread.abilist     | 26 +++++++++++++++++
 .../sysv/linux/s390/s390-64/libpthread.abilist     | 26 +++++++++++++++++
 sysdeps/unix/sysv/linux/sh/libpthread.abilist      | 26 +++++++++++++++++
 .../sysv/linux/sparc/sparc32/libpthread.abilist    | 26 +++++++++++++++++
 .../sysv/linux/sparc/sparc64/libpthread.abilist    | 26 +++++++++++++++++
 .../sysv/linux/tile/tilegx32/libpthread.abilist    | 26 +++++++++++++++++
 .../sysv/linux/tile/tilegx64/libpthread.abilist    | 26 +++++++++++++++++
 .../unix/sysv/linux/x86_64/64/libpthread.abilist   | 26 +++++++++++++++++
 .../unix/sysv/linux/x86_64/x32/libpthread.abilist  | 26 +++++++++++++++++
 26 files changed, 683 insertions(+)

Comments

Florian Weimer July 13, 2018, 9:50 a.m. | #1
On 02/02/2018 06:04 PM, Adhemerval Zanella wrote:
> This patch adds the required abilist symbols for C11 thread support.

I manually compared the definitions in the <threads.h> header with the 
C11 standard.  The ABI looks good, with the exception of the once_flag 
definition and the possible change of the error encoding.

Thanks,
Florian
Adhemerval Zanella July 13, 2018, 3:49 p.m. | #2
On 13/07/2018 06:50, Florian Weimer wrote:
> On 02/02/2018 06:04 PM, Adhemerval Zanella wrote:
>> This patch adds the required abilist symbols for C11 thread support.
> 
> I manually compared the definitions in the <threads.h> header with the C11 standard.  The ABI looks good, with the exception of the once_flag definition and the possible change of the error encoding.
> 
> Thanks,
> Florian

Thanks for all the reviews, I have updated my personal branch [1] with
all you required changes:

  - ABI fixes for mips-gnu-linux-soft.
  - pthread_create / pthread_join cast inconsistency.
  - sysdeps/nptl/threads.h moved to nptl/threads.h.
  - thrd_sleep is now a cancellable entrypoint.
  - once_flag and ONCE_FLAG_INIT and __ONCE_ALIGNMENT definition.
  - thread_local guards for C++.
  - TSS_DTOR_ITERATIONS assert check.

I am not sure about the thread error code mapping to errno, it will
required tying POSIX error code to C11 use some internal mechanism
It will most like require generate a platform-specific file 
auto-generated from errno definitions (more build complexity), and
I am not sure if this micro-optimization will really yields any
measurable gain.

If you prefer I can resend the patches on maillist with a different
version tag (I did not sent to avoid clobber the mailist).

[1] https://sourceware.org/git/?p=glibc.git;a=shortlog;h=refs/heads/azanella/c11-threads
Florian Weimer July 13, 2018, 5:49 p.m. | #3
On 07/13/2018 05:49 PM, Adhemerval Zanella wrote:

> Thanks for all the reviews, I have updated my personal branch [1] with
> all you required changes:

Thank you for your patience.  This is looking really good now.

>    - ABI fixes for mips-gnu-linux-soft.

I can confirm that these are fixed.

>    - pthread_create / pthread_join cast inconsistency.
>    - sysdeps/nptl/threads.h moved to nptl/threads.h.
>    - thrd_sleep is now a cancellable entrypoint.
>    - once_flag and ONCE_FLAG_INIT and __ONCE_ALIGNMENT definition.

Should the type be a struct?

I think ONCE_FLAG_INIT needs to be a compound literal, not an 
initializer, at least that's how I read the standard (“which expands to 
a value that can be used to initialize an object”).

>    - thread_local guards for C++.

Missing indentation of the #define.  The manual could mention that for 
C++, C++11 or later needs to be used to get the thread_local keyword 
(not the macro).

>    - TSS_DTOR_ITERATIONS assert check.
> 
> I am not sure about the thread error code mapping to errno, it will
> required tying POSIX error code to C11 use some internal mechanism
> It will most like require generate a platform-specific file
> auto-generated from errno definitions (more build complexity), and
> I am not sure if this micro-optimization will really yields any
> measurable gain.

I'm fine with leaving it as is.

Thanks,
Florian
Adhemerval Zanella July 13, 2018, 6:47 p.m. | #4
On 13/07/2018 14:49, Florian Weimer wrote:
> On 07/13/2018 05:49 PM, Adhemerval Zanella wrote:
> 
>> Thanks for all the reviews, I have updated my personal branch [1] with
>> all you required changes:
> 
> Thank you for your patience.  This is looking really good now.
> 
>>    - ABI fixes for mips-gnu-linux-soft.
> 
> I can confirm that these are fixed.
> 
>>    - pthread_create / pthread_join cast inconsistency.
>>    - sysdeps/nptl/threads.h moved to nptl/threads.h.
>>    - thrd_sleep is now a cancellable entrypoint.
>>    - once_flag and ONCE_FLAG_INIT and __ONCE_ALIGNMENT definition.
> 
> Should the type be a struct?
> 
> I think ONCE_FLAG_INIT needs to be a compound literal, not an initializer, at least that's how I read the standard (“which expands to a value that can be used to initialize an object”).

Right, you are correct, this will prevent ONCE_FLAG_INIT to be wrongly 
used to initialize other objects than once_flag.  I adjust to be a 
struct as well.

> 
>>    - thread_local guards for C++.
> 
> Missing indentation of the #define.  The manual could mention that for C++, C++11 or later needs to be used to get the thread_local keyword (not the macro).

Ack and I added a note on manual about C++11 requirement.

> 
>>    - TSS_DTOR_ITERATIONS assert check.
>>
>> I am not sure about the thread error code mapping to errno, it will
>> required tying POSIX error code to C11 use some internal mechanism
>> It will most like require generate a platform-specific file
>> auto-generated from errno definitions (more build complexity), and
>> I am not sure if this micro-optimization will really yields any
>> measurable gain.
> 
> I'm fine with leaving it as is.
Florian Weimer July 13, 2018, 7:56 p.m. | #5
* Adhemerval Zanella:

>> I think ONCE_FLAG_INIT needs to be a compound literal, not an
>> initializer, at least that's how I read the standard (“which expands
>> to a value that can be used to initialize an object”).
>
> Right, you are correct, this will prevent ONCE_FLAG_INIT to be wrongly 
> used to initialize other objects than once_flag.  I adjust to be a 
> struct as well.

Sorry, I forgot that this needs another __cplusplus conditional.

Something like this:

#ifdef __cplusplus
# define ONCE_FLAG_INIT (once_flag {})
#else
# define ONCE_FLAG_INIT (once_flag) { 0 }
#endif

Compound literals in C++ are a GCC extension.

>>>    - thread_local guards for C++.
>> 
>> Missing indentation of the #define.  The manual could mention that
>> for C++, C++11 or later needs to be used to get the thread_local
>> keyword (not the macro).
>
> Ack and I added a note on manual about C++11 requirement.

Thanks.
Adhemerval Zanella July 13, 2018, 9:09 p.m. | #6
On 13/07/2018 16:56, Florian Weimer wrote:
> * Adhemerval Zanella:
> 
>>> I think ONCE_FLAG_INIT needs to be a compound literal, not an
>>> initializer, at least that's how I read the standard (“which expands
>>> to a value that can be used to initialize an object”).
>>
>> Right, you are correct, this will prevent ONCE_FLAG_INIT to be wrongly 
>> used to initialize other objects than once_flag.  I adjust to be a 
>> struct as well.
> 
> Sorry, I forgot that this needs another __cplusplus conditional.
> 
> Something like this:
> 
> #ifdef __cplusplus
> # define ONCE_FLAG_INIT (once_flag {})
> #else
> # define ONCE_FLAG_INIT (once_flag) { 0 }
> #endif
> 
> Compound literals in C++ are a GCC extension.

Fixed.
Florian Weimer July 14, 2018, 1:50 p.m. | #7
* Adhemerval Zanella:

> On 13/07/2018 16:56, Florian Weimer wrote:
>> * Adhemerval Zanella:
>> 
>>>> I think ONCE_FLAG_INIT needs to be a compound literal, not an
>>>> initializer, at least that's how I read the standard (“which expands
>>>> to a value that can be used to initialize an object”).
>>>
>>> Right, you are correct, this will prevent ONCE_FLAG_INIT to be wrongly 
>>> used to initialize other objects than once_flag.  I adjust to be a 
>>> struct as well.
>> 
>> Sorry, I forgot that this needs another __cplusplus conditional.
>> 
>> Something like this:
>> 
>> #ifdef __cplusplus
>> # define ONCE_FLAG_INIT (once_flag {})
>> #else
>> # define ONCE_FLAG_INIT (once_flag) { 0 }
>> #endif
>> 
>> Compound literals in C++ are a GCC extension.
>
> Fixed.

This looks fine to me now.
Joseph Myers July 18, 2018, 5:40 p.m. | #8
On Fri, 13 Jul 2018, Florian Weimer wrote:

> I think ONCE_FLAG_INIT needs to be a compound literal, not an initializer, at
> least that's how I read the standard (“which expands to a value that can be
> used to initialize an object”).

I think it has to be valid as a static initializer.  Which means it can't 
be a compound literal, because standard C doesn't allow those in static 
initializers.  (I read "value" as meaning "expansion of the macro" not 
"value of an object type".)
Adhemerval Zanella July 18, 2018, 8:02 p.m. | #9
On 18/07/2018 14:40, Joseph Myers wrote:
> On Fri, 13 Jul 2018, Florian Weimer wrote:
> 
>> I think ONCE_FLAG_INIT needs to be a compound literal, not an initializer, at
>> least that's how I read the standard (“which expands to a value that can be
>> used to initialize an object”).
> 
> I think it has to be valid as a static initializer.  Which means it can't 
> be a compound literal, because standard C doesn't allow those in static 
> initializers.  (I read "value" as meaning "expansion of the macro" not 
> "value of an object type".)
> 

Right, we should not enforce the compiler to support compound literal
as a static initializer as GCC does as an extension.  I will change 
back to static initializer.
Florian Weimer July 18, 2018, 9:19 p.m. | #10
* Joseph Myers:

> On Fri, 13 Jul 2018, Florian Weimer wrote:
>
>> I think ONCE_FLAG_INIT needs to be a compound literal, not an initializer, at
>> least that's how I read the standard (“which expands to a value that can be
>> used to initialize an object”).
>
> I think it has to be valid as a static initializer.  Which means it can't 
> be a compound literal, because standard C doesn't allow those in static 
> initializers.  (I read "value" as meaning "expansion of the macro" not 
> "value of an object type".)

Indeed, the standard uses “value” for macro expansion results in other
contexts.  Sorry for the misdirection.

Patch

diff --git a/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist b/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist
index 0cf30ee..c3cecf7 100644
--- a/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist
@@ -224,3 +224,29 @@  GLIBC_2.17 write F
 GLIBC_2.18 GLIBC_2.18 A
 GLIBC_2.18 pthread_getattr_default_np F
 GLIBC_2.18 pthread_setattr_default_np F
+GLIBC_2.28 GLIBC_2.28 A
+GLIBC_2.28 call_once F
+GLIBC_2.28 cnd_broadcast F
+GLIBC_2.28 cnd_destroy F
+GLIBC_2.28 cnd_init F
+GLIBC_2.28 cnd_signal F
+GLIBC_2.28 cnd_timedwait F
+GLIBC_2.28 cnd_wait F
+GLIBC_2.28 mtx_destroy F
+GLIBC_2.28 mtx_init F
+GLIBC_2.28 mtx_lock F
+GLIBC_2.28 mtx_timedlock F
+GLIBC_2.28 mtx_trylock F
+GLIBC_2.28 mtx_unlock F
+GLIBC_2.28 thrd_create F
+GLIBC_2.28 thrd_current F
+GLIBC_2.28 thrd_detach F
+GLIBC_2.28 thrd_equal F
+GLIBC_2.28 thrd_exit F
+GLIBC_2.28 thrd_join F
+GLIBC_2.28 thrd_sleep F
+GLIBC_2.28 thrd_yield F
+GLIBC_2.28 tss_create F
+GLIBC_2.28 tss_delete F
+GLIBC_2.28 tss_get F
+GLIBC_2.28 tss_set F
diff --git a/sysdeps/unix/sysv/linux/alpha/libpthread.abilist b/sysdeps/unix/sysv/linux/alpha/libpthread.abilist
index 7e121d4..d284de9 100644
--- a/sysdeps/unix/sysv/linux/alpha/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/alpha/libpthread.abilist
@@ -216,6 +216,32 @@  GLIBC_2.2.3 GLIBC_2.2.3 A
 GLIBC_2.2.3 pthread_getattr_np F
 GLIBC_2.2.6 GLIBC_2.2.6 A
 GLIBC_2.2.6 __nanosleep F
+GLIBC_2.28 GLIBC_2.28 A
+GLIBC_2.28 call_once F
+GLIBC_2.28 cnd_broadcast F
+GLIBC_2.28 cnd_destroy F
+GLIBC_2.28 cnd_init F
+GLIBC_2.28 cnd_signal F
+GLIBC_2.28 cnd_timedwait F
+GLIBC_2.28 cnd_wait F
+GLIBC_2.28 mtx_destroy F
+GLIBC_2.28 mtx_init F
+GLIBC_2.28 mtx_lock F
+GLIBC_2.28 mtx_timedlock F
+GLIBC_2.28 mtx_trylock F
+GLIBC_2.28 mtx_unlock F
+GLIBC_2.28 thrd_create F
+GLIBC_2.28 thrd_current F
+GLIBC_2.28 thrd_detach F
+GLIBC_2.28 thrd_equal F
+GLIBC_2.28 thrd_exit F
+GLIBC_2.28 thrd_join F
+GLIBC_2.28 thrd_sleep F
+GLIBC_2.28 thrd_yield F
+GLIBC_2.28 tss_create F
+GLIBC_2.28 tss_delete F
+GLIBC_2.28 tss_get F
+GLIBC_2.28 tss_set F
 GLIBC_2.3.2 GLIBC_2.3.2 A
 GLIBC_2.3.2 pthread_cond_broadcast F
 GLIBC_2.3.2 pthread_cond_destroy F
diff --git a/sysdeps/unix/sysv/linux/arm/libpthread.abilist b/sysdeps/unix/sysv/linux/arm/libpthread.abilist
index 91545c1..f2746bd 100644
--- a/sysdeps/unix/sysv/linux/arm/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/arm/libpthread.abilist
@@ -9,6 +9,32 @@  GLIBC_2.12 pthread_setname_np F
 GLIBC_2.18 GLIBC_2.18 A
 GLIBC_2.18 pthread_getattr_default_np F
 GLIBC_2.18 pthread_setattr_default_np F
+GLIBC_2.28 GLIBC_2.28 A
+GLIBC_2.28 call_once F
+GLIBC_2.28 cnd_broadcast F
+GLIBC_2.28 cnd_destroy F
+GLIBC_2.28 cnd_init F
+GLIBC_2.28 cnd_signal F
+GLIBC_2.28 cnd_timedwait F
+GLIBC_2.28 cnd_wait F
+GLIBC_2.28 mtx_destroy F
+GLIBC_2.28 mtx_init F
+GLIBC_2.28 mtx_lock F
+GLIBC_2.28 mtx_timedlock F
+GLIBC_2.28 mtx_trylock F
+GLIBC_2.28 mtx_unlock F
+GLIBC_2.28 thrd_create F
+GLIBC_2.28 thrd_current F
+GLIBC_2.28 thrd_detach F
+GLIBC_2.28 thrd_equal F
+GLIBC_2.28 thrd_exit F
+GLIBC_2.28 thrd_join F
+GLIBC_2.28 thrd_sleep F
+GLIBC_2.28 thrd_yield F
+GLIBC_2.28 tss_create F
+GLIBC_2.28 tss_delete F
+GLIBC_2.28 tss_get F
+GLIBC_2.28 tss_set F
 GLIBC_2.4 GLIBC_2.4 A
 GLIBC_2.4 _IO_flockfile F
 GLIBC_2.4 _IO_ftrylockfile F
diff --git a/sysdeps/unix/sysv/linux/hppa/libpthread.abilist b/sysdeps/unix/sysv/linux/hppa/libpthread.abilist
index a73aa43..7fb95d6 100644
--- a/sysdeps/unix/sysv/linux/hppa/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/hppa/libpthread.abilist
@@ -204,6 +204,32 @@  GLIBC_2.2.3 GLIBC_2.2.3 A
 GLIBC_2.2.3 pthread_getattr_np F
 GLIBC_2.2.6 GLIBC_2.2.6 A
 GLIBC_2.2.6 __nanosleep F
+GLIBC_2.28 GLIBC_2.28 A
+GLIBC_2.28 call_once F
+GLIBC_2.28 cnd_broadcast F
+GLIBC_2.28 cnd_destroy F
+GLIBC_2.28 cnd_init F
+GLIBC_2.28 cnd_signal F
+GLIBC_2.28 cnd_timedwait F
+GLIBC_2.28 cnd_wait F
+GLIBC_2.28 mtx_destroy F
+GLIBC_2.28 mtx_init F
+GLIBC_2.28 mtx_lock F
+GLIBC_2.28 mtx_timedlock F
+GLIBC_2.28 mtx_trylock F
+GLIBC_2.28 mtx_unlock F
+GLIBC_2.28 thrd_create F
+GLIBC_2.28 thrd_current F
+GLIBC_2.28 thrd_detach F
+GLIBC_2.28 thrd_equal F
+GLIBC_2.28 thrd_exit F
+GLIBC_2.28 thrd_join F
+GLIBC_2.28 thrd_sleep F
+GLIBC_2.28 thrd_yield F
+GLIBC_2.28 tss_create F
+GLIBC_2.28 tss_delete F
+GLIBC_2.28 tss_get F
+GLIBC_2.28 tss_set F
 GLIBC_2.3.2 GLIBC_2.3.2 A
 GLIBC_2.3.2 pthread_cond_broadcast F
 GLIBC_2.3.2 pthread_cond_destroy F
diff --git a/sysdeps/unix/sysv/linux/i386/libpthread.abilist b/sysdeps/unix/sysv/linux/i386/libpthread.abilist
index 8f9c325..eea1461 100644
--- a/sysdeps/unix/sysv/linux/i386/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/i386/libpthread.abilist
@@ -216,6 +216,32 @@  GLIBC_2.2.3 GLIBC_2.2.3 A
 GLIBC_2.2.3 pthread_getattr_np F
 GLIBC_2.2.6 GLIBC_2.2.6 A
 GLIBC_2.2.6 __nanosleep F
+GLIBC_2.28 GLIBC_2.28 A
+GLIBC_2.28 call_once F
+GLIBC_2.28 cnd_broadcast F
+GLIBC_2.28 cnd_destroy F
+GLIBC_2.28 cnd_init F
+GLIBC_2.28 cnd_signal F
+GLIBC_2.28 cnd_timedwait F
+GLIBC_2.28 cnd_wait F
+GLIBC_2.28 mtx_destroy F
+GLIBC_2.28 mtx_init F
+GLIBC_2.28 mtx_lock F
+GLIBC_2.28 mtx_timedlock F
+GLIBC_2.28 mtx_trylock F
+GLIBC_2.28 mtx_unlock F
+GLIBC_2.28 thrd_create F
+GLIBC_2.28 thrd_current F
+GLIBC_2.28 thrd_detach F
+GLIBC_2.28 thrd_equal F
+GLIBC_2.28 thrd_exit F
+GLIBC_2.28 thrd_join F
+GLIBC_2.28 thrd_sleep F
+GLIBC_2.28 thrd_yield F
+GLIBC_2.28 tss_create F
+GLIBC_2.28 tss_delete F
+GLIBC_2.28 tss_get F
+GLIBC_2.28 tss_set F
 GLIBC_2.3.2 GLIBC_2.3.2 A
 GLIBC_2.3.2 pthread_cond_broadcast F
 GLIBC_2.3.2 pthread_cond_destroy F
diff --git a/sysdeps/unix/sysv/linux/ia64/libpthread.abilist b/sysdeps/unix/sysv/linux/ia64/libpthread.abilist
index d4c8ded..bca4e1f 100644
--- a/sysdeps/unix/sysv/linux/ia64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/ia64/libpthread.abilist
@@ -204,6 +204,32 @@  GLIBC_2.2.3 GLIBC_2.2.3 A
 GLIBC_2.2.3 pthread_getattr_np F
 GLIBC_2.2.6 GLIBC_2.2.6 A
 GLIBC_2.2.6 __nanosleep F
+GLIBC_2.28 GLIBC_2.28 A
+GLIBC_2.28 call_once F
+GLIBC_2.28 cnd_broadcast F
+GLIBC_2.28 cnd_destroy F
+GLIBC_2.28 cnd_init F
+GLIBC_2.28 cnd_signal F
+GLIBC_2.28 cnd_timedwait F
+GLIBC_2.28 cnd_wait F
+GLIBC_2.28 mtx_destroy F
+GLIBC_2.28 mtx_init F
+GLIBC_2.28 mtx_lock F
+GLIBC_2.28 mtx_timedlock F
+GLIBC_2.28 mtx_trylock F
+GLIBC_2.28 mtx_unlock F
+GLIBC_2.28 thrd_create F
+GLIBC_2.28 thrd_current F
+GLIBC_2.28 thrd_detach F
+GLIBC_2.28 thrd_equal F
+GLIBC_2.28 thrd_exit F
+GLIBC_2.28 thrd_join F
+GLIBC_2.28 thrd_sleep F
+GLIBC_2.28 thrd_yield F
+GLIBC_2.28 tss_create F
+GLIBC_2.28 tss_delete F
+GLIBC_2.28 tss_get F
+GLIBC_2.28 tss_set F
 GLIBC_2.3.2 GLIBC_2.3.2 A
 GLIBC_2.3.2 pthread_cond_broadcast F
 GLIBC_2.3.2 pthread_cond_destroy F
diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist
index 91545c1..f2746bd 100644
--- a/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist
@@ -9,6 +9,32 @@  GLIBC_2.12 pthread_setname_np F
 GLIBC_2.18 GLIBC_2.18 A
 GLIBC_2.18 pthread_getattr_default_np F
 GLIBC_2.18 pthread_setattr_default_np F
+GLIBC_2.28 GLIBC_2.28 A
+GLIBC_2.28 call_once F
+GLIBC_2.28 cnd_broadcast F
+GLIBC_2.28 cnd_destroy F
+GLIBC_2.28 cnd_init F
+GLIBC_2.28 cnd_signal F
+GLIBC_2.28 cnd_timedwait F
+GLIBC_2.28 cnd_wait F
+GLIBC_2.28 mtx_destroy F
+GLIBC_2.28 mtx_init F
+GLIBC_2.28 mtx_lock F
+GLIBC_2.28 mtx_timedlock F
+GLIBC_2.28 mtx_trylock F
+GLIBC_2.28 mtx_unlock F
+GLIBC_2.28 thrd_create F
+GLIBC_2.28 thrd_current F
+GLIBC_2.28 thrd_detach F
+GLIBC_2.28 thrd_equal F
+GLIBC_2.28 thrd_exit F
+GLIBC_2.28 thrd_join F
+GLIBC_2.28 thrd_sleep F
+GLIBC_2.28 thrd_yield F
+GLIBC_2.28 tss_create F
+GLIBC_2.28 tss_delete F
+GLIBC_2.28 tss_get F
+GLIBC_2.28 tss_set F
 GLIBC_2.4 GLIBC_2.4 A
 GLIBC_2.4 _IO_flockfile F
 GLIBC_2.4 _IO_ftrylockfile F
diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist
index 8f9c325..eea1461 100644
--- a/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist
@@ -216,6 +216,32 @@  GLIBC_2.2.3 GLIBC_2.2.3 A
 GLIBC_2.2.3 pthread_getattr_np F
 GLIBC_2.2.6 GLIBC_2.2.6 A
 GLIBC_2.2.6 __nanosleep F
+GLIBC_2.28 GLIBC_2.28 A
+GLIBC_2.28 call_once F
+GLIBC_2.28 cnd_broadcast F
+GLIBC_2.28 cnd_destroy F
+GLIBC_2.28 cnd_init F
+GLIBC_2.28 cnd_signal F
+GLIBC_2.28 cnd_timedwait F
+GLIBC_2.28 cnd_wait F
+GLIBC_2.28 mtx_destroy F
+GLIBC_2.28 mtx_init F
+GLIBC_2.28 mtx_lock F
+GLIBC_2.28 mtx_timedlock F
+GLIBC_2.28 mtx_trylock F
+GLIBC_2.28 mtx_unlock F
+GLIBC_2.28 thrd_create F
+GLIBC_2.28 thrd_current F
+GLIBC_2.28 thrd_detach F
+GLIBC_2.28 thrd_equal F
+GLIBC_2.28 thrd_exit F
+GLIBC_2.28 thrd_join F
+GLIBC_2.28 thrd_sleep F
+GLIBC_2.28 thrd_yield F
+GLIBC_2.28 tss_create F
+GLIBC_2.28 tss_delete F
+GLIBC_2.28 tss_get F
+GLIBC_2.28 tss_set F
 GLIBC_2.3.2 GLIBC_2.3.2 A
 GLIBC_2.3.2 pthread_cond_broadcast F
 GLIBC_2.3.2 pthread_cond_destroy F
diff --git a/sysdeps/unix/sysv/linux/microblaze/libpthread.abilist b/sysdeps/unix/sysv/linux/microblaze/libpthread.abilist
index 00d948b..c6b2d70 100644
--- a/sysdeps/unix/sysv/linux/microblaze/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/libpthread.abilist
@@ -223,3 +223,29 @@  GLIBC_2.18 vfork F
 GLIBC_2.18 wait F
 GLIBC_2.18 waitpid F
 GLIBC_2.18 write F
+GLIBC_2.28 GLIBC_2.28 A
+GLIBC_2.28 call_once F
+GLIBC_2.28 cnd_broadcast F
+GLIBC_2.28 cnd_destroy F
+GLIBC_2.28 cnd_init F
+GLIBC_2.28 cnd_signal F
+GLIBC_2.28 cnd_timedwait F
+GLIBC_2.28 cnd_wait F
+GLIBC_2.28 mtx_destroy F
+GLIBC_2.28 mtx_init F
+GLIBC_2.28 mtx_lock F
+GLIBC_2.28 mtx_timedlock F
+GLIBC_2.28 mtx_trylock F
+GLIBC_2.28 mtx_unlock F
+GLIBC_2.28 thrd_create F
+GLIBC_2.28 thrd_current F
+GLIBC_2.28 thrd_detach F
+GLIBC_2.28 thrd_equal F
+GLIBC_2.28 thrd_exit F
+GLIBC_2.28 thrd_join F
+GLIBC_2.28 thrd_sleep F
+GLIBC_2.28 thrd_yield F
+GLIBC_2.28 tss_create F
+GLIBC_2.28 tss_delete F
+GLIBC_2.28 tss_get F
+GLIBC_2.28 tss_set F
diff --git a/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist b/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist
index 280d99d..ab466e0 100644
--- a/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist
@@ -213,6 +213,32 @@  GLIBC_2.2.3 GLIBC_2.2.3 A
 GLIBC_2.2.3 pthread_getattr_np F
 GLIBC_2.2.6 GLIBC_2.2.6 A
 GLIBC_2.2.6 __nanosleep F
+GLIBC_2.28 GLIBC_2.28 A
+GLIBC_2.28 call_once F
+GLIBC_2.28 cnd_broadcast F
+GLIBC_2.28 cnd_destroy F
+GLIBC_2.28 cnd_init F
+GLIBC_2.28 cnd_signal F
+GLIBC_2.28 cnd_timedwait F
+GLIBC_2.28 cnd_wait F
+GLIBC_2.28 mtx_destroy F
+GLIBC_2.28 mtx_init F
+GLIBC_2.28 mtx_lock F
+GLIBC_2.28 mtx_timedlock F
+GLIBC_2.28 mtx_trylock F
+GLIBC_2.28 mtx_unlock F
+GLIBC_2.28 thrd_create F
+GLIBC_2.28 thrd_current F
+GLIBC_2.28 thrd_detach F
+GLIBC_2.28 thrd_equal F
+GLIBC_2.28 thrd_exit F
+GLIBC_2.28 thrd_join F
+GLIBC_2.28 thrd_sleep F
+GLIBC_2.28 thrd_yield F
+GLIBC_2.28 tss_create F
+GLIBC_2.28 tss_delete F
+GLIBC_2.28 tss_get F
+GLIBC_2.28 tss_set F
 GLIBC_2.3.2 GLIBC_2.3.2 A
 GLIBC_2.3.2 pthread_cond_broadcast F
 GLIBC_2.3.2 pthread_cond_destroy F
diff --git a/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist b/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist
index ad55bdd..382ffd8 100644
--- a/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist
@@ -213,6 +213,32 @@  GLIBC_2.2.3 GLIBC_2.2.3 A
 GLIBC_2.2.3 pthread_getattr_np F
 GLIBC_2.2.6 GLIBC_2.2.6 A
 GLIBC_2.2.6 __nanosleep F
+GLIBC_2.28 GLIBC_2.28 A
+GLIBC_2.28 call_once F
+GLIBC_2.28 cnd_broadcast F
+GLIBC_2.28 cnd_destroy F
+GLIBC_2.28 cnd_init F
+GLIBC_2.28 cnd_signal F
+GLIBC_2.28 cnd_timedwait F
+GLIBC_2.28 cnd_wait F
+GLIBC_2.28 mtx_destroy F
+GLIBC_2.28 mtx_init F
+GLIBC_2.28 mtx_lock F
+GLIBC_2.28 mtx_timedlock F
+GLIBC_2.28 mtx_trylock F
+GLIBC_2.28 mtx_unlock F
+GLIBC_2.28 thrd_create F
+GLIBC_2.28 thrd_current F
+GLIBC_2.28 thrd_detach F
+GLIBC_2.28 thrd_equal F
+GLIBC_2.28 thrd_exit F
+GLIBC_2.28 thrd_join F
+GLIBC_2.28 thrd_sleep F
+GLIBC_2.28 thrd_yield F
+GLIBC_2.28 tss_create F
+GLIBC_2.28 tss_delete F
+GLIBC_2.28 tss_get F
+GLIBC_2.28 tss_set F
 GLIBC_2.3.2 GLIBC_2.3.2 A
 GLIBC_2.3.2 pthread_cond_broadcast F
 GLIBC_2.3.2 pthread_cond_destroy F
diff --git a/sysdeps/unix/sysv/linux/nios2/libpthread.abilist b/sysdeps/unix/sysv/linux/nios2/libpthread.abilist
index a10bbde..6548e25 100644
--- a/sysdeps/unix/sysv/linux/nios2/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/nios2/libpthread.abilist
@@ -221,3 +221,29 @@  GLIBC_2.21 tcdrain F
 GLIBC_2.21 wait F
 GLIBC_2.21 waitpid F
 GLIBC_2.21 write F
+GLIBC_2.28 GLIBC_2.28 A
+GLIBC_2.28 call_once F
+GLIBC_2.28 cnd_broadcast F
+GLIBC_2.28 cnd_destroy F
+GLIBC_2.28 cnd_init F
+GLIBC_2.28 cnd_signal F
+GLIBC_2.28 cnd_timedwait F
+GLIBC_2.28 cnd_wait F
+GLIBC_2.28 mtx_destroy F
+GLIBC_2.28 mtx_init F
+GLIBC_2.28 mtx_lock F
+GLIBC_2.28 mtx_timedlock F
+GLIBC_2.28 mtx_trylock F
+GLIBC_2.28 mtx_unlock F
+GLIBC_2.28 thrd_create F
+GLIBC_2.28 thrd_current F
+GLIBC_2.28 thrd_detach F
+GLIBC_2.28 thrd_equal F
+GLIBC_2.28 thrd_exit F
+GLIBC_2.28 thrd_join F
+GLIBC_2.28 thrd_sleep F
+GLIBC_2.28 thrd_yield F
+GLIBC_2.28 tss_create F
+GLIBC_2.28 tss_delete F
+GLIBC_2.28 tss_get F
+GLIBC_2.28 tss_set F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist
index 14c3a86..5721f0e 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist
@@ -216,6 +216,32 @@  GLIBC_2.2.3 GLIBC_2.2.3 A
 GLIBC_2.2.3 pthread_getattr_np F
 GLIBC_2.2.6 GLIBC_2.2.6 A
 GLIBC_2.2.6 __nanosleep F
+GLIBC_2.28 GLIBC_2.28 A
+GLIBC_2.28 call_once F
+GLIBC_2.28 cnd_broadcast F
+GLIBC_2.28 cnd_destroy F
+GLIBC_2.28 cnd_init F
+GLIBC_2.28 cnd_signal F
+GLIBC_2.28 cnd_timedwait F
+GLIBC_2.28 cnd_wait F
+GLIBC_2.28 mtx_destroy F
+GLIBC_2.28 mtx_init F
+GLIBC_2.28 mtx_lock F
+GLIBC_2.28 mtx_timedlock F
+GLIBC_2.28 mtx_trylock F
+GLIBC_2.28 mtx_unlock F
+GLIBC_2.28 thrd_create F
+GLIBC_2.28 thrd_current F
+GLIBC_2.28 thrd_detach F
+GLIBC_2.28 thrd_equal F
+GLIBC_2.28 thrd_exit F
+GLIBC_2.28 thrd_join F
+GLIBC_2.28 thrd_sleep F
+GLIBC_2.28 thrd_yield F
+GLIBC_2.28 tss_create F
+GLIBC_2.28 tss_delete F
+GLIBC_2.28 tss_get F
+GLIBC_2.28 tss_set F
 GLIBC_2.3.2 GLIBC_2.3.2 A
 GLIBC_2.3.2 pthread_cond_broadcast F
 GLIBC_2.3.2 pthread_cond_destroy F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/libpthread-le.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/libpthread-le.abilist
index 0cf30ee..dceef50 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/libpthread-le.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/libpthread-le.abilist
@@ -224,3 +224,29 @@  GLIBC_2.17 write F
 GLIBC_2.18 GLIBC_2.18 A
 GLIBC_2.18 pthread_getattr_default_np F
 GLIBC_2.18 pthread_setattr_default_np F
+GLIBC_2.27 GLIBC_2.27 A
+GLIBC_2.27 call_once F
+GLIBC_2.27 cnd_broadcast F
+GLIBC_2.27 cnd_destroy F
+GLIBC_2.27 cnd_init F
+GLIBC_2.27 cnd_signal F
+GLIBC_2.27 cnd_timedwait F
+GLIBC_2.27 cnd_wait F
+GLIBC_2.27 mtx_destroy F
+GLIBC_2.27 mtx_init F
+GLIBC_2.27 mtx_lock F
+GLIBC_2.27 mtx_timedlock F
+GLIBC_2.27 mtx_trylock F
+GLIBC_2.27 mtx_unlock F
+GLIBC_2.27 thrd_create F
+GLIBC_2.27 thrd_current F
+GLIBC_2.27 thrd_detach F
+GLIBC_2.27 thrd_equal F
+GLIBC_2.27 thrd_exit F
+GLIBC_2.27 thrd_join F
+GLIBC_2.27 thrd_sleep F
+GLIBC_2.27 thrd_yield F
+GLIBC_2.27 tss_create F
+GLIBC_2.27 tss_delete F
+GLIBC_2.27 tss_get F
+GLIBC_2.27 tss_set F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/libpthread.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/libpthread.abilist
index 464b91a..c9d9b38 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/libpthread.abilist
@@ -9,6 +9,32 @@  GLIBC_2.12 pthread_setname_np F
 GLIBC_2.18 GLIBC_2.18 A
 GLIBC_2.18 pthread_getattr_default_np F
 GLIBC_2.18 pthread_setattr_default_np F
+GLIBC_2.28 GLIBC_2.28 A
+GLIBC_2.28 call_once F
+GLIBC_2.28 cnd_broadcast F
+GLIBC_2.28 cnd_destroy F
+GLIBC_2.28 cnd_init F
+GLIBC_2.28 cnd_signal F
+GLIBC_2.28 cnd_timedwait F
+GLIBC_2.28 cnd_wait F
+GLIBC_2.28 mtx_destroy F
+GLIBC_2.28 mtx_init F
+GLIBC_2.28 mtx_lock F
+GLIBC_2.28 mtx_timedlock F
+GLIBC_2.28 mtx_trylock F
+GLIBC_2.28 mtx_unlock F
+GLIBC_2.28 thrd_create F
+GLIBC_2.28 thrd_current F
+GLIBC_2.28 thrd_detach F
+GLIBC_2.28 thrd_equal F
+GLIBC_2.28 thrd_exit F
+GLIBC_2.28 thrd_join F
+GLIBC_2.28 thrd_sleep F
+GLIBC_2.28 thrd_yield F
+GLIBC_2.28 tss_create F
+GLIBC_2.28 tss_delete F
+GLIBC_2.28 tss_get F
+GLIBC_2.28 tss_set F
 GLIBC_2.3 GLIBC_2.3 A
 GLIBC_2.3 _IO_flockfile F
 GLIBC_2.3 _IO_ftrylockfile F
diff --git a/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist b/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist
index fcc14ed..0e88e95 100644
--- a/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist
@@ -215,3 +215,29 @@  GLIBC_2.27 tcdrain F
 GLIBC_2.27 wait F
 GLIBC_2.27 waitpid F
 GLIBC_2.27 write F
+GLIBC_2.28 GLIBC_2.28 A
+GLIBC_2.28 call_once F
+GLIBC_2.28 cnd_broadcast F
+GLIBC_2.28 cnd_destroy F
+GLIBC_2.28 cnd_init F
+GLIBC_2.28 cnd_signal F
+GLIBC_2.28 cnd_timedwait F
+GLIBC_2.28 cnd_wait F
+GLIBC_2.28 mtx_destroy F
+GLIBC_2.28 mtx_init F
+GLIBC_2.28 mtx_lock F
+GLIBC_2.28 mtx_timedlock F
+GLIBC_2.28 mtx_trylock F
+GLIBC_2.28 mtx_unlock F
+GLIBC_2.28 thrd_create F
+GLIBC_2.28 thrd_current F
+GLIBC_2.28 thrd_detach F
+GLIBC_2.28 thrd_equal F
+GLIBC_2.28 thrd_exit F
+GLIBC_2.28 thrd_join F
+GLIBC_2.28 thrd_sleep F
+GLIBC_2.28 thrd_yield F
+GLIBC_2.28 tss_create F
+GLIBC_2.28 tss_delete F
+GLIBC_2.28 tss_get F
+GLIBC_2.28 tss_set F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist
index 3c5e11a..ea13d4d 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist
@@ -219,6 +219,32 @@  GLIBC_2.2.3 GLIBC_2.2.3 A
 GLIBC_2.2.3 pthread_getattr_np F
 GLIBC_2.2.6 GLIBC_2.2.6 A
 GLIBC_2.2.6 __nanosleep F
+GLIBC_2.28 GLIBC_2.28 A
+GLIBC_2.28 call_once F
+GLIBC_2.28 cnd_broadcast F
+GLIBC_2.28 cnd_destroy F
+GLIBC_2.28 cnd_init F
+GLIBC_2.28 cnd_signal F
+GLIBC_2.28 cnd_timedwait F
+GLIBC_2.28 cnd_wait F
+GLIBC_2.28 mtx_destroy F
+GLIBC_2.28 mtx_init F
+GLIBC_2.28 mtx_lock F
+GLIBC_2.28 mtx_timedlock F
+GLIBC_2.28 mtx_trylock F
+GLIBC_2.28 mtx_unlock F
+GLIBC_2.28 thrd_create F
+GLIBC_2.28 thrd_current F
+GLIBC_2.28 thrd_detach F
+GLIBC_2.28 thrd_equal F
+GLIBC_2.28 thrd_exit F
+GLIBC_2.28 thrd_join F
+GLIBC_2.28 thrd_sleep F
+GLIBC_2.28 thrd_yield F
+GLIBC_2.28 tss_create F
+GLIBC_2.28 tss_delete F
+GLIBC_2.28 tss_get F
+GLIBC_2.28 tss_set F
 GLIBC_2.3.2 GLIBC_2.3.2 A
 GLIBC_2.3.2 pthread_cond_broadcast F
 GLIBC_2.3.2 pthread_cond_destroy F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist
index 83a1fcd..89d0e40 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist
@@ -207,6 +207,32 @@  GLIBC_2.2.3 GLIBC_2.2.3 A
 GLIBC_2.2.3 pthread_getattr_np F
 GLIBC_2.2.6 GLIBC_2.2.6 A
 GLIBC_2.2.6 __nanosleep F
+GLIBC_2.28 GLIBC_2.28 A
+GLIBC_2.28 call_once F
+GLIBC_2.28 cnd_broadcast F
+GLIBC_2.28 cnd_destroy F
+GLIBC_2.28 cnd_init F
+GLIBC_2.28 cnd_signal F
+GLIBC_2.28 cnd_timedwait F
+GLIBC_2.28 cnd_wait F
+GLIBC_2.28 mtx_destroy F
+GLIBC_2.28 mtx_init F
+GLIBC_2.28 mtx_lock F
+GLIBC_2.28 mtx_timedlock F
+GLIBC_2.28 mtx_trylock F
+GLIBC_2.28 mtx_unlock F
+GLIBC_2.28 thrd_create F
+GLIBC_2.28 thrd_current F
+GLIBC_2.28 thrd_detach F
+GLIBC_2.28 thrd_equal F
+GLIBC_2.28 thrd_exit F
+GLIBC_2.28 thrd_join F
+GLIBC_2.28 thrd_sleep F
+GLIBC_2.28 thrd_yield F
+GLIBC_2.28 tss_create F
+GLIBC_2.28 tss_delete F
+GLIBC_2.28 tss_get F
+GLIBC_2.28 tss_set F
 GLIBC_2.3.2 GLIBC_2.3.2 A
 GLIBC_2.3.2 pthread_cond_broadcast F
 GLIBC_2.3.2 pthread_cond_destroy F
diff --git a/sysdeps/unix/sysv/linux/sh/libpthread.abilist b/sysdeps/unix/sysv/linux/sh/libpthread.abilist
index a73aa43..7fb95d6 100644
--- a/sysdeps/unix/sysv/linux/sh/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/sh/libpthread.abilist
@@ -204,6 +204,32 @@  GLIBC_2.2.3 GLIBC_2.2.3 A
 GLIBC_2.2.3 pthread_getattr_np F
 GLIBC_2.2.6 GLIBC_2.2.6 A
 GLIBC_2.2.6 __nanosleep F
+GLIBC_2.28 GLIBC_2.28 A
+GLIBC_2.28 call_once F
+GLIBC_2.28 cnd_broadcast F
+GLIBC_2.28 cnd_destroy F
+GLIBC_2.28 cnd_init F
+GLIBC_2.28 cnd_signal F
+GLIBC_2.28 cnd_timedwait F
+GLIBC_2.28 cnd_wait F
+GLIBC_2.28 mtx_destroy F
+GLIBC_2.28 mtx_init F
+GLIBC_2.28 mtx_lock F
+GLIBC_2.28 mtx_timedlock F
+GLIBC_2.28 mtx_trylock F
+GLIBC_2.28 mtx_unlock F
+GLIBC_2.28 thrd_create F
+GLIBC_2.28 thrd_current F
+GLIBC_2.28 thrd_detach F
+GLIBC_2.28 thrd_equal F
+GLIBC_2.28 thrd_exit F
+GLIBC_2.28 thrd_join F
+GLIBC_2.28 thrd_sleep F
+GLIBC_2.28 thrd_yield F
+GLIBC_2.28 tss_create F
+GLIBC_2.28 tss_delete F
+GLIBC_2.28 tss_get F
+GLIBC_2.28 tss_set F
 GLIBC_2.3.2 GLIBC_2.3.2 A
 GLIBC_2.3.2 pthread_cond_broadcast F
 GLIBC_2.3.2 pthread_cond_destroy F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist
index 7e121d4..d284de9 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist
@@ -216,6 +216,32 @@  GLIBC_2.2.3 GLIBC_2.2.3 A
 GLIBC_2.2.3 pthread_getattr_np F
 GLIBC_2.2.6 GLIBC_2.2.6 A
 GLIBC_2.2.6 __nanosleep F
+GLIBC_2.28 GLIBC_2.28 A
+GLIBC_2.28 call_once F
+GLIBC_2.28 cnd_broadcast F
+GLIBC_2.28 cnd_destroy F
+GLIBC_2.28 cnd_init F
+GLIBC_2.28 cnd_signal F
+GLIBC_2.28 cnd_timedwait F
+GLIBC_2.28 cnd_wait F
+GLIBC_2.28 mtx_destroy F
+GLIBC_2.28 mtx_init F
+GLIBC_2.28 mtx_lock F
+GLIBC_2.28 mtx_timedlock F
+GLIBC_2.28 mtx_trylock F
+GLIBC_2.28 mtx_unlock F
+GLIBC_2.28 thrd_create F
+GLIBC_2.28 thrd_current F
+GLIBC_2.28 thrd_detach F
+GLIBC_2.28 thrd_equal F
+GLIBC_2.28 thrd_exit F
+GLIBC_2.28 thrd_join F
+GLIBC_2.28 thrd_sleep F
+GLIBC_2.28 thrd_yield F
+GLIBC_2.28 tss_create F
+GLIBC_2.28 tss_delete F
+GLIBC_2.28 tss_get F
+GLIBC_2.28 tss_set F
 GLIBC_2.3.2 GLIBC_2.3.2 A
 GLIBC_2.3.2 pthread_cond_broadcast F
 GLIBC_2.3.2 pthread_cond_destroy F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist
index d4c8ded..bca4e1f 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist
@@ -204,6 +204,32 @@  GLIBC_2.2.3 GLIBC_2.2.3 A
 GLIBC_2.2.3 pthread_getattr_np F
 GLIBC_2.2.6 GLIBC_2.2.6 A
 GLIBC_2.2.6 __nanosleep F
+GLIBC_2.28 GLIBC_2.28 A
+GLIBC_2.28 call_once F
+GLIBC_2.28 cnd_broadcast F
+GLIBC_2.28 cnd_destroy F
+GLIBC_2.28 cnd_init F
+GLIBC_2.28 cnd_signal F
+GLIBC_2.28 cnd_timedwait F
+GLIBC_2.28 cnd_wait F
+GLIBC_2.28 mtx_destroy F
+GLIBC_2.28 mtx_init F
+GLIBC_2.28 mtx_lock F
+GLIBC_2.28 mtx_timedlock F
+GLIBC_2.28 mtx_trylock F
+GLIBC_2.28 mtx_unlock F
+GLIBC_2.28 thrd_create F
+GLIBC_2.28 thrd_current F
+GLIBC_2.28 thrd_detach F
+GLIBC_2.28 thrd_equal F
+GLIBC_2.28 thrd_exit F
+GLIBC_2.28 thrd_join F
+GLIBC_2.28 thrd_sleep F
+GLIBC_2.28 thrd_yield F
+GLIBC_2.28 tss_create F
+GLIBC_2.28 tss_delete F
+GLIBC_2.28 tss_get F
+GLIBC_2.28 tss_set F
 GLIBC_2.3.2 GLIBC_2.3.2 A
 GLIBC_2.3.2 pthread_cond_broadcast F
 GLIBC_2.3.2 pthread_cond_destroy F
diff --git a/sysdeps/unix/sysv/linux/tile/tilegx32/libpthread.abilist b/sysdeps/unix/sysv/linux/tile/tilegx32/libpthread.abilist
index d16158f..85af22e 100644
--- a/sysdeps/unix/sysv/linux/tile/tilegx32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/tile/tilegx32/libpthread.abilist
@@ -224,3 +224,29 @@  GLIBC_2.12 write F
 GLIBC_2.18 GLIBC_2.18 A
 GLIBC_2.18 pthread_getattr_default_np F
 GLIBC_2.18 pthread_setattr_default_np F
+GLIBC_2.28 GLIBC_2.28 A
+GLIBC_2.28 call_once F
+GLIBC_2.28 cnd_broadcast F
+GLIBC_2.28 cnd_destroy F
+GLIBC_2.28 cnd_init F
+GLIBC_2.28 cnd_signal F
+GLIBC_2.28 cnd_timedwait F
+GLIBC_2.28 cnd_wait F
+GLIBC_2.28 mtx_destroy F
+GLIBC_2.28 mtx_init F
+GLIBC_2.28 mtx_lock F
+GLIBC_2.28 mtx_timedlock F
+GLIBC_2.28 mtx_trylock F
+GLIBC_2.28 mtx_unlock F
+GLIBC_2.28 thrd_create F
+GLIBC_2.28 thrd_current F
+GLIBC_2.28 thrd_detach F
+GLIBC_2.28 thrd_equal F
+GLIBC_2.28 thrd_exit F
+GLIBC_2.28 thrd_join F
+GLIBC_2.28 thrd_sleep F
+GLIBC_2.28 thrd_yield F
+GLIBC_2.28 tss_create F
+GLIBC_2.28 tss_delete F
+GLIBC_2.28 tss_get F
+GLIBC_2.28 tss_set F
diff --git a/sysdeps/unix/sysv/linux/tile/tilegx64/libpthread.abilist b/sysdeps/unix/sysv/linux/tile/tilegx64/libpthread.abilist
index d16158f..85af22e 100644
--- a/sysdeps/unix/sysv/linux/tile/tilegx64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/tile/tilegx64/libpthread.abilist
@@ -224,3 +224,29 @@  GLIBC_2.12 write F
 GLIBC_2.18 GLIBC_2.18 A
 GLIBC_2.18 pthread_getattr_default_np F
 GLIBC_2.18 pthread_setattr_default_np F
+GLIBC_2.28 GLIBC_2.28 A
+GLIBC_2.28 call_once F
+GLIBC_2.28 cnd_broadcast F
+GLIBC_2.28 cnd_destroy F
+GLIBC_2.28 cnd_init F
+GLIBC_2.28 cnd_signal F
+GLIBC_2.28 cnd_timedwait F
+GLIBC_2.28 cnd_wait F
+GLIBC_2.28 mtx_destroy F
+GLIBC_2.28 mtx_init F
+GLIBC_2.28 mtx_lock F
+GLIBC_2.28 mtx_timedlock F
+GLIBC_2.28 mtx_trylock F
+GLIBC_2.28 mtx_unlock F
+GLIBC_2.28 thrd_create F
+GLIBC_2.28 thrd_current F
+GLIBC_2.28 thrd_detach F
+GLIBC_2.28 thrd_equal F
+GLIBC_2.28 thrd_exit F
+GLIBC_2.28 thrd_join F
+GLIBC_2.28 thrd_sleep F
+GLIBC_2.28 thrd_yield F
+GLIBC_2.28 tss_create F
+GLIBC_2.28 tss_delete F
+GLIBC_2.28 tss_get F
+GLIBC_2.28 tss_set F
diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist
index 85365c0..e02aa58 100644
--- a/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist
@@ -203,6 +203,32 @@  GLIBC_2.2.5 waitpid F
 GLIBC_2.2.5 write F
 GLIBC_2.2.6 GLIBC_2.2.6 A
 GLIBC_2.2.6 __nanosleep F
+GLIBC_2.28 GLIBC_2.28 A
+GLIBC_2.28 call_once F
+GLIBC_2.28 cnd_broadcast F
+GLIBC_2.28 cnd_destroy F
+GLIBC_2.28 cnd_init F
+GLIBC_2.28 cnd_signal F
+GLIBC_2.28 cnd_timedwait F
+GLIBC_2.28 cnd_wait F
+GLIBC_2.28 mtx_destroy F
+GLIBC_2.28 mtx_init F
+GLIBC_2.28 mtx_lock F
+GLIBC_2.28 mtx_timedlock F
+GLIBC_2.28 mtx_trylock F
+GLIBC_2.28 mtx_unlock F
+GLIBC_2.28 thrd_create F
+GLIBC_2.28 thrd_current F
+GLIBC_2.28 thrd_detach F
+GLIBC_2.28 thrd_equal F
+GLIBC_2.28 thrd_exit F
+GLIBC_2.28 thrd_join F
+GLIBC_2.28 thrd_sleep F
+GLIBC_2.28 thrd_yield F
+GLIBC_2.28 tss_create F
+GLIBC_2.28 tss_delete F
+GLIBC_2.28 tss_get F
+GLIBC_2.28 tss_set F
 GLIBC_2.3.2 GLIBC_2.3.2 A
 GLIBC_2.3.2 pthread_cond_broadcast F
 GLIBC_2.3.2 pthread_cond_destroy F
diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist
index 6cd0fc3..30fad02 100644
--- a/sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist
@@ -224,3 +224,29 @@  GLIBC_2.16 write F
 GLIBC_2.18 GLIBC_2.18 A
 GLIBC_2.18 pthread_getattr_default_np F
 GLIBC_2.18 pthread_setattr_default_np F
+GLIBC_2.28 GLIBC_2.28 A
+GLIBC_2.28 call_once F
+GLIBC_2.28 cnd_broadcast F
+GLIBC_2.28 cnd_destroy F
+GLIBC_2.28 cnd_init F
+GLIBC_2.28 cnd_signal F
+GLIBC_2.28 cnd_timedwait F
+GLIBC_2.28 cnd_wait F
+GLIBC_2.28 mtx_destroy F
+GLIBC_2.28 mtx_init F
+GLIBC_2.28 mtx_lock F
+GLIBC_2.28 mtx_timedlock F
+GLIBC_2.28 mtx_trylock F
+GLIBC_2.28 mtx_unlock F
+GLIBC_2.28 thrd_create F
+GLIBC_2.28 thrd_current F
+GLIBC_2.28 thrd_detach F
+GLIBC_2.28 thrd_equal F
+GLIBC_2.28 thrd_exit F
+GLIBC_2.28 thrd_join F
+GLIBC_2.28 thrd_sleep F
+GLIBC_2.28 thrd_yield F
+GLIBC_2.28 tss_create F
+GLIBC_2.28 tss_delete F
+GLIBC_2.28 tss_get F
+GLIBC_2.28 tss_set F