| From 88732c5593e16ef6177f6e6110132ed69b06d2eb Mon Sep 17 00:00:00 2001 |
| From: Alistair Francis <alistair.francis@wdc.com> |
| Date: Wed, 18 Sep 2019 09:28:50 -0700 |
| Subject: [PATCH] time: Use 64 prefix syscall if we have to |
| |
| Some 32-bit architectures no longer have the 32-bit time_t syscalls. |
| Instead they have suffixed syscalls that returns a 64-bit time_t. If |
| the architecture doesn't have the non-suffixed syscall and is using a |
| 64-bit time_t let's use the suffixed syscall instead. |
| |
| This fixes build issues when building for RISC-V 32-bit with 5.1+ kernel |
| headers. |
| |
| If an architecture only supports the suffixed syscalls, but is still |
| using a 32-bit time_t report a compilation error. This avoids us have to |
| deal with converting between 64-bit and 32-bit values. There are |
| currently no architectures where this is the case. |
| |
| Signed-off-by: Alistair Francis <alistair.francis@wdc.com> |
| Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com> |
| |
| (cherry picked from commit 902d3992922fc8db8495d5fb30a4581711b60c62) |
| |
| Signed-off-by: Carlos Santos <unixmania@gmail.com> |
| --- |
| libbb/time.c | 7 +++++++ |
| 1 file changed, 7 insertions(+) |
| |
| diff --git a/libbb/time.c b/libbb/time.c |
| index f9b8da0b3..821f9a24b 100644 |
| --- a/libbb/time.c |
| +++ b/libbb/time.c |
| @@ -257,7 +257,14 @@ char* FAST_FUNC strftime_YYYYMMDDHHMMSS(char *buf, unsigned len, time_t *tp) |
| * typically requiring -lrt. We just skip all this mess */ |
| static void get_mono(struct timespec *ts) |
| { |
| +#if defined(__NR_clock_gettime) |
| if (syscall(__NR_clock_gettime, CLOCK_MONOTONIC, ts)) |
| +#elif __TIMESIZE == 64 |
| + if (syscall(__NR_clock_gettime64, CLOCK_MONOTONIC, ts)) |
| +#else |
| +# error "We currently don't support architectures without " \ |
| + "the __NR_clock_gettime syscall and 32-bit time_t" |
| +#endif |
| bb_error_msg_and_die("clock_gettime(MONOTONIC) failed"); |
| } |
| unsigned long long FAST_FUNC monotonic_ns(void) |
| -- |
| 2.18.2 |
| |