[Top][All Lists]
[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