vclock_gettime.c 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  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. #include <vdso/gettime.h>
  15. #include "../../../../lib/vdso/gettimeofday.c"
  16. int __vdso_gettimeofday(struct __kernel_old_timeval *tv, struct timezone *tz)
  17. {
  18. return __cvdso_gettimeofday(tv, tz);
  19. }
  20. int gettimeofday(struct __kernel_old_timeval *, struct timezone *)
  21. __attribute__((weak, alias("__vdso_gettimeofday")));
  22. __kernel_old_time_t __vdso_time(__kernel_old_time_t *t)
  23. {
  24. return __cvdso_time(t);
  25. }
  26. __kernel_old_time_t time(__kernel_old_time_t *t) __attribute__((weak, alias("__vdso_time")));
  27. #if defined(CONFIG_X86_64) && !defined(BUILD_VDSO32_64)
  28. /* both 64-bit and x32 use these */
  29. int __vdso_clock_gettime(clockid_t clock, struct __kernel_timespec *ts)
  30. {
  31. return __cvdso_clock_gettime(clock, ts);
  32. }
  33. int clock_gettime(clockid_t, struct __kernel_timespec *)
  34. __attribute__((weak, alias("__vdso_clock_gettime")));
  35. int __vdso_clock_getres(clockid_t clock,
  36. struct __kernel_timespec *res)
  37. {
  38. return __cvdso_clock_getres(clock, res);
  39. }
  40. int clock_getres(clockid_t, struct __kernel_timespec *)
  41. __attribute__((weak, alias("__vdso_clock_getres")));
  42. #else
  43. /* i386 only */
  44. int __vdso_clock_gettime(clockid_t clock, struct old_timespec32 *ts)
  45. {
  46. return __cvdso_clock_gettime32(clock, ts);
  47. }
  48. int clock_gettime(clockid_t, struct old_timespec32 *)
  49. __attribute__((weak, alias("__vdso_clock_gettime")));
  50. int __vdso_clock_gettime64(clockid_t clock, struct __kernel_timespec *ts)
  51. {
  52. return __cvdso_clock_gettime(clock, ts);
  53. }
  54. int clock_gettime64(clockid_t, struct __kernel_timespec *)
  55. __attribute__((weak, alias("__vdso_clock_gettime64")));
  56. int __vdso_clock_getres(clockid_t clock, struct old_timespec32 *res)
  57. {
  58. return __cvdso_clock_getres_time32(clock, res);
  59. }
  60. int clock_getres(clockid_t, struct old_timespec32 *)
  61. __attribute__((weak, alias("__vdso_clock_getres")));
  62. #endif