svn commit: r359085 - head/contrib/llvm-project/lld/ELF

Dimitry Andric dim at FreeBSD.org
Wed Mar 18 20:38:18 UTC 2020


Author: dim
Date: Wed Mar 18 20:38:15 2020
New Revision: 359085
URL: https://svnweb.freebsd.org/changeset/base/359085

Log:
  Merge commit 315f8a55f from llvm git (by Fangrui Song):
  
    [ELF][PPC32] Don't report "relocation refers to a discarded section"
    for .got2
  
    Similar to D63182 [ELF][PPC64] Don't report "relocation refers to a
    discarded section" for .toc
  
    Reviewed By: Bdragon28
  
    Differential Revision: https://reviews.llvm.org/D75419
  
  This is needed to fix compile errors when building for ppc32/lld10.
  
  Requested by:	bdragon
  MFC after:	6 weeks
  X-MFC-With:	358851
  Differential Revision: https://reviews.freebsd.org/D24110

Modified:
  head/contrib/llvm-project/lld/ELF/InputSection.cpp
  head/contrib/llvm-project/lld/ELF/Relocations.cpp

Modified: head/contrib/llvm-project/lld/ELF/InputSection.cpp
==============================================================================
--- head/contrib/llvm-project/lld/ELF/InputSection.cpp	Wed Mar 18 20:28:26 2020	(r359084)
+++ head/contrib/llvm-project/lld/ELF/InputSection.cpp	Wed Mar 18 20:38:15 2020	(r359085)
@@ -438,12 +438,13 @@ void InputSection::copyRelocations(uint8_t *buf, Array
       // hopefully creates a frame that is ignored at runtime. Also, don't warn
       // on .gcc_except_table and debug sections.
       //
-      // See the comment in maybeReportUndefined for PPC64 .toc .
+      // See the comment in maybeReportUndefined for PPC32 .got2 and PPC64 .toc
       auto *d = dyn_cast<Defined>(&sym);
       if (!d) {
         if (!sec->name.startswith(".debug") &&
             !sec->name.startswith(".zdebug") && sec->name != ".eh_frame" &&
-            sec->name != ".gcc_except_table" && sec->name != ".toc") {
+            sec->name != ".gcc_except_table" && sec->name != ".got2" &&
+            sec->name != ".toc") {
           uint32_t secIdx = cast<Undefined>(sym).discardedSecIdx;
           Elf_Shdr_Impl<ELFT> sec =
               CHECK(file->getObj().sections(), file)[secIdx];

Modified: head/contrib/llvm-project/lld/ELF/Relocations.cpp
==============================================================================
--- head/contrib/llvm-project/lld/ELF/Relocations.cpp	Wed Mar 18 20:28:26 2020	(r359084)
+++ head/contrib/llvm-project/lld/ELF/Relocations.cpp	Wed Mar 18 20:38:15 2020	(r359085)
@@ -926,8 +926,12 @@ static bool maybeReportUndefined(Symbol &sym, InputSec
   // .toc and the .rela.toc are incorrectly not placed in the comdat. The ELF
   // spec says references from outside the group to a STB_LOCAL symbol are not
   // allowed. Work around the bug.
-  if (config->emachine == EM_PPC64 &&
-      cast<Undefined>(sym).discardedSecIdx != 0 && sec.name == ".toc")
+  //
+  // PPC32 .got2 is similar but cannot be fixed. Multiple .got2 is infeasible
+  // because .LC0-.LTOC is not representable if the two labels are in different
+  // .got2
+  if (cast<Undefined>(sym).discardedSecIdx != 0 &&
+      (sec.name == ".got2" || sec.name == ".toc"))
     return false;
 
   bool isWarning =


More information about the svn-src-head mailing list