hangover icon indicating copy to clipboard operation
hangover copied to clipboard

wine/dlls/ntdll/virtual.c:256: alloc_pages_vprot: Assertion `end <= pages_vprot_size << pages_vprot_shift' failed.

Open GrandBasis opened this issue 5 years ago • 5 comments

I compiled it properly on the x86_64 machine, but the compilation on aarch64 is all normal. I got these errors when I was running.

chj@ROCm:~/hangover$ ./build/wine-host/wine64 build/qemu/x86_64-windows-user/qemu-x86_64.exe.so build/wine-guest/programs/notepad/notepad.exe 
../../../../wine/dlls/ntdll/virtual.c:256: alloc_pages_vprot: Assertion `end <= pages_vprot_size << pages_vprot_shift' failed.
0009:err:process:start_wineboot failed to start wineboot, err 1359
.exe.so: ../../../../wine/dlls/ntdll/virtual.c:256: alloc_pages_vprot: Assertion `end <= pages_vprot_size << pages_vprot_shift' failed.
Aborted (core dumped)

GrandBasis avatar Apr 15 '19 09:04 GrandBasis

That's https://bugs.winehq.org/show_bug.cgi?id=44432

AndreRH avatar Apr 16 '19 10:04 AndreRH

I followed the link, running hangover/scripts/hangover-test.sh is ok, I got these errors when I specified the running program.

chj@ROCm:~/hangover$ ./build/wine-host/wine64 build/qemu/x86_64-windows-user/qemu-x86_64.exe.so build/wine-guest/programs/notepad/notepad.exe 0009:fixme:qemu_module:import_dll No implementation for user32.dll.SetProcessDpiAwarenessInternal imported from L"C:\\windows\\system32\\shcore.dll", setting to 0xffff89557e40 0009:fixme:qemu_module:import_dll No implementation for ntdll.dll._setjmp imported from L"C:\\windows\\system32\\windowscodecs.dll", setting to 0xffff89557e40 0009:fixme:qemu_module:import_dll No implementation for ntdll.dll.longjmp imported from L"C:\\windows\\system32\\windowscodecs.dll", setting to 0xffff89557e40 .exe.so: /home/chj/hangover/qemu/windows-user/main.c:647: qemu_execute: Assertion h2g_valid(ret_code)' failed. Exception triggered in host code at 0xffff8bd374d8, guest PC fff0 wine: Assertion failed at address 0xffff8bd374d8 (thread 0009), starting debugger... 0x0000ffff8bd374d8 _IO_proc_close+0xffffffffffffffff in libc.so.6: be_arm64_disasm_one_insn: not done

Modules: Module Address Debug info Name (211 modules) ELF 7b400000- 7b7fa000 Dwarf kernel32 -PE 7b420000- 7b7fa000 \ kernel32 ELF 7bc00000- 7bcfd000 Dwarf ntdll -PE 7bc20000- 7bcfd000 \ ntdll ELF 7c000000- 7c004000 Dwarf ELF ffff818ff000- ffff819b6000 Deferred msvcrt -PE ffff81920000- ffff819b6000 \ msvcrt ELF ffff819b6000- ffff81a31000 Deferred qemu_msvcrt -PE ffff819e0000- ffff81a31000 \ qemu_msvcrt ELF ffff81a31000- ffff81af3000 Deferred msvcr80 -PE ffff81a50000- ffff81af3000 \ msvcr80 ELF ffff81af3000- ffff81b6e000 Deferred qemu_msvcr80 -PE ffff81b20000- ffff81b6e000 \ qemu_msvcr80 ELF ffff81b6e000- ffff81c46000 Deferred msvcr100 -PE ffff81b90000- ffff81c46000 \ msvcr100 ELF ffff81c46000- ffff81cc1000 Deferred qemu_msvcr100 -PE ffff81c70000- ffff81cc1000 \ qemu_msvcr100 ELF ffff81cc1000- ffff81ce9000 Deferred xinput1_3 -PE ffff81cd0000- ffff81ce9000 \ xinput1_3 ELF ffff81ce9000- ffff81d0d000 Deferred qemu_xinput1_3 -PE ffff81cf0000- ffff81d0d000 \ qemu_xinput1_3 ELF ffff81d0d000- ffff81d38000 Deferred wsock32 -PE ffff81d10000- ffff81d38000 \ wsock32 ELF ffff81d38000- ffff81d5d000 Deferred qemu_wsock32 -PE ffff81d40000- ffff81d5d000 \ qemu_wsock32 ELF ffff81d5d000- ffff81d8b000 Deferred qemu_ws2_32 -PE ffff81d70000- ffff81d8b000 \ qemu_ws2_32 ELF ffff81d8b000- ffff81dac000 Deferred libgpg-error.so.0 ELF ffff81dac000- ffff81e45000 Deferred libgcrypt.so.20 ELF ffff81e45000- ffff81e72000 Deferred liblzma.so.5 ELF ffff81e72000- ffff81e89000 Deferred librt.so.1 ELF ffff81e89000- ffff81eb6000 Deferred libselinux.so.1 ELF ffff81eb6000- ffff81f38000 Deferred libsystemd.so.0 ELF ffff81f38000- ffff81f5d000 Deferred libresolv.so.2 ELF ffff81f5d000- ffff81f71000 Deferred libkeyutils.so.1 ELF ffff81f71000- ffff81fc2000 Deferred libdbus-1.so.3 ELF ffff81fc2000- ffff81fdc000 Deferred libkrb5support.so.0 ELF ffff81fdc000- ffff82017000 Deferred libk5crypto.so.3 ELF ffff82017000- ffff820e0000 Deferred libkrb5.so.3 ELF ffff820e0000- ffff820ff000 Deferred libavahi-client.so.3 ELF ffff820ff000- ffff8211a000 Deferred libavahi-common.so.3 ELF ffff8211a000- ffff82168000 Deferred libgssapi_krb5.so.2 ELF ffff82168000- ffff821ec000 Deferred libcups.so.2 ELF ffff82206000- ffff82253000 Deferred winspool -PE ffff82210000- ffff82253000 \ winspool ELF ffff82253000- ffff8227f000 Deferred qemu_winspool -PE ffff82260000- ffff8227f000 \ qemu_winspool ELF ffff8227f000- ffff822b8000 Deferred msacm32 -PE ffff82290000- ffff822b8000 \ msacm32 ELF ffff822b8000- ffff8237e000 Deferred winmm -PE ffff822c0000- ffff8237e000 \ winmm ELF ffff8237e000- ffff823ae000 Deferred qemu_winmm -PE ffff82390000- ffff823ae000 \ qemu_winmm ELF ffff823ae000- ffff823e1000 Deferred shcore -PE ffff823c0000- ffff823e1000 \ shcore ELF ffff823e1000- ffff8245e000 Deferred shlwapi -PE ffff823f0000- ffff8245e000 \ shlwapi ELF ffff8245e000- ffff82495000 Deferred propsys -PE ffff82470000- ffff82495000 \ propsys ELF ffff82495000- ffff82553000 Deferred windowscodecs -PE ffff824b0000- ffff82553000 \ windowscodecs ELF ffff82553000- ffff82593000 Deferred qemu_windowscodecs -PE ffff82560000- ffff82593000 \ qemu_windowscodecs ELF ffff82593000- ffff825b9000 Deferred qemu_usp10 -PE ffff825a0000- ffff825b9000 \ qemu_usp10 ELF ffff825b9000- ffff82611000 Deferred qemu_user32 -PE ffff825d0000- ffff82611000 \ qemu_user32 ELF ffff82611000- ffff82636000 Deferred kerberos -PE ffff82620000- ffff82636000 \ kerberos ELF ffff82636000- ffff8267b000 Deferred ws2_32 -PE ffff82640000- ffff8267b000 \ ws2_32 ELF ffff8267b000- ffff826bb000 Deferred netapi32 -PE ffff82680000- ffff826bb000 \ netapi32 ELF ffff826bb000- ffff826fe000 Deferred secur32 -PE ffff826c0000- ffff826fe000 \ secur32 ELF ffff826fe000- ffff82724000 Deferred qemu_secur32 -PE ffff82700000- ffff82724000 \ qemu_secur32 ELF ffff82724000- ffff82748000 Deferred qemu_riched32 -PE ffff82730000- ffff82748000 \ qemu_riched32 ELF ffff8278e000- ffff827e4000 Deferred usp10 -PE ffff827a0000- ffff827e4000 \ usp10 ELF ffff827e4000- ffff82873000 Deferred riched20 -PE ffff827f0000- ffff82873000 \ riched20 ELF ffff82873000- ffff8289e000 Deferred qemu_riched20 -PE ffff82880000- ffff8289e000 \ qemu_riched20 ELF ffff8289e000- ffff828c6000 Deferred qemu_opengl32 -PE ffff828b0000- ffff828c6000 \ qemu_opengl32 ELF ffff828c6000- ffff82917000 Deferred qemu_ntdll -PE ffff828e0000- ffff82917000 \ qemu_ntdll ELF ffff82917000- ffff82a4b000 Deferred oleaut32 -PE ffff82940000- ffff82a4b000 \ oleaut32 ELF ffff82a4b000- ffff82a7c000 Deferred mmdevapi -PE ffff82a50000- ffff82a7c000 \ mmdevapi ELF ffff82a7c000- ffff82aab000 Deferred qemu_mmdevapi -PE ffff82a80000- ffff82aab000 \ qemu_mmdevapi ELF ffff82aab000- ffff82b15000 Deferred qemu_kernel32 -PE ffff82ac0000- ffff82b15000 \ qemu_kernel32 ELF ffff82b15000- ffff82b4e000 Deferred iphlpapi -PE ffff82b20000- ffff82b4e000 \ iphlpapi ELF ffff82b4e000- ffff82b78000 Deferred qemu_iphlpapi -PE ffff82b60000- ffff82b78000 \ qemu_iphlpapi ELF ffff82b78000- ffff82ba0000 Deferred qemu_imm32 -PE ffff82b80000- ffff82ba0000 \ qemu_imm32 ELF ffff82ba0000- ffff82bdc000 Deferred qemu_gdi32 -PE ffff82bb0000- ffff82bdc000 \ qemu_gdi32 ELF ffff82bdc000- ffff82c17000 Deferred dxgi -PE ffff82be0000- ffff82c17000 \ dxgi ELF ffff82c17000- ffff82c45000 Deferred qemu_dxgi -PE ffff82c20000- ffff82c45000 \ qemu_dxgi ELF ffff82c45000- ffff82c9a000 Deferred dsound -PE ffff82c50000- ffff82c9a000 \ dsound ELF ffff82c9a000- ffff82cc6000 Deferred qemu_dsound -PE ffff82ca0000- ffff82cc6000 \ qemu_dsound ELF ffff82cc6000- ffff82cf2000 Deferred qemu_dinput -PE ffff82cd0000- ffff82cf2000 \ qemu_dinput ELF ffff82cf2000- ffff82d6b000 Deferred ddraw -PE ffff82d00000- ffff82d6b000 \ ddraw ELF ffff82d6b000- ffff82db6000 Deferred qemu_ddraw -PE ffff82d80000- ffff82db6000 \ qemu_ddraw ELF ffff82db6000- ffff82dcb000 Deferred libxfixes.so.3 ELF ffff82dcb000- ffff82de4000 Deferred libxcursor.so.1 ELF ffff82de4000- ffff82e02000 Deferred libxi.so.6 ELF ffff82e02000- ffff82e15000 Deferred libxcomposite.so.1 ELF ffff82e15000- ffff82e2e000 Deferred libxrandr.so.2 ELF ffff82e2e000- ffff82e47000 Deferred libxrender.so.1 ELF ffff82e47000- ffff82e5c000 Deferred libxxf86vm.so.1 ELF ffff82e5c000- ffff82e6f000 Deferred libxinerama.so.1 ELF ffff82e6f000- ffff82e84000 Deferred libxdmcp.so.6 ELF ffff82e84000- ffff82e97000 Deferred libxau.so.6 ELF ffff82e97000- ffff82ec2000 Deferred libxcb.so.1 ELF ffff82ec2000- ffff82fea000 Deferred libx11.so.6 ELF ffff82fea000- ffff8300a000 Deferred libxext.so.6 ELF ffff8300a000- ffff830a8000 Deferred winex11 -PE ffff83020000- ffff830a8000 \ winex11 ELF ffff830a8000- ffff831cf000 Deferred opengl32 -PE ffff830f0000- ffff831cf000 \ opengl32 ELF ffff831cf000- ffff83320000 Deferred wined3d -PE ffff831f0000- ffff83320000 \ wined3d ELF ffff83320000- ffff8336b000 Deferred d3d9 -PE ffff83330000- ffff8336b000 \ d3d9 ELF ffff8336b000- ffff833ad000 Deferred qemu_d3d9 -PE ffff83380000- ffff833ad000 \ qemu_d3d9 ELF ffff833ad000- ffff833f5000 Deferred qemu_d3d11 -PE ffff833c0000- ffff833f5000 \ qemu_d3d11 ELF ffff833f5000- ffff834cf000 Deferred crypt32 -PE ffff83400000- ffff834cf000 \ crypt32 ELF ffff835cf000- ffff83602000 Deferred qemu_crypt32 -PE ffff835e0000- ffff83602000 \ qemu_crypt32 ELF ffff83602000- ffff83630000 Deferred cabinet -PE ffff83610000- ffff83630000 \ cabinet ELF ffff83630000- ffff83656000 Deferred qemu_cabinet -PE ffff83640000- ffff83656000 \ qemu_cabinet ELF ffff83656000- ffff8366e000 Deferred libffi.so.6 ELF ffff8366e000- ffff836ec000 Deferred libgmp.so.10 ELF ffff836ec000- ffff8372c000 Deferred libhogweed.so.4 ELF ffff8372c000- ffff8376c000 Deferred libnettle.so.6 ELF ffff8376c000- ffff8378d000 Deferred libtasn1.so.6 ELF ffff8378d000- ffff837cf000 Deferred libidn.so.11 ELF ffff837cf000- ffff8383a000 Deferred libp11-kit.so.0 ELF ffff8383a000- ffff8395f000 Deferred libgnutls.so.30 ELF ffff83963000- ffff83977000 Deferred libcom_err.so.2 ELF ffff83979000- ffff839a8000 Deferred bcrypt -PE ffff83980000- ffff839a8000 \ bcrypt ELF ffff839a8000- ffff839ce000 Deferred qemu_bcrypt -PE ffff839b0000- ffff839ce000 \ qemu_bcrypt ELF ffff839ce000- ffff83a48000 Deferred setupapi -PE ffff839e0000- ffff83a48000 \ setupapi ELF ffff83a48000- ffff83ad9000 Deferred rpcrt4 -PE ffff83a60000- ffff83ad9000 \ rpcrt4 ELF ffff83ad9000- ffff83c1b000 Deferred ole32 -PE ffff83b00000- ffff83c1b000 \ ole32 ELF ffff83c1b000- ffff83c4b000 Deferred advpack -PE ffff83c20000- ffff83c4b000 \ advpack ELF ffff83c4b000- ffff83c72000 Deferred qemu_advpack -PE ffff83c50000- ffff83c72000 \ qemu_advpack ELF ffff83c72000- ffff83cb7000 Deferred qemu_advapi32 -PE ffff83c80000- ffff83cb7000 \ qemu_advapi32 ELF ffff83cb7000- ffff83ce9000 Deferred imm32 -PE ffff83cc0000- ffff83ce9000 \ imm32 ELF ffff83e30000- ffff83e64000 Deferred libexpat.so.1 ELF ffff83e64000- ffff83eb1000 Deferred libfontconfig.so.1 ELF ffff83eb1000- ffff83ee0000 Deferred libpng12.so.0 ELF ffff83ee0000- ffff83f7d000 Deferred libfreetype.so.6 ELF ffff83f7d000- ffff84000000 Deferred advapi32 -PE ffff83f90000- ffff84000000 \ advapi32 ELF ffff8802a000- ffff88051000 Deferred libz.so.1 ELF ffff88051000- ffff8807a000 Deferred version -PE ffff88060000- ffff8807a000 \ version ELF ffff8807a000- ffff881db000 Deferred gdi32 -PE ffff88090000- ffff881db000 \ gdi32 ELF ffff881db000- ffff88410000 Deferred user32 -PE ffff88200000- ffff88410000 \ user32 ELF ffff88710000- ffff88746000 Deferred libtinfo.so.5 ELF ffff88746000- ffff88773000 Deferred libncurses.so.5 ELF ffff89074000- ffff890e5000 Deferred libpcre.so.3 ELF ffff890e5000- ffff89106000 Deferred libgcc_s.so.1 ELF ffff89295000- ffff8939c000 Deferred libglib-2.0.so.0 ELF ffff8939c000- ffff893ae000 Deferred libgthread-2.0.so.0 ELF ffff893ae000- ffff8b6de000 Dwarf qemu-x86_64 -PE ffff89430000- ffff89498000 \ notepad ELF ffff8b9bb000- ffff8b9dc000 Deferred libnss_files.so.2 ELF ffff8b9dc000- ffff8ba01000 Deferred libnsl.so.1 ELF ffff8ba01000- ffff8ba1c000 Deferred libnss_nis.so.2 ELF ffff8ba1c000- ffff8ba34000 Deferred libnss_compat.so.2 ELF ffff8bc34000- ffff8bcee000 Deferred libm.so.6 ELF ffff8bcf0000- ffff8bd05000 Deferred libdl.so.2 ELF ffff8bd05000- ffff8be5e000 Dwarf libc.so.6 ELF ffff8be5e000- ffff8be8a000 Deferred libpthread.so.0 ELF ffff8bea4000- ffff8c058000 Dwarf libwine.so.1 ELF ffff8c05a000- ffff8c089000 Deferred ld-linux-aarch64.so.1 ELF ffff8c08a000- ffff8c08b000 Deferred [vdso].so Threads: process tid prio (all id:s are in hex) 00000008 (D) Z:\home\chj\hangover\build\wine-guest\programs\notepad\notepad.exe 00000009 0 <== 0000000e services.exe 00000020 0 0000001b 0 00000013 0 00000010 0 0000000f 0 00000011 winedevice.exe 00000018 0 00000017 0 00000016 0 00000012 0 00000019 plugplay.exe 0000001d 0 0000001c 0 0000001a 0 0000001e winedevice.exe 00000022 0 00000021 0 0000001f 0 00000028 explorer.exe 0000002c 0 0000002b 0 0000002a 0 00000029 0 System information: Wine build: hangover-0.4.0 Platform: arm64 Version: Windows 7 Host system: Linux Host version: 4.10.0-28-generic`

My version of the libc6 library ii libc6:arm64 2.27-3ubuntu arm64 GNU C Library: Shared libraries

GrandBasis avatar Apr 17 '19 02:04 GrandBasis

A quick note re hangover-test.sh: It isn't a self-test script, but a helper script to run the Wine tests inside hangover. Running it on its own will not do much. Have a look inside it to see what is does.

stefand avatar Apr 19 '19 17:04 stefand

This is the problem I encountered when running the Huawei server TaiShan2280. I found the reason for triggering the assertion. The value of ret_code on Huawei TaiShan2280 is within 48 bits (281474976710656-1), which exceeds the limit of 47 (140737488355328-1) of GUEST_ADDR_MAX. hangover/qemu/target/i386/cpu.h can be run normally after line 1703 being modified to 48 bits.

#define TARGET_VIRT_ADDR_SPACE_BITS 47 change into #define TARGET_VIRT_ADDR_SPACE_BITS 48

I compiled and run on two machines, one is firefly3399 (cpu: rk3399, dual core cortex a72, quad core cortex a53), another one is Huawei server TaiShan2280 (cpu: hi1616, 32 core cortex a72), on firefly3399 Running normally, there was a problem running in TaiShan2280. I found out that the value of the variable ret_core on TaiShan2280 exceeded the maximum virtual address of the variable MAX by 47 bits on the TaiShan2280, causing the assertion. I changed the value of MAX to 48. I am not very familiar with this aspect. I would like to know what causes the difference in the number of virtual memory addresses on different machines,What bad effect will it cause after changing to 48 bits? Because the WINE and QEMU parts of HANGOVER need to be modified at the same time, by the way, WINE's bug is in question. Version 3.0 has been proposed, why haven't seen the fix on the latest version of WINE or hangover? The following are the running logs of firefly3399 and TaiShan2280 after printing the relevant variable values ​​(I have changed MAX to 48 bits on TaiShan2280) log-rk3399.txt log-huawei.txt

GrandBasis avatar May 20 '19 07:05 GrandBasis

I vaguely remembered I replied to this question a long time ago, but apparently I did not...

The short answer is that setting TARGET_VIRT_ADDR_SPACE_BITS to 64. Qemu's linux-user uses it to make sure it does not pass a pointer to the guest code that is higher than it expects. It reflects the usual address space split of the guest system. E.g. on 32 bit Windows, the address space is split into 2 GB Userspace and 2 GB kernel space. No pointer returned from a Win32 function will have the highest bit set (TARGET_VIRT_ADDR_SPACE_BITS=31 in this case), so some applications abuse the highest bit for their internal purposes. If hangover gives the application a pointer above 0x7fffffff this might break. See also the large address aware flag for a Windows-specific related issue.

Other parts in Wine and hangover take care of this, so we don't need qemu's infrastructure and can just tell it that the full 64 bit address space is fine.

aarch64 linux doesn't have a universally agreed address space size. It depends on compile time kernel parameters (page size, 3 level paging). x86_64 Windows has 47 bits.

stefand avatar May 25 '20 10:05 stefand

This should be fixed by https://gitlab.winehq.org/wine/wine/-/commit/0900d919e2fd5ce12e02375cfcbfa5ab7c283515

AndreRH avatar Mar 01 '24 20:03 AndreRH