diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2016-06-28 21:48:33 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2016-06-28 21:48:33 +0000 |
commit | 75edc46551fd5b642049833a0266a798c79ed0b2 (patch) | |
tree | efa7a03b6386e11f0e169c1c1759f8bb632c3053 | |
parent | 7814d484244884068197fdb26641481fd5078c08 (diff) |
Handle empty versions.
They are significant now that we support @ in symbol names.
git-svn-id: https://llvm.org/svn/llvm-project/lld/trunk@274071 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | ELF/SymbolListFile.cpp | 7 | ||||
-rw-r--r-- | test/ELF/Inputs/empty-ver.ver | 2 | ||||
-rw-r--r-- | test/ELF/empty-ver.s | 25 |
3 files changed, 30 insertions, 4 deletions
diff --git a/ELF/SymbolListFile.cpp b/ELF/SymbolListFile.cpp index fccfd28df..f9a12e2d1 100644 --- a/ELF/SymbolListFile.cpp +++ b/ELF/SymbolListFile.cpp @@ -84,6 +84,7 @@ private: void VersionScriptParser::parseVersion(StringRef Version) { expect("{"); + Config->SymbolVersions.push_back(elf::Version(Version)); if (peek() == "global:") { next(); parseVersionSymbols(Version); @@ -108,12 +109,10 @@ void VersionScriptParser::parseLocal() { void VersionScriptParser::parseVersionSymbols(StringRef Version) { std::vector<StringRef> *Globals; - if (Version.empty()) { + if (Version.empty()) Globals = &Config->VersionScriptGlobals; - } else { - Config->SymbolVersions.push_back(elf::Version(Version)); + else Globals = &Config->SymbolVersions.back().Globals; - } for (;;) { StringRef Cur = peek(); diff --git a/test/ELF/Inputs/empty-ver.ver b/test/ELF/Inputs/empty-ver.ver new file mode 100644 index 000000000..7d4b4ede7 --- /dev/null +++ b/test/ELF/Inputs/empty-ver.ver @@ -0,0 +1,2 @@ +ver { +}; diff --git a/test/ELF/empty-ver.s b/test/ELF/empty-ver.s new file mode 100644 index 000000000..f200d2876 --- /dev/null +++ b/test/ELF/empty-ver.s @@ -0,0 +1,25 @@ +// REQUIRES: x86 +// RUN: llvm-mc %s -o %t.o -filetype=obj -triple=x86_64-pc-linux +// RUN: ld.lld %t.o -o %t.so -shared -version-script %p/Inputs/empty-ver.ver +// RUN: llvm-readobj -version-info %t.so | FileCheck %s + +// CHECK: Version symbols { +// CHECK-NEXT: Section Name: +// CHECK-NEXT: Address: +// CHECK-NEXT: Offset: +// CHECK-NEXT: Link: +// CHECK-NEXT: Symbols [ +// CHECK-NEXT: Symbol { +// CHECK-NEXT: Version: 0 +// CHECK-NEXT: Name: @ +// CHECK-NEXT: } +// CHECK-NEXT: Symbol { +// CHECK-NEXT: Version: 2 +// CHECK-NEXT: Name: foo@ver +// CHECK-NEXT: } +// CHECK-NEXT: ] +// CHECK-NEXT: } + + +.global foo@ver +foo@ver: |