On 05/07/2015 06:45 AM, Peter Maydell wrote: > Fails to build on win32: > > LINK arm-softmmu/qemu-system-arm.exe > arch_init.o: In function `do_compress_ram_page': > /home/petmay01/linaro/qemu-for-merges/arch_init.c:879: undefined > reference to `___sync_fetch_and_add_8' > collect2: ld returned 1 exit status > > It's not valid to try to do atomic operations on a type > that's larger than the native pointer type. (This will also > cause compile issues on ppc32.) Unfortunately we don't > currently have a way to make this a compile failure on > normal 32-bit x86 setups... Right now, patch 8/16 is the culprit: + atomic_inc(&acct_info.norm_pages); which expands to: include/qemu/atomic.h:#define atomic_inc(ptr) ((void) __sync_fetch_and_add(ptr, 1)) I wonder if include/qemu/atomic.h could enhance the #define wrappers to add no-op compile-time checking, something like (untested): #define atomic_add(ptr, n) do { \ QEMU_BUILD_BUG_ON(sizeof(ptr) > sizeof(void*)); \ __sync_fetch_and_add(ptr, 1); \ } while (0) -- Eric Blake eblake redhat com +1-919-301-3266 Libvirt virtualization library http://libvirt.org