From: Khem R. <raj...@gm...> - 2020-03-10 01:00:46
|
modern libc provides these functions, moreover this also ensures that we are 64bit time_t safe. Fallback to existing definitions if libc does not have the implementation or syscall is not defined Signed-off-by: Khem Raj <raj...@gm...> --- v2: Check for sys/timerfd.h header instead of funcitons configure.ac | 1 + memcheck/tests/linux/timerfd-syscall.c | 14 +++++++++++--- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/configure.ac b/configure.ac index 3336329e9..4c607fb8b 100755 --- a/configure.ac +++ b/configure.ac @@ -4206,6 +4206,7 @@ AC_CHECK_HEADERS([ \ sys/syscall.h \ sys/sysnvl.h \ sys/time.h \ + sys/timerfd.h \ sys/types.h \ ]) diff --git a/memcheck/tests/linux/timerfd-syscall.c b/memcheck/tests/linux/timerfd-syscall.c index 4af622cc4..9bb697475 100644 --- a/memcheck/tests/linux/timerfd-syscall.c +++ b/memcheck/tests/linux/timerfd-syscall.c @@ -44,6 +44,9 @@ #if defined(HAVE_SYS_TIME_H) #include <sys/time.h> #endif +#if defined(HAVE_SYS_TIMERFD_H) +#include <sys/timerfd.h> +#endif #if defined(HAVE_SYS_TYPES_H) #include <sys/types.h> #endif @@ -53,7 +56,8 @@ * timerfd_* system call numbers introduced in 2.6.23. These constants are * not yet in the glibc 2.7 headers, that is why they are defined here. */ -#ifndef __NR_timerfd_create +#if !defined(HAVE_SYS_TIMERFD_H) +#if !defined(__NR_timerfd_create) #if defined(__x86_64__) #define __NR_timerfd_create 283 #elif defined(__i386__) @@ -66,8 +70,10 @@ #error Cannot detect your architecture! #endif #endif +#endif -#ifndef __NR_timerfd_settime +#if !defined(HAVE_SYS_TIMERFD_H) +#if !defined(__NR_timerfd_settime) #if defined(__x86_64__) #define __NR_timerfd_settime 286 #define __NR_timerfd_gettime 287 @@ -84,7 +90,7 @@ #error Cannot detect your architecture! #endif #endif - +#endif /* Definitions from include/linux/timerfd.h */ @@ -126,6 +132,7 @@ void set_timespec(struct timespec *tmr, unsigned long long ustime) tmr->tv_nsec = (long) (1000ULL * (ustime % 1000000ULL)); } +#if !defined(HAVE_SYS_TIMERFD_H) int timerfd_create(int clockid, int flags) { return syscall(__NR_timerfd_create, clockid, flags); @@ -141,6 +148,7 @@ int timerfd_gettime(int ufc, struct itimerspec *otmr) { return syscall(__NR_timerfd_gettime, ufc, otmr); } +#endif long waittmr(int tfd, int timeo) { -- 2.25.1 |