Date: Thu, 29 Mar 2018 13:55:23 +0000 (UTC) From: Dimitry Andric <dim@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r331731 - head/contrib/llvm/tools/lld/ELF Message-ID: <201803291355.w2TDtNLh009590@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
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); } }
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201803291355.w2TDtNLh009590>