Peter Maydell <peter.mayd...@linaro.org> writes: > On 25 April 2017 at 09:35, Nikunj A Dadhania <nik...@linux.vnet.ibm.com> > wrote: >> Travis builds failure was reported for powernv boot-serial test with >> qemu built with clang. >> >> Debugging revealed that CONFIG_ATOMIC64 wasnt getting set for the clang >> build because of that atomic operations weren't being used and was >> resulting in MTTCG failure in the powernv boot-serial test. >> >> libatomic is required to successfully test atomic64 and atomic128 for >> clang. Introduced newer checks for the same. And on failure default to >> single threaded tcg support in PPC64. >> >> Signed-off-by: Nikunj A Dadhania <nik...@linux.vnet.ibm.com> > > Do we really need libatomic?
I was trying out the program in the configure script with clang and I do get errors without libatomic: $ clang /tmp/atomic.c /tmp/atomic.c:6:7: warning: implicit declaration of function '__atomic_load_8' is invalid in C99 [-Wimplicit-function-declaration] y = __atomic_load_8(&x, 0); ^ /tmp/atomic.c:7:3: warning: implicit declaration of function '__atomic_store_8' is invalid in C99 [-Wimplicit-function-declaration] __atomic_store_8(&x, y, 0); ^ /tmp/atomic.c:8:3: warning: implicit declaration of function '__atomic_compare_exchange_8' is invalid in C99 [-Wimplicit-function-declaration] __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0); ^ /tmp/atomic.c:9:3: warning: implicit declaration of function '__atomic_exchange_8' is invalid in C99 [-Wimplicit-function-declaration] __atomic_exchange_8(&x, y, 0); ^ /tmp/atomic.c:10:3: warning: implicit declaration of function '__atomic_fetch_add_8' is invalid in C99 [-Wimplicit-function-declaration] __atomic_fetch_add_8(&x, y, 0); ^ 5 warnings generated. /tmp/atomic-1660e0.o: In function `main': /tmp/atomic.c:(.text+0x28): undefined reference to `__atomic_load_8' /tmp/atomic.c:(.text+0x40): undefined reference to `__atomic_store_8' /tmp/atomic.c:(.text+0x69): undefined reference to `__atomic_compare_exchange_8' /tmp/atomic.c:(.text+0x7d): undefined reference to `__atomic_exchange_8' /tmp/atomic.c:(.text+0x91): undefined reference to `__atomic_fetch_add_8' clang-3.9: error: linker command failed with exit code 1 (use -v to see invocation) With -latomic, the linker succeeds in getting the binary. > I thought the intention here was that atomic operations were only done > on types of width of the pointer or less, which should all be doable > by the compiler inline, and thus don't need the external library. You are right, even without -latomic in libs_softmmu, tests are passing. But then __atomic_load_8() isn't used in qemu, if it was using them, build would fail. > In the past "doesn't work without libatomic" usually meant >"accidentally tried to do an atomic operation on a type that is too >wide". Regards Nikunj