mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2026-01-08 11:01:41 +01:00
+ support for (section-based) threadvars for LLVM
git-svn-id: branches/hlcgllvm@28352 -
This commit is contained in:
parent
8e3062b1b6
commit
575911dcb0
@ -150,7 +150,9 @@ interface
|
||||
namesym: tasmsymbol;
|
||||
def: tdef;
|
||||
sec: TAsmSectiontype;
|
||||
tls: boolean;
|
||||
constructor create(_namesym: tasmsymbol; _def: tdef; _initdata: tasmlist; _sec: tasmsectiontype);
|
||||
constructor createtls(_namesym: tasmsymbol; _def: tdef);
|
||||
destructor destroy; override;
|
||||
end;
|
||||
|
||||
@ -187,6 +189,14 @@ uses
|
||||
_namesym.declared:=true;
|
||||
end;
|
||||
|
||||
|
||||
constructor taillvmdecl.createtls(_namesym: tasmsymbol; _def: tdef);
|
||||
begin
|
||||
create(_namesym,_def,nil,sec_data);
|
||||
tls:=true;
|
||||
end;
|
||||
|
||||
|
||||
destructor taillvmdecl.destroy;
|
||||
begin
|
||||
initdata.free;
|
||||
|
||||
@ -893,6 +893,8 @@ implementation
|
||||
else
|
||||
internalerror(2014020104);
|
||||
end;
|
||||
if taillvmdecl(hp).tls then
|
||||
asmwrite('thread_local ');
|
||||
{ todo: handle more different section types (mainly
|
||||
Objective-C }
|
||||
if taillvmdecl(hp).sec in [sec_rodata,sec_rodata_norel] then
|
||||
|
||||
@ -37,8 +37,6 @@ interface
|
||||
class procedure insertbsssym(list: tasmlist; sym: tstaticvarsym; size: asizeint); override;
|
||||
public
|
||||
class procedure InsertInitFinalTable; override;
|
||||
class procedure InsertThreadvarTablesTable; override;
|
||||
class procedure InsertThreadvars; override;
|
||||
class procedure InsertWideInitsTablesTable; override;
|
||||
class procedure InsertWideInits; override;
|
||||
class procedure InsertResourceTablesTable; override;
|
||||
@ -62,7 +60,10 @@ implementation
|
||||
asmsym:=current_asmdata.DefineAsmSymbol(sym.mangledname,AB_GLOBAL,AT_DATA)
|
||||
else
|
||||
asmsym:=current_asmdata.DefineAsmSymbol(sym.mangledname,AB_LOCAL,AT_DATA);
|
||||
list.concat(taillvmdecl.Create(asmsym,sym.vardef,nil,sec_data));
|
||||
if not(vo_is_thread_var in sym.varoptions) then
|
||||
list.concat(taillvmdecl.create(asmsym,sym.vardef,nil,sec_data))
|
||||
else
|
||||
list.concat(taillvmdecl.createtls(asmsym,sym.vardef))
|
||||
end;
|
||||
|
||||
|
||||
@ -72,18 +73,6 @@ implementation
|
||||
end;
|
||||
|
||||
|
||||
class procedure tllvmnodeutils.InsertThreadvarTablesTable;
|
||||
begin
|
||||
{ not yet supported }
|
||||
end;
|
||||
|
||||
|
||||
class procedure tllvmnodeutils.InsertThreadvars;
|
||||
begin
|
||||
{ not yet supported }
|
||||
end;
|
||||
|
||||
|
||||
class procedure tllvmnodeutils.InsertWideInitsTablesTable;
|
||||
begin
|
||||
{ not required }
|
||||
|
||||
@ -3495,6 +3495,8 @@ if (target_info.abi = abi_eabihf) then
|
||||
{$ifdef llvm}
|
||||
{ standard extension for llvm bitcode files }
|
||||
target_info.asmext:='.ll';
|
||||
{ always use section threadvars for now }
|
||||
include(target_info.flags,tf_section_threadvars);
|
||||
{$endif llvm}
|
||||
{$ifdef mipsel}
|
||||
case target_info.system of
|
||||
|
||||
Loading…
Reference in New Issue
Block a user