ptitSeb / box86

Box86 - Linux Userspace x86 Emulator with a twist, targeted at ARM Linux devices
https://box86.org
MIT License
3.17k stars 220 forks source link

Warcraft 1.24E does not work. #237

Closed ghost closed 1 year ago

ghost commented 3 years ago

What should I do?

ptitSeb commented 3 years ago

Describe what is happening. Copy/paste some log. You can also visit the discord server mentioned in the README.

ghost commented 3 years ago

Box86 with Dynarec v0.1.3 7476425 built on Oct 24 2020 08:06:27 Box86 with Dynarec v0.1.3 7476425 built on Oct 24 2020 08:06:27 Box86 with Dynarec v0.1.3 7476425 built on Oct 24 2020 08:06:27 0009:err:winediag:SECUR32_initNTLMSP ntlm_auth was not found or is outdated. Make sure that ntlm_auth >= 3.0.25 is in your path. Usually, you can find it in the winbind package of your distribution. 0009:fixme:win:EnumDisplayDevicesW ((null),0,0x4245f278,0x00000000), stub! 0009:fixme:d3d:wined3d_guess_card No card selector available for card vendor 0000 (using GL_RENDERER "Gallium 0.4 on llvmpipe (LLVM 3.4, 128 bits)"). 0009:err:winediag:wined3d_adapter_gl_init You are using the backbuffer for offscreen rendering. This is unsupported, and will be removed in a future version. 0009:fixme:d3d:wined3d_adapter_find_polyoffset_scale No FBOs, assuming polyoffset scale of 2^23. 0009:fixme:d3d:wined3d_adapter_find_polyoffset_scale No FBOs, assuming polyoffset scale of 2^23. 0009:fixme:d3d:wined3d_adapter_find_polyoffset_scale No FBOs, assuming polyoffset scale of 2^23. 0009:fixme:d3d:wined3d_adapter_find_polyoffset_scale No FBOs, assuming polyoffset scale of 2^23. 0009:fixme:d3d:wined3d_adapter_find_polyoffset_scale No FBOs, assuming polyoffset scale of 2^23. 0009:fixme:d3d:wined3d_adapter_find_polyoffset_scale No FBOs, assuming polyoffset scale of 2^23. 0009:fixme:d3d:wined3d_adapter_find_polyoffset_scale No FBOs, assuming polyoffset scale of 2^23. 0009:fixme:d3d:wined3d_adapter_find_polyoffset_scale No FBOs, assuming polyoffset scale of 2^23. 0009:fixme:d3d:wined3d_adapter_find_polyoffset_scale No FBOs, assuming polyoffset scale of 2^23. 0009:fixme:d3d:wined3d_adapter_find_polyoffset_scale No FBOs, assuming polyoffset scale of 2^23. 0009:fixme:d3d:wined3d_adapter_find_polyoffset_scale No FBOs, assuming polyoffset scale of 2^23. 0009:fixme:win:EnumDisplayDevicesW ((null),0,0x4245f604,0x00000000), stub! 0009:fixme:win:EnumDisplayDevicesW ((null),0,0x4245f634,0x00000000), stub! 0009:fixme:win:EnumDisplayDevicesW ((null),0,0x4245dfd4,0x00000000), stub! 1134|SIGSEGV @0x62846850 (???) (x86pc=0x35800000/???:"???", esp=0x4245fb08), for accessing 0x35800000 (code=1), db=(nil)((nil):(nil)/(nil):(nil)/???) 1134|SIGSEGV @0x62855204 (???) (x86pc=0x35800000/???:"???", esp=0x4245fb08), for accessing 0x35800000 (code=1), db=(nil)((nil):(nil)/(nil):(nil)/???) 1134|Double SIGSEGV!

ghost commented 3 years ago

Mesa version is 20.3.0

ptitSeb commented 3 years ago

can you do addr2line -e /usr/local/bin/box86 -a 0x62846850?

ptitSeb commented 3 years ago

Also, you can sudo apt install winbind to avoid that 1st error message.

ghost commented 3 years ago

can you do addr2line -e /usr/local/bin/box86 -a 0x62846850?

0x62846850 :?

ghost commented 3 years ago

pi@raspberrypi:~ $ addr2line -e /usr/local/bin/box86 -a 0x62846850 0x62846850 :?

ptitSeb commented 3 years ago

did you built box86 with debug symbol?

ghost commented 3 years ago

No, i will build it.

ghost commented 3 years ago

0x62846850 /home/pi/box86/src/elfs/elfload_dump.c:100

ptitSeb commented 3 years ago

Well, maybe the address has changed now, the segfault is still on that one?

ghost commented 3 years ago

There are so many SIGSEGV. 3384|SIGSEGV @0x62844834 (???) (x86pc=0x35800000/???:"???", esp=0x424cfb08), for accessing 0x35800000 (code=1), db=(nil)((nil):(nil)/(nil):(nil)/???) 3384|SIGSEGV @0x62852428 (???) (x86pc=0x35800000/???:"???", esp=0x424cfb08), for accessing 0x35800000 (code=1), db=(nil)((nil):(nil)/(nil):(nil)/???) 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 002e:err:ntdll:RtlpWaitForCriticalSection section 0x415fc9c0 "loader.c: loader_section" wait timed out in thread 002e, blocked by 0009, retrying (60 sec) 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! Warning, accessing segment NULL 3384|SIGSEGV @0x628748f0 (???) (x86pc=0x35800000/???:"???", esp=0x424cfb08), for accessing 0x14 (code=1), db=(nil)((nil):(nil)/(nil):(nil)/???) Warning, accessing segment NULL 3384|Double SIGSEGV! Warning, accessing segment NULL 3384|Double SIGSEGV! 3384|SIGSEGV @0x628556cc (???) (x86pc=0x35800000/???:"???", esp=0x424cfb08), for accessing 0xe47 (code=1), db=(nil)((nil):(nil)/(nil):(nil)/???) 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! 3384|Double SIGSEGV! Warning, accessing segment unknown 0x570d or unset 3384|SIGSEGV @0x628748f0 (???) (x86pc=0x35800000/???:"???", esp=0x424cfb08), for accessing 0x14 (code=1), db=(nil)((nil):(nil)/(nil):(nil)/???) Warning, accessing segment unknown 0x570d or unset 3384|Double SIGSEGV! 3384|SIGSEGV @0x62856a9c (???) (x86pc=0x35800000/???:"???", esp=0x424cfb08), for accessing 0x7ffe3ff8 (code=2), db=(nil)((nil):(nil)/(nil):(nil)/???) 3384|SIGSEGV @0x6288e638 (???) (x86pc=0x35800000/???:"???", esp=0x424cfb08), for accessing 0x7ffe3fec (code=2), db=(nil)((nil):(nil)/(nil):(nil)/???) 3384|SIGSEGV @0x6288e638 (???) (x86pc=0x35800000/???:"???", esp=0x424cfb08), for accessing 0x7ffe3fe0 (code=2), db=(nil)((nil):(nil)/(nil):(nil)/???) 3384|SIGSEGV @0x6288e638 (???) (x86pc=0x35800000/???:"???", esp=0x424cfb08), for accessing 0x7ffe3fd4 (code=2), db=(nil)((nil):(nil)/(nil):(nil)/???) 3384|SIGSEGV @0x6288e638 (???) (x86pc=0x35800000/???:"???", esp=0x424cfb08), for accessing 0x7ffe3fc8 (code=2), db=(nil)((nil):(nil)/(nil):(nil)/???) 3384|SIGSEGV @0x6288e638 (???) (x86pc=0x35800000/???:"???", esp=0x424cfb08), for accessing 0x7ffe3fbc (code=2), db=(nil)((nil):(nil)/(nil):(nil)/???) 3384|SIGSEGV @0x6288e638 (???) (x86pc=0x35800000/???:"???", esp=0x424cfb08), for accessing 0x7ffe3fb0 (code=2), db=(nil)((nil):(nil)/(nil):(nil)/???) 3384|SIGSEGV @0x6288e638 (???) (x86pc=0x35800000/???:"???", esp=0x424cfb08), for accessing 0x7ffe3fa4 (code=2), db=(nil)((nil):(nil)/(nil):(nil)/???) 3384|SIGSEGV @0x6288e638 (???) (x86pc=0x35800000/???:"???", esp=0x424cfb08), for accessing 0x7ffe3f98 (code=2), db=(nil)((nil):(nil)/(nil):(nil)/???) 3384|SIGSEGV @0x6288e638 (???) (x86pc=0x35800000/???:"???", esp=0x424cfb08), for accessing 0x7ffe3f8c (code=2), db=(nil)((nil):(nil)/(nil):(nil)/???) 3384|SIGSEGV @0x6288e638 (???) (x86pc=0x35800000/???:"???", esp=0x424cfb08), for accessing 0x7ffe3f80 (code=2), db=(nil)((nil):(nil)/(nil):(nil)/???) Segmentation fault

ptitSeb commented 3 years ago

only the 1st segfault is important. Use 0x62844834 now on addr2line

ghost commented 3 years ago

0x6288e638 /home/pi/box86/src/libtools/signals.c:277 (discriminator 3) pi@raspberrypi:~/Warcraft3_1.24E $

ghost commented 3 years ago

OK.

ghost commented 3 years ago

pi@raspberrypi:~/Warcraft3_1.24E $ addr2line -e /usr/local/bin/box86 -a 0x62844834 0x62844834 /home/pi/box86/src/elfs/elfloader.c:989

ghost commented 3 years ago

0x62844834 is the first segmentation fault.

ptitSeb commented 3 years ago

So it seems it tries to jump at address 0x35800000 but there is nothing there. Did it worked at some point? Does it work with Dynarec off?

ghost commented 3 years ago

dynarec is enabled. i will disable it.

ghost commented 3 years ago

0x6285457c /home/pi/box86/src/emu/x86run.c:1581 (discriminator 207)

ghost commented 3 years ago

dynarec is disabled now. 0x6285457c is first segfault.

ptitSeb commented 3 years ago

So it's not working either, with the same kind of issue: not a dynarec specific bug

ghost commented 3 years ago

Can you fix it?

ptitSeb commented 3 years ago

Not now. And I'm not sure I have a Warcraft copy. You didn't answered: did it work at some point?

ghost commented 3 years ago

it has not worked.

ptitSeb commented 3 years ago

Ok, so it's something not yet handled correctly. Will try to check later.

ptitSeb commented 3 years ago

I think it works fine now.

Can you confirm (or infirm) that and close the ticket if it's ok @pmtip .

bbbruni commented 3 years ago

@ptitSeb

Thank you for your brilliant work! I found a screenshot by you: https://pyra-handheld.com/boards/threads/box86-linux-userspace-x86-emulator.83577/post-1682916

You said you managed to run it on pandora console at around 1fps (which must operate on as little as 512 MB of ram). According to https://www.cnet.com/products/warcraft-iii-the-frozen-throne-pc/ warcraft iii must run with 128 MB of ram.

Did you use dynarec then? Did you use dynarec when posted https://github.com/ptitSeb/box86/issues/237#issuecomment-752990813 and what fps did you get?

I ask these questions in trying to understand what is the speed penalty with and without dynarec, given that pandora has enough ram to run the game.

Thank you.

ptitSeb commented 1 year ago

Warcraft 3 should works fine now with box86 (with dynarec). I have tried it on miltiple platform.

I close the ticket, but feel free to re-open it if needed.