Index: ELF/InputFiles.h =================================================================== --- ELF/InputFiles.h +++ ELF/InputFiles.h @@ -165,6 +165,7 @@ static bool classof(const InputFile *F) { return F->kind() == Base::ObjKind; } ArrayRef getLocalSymbols(); + ArrayRef getGlobalSymbols(); ObjFile(MemoryBufferRef M, StringRef ArchiveName); void parse(llvm::DenseSet &ComdatGroups); Index: ELF/InputFiles.cpp =================================================================== --- ELF/InputFiles.cpp +++ ELF/InputFiles.cpp @@ -265,6 +265,10 @@ return makeArrayRef(this->Symbols).slice(1, this->FirstNonLocal - 1); } +template ArrayRef ObjFile::getGlobalSymbols() { + return makeArrayRef(this->Symbols).slice(this->FirstNonLocal); +} + template void ObjFile::parse(DenseSet &ComdatGroups) { // Read section and symbol tables. Index: ELF/SymbolTable.cpp =================================================================== --- ELF/SymbolTable.cpp +++ ELF/SymbolTable.cpp @@ -130,7 +130,10 @@ for (InputFile *File : LTO->compile()) { DenseSet DummyGroups; - cast>(File)->parse(DummyGroups); + auto *Obj = cast>(File); + Obj->parse(DummyGroups); + for (Symbol *Sym : Obj->getGlobalSymbols()) + Sym->parseSymbolVersion(); ObjectFiles.push_back(File); } } Index: test/ELF/lto/version-script2.ll =================================================================== --- /dev/null +++ test/ELF/lto/version-script2.ll @@ -0,0 +1,15 @@ +; REQUIRES: x86 +; RUN: llvm-as %s -o %t.o +; RUN: echo "VER1 {};" > %t.script +; RUN: ld.lld %t.o -o %t.so -shared --version-script %t.script +; RUN: llvm-readobj -dyn-symbols %t.so | FileCheck %s + +; test that we have the correct version. +; CHECK: Name: foo@@VER1 ( + +target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" +target triple = "x86_64-unknown-linux-gnu" + +module asm ".global foo" +module asm "foo:" +module asm ".symver foo,foo@@@VER1"