Skip IFUNC relocations in debug sections ignored by ld.so. Fixes some ld test failur...
authorMikael Pettersson <mikpelinux@gmail.com>
Thu, 17 Sep 2020 09:45:39 +0000 (10:45 +0100)
committerNick Clifton <nickc@redhat.com>
Thu, 17 Sep 2020 09:45:39 +0000 (10:45 +0100)
PR ld/18808
* elfxx-sparc.c (_bfd_sparc_elf_relocate_section): Skip IFUNC
relocations in debug sections, change abort to _bfd_error_handler.

bfd/ChangeLog
bfd/elfxx-sparc.c

index 75904fe20b20bc7083db1f8b4722aee070b0be15..66463bdbabe3bc8a79d0e36aa5396c9d64b9e670 100644 (file)
@@ -1,3 +1,9 @@
+2020-09-17  Mikael Pettersson  <mikpelinux@gmail.com>
+
+       PR ld/18808
+       * elfxx-sparc.c (_bfd_sparc_elf_relocate_section): Skip IFUNC
+       relocations in debug sections, change abort to _bfd_error_handler.
+
 2020-09-16  H.J. Lu  <hongjiu.lu@intel.com>
 
        PR ld/26583
index 273789e5f7dd9e975a784a53fe8eb1d98240bbf5..be82612aefc6781f649e759772350631f7da91d5 100644 (file)
@@ -2904,7 +2904,25 @@ _bfd_sparc_elf_relocate_section (bfd *output_bfd,
                 STT_GNU_IFUNC symbol as STT_FUNC.  */
              if (elf_section_type (input_section) == SHT_NOTE)
                goto skip_ifunc;
-             abort ();
+
+             /* Dynamic relocs are not propagated for SEC_DEBUGGING
+                sections because such sections are not SEC_ALLOC and
+                thus ld.so will not process them.  */
+             if ((input_section->flags & SEC_ALLOC) == 0
+                 && (input_section->flags & SEC_DEBUGGING) != 0)
+               continue;
+
+             _bfd_error_handler
+               /* xgettext:c-format */
+               (_("%pB(%pA+%#" PRIx64 "): "
+                  "unresolvable %s relocation against symbol `%s'"),
+                input_bfd,
+                input_section,
+                (uint64_t) rel->r_offset,
+                howto->name,
+                h->root.root.string);
+             bfd_set_error (bfd_error_bad_value);
+             return FALSE;
            }
 
          plt_sec = htab->elf.splt;