vclock_gettime.c (2626B)
1// SPDX-License-Identifier: GPL-2.0-only 2/* 3 * Fast user context implementation of clock_gettime, gettimeofday, and time. 4 * 5 * Copyright 2006 Andi Kleen, SUSE Labs. 6 * Copyright 2019 ARM Limited 7 * 8 * 32 Bit compat layer by Stefani Seibold <stefani@seibold.net> 9 * sponsored by Rohde & Schwarz GmbH & Co. KG Munich/Germany 10 */ 11#include <linux/time.h> 12#include <linux/kernel.h> 13#include <linux/types.h> 14 15#include "../../../../lib/vdso/gettimeofday.c" 16 17extern int __vdso_gettimeofday(struct __kernel_old_timeval *tv, struct timezone *tz); 18extern __kernel_old_time_t __vdso_time(__kernel_old_time_t *t); 19 20int __vdso_gettimeofday(struct __kernel_old_timeval *tv, struct timezone *tz) 21{ 22 return __cvdso_gettimeofday(tv, tz); 23} 24 25int gettimeofday(struct __kernel_old_timeval *, struct timezone *) 26 __attribute__((weak, alias("__vdso_gettimeofday"))); 27 28__kernel_old_time_t __vdso_time(__kernel_old_time_t *t) 29{ 30 return __cvdso_time(t); 31} 32 33__kernel_old_time_t time(__kernel_old_time_t *t) __attribute__((weak, alias("__vdso_time"))); 34 35 36#if defined(CONFIG_X86_64) && !defined(BUILD_VDSO32_64) 37/* both 64-bit and x32 use these */ 38extern int __vdso_clock_gettime(clockid_t clock, struct __kernel_timespec *ts); 39extern int __vdso_clock_getres(clockid_t clock, struct __kernel_timespec *res); 40 41int __vdso_clock_gettime(clockid_t clock, struct __kernel_timespec *ts) 42{ 43 return __cvdso_clock_gettime(clock, ts); 44} 45 46int clock_gettime(clockid_t, struct __kernel_timespec *) 47 __attribute__((weak, alias("__vdso_clock_gettime"))); 48 49int __vdso_clock_getres(clockid_t clock, 50 struct __kernel_timespec *res) 51{ 52 return __cvdso_clock_getres(clock, res); 53} 54int clock_getres(clockid_t, struct __kernel_timespec *) 55 __attribute__((weak, alias("__vdso_clock_getres"))); 56 57#else 58/* i386 only */ 59extern int __vdso_clock_gettime(clockid_t clock, struct old_timespec32 *ts); 60extern int __vdso_clock_getres(clockid_t clock, struct old_timespec32 *res); 61 62int __vdso_clock_gettime(clockid_t clock, struct old_timespec32 *ts) 63{ 64 return __cvdso_clock_gettime32(clock, ts); 65} 66 67int clock_gettime(clockid_t, struct old_timespec32 *) 68 __attribute__((weak, alias("__vdso_clock_gettime"))); 69 70int __vdso_clock_gettime64(clockid_t clock, struct __kernel_timespec *ts) 71{ 72 return __cvdso_clock_gettime(clock, ts); 73} 74 75int clock_gettime64(clockid_t, struct __kernel_timespec *) 76 __attribute__((weak, alias("__vdso_clock_gettime64"))); 77 78int __vdso_clock_getres(clockid_t clock, struct old_timespec32 *res) 79{ 80 return __cvdso_clock_getres_time32(clock, res); 81} 82 83int clock_getres(clockid_t, struct old_timespec32 *) 84 __attribute__((weak, alias("__vdso_clock_getres"))); 85#endif