public inbox for libc-alpha@sourceware.org
 help / color / mirror / Atom feed
From: Adhemerval Zanella <adhemerval.zanella@linaro.org>
To: Florian Weimer <fweimer@redhat.com>, libc-alpha@sourceware.org
Subject: Re: [PATCH 30/34] Linux: Move timer_create, timer_delete from librt to libc
Date: Thu, 24 Jun 2021 14:18:02 -0300	[thread overview]
Message-ID: <1bc7abd8-8021-61f4-9c07-8c22af35e1a5@linaro.org> (raw)
In-Reply-To: <0df38f8461e28c4f6bbec50cce523f9e7888403a.1623956058.git.fweimer@redhat.com>



On 17/06/2021 15:59, Florian Weimer via Libc-alpha wrote:
> The symbols were moved using scripts/move-symbol-to-libc.py.
> 
> timer_create and timer_delete are tied together via the int/timer_t
> compatibility code.  The way the ABI intransition is implemented
> is changed with this commit: the implementation is now consolidated
> in one file with a TIMER_T_WAS_INT_COMPAT check.

LGTM, thanks. There is only a nit below.

Reviewed-by: Adhemerval Zanella  <adhemerval.zanella@linaro.org>

> ---
>  rt/Makefile                                   |  4 +-
>  rt/Versions                                   | 26 ++++---
>  sysdeps/unix/sysv/linux/Versions              |  5 ++
>  sysdeps/unix/sysv/linux/aarch64/libc.abilist  |  4 ++
>  sysdeps/unix/sysv/linux/aarch64/librt.abilist |  2 -
>  sysdeps/unix/sysv/linux/alpha/Versions        |  2 +-
>  sysdeps/unix/sysv/linux/alpha/libc.abilist    |  6 ++
>  sysdeps/unix/sysv/linux/alpha/librt.abilist   |  4 --
>  sysdeps/unix/sysv/linux/alpha/timer_create.c  |  1 -
>  sysdeps/unix/sysv/linux/alpha/timer_delete.c  |  1 -
>  sysdeps/unix/sysv/linux/arc/libc.abilist      |  4 ++
>  sysdeps/unix/sysv/linux/arc/librt.abilist     |  2 -
>  sysdeps/unix/sysv/linux/arm/be/libc.abilist   |  4 ++
>  sysdeps/unix/sysv/linux/arm/be/librt.abilist  |  2 -
>  sysdeps/unix/sysv/linux/arm/le/libc.abilist   |  4 ++
>  sysdeps/unix/sysv/linux/arm/le/librt.abilist  |  2 -
>  sysdeps/unix/sysv/linux/csky/libc.abilist     |  4 ++
>  sysdeps/unix/sysv/linux/csky/librt.abilist    |  2 -
>  sysdeps/unix/sysv/linux/hppa/libc.abilist     |  4 ++
>  sysdeps/unix/sysv/linux/hppa/librt.abilist    |  2 -
>  sysdeps/unix/sysv/linux/i386/libc.abilist     |  4 ++
>  sysdeps/unix/sysv/linux/i386/librt.abilist    |  2 -
>  sysdeps/unix/sysv/linux/ia64/Versions         |  2 +-
>  sysdeps/unix/sysv/linux/ia64/libc.abilist     |  6 ++
>  sysdeps/unix/sysv/linux/ia64/librt.abilist    |  4 --
>  sysdeps/unix/sysv/linux/ia64/timer_create.c   |  1 -
>  sysdeps/unix/sysv/linux/ia64/timer_delete.c   |  1 -
>  sysdeps/unix/sysv/linux/kernel-posix-timers.h | 10 +++
>  .../sysv/linux/m68k/coldfire/libc.abilist     |  4 ++
>  .../sysv/linux/m68k/coldfire/librt.abilist    |  2 -
>  .../unix/sysv/linux/m68k/m680x0/libc.abilist  |  4 ++
>  .../unix/sysv/linux/m68k/m680x0/librt.abilist |  2 -
>  .../sysv/linux/microblaze/be/libc.abilist     |  4 ++
>  .../sysv/linux/microblaze/be/librt.abilist    |  2 -
>  .../sysv/linux/microblaze/le/libc.abilist     |  4 ++
>  .../sysv/linux/microblaze/le/librt.abilist    |  2 -
>  .../sysv/linux/mips/mips32/fpu/libc.abilist   |  4 ++
>  .../unix/sysv/linux/mips/mips32/librt.abilist |  2 -
>  .../sysv/linux/mips/mips32/nofpu/libc.abilist |  4 ++
>  .../sysv/linux/mips/mips64/n32/libc.abilist   |  4 ++
>  .../sysv/linux/mips/mips64/n32/librt.abilist  |  2 -
>  .../sysv/linux/mips/mips64/n64/libc.abilist   |  4 ++
>  .../sysv/linux/mips/mips64/n64/librt.abilist  |  2 -
>  sysdeps/unix/sysv/linux/nios2/libc.abilist    |  4 ++
>  sysdeps/unix/sysv/linux/nios2/librt.abilist   |  2 -
>  .../linux/powerpc/powerpc32/fpu/libc.abilist  |  4 ++
>  .../linux/powerpc/powerpc32/librt.abilist     |  2 -
>  .../powerpc/powerpc32/nofpu/libc.abilist      |  4 ++
>  .../sysv/linux/powerpc/powerpc64/Versions     |  2 +-
>  .../linux/powerpc/powerpc64/be/libc.abilist   |  6 ++
>  .../linux/powerpc/powerpc64/be/librt.abilist  |  4 --
>  .../linux/powerpc/powerpc64/le/libc.abilist   |  4 ++
>  .../linux/powerpc/powerpc64/le/librt.abilist  |  2 -
>  .../linux/powerpc/powerpc64/timer_create.c    |  1 -
>  .../linux/powerpc/powerpc64/timer_delete.c    |  1 -
>  .../unix/sysv/linux/riscv/rv32/libc.abilist   |  4 ++
>  .../unix/sysv/linux/riscv/rv32/librt.abilist  |  2 -
>  .../unix/sysv/linux/riscv/rv64/libc.abilist   |  4 ++
>  .../unix/sysv/linux/riscv/rv64/librt.abilist  |  2 -
>  .../unix/sysv/linux/s390/s390-32/libc.abilist |  4 ++
>  .../sysv/linux/s390/s390-32/librt.abilist     |  2 -
>  sysdeps/unix/sysv/linux/s390/s390-64/Versions |  2 +-
>  .../unix/sysv/linux/s390/s390-64/libc.abilist |  6 ++
>  .../sysv/linux/s390/s390-64/librt.abilist     |  4 --
>  .../sysv/linux/s390/s390-64/timer_create.c    |  1 -
>  .../sysv/linux/s390/s390-64/timer_delete.c    |  1 -
>  sysdeps/unix/sysv/linux/sh/be/libc.abilist    |  4 ++
>  sysdeps/unix/sysv/linux/sh/be/librt.abilist   |  2 -
>  sysdeps/unix/sysv/linux/sh/le/libc.abilist    |  4 ++
>  sysdeps/unix/sysv/linux/sh/le/librt.abilist   |  2 -
>  .../sysv/linux/sparc/sparc32/libc.abilist     |  4 ++
>  .../sysv/linux/sparc/sparc32/librt.abilist    |  2 -
>  .../unix/sysv/linux/sparc/sparc64/Versions    |  2 +-
>  .../sysv/linux/sparc/sparc64/libc.abilist     |  6 ++
>  .../sysv/linux/sparc/sparc64/librt.abilist    |  4 --
>  .../sysv/linux/sparc/sparc64/timer_create.c   |  1 -
>  .../sysv/linux/sparc/sparc64/timer_delete.c   |  1 -
>  sysdeps/unix/sysv/linux/timer_create.c        | 69 +++++++++++++++----
>  sysdeps/unix/sysv/linux/timer_delete.c        | 46 ++++++++++---
>  .../unix/sysv/linux/x86_64/64/libc.abilist    |  6 ++
>  .../unix/sysv/linux/x86_64/64/librt.abilist   |  4 --
>  sysdeps/unix/sysv/linux/x86_64/Versions       |  2 +-
>  sysdeps/unix/sysv/linux/x86_64/compat-timer.h |  8 ---
>  sysdeps/unix/sysv/linux/x86_64/timer_create.c | 65 -----------------
>  sysdeps/unix/sysv/linux/x86_64/timer_delete.c | 44 ------------
>  .../unix/sysv/linux/x86_64/timer_getoverr.c   |  2 +-
>  .../unix/sysv/linux/x86_64/timer_gettime.c    |  2 +-
>  .../unix/sysv/linux/x86_64/timer_settime.c    |  2 +-
>  .../unix/sysv/linux/x86_64/x32/libc.abilist   |  4 ++
>  .../unix/sysv/linux/x86_64/x32/librt.abilist  |  2 -
>  90 files changed, 275 insertions(+), 242 deletions(-)
>  delete mode 100644 sysdeps/unix/sysv/linux/alpha/timer_create.c
>  delete mode 100644 sysdeps/unix/sysv/linux/alpha/timer_delete.c
>  delete mode 100644 sysdeps/unix/sysv/linux/ia64/timer_create.c
>  delete mode 100644 sysdeps/unix/sysv/linux/ia64/timer_delete.c
>  delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc64/timer_create.c
>  delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc64/timer_delete.c
>  delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-64/timer_create.c
>  delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-64/timer_delete.c
>  delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc64/timer_create.c
>  delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc64/timer_delete.c
>  delete mode 100644 sysdeps/unix/sysv/linux/x86_64/timer_create.c
>  delete mode 100644 sysdeps/unix/sysv/linux/x86_64/timer_delete.c
> 
> diff --git a/rt/Makefile b/rt/Makefile
> index bd9d31b985..d2ff0221c7 100644
> --- a/rt/Makefile
> +++ b/rt/Makefile
> @@ -30,8 +30,6 @@ routines = \
>  
>  librt-routines = \
>    librt-compat \
> -  timer_create \
> -  timer_delete \
>    timer_getoverr \
>    timer_gettime \
>    timer_settime \
> @@ -63,6 +61,8 @@ $(librt-routines-var) += \
>    mq_timedreceive \
>    mq_timedsend \
>    mq_unlink \
> +  timer_create \
> +  timer_delete \
>  
>  tests := tst-shm tst-timer tst-timer2 \
>  	 tst-aio tst-aio64 tst-aio2 tst-aio3 tst-aio4 tst-aio5 tst-aio6 \

Ok.

> diff --git a/rt/Versions b/rt/Versions
> index 9a09062a2a..fca804148c 100644
> --- a/rt/Versions
> +++ b/rt/Versions
> @@ -21,6 +21,10 @@ libc {
>  %endif
>    }
>    GLIBC_2.2 {
> +%if PTHREAD_IN_LIBC
> +    timer_create;
> +    timer_delete;
> +%endif
>      shm_open;
>      shm_unlink;
>    }
> @@ -52,23 +56,23 @@ libc {
>    GLIBC_2.34 {
>  %if PTHREAD_IN_LIBC
>      __mq_open_2;
> -    aio_cancel;
>      aio_cancel64;
> -    aio_init;
> -    aio_error;
> +    aio_cancel;
>      aio_error64;
> -    aio_fsync;
> +    aio_error;
>      aio_fsync64;
> -    aio_read;
> +    aio_fsync;
> +    aio_init;
>      aio_read64;
> -    aio_return;
> +    aio_read;
>      aio_return64;
> -    aio_suspend;
> +    aio_return;
>      aio_suspend64;
> -    aio_write;
> +    aio_suspend;
>      aio_write64;
> -    lio_listio;
> +    aio_write;
>      lio_listio64;
> +    lio_listio;
>      mq_close;
>      mq_getattr;
>      mq_notify;
> @@ -79,6 +83,8 @@ libc {
>      mq_timedreceive;
>      mq_timedsend;
>      mq_unlink;
> +    timer_create;
> +    timer_delete;
>  %endif
>      shm_open;
>      shm_unlink;
> @@ -122,8 +128,10 @@ librt {
>  %endif
>    }
>    GLIBC_2.2 {
> +%if !PTHREAD_IN_LIBC
>      timer_create;
>      timer_delete;
> +%endif
>      timer_getoverrun;
>      timer_gettime;
>      timer_settime;

Ok.

> diff --git a/sysdeps/unix/sysv/linux/Versions b/sysdeps/unix/sysv/linux/Versions
> index 47d4357b9f..0db1b9c31c 100644
> --- a/sysdeps/unix/sysv/linux/Versions
> +++ b/sysdeps/unix/sysv/linux/Versions
> @@ -121,6 +121,10 @@ libc {
>      posix_fallocate64;
>      sys_sigabbrev;
>      sys_siglist;
> +
> +    # Changed timer_t.  Only used by some 64-bit targets.
> +    timer_create;
> +    timer_delete;
>    }
>    GLIBC_2.3.4 {
>      sched_getaffinity; sched_setaffinity;
> @@ -284,6 +288,7 @@ libc {
>      __sigtimedwait;
>      __timer_active_sigev_thread;
>      __timer_active_sigev_thread_lock;
> +    __timer_compat_list;
>      __timer_helper_once;
>      __timer_helper_tid;
>      __timer_start_helper_thread;

Ok.

> diff --git a/sysdeps/unix/sysv/linux/aarch64/libc.abilist b/sysdeps/unix/sysv/linux/aarch64/libc.abilist
> index 141d5cb843..17779baac1 100644
> --- a/sysdeps/unix/sysv/linux/aarch64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/aarch64/libc.abilist
> @@ -2006,6 +2006,8 @@ GLIBC_2.17 tfind F
>  GLIBC_2.17 time F
>  GLIBC_2.17 timegm F
>  GLIBC_2.17 timelocal F
> +GLIBC_2.17 timer_create F
> +GLIBC_2.17 timer_delete F
>  GLIBC_2.17 timerfd_create F
>  GLIBC_2.17 timerfd_gettime F
>  GLIBC_2.17 timerfd_settime F
> @@ -2529,6 +2531,8 @@ GLIBC_2.34 thrd_create F
>  GLIBC_2.34 thrd_detach F
>  GLIBC_2.34 thrd_exit F
>  GLIBC_2.34 thrd_join F
> +GLIBC_2.34 timer_create F
> +GLIBC_2.34 timer_delete F
>  GLIBC_2.34 timespec_getres F
>  GLIBC_2.34 tss_create F
>  GLIBC_2.34 tss_delete F
> diff --git a/sysdeps/unix/sysv/linux/aarch64/librt.abilist b/sysdeps/unix/sysv/linux/aarch64/librt.abilist
> index 54bb3e5c7c..34768d1472 100644
> --- a/sysdeps/unix/sysv/linux/aarch64/librt.abilist
> +++ b/sysdeps/unix/sysv/linux/aarch64/librt.abilist
> @@ -1,5 +1,3 @@
> -GLIBC_2.17 timer_create F
> -GLIBC_2.17 timer_delete F
>  GLIBC_2.17 timer_getoverrun F
>  GLIBC_2.17 timer_gettime F
>  GLIBC_2.17 timer_settime F

Ok.

> diff --git a/sysdeps/unix/sysv/linux/alpha/Versions b/sysdeps/unix/sysv/linux/alpha/Versions
> index db6116a890..d4bd056f64 100644
> --- a/sysdeps/unix/sysv/linux/alpha/Versions
> +++ b/sysdeps/unix/sysv/linux/alpha/Versions
> @@ -104,7 +104,7 @@ librt {
>    }
>    GLIBC_2.3.3 {
>      # Changed timer_t.
> -    timer_create; timer_delete; timer_getoverrun; timer_gettime;
> +    timer_getoverrun; timer_gettime;
>      timer_settime;
>    }
>  }

Ok.

> diff --git a/sysdeps/unix/sysv/linux/alpha/libc.abilist b/sysdeps/unix/sysv/linux/alpha/libc.abilist
> index 5441b6a3f3..985a1deca9 100644
> --- a/sysdeps/unix/sysv/linux/alpha/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/alpha/libc.abilist
> @@ -2093,6 +2093,8 @@ GLIBC_2.2 svc_max_pollfd D 0x4
>  GLIBC_2.2 svc_pollfd D 0x8
>  GLIBC_2.2 swprintf F
>  GLIBC_2.2 swscanf F
> +GLIBC_2.2 timer_create F
> +GLIBC_2.2 timer_delete F
>  GLIBC_2.2 ungetwc F
>  GLIBC_2.2 vfwprintf F
>  GLIBC_2.2 vfwscanf F
> @@ -2353,6 +2355,8 @@ GLIBC_2.3.3 strtoll_l F
>  GLIBC_2.3.3 strtoull_l F
>  GLIBC_2.3.3 sys_sigabbrev D 0x208
>  GLIBC_2.3.3 sys_siglist D 0x208
> +GLIBC_2.3.3 timer_create F
> +GLIBC_2.3.3 timer_delete F
>  GLIBC_2.3.4 _OtsAddX F
>  GLIBC_2.3.4 _OtsConvertFloatTX F
>  GLIBC_2.3.4 _OtsConvertFloatXT F
> @@ -2623,6 +2627,8 @@ GLIBC_2.34 thrd_create F
>  GLIBC_2.34 thrd_detach F
>  GLIBC_2.34 thrd_exit F
>  GLIBC_2.34 thrd_join F
> +GLIBC_2.34 timer_create F
> +GLIBC_2.34 timer_delete F
>  GLIBC_2.34 timespec_getres F
>  GLIBC_2.34 tss_create F
>  GLIBC_2.34 tss_delete F
> diff --git a/sysdeps/unix/sysv/linux/alpha/librt.abilist b/sysdeps/unix/sysv/linux/alpha/librt.abilist
> index 8592c90bdf..3b744cf5a1 100644
> --- a/sysdeps/unix/sysv/linux/alpha/librt.abilist
> +++ b/sysdeps/unix/sysv/linux/alpha/librt.abilist
> @@ -1,12 +1,8 @@
>  GLIBC_2.1 __librt_version_placeholder F
> -GLIBC_2.2 timer_create F
> -GLIBC_2.2 timer_delete F
>  GLIBC_2.2 timer_getoverrun F
>  GLIBC_2.2 timer_gettime F
>  GLIBC_2.2 timer_settime F
>  GLIBC_2.3 __librt_version_placeholder F
> -GLIBC_2.3.3 timer_create F
> -GLIBC_2.3.3 timer_delete F
>  GLIBC_2.3.3 timer_getoverrun F
>  GLIBC_2.3.3 timer_gettime F
>  GLIBC_2.3.3 timer_settime F

Ok.

> diff --git a/sysdeps/unix/sysv/linux/alpha/timer_create.c b/sysdeps/unix/sysv/linux/alpha/timer_create.c
> deleted file mode 100644
> index d307135003..0000000000
> --- a/sysdeps/unix/sysv/linux/alpha/timer_create.c
> +++ /dev/null
> @@ -1 +0,0 @@
> -#include <sysdeps/unix/sysv/linux/x86_64/timer_create.c>

Ok.

> diff --git a/sysdeps/unix/sysv/linux/alpha/timer_delete.c b/sysdeps/unix/sysv/linux/alpha/timer_delete.c
> deleted file mode 100644
> index 2dd94f5c7a..0000000000
> --- a/sysdeps/unix/sysv/linux/alpha/timer_delete.c
> +++ /dev/null
> @@ -1 +0,0 @@
> -#include <sysdeps/unix/sysv/linux/x86_64/timer_delete.c>

Ok.

> diff --git a/sysdeps/unix/sysv/linux/arc/libc.abilist b/sysdeps/unix/sysv/linux/arc/libc.abilist
> index 37fd195f70..22fa42dfc3 100644
> --- a/sysdeps/unix/sysv/linux/arc/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/arc/libc.abilist
> @@ -1940,6 +1940,8 @@ GLIBC_2.32 thrd_yield F
>  GLIBC_2.32 time F
>  GLIBC_2.32 timegm F
>  GLIBC_2.32 timelocal F
> +GLIBC_2.32 timer_create F
> +GLIBC_2.32 timer_delete F
>  GLIBC_2.32 timerfd_create F
>  GLIBC_2.32 timerfd_gettime F
>  GLIBC_2.32 timerfd_settime F
> @@ -2288,6 +2290,8 @@ GLIBC_2.34 thrd_create F
>  GLIBC_2.34 thrd_detach F
>  GLIBC_2.34 thrd_exit F
>  GLIBC_2.34 thrd_join F
> +GLIBC_2.34 timer_create F
> +GLIBC_2.34 timer_delete F
>  GLIBC_2.34 timespec_getres F
>  GLIBC_2.34 tss_create F
>  GLIBC_2.34 tss_delete F
> diff --git a/sysdeps/unix/sysv/linux/arc/librt.abilist b/sysdeps/unix/sysv/linux/arc/librt.abilist
> index 0454fb41fd..7bc7c57bf0 100644
> --- a/sysdeps/unix/sysv/linux/arc/librt.abilist
> +++ b/sysdeps/unix/sysv/linux/arc/librt.abilist
> @@ -1,5 +1,3 @@
> -GLIBC_2.32 timer_create F
> -GLIBC_2.32 timer_delete F
>  GLIBC_2.32 timer_getoverrun F
>  GLIBC_2.32 timer_gettime F
>  GLIBC_2.32 timer_settime F
> diff --git a/sysdeps/unix/sysv/linux/arm/be/libc.abilist b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
> index 42ba748c07..c8ff2a0b74 100644
> --- a/sysdeps/unix/sysv/linux/arm/be/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
> @@ -434,6 +434,8 @@ GLIBC_2.34 thrd_create F
>  GLIBC_2.34 thrd_detach F
>  GLIBC_2.34 thrd_exit F
>  GLIBC_2.34 thrd_join F
> +GLIBC_2.34 timer_create F
> +GLIBC_2.34 timer_delete F
>  GLIBC_2.34 timespec_getres F
>  GLIBC_2.34 tss_create F
>  GLIBC_2.34 tss_delete F
> @@ -2350,6 +2352,8 @@ GLIBC_2.4 tfind F
>  GLIBC_2.4 time F
>  GLIBC_2.4 timegm F
>  GLIBC_2.4 timelocal F
> +GLIBC_2.4 timer_create F
> +GLIBC_2.4 timer_delete F
>  GLIBC_2.4 times F
>  GLIBC_2.4 timezone D 0x4
>  GLIBC_2.4 tmpfile F
> diff --git a/sysdeps/unix/sysv/linux/arm/be/librt.abilist b/sysdeps/unix/sysv/linux/arm/be/librt.abilist
> index 8682174e36..0887259367 100644
> --- a/sysdeps/unix/sysv/linux/arm/be/librt.abilist
> +++ b/sysdeps/unix/sysv/linux/arm/be/librt.abilist
> @@ -1,7 +1,5 @@
>  GLIBC_2.34 __timer_gettime64 F
>  GLIBC_2.34 __timer_settime64 F
> -GLIBC_2.4 timer_create F
> -GLIBC_2.4 timer_delete F
>  GLIBC_2.4 timer_getoverrun F
>  GLIBC_2.4 timer_gettime F
>  GLIBC_2.4 timer_settime F
> diff --git a/sysdeps/unix/sysv/linux/arm/le/libc.abilist b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
> index 92f06718bd..b237b78f85 100644
> --- a/sysdeps/unix/sysv/linux/arm/le/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
> @@ -431,6 +431,8 @@ GLIBC_2.34 thrd_create F
>  GLIBC_2.34 thrd_detach F
>  GLIBC_2.34 thrd_exit F
>  GLIBC_2.34 thrd_join F
> +GLIBC_2.34 timer_create F
> +GLIBC_2.34 timer_delete F
>  GLIBC_2.34 timespec_getres F
>  GLIBC_2.34 tss_create F
>  GLIBC_2.34 tss_delete F
> @@ -2347,6 +2349,8 @@ GLIBC_2.4 tfind F
>  GLIBC_2.4 time F
>  GLIBC_2.4 timegm F
>  GLIBC_2.4 timelocal F
> +GLIBC_2.4 timer_create F
> +GLIBC_2.4 timer_delete F
>  GLIBC_2.4 times F
>  GLIBC_2.4 timezone D 0x4
>  GLIBC_2.4 tmpfile F
> diff --git a/sysdeps/unix/sysv/linux/arm/le/librt.abilist b/sysdeps/unix/sysv/linux/arm/le/librt.abilist
> index 8682174e36..0887259367 100644
> --- a/sysdeps/unix/sysv/linux/arm/le/librt.abilist
> +++ b/sysdeps/unix/sysv/linux/arm/le/librt.abilist
> @@ -1,7 +1,5 @@
>  GLIBC_2.34 __timer_gettime64 F
>  GLIBC_2.34 __timer_settime64 F
> -GLIBC_2.4 timer_create F
> -GLIBC_2.4 timer_delete F
>  GLIBC_2.4 timer_getoverrun F
>  GLIBC_2.4 timer_gettime F
>  GLIBC_2.4 timer_settime F
> diff --git a/sysdeps/unix/sysv/linux/csky/libc.abilist b/sysdeps/unix/sysv/linux/csky/libc.abilist
> index 7ee4e79de2..c1b6927cea 100644
> --- a/sysdeps/unix/sysv/linux/csky/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/csky/libc.abilist
> @@ -2030,6 +2030,8 @@ GLIBC_2.29 thrd_yield F
>  GLIBC_2.29 time F
>  GLIBC_2.29 timegm F
>  GLIBC_2.29 timelocal F
> +GLIBC_2.29 timer_create F
> +GLIBC_2.29 timer_delete F
>  GLIBC_2.29 timerfd_create F
>  GLIBC_2.29 timerfd_gettime F
>  GLIBC_2.29 timerfd_settime F
> @@ -2551,6 +2553,8 @@ GLIBC_2.34 thrd_create F
>  GLIBC_2.34 thrd_detach F
>  GLIBC_2.34 thrd_exit F
>  GLIBC_2.34 thrd_join F
> +GLIBC_2.34 timer_create F
> +GLIBC_2.34 timer_delete F
>  GLIBC_2.34 timespec_getres F
>  GLIBC_2.34 tss_create F
>  GLIBC_2.34 tss_delete F
> diff --git a/sysdeps/unix/sysv/linux/csky/librt.abilist b/sysdeps/unix/sysv/linux/csky/librt.abilist
> index c92668b743..3d7c839b9b 100644
> --- a/sysdeps/unix/sysv/linux/csky/librt.abilist
> +++ b/sysdeps/unix/sysv/linux/csky/librt.abilist
> @@ -1,5 +1,3 @@
> -GLIBC_2.29 timer_create F
> -GLIBC_2.29 timer_delete F
>  GLIBC_2.29 timer_getoverrun F
>  GLIBC_2.29 timer_gettime F
>  GLIBC_2.29 timer_settime F
> diff --git a/sysdeps/unix/sysv/linux/hppa/libc.abilist b/sysdeps/unix/sysv/linux/hppa/libc.abilist
> index 7610cc4343..c5021c8109 100644
> --- a/sysdeps/unix/sysv/linux/hppa/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/hppa/libc.abilist
> @@ -1744,6 +1744,8 @@ GLIBC_2.2 tfind F
>  GLIBC_2.2 time F
>  GLIBC_2.2 timegm F
>  GLIBC_2.2 timelocal F
> +GLIBC_2.2 timer_create F
> +GLIBC_2.2 timer_delete F
>  GLIBC_2.2 times F
>  GLIBC_2.2 timezone D 0x4
>  GLIBC_2.2 tmpfile F
> @@ -2504,6 +2506,8 @@ GLIBC_2.34 thrd_create F
>  GLIBC_2.34 thrd_detach F
>  GLIBC_2.34 thrd_exit F
>  GLIBC_2.34 thrd_join F
> +GLIBC_2.34 timer_create F
> +GLIBC_2.34 timer_delete F
>  GLIBC_2.34 timespec_getres F
>  GLIBC_2.34 tss_create F
>  GLIBC_2.34 tss_delete F
> diff --git a/sysdeps/unix/sysv/linux/hppa/librt.abilist b/sysdeps/unix/sysv/linux/hppa/librt.abilist
> index cfe4455a75..1268c7fc38 100644
> --- a/sysdeps/unix/sysv/linux/hppa/librt.abilist
> +++ b/sysdeps/unix/sysv/linux/hppa/librt.abilist
> @@ -1,6 +1,4 @@
>  GLIBC_2.1 __librt_version_placeholder F
> -GLIBC_2.2 timer_create F
> -GLIBC_2.2 timer_delete F
>  GLIBC_2.2 timer_getoverrun F
>  GLIBC_2.2 timer_gettime F
>  GLIBC_2.2 timer_settime F
> diff --git a/sysdeps/unix/sysv/linux/i386/libc.abilist b/sysdeps/unix/sysv/linux/i386/libc.abilist
> index 54a6d61b0b..8055ea6984 100644
> --- a/sysdeps/unix/sysv/linux/i386/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/i386/libc.abilist
> @@ -2106,6 +2106,8 @@ GLIBC_2.2 svc_max_pollfd D 0x4
>  GLIBC_2.2 svc_pollfd D 0x4
>  GLIBC_2.2 swprintf F
>  GLIBC_2.2 swscanf F
> +GLIBC_2.2 timer_create F
> +GLIBC_2.2 timer_delete F
>  GLIBC_2.2 ungetwc F
>  GLIBC_2.2 versionsort64 F
>  GLIBC_2.2 vfwprintf F
> @@ -2688,6 +2690,8 @@ GLIBC_2.34 thrd_create F
>  GLIBC_2.34 thrd_detach F
>  GLIBC_2.34 thrd_exit F
>  GLIBC_2.34 thrd_join F
> +GLIBC_2.34 timer_create F
> +GLIBC_2.34 timer_delete F
>  GLIBC_2.34 timespec_getres F
>  GLIBC_2.34 tss_create F
>  GLIBC_2.34 tss_delete F
> diff --git a/sysdeps/unix/sysv/linux/i386/librt.abilist b/sysdeps/unix/sysv/linux/i386/librt.abilist
> index cfe4455a75..1268c7fc38 100644
> --- a/sysdeps/unix/sysv/linux/i386/librt.abilist
> +++ b/sysdeps/unix/sysv/linux/i386/librt.abilist
> @@ -1,6 +1,4 @@
>  GLIBC_2.1 __librt_version_placeholder F
> -GLIBC_2.2 timer_create F
> -GLIBC_2.2 timer_delete F
>  GLIBC_2.2 timer_getoverrun F
>  GLIBC_2.2 timer_gettime F
>  GLIBC_2.2 timer_settime F

Ok.

> diff --git a/sysdeps/unix/sysv/linux/ia64/Versions b/sysdeps/unix/sysv/linux/ia64/Versions
> index f438b12587..29b0d98cc6 100644
> --- a/sysdeps/unix/sysv/linux/ia64/Versions
> +++ b/sysdeps/unix/sysv/linux/ia64/Versions
> @@ -30,7 +30,7 @@ libc {
>  librt {
>    GLIBC_2.3.3 {
>      # Changed timer_t.
> -    timer_create; timer_delete; timer_getoverrun; timer_gettime;
> +    timer_getoverrun; timer_gettime;
>      timer_settime;
>    }
>  }

Ok.

> diff --git a/sysdeps/unix/sysv/linux/ia64/libc.abilist b/sysdeps/unix/sysv/linux/ia64/libc.abilist
> index cad4a129d1..4cf1da5b62 100644
> --- a/sysdeps/unix/sysv/linux/ia64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/ia64/libc.abilist
> @@ -1765,6 +1765,8 @@ GLIBC_2.2 tfind F
>  GLIBC_2.2 time F
>  GLIBC_2.2 timegm F
>  GLIBC_2.2 timelocal F
> +GLIBC_2.2 timer_create F
> +GLIBC_2.2 timer_delete F
>  GLIBC_2.2 times F
>  GLIBC_2.2 timezone D 0x8
>  GLIBC_2.2 tmpfile F
> @@ -2218,6 +2220,8 @@ GLIBC_2.3.3 strtoll_l F
>  GLIBC_2.3.3 strtoull_l F
>  GLIBC_2.3.3 sys_sigabbrev D 0x208
>  GLIBC_2.3.3 sys_siglist D 0x208
> +GLIBC_2.3.3 timer_create F
> +GLIBC_2.3.3 timer_delete F
>  GLIBC_2.3.4 __chk_fail F
>  GLIBC_2.3.4 __fprintf_chk F
>  GLIBC_2.3.4 __gets_chk F
> @@ -2461,6 +2465,8 @@ GLIBC_2.34 thrd_create F
>  GLIBC_2.34 thrd_detach F
>  GLIBC_2.34 thrd_exit F
>  GLIBC_2.34 thrd_join F
> +GLIBC_2.34 timer_create F
> +GLIBC_2.34 timer_delete F
>  GLIBC_2.34 timespec_getres F
>  GLIBC_2.34 tss_create F
>  GLIBC_2.34 tss_delete F
> diff --git a/sysdeps/unix/sysv/linux/ia64/librt.abilist b/sysdeps/unix/sysv/linux/ia64/librt.abilist
> index 842df91625..74a4971070 100644
> --- a/sysdeps/unix/sysv/linux/ia64/librt.abilist
> +++ b/sysdeps/unix/sysv/linux/ia64/librt.abilist
> @@ -1,11 +1,7 @@
>  GLIBC_2.1 __librt_version_placeholder F
> -GLIBC_2.2 timer_create F
> -GLIBC_2.2 timer_delete F
>  GLIBC_2.2 timer_getoverrun F
>  GLIBC_2.2 timer_gettime F
>  GLIBC_2.2 timer_settime F
> -GLIBC_2.3.3 timer_create F
> -GLIBC_2.3.3 timer_delete F
>  GLIBC_2.3.3 timer_getoverrun F
>  GLIBC_2.3.3 timer_gettime F
>  GLIBC_2.3.3 timer_settime F

Ok.

> diff --git a/sysdeps/unix/sysv/linux/ia64/timer_create.c b/sysdeps/unix/sysv/linux/ia64/timer_create.c
> deleted file mode 100644
> index d307135003..0000000000
> --- a/sysdeps/unix/sysv/linux/ia64/timer_create.c
> +++ /dev/null
> @@ -1 +0,0 @@
> -#include <sysdeps/unix/sysv/linux/x86_64/timer_create.c>

Ok.

> diff --git a/sysdeps/unix/sysv/linux/ia64/timer_delete.c b/sysdeps/unix/sysv/linux/ia64/timer_delete.c
> deleted file mode 100644
> index 2dd94f5c7a..0000000000
> --- a/sysdeps/unix/sysv/linux/ia64/timer_delete.c
> +++ /dev/null
> @@ -1 +0,0 @@
> -#include <sysdeps/unix/sysv/linux/x86_64/timer_delete.c>

Ok.

> diff --git a/sysdeps/unix/sysv/linux/kernel-posix-timers.h b/sysdeps/unix/sysv/linux/kernel-posix-timers.h
> index 874b809eba..99a2937458 100644
> --- a/sysdeps/unix/sysv/linux/kernel-posix-timers.h
> +++ b/sysdeps/unix/sysv/linux/kernel-posix-timers.h
> @@ -48,6 +48,11 @@ libc_hidden_proto (__timer_active_sigev_thread)
>  extern pthread_mutex_t __timer_active_sigev_thread_lock;
>  libc_hidden_proto (__timer_active_sigev_thread_lock)
>  
> +extern __typeof (timer_create) __timer_create;
> +libc_hidden_proto (__timer_create)
> +extern __typeof (timer_delete) __timer_delete;
> +libc_hidden_proto (__timer_delete)
> +
>  /* Type of timers in the kernel.  */
>  typedef int kernel_timer_t;
>  
> @@ -107,3 +112,8 @@ timerid_to_kernel_timer (timer_t timerid)
>  /* New targets use int instead of timer_t.  The difference only
>     matters on 64-bit targets.  */
>  #define TIMER_T_WAS_INT_COMPAT 0
> +
> +/* Used if an override sets TIMER_T_WAS_INT_COMPAT to 1.  */
> +#define OLD_TIMER_MAX 256
> +extern timer_t __timer_compat_list[OLD_TIMER_MAX];
> +libc_hidden_proto (__timer_compat_list)

Ok.

> diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
> index ff831374fa..e7c0a81f37 100644
> --- a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
> @@ -435,6 +435,8 @@ GLIBC_2.34 thrd_create F
>  GLIBC_2.34 thrd_detach F
>  GLIBC_2.34 thrd_exit F
>  GLIBC_2.34 thrd_join F
> +GLIBC_2.34 timer_create F
> +GLIBC_2.34 timer_delete F
>  GLIBC_2.34 timespec_getres F
>  GLIBC_2.34 tss_create F
>  GLIBC_2.34 tss_delete F
> @@ -2330,6 +2332,8 @@ GLIBC_2.4 tfind F
>  GLIBC_2.4 time F
>  GLIBC_2.4 timegm F
>  GLIBC_2.4 timelocal F
> +GLIBC_2.4 timer_create F
> +GLIBC_2.4 timer_delete F
>  GLIBC_2.4 times F
>  GLIBC_2.4 timezone D 0x4
>  GLIBC_2.4 tmpfile F
> diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/librt.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/librt.abilist
> index 8682174e36..0887259367 100644
> --- a/sysdeps/unix/sysv/linux/m68k/coldfire/librt.abilist
> +++ b/sysdeps/unix/sysv/linux/m68k/coldfire/librt.abilist
> @@ -1,7 +1,5 @@
>  GLIBC_2.34 __timer_gettime64 F
>  GLIBC_2.34 __timer_settime64 F
> -GLIBC_2.4 timer_create F
> -GLIBC_2.4 timer_delete F
>  GLIBC_2.4 timer_getoverrun F
>  GLIBC_2.4 timer_gettime F
>  GLIBC_2.4 timer_settime F
> diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
> index b2c98b40e9..b82f6366ee 100644
> --- a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
> @@ -2062,6 +2062,8 @@ GLIBC_2.2 svc_max_pollfd D 0x4
>  GLIBC_2.2 svc_pollfd D 0x4
>  GLIBC_2.2 swprintf F
>  GLIBC_2.2 swscanf F
> +GLIBC_2.2 timer_create F
> +GLIBC_2.2 timer_delete F
>  GLIBC_2.2 ungetwc F
>  GLIBC_2.2 versionsort64 F
>  GLIBC_2.2 vfwprintf F
> @@ -2631,6 +2633,8 @@ GLIBC_2.34 thrd_create F
>  GLIBC_2.34 thrd_detach F
>  GLIBC_2.34 thrd_exit F
>  GLIBC_2.34 thrd_join F
> +GLIBC_2.34 timer_create F
> +GLIBC_2.34 timer_delete F
>  GLIBC_2.34 timespec_getres F
>  GLIBC_2.34 tss_create F
>  GLIBC_2.34 tss_delete F
> diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/librt.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/librt.abilist
> index cfe4455a75..1268c7fc38 100644
> --- a/sysdeps/unix/sysv/linux/m68k/m680x0/librt.abilist
> +++ b/sysdeps/unix/sysv/linux/m68k/m680x0/librt.abilist
> @@ -1,6 +1,4 @@
>  GLIBC_2.1 __librt_version_placeholder F
> -GLIBC_2.2 timer_create F
> -GLIBC_2.2 timer_delete F
>  GLIBC_2.2 timer_getoverrun F
>  GLIBC_2.2 timer_gettime F
>  GLIBC_2.2 timer_settime F
> diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
> index fa945ee6fc..3f9dfa7664 100644
> --- a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
> @@ -2010,6 +2010,8 @@ GLIBC_2.18 tfind F
>  GLIBC_2.18 time F
>  GLIBC_2.18 timegm F
>  GLIBC_2.18 timelocal F
> +GLIBC_2.18 timer_create F
> +GLIBC_2.18 timer_delete F
>  GLIBC_2.18 timerfd_create F
>  GLIBC_2.18 timerfd_gettime F
>  GLIBC_2.18 timerfd_settime F
> @@ -2602,6 +2604,8 @@ GLIBC_2.34 thrd_create F
>  GLIBC_2.34 thrd_detach F
>  GLIBC_2.34 thrd_exit F
>  GLIBC_2.34 thrd_join F
> +GLIBC_2.34 timer_create F
> +GLIBC_2.34 timer_delete F
>  GLIBC_2.34 timespec_getres F
>  GLIBC_2.34 tss_create F
>  GLIBC_2.34 tss_delete F
> diff --git a/sysdeps/unix/sysv/linux/microblaze/be/librt.abilist b/sysdeps/unix/sysv/linux/microblaze/be/librt.abilist
> index fcfed800bf..2efee3a326 100644
> --- a/sysdeps/unix/sysv/linux/microblaze/be/librt.abilist
> +++ b/sysdeps/unix/sysv/linux/microblaze/be/librt.abilist
> @@ -1,5 +1,3 @@
> -GLIBC_2.18 timer_create F
> -GLIBC_2.18 timer_delete F
>  GLIBC_2.18 timer_getoverrun F
>  GLIBC_2.18 timer_gettime F
>  GLIBC_2.18 timer_settime F
> diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
> index c65815be74..bb2fd6251f 100644
> --- a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
> @@ -2010,6 +2010,8 @@ GLIBC_2.18 tfind F
>  GLIBC_2.18 time F
>  GLIBC_2.18 timegm F
>  GLIBC_2.18 timelocal F
> +GLIBC_2.18 timer_create F
> +GLIBC_2.18 timer_delete F
>  GLIBC_2.18 timerfd_create F
>  GLIBC_2.18 timerfd_gettime F
>  GLIBC_2.18 timerfd_settime F
> @@ -2599,6 +2601,8 @@ GLIBC_2.34 thrd_create F
>  GLIBC_2.34 thrd_detach F
>  GLIBC_2.34 thrd_exit F
>  GLIBC_2.34 thrd_join F
> +GLIBC_2.34 timer_create F
> +GLIBC_2.34 timer_delete F
>  GLIBC_2.34 timespec_getres F
>  GLIBC_2.34 tss_create F
>  GLIBC_2.34 tss_delete F
> diff --git a/sysdeps/unix/sysv/linux/microblaze/le/librt.abilist b/sysdeps/unix/sysv/linux/microblaze/le/librt.abilist
> index fcfed800bf..2efee3a326 100644
> --- a/sysdeps/unix/sysv/linux/microblaze/le/librt.abilist
> +++ b/sysdeps/unix/sysv/linux/microblaze/le/librt.abilist
> @@ -1,5 +1,3 @@
> -GLIBC_2.18 timer_create F
> -GLIBC_2.18 timer_delete F
>  GLIBC_2.18 timer_getoverrun F
>  GLIBC_2.18 timer_gettime F
>  GLIBC_2.18 timer_settime F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
> index 9c0174bf65..938142fb4a 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
> @@ -1993,6 +1993,8 @@ GLIBC_2.2 sys_siglist D 0x100
>  GLIBC_2.2 sysv_signal F
>  GLIBC_2.2 tcgetsid F
>  GLIBC_2.2 tdestroy F
> +GLIBC_2.2 timer_create F
> +GLIBC_2.2 timer_delete F
>  GLIBC_2.2 tmpfile F
>  GLIBC_2.2 tmpfile64 F
>  GLIBC_2.2 truncate64 F
> @@ -2596,6 +2598,8 @@ GLIBC_2.34 thrd_create F
>  GLIBC_2.34 thrd_detach F
>  GLIBC_2.34 thrd_exit F
>  GLIBC_2.34 thrd_join F
> +GLIBC_2.34 timer_create F
> +GLIBC_2.34 timer_delete F
>  GLIBC_2.34 timespec_getres F
>  GLIBC_2.34 tss_create F
>  GLIBC_2.34 tss_delete F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips32/librt.abilist b/sysdeps/unix/sysv/linux/mips/mips32/librt.abilist
> index da85415743..dbc81ebe4b 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips32/librt.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips32/librt.abilist
> @@ -1,5 +1,3 @@
> -GLIBC_2.2 timer_create F
> -GLIBC_2.2 timer_delete F
>  GLIBC_2.2 timer_getoverrun F
>  GLIBC_2.2 timer_gettime F
>  GLIBC_2.2 timer_settime F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
> index ac245f4413..d62382883b 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
> @@ -1991,6 +1991,8 @@ GLIBC_2.2 sys_siglist D 0x100
>  GLIBC_2.2 sysv_signal F
>  GLIBC_2.2 tcgetsid F
>  GLIBC_2.2 tdestroy F
> +GLIBC_2.2 timer_create F
> +GLIBC_2.2 timer_delete F
>  GLIBC_2.2 tmpfile F
>  GLIBC_2.2 tmpfile64 F
>  GLIBC_2.2 truncate64 F
> @@ -2594,6 +2596,8 @@ GLIBC_2.34 thrd_create F
>  GLIBC_2.34 thrd_detach F
>  GLIBC_2.34 thrd_exit F
>  GLIBC_2.34 thrd_join F
> +GLIBC_2.34 timer_create F
> +GLIBC_2.34 timer_delete F
>  GLIBC_2.34 timespec_getres F
>  GLIBC_2.34 tss_create F
>  GLIBC_2.34 tss_delete F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
> index f17c4b3412..28a8a5d294 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
> @@ -1989,6 +1989,8 @@ GLIBC_2.2 sys_siglist D 0x100
>  GLIBC_2.2 sysv_signal F
>  GLIBC_2.2 tcgetsid F
>  GLIBC_2.2 tdestroy F
> +GLIBC_2.2 timer_create F
> +GLIBC_2.2 timer_delete F
>  GLIBC_2.2 tmpfile F
>  GLIBC_2.2 tmpfile64 F
>  GLIBC_2.2 truncate64 F
> @@ -2602,6 +2604,8 @@ GLIBC_2.34 thrd_create F
>  GLIBC_2.34 thrd_detach F
>  GLIBC_2.34 thrd_exit F
>  GLIBC_2.34 thrd_join F
> +GLIBC_2.34 timer_create F
> +GLIBC_2.34 timer_delete F
>  GLIBC_2.34 timespec_getres F
>  GLIBC_2.34 tss_create F
>  GLIBC_2.34 tss_delete F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n32/librt.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n32/librt.abilist
> index da85415743..dbc81ebe4b 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips64/n32/librt.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips64/n32/librt.abilist
> @@ -1,5 +1,3 @@
> -GLIBC_2.2 timer_create F
> -GLIBC_2.2 timer_delete F
>  GLIBC_2.2 timer_getoverrun F
>  GLIBC_2.2 timer_gettime F
>  GLIBC_2.2 timer_settime F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
> index 4d9dea349d..6748f9beef 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
> @@ -1985,6 +1985,8 @@ GLIBC_2.2 sys_siglist D 0x200
>  GLIBC_2.2 sysv_signal F
>  GLIBC_2.2 tcgetsid F
>  GLIBC_2.2 tdestroy F
> +GLIBC_2.2 timer_create F
> +GLIBC_2.2 timer_delete F
>  GLIBC_2.2 tmpfile F
>  GLIBC_2.2 tmpfile64 F
>  GLIBC_2.2 truncate64 F
> @@ -2517,6 +2519,8 @@ GLIBC_2.34 thrd_create F
>  GLIBC_2.34 thrd_detach F
>  GLIBC_2.34 thrd_exit F
>  GLIBC_2.34 thrd_join F
> +GLIBC_2.34 timer_create F
> +GLIBC_2.34 timer_delete F
>  GLIBC_2.34 timespec_getres F
>  GLIBC_2.34 tss_create F
>  GLIBC_2.34 tss_delete F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n64/librt.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n64/librt.abilist
> index 51354b072d..00fd77bbab 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips64/n64/librt.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips64/n64/librt.abilist
> @@ -1,5 +1,3 @@
> -GLIBC_2.2 timer_create F
> -GLIBC_2.2 timer_delete F
>  GLIBC_2.2 timer_getoverrun F
>  GLIBC_2.2 timer_gettime F
>  GLIBC_2.2 timer_settime F
> diff --git a/sysdeps/unix/sysv/linux/nios2/libc.abilist b/sysdeps/unix/sysv/linux/nios2/libc.abilist
> index a1f3808f18..03d13e5ee1 100644
> --- a/sysdeps/unix/sysv/linux/nios2/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/nios2/libc.abilist
> @@ -2052,6 +2052,8 @@ GLIBC_2.21 tfind F
>  GLIBC_2.21 time F
>  GLIBC_2.21 timegm F
>  GLIBC_2.21 timelocal F
> +GLIBC_2.21 timer_create F
> +GLIBC_2.21 timer_delete F
>  GLIBC_2.21 timerfd_create F
>  GLIBC_2.21 timerfd_gettime F
>  GLIBC_2.21 timerfd_settime F
> @@ -2641,6 +2643,8 @@ GLIBC_2.34 thrd_create F
>  GLIBC_2.34 thrd_detach F
>  GLIBC_2.34 thrd_exit F
>  GLIBC_2.34 thrd_join F
> +GLIBC_2.34 timer_create F
> +GLIBC_2.34 timer_delete F
>  GLIBC_2.34 timespec_getres F
>  GLIBC_2.34 tss_create F
>  GLIBC_2.34 tss_delete F
> diff --git a/sysdeps/unix/sysv/linux/nios2/librt.abilist b/sysdeps/unix/sysv/linux/nios2/librt.abilist
> index 29111b77bd..a83ae32d03 100644
> --- a/sysdeps/unix/sysv/linux/nios2/librt.abilist
> +++ b/sysdeps/unix/sysv/linux/nios2/librt.abilist
> @@ -1,5 +1,3 @@
> -GLIBC_2.21 timer_create F
> -GLIBC_2.21 timer_delete F
>  GLIBC_2.21 timer_getoverrun F
>  GLIBC_2.21 timer_gettime F
>  GLIBC_2.21 timer_settime F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
> index c80718d0b1..c9a45ecb17 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
> @@ -2067,6 +2067,8 @@ GLIBC_2.2 svc_max_pollfd D 0x4
>  GLIBC_2.2 svc_pollfd D 0x4
>  GLIBC_2.2 swprintf F
>  GLIBC_2.2 swscanf F
> +GLIBC_2.2 timer_create F
> +GLIBC_2.2 timer_delete F
>  GLIBC_2.2 ungetwc F
>  GLIBC_2.2 vfwprintf F
>  GLIBC_2.2 vfwscanf F
> @@ -2658,6 +2660,8 @@ GLIBC_2.34 thrd_create F
>  GLIBC_2.34 thrd_detach F
>  GLIBC_2.34 thrd_exit F
>  GLIBC_2.34 thrd_join F
> +GLIBC_2.34 timer_create F
> +GLIBC_2.34 timer_delete F
>  GLIBC_2.34 timespec_getres F
>  GLIBC_2.34 tss_create F
>  GLIBC_2.34 tss_delete F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/librt.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/librt.abilist
> index cfe4455a75..1268c7fc38 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/librt.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/librt.abilist
> @@ -1,6 +1,4 @@
>  GLIBC_2.1 __librt_version_placeholder F
> -GLIBC_2.2 timer_create F
> -GLIBC_2.2 timer_delete F
>  GLIBC_2.2 timer_getoverrun F
>  GLIBC_2.2 timer_gettime F
>  GLIBC_2.2 timer_settime F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
> index 8156d06db5..c7fbc347a1 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
> @@ -2071,6 +2071,8 @@ GLIBC_2.2 svc_max_pollfd D 0x4
>  GLIBC_2.2 svc_pollfd D 0x4
>  GLIBC_2.2 swprintf F
>  GLIBC_2.2 swscanf F
> +GLIBC_2.2 timer_create F
> +GLIBC_2.2 timer_delete F
>  GLIBC_2.2 ungetwc F
>  GLIBC_2.2 vfwprintf F
>  GLIBC_2.2 vfwscanf F
> @@ -2691,6 +2693,8 @@ GLIBC_2.34 thrd_create F
>  GLIBC_2.34 thrd_detach F
>  GLIBC_2.34 thrd_exit F
>  GLIBC_2.34 thrd_join F
> +GLIBC_2.34 timer_create F
> +GLIBC_2.34 timer_delete F
>  GLIBC_2.34 timespec_getres F
>  GLIBC_2.34 tss_create F
>  GLIBC_2.34 tss_delete F

Ok.

> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/Versions b/sysdeps/unix/sysv/linux/powerpc/powerpc64/Versions
> index 84c809507f..4eb22c11ac 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/Versions
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/Versions
> @@ -29,7 +29,7 @@ libc {
>  librt {
>    GLIBC_2.3.3 {
>      # Changed timer_t.
> -    timer_create; timer_delete; timer_getoverrun; timer_gettime;
> +    timer_getoverrun; timer_gettime;
>      timer_settime;
>    }
>  }

Ok.

> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
> index a99bd9409b..fb5eb9c67e 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
> @@ -1886,6 +1886,8 @@ GLIBC_2.3 tfind F
>  GLIBC_2.3 time F
>  GLIBC_2.3 timegm F
>  GLIBC_2.3 timelocal F
> +GLIBC_2.3 timer_create F
> +GLIBC_2.3 timer_delete F
>  GLIBC_2.3 times F
>  GLIBC_2.3 timezone D 0x8
>  GLIBC_2.3 tmpfile F
> @@ -2162,6 +2164,8 @@ GLIBC_2.3.3 strtoll_l F
>  GLIBC_2.3.3 strtoull_l F
>  GLIBC_2.3.3 sys_sigabbrev D 0x208
>  GLIBC_2.3.3 sys_siglist D 0x208
> +GLIBC_2.3.3 timer_create F
> +GLIBC_2.3.3 timer_delete F
>  GLIBC_2.3.4 __chk_fail F
>  GLIBC_2.3.4 __fprintf_chk F
>  GLIBC_2.3.4 __gets_chk F
> @@ -2425,6 +2429,8 @@ GLIBC_2.34 thrd_create F
>  GLIBC_2.34 thrd_detach F
>  GLIBC_2.34 thrd_exit F
>  GLIBC_2.34 thrd_join F
> +GLIBC_2.34 timer_create F
> +GLIBC_2.34 timer_delete F
>  GLIBC_2.34 timespec_getres F
>  GLIBC_2.34 tss_create F
>  GLIBC_2.34 tss_delete F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/librt.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/librt.abilist
> index 9df959a434..914203b043 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/librt.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/librt.abilist
> @@ -1,10 +1,6 @@
> -GLIBC_2.3 timer_create F
> -GLIBC_2.3 timer_delete F
>  GLIBC_2.3 timer_getoverrun F
>  GLIBC_2.3 timer_gettime F
>  GLIBC_2.3 timer_settime F
> -GLIBC_2.3.3 timer_create F
> -GLIBC_2.3.3 timer_delete F
>  GLIBC_2.3.3 timer_getoverrun F
>  GLIBC_2.3.3 timer_gettime F
>  GLIBC_2.3.3 timer_settime F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
> index ae562f2864..b89256aba0 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
> @@ -2094,6 +2094,8 @@ GLIBC_2.17 tfind F
>  GLIBC_2.17 time F
>  GLIBC_2.17 timegm F
>  GLIBC_2.17 timelocal F
> +GLIBC_2.17 timer_create F
> +GLIBC_2.17 timer_delete F
>  GLIBC_2.17 timerfd_create F
>  GLIBC_2.17 timerfd_gettime F
>  GLIBC_2.17 timerfd_settime F
> @@ -2725,6 +2727,8 @@ GLIBC_2.34 thrd_create F
>  GLIBC_2.34 thrd_detach F
>  GLIBC_2.34 thrd_exit F
>  GLIBC_2.34 thrd_join F
> +GLIBC_2.34 timer_create F
> +GLIBC_2.34 timer_delete F
>  GLIBC_2.34 timespec_getres F
>  GLIBC_2.34 tss_create F
>  GLIBC_2.34 tss_delete F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/librt.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/librt.abilist
> index 54bb3e5c7c..34768d1472 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/librt.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/librt.abilist
> @@ -1,5 +1,3 @@
> -GLIBC_2.17 timer_create F
> -GLIBC_2.17 timer_delete F
>  GLIBC_2.17 timer_getoverrun F
>  GLIBC_2.17 timer_gettime F
>  GLIBC_2.17 timer_settime F

Ok.

> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/timer_create.c b/sysdeps/unix/sysv/linux/powerpc/powerpc64/timer_create.c
> deleted file mode 100644
> index d307135003..0000000000
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/timer_create.c
> +++ /dev/null
> @@ -1 +0,0 @@

Ok.

> -#include <sysdeps/unix/sysv/linux/x86_64/timer_create.c>
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/timer_delete.c b/sysdeps/unix/sysv/linux/powerpc/powerpc64/timer_delete.c
> deleted file mode 100644
> index 2dd94f5c7a..0000000000
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/timer_delete.c
> +++ /dev/null
> @@ -1 +0,0 @@
> -#include <sysdeps/unix/sysv/linux/x86_64/timer_delete.c>
> diff --git a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
> index 7422465183..c653f52373 100644
> --- a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
> @@ -1950,6 +1950,8 @@ GLIBC_2.33 thrd_yield F
>  GLIBC_2.33 time F
>  GLIBC_2.33 timegm F
>  GLIBC_2.33 timelocal F
> +GLIBC_2.33 timer_create F
> +GLIBC_2.33 timer_delete F
>  GLIBC_2.33 timerfd_create F
>  GLIBC_2.33 timerfd_gettime F
>  GLIBC_2.33 timerfd_settime F
> @@ -2290,6 +2292,8 @@ GLIBC_2.34 thrd_create F
>  GLIBC_2.34 thrd_detach F
>  GLIBC_2.34 thrd_exit F
>  GLIBC_2.34 thrd_join F
> +GLIBC_2.34 timer_create F
> +GLIBC_2.34 timer_delete F
>  GLIBC_2.34 timespec_getres F
>  GLIBC_2.34 tss_create F
>  GLIBC_2.34 tss_delete F
> diff --git a/sysdeps/unix/sysv/linux/riscv/rv32/librt.abilist b/sysdeps/unix/sysv/linux/riscv/rv32/librt.abilist
> index 540cdef209..09bbee0960 100644
> --- a/sysdeps/unix/sysv/linux/riscv/rv32/librt.abilist
> +++ b/sysdeps/unix/sysv/linux/riscv/rv32/librt.abilist
> @@ -1,5 +1,3 @@
> -GLIBC_2.33 timer_create F
> -GLIBC_2.33 timer_delete F
>  GLIBC_2.33 timer_getoverrun F
>  GLIBC_2.33 timer_gettime F
>  GLIBC_2.33 timer_settime F
> diff --git a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
> index 0bb8343ac4..711484eee5 100644
> --- a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
> @@ -2016,6 +2016,8 @@ GLIBC_2.27 tfind F
>  GLIBC_2.27 time F
>  GLIBC_2.27 timegm F
>  GLIBC_2.27 timelocal F
> +GLIBC_2.27 timer_create F
> +GLIBC_2.27 timer_delete F
>  GLIBC_2.27 timerfd_create F
>  GLIBC_2.27 timerfd_gettime F
>  GLIBC_2.27 timerfd_settime F
> @@ -2490,6 +2492,8 @@ GLIBC_2.34 thrd_create F
>  GLIBC_2.34 thrd_detach F
>  GLIBC_2.34 thrd_exit F
>  GLIBC_2.34 thrd_join F
> +GLIBC_2.34 timer_create F
> +GLIBC_2.34 timer_delete F
>  GLIBC_2.34 timespec_getres F
>  GLIBC_2.34 tss_create F
>  GLIBC_2.34 tss_delete F
> diff --git a/sysdeps/unix/sysv/linux/riscv/rv64/librt.abilist b/sysdeps/unix/sysv/linux/riscv/rv64/librt.abilist
> index e436beaf7e..8e1d8b21fe 100644
> --- a/sysdeps/unix/sysv/linux/riscv/rv64/librt.abilist
> +++ b/sysdeps/unix/sysv/linux/riscv/rv64/librt.abilist
> @@ -1,5 +1,3 @@
> -GLIBC_2.27 timer_create F
> -GLIBC_2.27 timer_delete F
>  GLIBC_2.27 timer_getoverrun F
>  GLIBC_2.27 timer_gettime F
>  GLIBC_2.27 timer_settime F
> diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
> index f9db909d63..4040312275 100644
> --- a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
> @@ -2065,6 +2065,8 @@ GLIBC_2.2 svc_max_pollfd D 0x4
>  GLIBC_2.2 svc_pollfd D 0x4
>  GLIBC_2.2 swprintf F
>  GLIBC_2.2 swscanf F
> +GLIBC_2.2 timer_create F
> +GLIBC_2.2 timer_delete F
>  GLIBC_2.2 ungetwc F
>  GLIBC_2.2 versionsort64 F
>  GLIBC_2.2 vfwprintf F
> @@ -2656,6 +2658,8 @@ GLIBC_2.34 thrd_create F
>  GLIBC_2.34 thrd_detach F
>  GLIBC_2.34 thrd_exit F
>  GLIBC_2.34 thrd_join F
> +GLIBC_2.34 timer_create F
> +GLIBC_2.34 timer_delete F
>  GLIBC_2.34 timespec_getres F
>  GLIBC_2.34 tss_create F
>  GLIBC_2.34 tss_delete F
> diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/librt.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/librt.abilist
> index cfe4455a75..1268c7fc38 100644
> --- a/sysdeps/unix/sysv/linux/s390/s390-32/librt.abilist
> +++ b/sysdeps/unix/sysv/linux/s390/s390-32/librt.abilist
> @@ -1,6 +1,4 @@
>  GLIBC_2.1 __librt_version_placeholder F
> -GLIBC_2.2 timer_create F
> -GLIBC_2.2 timer_delete F
>  GLIBC_2.2 timer_getoverrun F
>  GLIBC_2.2 timer_gettime F
>  GLIBC_2.2 timer_settime F

Ok.

> diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/Versions b/sysdeps/unix/sysv/linux/s390/s390-64/Versions
> index 3f4d960421..5989ac75a9 100644
> --- a/sysdeps/unix/sysv/linux/s390/s390-64/Versions
> +++ b/sysdeps/unix/sysv/linux/s390/s390-64/Versions
> @@ -9,7 +9,7 @@ libc {
>  librt {
>    GLIBC_2.3.3 {
>      # Changed timer_t.
> -    timer_create; timer_delete; timer_getoverrun; timer_gettime;
> +    timer_getoverrun; timer_gettime;
>      timer_settime;
>    }
>  }

Ok.

> diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
> index 593e5f9ae7..4cf6a5ea09 100644
> --- a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
> @@ -1761,6 +1761,8 @@ GLIBC_2.2 tfind F
>  GLIBC_2.2 time F
>  GLIBC_2.2 timegm F
>  GLIBC_2.2 timelocal F
> +GLIBC_2.2 timer_create F
> +GLIBC_2.2 timer_delete F
>  GLIBC_2.2 times F
>  GLIBC_2.2 timezone D 0x8
>  GLIBC_2.2 tmpfile F
> @@ -2208,6 +2210,8 @@ GLIBC_2.3.3 strtoll_l F
>  GLIBC_2.3.3 strtoull_l F
>  GLIBC_2.3.3 sys_sigabbrev D 0x208
>  GLIBC_2.3.3 sys_siglist D 0x208
> +GLIBC_2.3.3 timer_create F
> +GLIBC_2.3.3 timer_delete F
>  GLIBC_2.3.4 __chk_fail F
>  GLIBC_2.3.4 __fprintf_chk F
>  GLIBC_2.3.4 __gets_chk F
> @@ -2462,6 +2466,8 @@ GLIBC_2.34 thrd_create F
>  GLIBC_2.34 thrd_detach F
>  GLIBC_2.34 thrd_exit F
>  GLIBC_2.34 thrd_join F
> +GLIBC_2.34 timer_create F
> +GLIBC_2.34 timer_delete F
>  GLIBC_2.34 timespec_getres F
>  GLIBC_2.34 tss_create F
>  GLIBC_2.34 tss_delete F
> diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/librt.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/librt.abilist
> index 9e185ecaef..34e8d31133 100644
> --- a/sysdeps/unix/sysv/linux/s390/s390-64/librt.abilist
> +++ b/sysdeps/unix/sysv/linux/s390/s390-64/librt.abilist
> @@ -1,10 +1,6 @@
> -GLIBC_2.2 timer_create F
> -GLIBC_2.2 timer_delete F
>  GLIBC_2.2 timer_getoverrun F
>  GLIBC_2.2 timer_gettime F
>  GLIBC_2.2 timer_settime F
> -GLIBC_2.3.3 timer_create F
> -GLIBC_2.3.3 timer_delete F
>  GLIBC_2.3.3 timer_getoverrun F
>  GLIBC_2.3.3 timer_gettime F
>  GLIBC_2.3.3 timer_settime F

Ok.

> diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/timer_create.c b/sysdeps/unix/sysv/linux/s390/s390-64/timer_create.c
> deleted file mode 100644
> index d307135003..0000000000
> --- a/sysdeps/unix/sysv/linux/s390/s390-64/timer_create.c
> +++ /dev/null
> @@ -1 +0,0 @@
> -#include <sysdeps/unix/sysv/linux/x86_64/timer_create.c>

Ok.

> diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/timer_delete.c b/sysdeps/unix/sysv/linux/s390/s390-64/timer_delete.c
> deleted file mode 100644
> index 2dd94f5c7a..0000000000
> --- a/sysdeps/unix/sysv/linux/s390/s390-64/timer_delete.c
> +++ /dev/null
> @@ -1 +0,0 @@
> -#include <sysdeps/unix/sysv/linux/x86_64/timer_delete.c>

Ok.

> diff --git a/sysdeps/unix/sysv/linux/sh/be/libc.abilist b/sysdeps/unix/sysv/linux/sh/be/libc.abilist
> index 8da4e375d9..6fd93a5445 100644
> --- a/sysdeps/unix/sysv/linux/sh/be/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/sh/be/libc.abilist
> @@ -1748,6 +1748,8 @@ GLIBC_2.2 tfind F
>  GLIBC_2.2 time F
>  GLIBC_2.2 timegm F
>  GLIBC_2.2 timelocal F
> +GLIBC_2.2 timer_create F
> +GLIBC_2.2 timer_delete F
>  GLIBC_2.2 times F
>  GLIBC_2.2 timezone D 0x4
>  GLIBC_2.2 tmpfile F
> @@ -2511,6 +2513,8 @@ GLIBC_2.34 thrd_create F
>  GLIBC_2.34 thrd_detach F
>  GLIBC_2.34 thrd_exit F
>  GLIBC_2.34 thrd_join F
> +GLIBC_2.34 timer_create F
> +GLIBC_2.34 timer_delete F
>  GLIBC_2.34 timespec_getres F
>  GLIBC_2.34 tss_create F
>  GLIBC_2.34 tss_delete F
> diff --git a/sysdeps/unix/sysv/linux/sh/be/librt.abilist b/sysdeps/unix/sysv/linux/sh/be/librt.abilist
> index cfe4455a75..1268c7fc38 100644
> --- a/sysdeps/unix/sysv/linux/sh/be/librt.abilist
> +++ b/sysdeps/unix/sysv/linux/sh/be/librt.abilist
> @@ -1,6 +1,4 @@
>  GLIBC_2.1 __librt_version_placeholder F
> -GLIBC_2.2 timer_create F
> -GLIBC_2.2 timer_delete F
>  GLIBC_2.2 timer_getoverrun F
>  GLIBC_2.2 timer_gettime F
>  GLIBC_2.2 timer_settime F
> diff --git a/sysdeps/unix/sysv/linux/sh/le/libc.abilist b/sysdeps/unix/sysv/linux/sh/le/libc.abilist
> index 6f13625e6f..c5c41bf0e6 100644
> --- a/sysdeps/unix/sysv/linux/sh/le/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/sh/le/libc.abilist
> @@ -1748,6 +1748,8 @@ GLIBC_2.2 tfind F
>  GLIBC_2.2 time F
>  GLIBC_2.2 timegm F
>  GLIBC_2.2 timelocal F
> +GLIBC_2.2 timer_create F
> +GLIBC_2.2 timer_delete F
>  GLIBC_2.2 times F
>  GLIBC_2.2 timezone D 0x4
>  GLIBC_2.2 tmpfile F
> @@ -2508,6 +2510,8 @@ GLIBC_2.34 thrd_create F
>  GLIBC_2.34 thrd_detach F
>  GLIBC_2.34 thrd_exit F
>  GLIBC_2.34 thrd_join F
> +GLIBC_2.34 timer_create F
> +GLIBC_2.34 timer_delete F
>  GLIBC_2.34 timespec_getres F
>  GLIBC_2.34 tss_create F
>  GLIBC_2.34 tss_delete F
> diff --git a/sysdeps/unix/sysv/linux/sh/le/librt.abilist b/sysdeps/unix/sysv/linux/sh/le/librt.abilist
> index cfe4455a75..1268c7fc38 100644
> --- a/sysdeps/unix/sysv/linux/sh/le/librt.abilist
> +++ b/sysdeps/unix/sysv/linux/sh/le/librt.abilist
> @@ -1,6 +1,4 @@
>  GLIBC_2.1 __librt_version_placeholder F
> -GLIBC_2.2 timer_create F
> -GLIBC_2.2 timer_delete F
>  GLIBC_2.2 timer_getoverrun F
>  GLIBC_2.2 timer_gettime F
>  GLIBC_2.2 timer_settime F
> diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
> index 984222296d..132470d40b 100644
> --- a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
> @@ -2060,6 +2060,8 @@ GLIBC_2.2 svc_max_pollfd D 0x4
>  GLIBC_2.2 svc_pollfd D 0x4
>  GLIBC_2.2 swprintf F
>  GLIBC_2.2 swscanf F
> +GLIBC_2.2 timer_create F
> +GLIBC_2.2 timer_delete F
>  GLIBC_2.2 ungetwc F
>  GLIBC_2.2 vfwprintf F
>  GLIBC_2.2 vfwscanf F
> @@ -2651,6 +2653,8 @@ GLIBC_2.34 thrd_create F
>  GLIBC_2.34 thrd_detach F
>  GLIBC_2.34 thrd_exit F
>  GLIBC_2.34 thrd_join F
> +GLIBC_2.34 timer_create F
> +GLIBC_2.34 timer_delete F
>  GLIBC_2.34 timespec_getres F
>  GLIBC_2.34 tss_create F
>  GLIBC_2.34 tss_delete F
> diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/librt.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/librt.abilist
> index fb3a2042e0..d8ff3b0988 100644
> --- a/sysdeps/unix/sysv/linux/sparc/sparc32/librt.abilist
> +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/librt.abilist
> @@ -1,6 +1,4 @@
>  GLIBC_2.1 __librt_version_placeholder F
> -GLIBC_2.2 timer_create F
> -GLIBC_2.2 timer_delete F
>  GLIBC_2.2 timer_getoverrun F
>  GLIBC_2.2 timer_gettime F
>  GLIBC_2.2 timer_settime F

Ok.

> diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/Versions b/sysdeps/unix/sysv/linux/sparc/sparc64/Versions
> index 33b6779ec5..358081399a 100644
> --- a/sysdeps/unix/sysv/linux/sparc/sparc64/Versions
> +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/Versions
> @@ -14,7 +14,7 @@ libc {
>  librt {
>    GLIBC_2.3.3 {
>      # Changed timer_t.
> -    timer_create; timer_delete; timer_getoverrun; timer_gettime;
> +    timer_getoverrun; timer_gettime;
>      timer_settime;
>    }
>  }

Ok.

> diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
> index a6dc7f2e40..6ee552611b 100644
> --- a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
> @@ -1791,6 +1791,8 @@ GLIBC_2.2 tfind F
>  GLIBC_2.2 time F
>  GLIBC_2.2 timegm F
>  GLIBC_2.2 timelocal F
> +GLIBC_2.2 timer_create F
> +GLIBC_2.2 timer_delete F
>  GLIBC_2.2 times F
>  GLIBC_2.2 timezone D 0x8
>  GLIBC_2.2 tmpfile F
> @@ -2242,6 +2244,8 @@ GLIBC_2.3.3 strtoll_l F
>  GLIBC_2.3.3 strtoull_l F
>  GLIBC_2.3.3 sys_sigabbrev D 0x208
>  GLIBC_2.3.3 sys_siglist D 0x208
> +GLIBC_2.3.3 timer_create F
> +GLIBC_2.3.3 timer_delete F
>  GLIBC_2.3.4 __chk_fail F
>  GLIBC_2.3.4 __fprintf_chk F
>  GLIBC_2.3.4 __gets_chk F
> @@ -2484,6 +2488,8 @@ GLIBC_2.34 thrd_create F
>  GLIBC_2.34 thrd_detach F
>  GLIBC_2.34 thrd_exit F
>  GLIBC_2.34 thrd_join F
> +GLIBC_2.34 timer_create F
> +GLIBC_2.34 timer_delete F
>  GLIBC_2.34 timespec_getres F
>  GLIBC_2.34 tss_create F
>  GLIBC_2.34 tss_delete F
> diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/librt.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/librt.abilist
> index 8592c90bdf..3b744cf5a1 100644
> --- a/sysdeps/unix/sysv/linux/sparc/sparc64/librt.abilist
> +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/librt.abilist
> @@ -1,12 +1,8 @@
>  GLIBC_2.1 __librt_version_placeholder F
> -GLIBC_2.2 timer_create F
> -GLIBC_2.2 timer_delete F
>  GLIBC_2.2 timer_getoverrun F
>  GLIBC_2.2 timer_gettime F
>  GLIBC_2.2 timer_settime F
>  GLIBC_2.3 __librt_version_placeholder F
> -GLIBC_2.3.3 timer_create F
> -GLIBC_2.3.3 timer_delete F
>  GLIBC_2.3.3 timer_getoverrun F
>  GLIBC_2.3.3 timer_gettime F
>  GLIBC_2.3.3 timer_settime F

Ok.

> diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/timer_create.c b/sysdeps/unix/sysv/linux/sparc/sparc64/timer_create.c
> deleted file mode 100644
> index d307135003..0000000000
> --- a/sysdeps/unix/sysv/linux/sparc/sparc64/timer_create.c
> +++ /dev/null
> @@ -1 +0,0 @@
> -#include <sysdeps/unix/sysv/linux/x86_64/timer_create.c>

Ok.

> diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/timer_delete.c b/sysdeps/unix/sysv/linux/sparc/sparc64/timer_delete.c
> deleted file mode 100644
> index 2dd94f5c7a..0000000000
> --- a/sysdeps/unix/sysv/linux/sparc/sparc64/timer_delete.c
> +++ /dev/null
> @@ -1 +0,0 @@
> -#include <sysdeps/unix/sysv/linux/x86_64/timer_delete.c>

Ok.

> diff --git a/sysdeps/unix/sysv/linux/timer_create.c b/sysdeps/unix/sysv/linux/timer_create.c
> index 3dcd5455fc..9861177cf2 100644
> --- a/sysdeps/unix/sysv/linux/timer_create.c
> +++ b/sysdeps/unix/sysv/linux/timer_create.c
> @@ -27,17 +27,11 @@
>  #include <pthreadP.h>
>  #include <kernel-posix-timers.h>
>  #include "kernel-posix-cpu-timers.h"
> -
> -
> -#ifdef timer_create_alias
> -# define timer_create timer_create_alias
> -#endif
> -
> +#include <shlib-compat.h>
>  
>  int
> -timer_create (clockid_t clock_id, struct sigevent *evp, timer_t *timerid)
> +___timer_create (clockid_t clock_id, struct sigevent *evp, timer_t *timerid)
>  {
> -#undef timer_create
>    {
>      clockid_t syscall_clockid = (clock_id == CLOCK_PROCESS_CPUTIME_ID
>  				 ? MAKE_PROCESS_CPUCLOCK (0, CPUCLOCK_SCHED)
> @@ -74,7 +68,7 @@ timer_create (clockid_t clock_id, struct sigevent *evp, timer_t *timerid)
>      else
>        {
>  	/* Create the helper thread.  */
> -	pthread_once (&__timer_helper_once, __timer_start_helper_thread);
> +	__pthread_once (&__timer_helper_once, __timer_start_helper_thread);
>  	if (__timer_helper_tid == 0)
>  	  {
>  	    /* No resources to start the helper thread.  */

Ok.

> @@ -93,7 +87,7 @@ timer_create (clockid_t clock_id, struct sigevent *evp, timer_t *timerid)
>  	/* We cannot simply copy the thread attributes since the
>  	   implementation might keep internal information for
>  	   each instance.  */
> -	pthread_attr_init (&newp->attr);
> +	__pthread_attr_init (&newp->attr);
>  	if (evp->sigev_notify_attributes != NULL)
>  	  {
>  	    struct pthread_attr *nattr;
> @@ -111,7 +105,7 @@ timer_create (clockid_t clock_id, struct sigevent *evp, timer_t *timerid)
>  	  }
>  
>  	/* In any case set the detach flag.  */
> -	pthread_attr_setdetachstate (&newp->attr, PTHREAD_CREATE_DETACHED);
> +	__pthread_attr_setdetachstate (&newp->attr, PTHREAD_CREATE_DETACHED);
>  
>  	/* Create the event structure for the kernel timer.  */
>  	struct sigevent sev =
> @@ -132,10 +126,10 @@ timer_create (clockid_t clock_id, struct sigevent *evp, timer_t *timerid)
>  	  }
>  
>  	/* Add to the queue of active timers with thread delivery.  */
> -	pthread_mutex_lock (&__timer_active_sigev_thread_lock);
> +	__pthread_mutex_lock (&__timer_active_sigev_thread_lock);
>  	newp->next = __timer_active_sigev_thread;
>  	__timer_active_sigev_thread = newp;
> -	pthread_mutex_unlock (&__timer_active_sigev_thread_lock);
> +	__pthread_mutex_unlock (&__timer_active_sigev_thread_lock);
>  
>  	*timerid = timer_to_timerid (newp);
>        }
> @@ -143,3 +137,52 @@ timer_create (clockid_t clock_id, struct sigevent *evp, timer_t *timerid)
>  
>    return 0;
>  }

Ok.

> +versioned_symbol (libc, ___timer_create, timer_create, GLIBC_2_34);
> +libc_hidden_ver (___timer_create, __timer_create)
> +
> +#if TIMER_T_WAS_INT_COMPAT
> +# if OTHER_SHLIB_COMPAT (librt, GLIBC_2_3_3, GLIBC_2_34)
> +compat_symbol (librt, ___timer_create, timer_create, GLIBC_2_3_3);
> +# endif
> +
> +# if OTHER_SHLIB_COMPAT (librt, GLIBC_2_2, GLIBC_2_3_3)
> +timer_t __timer_compat_list[OLD_TIMER_MAX] __attribute__ ((nocommon));
> +libc_hidden_data_def (__timer_compat_list)
> +
> +int
> +__timer_create_old (clockid_t clock_id, struct sigevent *evp, int *timerid)
> +{
> +  timer_t newp;
> +
> +  int res = __timer_create (clock_id, evp, &newp);
> +  if (res == 0)
> +    {
> +      int i;
> +      for (i = 0; i < OLD_TIMER_MAX; ++i)
> +	if (__timer_compat_list[i] == NULL
> +	    && ! atomic_compare_and_exchange_bool_acq (&__timer_compat_list[i],
> +						       newp, NULL))
> +	  {
> +	    *timerid = i;
> +	    break;
> +	  }
> +
> +      if (__glibc_unlikely (i == OLD_TIMER_MAX))
> +	{
> +	  /* No free slot.  */
> +	  (void) __timer_delete (newp);

No need to cast here.

> +	  __set_errno (EINVAL);
> +	  res = -1;
> +	}
> +    }
> +
> +  return res;
> +}
> +compat_symbol (librt, __timer_create_old, timer_create, GLIBC_2_2);
> +# endif /* OTHER_SHLIB_COMPAT */
> +
> +#else /* !TIMER_T_WAS_INT_COMPAT */
> +# if OTHER_SHLIB_COMPAT (librt, GLIBC_2_2, GLIBC_2_34)
> +compat_symbol (librt, ___timer_create, timer_create, GLIBC_2_2);
> +# endif
> +#endif /* !TIMER_T_WAS_INT_COMPAT */

Ok.

> diff --git a/sysdeps/unix/sysv/linux/timer_delete.c b/sysdeps/unix/sysv/linux/timer_delete.c
> index ee8c364d95..074a489afd 100644
> --- a/sysdeps/unix/sysv/linux/timer_delete.c
> +++ b/sysdeps/unix/sysv/linux/timer_delete.c
> @@ -21,17 +21,12 @@
>  #include <time.h>
>  #include <sysdep.h>
>  #include <kernel-posix-timers.h>
> -
> -
> -#ifdef timer_delete_alias
> -# define timer_delete timer_delete_alias
> -#endif
> -
> +#include <pthreadP.h>
> +#include <shlib-compat.h>
>  
>  int
> -timer_delete (timer_t timerid)
> +___timer_delete (timer_t timerid)
>  {
> -#undef timer_delete

Ok.

>    kernel_timer_t ktimerid = timerid_to_kernel_timer (timerid);
>    int res = INLINE_SYSCALL_CALL (timer_delete, ktimerid);
>  
> @@ -42,7 +37,7 @@ timer_delete (timer_t timerid)
>  	  struct timer *kt = timerid_to_timer (timerid);
>  
>  	  /* Remove the timer from the list.  */
> -	  pthread_mutex_lock (&__timer_active_sigev_thread_lock);
> +	  __pthread_mutex_lock (&__timer_active_sigev_thread_lock);
>  	  if (__timer_active_sigev_thread == kt)
>  	    __timer_active_sigev_thread = kt->next;
>  	  else
> @@ -57,7 +52,7 @@ timer_delete (timer_t timerid)
>  		else
>  		  prevp = prevp->next;
>  	    }
> -	  pthread_mutex_unlock (&__timer_active_sigev_thread_lock);
> +	  __pthread_mutex_unlock (&__timer_active_sigev_thread_lock);
>  
>  	  free (kt);
>  	}
> @@ -69,3 +64,34 @@ timer_delete (timer_t timerid)
>       Return the error.  */
>    return -1;
>  }
> +versioned_symbol (libc, ___timer_delete, timer_delete, GLIBC_2_34);
> +libc_hidden_ver (___timer_delete, __timer_delete)
> +
> +#if TIMER_T_WAS_INT_COMPAT
> +# if OTHER_SHLIB_COMPAT (librt, GLIBC_2_3_3, GLIBC_2_34)
> +compat_symbol (librt, ___timer_delete, timer_delete, GLIBC_2_3_3);
> +#endif
> +
> +# if OTHER_SHLIB_COMPAT (librt, GLIBC_2_2, GLIBC_2_3_3)
> +int
> +__timer_delete_old (int timerid)
> +{
> +  int res = __timer_delete (__timer_compat_list[timerid]);
> +
> +  if (res == 0)
> +    /* Successful timer deletion, now free the index.  We only need to
> +       store a word and that better be atomic.  */
> +    __timer_compat_list[timerid] = NULL;
> +
> +  return res;
> +}
> +compat_symbol (librt, __timer_delete_old, timer_delete, GLIBC_2_2);
> +# endif /* OTHER_SHLIB_COMPAT */
> +
> +#else /* !TIMER_T_WAS_INT_COMPAT */
> +/* The transition from int to timer_t did not change ABI because the
> +   type sizes are the same.  */
> +# if OTHER_SHLIB_COMPAT (librt, GLIBC_2_2, GLIBC_2_34)
> +compat_symbol (librt, ___timer_delete, timer_delete, GLIBC_2_2);
> +# endif
> +#endif /* !TIMER_T_WAS_INT_COMPAT */

Ok.

> diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
> index 5d0a9c4012..377d35a04f 100644
> --- a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
> @@ -1760,6 +1760,8 @@ GLIBC_2.2.5 tfind F
>  GLIBC_2.2.5 time F
>  GLIBC_2.2.5 timegm F
>  GLIBC_2.2.5 timelocal F
> +GLIBC_2.2.5 timer_create F
> +GLIBC_2.2.5 timer_delete F
>  GLIBC_2.2.5 times F
>  GLIBC_2.2.5 timezone D 0x8
>  GLIBC_2.2.5 tmpfile F
> @@ -2196,6 +2198,8 @@ GLIBC_2.3.3 strtoll_l F
>  GLIBC_2.3.3 strtoull_l F
>  GLIBC_2.3.3 sys_sigabbrev D 0x208
>  GLIBC_2.3.3 sys_siglist D 0x208
> +GLIBC_2.3.3 timer_create F
> +GLIBC_2.3.3 timer_delete F
>  GLIBC_2.3.4 __chk_fail F
>  GLIBC_2.3.4 __fprintf_chk F
>  GLIBC_2.3.4 __gets_chk F
> @@ -2440,6 +2444,8 @@ GLIBC_2.34 thrd_create F
>  GLIBC_2.34 thrd_detach F
>  GLIBC_2.34 thrd_exit F
>  GLIBC_2.34 thrd_join F
> +GLIBC_2.34 timer_create F
> +GLIBC_2.34 timer_delete F
>  GLIBC_2.34 timespec_getres F
>  GLIBC_2.34 tss_create F
>  GLIBC_2.34 tss_delete F
> diff --git a/sysdeps/unix/sysv/linux/x86_64/64/librt.abilist b/sysdeps/unix/sysv/linux/x86_64/64/librt.abilist
> index ce501e124d..13a2bf2022 100644
> --- a/sysdeps/unix/sysv/linux/x86_64/64/librt.abilist
> +++ b/sysdeps/unix/sysv/linux/x86_64/64/librt.abilist
> @@ -1,10 +1,6 @@
> -GLIBC_2.2.5 timer_create F
> -GLIBC_2.2.5 timer_delete F
>  GLIBC_2.2.5 timer_getoverrun F
>  GLIBC_2.2.5 timer_gettime F
>  GLIBC_2.2.5 timer_settime F
> -GLIBC_2.3.3 timer_create F
> -GLIBC_2.3.3 timer_delete F
>  GLIBC_2.3.3 timer_getoverrun F
>  GLIBC_2.3.3 timer_gettime F
>  GLIBC_2.3.3 timer_settime F

Ok.

> diff --git a/sysdeps/unix/sysv/linux/x86_64/Versions b/sysdeps/unix/sysv/linux/x86_64/Versions
> index 2a7ed280fd..c4d1c5fb79 100644
> --- a/sysdeps/unix/sysv/linux/x86_64/Versions
> +++ b/sysdeps/unix/sysv/linux/x86_64/Versions
> @@ -11,7 +11,7 @@ libc {
>  librt {
>    GLIBC_2.3.3 {
>      # Changed timer_t.
> -    timer_create; timer_delete; timer_getoverrun; timer_gettime;
> +    timer_getoverrun; timer_gettime;
>      timer_settime;
>    }
>  }

Ok.

> diff --git a/sysdeps/unix/sysv/linux/x86_64/compat-timer.h b/sysdeps/unix/sysv/linux/x86_64/compat-timer.h
> index 334808b5ac..c61eb40070 100644
> --- a/sysdeps/unix/sysv/linux/x86_64/compat-timer.h
> +++ b/sysdeps/unix/sysv/linux/x86_64/compat-timer.h
> @@ -20,14 +20,6 @@
>  #include <time.h>
>  #include <sys/types.h>
>  
> -#define OLD_TIMER_MAX	256
> -
> -extern timer_t __compat_timer_list[OLD_TIMER_MAX] attribute_hidden;
> -
> -
> -extern int __timer_create_new (clockid_t clock_id, struct sigevent *evp,
> -			       timer_t *timerid);
> -extern int __timer_delete_new (timer_t timerid);
>  extern int __timer_getoverrun_new (timer_t timerid);
>  extern int __timer_gettime_new (timer_t timerid, struct itimerspec *value);
>  extern int __timer_settime_new (timer_t timerid, int flags,

Ok.

> diff --git a/sysdeps/unix/sysv/linux/x86_64/timer_create.c b/sysdeps/unix/sysv/linux/x86_64/timer_create.c
> deleted file mode 100644
> index ec71ae488b..0000000000
> --- a/sysdeps/unix/sysv/linux/x86_64/timer_create.c
> +++ /dev/null
> @@ -1,65 +0,0 @@
> -/* Copyright (C) 2003-2021 Free Software Foundation, Inc.
> -   This file is part of the GNU C Library.
> -   Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
> -
> -   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; see the file COPYING.LIB.  If
> -   not, see <https://www.gnu.org/licenses/>.  */
> -
> -#include <shlib-compat.h>
> -#include "compat-timer.h"
> -#include <atomic.h>
> -
> -
> -#define timer_create_alias __timer_create_new
> -#include <sysdeps/unix/sysv/linux/timer_create.c>
> -
> -#undef timer_create
> -versioned_symbol (librt, __timer_create_new, timer_create, GLIBC_2_3_3);
> -
> -
> -#if SHLIB_COMPAT (librt, GLIBC_2_2, GLIBC_2_3_3)
> -timer_t __compat_timer_list[OLD_TIMER_MAX] attribute_hidden;
> -
> -
> -int
> -__timer_create_old (clockid_t clock_id, struct sigevent *evp, int *timerid)
> -{
> -  timer_t newp;
> -
> -  int res = __timer_create_new (clock_id, evp, &newp);
> -  if (res == 0)
> -    {
> -      int i;
> -      for (i = 0; i < OLD_TIMER_MAX; ++i)
> -	if (__compat_timer_list[i] == NULL
> -	    && ! atomic_compare_and_exchange_bool_acq (&__compat_timer_list[i],
> -						       newp, NULL))
> -	  {
> -	    *timerid = i;
> -	    break;
> -	  }
> -
> -      if (__glibc_unlikely (i == OLD_TIMER_MAX))
> -	{
> -	  /* No free slot.  */
> -	  (void) __timer_delete_new (newp);
> -	  __set_errno (EINVAL);
> -	  res = -1;
> -	}
> -    }
> -
> -  return res;
> -}
> -compat_symbol (librt, __timer_create_old, timer_create, GLIBC_2_2);
> -#endif

Ok.

> diff --git a/sysdeps/unix/sysv/linux/x86_64/timer_delete.c b/sysdeps/unix/sysv/linux/x86_64/timer_delete.c
> deleted file mode 100644
> index 7fc37fc1a7..0000000000
> --- a/sysdeps/unix/sysv/linux/x86_64/timer_delete.c
> +++ /dev/null
> @@ -1,44 +0,0 @@
> -/* Copyright (C) 2003-2021 Free Software Foundation, Inc.
> -   This file is part of the GNU C Library.
> -   Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
> -
> -   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; see the file COPYING.LIB.  If
> -   not, see <https://www.gnu.org/licenses/>.  */
> -
> -#include <shlib-compat.h>
> -#include "compat-timer.h"
> -
> -
> -#define timer_delete_alias __timer_delete_new
> -#include <sysdeps/unix/sysv/linux/timer_delete.c>
> -
> -#undef timer_delete
> -versioned_symbol (librt, __timer_delete_new, timer_delete, GLIBC_2_3_3);
> -
> -
> -#if SHLIB_COMPAT (librt, GLIBC_2_2, GLIBC_2_3_3)
> -int
> -__timer_delete_old (int timerid)
> -{
> -  int res = __timer_delete_new (__compat_timer_list[timerid]);
> -
> -  if (res == 0)
> -    /* Successful timer deletion, now free the index.  We only need to
> -       store a word and that better be atomic.  */
> -    __compat_timer_list[timerid] = NULL;
> -
> -  return res;
> -}
> -compat_symbol (librt, __timer_delete_old, timer_delete, GLIBC_2_2);
> -#endif

Ok.

> diff --git a/sysdeps/unix/sysv/linux/x86_64/timer_getoverr.c b/sysdeps/unix/sysv/linux/x86_64/timer_getoverr.c
> index 9b4c1b2235..fb6e631a00 100644
> --- a/sysdeps/unix/sysv/linux/x86_64/timer_getoverr.c
> +++ b/sysdeps/unix/sysv/linux/x86_64/timer_getoverr.c
> @@ -32,7 +32,7 @@ versioned_symbol (librt, __timer_getoverrun_new, timer_getoverrun,
>  int
>  __timer_getoverrun_old (int timerid)
>  {
> -  return __timer_getoverrun_new (__compat_timer_list[timerid]);
> +  return __timer_getoverrun_new (__timer_compat_list[timerid]);
>  }
>  compat_symbol (librt, __timer_getoverrun_old, timer_getoverrun, GLIBC_2_2);
>  #endif

Ok.

> diff --git a/sysdeps/unix/sysv/linux/x86_64/timer_gettime.c b/sysdeps/unix/sysv/linux/x86_64/timer_gettime.c
> index 107b1f97c7..06ccbc40bd 100644
> --- a/sysdeps/unix/sysv/linux/x86_64/timer_gettime.c
> +++ b/sysdeps/unix/sysv/linux/x86_64/timer_gettime.c
> @@ -35,7 +35,7 @@ versioned_symbol (librt, __timer_gettime_new, timer_gettime, GLIBC_2_3_3);
>  int
>  __timer_gettime_old (int timerid, struct itimerspec *value)
>  {
> -  return __timer_gettime_new (__compat_timer_list[timerid], value);
> +  return __timer_gettime_new (__timer_compat_list[timerid], value);
>  }
>  compat_symbol (librt, __timer_gettime_old, timer_gettime, GLIBC_2_2);
>  #endif

Ok.

> diff --git a/sysdeps/unix/sysv/linux/x86_64/timer_settime.c b/sysdeps/unix/sysv/linux/x86_64/timer_settime.c
> index f987cd16d3..dd7d01e849 100644
> --- a/sysdeps/unix/sysv/linux/x86_64/timer_settime.c
> +++ b/sysdeps/unix/sysv/linux/x86_64/timer_settime.c
> @@ -37,7 +37,7 @@ int
>  __timer_settime_old (int timerid, int flags, const struct itimerspec *value,
>  		     struct itimerspec *ovalue)
>  {
> -  return __timer_settime_new (__compat_timer_list[timerid], flags,
> +  return __timer_settime_new (__timer_compat_list[timerid], flags,
>  			      value, ovalue);
>  }
>  compat_symbol (librt, __timer_settime_old, timer_settime, GLIBC_2_2);

Ok.

> diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
> index d67ef0b6d5..620f35836c 100644
> --- a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
> @@ -2011,6 +2011,8 @@ GLIBC_2.16 tfind F
>  GLIBC_2.16 time F
>  GLIBC_2.16 timegm F
>  GLIBC_2.16 timelocal F
> +GLIBC_2.16 timer_create F
> +GLIBC_2.16 timer_delete F
>  GLIBC_2.16 timerfd_create F
>  GLIBC_2.16 timerfd_gettime F
>  GLIBC_2.16 timerfd_settime F
> @@ -2544,6 +2546,8 @@ GLIBC_2.34 thrd_create F
>  GLIBC_2.34 thrd_detach F
>  GLIBC_2.34 thrd_exit F
>  GLIBC_2.34 thrd_join F
> +GLIBC_2.34 timer_create F
> +GLIBC_2.34 timer_delete F
>  GLIBC_2.34 timespec_getres F
>  GLIBC_2.34 tss_create F
>  GLIBC_2.34 tss_delete F
> diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/librt.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/librt.abilist
> index 3144e2e290..4b3e816fdd 100644
> --- a/sysdeps/unix/sysv/linux/x86_64/x32/librt.abilist
> +++ b/sysdeps/unix/sysv/linux/x86_64/x32/librt.abilist
> @@ -1,5 +1,3 @@
> -GLIBC_2.16 timer_create F
> -GLIBC_2.16 timer_delete F
>  GLIBC_2.16 timer_getoverrun F
>  GLIBC_2.16 timer_gettime F
>  GLIBC_2.16 timer_settime F
> 

Ok.

  reply	other threads:[~2021-06-24 17:18 UTC|newest]

Thread overview: 72+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-06-17 18:56 [PATCH v2 00/34] Move librt into libc Florian Weimer
2021-06-17 18:56 ` [PATCH 01/34] rt: Lexicographically sort Versions file; librt-routines in Makefile Florian Weimer
2021-06-17 18:56 ` [PATCH 02/34] Fix librt-routines-var issues for !PTHREAD_IN_LIBC Florian Weimer
2021-06-17 18:56 ` [PATCH 03/34] rt: Replace generic stub of shm_open with the posix version Florian Weimer
2021-06-17 18:57 ` [PATCH 04/34] rt: Replace generic stub of shm_unlink " Florian Weimer
2021-06-17 18:57 ` [PATCH 05/34] rt: Move shm_open into libc Florian Weimer
2021-06-17 18:57 ` [PATCH 06/34] rt: Move shm_unlink " Florian Weimer
2021-06-17 18:57 ` [PATCH 07/34] rt: Move generic implementation from sysdeps/pthread to rt Florian Weimer
2021-06-21 18:37   ` Adhemerval Zanella
2021-06-17 18:57 ` [PATCH 08/34] nptl: Move pthreadP.h into sysdeps directory Florian Weimer
2021-06-22  0:57   ` Adhemerval Zanella
2021-06-17 18:57 ` [PATCH 09/34] Add hidden prototypes for fsync, fdatasync Florian Weimer
2021-06-22  0:58   ` Adhemerval Zanella
2021-06-17 18:57 ` [PATCH 10/34] Linux: Move aio_init from librt into libc Florian Weimer
2021-06-23 13:22   ` Adhemerval Zanella
2021-06-17 18:57 ` [PATCH 11/34] Linux: Move aio_cancel, aio_cancel64 " Florian Weimer
2021-06-23 17:26   ` Adhemerval Zanella
2021-06-17 18:57 ` [PATCH 12/34] Linux: Move aio_error, aio_error64 " Florian Weimer
2021-06-23 17:43   ` Adhemerval Zanella
2021-06-17 18:57 ` [PATCH 13/34] Linux: Move aio_fsync, aio_fsync64 " Florian Weimer
2021-06-23 17:46   ` Adhemerval Zanella
2021-06-17 18:58 ` [PATCH 14/34] Linux: Move aio_read, aio_read64 " Florian Weimer
2021-06-23 17:51   ` Adhemerval Zanella
2021-06-25  9:53     ` Florian Weimer
2021-06-25 12:36       ` Adhemerval Zanella
2021-06-17 18:58 ` [PATCH 15/34] Linux: Move aio_return, aio_return64 " Florian Weimer
2021-06-23 19:44   ` Adhemerval Zanella
2021-06-17 18:58 ` [PATCH 16/34] Linux: Move aio_suspend, aio_suspend64, __aio_suspend_time64 to libc Florian Weimer
2021-06-23 19:52   ` Adhemerval Zanella
2021-06-23 19:59     ` Florian Weimer
2021-06-17 18:58 ` [PATCH 17/34] Linux: Move aio_write, aio_write64 into libc Florian Weimer
2021-06-23 20:02   ` Adhemerval Zanella
2021-06-17 18:58 ` [PATCH 18/34] rt: Rework lio_listio implementation Florian Weimer
2021-06-23 20:10   ` Adhemerval Zanella
2021-06-17 18:58 ` [PATCH 19/34] Linux: Move lio_listio, lio_listio64 from librt to libc Florian Weimer
2021-06-23 20:12   ` Adhemerval Zanella
2021-06-17 18:58 ` [PATCH 20/34] Linux: Move mq_close " Florian Weimer
2021-06-24 14:00   ` Adhemerval Zanella
2021-06-17 18:58 ` [PATCH 21/34] Linux: Move mq_setattr " Florian Weimer
2021-06-24 14:02   ` Adhemerval Zanella
2021-06-25 10:02     ` Florian Weimer
2021-06-17 18:58 ` [PATCH 22/34] Linux: Move mq_getattr " Florian Weimer
2021-06-24 14:02   ` Adhemerval Zanella
2021-06-17 18:58 ` [PATCH 23/34] Linux: Move mq_notify " Florian Weimer
2021-06-24 14:05   ` Adhemerval Zanella
2021-06-25 11:37     ` Florian Weimer
2021-06-17 18:59 ` [PATCH 24/34] Linux: Move mq_open, __mq_open_2 " Florian Weimer
2021-06-24 14:07   ` Adhemerval Zanella
2021-06-17 18:59 ` [PATCH 25/34] Linux: Move mq_receive, mq_timedreceive, __mq_timedreceive_time64 " Florian Weimer
2021-06-24 14:14   ` Adhemerval Zanella
2021-06-17 18:59 ` [PATCH 26/34] Linux: Move mq_send, mq_timedsend, __mq_timedsend_time64 " Florian Weimer
2021-06-24 14:22   ` Adhemerval Zanella
2021-06-17 18:59 ` [PATCH 27/34] Linux: Move mq_unlink from librt " Florian Weimer
2021-06-24 14:31   ` Adhemerval Zanella
2021-06-17 18:59 ` [PATCH 28/34] Linux: Move timer helper routines " Florian Weimer
2021-06-24 14:41   ` Adhemerval Zanella
2021-06-25 11:38     ` Florian Weimer
2021-06-17 18:59 ` [PATCH 29/34] Linux: Define TIMER_T_WAS_INT_COMPAT in kernel-posix-timers.h Florian Weimer
2021-06-24 16:21   ` Adhemerval Zanella
2021-06-17 18:59 ` [PATCH 30/34] Linux: Move timer_create, timer_delete from librt to libc Florian Weimer
2021-06-24 17:18   ` Adhemerval Zanella [this message]
2021-06-17 18:59 ` [PATCH 31/34] Linux: Move timer_getoverrun " Florian Weimer
2021-06-24 17:26   ` Adhemerval Zanella
2021-06-24 17:38   ` Adhemerval Zanella
2021-06-17 18:59 ` [PATCH 32/34] Linux: Move timer_gettime, __timer_gettime64 " Florian Weimer
2021-06-24 17:36   ` Adhemerval Zanella
2021-06-17 18:59 ` [PATCH 33/34] Linux: Move timer_settime, __timer_settime64 " Florian Weimer
2021-06-24 17:42   ` Adhemerval Zanella
2021-06-17 19:00 ` [PATCH 34/34] Linux: Cleanups after librt move Florian Weimer
2021-06-24 17:45   ` Adhemerval Zanella
2021-06-25  8:53     ` Florian Weimer
2021-06-24 17:49 ` [PATCH v2 00/34] Move librt into libc Adhemerval Zanella

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1bc7abd8-8021-61f4-9c07-8c22af35e1a5@linaro.org \
    --to=adhemerval.zanella@linaro.org \
    --cc=fweimer@redhat.com \
    --cc=libc-alpha@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).