[fpc-devel] threadvar implementation
mschnell at lumino.de
Tue Aug 3 10:31:25 CEST 2010
On 08/03/2010 01:30 AM, Hans-Peter Diettrich wrote:
> We are doing "flat" software all the time. The last use of segmented
> pointers dates back to Win3.1, with near and far pointers.
It was you who introduced the flat vs segmented paradigm in this
Nonetheless, we _always_ do use segment registers (sometimes explicitly,
mostly implicitly CS: DS, SS as appropriate, as the hardware and the OS
forces this. For data access DS: and SS; are used, which contain the
same value ($0023 with Windows, $007B with Linux, no idea what the these
values mean). Only using threadvars asks for using another segment
register (FS: with Windows 32 Bit, GS with Linux, details see above) -
even if the user software does not ever modify the segment registers.
Of course pointers (doing something like "mov EAX,[EAX]") implicitly use
DS:, as well. This does work for variables allocated on the stack,
because SS and DS always contain the same value. The user software just
sees the address relative to the value in the selector table denoted by
as well DS: as SS:. So it simply does not need to care about segments
(only not true with threadvars in X86/32-Linux, see above).
I don't care if this is called "segmented" or "flat software" :).
More information about the fpc-devel