summaryrefslogtreecommitdiffstats
path: root/lld/ELF/ScriptParser.cpp
diff options
context:
space:
mode:
authorPetr Hosek <phosek@chromium.org>2017-11-04 02:03:58 +0000
committerPetr Hosek <phosek@chromium.org>2017-11-04 02:03:58 +0000
commit8c7e8cce991739077ae7cd2f888457ec7cba6aa4 (patch)
treef0cbfbcde5a3f9628ecb1a8d5bc852e1a9055d5f /lld/ELF/ScriptParser.cpp
parent39770ca0a11c4cd19c38f51a1ffda6b07ab8b90d (diff)
downloadbcm5719-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.cpp13
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);
+}
OpenPOWER on IntegriCloud