qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH] Fix compilation on GCC 4.5


From: Stefan Weil
Subject: Re: [Qemu-devel] [PATCH] Fix compilation on GCC 4.5
Date: Wed, 03 Oct 2012 22:45:24 +0200
User-agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.16) Gecko/20120724 Iceowl/1.0b1 Icedove/3.0.11

Am 03.10.2012 21:49, schrieb Søren Sandmann:
Stefan Weil<address@hidden>  writes:

I don't see any warnings with gcc Debian 4.4.5-8.

Could you please provide more information on your environment
and the warnings which you get?

Here is a macro which simplifies the version check:

#if QEMU_GNUC_PREREQ(4, 6)

Regards

Stefan Weil

With this compiler:

     dhcp-100-3-184:~/vertigo/qemu% gcc -v
     Using built-in specs.
     COLLECT_GCC=/usr/bin/gcc
     COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/4.5.1/lto-wrapper
     Target: x86_64-redhat-linux
     Configured with: ../configure --prefix=/usr --mandir=/usr/share/man
     --infodir=/usr/share/info
     --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-bootstrap
     --enable-shared --enable-threads=posix --enable-checking=release
     --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions
     --enable-gnu-unique-object --enable-linker-build-id
     --enable-languages=c,c++,objc,obj-c++,java,fortran,ada,lto
     --enable-plugin --enable-java-awt=gtk --disable-dssi
     --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-1.5.0.0/jre
     --enable-libgcj-multifile --enable-java-maintainer-mode
     --with-ecj-jar=/usr/share/java/eclipse-ecj.jar
     --disable-libjava-multilib --with-ppl --with-cloog --with-tune=generic
     --with-arch_32=i686 --build=x86_64-redhat-linux
     Thread model: posix
     gcc version 4.5.1 20100924 (Red Hat 4.5.1-4) (GCC)

This is the error I get:

     make  BUILD_DIR=/home/ssp/vertigo/qemu -C i386-softmmu V="1"
     TARGET_DIR="i386-softmmu/" all
     make[1]: Entering directory `/home/ssp/vertigo/qemu/i386-softmmu'
     gcc -I/home/ssp/vertigo/qemu/slirp -I. -I/home/ssp/vertigo/qemu
     -I/home/ssp/vertigo/qemu/fpu -I/home/ssp/vertigo/qemu/libcacard
     -I/home/ssp/vertigo/qemu/linux-headers -I/home/ssp/vertigo/qemu/tcg
     -I/home/ssp/vertigo/qemu/tcg/i386  -Werror -fPIE -DPIE -m64
     -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE
     -Wstrict-prototypes -Wredundant-decls -Wall -Wundef -Wwrite-strings
     -Wmissing-prototypes -fno-strict-aliasing  -fstack-protector-all
     -Wendif-labels -Wmissing-include-dirs -Wempty-body -Wnested-externs
     -Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers
     -Wold-style-declaration -Wold-style-definition -Wtype-limits
     -I/usr/include/libpng12   -I/usr/include/spice-server
     -I/usr/include/pixman-1 -I/usr/include/spice-1   -I/usr/include/nss3
     -I/usr/include/nspr4   -pthread -I/usr/include/glib-2.0
     -I/usr/lib64/glib-2.0/include   -DHAS_AUDIO -DHAS_AUDIO_CHOICE
     -DTARGET_PHYS_ADDR_BITS=64 -I../linux-headers
     -I.. -I/home/ssp/vertigo/qemu/target-i386 -DNEED_CPU_H
     -I/home/ssp/vertigo/qemu/include    -I/usr/include/libpng12   -pthread
     -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include   -MMD -MP -MT
     hw/vfio_pci.o -MF hw/vfio_pci.d -O2 -D_FORTIFY_SOURCE=2 -g  -c -o
     hw/vfio_pci.o /home/ssp/vertigo/qemu/hw/vfio_pci.c
     cc1: warnings being treated as errors
     /home/ssp/vertigo/qemu/hw/vfio_pci.c: In function ‘vfio_bar_write’:
     /home/ssp/vertigo/qemu/hw/vfio_pci.c:604:84: error: value computed is not 
used
     /home/ssp/vertigo/qemu/hw/vfio_pci.c: In function ‘vfio_bar_read’:
     /home/ssp/vertigo/qemu/hw/vfio_pci.c:644:84: error: value computed is
     not used
     make[1]: *** [hw/vfio_pci.o] Error 1
     make[1]: Leaving directory `/home/ssp/vertigo/qemu/i386-softmmu'
     make: *** [subdir-i386-softmmu] Error 2

That's strange.

The lines which cause compiler errors look like this:

    vfio_eoi(DO_UPCAST(VFIODevice, bars[bar->nr], bar));

There are more uses of DO_UPCAST without any compiler error:

    VFIODevice *vdev = DO_UPCAST(VFIODevice, pdev, pdev);

Neither of both lines creates a compiler error with any of my
compilers (gcc 4.4 up to latest gcc, Linux and MinGW hosts).

When I compile with gcc option -save-temps, I get this code
for the first line:

vfio_eoi(( __extension__ ( { char __attribute__((unused)) offset_must_be_zero[ -__builtin_offsetof (VFIODevice, bars[bar->nr])]; ({ const typeof(((VFIODevice *) 0)->bars[bar->nr]) *__mptr = (bar); (VFIODevice *) ((char *) __mptr - __builtin_offsetof (VFIODevice, bars[bar->nr]));});})));

Could you please replace the first line by that code and try your compiler?
If it remains silent, I suspect a bad offsetof macro.

Do you compile on Linux? Which distribution or which C library do you use?

Regards

Stefan Weil




reply via email to

[Prev in Thread] Current Thread [Next in Thread]