[Mesa-dev] Fix __atomic* builtins detection for Clang
Jan Beich
jbeich at FreeBSD.org
Sat May 13 07:01:49 UTC 2017
Jonathan Gray <jsg at jsg.id.au> writes:
> On Sat, May 13, 2017 at 02:22:30AM +0200, Jan Beich wrote:
>
>> "int" isn't large enough and lack of builtins only manifests at link time.
>> This was breaking build on FreeBSD 11.0 i386 with Clang 3.8.0.
>>
>> 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)
>
> You should be building with -march=i586 on i386 for CX8.
-march=i586 doesn't help. Dimitry, could this be a Clang bug?
$ cat a.c
#include <stdint.h>
int main() {
uint64_t n;
return __atomic_load_n(&n, __ATOMIC_ACQUIRE);
}
$ clang40 -m32 -march=i586 a.c
/tmp/a-d984ec.o: In function `main':
a.c:(.text+0x21): undefined reference to `__atomic_load_8'
clang-4.0: error: linker command failed with exit code 1 (use -v to see invocation)
full build log: http://sprunge.us/LJdh
>
> The diff is wrong as it will break other architectures, ie powerpc.
And it's not broken already? -latomic isn't passed anywhere.
>
> commit a6a38a038bd62e6d9558905f00bef81b5e7e6fcc
> Author: Grazvydas Ignotas <notasas at gmail.com>
> Date: Fri Mar 31 01:26:25 2017 +0300
>
> util/u_atomic: provide 64bit atomics where they're missing
>
> attempts to handle powerpc like situations, though not sync
> builtins being missing entirely.
>
>> ---
>> configure.ac | 5 +++--
>> 1 file changed, 3 insertions(+), 2 deletions(-)
>>
>> diff --git a/configure.ac b/configure.ac
>> index 957d15df8c..5b11941a0c 100644
>> --- a/configure.ac
>> +++ b/configure.ac
>> @@ -403,9 +403,10 @@ AM_CONDITIONAL([SSE41_SUPPORTED], [test x$SSE41_SUPPORTED = x1])
>> AC_SUBST([SSE41_CFLAGS], $SSE41_CFLAGS)
>>
>> dnl Check for new-style atomic builtins
>> -AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
>> +AC_LINK_IFELSE([AC_LANG_SOURCE([[
>> +#include <stdint.h>
>> int main() {
>> - int n;
>> + uint64_t n;
>> return __atomic_load_n(&n, __ATOMIC_ACQUIRE);
>> }]])], GCC_ATOMIC_BUILTINS_SUPPORTED=1)
>> if test "x$GCC_ATOMIC_BUILTINS_SUPPORTED" = x1; then
>> _______________________________________________
>> mesa-dev mailing list
>> mesa-dev at lists.freedesktop.org
>> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
More information about the mesa-dev
mailing list