[Mesa-dev] [PATCH] c11/threads: resolve link issues with -O0

Emil Velikov emil.l.velikov at gmail.com
Tue May 24 09:57:36 UTC 2016


From: Emil Velikov <emil.velikov at collabora.com>

Add weak symbol notation for the pthread_mutexattr* symbols, thus making
the linker happy. When building with -O1 or greater the optimiser will
kick in and remove the said functions as they are dead/unreachable code.

Ideally we'll enable the optimisations locally, yet that does not seem
to work atm.

Cc: Alejandro PiƱeiro <apinheiro at igalia.com>
Cc: Ben Widawsky <ben at bwidawsk.net>
Cc: Ilia Mirkin <imirkin at alum.mit.edu>
Cc: Mark Janes <mark.a.janes at intel.com>
Cc: Rob Clark <robdclark at gmail.com>
Cc: Rob Herring <robh at kernel.org>
Signed-off-by: Emil Velikov <emil.velikov at collabora.com>
---
Building with -Wall -Wextra -pedantic and it does not cause any
additional warnings/errors.
---
 include/c11/threads_posix.h | 26 ++++++++++++++++++++++++++
 1 file changed, 26 insertions(+)

diff --git a/include/c11/threads_posix.h b/include/c11/threads_posix.h
index 11d36e4..61b7fab 100644
--- a/include/c11/threads_posix.h
+++ b/include/c11/threads_posix.h
@@ -169,6 +169,32 @@ mtx_destroy(mtx_t *mtx)
     pthread_mutex_destroy(mtx);
 }
 
+/*
+ * XXX: Workaround when building with -O0 and without pthreads link.
+ *
+ * In such cases constant folding and dead code elimination won't be
+ * available, thus the compiler will always add the pthread_mutexattr*
+ * functions into the binary. As we try to link, we'll fail as the
+ * symbols are unresolved.
+ *
+ * Ideally we'll enable the optimisations locally, yet that does not
+ * seem to work.
+ *
+ * So the alternative workaround is to annotate the symbols as weak.
+ * Thus the linker will be happy and things don't clash when building
+ * with -O1 or greater.
+ */
+#ifdef HAVE_FUNC_ATTRIBUTE_WEAK
+__attribute__((weak))
+int pthread_mutexattr_init(pthread_mutexattr_t *attr);
+
+__attribute__((weak))
+int pthread_mutexattr_settype(pthread_mutexattr_t *attr, int type);
+
+__attribute__((weak))
+int pthread_mutexattr_destroy(pthread_mutexattr_t *attr);
+#endif
+
 // 7.25.4.2
 static inline int
 mtx_init(mtx_t *mtx, int type)
-- 
2.8.2



More information about the mesa-dev mailing list