diff options
Diffstat (limited to 'sysdeps/unix/sysv/linux/clock_gettime.c')
-rw-r--r-- | sysdeps/unix/sysv/linux/clock_gettime.c | 94 |
1 files changed, 4 insertions, 90 deletions
diff --git a/sysdeps/unix/sysv/linux/clock_gettime.c b/sysdeps/unix/sysv/linux/clock_gettime.c index e333d8d9e8..05dfb9d099 100644 --- a/sysdeps/unix/sysv/linux/clock_gettime.c +++ b/sysdeps/unix/sysv/linux/clock_gettime.c @@ -49,99 +49,13 @@ retval = SYSCALL_GETTIME (clock_id, tp); \ break -#ifdef __NR_clock_gettime /* We handled the REALTIME clock here. */ -# define HANDLED_REALTIME 1 -# define HANDLED_CPUTIME 1 +#define HANDLED_REALTIME 1 +#define HANDLED_CPUTIME 1 -# if __ASSUME_POSIX_CPU_TIMERS > 0 - -# define SYSDEP_GETTIME_CPU(clock_id, tp) \ +#define SYSDEP_GETTIME_CPU(clock_id, tp) \ retval = SYSCALL_GETTIME (clock_id, tp); \ break -# define SYSDEP_GETTIME_CPUTIME /* Default catches them too. */ - -# else - -int __libc_missing_posix_cpu_timers attribute_hidden; - -static int -maybe_syscall_gettime_cpu (clockid_t clock_id, struct timespec *tp) -{ - int e = EINVAL; - - if (!__libc_missing_posix_cpu_timers) - { - INTERNAL_SYSCALL_DECL (err); - int r = INTERNAL_GETTIME (clock_id, tp); - if (!INTERNAL_SYSCALL_ERROR_P (r, err)) - return 0; - - e = INTERNAL_SYSCALL_ERRNO (r, err); - if (e == EINVAL) - { -# ifdef HAVE_CLOCK_GETRES_VSYSCALL - /* Check whether the kernel supports CPU clocks at all. - If not, record it for the future. */ - r = INTERNAL_VSYSCALL (clock_getres, err, 2, - MAKE_PROCESS_CPUCLOCK (0, CPUCLOCK_SCHED), - NULL); -# else - /* Check whether the kernel supports CPU clocks at all. - If not, record it for the future. */ - r = INTERNAL_SYSCALL (clock_getres, err, 2, - MAKE_PROCESS_CPUCLOCK (0, CPUCLOCK_SCHED), - NULL); -# endif - if (INTERNAL_SYSCALL_ERROR_P (r, err)) - __libc_missing_posix_cpu_timers = 1; - } - } - - return e; -} - -# define SYSDEP_GETTIME_CPU(clock_id, tp) \ - retval = maybe_syscall_gettime_cpu (clock_id, tp); \ - if (retval == 0) \ - break; \ - if (retval != EINVAL || !__libc_missing_posix_cpu_timers) \ - { \ - __set_errno (retval); \ - retval = -1; \ - break; \ - } \ - retval = -1 /* Otherwise continue on to the HP_TIMING version. */; - -static inline int -maybe_syscall_gettime_cputime (clockid_t clock_id, struct timespec *tp) -{ - return maybe_syscall_gettime_cpu - (clock_id == CLOCK_THREAD_CPUTIME_ID - ? MAKE_THREAD_CPUCLOCK (0, CPUCLOCK_SCHED) - : MAKE_PROCESS_CPUCLOCK (0, CPUCLOCK_SCHED), - tp); -} - -# define SYSDEP_GETTIME_CPUTIME \ - case CLOCK_PROCESS_CPUTIME_ID: \ - case CLOCK_THREAD_CPUTIME_ID: \ - retval = maybe_syscall_gettime_cputime (clock_id, tp); \ - if (retval == 0) \ - break; \ - if (retval != EINVAL || !__libc_missing_posix_cpu_timers) \ - { \ - __set_errno (retval); \ - retval = -1; \ - break; \ - } \ - retval = hp_timing_gettime (clock_id, tp); \ - break -# if !HP_TIMING_AVAIL -# define hp_timing_gettime(clock_id, tp) (__set_errno (EINVAL), -1) -# endif - -# endif -#endif +#define SYSDEP_GETTIME_CPUTIME /* Default catches them too. */ #include <sysdeps/unix/clock_gettime.c> |