1b3055cc8d
Fix the following build failure with glibc >= 2.34: In file included from timerobj.c:32: In function 'threadobj_set_current', inlined from 'server_prologue' at timerobj.c:94:2: ../../include/copperplate/threadobj.h:252:9: error: 'pthread_setspecific' expecting 1 byte in a region of size 0 [-Werror=stringop-overread] 252 | pthread_setspecific(threadobj_tskey, thobj); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Fixes: - http://autobuild.buildroot.org/results/ed93f916eda304b30f320816c85d1b0d4488c699 Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com> Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr>
58 lines
2.1 KiB
Diff
58 lines
2.1 KiB
Diff
From 627d488db3aa71406e32d4d8934629e8b0f35905 Mon Sep 17 00:00:00 2001
|
|
From: Jan Kiszka <jan.kiszka@siemens.com>
|
|
Date: Sat, 16 Oct 2021 15:46:33 +0200
|
|
Subject: [PATCH] lib/{cobalt,copperplate}: Use valid addresses for
|
|
pthread_setspecific
|
|
|
|
glibx 2.34 and newer annotated pthread_setspecific in a way that gcc-11
|
|
complains about non-NULL pointers that are outside of what is considered
|
|
valid. So use dummy addresses instead. namely the related pthread keys.
|
|
Those pointers will never be dereferenced in both use cases.
|
|
|
|
See also https://sourceware.org/bugzilla/show_bug.cgi?id=28458.
|
|
|
|
Reported-by: Vitaly Chikunov <vt@altlinux.org>
|
|
Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
|
|
|
|
[Retrieved from:
|
|
https://source.denx.de/Xenomai/xenomai/-/commit/627d488db3aa71406e32d4d8934629e8b0f35905]
|
|
Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
|
|
---
|
|
include/copperplate/threadobj.h | 6 +++++-
|
|
lib/cobalt/printf.c | 2 +-
|
|
2 files changed, 6 insertions(+), 2 deletions(-)
|
|
|
|
diff --git a/include/copperplate/threadobj.h b/include/copperplate/threadobj.h
|
|
index 7e6904f4c..c8363415b 100644
|
|
--- a/include/copperplate/threadobj.h
|
|
+++ b/include/copperplate/threadobj.h
|
|
@@ -173,7 +173,11 @@ void threadobj_save_timeout(struct threadobj_corespec *corespec,
|
|
#define __THREAD_M_SPARE6 (1 << 22)
|
|
#define __THREAD_M_SPARE7 (1 << 23)
|
|
|
|
-#define THREADOBJ_IRQCONTEXT ((struct threadobj *)-2UL)
|
|
+/*
|
|
+ * We need to use a valid address here. The object will never be dereferenced
|
|
+ * when it is identified as IRQ context, so the pthread key itself is fine.
|
|
+ */
|
|
+#define THREADOBJ_IRQCONTEXT ((struct threadobj *)&threadobj_tskey)
|
|
|
|
struct traceobj;
|
|
struct syncobj;
|
|
diff --git a/lib/cobalt/printf.c b/lib/cobalt/printf.c
|
|
index 8982ddc93..0aa5940c6 100644
|
|
--- a/lib/cobalt/printf.c
|
|
+++ b/lib/cobalt/printf.c
|
|
@@ -729,7 +729,7 @@ done:
|
|
pthread_cond_init(&printer_wakeup, NULL);
|
|
spawn_printer_thread();
|
|
/* We just need a non-zero TSD to trigger the dtor upon unwinding. */
|
|
- pthread_setspecific(cleanup_key, (void *)1);
|
|
+ pthread_setspecific(cleanup_key, &cleanup_key);
|
|
|
|
atexit(rt_print_flush_buffers);
|
|
}
|
|
--
|
|
GitLab
|
|
|