Handle empty versions.

They are significant now that we support @ in symbol names.

llvm-svn: 274071
This commit is contained in:
Rafael Espindola 2016-06-28 21:48:33 +00:00
parent 2100aa08b7
commit 857d7c5dd0
3 changed files with 30 additions and 4 deletions

View File

@ -84,6 +84,7 @@ private:
void VersionScriptParser::parseVersion(StringRef Version) { void VersionScriptParser::parseVersion(StringRef Version) {
expect("{"); expect("{");
Config->SymbolVersions.push_back(elf::Version(Version));
if (peek() == "global:") { if (peek() == "global:") {
next(); next();
parseVersionSymbols(Version); parseVersionSymbols(Version);
@ -108,12 +109,10 @@ void VersionScriptParser::parseLocal() {
void VersionScriptParser::parseVersionSymbols(StringRef Version) { void VersionScriptParser::parseVersionSymbols(StringRef Version) {
std::vector<StringRef> *Globals; std::vector<StringRef> *Globals;
if (Version.empty()) { if (Version.empty())
Globals = &Config->VersionScriptGlobals; Globals = &Config->VersionScriptGlobals;
} else { else
Config->SymbolVersions.push_back(elf::Version(Version));
Globals = &Config->SymbolVersions.back().Globals; Globals = &Config->SymbolVersions.back().Globals;
}
for (;;) { for (;;) {
StringRef Cur = peek(); StringRef Cur = peek();

View File

@ -0,0 +1,2 @@
ver {
};

25
lld/test/ELF/empty-ver.s Normal file
View File

@ -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: