Gražvydas
On Sat, May 13, 2017 at 12:20 PM, Jan Beich <jbe...@freebsd.org> wrote: > glsl/.libs/libstandalone.a(libmesautil_la-disk_cache.o): In function > `disk_cache_remove': > disk_cache.c:(.text+0x763): undefined reference to `__atomic_fetch_add_8' > glsl/.libs/libstandalone.a(libmesautil_la-disk_cache.o): In function > `cache_put': > disk_cache.c:(.text+0xabc): undefined reference to `__atomic_fetch_add_8' > disk_cache.c:(.text+0xec1): undefined reference to `__atomic_fetch_add_8' > c++: error: linker command failed with exit code 1 (use -v to see invocation) > > Signed-off-by: Jan Beich <jbe...@freebsd.org> Breaks build with -march=i486 on Linux: u_atomic.c:35:24: warning: ‘sync_mutex’ defined but not used [-Wunused-variable] CXXLD glsl_compiler glsl/.libs/libstandalone.a(libmesautil_la-u_atomic.o): In function `__atomic_fetch_add_8': /home/notaz/src/radeon/mesa/src/util/u_atomic.c:69: undefined reference to `__sync_add_and_fetch_8' glsl/.libs/libstandalone.a(libmesautil_la-u_atomic.o): In function `__atomic_fetch_sub_8': /home/notaz/src/radeon/mesa/src/util/u_atomic.c:75: undefined reference to `__sync_sub_and_fetch_8' Perhaps need to amend this patch with copy-paste implementations of __atomic_*() functions instead of them calling the sync_*() counterparts. This atomic stuff is a minefield... > --- > configure.ac | 13 ++++++++++++- > src/util/u_atomic.c | 4 ++++ > 2 files changed, 16 insertions(+), 1 deletion(-) > > diff --git a/configure.ac b/configure.ac > index ce5301f3e4..08d8879986 100644 > --- a/configure.ac > +++ b/configure.ac > @@ -415,13 +415,24 @@ AM_CONDITIONAL([GCC_ATOMIC_BUILTINS_SUPPORTED], [test > x$GCC_ATOMIC_BUILTINS_SUPP > > dnl Check if host supports 64-bit atomics > dnl note that lack of support usually results in link (not compile) error > -AC_MSG_CHECKING(whether __sync_add_and_fetch_8 is supported) > +save_CFLAGS=$CFLAGS > +if test "x$GCC_ATOMIC_BUILTINS_SUPPORTED" = x1; then > + CFLAGS="$CFLAGS -DUSE_GCC_ATOMIC_BUILTINS" > + AC_MSG_CHECKING(whether __atomic_fetch_add_8 is supported) > +else > + AC_MSG_CHECKING(whether __sync_add_and_fetch_8 is supported) > +fi > AC_LINK_IFELSE([AC_LANG_SOURCE([[ > #include <stdint.h> > uint64_t v; > int main() { > +#ifdef USE_GCC_ATOMIC_BUILTINS > + return __atomic_add_fetch(&v, 1, __ATOMIC_ACQ_REL); > +#else > return __sync_add_and_fetch(&v, (uint64_t)1); > +#endif > }]])], GCC_64BIT_ATOMICS_SUPPORTED=yes, GCC_64BIT_ATOMICS_SUPPORTED=no) > +CFLAGS=$save_CFLAGS > if test "x$GCC_64BIT_ATOMICS_SUPPORTED" != xyes; then > DEFINES="$DEFINES -DMISSING_64BIT_ATOMICS" > fi > diff --git a/src/util/u_atomic.c b/src/util/u_atomic.c > index 44b75fb0c0..691c34cf30 100644 > --- a/src/util/u_atomic.c > +++ b/src/util/u_atomic.c > @@ -34,6 +34,7 @@ > > static pthread_mutex_t sync_mutex = PTHREAD_MUTEX_INITIALIZER; > > +#ifndef USE_GCC_ATOMIC_BUILTINS > WEAK uint64_t > __sync_add_and_fetch_8(uint64_t *ptr, uint64_t val) > { > @@ -60,6 +61,8 @@ __sync_sub_and_fetch_8(uint64_t *ptr, uint64_t val) > return r; > } > > +#else > + > WEAK uint64_t > __atomic_fetch_add_8(uint64_t *ptr, uint64_t val, int memorder) > { > @@ -71,5 +74,6 @@ __atomic_fetch_sub_8(uint64_t *ptr, uint64_t val, int > memorder) > { > return __sync_sub_and_fetch(ptr, val); > } > +#endif /* !USE_GCC_ATOMIC_BUILTINS */ > > #endif > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev