[Buildroot] [git commit branch/2023.11.x] package/util-linux: fix build with -O0
Peter Korsgaard
peter at korsgaard.com
Sat Mar 16 21:02:53 UTC 2024
commit: https://git.buildroot.net/buildroot/commit/?id=129b47dec6f5a89e2e4d4fb00e5ab913e6aaeed0
branch: https://git.buildroot.net/buildroot/commit/?id=refs/heads/2023.11.x
Fix the following build failure with -O0 raised since bump to version
2.39 in commit ad276d94a392fb13244e042851a44269e6254d61 and
https://github.com/util-linux/util-linux/commit/2fa4168c8bc9d5438bc1dfadda293c7c21b6fa59:
libuuid/src/gen_uuid.c: In function 'uuid_generate_time_generic':
libuuid/src/gen_uuid.c:536:33: error: initializer element is not constant
THREAD_LOCAL int cache_size = cs_min;
^~~~~~
Fixes:
- http://autobuild.buildroot.org/results/7c9b8508345ffaba167c08521fb865d76555be1d
- http://autobuild.buildroot.org/results/2f80a5cdb523cc3c8c0f3693607a1be036b2ae98
Signed-off-by: Fabrice Fontaine <fontaine.fabrice at gmail.com>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni at bootlin.com>
(cherry picked from commit 8740387457f4dfccbd211ffaef1cae91db9f232d)
Signed-off-by: Peter Korsgaard <peter at korsgaard.com>
---
...uid-src-gen_uuid.c-fix-cs_min-declaration.patch | 80 ++++++++++++++++++++++
1 file changed, 80 insertions(+)
diff --git a/package/util-linux/0001-libuuid-src-gen_uuid.c-fix-cs_min-declaration.patch b/package/util-linux/0001-libuuid-src-gen_uuid.c-fix-cs_min-declaration.patch
new file mode 100644
index 0000000000..bba4d54619
--- /dev/null
+++ b/package/util-linux/0001-libuuid-src-gen_uuid.c-fix-cs_min-declaration.patch
@@ -0,0 +1,80 @@
+From bcd11dece7d278bb0b76b138d08dedea80fa8262 Mon Sep 17 00:00:00 2001
+From: Fabrice Fontaine <fontaine.fabrice at gmail.com>
+Date: Tue, 7 Nov 2023 18:43:57 +0100
+Subject: [PATCH] libuuid/src/gen_uuid.c: fix cs_min declaration
+
+Define cs_min through a define and not a const int to avoid the
+following build failure with -O0 raised since version 2.39 and
+https://github.com/util-linux/util-linux/commit/2fa4168c8bc9d5438bc1dfadda293c7c21b6fa59:
+
+libuuid/src/gen_uuid.c: In function 'uuid_generate_time_generic':
+libuuid/src/gen_uuid.c:536:33: error: initializer element is not constant
+ THREAD_LOCAL int cache_size = cs_min;
+ ^~~~~~
+
+For consistency, also use define for cs_max and cs_factor
+
+Fixes:
+ - http://autobuild.buildroot.org/results/2f80a5cdb523cc3c8c0f3693607a1be036b2ae98
+
+Signed-off-by: Fabrice Fontaine <fontaine.fabrice at gmail.com>
+Upstream: https://github.com/util-linux/util-linux/commit/07e5c29d501c19e7af84fecb5915e0f9f94cb49f
+---
+ libuuid/src/gen_uuid.c | 19 ++++++++++---------
+ 1 file changed, 10 insertions(+), 9 deletions(-)
+
+diff --git a/libuuid/src/gen_uuid.c b/libuuid/src/gen_uuid.c
+index 619ef0131..db793c374 100644
+--- a/libuuid/src/gen_uuid.c
++++ b/libuuid/src/gen_uuid.c
+@@ -518,6 +518,10 @@ int __uuid_generate_time_cont(uuid_t out, int *num, uint32_t cont_offset)
+ return __uuid_generate_time_internal(out, num, cont_offset);
+ }
+
++#define CS_MIN (1<<6)
++#define CS_MAX (1<<18)
++#define CS_FACTOR 2
++
+ /*
+ * Generate time-based UUID and store it to @out
+ *
+@@ -529,11 +533,8 @@ int __uuid_generate_time_cont(uuid_t out, int *num, uint32_t cont_offset)
+ static int uuid_generate_time_generic(uuid_t out) {
+ #ifdef HAVE_TLS
+ /* thread local cache for uuidd based requests */
+- const int cs_min = (1<<6);
+- const int cs_max = (1<<18);
+- const int cs_factor = 2;
+ THREAD_LOCAL int num = 0;
+- THREAD_LOCAL int cache_size = cs_min;
++ THREAD_LOCAL int cache_size = CS_MIN;
+ THREAD_LOCAL int last_used = 0;
+ THREAD_LOCAL struct uuid uu;
+ THREAD_LOCAL time_t last_time = 0;
+@@ -552,10 +553,10 @@ static int uuid_generate_time_generic(uuid_t out) {
+ * Start with a small cache size to cover short running applications
+ * and adjust the cache size over the runntime.
+ */
+- if ((last_used == cache_size) && (cache_size < cs_max))
+- cache_size *= cs_factor;
+- else if ((last_used < (cache_size / cs_factor)) && (cache_size > cs_min))
+- cache_size /= cs_factor;
++ if ((last_used == cache_size) && (cache_size < CS_MAX))
++ cache_size *= CS_FACTOR;
++ else if ((last_used < (cache_size / CS_FACTOR)) && (cache_size > CS_MIN))
++ cache_size /= CS_FACTOR;
+
+ num = cache_size;
+
+@@ -568,7 +569,7 @@ static int uuid_generate_time_generic(uuid_t out) {
+ }
+ /* request to daemon failed, reset cache */
+ num = 0;
+- cache_size = cs_min;
++ cache_size = CS_MIN;
+ }
+ if (num > 0) { /* serve uuid from cache */
+ uu.time_low++;
+--
+2.43.0
+
More information about the buildroot
mailing list