summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRui Ueyama <ruiu@google.com>2017-12-26 10:13:10 +0000
committerRui Ueyama <ruiu@google.com>2017-12-26 10:13:10 +0000
commitc67d6b2da0a651a48408ca03ee2edc1bc9a3c29a (patch)
treee9550408929d60259c2d8c8ea8d752b949d8a225
parent162439dcdf1d5ec17a7a140695e9c3ce33b830e7 (diff)
downloadbcm5719-llvm-c67d6b2da0a651a48408ca03ee2edc1bc9a3c29a.tar.gz
bcm5719-llvm-c67d6b2da0a651a48408ca03ee2edc1bc9a3c29a.zip
Simplify script lexer.
Differential Revision: https://reviews.llvm.org/D41577 llvm-svn: 321453
-rw-r--r--lld/ELF/ScriptLexer.cpp10
-rw-r--r--lld/ELF/ScriptParser.cpp2
2 files changed, 9 insertions, 3 deletions
diff --git a/lld/ELF/ScriptLexer.cpp b/lld/ELF/ScriptLexer.cpp
index 9f33c16f36b..ef5a1cff759 100644
--- a/lld/ELF/ScriptLexer.cpp
+++ b/lld/ELF/ScriptLexer.cpp
@@ -115,11 +115,19 @@ void ScriptLexer::tokenize(MemoryBufferRef MB) {
continue;
}
+ // ">foo" is parsed to ">" and "foo", but ">>" is parsed to ">>".
+ if (S.startswith("<<") || S.startswith("<=") || S.startswith(">>") ||
+ S.startswith(">=")) {
+ Vec.push_back(S.substr(0, 2));
+ S = S.substr(2);
+ continue;
+ }
+
// Unquoted token. This is more relaxed than tokens in C-like language,
// so that you can write "file-name.cpp" as one bare token, for example.
size_t Pos = S.find_first_not_of(
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
- "0123456789_.$/\\~=+[]*?-!<>^:");
+ "0123456789_.$/\\~=+[]*?-!^:");
// A character that cannot start a word (which is usually a
// punctuation) forms a single character token.
diff --git a/lld/ELF/ScriptParser.cpp b/lld/ELF/ScriptParser.cpp
index c1176ccfa8d..f8a44940a9f 100644
--- a/lld/ELF/ScriptParser.cpp
+++ b/lld/ELF/ScriptParser.cpp
@@ -707,8 +707,6 @@ OutputSection *ScriptParser::readOutputSectionDescription(StringRef OutSec) {
if (consume(">"))
Cmd->MemoryRegionName = next();
- else if (peek().startswith(">"))
- Cmd->MemoryRegionName = next().drop_front();
Cmd->Phdrs = readOutputSectionPhdrs();
OpenPOWER on IntegriCloud