From: Juan Quintela <quintela@redhat.com>
To: Peter Maydell <peter.maydell@linaro.org>
Cc: Stefan Weil <sw@weilnetz.de>,
QEMU Developers <Qemu-devel@nongnu.org>,
Liviu Ionescu <ilg@livius.net>
Subject: Re: [Qemu-devel] MinGW build
Date: Mon, 30 Nov 2015 14:24:21 +0100 [thread overview]
Message-ID: <878u5foc1m.fsf@emacs.mitica> (raw)
In-Reply-To: <CAFEAcA_6JaDhdbiqPXrJFsy8BLWVxraJR9tLJp2y4gVVpb-QfQ@mail.gmail.com> (Peter Maydell's message of "Fri, 27 Nov 2015 18:49:21 +0000")
Peter Maydell <peter.maydell@linaro.org> wrote:
> On 28 November 2014 at 07:14, Stefan Weil <sw@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".
Confirmed that following patch works for me (as I don't have a pre-4.4
compiler, I didn't care if doing the proper thing).
diff --git a/disas/libvixl/utils.h b/disas/libvixl/utils.h
index b440626..96ef4b0 100644
--- a/disas/libvixl/utils.h
+++ b/disas/libvixl/utils.h
@@ -36,7 +36,7 @@ namespace vixl {
// Macros for compile-time format checking.
#if defined(__GNUC__)
#define PRINTF_CHECK(format_index, varargs_index) \
- __attribute__((format(printf, format_index, varargs_index)))
+ __attribute__((format(gnu_printf, format_index, varargs_index)))
#else
#define PRINTF_CHECK(format_index, varargs_index)
#endif
I lied, on win64, you also need the following one (notice that
getpagesize on unix return int as far as I can see). And this is the
solution that was suggested on list. Should I submit that one, or
should we leave the warning?
Thanks, Juan.
diff --git a/include/sysemu/os-win32.h b/include/sysemu/os-win32.h
index 13dcef6..400e098 100644
--- a/include/sysemu/os-win32.h
+++ b/include/sysemu/os-win32.h
@@ -87,7 +87,7 @@ static inline void os_setup_post(void) {}
void os_set_line_buffering(void);
static inline void os_set_proc_name(const char *dummy) {}
-size_t getpagesize(void);
+int getpagesize(void);
#if !defined(EPROTONOSUPPORT)
# define EPROTONOSUPPORT EINVAL
diff --git a/util/oslib-win32.c b/util/oslib-win32.c
index 09f9e98..7aad185 100644
--- a/util/oslib-win32.c
+++ b/util/oslib-win32.c
@@ -454,7 +454,7 @@ gint g_poll(GPollFD *fds, guint nfds, gint timeout)
return retval;
}
-size_t getpagesize(void)
+getpagesize(void)
{
SYSTEM_INFO system_info;
@@ -465,7 +465,7 @@ size_t getpagesize(void)
void os_mem_prealloc(int fd, char *area, size_t memory)
{
int i;
- size_t pagesize = getpagesize();
+ int pagesize = getpagesize();
memory = (memory + pagesize - 1) & -pagesize;
for (i = 0; i < memory / pagesize; i++) {
next prev parent reply other threads:[~2015-11-30 13:24 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-11-26 19:55 [Qemu-devel] MinGW build Liviu Ionescu
2014-11-26 20:13 ` Peter Maydell
2014-11-26 20:19 ` Stefan Weil
2014-11-26 21:44 ` Liviu Ionescu
2014-11-27 16:43 ` Liviu Ionescu
2014-11-27 19:34 ` Peter Maydell
2014-11-27 19:57 ` Liviu Ionescu
2014-11-27 20:09 ` Stefan Weil
2014-11-27 20:14 ` Liviu Ionescu
2014-11-27 20:18 ` Peter Maydell
2014-11-27 20:27 ` Liviu Ionescu
2014-11-27 22:04 ` Peter Maydell
2014-11-28 0:30 ` Liviu Ionescu
2014-11-28 7:14 ` Stefan Weil
2014-11-28 8:41 ` Peter Maydell
2015-11-27 18:49 ` Peter Maydell
2015-11-27 19:16 ` Stefan Weil
2015-11-27 21:05 ` Peter Maydell
2015-11-29 12:03 ` Juan Quintela
2015-12-03 11:58 ` Peter Maydell
2015-12-03 14:15 ` Peter Maydell
2015-12-03 14:30 ` Juan Quintela
2015-11-30 13:24 ` Juan Quintela [this message]
2015-11-30 13:29 ` Stefan Weil
2014-11-27 20:52 ` Liviu Ionescu
2014-11-27 21:14 ` Stefan Weil
2014-11-27 21:38 ` Liviu Ionescu
2014-11-28 6:20 ` Stefan Weil
2014-11-28 6:23 ` Liviu Ionescu
2014-11-28 7:03 ` Stefan Weil
2014-12-01 10:30 ` Liviu Ionescu
2014-12-01 18:42 ` Stefan Weil
2014-12-02 18:28 ` Liviu Ionescu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=878u5foc1m.fsf@emacs.mitica \
--to=quintela@redhat.com \
--cc=Qemu-devel@nongnu.org \
--cc=ilg@livius.net \
--cc=peter.maydell@linaro.org \
--cc=sw@weilnetz.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.