On 10/21/18 4:21 PM, Peter Maydell wrote: > On 21 October 2018 at 16:01, Peter Maydell <peter.mayd...@linaro.org> wrote: >> Any idea what's going on here? tcg/tcg.h has a comment saying >> * The cmpxchg functions are only defined if HAVE_CMPXCHG128 >> so presumably the issue is that the helper-a64 code is >> trying to refer to them anyway. There certainly doesn't >> seem to be any kind of #defining around the listed functions >> in helper-a64.c to stop them being compiled in this situation. >> >> NB: I build with --enable-debug in this tree -- are you >> perhaps accidentally relying on the compiler's optimisation >> to discard these functions if they're not needed? > > Adding a #if HAVE_CMPXCHG128 around the helper-a64.c > functions just pushes the link error back a step to the > references to those helpers: > LINK aarch64-softmmu/qemu-system-aarch64w.exe > tcg/tcg.o:tcg.c:(.rdata+0x9810): undefined reference to > `helper_paired_cmpxchg64_le_parallel' > tcg/tcg.o:tcg.c:(.rdata+0x9830): undefined reference to > `helper_paired_cmpxchg64_be_parallel' > tcg/tcg.o:tcg.c:(.rdata+0x9840): undefined reference to > `helper_casp_le_parallel' > tcg/tcg.o:tcg.c:(.rdata+0x9850): undefined reference to > `helper_casp_be_parallel' > > which in turn I guess is because they're in the array > of all helpers in tcg.c, so we need to also #if out the > prototypes in helper-a64.h, which is awkward because > there we don't have the HAVE_CMPXCHG128 defined...
I spoke with Peter in person today about this. For the list, I've reproduced the problem, and I'm calling it a mingw bug. A patch against qemu/osdep.h to fix this once and for all shortly. r~