Przeglądaj źródła

TLS directory requires some labels in specific sections
I implemented this by allowing '.section sec_name mangled_name'
for name 'xxxx'; specifier in tstaticvarsym.set_mangledname

git-svn-id: trunk@17904 -

pierre 14 lat temu
rodzic
commit
eb90591ea9
1 zmienionych plików z 25 dodań i 0 usunięć
  1. 25 0
      compiler/symsym.pas

+ 25 - 0
compiler/symsym.pas

@@ -1366,8 +1366,33 @@ implementation
 
 
     procedure tstaticvarsym.set_mangledname(const s:string);
+{$ifdef FPC_USE_TLS_DIRECTORY}
+     { TLS directory requires some labels in specific sections
+       I implemented this by allowing '.section sec_name mangled_name'
+       for name 'xxxx'; specifier PM 2011-07-01 }
+      var
+        newmangledname : string;
+        p : longint;
+{$endif FPC_USE_TLS_DIRECTORY}
       begin
         stringdispose(_mangledname);
+{$ifdef FPC_USE_TLS_DIRECTORY}
+        if copy(s,1,length('.section '))='.section ' then
+           begin
+             newmangledname:=copy(s,length('.section ')+1,length(s));
+             p:=pos(' ',newmangledname);
+             if p<2 then
+               Comment(V_Error,'Invalid C var name '+s)
+             else
+               begin
+                 section:=copy(newmangledname,1,p-1);
+                 include(varoptions,vo_has_section);
+                 newmangledname:=copy(newmangledname,p+1,length(newmangledname));
+                 set_mangledname(newmangledname);
+               end;
+           end
+         else
+{$endif FPC_USE_TLS_DIRECTORY}
       {$ifdef compress}
         _mangledname:=stringdup(minilzw_encode(s));
       {$else}