Hi!

Am 20.07.2010 14:35, schrieb Michael Schnell:
On 07/20/2010 02:07 PM, Florian Klaempfl wrote:
It is probably reverse engineered guesswork but no official
documentation.
Hmm. I think M$ wants us to do decent Applications and this includes
multithreaded applications that use threadvars ("__thread" in C).

Thus I can't believe they did not document how a compiler is supposed to
handle threadvars.

Also, I suppose there is a documentation for M$'s own C compiler and for
GNU C how they do it on the appropriate arch, as same should be able to
call ASM functions that define their own threadvars in a way compatible
to the main program written in C. Maybe this is even true for Delphi.

For this purpose the TLS-API is to be used. The segment registers that point to the TLS array are undocumented and part of the internal bookkeeping of a NT system (and yes, Windows Vista and 7 are NT systems as well). But because many applications rely on this undocumented TEB Microsoft doesn't dare to change anything regarding this. But please no fight about this topic; I've read the blog and the book of a Microsoft developer who reports to what lengths Microsoft went to ensure application compatibility (it's called "The old new thing" and I'm suggesting it to everyone who wants to know something about Windows internals in a humorous way).

Btw: if you are really curious you might take a look at the TLS implementation of ReactOS, which is an NT OS after all: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/kernel32/thread/tls.c?revision=45018&view=markup

Regards,
Sven
_______________________________________________
fpc-devel maillist  -  [email protected]
http://lists.freepascal.org/mailman/listinfo/fpc-devel

Reply via email to