From 477910b83e5ef3b3aa78b11808433846989461c8 Mon Sep 17 00:00:00 2001 From: Florian Weimer Date: Mon, 28 Jun 2021 09:51:01 +0200 Subject: Linux: Move timer_settime, __timer_settime64 from librt to libc The symbols were moved using scripts/move-symbol-to-libc.py. 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. The shared librt is now empty, so this commit adds a placeholder symbol at the base version, GLIBC_2.2, and potentially at the GLIBC_2.3.3 version as well (the leftover from the int/timer_t ABI transition). Reviewed-by: Adhemerval Zanella --- sysdeps/unix/sysv/linux/timer_settime.c | 73 +++++++++++++++++++++++++++------ 1 file changed, 60 insertions(+), 13 deletions(-) (limited to 'sysdeps/unix/sysv/linux/timer_settime.c') diff --git a/sysdeps/unix/sysv/linux/timer_settime.c b/sysdeps/unix/sysv/linux/timer_settime.c index f8bb16a4c2..8884abfdc6 100644 --- a/sysdeps/unix/sysv/linux/timer_settime.c +++ b/sysdeps/unix/sysv/linux/timer_settime.c @@ -22,27 +22,29 @@ #include #include #include "kernel-posix-timers.h" +#include +#if !TIMER_T_WAS_INT_COMPAT int -__timer_settime64 (timer_t timerid, int flags, +___timer_settime64 (timer_t timerid, int flags, const struct __itimerspec64 *value, struct __itimerspec64 *ovalue) { kernel_timer_t ktimerid = timerid_to_kernel_timer (timerid); -#ifdef __ASSUME_TIME64_SYSCALLS -# ifndef __NR_timer_settime64 -# define __NR_timer_settime64 __NR_timer_settime -# endif +# ifdef __ASSUME_TIME64_SYSCALLS +# ifndef __NR_timer_settime64 +# define __NR_timer_settime64 __NR_timer_settime +# endif return INLINE_SYSCALL_CALL (timer_settime64, ktimerid, flags, value, ovalue); -#else -# ifdef __NR_timer_settime64 +# else +# ifdef __NR_timer_settime64 int ret = INLINE_SYSCALL_CALL (timer_settime64, ktimerid, flags, value, ovalue); if (ret == 0 || errno != ENOSYS) return ret; -# endif +# endif struct itimerspec its32, oits32; if (! in_time_t_range ((value->it_value).tv_sec) @@ -64,11 +66,18 @@ __timer_settime64 (timer_t timerid, int flags, } return retval; -#endif +# endif } -#if __TIMESIZE != 64 -librt_hidden_def (__timer_settime64) +# if __TIMESIZE == 64 +versioned_symbol (libc, ___timer_settime64, timer_settime, GLIBC_2_34); +# if OTHER_SHLIB_COMPAT (librt, GLIBC_2_2, GLIBC_2_34) +compat_symbol (librt, ___timer_settime64, timer_settime, GLIBC_2_2); +# endif + +#else /* __TIMESIZE != 64 */ +libc_hidden_ver (___timer_settime64, __timer_settime64) +versioned_symbol (libc, ___timer_settime64, __timer_settime64, GLIBC_2_34); int __timer_settime (timer_t timerid, int flags, const struct itimerspec *value, @@ -89,5 +98,43 @@ __timer_settime (timer_t timerid, int flags, const struct itimerspec *value, return retval; } -#endif -weak_alias (__timer_settime, timer_settime) +versioned_symbol (libc, __timer_settime, timer_settime, GLIBC_2_34); + +# if OTHER_SHLIB_COMPAT (librt, GLIBC_2_2, GLIBC_2_34) +compat_symbol (librt, __timer_settime, timer_settime, GLIBC_2_2); +# endif +# endif /* __TIMESIZE != 64 */ + +#else /* TIMER_T_WAS_INT_COMPAT */ + +extern __typeof (timer_settime) __timer_settime_new; +libc_hidden_proto (__timer_settime_new) + +int +___timer_settime_new (timer_t timerid, int flags, + const struct itimerspec *value, + struct itimerspec *ovalue) +{ + kernel_timer_t ktimerid = timerid_to_kernel_timer (timerid); + + return INLINE_SYSCALL_CALL (timer_settime, ktimerid, flags, value, ovalue); +} +versioned_symbol (libc, ___timer_settime_new, timer_settime, GLIBC_2_34); +libc_hidden_ver (___timer_settime_new, __timer_settime_new) + +# if OTHER_SHLIB_COMPAT (librt, GLIBC_2_3_3, GLIBC_2_34) +compat_symbol (librt, ___timer_settime_new, timer_settime, GLIBC_2_3_3); +# endif + +# if OTHER_SHLIB_COMPAT (librt, GLIBC_2_2, GLIBC_2_3_3) +int +__timer_settime_old (int timerid, int flags, const struct itimerspec *value, + struct itimerspec *ovalue) +{ + return __timer_settime_new (__timer_compat_list[timerid], flags, + value, ovalue); +} +compat_symbol (librt, __timer_settime_old, timer_settime, GLIBC_2_2); +# endif + +#endif /* TIMER_T_WAS_INT_COMPAT */ -- cgit v1.2.3-70-g09d2