commit
e9698175b0b60407db1e89bcf29437ab224bca0b
Author: Lukasz Majewski <lukma@denx.de>
Date: Mon Mar 16 08:31:41 2020 +0100
y2038: Replace __clock_gettime with __clock_gettime64
breaks benchtests with sysdeps/generic/hp-timing.h:
In file included from ./bench-timing.h:23,
from ./bench-skeleton.c:25,
from
/export/build/gnu/tools-build/glibc-gitlab/build-x86_64-linux/benchtests/bench-rint.c:45:
./bench-skeleton.c: In function ‘main’:
../sysdeps/generic/hp-timing.h:37:23: error: storage size of ‘tv’ isn’t known
37 | struct __timespec64 tv; \
| ^~
Define HP_TIMING_NOW with clock_gettime in sysdeps/generic/hp-timing.h
if _ISOMAC is defined. Don't define __clock_gettime in bench-timing.h
since it is no longer needed.
Reviewed-by: Carlos O'Donell <carlos@redhat.com>
#undef attribute_hidden
#define attribute_hidden
-#define __clock_gettime __clock_gettime64
#include <hp-timing.h>
#include <stdint.h>
/* The clock_gettime (CLOCK_MONOTONIC) has unspecified starting time,
nano-second accuracy, and for some architectues is implemented as
vDSO symbol. */
-#define HP_TIMING_NOW(var) \
+#ifdef _ISOMAC
+# define HP_TIMING_NOW(var) \
+({ \
+ struct timespec tv; \
+ clock_gettime (CLOCK_MONOTONIC, &tv); \
+ (var) = (tv.tv_nsec + UINT64_C(1000000000) * tv.tv_sec); \
+})
+#else
+# define HP_TIMING_NOW(var) \
({ \
struct __timespec64 tv; \
__clock_gettime64 (CLOCK_MONOTONIC, &tv); \
(var) = (tv.tv_nsec + UINT64_C(1000000000) * tv.tv_sec); \
})
+#endif
#endif /* hp-timing.h */