diff options
author | Adhemerval Zanella <adhemerval.zanella@linaro.org> | 2019-10-24 21:01:40 +0000 |
---|---|---|
committer | Adhemerval Zanella <adhemerval.zanella@linaro.org> | 2019-10-30 17:11:10 -0300 |
commit | f9a7554009cf38f390e74fcabc5b49f974f72382 (patch) | |
tree | b8e5b100ca6f2bc18ff0b134d48c9e26e83325ba /sysdeps/unix/sysv/linux/powerpc/time.c | |
parent | 0d563783490bf5b2d7d52cab205760fdff5d5650 (diff) | |
download | glibc-f9a7554009cf38f390e74fcabc5b49f974f72382.tar.gz glibc-f9a7554009cf38f390e74fcabc5b49f974f72382.tar.xz glibc-f9a7554009cf38f390e74fcabc5b49f974f72382.zip |
Change most internal uses of time to __clock_gettime.
As for gettimeofday, time will be implemented based on clock_gettime on all platforms and internal code should use clock_gettime directly. In addition to removing a layer of indirection, this will allow us to remove the PLT-bypass gunk for gettimeofday. The changed code always assumes __clock_gettime (CLOCK_REALTIME) or __clock_gettime (CLOCK_REALTIME_COARSE) (for Linux case) cannot fail, using the same rationale for gettimeofday change. And internal helper was added (time_now). Checked on x86_64-linux-gnu, i686-linux-gnu, powerpc64le-linux-gnu, powerpc64-linux-gnu, and powerpc-linux-gnu. Reviewed-by: Lukasz Majewski <lukma@denx.de>
Diffstat (limited to 'sysdeps/unix/sysv/linux/powerpc/time.c')
-rw-r--r-- | sysdeps/unix/sysv/linux/powerpc/time.c | 71 |
1 files changed, 20 insertions, 51 deletions
diff --git a/sysdeps/unix/sysv/linux/powerpc/time.c b/sysdeps/unix/sysv/linux/powerpc/time.c index e957b81751..80a4c73416 100644 --- a/sysdeps/unix/sysv/linux/powerpc/time.c +++ b/sysdeps/unix/sysv/linux/powerpc/time.c @@ -16,68 +16,37 @@ License along with the GNU C Library; if not, see <https://www.gnu.org/licenses/>. */ -#ifdef SHARED -# ifndef __powerpc64__ -# define time __redirect_time -# else -# define __redirect_time time -# endif - -# include <time.h> -# include <sysdep.h> -# include <dl-vdso.h> -# include <libc-vdso.h> -# include <dl-machine.h> +#include <time.h> +#include <sysdep.h> -# ifndef __powerpc64__ -# undef time +#ifdef HAVE_TIME_VSYSCALL +# define HAVE_VSYSCALL +#endif +#include <sysdep-vdso.h> -time_t -__time_vsyscall (time_t *t) +static time_t +time_vsyscall (time_t *t) { return INLINE_VSYSCALL (time, 1, t); } -/* __GI_time is defined as hidden and for ppc32 it enables the - compiler make a local call (symbol@local) for internal GLIBC usage. It - means the PLT won't be used and the ifunc resolver will be called directly. - For ppc64 a call to a function in another translation unit might use a - different toc pointer thus disallowing direct branchess and making internal - ifuncs calls safe. */ -# undef libc_hidden_def -# define libc_hidden_def(name) \ - __hidden_ver1 (__time_vsyscall, __GI_time, __time_vsyscall); - -# endif /* !__powerpc64__ */ - -static time_t -time_syscall (time_t *t) -{ - struct timeval tv; - time_t result; - - if (INLINE_VSYSCALL (gettimeofday, 2, &tv, NULL) < 0) - result = (time_t) -1; - else - result = (time_t) tv.tv_sec; - - if (t != NULL) - *t = result; - return result; -} +#ifdef SHARED +# include <dl-vdso.h> +# include <libc-vdso.h> # define INIT_ARCH() \ void *vdso_time = get_vdso_symbol (HAVE_TIME_VSYSCALL); /* If the vDSO is not available we fall back to the syscall. */ -libc_ifunc_hidden (__redirect_time, time, - vdso_time - ? VDSO_IFUNC_RET (vdso_time) - : (void *) time_syscall); -libc_hidden_def (time) +libc_ifunc (time, + vdso_time + ? VDSO_IFUNC_RET (vdso_time) + : (void *) time_vsyscall); #else - -#include <time/time.c> - +time_t +time (time_t *t) +{ + return time_vsyscall (t); +} #endif /* !SHARED */ |