+ support for (section-based) threadvars for LLVM

git-svn-id: branches/hlcgllvm@28352 -
This commit is contained in:
Jonas Maebe 2014-08-10 13:18:46 +00:00
parent 8e3062b1b6
commit 575911dcb0
4 changed files with 18 additions and 15 deletions

View File

@ -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;

View File

@ -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

View File

@ -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 }

View File

@ -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