svn commit: r339304 - in head: contrib/llvm/tools/lld/ELF lib/clang/include/lld/Common

Ed Maste emaste at FreeBSD.org
Thu Oct 11 13:19:18 UTC 2018


Author: emaste
Date: Thu Oct 11 13:19:17 2018
New Revision: 339304
URL: https://svnweb.freebsd.org/changeset/base/339304

Log:
  lld: set sh_link and sh_info for .rela.plt sections
  
  ELF spec says that for SHT_REL and SHT_RELA sh_link should reference the
  associated string table and sh_info should reference the "section to
  which the relocation applies."  ELF Tool Chain's elfcopy / strip use
  this (in part) to control whether or not the relocation entry is copied
  to the output.
  
  LLVM PR 37538 https://bugs.llvm.org/show_bug.cgi?id=37538
  
  Approved by:	re (kib)
  Obtained from:	llvm r344226 (backported for 6.0)

Modified:
  head/contrib/llvm/tools/lld/ELF/SyntheticSections.cpp
  head/lib/clang/include/lld/Common/Version.inc

Modified: head/contrib/llvm/tools/lld/ELF/SyntheticSections.cpp
==============================================================================
--- head/contrib/llvm/tools/lld/ELF/SyntheticSections.cpp	Thu Oct 11 08:14:31 2018	(r339303)
+++ head/contrib/llvm/tools/lld/ELF/SyntheticSections.cpp	Thu Oct 11 13:19:17 2018	(r339304)
@@ -1213,11 +1213,13 @@ void RelocationBaseSection::addReloc(const DynamicRelo
 void RelocationBaseSection::finalizeContents() {
   // If all relocations are R_*_RELATIVE they don't refer to any
   // dynamic symbol and we don't need a dynamic symbol table. If that
-  // is the case, just use 0 as the link.
-  Link = InX::DynSymTab ? InX::DynSymTab->getParent()->SectionIndex : 0;
+  // is the case, just use the index of the regular symbol table section.
+  getParent()->Link = InX::DynSymTab ?
+    InX::DynSymTab->getParent()->SectionIndex :
+    InX::SymTab->getParent()->SectionIndex;
 
-  // Set required output section properties.
-  getParent()->Link = Link;
+  if (InX::RelaIplt == this || InX::RelaPlt == this)
+    getParent()->Info = InX::GotPlt->getParent()->SectionIndex;
 }
 
 template <class ELFT>

Modified: head/lib/clang/include/lld/Common/Version.inc
==============================================================================
--- head/lib/clang/include/lld/Common/Version.inc	Thu Oct 11 08:14:31 2018	(r339303)
+++ head/lib/clang/include/lld/Common/Version.inc	Thu Oct 11 13:19:17 2018	(r339304)
@@ -7,4 +7,4 @@
 
 #define LLD_REPOSITORY_STRING "FreeBSD"
 // <Upstream revision at import>-<Local identifier in __FreeBSD_version style>
-#define LLD_REVISION_STRING "335540-1200004"
+#define LLD_REVISION_STRING "335540-1200005"


More information about the svn-src-all mailing list