vclock_gettime.c 2.6 KB

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