Prechádzať zdrojové kódy

* It is incorrect to use var_align() in linker code: it depends on current_settings.alignment, which is valid only while compiling, not while linking. Replaced with size_2_align().

git-svn-id: trunk@25182 -
sergei 12 rokov pred
rodič
commit
5b6e50c9da
2 zmenil súbory, kde vykonal 5 pridanie a 3 odobranie
  1. 3 1
      compiler/ogbase.pas
  2. 2 2
      compiler/ogelf.pas

+ 3 - 1
compiler/ogbase.pas

@@ -2517,7 +2517,9 @@ implementation
                     firstcommon:=false;
                   end;
                 internalObjData.setsection(commonObjSection);
-                internalObjData.allocalign(var_align(objsym.size));
+                { TODO: support alignment of common symbols (ELF targets at least),
+                  increase commonObjSection.SecAlign if necessary here. }
+                internalObjData.allocalign(used_align(size_2_align(objsym.size),0,commonObjSection.SecAlign));
                 commonsym:=internalObjData.symboldefine(objsym.name,AB_GLOBAL,AT_DATA);
                 commonsym.size:=objsym.size;
                 internalObjData.alloc(objsym.size);

+ 2 - 2
compiler/ogelf.pas

@@ -971,7 +971,7 @@ implementation
             end;
           AB_COMMON :
             begin
-              elfsym.st_value:=var_align(objsym.size);
+              elfsym.st_value:=size_2_align(objsym.size);
               elfsym.st_info:=STB_GLOBAL shl 4;
               elfsym.st_shndx:=SHN_COMMON;
             end;
@@ -2449,7 +2449,7 @@ implementation
                 if exesym.ObjSymbol.size=0 then
                   Comment(v_error,'Dynamic variable '+exesym.name+' has zero size');
                 internalobjdata.setSection(dynbssobjsec);
-                internalobjdata.allocalign(var_align(exesym.ObjSymbol.size));
+                internalobjdata.allocalign(size_2_align(exesym.ObjSymbol.size));
                 objsym:=internalobjdata.SymbolDefine(exesym.name,AB_GLOBAL,AT_DATA);
                 objsym.size:=exesym.ObjSymbol.size;
                 objsym.indsymbol:=exesym.ObjSymbol.indsymbol;