package/xenomai: fix build with glibc >= 2.34
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>
This commit is contained in:
parent
b8aebcfd82
commit
1b3055cc8d
|
@ -0,0 +1,57 @@
|
|||
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
|
||||
|
Loading…
Reference in a new issue