[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] MinGW build
From: |
Stefan Weil |
Subject: |
Re: [Qemu-devel] MinGW build |
Date: |
Fri, 27 Nov 2015 20:16:49 +0100 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Icedove/31.8.0 |
Am 27.11.2015 um 19:49 schrieb Peter Maydell:
> On 28 November 2014 at 07:14, Stefan Weil <address@hidden> 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