summaryrefslogtreecommitdiffstats
path: root/lld/ELF/SymbolListFile.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lld/ELF/SymbolListFile.cpp')
-rw-r--r--lld/ELF/SymbolListFile.cpp33
1 files changed, 25 insertions, 8 deletions
diff --git a/lld/ELF/SymbolListFile.cpp b/lld/ELF/SymbolListFile.cpp
index b8cfdc88f33..3d1377be438 100644
--- a/lld/ELF/SymbolListFile.cpp
+++ b/lld/ELF/SymbolListFile.cpp
@@ -78,24 +78,41 @@ public:
private:
void parseVersion();
+ void parseLocal();
+ void parseVersionSymbols();
};
void VersionScriptParser::parseVersion() {
expect("{");
if (peek() == "global:") {
next();
- while (!Error) {
- Config->VersionScriptGlobals.push_back(next());
- expect(";");
- if (peek() == "local:")
- break;
- }
+ parseVersionSymbols();
}
+ if (peek() == "local:")
+ parseLocal();
+ else
+ parseVersionSymbols();
+
+ expect("}");
+ expect(";");
+}
+
+void VersionScriptParser::parseLocal() {
expect("local:");
expect("*");
expect(";");
- expect("}");
- expect(";");
+ Config->VersionScriptGlobalByDefault = false;
+}
+
+void VersionScriptParser::parseVersionSymbols() {
+ for (;;) {
+ StringRef Cur = peek();
+ if (Cur == "}" || Cur == "local:")
+ return;
+ next();
+ Config->VersionScriptGlobals.push_back(Cur);
+ expect(";");
+ }
}
void VersionScriptParser::run() {
OpenPOWER on IntegriCloud