qemu-ppc
[Top][All Lists]
Advanced

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

Re: [Qemu-ppc] [Qemu-devel] Bugs when cross-compiling qemu for Windows w


From: Philippe Mathieu-Daudé
Subject: Re: [Qemu-ppc] [Qemu-devel] Bugs when cross-compiling qemu for Windows with mingw 8.1, executable doesn't run
Date: Sat, 18 Aug 2018 16:45:20 -0300
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.9.1

Hi,

On 08/18/2018 04:09 PM, Stefan Weil wrote:
> Am 17.08.2018 um 09:32 schrieb David Hildenbrand:
>> On 18.07.2018 08:33, Howard Spoelstra wrote:
>>> Hi all,
>>>
>>> I have two issues when cross compiling current master for Windows with
>>> mingw 8.1. Host is Fedora29. See further below for gcc and mingw
>>> versions.
>>>
>>> Reproduce with:
>>> ./configure --cross-prefix=x86_64-w64-mingw32-
>>> --target-list="ppc-softmmu" --enable-gtk --with-gtkabi=3.0
>>> --enable-sdl --with-sdlabi=2.0
>>>
>>> Issue 1: Two bugs show up during compilation related to strncpy.
>>> Replacing the offenders with memcpy seems to fix this.

I proposed patches replacing strncpy() by g_strlcpy() ...

>>>
>>> First time:
>>> block/sheepdog.c: In function 'find_vdi_name':
>>> block/sheepdog.c:1239:5: error: 'strncpy' specified bound 256 equals
>>> destination size [-Werror=stringop-truncation]
>>>      strncpy(buf + SD_MAX_VDI_LEN, tag, SD_MAX_VDI_TAG_LEN);
>>>      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

... this one here ...:
http://lists.nongnu.org/archive/html/qemu-devel/2018-08/msg03705.html

>>> Second time:
>>> migration/global_state.c: In function 'global_state_store_running':
>>> migration/global_state.c:45:5: error: 'strncpy' specified bound 100
>>> equals destination size [-Werror=stringop-truncation]
>>>      strncpy((char *)global_state.runstate,
>>>      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>>>             state, sizeof(global_state.runstate));
>>>             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

... and this other one here:
http://lists.nongnu.org/archive/html/qemu-devel/2018-08/msg03706.html

>>
>> These two reports should be independent of general functionality
>> (sheepdog, migration). So what you see is most likely unrelated to this.
>>
>>> Issue 2: once strncpy has been replaced with memcpy in these two
>>> instances, I can successfully compile, but the executable doesn't run
>>> in Windows.
>>> I tried to debug, and this is what gdb told me:
>>>
>>> (gdb) run
>>> Starting program: c:\qemu-fedora29beta\qemu-system-ppc-debug.exe -L
>>> c:\qemu-fedora29beta\pc-bios -boot c -m 256 -M "mac99,via=pmu"
>>> -prom-env "boot-args=-v" -prom-env "auto-boot?=true" -prom-env
>>> "vga-ndrv?=true" -hda c:\Mac-disks\9.2.qcow2 -netdev
>>> "user,id=network01" -device "sungem,netdev=network01" -sdl -d int
>>> [New Thread 948.0x6d8]
>>> [New Thread 948.0x2778]
>>> [New Thread 948.0x286c]
>>> [New Thread 948.0x3d0]
>>>
>>> Program received signal SIGSEGV, Segmentation fault.
>>> getpagesize () at util/oslib-win32.c:535
>>> 535     util/oslib-win32.c: No such file or directory.
>>
>> This warning is just from GDB, not able to locate you sources I guess.
>>
>>> (gdb) bt full
>>> #0  getpagesize () at util/oslib-win32.c:535
>>
>> Wonder why we should get a SEGFAULT in that simple function. As
>> discussed offline, the functionality in general seems to work (if this
>> function is compiled and run independently in your environment).
>>
>> But maybe this backtrace is just misleading.
>>
>>>         system_info = {{dwOemId = 56491488, {wProcessorArchitecture =
>>> 64992, wReserved = 861}}, dwPageSize = 0,
>>>           lpMinimumApplicationAddress = 0x99cca4
>>> <register_module_init+60>, lpMaximumApplicationAddress = 0x3,
>>>           dwActiveProcessorMask = 11102192, dwNumberOfProcessors =
>>> 56584576, dwProcessorType = 0,
>>>           dwAllocationGranularity = 200, wProcessorLevel = 0,
>>> wProcessorRevision = 0}
>>
>> dwPageSize = 0, I assume this is some random data on the stack and
>> GetSystemInfo never got executed. I wonder where this segfault comes from.
>>
>>> #1  0x00000000009b7fcd in init_real_host_page_size () at util/pagesize.c:16
>>> No locals.
>>> #2  0x00000000009bc5f2 in __do_global_ctors ()
>>> No symbol table info available.
>>> #3  0x00000000004013ca in __tmainCRTStartup () at ../crt/crtexe.c:324
>>>         lock_free = <optimized out>
>>>         fiberid = <optimized out>
>>>         nested = <optimized out>
>>>         lpszCommandLine = <optimized out>
>>>         StartupInfo = {cb = 104, lpReserved = 0x3778e00 "", lpDesktop
>>> = 0x377f440 "Winsta0\\Default",
>>>           lpTitle = 0x3786280
>>> "c:\\qemu-fedora29beta\\qemu-system-ppc-debug.exe", dwX = 0, dwY = 0,
>>> dwXSize = 0,
>>>           dwYSize = 0, dwXCountChars = 0, dwYCountChars = 0,
>>> dwFillAttribute = 0, dwFlags = 0, wShowWindow = 0,
>>>           cbReserved2 = 0, lpReserved2 = 0x0, hStdInput =
>>> 0xffffffffffffffff, hStdOutput = 0xffffffffffffffff,
>>>           hStdError = 0xffffffffffffffff}
>>>         inDoubleQuote = <optimized out>
>>> #4  0x00000000004014fb in WinMainCRTStartup () at ../crt/crtexe.c:184
>>>         ret = 255
>>> (gdb)
>>>
>>>
>>> Gcc and mingw versions used:
>>>
>>> address@hidden qemu-master]$ gcc -v
>>> Using built-in specs.
>>> COLLECT_GCC=gcc
>>> COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/8/lto-wrapper
>>> OFFLOAD_TARGET_NAMES=nvptx-none
>>> OFFLOAD_TARGET_DEFAULT=1
>>> Target: x86_64-redhat-linux
>>> Configured with: ../configure --enable-bootstrap
>>> --enable-languages=c,c++,fortran,objc,obj-c++,ada,go,lto --prefix=/usr
>>> --mandir=/usr/share/man --infodir=/usr/share/info
>>> --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-shared
>>> --enable-threads=posix --enable-checking=release --enable-multilib
>>> --with-system-zlib --enable-__cxa_atexit
>>> --disable-libunwind-exceptions --enable-gnu-unique-object
>>> --enable-linker-build-id --with-gcc-major-version-only
>>> --with-linker-hash-style=gnu --enable-plugin --enable-initfini-array
>>> --with-isl --enable-libmpx --enable-offload-targets=nvptx-none
>>> --without-cuda-driver --enable-gnu-indirect-function --enable-cet
>>> --with-tune=generic --with-arch_32=i686 --build=x86_64-redhat-linux
>>> Thread model: posix
>>> gcc version 8.1.1 20180626 (Red Hat 8.1.1-4) (GCC)
>>>
>>> address@hidden qemu-master]$ x86_64-w64-mingw32-gcc -v
>>> Using built-in specs.
>>> COLLECT_GCC=x86_64-w64-mingw32-gcc
>>> COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-w64-mingw32/8.1.0/lto-wrapper
>>> Target: x86_64-w64-mingw32
>>> Configured with: ../configure --prefix=/usr --bindir=/usr/bin
>>> --includedir=/usr/include --mandir=/usr/share/man
>>> --infodir=/usr/share/info --datadir=/usr/share
>>> --build=x86_64-redhat-linux-gnu --host=x86_64-redhat-linux-gnu
>>> --with-gnu-as --with-gnu-ld --verbose --without-newlib
>>> --disable-multilib --disable-plugin --with-system-zlib --disable-nls
>>> --without-included-gettext --disable-win32-registry
>>> --enable-languages=c,c++,objc,obj-c++,fortran
>>> --with-bugurl=http://bugzilla.redhat.com/bugzilla --with-cloog
>>> --enable-threads=posix --enable-libgomp --target=x86_64-w64-mingw32
>>> --with-sysroot=/usr/x86_64-w64-mingw32/sys-root
>>> --with-gxx-include-dir=/usr/x86_64-w64-mingw32/sys-root/mingw/include/c++
>>> Thread model: posix
>>> gcc version 8.1.0 20180502 (Fedora MinGW 8.1.0-1.fc29) (GCC)
>>>
>>> Thanks for looking into this,
>>>
>>> Best,
>>> Howard
>>>
>>
>> No being a win32/mingw expert, Stefan any idea?
> 
> 
> I'd try a debug build (configure [...] --enable-debug).
> 
> My installers (https://qemu.weilnetz.de/w64/) were built with
> x86_64-w64-mingw32-gcc (GCC) 6.3.0 20170516 (from Debian Stretch).
> Howard, perhaps you can try whether they show the same runtime SIGSEGV.
> When I run your command line with a dummy disk image, OpenBIOS boots fine.
> 
> Kind regards,
> Stefan
> 



reply via email to

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