diff --git a/package/util-linux/0002-c.h-consolidate-THREAD_LOCAL.patch b/package/util-linux/0002-c.h-consolidate-THREAD_LOCAL.patch new file mode 100644 index 0000000000..bb1a63ecc2 --- /dev/null +++ b/package/util-linux/0002-c.h-consolidate-THREAD_LOCAL.patch @@ -0,0 +1,65 @@ +From 7b3db914fa9073c667ea482c8b6b4e07fe6202cc Mon Sep 17 00:00:00 2001 +From: Karel Zak +Date: Mon, 27 Jan 2025 13:40:23 +0100 +Subject: [PATCH] c.h: consolidate THREAD_LOCAL. + +Let's define this macro in one place only. + +Upstream: https://github.com/util-linux/util-linux/pull/3383 +Signed-off-by: Karel Zak +Signed-off-by: Julien Olivain +--- + include/c.h | 9 +++++++++ + lib/randutils.c | 5 ----- + libuuid/src/gen_uuid.c | 1 - + 3 files changed, 9 insertions(+), 6 deletions(-) + +diff --git a/include/c.h b/include/c.h +index 61b95ab2d..848c48536 100644 +--- a/include/c.h ++++ b/include/c.h +@@ -595,4 +595,13 @@ static inline void *reallocarray(void *ptr, size_t nmemb, size_t size) + } + #endif + ++/* ++ * thread-local storage ++ */ ++#ifdef HAVE_TLS ++# define THREAD_LOCAL static __thread ++#else ++# define THREAD_LOCAL static ++#endif ++ + #endif /* UTIL_LINUX_C_H */ +diff --git a/lib/randutils.c b/lib/randutils.c +index 15c2f7834..4c806e682 100644 +--- a/lib/randutils.c ++++ b/lib/randutils.c +@@ -20,11 +20,6 @@ + #include "randutils.h" + #include "nls.h" + +-#ifdef HAVE_TLS +-#define THREAD_LOCAL static __thread +-#else +-#define THREAD_LOCAL static +-#endif + + #ifdef HAVE_GETRANDOM + # include +diff --git a/libuuid/src/gen_uuid.c b/libuuid/src/gen_uuid.c +index 3b76ddc9a..69712267f 100644 +--- a/libuuid/src/gen_uuid.c ++++ b/libuuid/src/gen_uuid.c +@@ -92,7 +92,6 @@ + #include "md5.h" + #include "sha1.h" + +-#define THREAD_LOCAL static __thread + + #ifdef _WIN32 + static void gettimeofday (struct timeval *tv, void *dummy) +-- +2.48.1 + diff --git a/package/util-linux/0003-autotools-define-HAVE_LIBPTHREAD-and-PTHREAD_LIBS.patch b/package/util-linux/0003-autotools-define-HAVE_LIBPTHREAD-and-PTHREAD_LIBS.patch new file mode 100644 index 0000000000..843253a56a --- /dev/null +++ b/package/util-linux/0003-autotools-define-HAVE_LIBPTHREAD-and-PTHREAD_LIBS.patch @@ -0,0 +1,47 @@ +From 0735eb8bc0ed4bc9820ea7e4e600fed246457b18 Mon Sep 17 00:00:00 2001 +From: Karel Zak +Date: Mon, 27 Jan 2025 14:01:38 +0100 +Subject: [PATCH] autotools: define HAVE_LIBPTHREAD and PTHREAD_LIBS + +Upstream: https://github.com/util-linux/util-linux/pull/3383 +Signed-off-by: Karel Zak +Signed-off-by: Julien Olivain +--- + configure.ac | 7 +++++++ + libuuid/src/Makemodule.am | 2 +- + 2 files changed, 8 insertions(+), 1 deletion(-) + +diff --git a/configure.ac b/configure.ac +index 82d0e4bf9..9a7f260c5 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -738,6 +738,13 @@ AS_IF([test x"$have_timer" = xno], [ + ]) + + ++AC_CHECK_LIB([pthread], [pthread_atfork], [ ++ PTHREAD_LIBS="-lpthread" ++ AC_DEFINE([HAVE_LIBPTHREAD], [1], [Define if libpthred exist]) ++]) ++AC_SUBST([PTHREAD_LIBS]) ++ ++ + AC_CHECK_LIB([rtas], [rtas_get_sysparm], [ + RTAS_LIBS="-lrtas" + AC_DEFINE([HAVE_LIBRTAS], [1], [Define if librtas exists]) +diff --git a/libuuid/src/Makemodule.am b/libuuid/src/Makemodule.am +index 867ad7be5..58b64fe9b 100644 +--- a/libuuid/src/Makemodule.am ++++ b/libuuid/src/Makemodule.am +@@ -31,7 +31,7 @@ libuuid_la_SOURCES = \ + EXTRA_libuuid_la_DEPENDENCIES = \ + libuuid/src/libuuid.sym + +-libuuid_la_LIBADD = $(LDADD) $(SOCKET_LIBS) -lpthread ++libuuid_la_LIBADD = $(LDADD) $(SOCKET_LIBS) $(PTHREAD_LIBS) + + libuuid_la_CFLAGS = \ + $(AM_CFLAGS) \ +-- +2.48.1 + diff --git a/package/util-linux/0004-meson-add-HAVE_LIBPTHREAD.patch b/package/util-linux/0004-meson-add-HAVE_LIBPTHREAD.patch new file mode 100644 index 0000000000..19e0697769 --- /dev/null +++ b/package/util-linux/0004-meson-add-HAVE_LIBPTHREAD.patch @@ -0,0 +1,27 @@ +From f540cc6fed7224fb9ca162cb2f33c338260ae1d2 Mon Sep 17 00:00:00 2001 +From: Karel Zak +Date: Mon, 27 Jan 2025 14:11:35 +0100 +Subject: [PATCH] meson: add HAVE_LIBPTHREAD + +Upstream: https://github.com/util-linux/util-linux/pull/3383 +Signed-off-by: Karel Zak +Signed-off-by: Julien Olivain +--- + meson.build | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/meson.build b/meson.build +index 6d1f986af..ac5fdd799 100644 +--- a/meson.build ++++ b/meson.build +@@ -748,6 +748,7 @@ endif + conf.set('HAVE_CLOCK_GETTIME', have ? 1 : false) + + thread_libs = dependency('threads') ++conf.set('HAVE_LIBPTHREAD', thread_libs.found() ? 1 : false) + + have = cc.has_function('timer_create') + if not have +-- +2.48.1 + diff --git a/package/util-linux/0005-libuuid-support-non-cached-scenarios-when-lpthread-i.patch b/package/util-linux/0005-libuuid-support-non-cached-scenarios-when-lpthread-i.patch new file mode 100644 index 0000000000..0d90f8aec9 --- /dev/null +++ b/package/util-linux/0005-libuuid-support-non-cached-scenarios-when-lpthread-i.patch @@ -0,0 +1,82 @@ +From eecaa2c0dda817eba2d493f6ddb42c39cf789fc2 Mon Sep 17 00:00:00 2001 +From: Karel Zak +Date: Mon, 27 Jan 2025 14:28:36 +0100 +Subject: [PATCH] libuuid: support non-cached scenarios (when -lpthread is + unavailable) + +This patch makes the dependence on pthread optional for libuuid. In +certain cases, such as Buildroot Linux, uClibc-ng, and very low +resource systems, libpthread may be unavailable. + +If libuuid is compiled without pthread, it will not use a local cache +and will instead request a UUID from uuidd for each call. This may +result in less efficient performance, but the UUIDs generated will +still be unique and reliable. + +On minimalistic systems, it is highly likely that uuidd will not be +installed, making this change important for portability and robust +code. + +Upstream: https://github.com/util-linux/util-linux/pull/3383 +Addresses: https://github.com/util-linux/util-linux/pull/3375 +Signed-off-by: Karel Zak +Signed-off-by: Julien Olivain +--- + libuuid/src/gen_uuid.c | 18 +++++++++++++++--- + 1 file changed, 15 insertions(+), 3 deletions(-) + +diff --git a/libuuid/src/gen_uuid.c b/libuuid/src/gen_uuid.c +index 69712267f..1ed82b46b 100644 +--- a/libuuid/src/gen_uuid.c ++++ b/libuuid/src/gen_uuid.c +@@ -80,7 +80,10 @@ + #if defined(__linux__) && defined(HAVE_SYS_SYSCALL_H) + #include + #endif +-#include ++#ifdef HAVE_LIBPTHREAD ++# include ++#endif ++ + #include + + #include "all-io.h" +@@ -580,8 +583,7 @@ int __uuid_generate_time_cont(uuid_t out, int *num, uint32_t cont_offset) + * If neither of these is possible (e.g. because of insufficient permissions), it generates + * the UUID anyway, but returns -1. Otherwise, returns 0. + */ +- +-/* thread local cache for uuidd based requests */ ++#ifdef HAVE_LIBPTHREAD + THREAD_LOCAL struct { + int num; + int cache_size; +@@ -597,8 +599,10 @@ static void reset_uuidd_cache(void) + memset(&uuidd_cache, 0, sizeof(uuidd_cache)); + uuidd_cache.cache_size = CS_MIN; + } ++#endif /* HAVE_LIBPTHREAD */ + + static int uuid_generate_time_generic(uuid_t out) { ++#ifdef HAVE_LIBPTHREAD + static volatile sig_atomic_t atfork_registered; + time_t now; + +@@ -651,6 +655,14 @@ static int uuid_generate_time_generic(uuid_t out) { + return 0; + } + ++#else /* !HAVE_LIBPTHREAD */ ++ { ++ int num = 1; ++ if (get_uuid_via_daemon(UUIDD_OP_TIME_UUID, out, &num) == 0) ++ return 0; ++ } ++#endif /* HAVE_LIBPTHREAD */ ++ + return __uuid_generate_time(out, NULL); + } + +-- +2.48.1 +