mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-09-21 12:49:28 +02:00
* 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:
parent
e7f6b06969
commit
5b6e50c9da
@ -2517,7 +2517,9 @@ implementation
|
|||||||
firstcommon:=false;
|
firstcommon:=false;
|
||||||
end;
|
end;
|
||||||
internalObjData.setsection(commonObjSection);
|
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:=internalObjData.symboldefine(objsym.name,AB_GLOBAL,AT_DATA);
|
||||||
commonsym.size:=objsym.size;
|
commonsym.size:=objsym.size;
|
||||||
internalObjData.alloc(objsym.size);
|
internalObjData.alloc(objsym.size);
|
||||||
|
@ -971,7 +971,7 @@ implementation
|
|||||||
end;
|
end;
|
||||||
AB_COMMON :
|
AB_COMMON :
|
||||||
begin
|
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_info:=STB_GLOBAL shl 4;
|
||||||
elfsym.st_shndx:=SHN_COMMON;
|
elfsym.st_shndx:=SHN_COMMON;
|
||||||
end;
|
end;
|
||||||
@ -2449,7 +2449,7 @@ implementation
|
|||||||
if exesym.ObjSymbol.size=0 then
|
if exesym.ObjSymbol.size=0 then
|
||||||
Comment(v_error,'Dynamic variable '+exesym.name+' has zero size');
|
Comment(v_error,'Dynamic variable '+exesym.name+' has zero size');
|
||||||
internalobjdata.setSection(dynbssobjsec);
|
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:=internalobjdata.SymbolDefine(exesym.name,AB_GLOBAL,AT_DATA);
|
||||||
objsym.size:=exesym.ObjSymbol.size;
|
objsym.size:=exesym.ObjSymbol.size;
|
||||||
objsym.indsymbol:=exesym.ObjSymbol.indsymbol;
|
objsym.indsymbol:=exesym.ObjSymbol.indsymbol;
|
||||||
|
Loading…
Reference in New Issue
Block a user