Bläddra i källkod

* support non-section-based threadvars on the LLVM target

git-svn-id: trunk@31645 -
Jonas Maebe 10 år sedan
förälder
incheckning
c813e024ee
2 ändrade filer med 7 tillägg och 4 borttagningar
  1. 7 2
      compiler/llvm/nllvmutil.pas
  2. 0 2
      compiler/options.pas

+ 7 - 2
compiler/llvm/nllvmutil.pas

@@ -49,7 +49,7 @@ interface
 implementation
 
     uses
-      verbose,cutils,globals,fmodule,
+      verbose,cutils,globals,fmodule,systems,
       aasmbase,aasmtai,cpubase,llvmbase,aasmllvm,
       symbase,symtable,defutil,
       llvmtype;
@@ -57,6 +57,7 @@ implementation
   class procedure tllvmnodeutils.insertbsssym(list: tasmlist; sym: tstaticvarsym; size: asizeint; varalign: shortint);
     var
       asmsym: tasmsymbol;
+      field1, field2: tsym;
     begin
       if sym.globalasmsym then
         asmsym:=current_asmdata.DefineAsmSymbol(sym.mangledname,AB_GLOBAL,AT_DATA)
@@ -64,8 +65,12 @@ implementation
         asmsym:=current_asmdata.DefineAsmSymbol(sym.mangledname,AB_LOCAL,AT_DATA);
       if not(vo_is_thread_var in sym.varoptions) then
         list.concat(taillvmdecl.createdef(asmsym,sym.vardef,nil,sec_data,varalign))
-      else
+      else if tf_section_threadvars in target_info.flags then
         list.concat(taillvmdecl.createtls(asmsym,sym.vardef,varalign))
+      else
+        list.concat(taillvmdecl.createdef(asmsym,
+          get_threadvar_record(sym.vardef,field1,field2),
+          nil,sec_data,varalign));
     end;
 
 

+ 0 - 2
compiler/options.pas

@@ -3806,8 +3806,6 @@ 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);
   { don't generate dwarf cfi, llvm will do that }
   exclude(target_info.flags,tf_needs_dwarf_cfi);
 {$endif llvm}