|
@@ -134,9 +134,9 @@ implementation
|
|
cg.a_load_ref_reg(exprasmlist,OS_ADDR,OS_ADDR,location.reference,hregister);
|
|
cg.a_load_ref_reg(exprasmlist,OS_ADDR,OS_ADDR,location.reference,hregister);
|
|
reference_reset_base(location.reference,hregister,0);
|
|
reference_reset_base(location.reference,hregister,0);
|
|
end
|
|
end
|
|
-{$ifndef segment_threadvars}
|
|
|
|
{ Thread variable }
|
|
{ Thread variable }
|
|
- else if (vo_is_thread_var in tabstractvarsym(symtableentry).varoptions) then
|
|
|
|
|
|
+ else if (vo_is_thread_var in tabstractvarsym(symtableentry).varoptions) and
|
|
|
|
+ not(tf_section_threadvars in target_info.flags) then
|
|
begin
|
|
begin
|
|
{
|
|
{
|
|
Thread var loading is optimized to first check if
|
|
Thread var loading is optimized to first check if
|
|
@@ -181,7 +181,6 @@ implementation
|
|
cg.a_label(exprasmlist,endrelocatelab);
|
|
cg.a_label(exprasmlist,endrelocatelab);
|
|
location.reference.base:=hregister;
|
|
location.reference.base:=hregister;
|
|
end
|
|
end
|
|
-{$endif}
|
|
|
|
{ Nested variable }
|
|
{ Nested variable }
|
|
else if assigned(left) then
|
|
else if assigned(left) then
|
|
begin
|
|
begin
|
|
@@ -233,10 +232,18 @@ implementation
|
|
reference_reset_symbol(location.reference,objectlibrary.newasmsymbol(tglobalvarsym(symtableentry).mangledname,AB_EXTERNAL,AT_DATA),0)
|
|
reference_reset_symbol(location.reference,objectlibrary.newasmsymbol(tglobalvarsym(symtableentry).mangledname,AB_EXTERNAL,AT_DATA),0)
|
|
else
|
|
else
|
|
location:=tglobalvarsym(symtableentry).localloc;
|
|
location:=tglobalvarsym(symtableentry).localloc;
|
|
-{$ifdef segment_threadvars}
|
|
|
|
- if (vo_is_thread_var in tabstractvarsym(symtableentry).varoptions) then
|
|
|
|
- location.reference.segment:=NR_GS;
|
|
|
|
-{$endif}
|
|
|
|
|
|
+{$ifdef i386}
|
|
|
|
+ if (tf_section_threadvars in target_info.flags) and
|
|
|
|
+ (vo_is_thread_var in tabstractvarsym(symtableentry).varoptions) then
|
|
|
|
+ begin
|
|
|
|
+ case target_info.system of
|
|
|
|
+ system_i386_linux:
|
|
|
|
+ location.reference.segment:=NR_GS;
|
|
|
|
+ system_i386_win32:
|
|
|
|
+ location.reference.segment:=NR_FS;
|
|
|
|
+ end;
|
|
|
|
+ end;
|
|
|
|
+{$endif i386}
|
|
end;
|
|
end;
|
|
else
|
|
else
|
|
internalerror(200305102);
|
|
internalerror(200305102);
|