Am 27.11.2015 um 19:49 schrieb Peter Maydell: > On 28 November 2014 at 07:14, Stefan Weil <s...@weilnetz.de> wrote: >> The libvixl code is correct, but the C++ compiler would need to be >> fixed. Here are some examples: >> >> disas/libvixl/a64/disasm-a64.cc:1340:57: warning: unknown conversion >> type character ālā in format [-Wformat] >> disas/libvixl/a64/disasm-a64.cc:1340:57: warning: too many arguments for >> format [-Wformat-extra-args] >> disas/libvixl/a64/disasm-a64.cc:1492:42: warning: unknown conversion >> type character ālā in format [-Wformat] >> >> That code uses PRIx64, so the format specifier is %llx which is correct. >> Obviously the C++ compiler ignores that QEMU uses ANSI format specifiers >> (compiler option -D__USE_MINGW_ANSI_STDIO=1) instead of the MS specific >> ones. > > I finally got around to looking at this (a year later!), and it turns out > that the problem here is just that libvixl's code for marking functions > as having format strings doesn't have the check that we do in > include/qemu/compiler.h: > > #if defined __GNUC__ > # if !QEMU_GNUC_PREREQ(4, 4) > /* gcc versions before 4.4.x don't support gnu_printf, so use printf. */ > # define GCC_FMT_ATTR(n, m) __attribute__((format(printf, n, m))) > # else > /* Use gnu_printf when supported (qemu uses standard format strings). */ > # define GCC_FMT_ATTR(n, m) __attribute__((format(gnu_printf, n, m))) > # if defined(_WIN32) > /* Map __printf__ to __gnu_printf__ because we want standard format > strings > * even when MinGW or GLib include files use __printf__. */ > # define __printf__ __gnu_printf__ > # endif > # endif > #else > #define GCC_FMT_ATTR(n, m) > #endif > > ...which will effectively cause us to use 'gnu_printf' on this > compiler, which works. The libvixl headers always use plain 'printf', > which gets warnings. So I think we can fix this pretty simply in > disas/libvixl/utils.h by making it also do "use gnu_printf for > a compiler that's 4.4 or better". > > thanks > -- PMM >
Yes, that's correct. I just did a short test and replaced "printf" by "gnu_printf" in disas/libvixl/utils.h: no more warnings when MinGW compiles disas/libvixl/a64/disasm-a64.cc. I think we can wait for a new version of libvixl which includes the fix, no need for a last minute fix for QEMU 2.5. Will you report it to the libvixl developers? Thanks, Stefan