Tested-by: Mark Janes <mark.a.ja...@intel.com> Emil Velikov <emil.l.veli...@gmail.com> writes:
> From: Emil Velikov <emil.veli...@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. > > v2: Add the AX_GCC_FUNC_ATTRIBUTE([weak]) hunk in configure. > > Cc: Alejandro PiƱeiro <apinhe...@igalia.com> > Cc: Ben Widawsky <b...@bwidawsk.net> > Cc: Ilia Mirkin <imir...@alum.mit.edu> > Cc: Mark Janes <mark.a.ja...@intel.com> > Cc: Rob Clark <robdcl...@gmail.com> > Cc: Rob Herring <r...@kernel.org> > Signed-off-by: Emil Velikov <emil.veli...@collabora.com> > --- > configure.ac | 1 + > include/c11/threads_posix.h | 26 ++++++++++++++++++++++++++ > 2 files changed, 27 insertions(+) > > diff --git a/configure.ac b/configure.ac > index 47c138a..fc0b1db 100644 > --- a/configure.ac > +++ b/configure.ac > @@ -233,6 +233,7 @@ AX_GCC_FUNC_ATTRIBUTE([pure]) > AX_GCC_FUNC_ATTRIBUTE([returns_nonnull]) > AX_GCC_FUNC_ATTRIBUTE([unused]) > AX_GCC_FUNC_ATTRIBUTE([warn_unused_result]) > +AX_GCC_FUNC_ATTRIBUTE([weak]) > > AM_CONDITIONAL([GEN_ASM_OFFSETS], test "x$GEN_ASM_OFFSETS" = xyes) > > 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 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev