From patchwork Sun Mar 22 17:13:00 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Carlos Santos X-Patchwork-Id: 1259698 Return-Path: X-Original-To: incoming-buildroot@patchwork.ozlabs.org Delivered-To: patchwork-incoming-buildroot@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=busybox.net (client-ip=140.211.166.136; helo=silver.osuosl.org; envelope-from=buildroot-bounces@busybox.net; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20161025 header.b=ZhCRcoiY; dkim-atps=neutral Received: from silver.osuosl.org (smtp3.osuosl.org [140.211.166.136]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 48lkcK5tdfz9sPk for ; Mon, 23 Mar 2020 04:13:21 +1100 (AEDT) Received: from localhost (localhost [127.0.0.1]) by silver.osuosl.org (Postfix) with ESMTP id 60A472078B; Sun, 22 Mar 2020 17:13:19 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from silver.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id y8kXrfi-yGou; Sun, 22 Mar 2020 17:13:16 +0000 (UTC) Received: from ash.osuosl.org (ash.osuosl.org [140.211.166.34]) by silver.osuosl.org (Postfix) with ESMTP id D2D7F20511; Sun, 22 Mar 2020 17:13:15 +0000 (UTC) X-Original-To: buildroot@lists.busybox.net Delivered-To: buildroot@osuosl.org Received: from silver.osuosl.org (smtp3.osuosl.org [140.211.166.136]) by ash.osuosl.org (Postfix) with ESMTP id 20CF21BF41F for ; Sun, 22 Mar 2020 17:13:15 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by silver.osuosl.org (Postfix) with ESMTP id 1CC0A20511 for ; Sun, 22 Mar 2020 17:13:15 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from silver.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id uQlMHJQzYmhO for ; Sun, 22 Mar 2020 17:13:13 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.7.6 Received: from mail-qk1-f180.google.com (mail-qk1-f180.google.com [209.85.222.180]) by silver.osuosl.org (Postfix) with ESMTPS id 387B120377 for ; Sun, 22 Mar 2020 17:13:13 +0000 (UTC) Received: by mail-qk1-f180.google.com with SMTP id l25so7913914qki.7 for ; Sun, 22 Mar 2020 10:13:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=FF48fZimPh9dkoB23iT2TXLbKCT70K4Q7sSss+Ajo6A=; b=ZhCRcoiYgiH/rKL6QMNIPc0EQ1b4OXyGo9kQb71A5b6ZWlZQ7OtOptbRru6HI9aXyt HTGXLOBbqdb65mewLI291LYZlnWfzMQpKAM4NYOxckXfewI89Us43LlVCaoxSsPZoZzK lLKilQhmurrIxtKMD8G8OwH2XTUxSlj1geUroN987UfhAnK5Dd6tZtgwGcEd/fSXiJ/m N4GsFFusiuB6yHi9gw0OX0lnxm8MWwkl+8vfFLm8NCbAhccnWar3cmE7IT2lrMu4W3RI ZDXvEn3ge2t0jLRxDNTAymSglOiJIQ/DJaihQ6gl6hKGT42c7A5jeyHD1cM94w+oeyz7 cyTQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=FF48fZimPh9dkoB23iT2TXLbKCT70K4Q7sSss+Ajo6A=; b=bKwsYg8FxmZ6AhEzvj3HnD3g/nm0wN8gb5/vqMP0C6MbMkOmG5DPOfCuAvGjwBbiNk sAOCpSqtxqr5uhAAFNbwPGzxOo7hHrJksR7Dh4Z9sDvL1XeKA09bYuC/18mza8lUGbgi VuCW735LLVk5rBFrLQtufK4yr6njpNt/E3PLXLBVQQld4PJ9Bmi6KyvpT8LjKxS0zcIL MzozfK7EufyGMFoiRQ8sQB55X6S9rJJPXq0sp2NX73nIQVpjXDQ36dQE/7LvzWirVR2S IoMXIbj88akJgTnuct4ds+j3xVtaWmhSu9sHPWIMfOMB16VUeU8cL9qHbgD+AU5LTsai EQXw== X-Gm-Message-State: ANhLgQ2FSCPfNCFlF0+XaHNbe6xFXL422mgAnqbxqxKy5MFWuPLYiaGB DOnGBeiaZbbQb9HqKwjjeEgFSfuIqRE= X-Google-Smtp-Source: ADFU+vtsealjT8QceqvJidDQDU4czfMqfCVCHGN8GebHp1lkFKh6vLIYb2snp2l8dFxEohObbxUcqw== X-Received: by 2002:ae9:edd7:: with SMTP id c206mr15938113qkg.343.1584897191849; Sun, 22 Mar 2020 10:13:11 -0700 (PDT) Received: from casantos.remote.com (189.27.250.150.dynamic.adsl.gvt.net.br. [189.27.250.150]) by smtp.gmail.com with ESMTPSA id u13sm9512865qtg.64.2020.03.22.10.13.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 22 Mar 2020 10:13:11 -0700 (PDT) From: unixmania@gmail.com To: buildroot@buildroot.org Date: Sun, 22 Mar 2020 14:13:00 -0300 Message-Id: <20200322171301.15753-2-unixmania@gmail.com> X-Mailer: git-send-email 2.18.2 In-Reply-To: <20200322171301.15753-1-unixmania@gmail.com> References: <20200322171301.15753-1-unixmania@gmail.com> Subject: [Buildroot] [PATCH v6 1/2] package/busybox: fix build with musl 1.2.0 X-BeenThere: buildroot@busybox.net X-Mailman-Version: 2.1.29 Precedence: list List-Id: Discussion and development of buildroot List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Carlos Santos , Romain Naour , arc-buildroot@synopsys.com, "Yann E . MORIN ." , Thomas Petazzoni MIME-Version: 1.0 Errors-To: buildroot-bounces@busybox.net Sender: "buildroot" From: Carlos Santos Busybox 1.31.1 fails to build with musl 1.2.0 due to the direct use of __NR_clock_gettime. Pull four patches already applied upstream to fix the problem. The patches were rebased to version 1.31.1 to minimize the change, since the original ones depended on a previous commit which is not worthwhile to pick. Fixes: http://autobuild.buildroot.net/results/f45f91aea6deee6699eabdfa618ac44873b8da51/ Signed-off-by: Evgeniy Didin Signed-off-by: Carlos Santos Cc: Romain Naour Cc: Thomas Petazzoni Cc: Yann E. MORIN. Cc: arc-buildroot@synopsys.com --- Supersedes: https://patchwork.ozlabs.org/patch/1259554/ --- Changes v6: - Use 5 separate patches from upstream and split the Buildroot fix into two, one for the musl compatibility and other for the glibc, as suggested by Yann E. MORIN.. Changes v5: - Drop the first patch, squash the other ones and rebase on v1.31.1, as suggested by Romain Naour Changes v4: - Rabase on the master branch - Add SOB lines to patches --- ...-Use-64-prefix-syscall-if-we-have-to.patch | 61 ++++++++ ...-Use-64-prefix-syscall-if-we-have-to.patch | 50 +++++++ ...-Use-64-prefix-syscall-if-we-have-to.patch | 50 +++++++ ...rappers-around-clock_gettime-closes-.patch | 134 ++++++++++++++++++ 4 files changed, 295 insertions(+) create mode 100644 package/busybox/0003-date-Use-64-prefix-syscall-if-we-have-to.patch create mode 100644 package/busybox/0004-time-Use-64-prefix-syscall-if-we-have-to.patch create mode 100644 package/busybox/0005-runsv-Use-64-prefix-syscall-if-we-have-to.patch create mode 100644 package/busybox/0006-Remove-syscall-wrappers-around-clock_gettime-closes-.patch diff --git a/package/busybox/0003-date-Use-64-prefix-syscall-if-we-have-to.patch b/package/busybox/0003-date-Use-64-prefix-syscall-if-we-have-to.patch new file mode 100644 index 0000000000..2b89584f00 --- /dev/null +++ b/package/busybox/0003-date-Use-64-prefix-syscall-if-we-have-to.patch @@ -0,0 +1,61 @@ +From 29ba834ed7d968de0460f7fd87156d43d8120d8f Mon Sep 17 00:00:00 2001 +From: Alistair Francis +Date: Wed, 18 Sep 2019 09:28:49 -0700 +Subject: [PATCH] date: 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 fall back to the libc call. + +Signed-off-by: Alistair Francis +Signed-off-by: Denys Vlasenko + +(cherry picked from commit b7b7452f292f03eefafa6fd1da9bcfc933dee15a) + +Signed-off-by: Carlos Santos +--- + coreutils/date.c | 11 +++++++++-- + 1 file changed, 9 insertions(+), 2 deletions(-) + +diff --git a/coreutils/date.c b/coreutils/date.c +index 3414d38ae..1e0a675ca 100644 +--- a/coreutils/date.c ++++ b/coreutils/date.c +@@ -36,7 +36,7 @@ + //config:# defaults to "no": stat's nanosecond field is a bit non-portable + //config:config FEATURE_DATE_NANO + //config: bool "Support %[num]N nanosecond format specifier" +-//config: default n # syscall(__NR_clock_gettime) ++//config: default n # syscall(__NR_clock_gettime) or syscall(__NR_clock_gettime64) + //config: depends on DATE + //config: select PLATFORM_LINUX + //config: help +@@ -271,10 +271,17 @@ int date_main(int argc UNUSED_PARAM, char **argv) + */ + #endif + } else { +-#if ENABLE_FEATURE_DATE_NANO ++#if ENABLE_FEATURE_DATE_NANO && defined(__NR_clock_gettime) + /* libc has incredibly messy way of doing this, + * typically requiring -lrt. We just skip all this mess */ + syscall(__NR_clock_gettime, CLOCK_REALTIME, &ts); ++#elif ENABLE_FEATURE_DATE_NANO && __TIMESIZE == 64 ++ /* Let's only support the 64 suffix syscalls for 64-bit time_t. ++ * This simplifies the code for us as we don't need to convert ++ * between 64-bit and 32-bit. We also don't have a way to ++ * report overflow errors here. ++ */ ++ syscall(__NR_clock_gettime64, CLOCK_REALTIME, &ts); + #else + time(&ts.tv_sec); + #endif +-- +2.18.2 + diff --git a/package/busybox/0004-time-Use-64-prefix-syscall-if-we-have-to.patch b/package/busybox/0004-time-Use-64-prefix-syscall-if-we-have-to.patch new file mode 100644 index 0000000000..4481a82bac --- /dev/null +++ b/package/busybox/0004-time-Use-64-prefix-syscall-if-we-have-to.patch @@ -0,0 +1,50 @@ +From 88732c5593e16ef6177f6e6110132ed69b06d2eb Mon Sep 17 00:00:00 2001 +From: Alistair Francis +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 +Signed-off-by: Denys Vlasenko + +(cherry picked from commit 902d3992922fc8db8495d5fb30a4581711b60c62) + +Signed-off-by: Carlos Santos +--- + 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 + diff --git a/package/busybox/0005-runsv-Use-64-prefix-syscall-if-we-have-to.patch b/package/busybox/0005-runsv-Use-64-prefix-syscall-if-we-have-to.patch new file mode 100644 index 0000000000..0d25a6e72e --- /dev/null +++ b/package/busybox/0005-runsv-Use-64-prefix-syscall-if-we-have-to.patch @@ -0,0 +1,50 @@ +From 8f4b588eb9737c2c0d1b199c7e609d880e0858a8 Mon Sep 17 00:00:00 2001 +From: Alistair Francis +Date: Wed, 18 Sep 2019 09:28:51 -0700 +Subject: [PATCH] runsv: 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 +Signed-off-by: Denys Vlasenko + +(cherry picked from commit ad27d44ebe950335616f37e36863469dc181b455) + +Signed-off-by: Carlos Santos +--- + runit/runsv.c | 7 +++++++ + 1 file changed, 7 insertions(+) + +diff --git a/runit/runsv.c b/runit/runsv.c +index ccc762d78..737909b0e 100644 +--- a/runit/runsv.c ++++ b/runit/runsv.c +@@ -55,7 +55,14 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * typically requiring -lrt. We just skip all this mess */ + static void gettimeofday_ns(struct timespec *ts) + { ++#if defined(__NR_clock_gettime) + syscall(__NR_clock_gettime, CLOCK_REALTIME, ts); ++#elif __TIMESIZE == 64 ++ syscall(__NR_clock_gettime64, CLOCK_REALTIME, ts); ++#else ++# error "We currently don't support architectures without " \ ++ "the __NR_clock_gettime syscall and 32-bit time_t" ++#endif + } + #else + static void gettimeofday_ns(struct timespec *ts) +-- +2.18.2 + diff --git a/package/busybox/0006-Remove-syscall-wrappers-around-clock_gettime-closes-.patch b/package/busybox/0006-Remove-syscall-wrappers-around-clock_gettime-closes-.patch new file mode 100644 index 0000000000..9d95d683f3 --- /dev/null +++ b/package/busybox/0006-Remove-syscall-wrappers-around-clock_gettime-closes-.patch @@ -0,0 +1,134 @@ +From 07375fc6fd5912f34a36a097dc679f6e0af23f8a Mon Sep 17 00:00:00 2001 +From: Denys Vlasenko +Date: Thu, 24 Oct 2019 16:26:55 +0200 +Subject: [PATCH] Remove syscall wrappers around clock_gettime, closes 12091 + +12091 "Direct use of __NR_clock_gettime is not time64-safe". + +function old new delta +runsv_main 1698 1712 +14 +startservice 378 383 +5 +get_mono 31 25 -6 +date_main 932 926 -6 +gettimeofday_ns 17 - -17 +------------------------------------------------------------------------------ +(add/remove: 0/1 grow/shrink: 2/2 up/down: 19/-29) Total: -10 bytes + +Signed-off-by: Denys Vlasenko + +(cherry picked from commit be5a505d771a77c640acc35ceaa470c80e62f954) + +Signed-off-by: Carlos Santos +--- + Makefile.flags | 6 ++++-- + coreutils/date.c | 16 +++------------- + libbb/time.c | 11 +---------- + runit/runsv.c | 11 +---------- + 4 files changed, 9 insertions(+), 35 deletions(-) + +diff --git a/Makefile.flags b/Makefile.flags +index 6f6142cc5..bea464753 100644 +--- a/Makefile.flags ++++ b/Makefile.flags +@@ -129,10 +129,12 @@ endif + # fall back to using a temp file: + 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) + ifeq ($(CRYPT_AVAILABLE),y) +-LDLIBS += m crypt ++LDLIBS += m rt crypt + else +-LDLIBS += m ++LDLIBS += m rt + endif ++# libm may be needed for dc, awk, ntpd ++# librt may be needed for clock_gettime() + + # libpam may use libpthread, libdl and/or libaudit. + # On some platforms that requires an explicit -lpthread, -ldl, -laudit. +diff --git a/coreutils/date.c b/coreutils/date.c +index 1e0a675ca..e479c23a2 100644 +--- a/coreutils/date.c ++++ b/coreutils/date.c +@@ -33,10 +33,9 @@ + //config: Enable option (-I) to output an ISO-8601 compliant + //config: date/time string. + //config: +-//config:# defaults to "no": stat's nanosecond field is a bit non-portable + //config:config FEATURE_DATE_NANO + //config: bool "Support %[num]N nanosecond format specifier" +-//config: default n # syscall(__NR_clock_gettime) or syscall(__NR_clock_gettime64) ++//config: default n # stat's nanosecond field is a bit non-portable + //config: depends on DATE + //config: select PLATFORM_LINUX + //config: help +@@ -271,17 +270,8 @@ int date_main(int argc UNUSED_PARAM, char **argv) + */ + #endif + } else { +-#if ENABLE_FEATURE_DATE_NANO && defined(__NR_clock_gettime) +- /* libc has incredibly messy way of doing this, +- * typically requiring -lrt. We just skip all this mess */ +- syscall(__NR_clock_gettime, CLOCK_REALTIME, &ts); +-#elif ENABLE_FEATURE_DATE_NANO && __TIMESIZE == 64 +- /* Let's only support the 64 suffix syscalls for 64-bit time_t. +- * This simplifies the code for us as we don't need to convert +- * between 64-bit and 32-bit. We also don't have a way to +- * report overflow errors here. +- */ +- syscall(__NR_clock_gettime64, CLOCK_REALTIME, &ts); ++#if ENABLE_FEATURE_DATE_NANO ++ clock_gettime(CLOCK_REALTIME, &ts); + #else + time(&ts.tv_sec); + #endif +diff --git a/libbb/time.c b/libbb/time.c +index 821f9a24b..1077bfa4f 100644 +--- a/libbb/time.c ++++ b/libbb/time.c +@@ -253,18 +253,9 @@ char* FAST_FUNC strftime_YYYYMMDDHHMMSS(char *buf, unsigned len, time_t *tp) + #define CLOCK_MONOTONIC 1 + #endif + +-/* libc has incredibly messy way of doing this, +- * 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 ++ if (clock_gettime(CLOCK_MONOTONIC, ts)) + bb_error_msg_and_die("clock_gettime(MONOTONIC) failed"); + } + unsigned long long FAST_FUNC monotonic_ns(void) +diff --git a/runit/runsv.c b/runit/runsv.c +index 737909b0e..36d85101e 100644 +--- a/runit/runsv.c ++++ b/runit/runsv.c +@@ -51,18 +51,9 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + #if ENABLE_MONOTONIC_SYSCALL + #include + +-/* libc has incredibly messy way of doing this, +- * typically requiring -lrt. We just skip all this mess */ + static void gettimeofday_ns(struct timespec *ts) + { +-#if defined(__NR_clock_gettime) +- syscall(__NR_clock_gettime, CLOCK_REALTIME, ts); +-#elif __TIMESIZE == 64 +- syscall(__NR_clock_gettime64, CLOCK_REALTIME, ts); +-#else +-# error "We currently don't support architectures without " \ +- "the __NR_clock_gettime syscall and 32-bit time_t" +-#endif ++ clock_gettime(CLOCK_REALTIME, ts); + } + #else + static void gettimeofday_ns(struct timespec *ts) +-- +2.18.2 +