diff options
| author | Khem Raj <raj.khem@gmail.com> | 2020-02-14 10:00:07 -0800 |
|---|---|---|
| committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2020-02-15 10:26:42 +0000 |
| commit | b629da1df8125d1a671fec6ebd59813050a3099c (patch) | |
| tree | b2c31b21b5ea82e5e4712e4f93a1b1cc37f0bae7 | |
| parent | 717ba0a25669f469c7698399a79ad21661324edc (diff) | |
| download | poky-b629da1df8125d1a671fec6ebd59813050a3099c.tar.gz | |
busybox: Backport patches to support removal of __NR_clock_gettime
This helps compiling with musl on 32bit arches now that musl has
switched to 64bit time_t
(From OE-Core rev: 8c3a220a91f90202233765a3b4eb1697c8be18f7)
Signed-off-by: Khem Raj <raj.khem@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
5 files changed, 266 insertions, 0 deletions
diff --git a/meta/recipes-core/busybox/busybox/0001-Remove-syscall-wrappers-around-clock_gettime-closes-.patch b/meta/recipes-core/busybox/busybox/0001-Remove-syscall-wrappers-around-clock_gettime-closes-.patch new file mode 100644 index 0000000000..0c7f9b8132 --- /dev/null +++ b/meta/recipes-core/busybox/busybox/0001-Remove-syscall-wrappers-around-clock_gettime-closes-.patch | |||
| @@ -0,0 +1,120 @@ | |||
| 1 | From be5a505d771a77c640acc35ceaa470c80e62f954 Mon Sep 17 00:00:00 2001 | ||
| 2 | From: Denys Vlasenko <vda.linux@googlemail.com> | ||
| 3 | Date: Thu, 24 Oct 2019 16:26:55 +0200 | ||
| 4 | Subject: [PATCH] Remove syscall wrappers around clock_gettime, closes 12091 | ||
| 5 | |||
| 6 | 12091 "Direct use of __NR_clock_gettime is not time64-safe". | ||
| 7 | |||
| 8 | function old new delta | ||
| 9 | runsv_main 1698 1712 +14 | ||
| 10 | startservice 378 383 +5 | ||
| 11 | get_mono 31 25 -6 | ||
| 12 | date_main 932 926 -6 | ||
| 13 | gettimeofday_ns 17 - -17 | ||
| 14 | ------------------------------------------------------------------------------ | ||
| 15 | (add/remove: 0/1 grow/shrink: 2/2 up/down: 19/-29) Total: -10 bytes | ||
| 16 | |||
| 17 | Upstream-Status: Backport [https://git.busybox.net/busybox/commit/?id=be5a505d771a77c640acc35ceaa470c80e62f954] | ||
| 18 | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com> | ||
| 19 | --- | ||
| 20 | Makefile.flags | 6 ++++-- | ||
| 21 | coreutils/date.c | 16 +++------------- | ||
| 22 | libbb/time.c | 11 +---------- | ||
| 23 | runit/runsv.c | 11 +---------- | ||
| 24 | 4 files changed, 9 insertions(+), 35 deletions(-) | ||
| 25 | |||
| 26 | --- a/Makefile.flags | ||
| 27 | +++ b/Makefile.flags | ||
| 28 | @@ -129,10 +129,12 @@ endif | ||
| 29 | # fall back to using a temp file: | ||
| 30 | CRYPT_AVAILABLE := $(shell echo 'int main(void){return 0;}' >crypttest.c; $(CC) $(CFLAGS) -lcrypt -o /dev/null crypttest.c >/dev/null 2>&1 && echo "y"; rm crypttest.c) | ||
| 31 | ifeq ($(CRYPT_AVAILABLE),y) | ||
| 32 | -LDLIBS += m crypt | ||
| 33 | +LDLIBS += m rt crypt | ||
| 34 | else | ||
| 35 | -LDLIBS += m | ||
| 36 | +LDLIBS += m rt | ||
| 37 | endif | ||
| 38 | +# libm may be needed for dc, awk, ntpd | ||
| 39 | +# librt may be needed for clock_gettime() | ||
| 40 | |||
| 41 | # libpam may use libpthread, libdl and/or libaudit. | ||
| 42 | # On some platforms that requires an explicit -lpthread, -ldl, -laudit. | ||
| 43 | --- a/coreutils/date.c | ||
| 44 | +++ b/coreutils/date.c | ||
| 45 | @@ -33,10 +33,9 @@ | ||
| 46 | //config: Enable option (-I) to output an ISO-8601 compliant | ||
| 47 | //config: date/time string. | ||
| 48 | //config: | ||
| 49 | -//config:# defaults to "no": stat's nanosecond field is a bit non-portable | ||
| 50 | //config:config FEATURE_DATE_NANO | ||
| 51 | //config: bool "Support %[num]N nanosecond format specifier" | ||
| 52 | -//config: default n # syscall(__NR_clock_gettime) or syscall(__NR_clock_gettime64) | ||
| 53 | +//config: default n # stat's nanosecond field is a bit non-portable | ||
| 54 | //config: depends on DATE | ||
| 55 | //config: select PLATFORM_LINUX | ||
| 56 | //config: help | ||
| 57 | @@ -271,17 +270,8 @@ int date_main(int argc UNUSED_PARAM, cha | ||
| 58 | */ | ||
| 59 | #endif | ||
| 60 | } else { | ||
| 61 | -#if ENABLE_FEATURE_DATE_NANO && defined(__NR_clock_gettime) | ||
| 62 | - /* libc has incredibly messy way of doing this, | ||
| 63 | - * typically requiring -lrt. We just skip all this mess */ | ||
| 64 | - syscall(__NR_clock_gettime, CLOCK_REALTIME, &ts); | ||
| 65 | -#elif ENABLE_FEATURE_DATE_NANO && __TIMESIZE == 64 | ||
| 66 | - /* Let's only support the 64 suffix syscalls for 64-bit time_t. | ||
| 67 | - * This simplifies the code for us as we don't need to convert | ||
| 68 | - * between 64-bit and 32-bit. We also don't have a way to | ||
| 69 | - * report overflow errors here. | ||
| 70 | - */ | ||
| 71 | - syscall(__NR_clock_gettime64, CLOCK_REALTIME, &ts); | ||
| 72 | +#if ENABLE_FEATURE_DATE_NANO | ||
| 73 | + clock_gettime(CLOCK_REALTIME, &ts); | ||
| 74 | #else | ||
| 75 | time(&ts.tv_sec); | ||
| 76 | #endif | ||
| 77 | --- a/libbb/time.c | ||
| 78 | +++ b/libbb/time.c | ||
| 79 | @@ -253,18 +253,9 @@ char* FAST_FUNC strftime_YYYYMMDDHHMMSS( | ||
| 80 | #define CLOCK_MONOTONIC 1 | ||
| 81 | #endif | ||
| 82 | |||
| 83 | -/* libc has incredibly messy way of doing this, | ||
| 84 | - * typically requiring -lrt. We just skip all this mess */ | ||
| 85 | static void get_mono(struct timespec *ts) | ||
| 86 | { | ||
| 87 | -#if defined(__NR_clock_gettime) | ||
| 88 | - if (syscall(__NR_clock_gettime, CLOCK_MONOTONIC, ts)) | ||
| 89 | -#elif __TIMESIZE == 64 | ||
| 90 | - if (syscall(__NR_clock_gettime64, CLOCK_MONOTONIC, ts)) | ||
| 91 | -#else | ||
| 92 | -# error "We currently don't support architectures without " \ | ||
| 93 | - "the __NR_clock_gettime syscall and 32-bit time_t" | ||
| 94 | -#endif | ||
| 95 | + if (clock_gettime(CLOCK_MONOTONIC, ts)) | ||
| 96 | bb_error_msg_and_die("clock_gettime(MONOTONIC) failed"); | ||
| 97 | } | ||
| 98 | unsigned long long FAST_FUNC monotonic_ns(void) | ||
| 99 | --- a/runit/runsv.c | ||
| 100 | +++ b/runit/runsv.c | ||
| 101 | @@ -51,18 +51,9 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAG | ||
| 102 | #if ENABLE_MONOTONIC_SYSCALL | ||
| 103 | #include <sys/syscall.h> | ||
| 104 | |||
| 105 | -/* libc has incredibly messy way of doing this, | ||
| 106 | - * typically requiring -lrt. We just skip all this mess */ | ||
| 107 | static void gettimeofday_ns(struct timespec *ts) | ||
| 108 | { | ||
| 109 | -#if defined(__NR_clock_gettime) | ||
| 110 | - syscall(__NR_clock_gettime, CLOCK_REALTIME, ts); | ||
| 111 | -#elif __TIMESIZE == 64 | ||
| 112 | - syscall(__NR_clock_gettime64, CLOCK_REALTIME, ts); | ||
| 113 | -#else | ||
| 114 | -# error "We currently don't support architectures without " \ | ||
| 115 | - "the __NR_clock_gettime syscall and 32-bit time_t" | ||
| 116 | -#endif | ||
| 117 | + clock_gettime(CLOCK_REALTIME, ts); | ||
| 118 | } | ||
| 119 | #else | ||
| 120 | static void gettimeofday_ns(struct timespec *ts) | ||
diff --git a/meta/recipes-core/busybox/busybox/0001-date-Use-64-prefix-syscall-if-we-have-to.patch b/meta/recipes-core/busybox/busybox/0001-date-Use-64-prefix-syscall-if-we-have-to.patch new file mode 100644 index 0000000000..944526b7ca --- /dev/null +++ b/meta/recipes-core/busybox/busybox/0001-date-Use-64-prefix-syscall-if-we-have-to.patch | |||
| @@ -0,0 +1,53 @@ | |||
| 1 | From b7b7452f292f03eefafa6fd1da9bcfc933dee15a Mon Sep 17 00:00:00 2001 | ||
| 2 | From: Alistair Francis <alistair.francis@wdc.com> | ||
| 3 | Date: Wed, 18 Sep 2019 09:28:49 -0700 | ||
| 4 | Subject: [PATCH] date: Use 64 prefix syscall if we have to | ||
| 5 | |||
| 6 | Some 32-bit architectures no longer have the 32-bit time_t syscalls. | ||
| 7 | Instead they have suffixed syscalls that returns a 64-bit time_t. If | ||
| 8 | the architecture doesn't have the non-suffixed syscall and is using a | ||
| 9 | 64-bit time_t let's use the suffixed syscall instead. | ||
| 10 | |||
| 11 | This fixes build issues when building for RISC-V 32-bit with 5.1+ kernel | ||
| 12 | headers. | ||
| 13 | |||
| 14 | If an architecture only supports the suffixed syscalls, but is still | ||
| 15 | using a 32-bit time_t fall back to the libc call. | ||
| 16 | |||
| 17 | Upstream-Status: Backport [https://git.busybox.net/busybox/commit/?id=b7b7452f292f03eefafa6fd1da9bcfc933dee15a] | ||
| 18 | Signed-off-by: Alistair Francis <alistair.francis@wdc.com> | ||
| 19 | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com> | ||
| 20 | --- | ||
| 21 | coreutils/date.c | 11 +++++++++-- | ||
| 22 | 1 file changed, 9 insertions(+), 2 deletions(-) | ||
| 23 | |||
| 24 | --- a/coreutils/date.c | ||
| 25 | +++ b/coreutils/date.c | ||
| 26 | @@ -36,7 +36,7 @@ | ||
| 27 | //config:# defaults to "no": stat's nanosecond field is a bit non-portable | ||
| 28 | //config:config FEATURE_DATE_NANO | ||
| 29 | //config: bool "Support %[num]N nanosecond format specifier" | ||
| 30 | -//config: default n # syscall(__NR_clock_gettime) | ||
| 31 | +//config: default n # syscall(__NR_clock_gettime) or syscall(__NR_clock_gettime64) | ||
| 32 | //config: depends on DATE | ||
| 33 | //config: select PLATFORM_LINUX | ||
| 34 | //config: help | ||
| 35 | @@ -271,10 +271,17 @@ int date_main(int argc UNUSED_PARAM, cha | ||
| 36 | */ | ||
| 37 | #endif | ||
| 38 | } else { | ||
| 39 | -#if ENABLE_FEATURE_DATE_NANO | ||
| 40 | +#if ENABLE_FEATURE_DATE_NANO && defined(__NR_clock_gettime) | ||
| 41 | /* libc has incredibly messy way of doing this, | ||
| 42 | * typically requiring -lrt. We just skip all this mess */ | ||
| 43 | syscall(__NR_clock_gettime, CLOCK_REALTIME, &ts); | ||
| 44 | +#elif ENABLE_FEATURE_DATE_NANO && __TIMESIZE == 64 | ||
| 45 | + /* Let's only support the 64 suffix syscalls for 64-bit time_t. | ||
| 46 | + * This simplifies the code for us as we don't need to convert | ||
| 47 | + * between 64-bit and 32-bit. We also don't have a way to | ||
| 48 | + * report overflow errors here. | ||
| 49 | + */ | ||
| 50 | + syscall(__NR_clock_gettime64, CLOCK_REALTIME, &ts); | ||
| 51 | #else | ||
| 52 | time(&ts.tv_sec); | ||
| 53 | #endif | ||
diff --git a/meta/recipes-core/busybox/busybox/0001-time-Use-64-prefix-syscall-if-we-have-to.patch b/meta/recipes-core/busybox/busybox/0001-time-Use-64-prefix-syscall-if-we-have-to.patch new file mode 100644 index 0000000000..58a6c0d8a0 --- /dev/null +++ b/meta/recipes-core/busybox/busybox/0001-time-Use-64-prefix-syscall-if-we-have-to.patch | |||
| @@ -0,0 +1,43 @@ | |||
| 1 | From 902d3992922fc8db8495d5fb30a4581711b60c62 Mon Sep 17 00:00:00 2001 | ||
| 2 | From: Alistair Francis <alistair.francis@wdc.com> | ||
| 3 | Date: Wed, 18 Sep 2019 09:28:50 -0700 | ||
| 4 | Subject: [PATCH] time: Use 64 prefix syscall if we have to | ||
| 5 | |||
| 6 | Some 32-bit architectures no longer have the 32-bit time_t syscalls. | ||
| 7 | Instead they have suffixed syscalls that returns a 64-bit time_t. If | ||
| 8 | the architecture doesn't have the non-suffixed syscall and is using a | ||
| 9 | 64-bit time_t let's use the suffixed syscall instead. | ||
| 10 | |||
| 11 | This fixes build issues when building for RISC-V 32-bit with 5.1+ kernel | ||
| 12 | headers. | ||
| 13 | |||
| 14 | If an architecture only supports the suffixed syscalls, but is still | ||
| 15 | using a 32-bit time_t report a compilation error. This avoids us have to | ||
| 16 | deal with converting between 64-bit and 32-bit values. There are | ||
| 17 | currently no architectures where this is the case. | ||
| 18 | |||
| 19 | Upstream-Status: Backport [https://git.busybox.net/busybox/commit/?id=902d3992922fc8db8495d5fb30a4581711b60c62] | ||
| 20 | Signed-off-by: Alistair Francis <alistair.francis@wdc.com> | ||
| 21 | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com> | ||
| 22 | --- | ||
| 23 | libbb/time.c | 7 +++++++ | ||
| 24 | 1 file changed, 7 insertions(+) | ||
| 25 | |||
| 26 | --- a/libbb/time.c | ||
| 27 | +++ b/libbb/time.c | ||
| 28 | @@ -257,7 +257,14 @@ char* FAST_FUNC strftime_YYYYMMDDHHMMSS( | ||
| 29 | * typically requiring -lrt. We just skip all this mess */ | ||
| 30 | static void get_mono(struct timespec *ts) | ||
| 31 | { | ||
| 32 | - if (syscall(__NR_clock_gettime, CLOCK_MONOTONIC, ts)) | ||
| 33 | +#if defined(__NR_clock_gettime) | ||
| 34 | + if (syscall(__NR_clock_gettime, CLOCK_MONOTONIC, ts)) | ||
| 35 | +#elif __TIMESIZE == 64 | ||
| 36 | + if (syscall(__NR_clock_gettime64, CLOCK_MONOTONIC, ts)) | ||
| 37 | +#else | ||
| 38 | +# error "We currently don't support architectures without " \ | ||
| 39 | + "the __NR_clock_gettime syscall and 32-bit time_t" | ||
| 40 | +#endif | ||
| 41 | bb_error_msg_and_die("clock_gettime(MONOTONIC) failed"); | ||
| 42 | } | ||
| 43 | unsigned long long FAST_FUNC monotonic_ns(void) | ||
diff --git a/meta/recipes-core/busybox/busybox/0003-runsv-Use-64-prefix-syscall-if-we-have-to.patch b/meta/recipes-core/busybox/busybox/0003-runsv-Use-64-prefix-syscall-if-we-have-to.patch new file mode 100644 index 0000000000..4760570441 --- /dev/null +++ b/meta/recipes-core/busybox/busybox/0003-runsv-Use-64-prefix-syscall-if-we-have-to.patch | |||
| @@ -0,0 +1,46 @@ | |||
| 1 | From 8c7419649d6e6fda8fa7d0e863084c78ac728628 Mon Sep 17 00:00:00 2001 | ||
| 2 | From: Alistair Francis <alistair.francis@wdc.com> | ||
| 3 | Date: Wed, 28 Aug 2019 10:54:15 -0700 | ||
| 4 | Subject: [PATCH 3/3] runsv: Use 64 prefix syscall if we have to | ||
| 5 | |||
| 6 | Some 32-bit architectures no longer have the 32-bit time_t syscalls. | ||
| 7 | Instead they have suffixed syscalls that returns a 64-bit time_t. If | ||
| 8 | the architecture doesn't have the non-suffixed syscall and is using a | ||
| 9 | 64-bit time_t let's use the suffixed syscall instead. | ||
| 10 | |||
| 11 | This fixes build issues when building for RISC-V 32-bit with 5.1+ kernel | ||
| 12 | headers. | ||
| 13 | |||
| 14 | If an architecture only supports the suffixed syscalls, but is still | ||
| 15 | using a 32-bit time_t report a compilation error. This avoids us have to | ||
| 16 | deal with converting between 64-bit and 32-bit values. There are | ||
| 17 | currently no architectures where this is the case. | ||
| 18 | |||
| 19 | Signed-off-by: Alistair Francis <alistair.francis@wdc.com> | ||
| 20 | Upstream-Status: Backport [https://git.busybox.net/busybox/commit/?id=ad27d44ebe950335616f37e36863469dc181b455] | ||
| 21 | --- | ||
| 22 | runit/runsv.c | 7 +++++++ | ||
| 23 | 1 file changed, 7 insertions(+) | ||
| 24 | |||
| 25 | diff --git a/runit/runsv.c b/runit/runsv.c | ||
| 26 | index ccc762d78..737909b0e 100644 | ||
| 27 | --- a/runit/runsv.c | ||
| 28 | +++ b/runit/runsv.c | ||
| 29 | @@ -55,7 +55,14 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
| 30 | * typically requiring -lrt. We just skip all this mess */ | ||
| 31 | static void gettimeofday_ns(struct timespec *ts) | ||
| 32 | { | ||
| 33 | +#if defined(__NR_clock_gettime) | ||
| 34 | syscall(__NR_clock_gettime, CLOCK_REALTIME, ts); | ||
| 35 | +#elif __TIMESIZE == 64 | ||
| 36 | + syscall(__NR_clock_gettime64, CLOCK_REALTIME, ts); | ||
| 37 | +#else | ||
| 38 | +# error "We currently don't support architectures without " \ | ||
| 39 | + "the __NR_clock_gettime syscall and 32-bit time_t" | ||
| 40 | +#endif | ||
| 41 | } | ||
| 42 | #else | ||
| 43 | static void gettimeofday_ns(struct timespec *ts) | ||
| 44 | -- | ||
| 45 | 2.22.0 | ||
| 46 | |||
diff --git a/meta/recipes-core/busybox/busybox_1.31.1.bb b/meta/recipes-core/busybox/busybox_1.31.1.bb index 1d0102eb2b..ec5b580442 100644 --- a/meta/recipes-core/busybox/busybox_1.31.1.bb +++ b/meta/recipes-core/busybox/busybox_1.31.1.bb | |||
| @@ -42,6 +42,10 @@ SRC_URI = "https://busybox.net/downloads/busybox-${PV}.tar.bz2;name=tarball \ | |||
| 42 | file://0001-testsuite-check-uudecode-before-using-it.patch \ | 42 | file://0001-testsuite-check-uudecode-before-using-it.patch \ |
| 43 | file://0001-testsuite-use-www.example.org-for-wget-test-cases.patch \ | 43 | file://0001-testsuite-use-www.example.org-for-wget-test-cases.patch \ |
| 44 | file://0001-du-l-works-fix-to-use-145-instead-of-144.patch \ | 44 | file://0001-du-l-works-fix-to-use-145-instead-of-144.patch \ |
| 45 | file://0001-date-Use-64-prefix-syscall-if-we-have-to.patch \ | ||
| 46 | file://0001-time-Use-64-prefix-syscall-if-we-have-to.patch \ | ||
| 47 | file://0003-runsv-Use-64-prefix-syscall-if-we-have-to.patch \ | ||
| 48 | file://0001-Remove-syscall-wrappers-around-clock_gettime-closes-.patch \ | ||
| 45 | file://0001-Remove-stime-function-calls.patch \ | 49 | file://0001-Remove-stime-function-calls.patch \ |
| 46 | " | 50 | " |
| 47 | SRC_URI_append_libc-musl = " file://musl.cfg " | 51 | SRC_URI_append_libc-musl = " file://musl.cfg " |
