diff options
author | Rafael Auler <rafaelauler@gmail.com> | 2015-03-16 20:39:07 +0000 |
---|---|---|
committer | Rafael Auler <rafaelauler@gmail.com> | 2015-03-16 20:39:07 +0000 |
commit | 01d73c967895865ce9a9601244ac7daa8b4ba7d1 (patch) | |
tree | c56e8809f50d949e4967a2e0fc4d367e10d0426b /lld/lib/ReaderWriter/LinkerScript.cpp | |
parent | 18e92078f2e190820071fb49d78ebe3fea3f299d (diff) | |
download | bcm5719-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.cpp | 22 |
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"; |