From d1960dc097f76fdb61bffb14bcee48048a2998cd Mon Sep 17 00:00:00 2001 From: Rafael Espindola Date: Thu, 6 Apr 2017 21:40:22 +0000 Subject: [PATCH] Call updateAlignment before assignAddresses. The alignment expression cannot depend on '.', so we can compute it early. llvm-svn: 299717 --- lld/ELF/LinkerScript.cpp | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/lld/ELF/LinkerScript.cpp b/lld/ELF/LinkerScript.cpp index d97db84..019c4e8 100644 --- a/lld/ELF/LinkerScript.cpp +++ b/lld/ELF/LinkerScript.cpp @@ -579,10 +579,6 @@ void LinkerScript::assignOffsets(OutputSectionCommand *Cmd) { LMAOffset = [=] { return Cmd->LMAExpr().getValue() - D; }; } - // Handle align (e.g. ".foo : ALIGN(16) { ... }"). - if (Cmd->AlignExpr) - Sec->updateAlignment(Cmd->AlignExpr().getValue()); - CurMemRegion = Cmd->MemRegion; if (CurMemRegion) Dot = CurMemRegion->Offset; @@ -657,9 +653,14 @@ void LinkerScript::adjustSectionsAfterSorting() { placeOrphanSections(); // Try and find an appropriate memory region to assign offsets in. - for (BaseCommand *Base : Opt.Commands) - if (auto *Cmd = dyn_cast(Base)) + for (BaseCommand *Base : Opt.Commands) { + if (auto *Cmd = dyn_cast(Base)) { Cmd->MemRegion = findMemoryRegion(Cmd); + // Handle align (e.g. ".foo : ALIGN(16) { ... }"). + if (Cmd->AlignExpr) + Cmd->Sec->updateAlignment(Cmd->AlignExpr().getValue()); + } + } // If output section command doesn't specify any segments, // and we haven't previously assigned any section to segment, -- 2.7.4