From 6e6249d0b461b952d0f544792372663feb6d792a Mon Sep 17 00:00:00 2001 From: Roland McGrath Date: Wed, 24 Oct 2012 14:50:46 -0700 Subject: BZ#14743: Move clock_* symbols from librt to libc. --- rt/Makefile | 7 ++++-- rt/Versions | 14 ++++++++++- rt/clock-compat.c | 65 ++++++++++++++++++++++++++++++++++++++++++++++++ rt/clock_getcpuclockid.c | 4 ++- rt/clock_getres.c | 4 ++- rt/clock_gettime.c | 5 ++-- rt/clock_nanosleep.c | 1 + rt/clock_settime.c | 4 ++- 8 files changed, 96 insertions(+), 8 deletions(-) create mode 100644 rt/clock-compat.c (limited to 'rt') diff --git a/rt/Makefile b/rt/Makefile index 26d4ffaaf6..4805f8b5b7 100644 --- a/rt/Makefile +++ b/rt/Makefile @@ -36,9 +36,12 @@ mq-routines := mq_open mq_close mq_unlink mq_getattr mq_setattr \ mq_notify mq_send mq_receive mq_timedsend \ mq_timedreceive +routines = $(clock-routines) + librt-routines = $(aio-routines) \ - $(clock-routines) $(timer-routines) \ - $(shm-routines) $(mq-routines) + $(timer-routines) \ + $(shm-routines) $(mq-routines) \ + clock-compat tests := tst-shm tst-clock tst-clock_nanosleep tst-timer tst-timer2 \ tst-aio tst-aio64 tst-aio2 tst-aio3 tst-aio4 tst-aio5 tst-aio6 \ diff --git a/rt/Versions b/rt/Versions index 2921c9c8ab..91e3fd2a20 100644 --- a/rt/Versions +++ b/rt/Versions @@ -1,3 +1,15 @@ +libc { + GLIBC_2.17 { + # c* + clock_getres; clock_gettime; clock_settime; clock_getcpuclockid; + clock_nanosleep; + } + GLIBC_PRIVATE { + __clock_getres; __clock_gettime; __clock_settime; __clock_getcpuclockid; + __clock_nanosleep; + } +} + librt { GLIBC_2.1 { # AIO functions. @@ -6,7 +18,7 @@ librt { aio_suspend64; aio_write; aio_write64; lio_listio; lio_listio64; } GLIBC_2.2 { - # c* + # These have moved to libc and are still here only for compatibility. clock_getres; clock_gettime; clock_settime; clock_getcpuclockid; clock_nanosleep; diff --git a/rt/clock-compat.c b/rt/clock-compat.c new file mode 100644 index 0000000000..16e4109210 --- /dev/null +++ b/rt/clock-compat.c @@ -0,0 +1,65 @@ +/* ABI compatibility redirects for clock_* symbols in librt. + Copyright (C) 2012 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#include + +/* The clock_* symbols were originally defined in librt and so + are part of its ABI. As of 2.17, they have moved to libc. + So we supply definitions for librt that just redirect to + their libc counterparts. */ + +#if SHLIB_COMPAT (librt, GLIBC_2_2, GLIBC_2_17) + +#include + +#ifdef HAVE_IFUNC +# define COMPAT_REDIRECT(name, proto, arglist) \ + __typeof (name) *name##_ifunc (void) asm (#name); \ + __typeof (name) *name##_ifunc (void) \ + { \ + return &__##name; \ + } \ + asm (".type " #name ", %gnu_indirect_function"); +#else +# define COMPAT_REDIRECT(name, proto, arglist) \ + int \ + name proto \ + { \ + return __##name arglist; \ + } +#endif + +COMPAT_REDIRECT (clock_getres, + (clockid_t clock_id, struct timespec *res), + (clock_id, res)) +COMPAT_REDIRECT (clock_gettime, + (clockid_t clock_id, struct timespec *tp), + (clock_id, tp)) +COMPAT_REDIRECT (clock_settime, + (clockid_t clock_id, const struct timespec *tp), + (clock_id, tp)) +COMPAT_REDIRECT (clock_getcpuclockid, + (pid_t pid, clockid_t *clock_id), + (pid, clock_id)) +COMPAT_REDIRECT (clock_nanosleep, + (clockid_t clock_id, int flags, + const struct timespec *req, + struct timespec *rem), + (clock_id, flags, req, rem)) + +#endif diff --git a/rt/clock_getcpuclockid.c b/rt/clock_getcpuclockid.c index 08972f54fd..4bead25685 100644 --- a/rt/clock_getcpuclockid.c +++ b/rt/clock_getcpuclockid.c @@ -1,4 +1,5 @@ -/* Copyright (C) 2000, 2001 Free Software Foundation, Inc. +/* Get a clockid_t for the process CPU clock of a given process. Generic. + Copyright (C) 2000-2012 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -36,3 +37,4 @@ clock_getcpuclockid (pid_t pid, clockid_t *clock_id) return ENOENT; #endif } +strong_alias (clock_getcpuclockid, __clock_getcpuclockid) diff --git a/rt/clock_getres.c b/rt/clock_getres.c index 576c9bf738..162c8a5697 100644 --- a/rt/clock_getres.c +++ b/rt/clock_getres.c @@ -1,4 +1,5 @@ -/* Copyright (C) 1999 Free Software Foundation, Inc. +/* Get the resolution of a clock. Stub version. + Copyright (C) 1999-2012 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -25,5 +26,6 @@ clock_getres (clockid_t clock_id, struct timespec *res) __set_errno (ENOSYS); return -1; } +strong_alias (clock_getres, __clock_getres) stub_warning (clock_getres) #include diff --git a/rt/clock_gettime.c b/rt/clock_gettime.c index 1203f01179..5139e8724c 100644 --- a/rt/clock_gettime.c +++ b/rt/clock_gettime.c @@ -1,4 +1,5 @@ -/* Copyright (C) 1999, 2005 Free Software Foundation, Inc. +/* Get the current value of a clock. Stub version. + Copyright (C) 1999-2012 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -25,6 +26,6 @@ clock_gettime (clockid_t clock_id, struct timespec *tp) __set_errno (ENOSYS); return -1; } -librt_hidden_def (clock_gettime) +strong_alias (clock_gettime, __clock_gettime) stub_warning (clock_gettime) #include diff --git a/rt/clock_nanosleep.c b/rt/clock_nanosleep.c index 0b16ad2d4f..d9a0e92d4b 100644 --- a/rt/clock_nanosleep.c +++ b/rt/clock_nanosleep.c @@ -33,5 +33,6 @@ clock_nanosleep (clockid_t clock_id, int flags, const struct timespec *req, /* Not implemented. */ return ENOSYS; } +strong_alias (clock_nanosleep, __clock_nanosleep) stub_warning (clock_nanosleep) #include diff --git a/rt/clock_settime.c b/rt/clock_settime.c index 3b3c3c48d5..6f7cdd6edc 100644 --- a/rt/clock_settime.c +++ b/rt/clock_settime.c @@ -1,4 +1,5 @@ -/* Copyright (C) 1999 Free Software Foundation, Inc. +/* Set a clock to a given value. Stub version. + Copyright (C) 1999-2012 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -25,5 +26,6 @@ clock_settime (clockid_t clock_id, const struct timespec *tp) __set_errno (ENOSYS); return -1; } +strong_alias (clock_settime, __clock_settime) stub_warning (clock_settime) #include -- cgit v1.2.1