Pull in r328738 from upstream lld trunk (by Rafael Espindola):
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. This is a follow-up to r331366, since we discovered that lld could append version strings to symbols twice, when using Link Time Optimization. MFC after: 3 months X-MFC-With: r327952
This commit is contained in:
parent
5cded89b02
commit
c9cf819d23
@ -281,6 +281,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.
|
||||
|
@ -167,6 +167,7 @@ template <class ELFT> class ObjFile : public ELFFileBase<ELFT> {
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user