http://bugs.winehq.org/show_bug.cgi?id=26025
Anastasius Focht focht@gmx.net changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |focht@gmx.net Summary|Atom Zombie Smasher demo: |Atom Zombie Smasher demo |fails to run with builtin |fails due to unimpl |msvcp80 |MSVCP90.cerr@std@@3V?$basic | |_ostream@DU?$char_traits@D@ | |std@@@1@A
--- Comment #3 from Anastasius Focht focht@gmx.net 2011-05-01 14:57:38 CDT --- Hello,
the game bundles its own version of MONO.
Gfx resource load (good case):
--- snip --- 0025:CALL csfml-graphics.sfImage_CreateFromFile() ret=00b169d8 ... 0025:Call msvcrt.fopen(030cdbe8 "content\textures\portraits01.png",100f27cc "rb") ret=10034381 ... 0025:RET csfml-graphics.sfImage_CreateFromFile() retval=030cdb88 ret=00b169d8 --- snip ---
Failing one:
--- snip --- 0025:CALL csfml-graphics.sfImage_CreateFromFile() ret=00b169d8 ... 0025:Call msvcp90.??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@PBD@Z(0072f860,030cdbe8 "portraits02") ret=1008a83f ... 0021:Call msvcrt.fopen(0072f864 "portraits02",100f27cc "rb") ret=10034381 ... 0021:Ret msvcrt.fopen() retval=00000000 ret=10034381 0021:trace:seh:raise_exception code=c0000005 flags=0 addr=0x10004af0 ip=10004af0 tid=0021 0021:trace:seh:raise_exception info[0]=00000000 0021:trace:seh:raise_exception info[1]=90909094 0021:trace:seh:raise_exception eax=90909090 ebx=00000000 ecx=7b171800 edx=100ef689 esi=7b16e004 edi=00000016 0021:trace:seh:raise_exception ebp=0072f7f8 esp=0072f7cc cs=0073 ds=007b es=007b fs=0033 gs=003b flags=00010202 ... 0021:Call KERNEL32.WriteFile(0000002c,013e2140,0000000f,0072ef6c,00000000) ret=73ad887f Stacktrace: ... --- snip ---
Looking into "content/textures" subfolder there are several "portraitsXX.png" files but "portraits02.png" is missing:
--- snip --- $ pwd /home/focht/.wine/drive_c/Program Files/Atom Zombie Smasher demo/data $ ls -l content/textures/ total 4360 -rw-r--r-- 1 focht focht 2832 2010-07-07 10:06 blank.png -rw-r--r-- 1 focht focht 866583 2011-01-22 22:24 buildings2.png -rw-r--r-- 1 focht focht 655498 2011-01-22 22:22 buildings.png -rw-r--r-- 1 focht focht 903582 2010-11-09 13:43 comic01.png -rw-r--r-- 1 focht focht 1038633 2010-12-06 21:17 comicblank.png -rw-r--r-- 1 focht focht 8195 2010-12-06 21:27 comicfiller.png -rw-r--r-- 1 focht focht 3674 2010-11-16 19:20 icon.png -rw-r--r-- 1 focht focht 53320 2011-01-11 13:24 loading.jpg -rw-r--r-- 1 focht focht 515833 2010-11-12 21:06 portraits01.png -rw-r--r-- 1 focht focht 297300 2011-01-20 11:56 portraits03.png -rw-r--r-- 1 focht focht 4131 2011-02-24 14:22 thumb.png --- snip ---
If you copy one of the other to same folder, the game starts but fails at:
--- snip --- $ wine ./atomzombiesmasher.exe fixme:actctx:parse_depend_manifests Could not find dependent assembly L"Microsoft.VC90.CRT" (9.0.21022.8) fixme:actctx:parse_depend_manifests Could not find dependent assembly L"Microsoft.VC90.CRT" (9.0.21022.8) fixme:actctx:parse_depend_manifests Could not find dependent assembly L"Microsoft.VC80.CRT" (8.0.50608.0) wine: Call from 0x7b83821f to unimplemented function msvcp80.dll.??$?9DU?$char_traits@D@std@@V?$allocator@D@1@@std@@YA_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@PBD@Z, aborting --- snip ---
I suspect the file was left out by accident and it should really _fail_ in this case.
The problem seems to be the error handling. The app makes usage of cerr object which isn't currently impl in Wine.
(I added annotations for %ecx instance refs to make it easier to read)
--- snip --- ... 0x1001ba6e: movl 0x1008c10c,%ecx ; msvcp90.__wine_stub_msvcp90_dll_1972 ; MSVCP90.?endl@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@1@AAV21@@Z
0x1001ba74: pushl %ecx 0x1001ba75: call 0x1001fd70 ; fetch ASCII "Unable to open file"
0x1001ba7a: movl 0x1008c110,%edx ; msvcp90.__wine_stub_msvcp90_dll_1610 ; MSVCP90.?cerr@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A
0x1001ba80: pushl %eax 0x1001ba81: pushl $0x100ef6a0 ; ASCII "". Reason : " 0x1001ba86: pushl %edi 0x1001ba87: pushl $0x100ef688 ; ASCII "Failed to load image "" 0x1001ba8c: pushl %edx 0x1001ba8d: call 0x10004ab0 ; *boom* (cerr referenced) ... --- snip ---
Because cerr@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A is a stub symbol, any deref on this symbol (member ptr) will likely crash it.
Regards