On Mon, Sep 13, 2010 at 8:02 PM, Stefan Weil <w...@mail.berlios.de> wrote:
> Since version 4.4.x, gcc supports additional format attributes.
>    __attribute__ ((format (gnu_printf, 1, 2)))
> should be used instead of
>    __attribute__ ((format (printf, 1, 2))
> because QEMU always uses standard format strings (even with mingw32).
>
> For older compilers, we simply define gnu_printf = printf,
> so they work with the new format attribute, too.
>
> Signed-off-by: Stefan Weil <w...@mail.berlios.de>
> ---
>  configure |   11 +++++++++++
>  1 files changed, 11 insertions(+), 0 deletions(-)
>
> diff --git a/configure b/configure
> index 4061cb7..1300879 100755
> --- a/configure
> +++ b/configure
> @@ -148,6 +148,17 @@ for flag in $gcc_flags; do
>     fi
>  done
>
> +# Check gnu_printf (supported by gcc >= 4.4.x).
> +cat > $TMPC << EOF
> +static void test(const char *format, ...)
> +    __attribute__ ((format (gnu_printf, 1, 2)));
> +static void test(const char *format, ...) {}
> +int main(void) { test("\n"); return 0; }
> +EOF
> +if ! compile_prog "-Werror" ""; then
> +    QEMU_CFLAGS="-Dgnu_printf=printf $QEMU_CFLAGS"

This could cause problems, for example if system headers declared a
function called gnu_printf.

I'd introduce CONFIG_GCC_FMT_ATTR_GNU_PRINTF and adjust GCC_FMT_ATTR
definition based on that.

Reply via email to