On 08/10/2010 10:23 AM, Michael Van Canneyt wrote:

This is an extension to C which is specific to GCC; it is in no way an
official spec except maybe for GCC (and probably linux-only, at that). Microsoft for example doesn't use ELF; as I understand his remark, Jonas
wanted an official Microsoft spec.

Other than that, it's of course useful to know.

Finally I think that there is a decent chance to modify the compiler and the RTL in a way that threadvars can be used fast and without needing a libc binding, as well reading and writing them and constructing a pointer to them (which seemed impossible to me recently):

Linux X86/64: using this document
Linux X86/32: using this document (*),
Windows X86/32: using the document mentioned in another contribution, based on reverse-engineering of the Microsoft C compiler (*)
Linux ARM: tbd, but seemingly quite obvious
WinCE ARM. tbd, but I suppose this is not really "on the list".

(*) as both archs provide a TCB, the implementation can be done very similar, first constructing the DS-relative pointer to a threadvar and then doing the access:

Windows: the pointer to the threadvar is constructed by
  MOV EAX, FS:Windows_TCB-element_offset
  MOV EAX, threadvaroffset[EAX]

Linux: the pointer to the threadvar is constructed by
  MOV EAX, GS:Linux_TCB-element_offset
  MOV EAX, threadvaroffset[EAX]

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

Reply via email to