On 07/30/2010 08:01 PM, Hans-Peter Diettrich wrote:

The only question is, whether you want the (absolute, flat) address of the threadvar of an *specific* thread, or the address of the threadvar in the *current* thread. Since the current thread can change, the offset of the threadvar record will change accordingly, and must be determined by the appropriate means (via segment or other address register).

This is what threadvars are all about,. Of course the effective address needs to be different for different threads (otherwise this would be just static/global variables, as the virtual address mapping is defined to be identical for all threads of an application).

The difference between the systems I checked seems to be that the non-flat address (disregarding the Selector to be used) (this seems to be what is stored in a pointer, assuming DS: in FPC) of the threadvars in different threads is identical with X86/Linux and different with all other systems. C can handle this by defining the pointer type appropriately (with "__thread") while FPC does not seem to have this ability.

-Michael
_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-devel

Reply via email to