Message ID | 1364577620-32630-1-git-send-email-sw@weilnetz.de |
---|---|
State | Accepted |
Headers | show |
On 29 March 2013 17:20, Stefan Weil <sw@weilnetz.de> wrote: > Maybe this modification is also needed for native gcc-4.4 and older > on Linux i386. If yes, we can move the new script code out of the > MinGW conditional code. There are at least a few people who want to run on older CPUs still (though the use of rdtsc doesn't help there, and we never did figure out how to identify whether we were compiling on a CPU which has rdtsc.) -- PMM
On Fri, Mar 29, 2013 at 5:58 PM, Peter Maydell <peter.maydell@linaro.org> wrote: > On 29 March 2013 17:20, Stefan Weil <sw@weilnetz.de> wrote: >> Maybe this modification is also needed for native gcc-4.4 and older >> on Linux i386. If yes, we can move the new script code out of the >> MinGW conditional code. > > There are at least a few people who want to run on older > CPUs still (though the use of rdtsc doesn't help there, and > we never did figure out how to identify whether we were > compiling on a CPU which has rdtsc.) Maybe for Linux (embedded i486 or whatsit). But host CPUs older than i686 with Windows? We don't support Win2k as a host, would WinXP support < i686? > > -- PMM >
On 30 March 2013 13:44, Blue Swirl <blauwirbel@gmail.com> wrote: > On Fri, Mar 29, 2013 at 5:58 PM, Peter Maydell <peter.maydell@linaro.org> wrote: >> On 29 March 2013 17:20, Stefan Weil <sw@weilnetz.de> wrote: >>> Maybe this modification is also needed for native gcc-4.4 and older >>> on Linux i386. If yes, we can move the new script code out of the >>> MinGW conditional code. >> >> There are at least a few people who want to run on older >> CPUs still (though the use of rdtsc doesn't help there, and >> we never did figure out how to identify whether we were >> compiling on a CPU which has rdtsc.) > > Maybe for Linux (embedded i486 or whatsit). But host CPUs older than > i686 with Windows? We don't support Win2k as a host, would WinXP > support < i686? Yes, I should have been clearer, I meant specifically for Linux, since Stefan was suggesting widening the change to Linux too. -- PMM
Thanks, applied. On Fri, Mar 29, 2013 at 5:20 PM, Stefan Weil <sw@weilnetz.de> wrote: > The cross i586-mingw32msvc-gcc 4.4.4 from Debian Squeeze does not support > __sync_val_compare_and_swap by default. > > Using -march=i686 fixes that and should also result in better code. > > Signed-off-by: Stefan Weil <sw@weilnetz.de> > --- > > Maybe this modification is also needed for native gcc-4.4 and older > on Linux i386. If yes, we can move the new script code out of the > MinGW conditional code. > > Newer versions of gcc obviously use -march=i686 by default and > don't need the patch, but it also won't do any harm for those > versions. > > Stefan > > > configure | 5 +++++ > 1 file changed, 5 insertions(+) > > diff --git a/configure b/configure > index f2af714..70c2219 100755 > --- a/configure > +++ b/configure > @@ -562,6 +562,11 @@ if test "$mingw32" = "yes" ; then > QEMU_CFLAGS="-DWIN32_LEAN_AND_MEAN -DWINVER=0x501 $QEMU_CFLAGS" > # enable C99/POSIX format strings (needs mingw32-runtime 3.15 or later) > QEMU_CFLAGS="-D__USE_MINGW_ANSI_STDIO=1 $QEMU_CFLAGS" > + if test "$cpu" = "i386"; then > + # We need something better than i386 for __sync_val_compare_and_swap > + # and can expect that QEMU will only run on i686 or later. > + QEMU_CFLAGS="-march=i686 $QEMU_CFLAGS" > + fi > LIBS="-lwinmm -lws2_32 -liphlpapi $LIBS" > cat > $TMPC << EOF > int main(void) { return 0; } > -- > 1.7.10.4 > >
On 29.03.2013 21:20, Stefan Weil wrote: > The cross i586-mingw32msvc-gcc 4.4.4 from Debian Squeeze does not support > __sync_val_compare_and_swap by default. > > Using -march=i686 fixes that and should also result in better code. > > Signed-off-by: Stefan Weil <sw@weilnetz.de> > --- > > Maybe this modification is also needed for native gcc-4.4 and older > on Linux i386. If yes, we can move the new script code out of the > MinGW conditional code. > > Newer versions of gcc obviously use -march=i686 by default and > don't need the patch, but it also won't do any harm for those > versions. > > Stefan > mingw is built with --build=mingw32 and looks like it defaults to -march=i386 (I have gcc version 4.7.2). Default build on windows is broken without this patch, it should be applied to 1.5 probably. Tested-by: Igor Mitsyanko <i.mitsyanko@gmail.com> > > configure | 5 +++++ > 1 file changed, 5 insertions(+) > > diff --git a/configure b/configure > index f2af714..70c2219 100755 > --- a/configure > +++ b/configure > @@ -562,6 +562,11 @@ if test "$mingw32" = "yes" ; then > QEMU_CFLAGS="-DWIN32_LEAN_AND_MEAN -DWINVER=0x501 $QEMU_CFLAGS" > # enable C99/POSIX format strings (needs mingw32-runtime 3.15 or later) > QEMU_CFLAGS="-D__USE_MINGW_ANSI_STDIO=1 $QEMU_CFLAGS" > + if test "$cpu" = "i386"; then > + # We need something better than i386 for __sync_val_compare_and_swap > + # and can expect that QEMU will only run on i686 or later. > + QEMU_CFLAGS="-march=i686 $QEMU_CFLAGS" > + fi > LIBS="-lwinmm -lws2_32 -liphlpapi $LIBS" > cat > $TMPC << EOF > int main(void) { return 0; } >
Am 10.05.2013 22:14, schrieb Igor Mitsyanko: > On 29.03.2013 21:20, Stefan Weil wrote: >> The cross i586-mingw32msvc-gcc 4.4.4 from Debian Squeeze does not >> support >> __sync_val_compare_and_swap by default. >> >> Using -march=i686 fixes that and should also result in better code. >> >> Signed-off-by: Stefan Weil <sw@weilnetz.de> >> --- >> >> Maybe this modification is also needed for native gcc-4.4 and older >> on Linux i386. If yes, we can move the new script code out of the >> MinGW conditional code. >> >> Newer versions of gcc obviously use -march=i686 by default and >> don't need the patch, but it also won't do any harm for those >> versions. >> >> Stefan >> > > mingw is built with --build=mingw32 and looks like it defaults to > -march=i386 (I have gcc version 4.7.2). > Default build on windows is broken without this patch, it should be > applied to 1.5 probably. > > Tested-by: Igor Mitsyanko <i.mitsyanko@gmail.com> > With latest QEMU, -march=i486 is used and there should be no problem. If there still is a problem, we have to look for the reason. Could you please post the output from configure? Regards, Stefan
On 11.05.2013 10:41, Stefan Weil wrote: > Am 10.05.2013 22:14, schrieb Igor Mitsyanko: >> On 29.03.2013 21:20, Stefan Weil wrote: >>> The cross i586-mingw32msvc-gcc 4.4.4 from Debian Squeeze does not >>> support >>> __sync_val_compare_and_swap by default. >>> >>> Using -march=i686 fixes that and should also result in better code. >>> >>> Signed-off-by: Stefan Weil <sw@weilnetz.de> >>> --- >>> >>> Maybe this modification is also needed for native gcc-4.4 and older >>> on Linux i386. If yes, we can move the new script code out of the >>> MinGW conditional code. >>> >>> Newer versions of gcc obviously use -march=i686 by default and >>> don't need the patch, but it also won't do any harm for those >>> versions. >>> >>> Stefan >>> >> mingw is built with --build=mingw32 and looks like it defaults to >> -march=i386 (I have gcc version 4.7.2). >> Default build on windows is broken without this patch, it should be >> applied to 1.5 probably. >> >> Tested-by: Igor Mitsyanko <i.mitsyanko@gmail.com> >> > With latest QEMU, -march=i486 is used and there should be no problem. > If there still is a problem, we have to look for the reason. > > Could you please post the output from configure? > > Regards, > Stefan > Right, looks like my configuration has __sync_fetch_and_and but doesn't have __sync_val_compare_and_swap. That's why configure check passes but build fails: LINK arm-softmmu/qemu-system-armw.exe ../migration.o: In function `migrate_finish_set_state': g:\qemu_develop_ws\qemu_upstream/migration.c:293: undefined reference to `__sync_val_compare_and_swap_4' g:\qemu_develop_ws\qemu_upstream/migration.c:293: undefined reference to `__sync_val_compare_and_swap_4' g:\qemu_develop_ws\qemu_upstream/migration.c:293: undefined reference to `__sync_val_compare_and_swap_4' collect2.exe: error: ld returned 1 exit status make[1]: *** [qemu-system-armw.exe] Error 1 make: *** [subdir-arm-softmmu] Error 2 $ ./configure --target-list=arm-softmmu Install prefix c:/Program Files/QEMU BIOS directory c:/Program Files/QEMU binary directory c:/Program Files/QEMU library directory c:/Program Files/QEMU/lib libexec directory c:/Program Files/QEMU/libexec include directory c:/Program Files/QEMU/include config directory c:/Program Files/QEMU local state directory c:/Program Files/QEMU Source path /g/qemu_develop_ws/qemu_upstream C compiler cc Host C compiler cc Objective-C compiler cc CFLAGS -O2 -D_FORTIFY_SOURCE=2 -g QEMU_CFLAGS -m32 -D__USE_MINGW_ANSI_STDIO=1 -DWIN32_LEAN_AND_MEAN -DWINVER=0x501 -D_GNU_SOURCE -D_FILE_OFFSET_BITS =64 -D_LARGEFILE_SOURCE -Wstrict-prototypes -Wredundant-decls -Wall -Wundef -Wwrite-strings -Wmissing-prototypes -fno-st rict-aliasing -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 -fstack-protector-all -IC:/ming w/include/libpng14 -IC:/mingw/include/pixman-1 LDFLAGS -Wl,--nxcompat -Wl,--no-seh -Wl,--dynamicbase -Wl,--warn-common -m32 -g make make install install python python smbd /usr/sbin/smbd host CPU i386 host big endian no target list arm-softmmu tcg debug enabled no gprof enabled no sparse enabled no strip binaries yes profiler no static build no -Werror enabled no pixman system SDL support yes GTK support no curses support no curl support yes mingw32 support yes Audio drivers winwave Block whitelist Mixer emulation no VirtFS support no VNC support yes VNC TLS support no VNC SASL support no VNC JPEG support yes VNC PNG support yes VNC WS support no xen support no brlapi support no bluez support no Documentation yes NPTL support no GUEST_BASE yes PIE no vde support no Linux AIO support no ATTR/XATTR support no Install blobs yes KVM support no TCG interpreter no fdt support no preadv support no fdatasync no madvise no posix_madvise no sigev_thread_id no uuid support no libcap-ng support no vhost-net support no vhost-scsi support no Trace backend nop Trace output file trace-<pid> spice support no (/) rbd support no xfsctl support no nss used no libusb no usb net redir no GLX support no libiscsi support no build guest agent yes seccomp support no coroutine backend win32 GlusterFS support no virtio-blk-data-plane no gcov gcov gcov enabled no TPM support no libssh2 support no TPM passthrough no
Am 11.05.2013 11:01, schrieb Igor Mitsyanko: > On 11.05.2013 10:41, Stefan Weil wrote: >> Am 10.05.2013 22:14, schrieb Igor Mitsyanko: >>> On 29.03.2013 21:20, Stefan Weil wrote: >>>> The cross i586-mingw32msvc-gcc 4.4.4 from Debian Squeeze does not >>>> support >>>> __sync_val_compare_and_swap by default. >>>> >>>> Using -march=i686 fixes that and should also result in better code. >>>> >>>> Signed-off-by: Stefan Weil <sw@weilnetz.de> >>>> --- >>>> >>>> Maybe this modification is also needed for native gcc-4.4 and older >>>> on Linux i386. If yes, we can move the new script code out of the >>>> MinGW conditional code. >>>> >>>> Newer versions of gcc obviously use -march=i686 by default and >>>> don't need the patch, but it also won't do any harm for those >>>> versions. >>>> >>>> Stefan >>>> >>> mingw is built with --build=mingw32 and looks like it defaults to >>> -march=i386 (I have gcc version 4.7.2). >>> Default build on windows is broken without this patch, it should be >>> applied to 1.5 probably. >>> >>> Tested-by: Igor Mitsyanko <i.mitsyanko@gmail.com> >>> >> With latest QEMU, -march=i486 is used and there should be no problem. >> If there still is a problem, we have to look for the reason. >> >> Could you please post the output from configure? >> >> Regards, >> Stefan >> > > Right, looks like my configuration has __sync_fetch_and_and but > doesn't have __sync_val_compare_and_swap. That's why configure check > passes but build fails: > > LINK arm-softmmu/qemu-system-armw.exe > ../migration.o: In function `migrate_finish_set_state': > g:\qemu_develop_ws\qemu_upstream/migration.c:293: undefined reference > to `__sync_val_compare_and_swap_4' > g:\qemu_develop_ws\qemu_upstream/migration.c:293: undefined reference > to `__sync_val_compare_and_swap_4' > g:\qemu_develop_ws\qemu_upstream/migration.c:293: undefined reference > to `__sync_val_compare_and_swap_4' > collect2.exe: error: ld returned 1 exit status > make[1]: *** [qemu-system-armw.exe] Error 1 > make: *** [subdir-arm-softmmu] Error 2 Hi, I can reproduce that problem with a native MinGW. http://patchwork.ozlabs.org/patch/243150/ should fix it. Thank you for your report. Regards, Stefan Weil
diff --git a/configure b/configure index f2af714..70c2219 100755 --- a/configure +++ b/configure @@ -562,6 +562,11 @@ if test "$mingw32" = "yes" ; then QEMU_CFLAGS="-DWIN32_LEAN_AND_MEAN -DWINVER=0x501 $QEMU_CFLAGS" # enable C99/POSIX format strings (needs mingw32-runtime 3.15 or later) QEMU_CFLAGS="-D__USE_MINGW_ANSI_STDIO=1 $QEMU_CFLAGS" + if test "$cpu" = "i386"; then + # We need something better than i386 for __sync_val_compare_and_swap + # and can expect that QEMU will only run on i686 or later. + QEMU_CFLAGS="-march=i686 $QEMU_CFLAGS" + fi LIBS="-lwinmm -lws2_32 -liphlpapi $LIBS" cat > $TMPC << EOF int main(void) { return 0; }
The cross i586-mingw32msvc-gcc 4.4.4 from Debian Squeeze does not support __sync_val_compare_and_swap by default. Using -march=i686 fixes that and should also result in better code. Signed-off-by: Stefan Weil <sw@weilnetz.de> --- Maybe this modification is also needed for native gcc-4.4 and older on Linux i386. If yes, we can move the new script code out of the MinGW conditional code. Newer versions of gcc obviously use -march=i686 by default and don't need the patch, but it also won't do any harm for those versions. Stefan configure | 5 +++++ 1 file changed, 5 insertions(+)