* 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 -
This commit is contained in:
sergei 2013-07-29 15:51:30 +00:00
parent e7f6b06969
commit 5b6e50c9da
2 changed files with 5 additions and 3 deletions

View File

@ -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);

View File

@ -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;