[Bug 20466] Brothers in Arms: Hell's Highway crashes on startup (TLS slot index allocation must start at non-zero indexes)

wine-bugs at winehq.org wine-bugs at winehq.org
Wed Jan 8 03:58:19 CST 2014


http://bugs.winehq.org/show_bug.cgi?id=20466

--- Comment #27 from Anastasius Focht <focht at gmx.net> ---
Hello folks,

some addendum, I shorted the relevant disassembly snippet a bit too much in my
first comment:

--- snip ---
...
004042EA   A1 1048A901      MOV EAX,DWORD PTR DS:[1A94810] ; 0 -> TLS index
zero
004042EF   50               PUSH EAX
004042F0   FF15 44F16701    CALL DWORD PTR DS:[<&KERNEL32.TlsGetValue>]
004042F6   85C0             TEST EAX,EAX
004042F8   75 78            JNZ SHORT biahh.00404372 ; current TLS slot data
004042FA   8B47 1C          MOV EAX,DWORD PTR DS:[EDI+1C]
004042FD   8D70 04          LEA ESI,DWORD PTR DS:[EAX+4]
...
<allocate some data structures off heap and initialize>
...
00404363   A1 1048A901      MOV EAX,DWORD PTR DS:[1A94810]
00404368   56               PUSH ESI                 ; new data
00404369   50               PUSH EAX                 ; TLS index zero
0040436A   FF15 40F16701    CALL DWORD PTR DS:[<&KERNEL32.TlsSetValue>]
00404370   8BC6             MOV EAX,ESI              ; return new data
00404372   8B4D F4          MOV ECX,DWORD PTR SS:[EBP-C]
00404375   64:890D 00000000 MOV DWORD PTR FS:[0],ECX
0040437C   59               POP ECX
0040437D   5F               POP EDI
0040437E   5E               POP ESI
0040437F   5B               POP EBX
00404380   8BE5             MOV ESP,EBP
00404382   5D               POP EBP
00404383   C3               RETN
--- snip ---

ntdll/thread: initialize 'peb->TlsBitmap' with bit 0 already set ('reserved')

TlsGetValue() and TlsSetValue() should still work with index zero marked
'reserved' (no change required).

Regards

-- 
Do not reply to this email, post in Bugzilla using the
above URL to reply.
You are receiving this mail because:
You are watching all bug changes.



More information about the wine-bugs mailing list