From 7b33db99581a3a9fcf60bf2b67ba8e6bd6092d7c Mon Sep 17 00:00:00 2001 From: Hongyu Chen Date: Thu, 18 Jul 2024 19:19:55 +0000 Subject: [PATCH 1/3] [lld][ELF] remove `consumeLabel` in ScriptLexer This commit removes `consumeLabel` since we can just use consume function to have the same functionalities. --- lld/ELF/ScriptLexer.cpp | 12 ------------ lld/ELF/ScriptLexer.h | 1 - lld/ELF/ScriptParser.cpp | 4 ++-- 3 files changed, 2 insertions(+), 15 deletions(-) diff --git a/lld/ELF/ScriptLexer.cpp b/lld/ELF/ScriptLexer.cpp index 14f39ed10e17c2..5ac1c15043ce68 100644 --- a/lld/ELF/ScriptLexer.cpp +++ b/lld/ELF/ScriptLexer.cpp @@ -289,18 +289,6 @@ bool ScriptLexer::consume(StringRef tok) { return false; } -// Consumes Tok followed by ":". Space is allowed between Tok and ":". -bool ScriptLexer::consumeLabel(StringRef tok) { - if (consume((tok + ":").str())) - return true; - if (tokens.size() >= pos + 2 && tokens[pos] == tok && - tokens[pos + 1] == ":") { - pos += 2; - return true; - } - return false; -} - void ScriptLexer::skip() { (void)next(); } void ScriptLexer::expect(StringRef expect) { diff --git a/lld/ELF/ScriptLexer.h b/lld/ELF/ScriptLexer.h index 7919e493fa28bc..b4d2ab8627a91f 100644 --- a/lld/ELF/ScriptLexer.h +++ b/lld/ELF/ScriptLexer.h @@ -30,7 +30,6 @@ class ScriptLexer { void skip(); bool consume(StringRef tok); void expect(StringRef expect); - bool consumeLabel(StringRef tok); std::string getCurrentLocation(); MemoryBufferRef getCurrentMB(); diff --git a/lld/ELF/ScriptParser.cpp b/lld/ELF/ScriptParser.cpp index db46263115242a..830c4f315a5a81 100644 --- a/lld/ELF/ScriptParser.cpp +++ b/lld/ELF/ScriptParser.cpp @@ -1692,11 +1692,11 @@ ScriptParser::readSymbols() { while (!errorCount()) { if (consume("}")) break; - if (consumeLabel("local")) { + if (consume("local:") || (consume("local") && consume(":"))) { v = &locals; continue; } - if (consumeLabel("global")) { + if (consume("global:") || (consume("global") && consume(":"))) { v = &globals; continue; } From 6ec9adf7f5f06e80495b41df053e4aa401c4ce32 Mon Sep 17 00:00:00 2001 From: Hongyu Chen Date: Sun, 21 Jul 2024 05:58:45 +0000 Subject: [PATCH 2/3] [ELF] Moved consume in readSymbols function --- lld/ELF/ScriptParser.cpp | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/lld/ELF/ScriptParser.cpp b/lld/ELF/ScriptParser.cpp index bb075067cc4f33..ec34238c9df7df 100644 --- a/lld/ELF/ScriptParser.cpp +++ b/lld/ELF/ScriptParser.cpp @@ -1719,19 +1719,20 @@ ScriptParser::readSymbols() { while (!errorCount()) { if (consume("}")) break; - if (consume("local:") || (consume("local") && consume(":"))) { - v = &locals; - continue; - } - if (consume("global:") || (consume("global") && consume(":"))) { - v = &globals; - continue; - } if (consume("extern")) { SmallVector ext = readVersionExtern(); v->insert(v->end(), ext.begin(), ext.end()); } else { + if (consume("local:") || (consume("local") && consume(":"))) { + v = &locals; + continue; + } + if (consume("global:") || (consume("global") && consume(":"))) { + v = &globals; + continue; + } + StringRef tok = next(); v->push_back({unquote(tok), false, hasWildcard(tok)}); } From 31a3cd6f061d2bcc11d9799b4fbf04e31d493e66 Mon Sep 17 00:00:00 2001 From: Hongyu Chen Date: Tue, 23 Jul 2024 22:49:25 +0000 Subject: [PATCH 3/3] [ELF] Updated check location for "local" and "global" for resolving potential bugs --- lld/ELF/ScriptParser.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/lld/ELF/ScriptParser.cpp b/lld/ELF/ScriptParser.cpp index ec34238c9df7df..8637a8b0b2167e 100644 --- a/lld/ELF/ScriptParser.cpp +++ b/lld/ELF/ScriptParser.cpp @@ -1724,16 +1724,15 @@ ScriptParser::readSymbols() { SmallVector ext = readVersionExtern(); v->insert(v->end(), ext.begin(), ext.end()); } else { - if (consume("local:") || (consume("local") && consume(":"))) { + StringRef tok = next(); + if (tok == "local:" || (tok == "local" && consume(":"))) { v = &locals; continue; } - if (consume("global:") || (consume("global") && consume(":"))) { + if (tok == "global:" || (tok == "global" && consume(":"))) { v = &globals; continue; } - - StringRef tok = next(); v->push_back({unquote(tok), false, hasWildcard(tok)}); } expect(";");