Am 03.10.2010 11:37, schrieb Sven Barth: > Hello together! > > While I looked for a solution for the bug report about external threads > on Windows ( http://bugs.freepascal.org/view.php?id=17300 ), I found the > following code in SysRelocateThreadVar in rtl/win/systhrd.inc: > > ==== begin ==== > > {$ifdef dummy} > { it least in the on windows 7 x64, this still doesn't not work, > fs:(0x2c) is > self referencing on this system (FK) > MVC: It also does not work on Windows Vista 32-bit, Home > Premium, SP 1. Results in a crash} > asm > movl TLSKey,%edx > movl %fs:(0x2c),%eax > orl %eax,%eax > jnz .LAddressInEAX > { this works on Windows 7, but I don't know if it works on > other OSes (FK) } > movl %fs:(0x18),%eax > movl 0xe10(%eax,%edx,4),%eax > jmp .LToDataIndex > .LAddressInEAX: > movl (%eax,%edx,4),%eax > .LToDataIndex: > movl %eax,dataindex > end; > if DataIndex=nil then > begin > errorsave:=GetLastError; > SysAllocateThreadVars; > DataIndex:=TlsGetValue(tlskey); > SetLastError(errorsave); > end; > {$else win32} > > ==== end ==== > > According to http://en.wikipedia.org/wiki/X86-64#Windows 64-bit Windows > uses GS instead of FS for the TIB. This might be the reason that the > code doesn't work on 64-bit Windows.
Also for 32 bit programs? The code above is only used by 32 bit programs. _______________________________________________ fpc-devel maillist - fpc-devel@lists.freepascal.org http://lists.freepascal.org/mailman/listinfo/fpc-devel