summaryrefslogtreecommitdiffstats
path: root/lld/lib/ReaderWriter/LinkerScript.cpp
diff options
context:
space:
mode:
authorRafael Auler <rafaelauler@gmail.com>2015-03-16 20:39:07 +0000
committerRafael Auler <rafaelauler@gmail.com>2015-03-16 20:39:07 +0000
commit01d73c967895865ce9a9601244ac7daa8b4ba7d1 (patch)
treec56e8809f50d949e4967a2e0fc4d367e10d0426b /lld/lib/ReaderWriter/LinkerScript.cpp
parent18e92078f2e190820071fb49d78ebe3fea3f299d (diff)
downloadbcm5719-llvm-01d73c967895865ce9a9601244ac7daa8b4ba7d1.tar.gz
bcm5719-llvm-01d73c967895865ce9a9601244ac7daa8b4ba7d1.zip
[LinkerScript] Handle symbols defined in linker scripts
Puts symbols defined in linker script expressions in a runtime file that is added as input to the resolver, making the input object files see symbols defined in linker scripts. http://reviews.llvm.org/D8263 llvm-svn: 232409
Diffstat (limited to 'lld/lib/ReaderWriter/LinkerScript.cpp')
-rw-r--r--lld/lib/ReaderWriter/LinkerScript.cpp22
1 files changed, 22 insertions, 0 deletions
diff --git a/lld/lib/ReaderWriter/LinkerScript.cpp b/lld/lib/ReaderWriter/LinkerScript.cpp
index 34a7d4a79c7..56194cae5e7 100644
--- a/lld/lib/ReaderWriter/LinkerScript.cpp
+++ b/lld/lib/ReaderWriter/LinkerScript.cpp
@@ -2232,6 +2232,28 @@ std::error_code Sema::evalExpr(const SymbolAssignment *assgn,
return std::error_code();
}
+const llvm::StringSet<> &Sema::getScriptDefinedSymbols() const {
+ // Do we have cached results?
+ if (!_definedSymbols.empty())
+ return _definedSymbols;
+
+ // Populate our defined set and return it
+ for (auto cmd : _layoutCommands)
+ if (auto sa = dyn_cast<SymbolAssignment>(cmd)) {
+ StringRef symbol = sa->symbol();
+ if (!symbol.empty() && symbol != ".")
+ _definedSymbols.insert(symbol);
+ }
+
+ return _definedSymbols;
+}
+
+uint64_t Sema::getLinkerScriptExprValue(StringRef name) const {
+ auto it = _symbolTable.find(name);
+ assert (it != _symbolTable.end() && "Invalid symbol name!");
+ return it->second;
+}
+
void Sema::dump() const {
raw_ostream &os = llvm::outs();
os << "Linker script semantics dump\n";
OpenPOWER on IntegriCloud