forked from OSchip/llvm-project
Strip @VER suffices from the LTO output.
This fixes pr36623. The problem is that we have to parse versions out of names before LTO so that LTO can use that information. When we get the LTO produced .o files, we replace the previous symbols with the LTO produced ones, but they still have @ in their names. We could just trim the name directly, but calling parseSymbolVersion to do it is simpler. llvm-svn: 328738
This commit is contained in:
parent
8ad9a97310
commit
c8f774b393
|
@ -265,6 +265,10 @@ template <class ELFT> ArrayRef<Symbol *> ObjFile<ELFT>::getLocalSymbols() {
|
|||
return makeArrayRef(this->Symbols).slice(1, this->FirstNonLocal - 1);
|
||||
}
|
||||
|
||||
template <class ELFT> ArrayRef<Symbol *> ObjFile<ELFT>::getGlobalSymbols() {
|
||||
return makeArrayRef(this->Symbols).slice(this->FirstNonLocal);
|
||||
}
|
||||
|
||||
template <class ELFT>
|
||||
void ObjFile<ELFT>::parse(DenseSet<CachedHashStringRef> &ComdatGroups) {
|
||||
// Read section and symbol tables.
|
||||
|
|
|
@ -165,6 +165,7 @@ public:
|
|||
static bool classof(const InputFile *F) { return F->kind() == Base::ObjKind; }
|
||||
|
||||
ArrayRef<Symbol *> getLocalSymbols();
|
||||
ArrayRef<Symbol *> getGlobalSymbols();
|
||||
|
||||
ObjFile(MemoryBufferRef M, StringRef ArchiveName);
|
||||
void parse(llvm::DenseSet<llvm::CachedHashStringRef> &ComdatGroups);
|
||||
|
|
|
@ -130,7 +130,10 @@ template <class ELFT> void SymbolTable::addCombinedLTOObject() {
|
|||
|
||||
for (InputFile *File : LTO->compile()) {
|
||||
DenseSet<CachedHashStringRef> DummyGroups;
|
||||
cast<ObjFile<ELFT>>(File)->parse(DummyGroups);
|
||||
auto *Obj = cast<ObjFile<ELFT>>(File);
|
||||
Obj->parse(DummyGroups);
|
||||
for (Symbol *Sym : Obj->getGlobalSymbols())
|
||||
Sym->parseSymbolVersion();
|
||||
ObjectFiles.push_back(File);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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"
|
Loading…
Reference in New Issue