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-head mailing list