[ELF] Fix LMA offset calculation
Differential revision: https://reviews.llvm.org/D30832
llvm-svn: 297713
diff --git a/lld/ELF/LinkerScript.cpp b/lld/ELF/LinkerScript.cpp
index fb309ce..7f68b5b 100644
--- a/lld/ELF/LinkerScript.cpp
+++ b/lld/ELF/LinkerScript.cpp
@@ -547,10 +547,6 @@
// for a single sections command (e.g. ".text { *(.text); }").
template <class ELFT>
void LinkerScript<ELFT>::assignOffsets(OutputSectionCommand *Cmd) {
- if (Cmd->LMAExpr) {
- uintX_t D = Dot;
- LMAOffset = [=] { return Cmd->LMAExpr() - D; };
- }
OutputSection *Sec = findSection<ELFT>(Cmd->Name, *OutputSections);
if (!Sec)
return;
@@ -558,6 +554,11 @@
if (Cmd->AddrExpr && Sec->Flags & SHF_ALLOC)
setDot(Cmd->AddrExpr, Cmd->Location);
+ if (Cmd->LMAExpr) {
+ uintX_t D = Dot;
+ LMAOffset = [=] { return Cmd->LMAExpr() - D; };
+ }
+
// Handle align (e.g. ".foo : ALIGN(16) { ... }").
if (Cmd->AlignExpr)
Sec->updateAlignment(Cmd->AlignExpr());