Bläddra i källkod

* Look for __FPC_tls_callbacks, should be reset to nil for DLLs, not yet done

git-svn-id: trunk@17908 -
pierre 14 år sedan
förälder
incheckning
372b16b2e6
1 ändrade filer med 14 tillägg och 0 borttagningar
  1. 14 0
      compiler/ogcoff.pas

+ 14 - 0
compiler/ogcoff.pas

@@ -2255,6 +2255,8 @@ const pemagic : array[0..3] of byte = (
           {callbacksection : TExeSection;}
           {callbacksection : TExeSection;}
           tlsexesymbol: TExeSymbol;
           tlsexesymbol: TExeSymbol;
           tlssymbol: TObjSymbol;
           tlssymbol: TObjSymbol;
+          callbackexesymbol: TExeSymbol;
+          callbacksymbol: TObjSymbol;
         begin
         begin
           { according to GNU ld,
           { according to GNU ld,
             the callback routines should be placed into .CRT$XL*
             the callback routines should be placed into .CRT$XL*
@@ -2272,6 +2274,18 @@ const pemagic : array[0..3] of byte = (
               tlssymbol:=tlsexesymbol.ObjSymbol;
               tlssymbol:=tlsexesymbol.ObjSymbol;
               peoptheader.DataDirectory[PE_DATADIR_TLS].vaddr:=tlssymbol.address;
               peoptheader.DataDirectory[PE_DATADIR_TLS].vaddr:=tlssymbol.address;
               peoptheader.DataDirectory[PE_DATADIR_TLS].size:=Sizeof(tlsdirectory);
               peoptheader.DataDirectory[PE_DATADIR_TLS].size:=Sizeof(tlsdirectory);
+              if IsSharedLibrary then
+                begin
+                  { Here we should reset __FPC_tls_callbacks value to nil }
+                  callbackexesymbol:=texesymbol(ExeSymbolList.Find(
+                                        '__FPC_tls_callbacks'));
+                  if assigned (callbackexesymbol) then
+                    begin
+                      callbacksymbol:=callbackexesymbol.ObjSymbol;
+
+                    end;
+                end;
+
            end;
            end;
         end;
         end;