diff options
| author | Rafael Espindola <rafael.espindola@gmail.com> | 2016-10-31 17:43:38 +0000 |
|---|---|---|
| committer | Rafael Espindola <rafael.espindola@gmail.com> | 2016-10-31 17:43:38 +0000 |
| commit | f661393ad6efbda093af7213b0243fd4d94b0296 (patch) | |
| tree | b71595e7d88c3954920fa8a1a8d1e92a7d998b5e /lld/ELF/LinkerScript.cpp | |
| parent | 86a1ef388b750733494630a0e1a69c0bcc2d9434 (diff) | |
Move IsAbsolute from SymbolAssignment to Expr.
And as a token of the new feature, make ALIGNOF always absolute.
This is a step in making it possible to have non absolute symbols out
of output sections.
llvm-svn: 285608
Diffstat (limited to 'lld/ELF/LinkerScript.cpp')
| -rw-r--r-- | lld/ELF/LinkerScript.cpp | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/lld/ELF/LinkerScript.cpp b/lld/ELF/LinkerScript.cpp index baf11f6e7d13..440b54c25276 100644 --- a/lld/ELF/LinkerScript.cpp +++ b/lld/ELF/LinkerScript.cpp @@ -64,7 +64,7 @@ template <class ELFT> static void addSynthetic(SymbolAssignment *Cmd) { } template <class ELFT> static void addSymbol(SymbolAssignment *Cmd) { - if (Cmd->IsAbsolute) + if (Cmd->Expression.IsAbsolute) addRegular<ELFT>(Cmd); else addSynthetic<ELFT>(Cmd); @@ -1424,7 +1424,7 @@ SymbolAssignment *ScriptParser::readProvideOrAssignment(StringRef Tok, Cmd = readProvideHidden(true, true); } if (Cmd && MakeAbsolute) - Cmd->IsAbsolute = true; + Cmd->Expression.IsAbsolute = true; return Cmd; } @@ -1436,20 +1436,19 @@ static uint64_t getSymbolValue(StringRef S, uint64_t Dot) { SymbolAssignment *ScriptParser::readAssignment(StringRef Name) { StringRef Op = next(); - bool IsAbsolute = false; Expr E; assert(Op == "=" || Op == "+="); if (consume("ABSOLUTE")) { // The RHS may be something like "ABSOLUTE(.) & 0xff". // Call readExpr1 to read the whole expression. E = readExpr1(readParenExpr(), 0); - IsAbsolute = true; + E.IsAbsolute = true; } else { E = readExpr(); } if (Op == "+=") E = [=](uint64_t Dot) { return getSymbolValue(Name, Dot) + E(Dot); }; - return new SymbolAssignment(Name, E, IsAbsolute); + return new SymbolAssignment(Name, E); } // This is an operator-precedence parser to parse a linker @@ -1671,8 +1670,9 @@ Expr ScriptParser::readPrimary() { } if (Tok == "ALIGNOF") { StringRef Name = readParenLiteral(); - return - [=](uint64_t Dot) { return ScriptBase->getOutputSectionAlign(Name); }; + return { + [=](uint64_t Dot) { return ScriptBase->getOutputSectionAlign(Name); }, + true}; } if (Tok == "SIZEOF_HEADERS") return [=](uint64_t Dot) { return ScriptBase->getHeaderSize(); }; |
