summaryrefslogtreecommitdiff
path: root/compiler/llvm/nllvmutil.pas
diff options
context:
space:
mode:
authorsteve <steve@3ad0048d-3df7-0310-abae-a5850022a9f2>2016-05-30 16:57:13 +0000
committersteve <steve@3ad0048d-3df7-0310-abae-a5850022a9f2>2016-05-30 16:57:13 +0000
commit6b082ee8b43e52fe18c5799f8f4c82a8c7519f5b (patch)
treef906b179f5b20f4be91a286f8f5a01fc4fac51e2 /compiler/llvm/nllvmutil.pas
parent554d71b9e544a9776797dcca9983060fd998fd0b (diff)
parentba5f910eaac131cb7d3553c9bef173a81c422a1c (diff)
downloadfpc-interfacertti.tar.gz
auto-merge: trunk -> InterfaceRTTIinterfacertti
git-svn-id: http://svn.freepascal.org/svn/fpc/branches/interfacertti@33858 3ad0048d-3df7-0310-abae-a5850022a9f2
Diffstat (limited to 'compiler/llvm/nllvmutil.pas')
-rw-r--r--compiler/llvm/nllvmutil.pas14
1 files changed, 13 insertions, 1 deletions
diff --git a/compiler/llvm/nllvmutil.pas b/compiler/llvm/nllvmutil.pas
index f33b2b38e1..fc8d204b4a 100644
--- a/compiler/llvm/nllvmutil.pas
+++ b/compiler/llvm/nllvmutil.pas
@@ -45,13 +45,16 @@ implementation
uses
verbose,cutils,globals,fmodule,systems,
aasmbase,aasmtai,cpubase,llvmbase,aasmllvm,
+ aasmcnst,
symbase,symtable,defutil,
llvmtype;
class procedure tllvmnodeutils.insertbsssym(list: tasmlist; sym: tstaticvarsym; size: asizeint; varalign: shortint);
var
- asmsym: tasmsymbol;
+ asmsym,
+ symind: tasmsymbol;
field1, field2: tsym;
+ tcb: ttai_typedconstbuilder;
begin
if sym.globalasmsym then
asmsym:=current_asmdata.DefineAsmSymbol(sym.mangledname,AB_GLOBAL,AT_DATA)
@@ -65,6 +68,15 @@ implementation
list.concat(taillvmdecl.createdef(asmsym,
get_threadvar_record(sym.vardef,field1,field2),
nil,sec_data,varalign));
+ symind:=current_asmdata.DefineAsmSymbol(sym.mangledname,AB_INDIRECT,AT_DATA);
+ tcb:=ctai_typedconstbuilder.create([tcalo_make_dead_strippable,tcalo_new_section]);
+ tcb.emit_tai(Tai_const.Create_sym_offset(asmsym,0),cpointerdef.getreusable(sym.vardef));
+ list.concatlist(tcb.get_final_asmlist(
+ symind,cpointerdef.getreusable(sym.vardef),
+ sec_rodata,
+ lower(sym.mangledname),
+ const_align(sym.vardef.alignment)));
+ tcb.free;
end;