diff options
| author | Petr Hosek <phosek@chromium.org> | 2017-11-04 02:03:58 +0000 |
|---|---|---|
| committer | Petr Hosek <phosek@chromium.org> | 2017-11-04 02:03:58 +0000 |
| commit | 8c7e8cce991739077ae7cd2f888457ec7cba6aa4 (patch) | |
| tree | f0cbfbcde5a3f9628ecb1a8d5bc852e1a9055d5f /lld/ELF/ScriptParser.cpp | |
| parent | 39770ca0a11c4cd19c38f51a1ffda6b07ab8b90d (diff) | |
| download | bcm5719-llvm-8c7e8cce991739077ae7cd2f888457ec7cba6aa4.tar.gz bcm5719-llvm-8c7e8cce991739077ae7cd2f888457ec7cba6aa4.zip | |
[ELF] Support expressions with -defsym option
Fixes PR34948.
Differential Revision: https://reviews.llvm.org/D39511
llvm-svn: 317396
Diffstat (limited to 'lld/ELF/ScriptParser.cpp')
| -rw-r--r-- | lld/ELF/ScriptParser.cpp | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/lld/ELF/ScriptParser.cpp b/lld/ELF/ScriptParser.cpp index af9bf1994b4..8dd23668b7a 100644 --- a/lld/ELF/ScriptParser.cpp +++ b/lld/ELF/ScriptParser.cpp @@ -53,6 +53,7 @@ public: void readLinkerScript(); void readVersionScript(); void readDynamicList(); + void readDefsym(StringRef Name); private: void addFile(StringRef Path); @@ -269,6 +270,14 @@ void ScriptParser::readLinkerScript() { } } +void ScriptParser::readDefsym(StringRef Name) { + Expr E = readExpr(); + if (!atEOF()) + setError("EOF expected, but got " + next()); + SymbolAssignment *Cmd = make<SymbolAssignment>(Name, E, getCurrentLocation()); + Script->SectionCommands.push_back(Cmd); +} + void ScriptParser::addFile(StringRef S) { if (IsUnderSysroot && S.startswith("/")) { SmallString<128> PathData; @@ -1326,3 +1335,7 @@ void elf::readVersionScript(MemoryBufferRef MB) { void elf::readDynamicList(MemoryBufferRef MB) { ScriptParser(MB).readDynamicList(); } + +void elf::readDefsym(StringRef Name, MemoryBufferRef MB) { + ScriptParser(MB).readDefsym(Name); +} |

