cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

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