svn commit: r331731 - head/contrib/llvm/tools/lld/ELF
Dimitry Andric
dim at FreeBSD.org
Thu Mar 29 13:55:24 UTC 2018
Author: dim
Date: Thu Mar 29 13:55:23 2018
New Revision: 331731
URL: https://svnweb.freebsd.org/changeset/base/331731
Log:
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
Modified:
head/contrib/llvm/tools/lld/ELF/InputFiles.cpp
head/contrib/llvm/tools/lld/ELF/InputFiles.h
head/contrib/llvm/tools/lld/ELF/SymbolTable.cpp
Modified: head/contrib/llvm/tools/lld/ELF/InputFiles.cpp
==============================================================================
--- head/contrib/llvm/tools/lld/ELF/InputFiles.cpp Thu Mar 29 12:52:58 2018 (r331730)
+++ head/contrib/llvm/tools/lld/ELF/InputFiles.cpp Thu Mar 29 13:55:23 2018 (r331731)
@@ -281,6 +281,10 @@ template <class ELFT> ArrayRef<Symbol *> ObjFile<ELFT>
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.
Modified: head/contrib/llvm/tools/lld/ELF/InputFiles.h
==============================================================================
--- head/contrib/llvm/tools/lld/ELF/InputFiles.h Thu Mar 29 12:52:58 2018 (r331730)
+++ head/contrib/llvm/tools/lld/ELF/InputFiles.h Thu Mar 29 13:55:23 2018 (r331731)
@@ -167,6 +167,7 @@ template <class ELFT> class ObjFile : public ELFFileBa
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);
Modified: head/contrib/llvm/tools/lld/ELF/SymbolTable.cpp
==============================================================================
--- head/contrib/llvm/tools/lld/ELF/SymbolTable.cpp Thu Mar 29 12:52:58 2018 (r331730)
+++ head/contrib/llvm/tools/lld/ELF/SymbolTable.cpp Thu Mar 29 13:55:23 2018 (r331731)
@@ -130,7 +130,10 @@ template <class ELFT> void SymbolTable::addCombinedLTO
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);
}
}
More information about the svn-src-all
mailing list