http://bugs.winehq.org/show_bug.cgi?id=34332
Bug #: 34332 Summary: Splinter Cell : Blacklist crash at startup when Wine is set to Win7 Product: Wine Version: 1.7.0 Platform: x86-64 OS/Version: Linux Status: UNCONFIRMED Severity: normal Priority: P2 Component: -unknown AssignedTo: wine-bugs@winehq.org ReportedBy: berillions@gmail.com Classification: Unclassified
Created attachment 45698 --> http://bugs.winehq.org/attachment.cgi?id=45698 winedbg Blacklist_game.exe log
Hi,
The game crash when i want to launch it if Wine is set to Win7. There is no problem if Wine is set to WinXP.I launch it with the d3d9 game executable called Blacklist_game.exe. The d3d11 executable is called "Blacklist_DX11_game.exe"
I know that i can launch the game in XP mode as workaround but resolv this bug can be useful when d3d11 will be implemented into Wine.
In the output console, i have only these messages : berillions@debian64:~/.wine/drive_c/Program Files/Ubisoft/Tom Clancy's Splinter Cell® Blacklist™/src/SYSTEM$ primusrun /home/berillions/Desktop/Build/32/wine-1.7.0/wine Blacklist_game.exe fixme:heap:HeapSetInformation (nil) 1 (nil) 0 fixme:dbghelp_dwarf:dwarf2_parse_udt_type Unhandled Tag type 0x1 at ctx(0x32e14c,L"ntdll<elf>"), for debug_info(abbrev:0x3bf4388,symt:0x3f25530) fixme:dbghelp_dwarf:dwarf2_parse_udt_type Unhandled Tag type 0x1 at ctx(0x32e14c,L"ntdll<elf>"), for debug_info(abbrev:0x3bf4388,symt:0x3f25530) fixme:dbghelp_dwarf:dwarf2_parse_subprogram Unhandled Tag type 0xf at ctx(0x32e14c,L"ntdll<elf>"), for debug_info(abbrev:0x3bf4c68,symt:0x3f253dc) fixme:dbghelp_dwarf:dwarf2_parse_subprogram_block Unhandled Tag type 0x15 at ctx(0x32e14c,L"kernel32<elf>"), for debug_info(abbrev:0x43a4db0,symt:(nil)) fixme:dbghelp_dwarf:dwarf2_parse_subprogram_block Unhandled Tag type 0xf at ctx(0x32e14c,L"kernel32<elf>"), for debug_info(abbrev:0x43a4db0,symt:(nil)) fixme:process:GetLogicalProcessorInformationEx (65535,(nil),0x33df940): stub wine: Unhandled exception 0x40000015 in thread 47 at address 0xf73d0023:0x0249b3b8 (thread 0047), starting debugger... Process of pid=0016 has terminated No process loaded, cannot execute 'echo Modules:' Cannot get info on module while no process is loaded No process loaded, cannot execute 'echo Threads:' [...]
I attach the winedbg log too.
http://bugs.winehq.org/show_bug.cgi?id=34332
--- Comment #1 from Berillions berillions@gmail.com 2013-08-23 04:42:45 CDT --- Created attachment 45699 --> http://bugs.winehq.org/attachment.cgi?id=45699 WINEDEBUG=+tid,+seh,+relay log
WINEDEBUG=+tid,+seh,+relay log
http://bugs.winehq.org/show_bug.cgi?id=34332
Berillions berillions@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Attachment #45698|application/octet-stream |text/plain mime type| |
http://bugs.winehq.org/show_bug.cgi?id=34332
--- Comment #2 from Berillions berillions@gmail.com 2013-08-23 05:01:55 CDT --- The problem appears only when Wine is set to Win7. The game runs without problem if i set Wine to WinVista.
http://bugs.winehq.org/show_bug.cgi?id=34332
--- Comment #3 from Andrey Gusev andrey.goosev@gmail.com 2013-08-23 07:06:12 CDT --- (In reply to comment #2)
The problem appears only when Wine is set to Win7. The game runs without problem if i set Wine to WinVista.
Confirm on 1.7.0 Btw, set to Vista might be useful if you have a troubles with stuttering sound/voices.
http://bugs.winehq.org/show_bug.cgi?id=34332
--- Comment #4 from Berillions berillions@gmail.com 2013-08-23 13:05:38 CDT --- Hi guys,
I think that i found why the game crash when wine is set to Win7. I compared the +relay log from WinVista and Win7 and i found this :
In the Win7 log, the game seems to crash after the call of this function "GetLogicalProcessorInformationEx" : ------ Snip ------ 005b:Call KERNEL32.GetProcAddress(7b810000,02cf27e0 "GetLogicalProcessorInformationEx") ret=024c53ad 005b:Ret KERNEL32.GetProcAddress() retval=7b822a14 ret=024c53ad 005b:Call KERNEL32.GetLogicalProcessorInformationEx(0000ffff,00000000,033df940) ret=024c55cd 005b:fixme:process:GetLogicalProcessorInformationEx (65535,(nil),0x33df940): stub 005b:Ret KERNEL32.GetLogicalProcessorInformationEx() retval=00000000 ret=024c55cd 005b:Call KERNEL32.GetLastError() ret=024c55d5 005b:Ret KERNEL32.GetLastError() retval=00000078 ret=024c55d5 005b:Call KERNEL32.GetLastError() ret=024c55dc 005b:Ret KERNEL32.GetLastError() retval=00000078 ret=024c55dc 005b:Call ntdll.RtlAllocateHeap(03a54000,00000000,00000001) ret=0249222a 005b:Ret ntdll.RtlAllocateHeap() retval=03a54b90 ret=0249222a 005b:Call KERNEL32.RaiseException(e06d7363,00000001,00000003,0032faa4) ret=02497737 005b:trace:seh:raise_exception code=e06d7363 flags=1 addr=0x7b83a42e ip=7b83a42e tid=005b ------ Snip ------
After to check in the WinVista log, it's not this function which is called but "GetLogicalProcessorInformation" : ------ Snip ------ 0066:Call KERNEL32.GetProcAddress(7b810000,02c130f4 "GetLogicalProcessorInformation") ret=024c54a9 0066:Ret KERNEL32.GetProcAddress() retval=7b8229fc ret=024c54a9 0066:Call KERNEL32.GetLogicalProcessorInformation(00000000,033df940) ret=024c54e8 0066:Ret KERNEL32.GetLogicalProcessorInformation() retval=00000000 ret=024c54e8 0066:Call KERNEL32.GetLastError() ret=024c54f0 0066:Ret KERNEL32.GetLastError() retval=0000007a ret=024c54f0 0066:Call ntdll.RtlAllocateHeap(03a54000,00000000,00000138) ret=0249222a 0066:Ret ntdll.RtlAllocateHeap() retval=03a55628 ret=0249222a 0066:Call KERNEL32.GetLogicalProcessorInformation(03a55628,033df940) ret=024c5548 0066:Ret KERNEL32.GetLogicalProcessorInformation() retval=00000001 ret=024c5548 ------ Snip ------
I look on the wine source website and i found that the "GetLogicalProcessorInformationEx" function is not completly implemented (http://source.winehq.org/source//dlls/kernel32/process.c#L3754)
The function return always "False" and if i look in msdn (http://msdn.microsoft.com/en-us/library/windows/desktop/dd405488%28v=vs.85%2...), the function must be return "true" if it succeeds.
I think it's the cause, i'm not an expert for the +relay log
Thanks, Max
http://bugs.winehq.org/show_bug.cgi?id=34332
Austin English austinenglish@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Severity|normal |trivial
http://bugs.winehq.org/show_bug.cgi?id=34332
Yuri Shishenko yurishish@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |yurishish@gmail.com
--- Comment #5 from Yuri Shishenko yurishish@gmail.com 2013-08-28 11:07:53 CDT --- Workaround is to delete Blacklist_DX11_game.exe file, make copy of Blacklist_game.exe and rename it to Blacklist_DX11_game.exe.
http://bugs.winehq.org/show_bug.cgi?id=34332
--- Comment #6 from Berillions berillions@gmail.com 2013-09-05 07:48:04 CDT --- Still exist in Wine 1.7.1
http://bugs.winehq.org/show_bug.cgi?id=34332
--- Comment #7 from Berillions berillions@gmail.com 2013-11-13 12:48:10 CST --- (In reply to comment #6)
Still exist in Wine 1.7.1
Still exist in wine 1.7.6 + wine-git
http://bugs.winehq.org/show_bug.cgi?id=34332
Berillions berillions@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Component|-unknown |kernel32
--- Comment #8 from Berillions berillions@gmail.com --- Still exist in wine 1.7.14 + wine-git
http://bugs.winehq.org/show_bug.cgi?id=34332
Anastasius Focht focht@gmx.net changed:
What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW CC| |focht@gmx.net Summary|Splinter Cell : Blacklist |Splinter Cell: Blacklist |crash at startup when Wine |crashes on startup with |is set to Win7 |WinVer set to 'Windows 7' | |due to | |GetLogicalProcessorInformat | |ionEx stub Ever confirmed|0 |1
--- Comment #9 from Anastasius Focht focht@gmx.net --- Hello folks,
confirming and refining summary.
Regards
http://bugs.winehq.org/show_bug.cgi?id=34332
George Khan a3663644@drdrb.net changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |a3663644@drdrb.net
--- Comment #10 from George Khan a3663644@drdrb.net --- I think this function isnt anymore stub.
http://source.winehq.org/git/wine.git/blob/db42703d5ff9eb31130896c9d7d7713b8...
But it doesnt seem to be fully implemented either.
http://source.winehq.org/git/wine.git/blob/db42703d5ff9eb31130896c9d7d7713b8...
So does the crash still happen?
http://bugs.winehq.org/show_bug.cgi?id=34332
--- Comment #11 from Berillions berillions@gmail.com --- (In reply to George Khan from comment #10)
I think this function isnt anymore stub.
http://source.winehq.org/git/wine.git/blob/ db42703d5ff9eb31130896c9d7d7713b8fe09d3b:/dlls/kernel32/kernel32.spec#l566
But it doesnt seem to be fully implemented either.
http://source.winehq.org/git/wine.git/blob/ db42703d5ff9eb31130896c9d7d7713b8fe09d3b:/dlls/kernel32/process.c#l3815
So does the crash still happen?
The crash still happens when Wine is set to Win7 :
0009:Call KERNEL32.GetLogicalProcessorInformationEx(0000ffff,00000000,033d66c0) ret=024c993d 0009:fixme:process:GetLogicalProcessorInformationEx (65535,(nil),0x33d66c0): stub 0009:Ret KERNEL32.GetLogicalProcessorInformationEx() retval=00000000 ret=024c993d
http://bugs.winehq.org/show_bug.cgi?id=34332
--- Comment #12 from Berillions berillions@gmail.com --- Maybe it would be interesting to implement completly this function now, no ? Actually, there is only one game which need it to run in Win7 mode.
But when d3d11/d3dx11 will be implemented in Wine, it's possible that several games (AC3, FarCry3, AC4, Watch_Dogs etc...) which work only on WinVista/Win7 will need this function.
I say that to avoid that the bugzilla has several duplicate bug reports for the same thing in the future...
Thanks, Max
http://bugs.winehq.org/show_bug.cgi?id=34332
Sebastian Lackner sebastian@fds-team.de changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |sebastian@fds-team.de
http://bugs.winehq.org/show_bug.cgi?id=34332
--- Comment #13 from Sebastian Lackner sebastian@fds-team.de --- Created attachment 48835 --> http://bugs.winehq.org/attachment.cgi?id=48835 kernel32: Make GetLogicalProcessorInformationEx a stub which returns TRUE.
Could you please test if such a simple patch which basically just changes the return value is sufficient to make Splinter Cell happy?
I doubt that such a patch will go upstream though: MSDN says that the function should never return an empty list. The proper solution would look like:
* Clean up the current code to get processor information, to allow several output formats * Implement SystemLogicalProcessorAndGroupInformation in NtQuerySystemInformation * Let GetLogicalProcessorInformationEx redirect to NtQuerySystemInformation( ... )
http://bugs.winehq.org/show_bug.cgi?id=34332
--- Comment #14 from Berillions berillions@gmail.com --- (In reply to Sebastian Lackner from comment #13)
Created attachment 48835 [details] kernel32: Make GetLogicalProcessorInformationEx a stub which returns TRUE.
Could you please test if such a simple patch which basically just changes the return value is sufficient to make Splinter Cell happy?
I doubt that such a patch will go upstream though: MSDN says that the function should never return an empty list. The proper solution would look like:
- Clean up the current code to get processor information, to allow several
output formats
- Implement SystemLogicalProcessorAndGroupInformation in
NtQuerySystemInformation
- Let GetLogicalProcessorInformationEx redirect to NtQuerySystemInformation(
... )
Hi Sebastian,
I tried your patch and as you said, the game does not work even with it. I think that the game game still crash after this function not implemented :
------ Snip ------ 0009:Call KERNEL32.GetLogicalProcessorInformationEx(0000ffff,00000000,033e1900) ret=024d1a3d 0009:fixme:process:GetLogicalProcessorInformationEx (65535,(nil),0x33e1900): stub 0009:Ret KERNEL32.GetLogicalProcessorInformationEx() retval=00000001 ret=024d1a3d ------ Snip ------
https://bugs.winehq.org/show_bug.cgi?id=34332
--- Comment #15 from Anastasius Focht focht@gmx.net --- Hello folks,
the game engine first queries for the buffer size, passing zero length. It checks for 'ERROR_INSUFFICIENT_BUFFER' last error, allocates the required buffer on heap and then expects the data in second attempt.
Some example code that shows a similar way what the game is looking for (excluding NUMA part):
https://github.com/erikarn/intel-pcm/blob/master/src/cpucounters.cpp#L465
Also useful:
https://stackoverflow.com/questions/14093267/confusing-returnlength-from-win...
With that part fixed the game runs into bug 36549
Regards
https://bugs.winehq.org/show_bug.cgi?id=34332
Teras teras@luukku.com changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |teras@luukku.com
--- Comment #16 from Teras teras@luukku.com --- I don't know if that's the reason for cpu-z hang, but it's the last line that can be seen at console when cpu-z is run.
fixme:process:GetLogicalProcessorInformationEx (65535,0x7c75c0,0x33f510): stub
wine 1.7.37
https://bugs.winehq.org/show_bug.cgi?id=34332
Anastasius Focht focht@gmx.net changed:
What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |RESOLVED Resolution|--- |DUPLICATE
--- Comment #17 from Anastasius Focht focht@gmx.net --- Hello folks,
resolving as dupe of bug 25086 which is now the collector.
Regards
*** This bug has been marked as a duplicate of bug 25086 ***
https://bugs.winehq.org/show_bug.cgi?id=34332
Austin English austinenglish@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Status|RESOLVED |CLOSED
--- Comment #18 from Austin English austinenglish@gmail.com --- Closing.