x86: Don't check has_non_got_reloc
authorH.J. Lu <hjl.tools@gmail.com>
Sat, 9 Sep 2017 14:19:36 +0000 (07:19 -0700)
committerH.J. Lu <hjl.tools@gmail.com>
Sat, 9 Sep 2017 14:20:58 +0000 (07:20 -0700)
_bfd_x86_elf_link_symbol_references_local should depend only on symbol
references, not relocations, to work in check_relocs.

* elfxx-x86.c (_bfd_x86_elf_link_symbol_references_local): Don't
check has_non_got_reloc.

bfd/ChangeLog
bfd/elfxx-x86.c

index 9549e84..b3eae2e 100644 (file)
@@ -1,5 +1,10 @@
 2017-09-09  H.J. Lu  <hongjiu.lu@intel.com>
 
+       * elfxx-x86.c (_bfd_x86_elf_link_symbol_references_local): Don't
+       check has_non_got_reloc.
+
+2017-09-09  H.J. Lu  <hongjiu.lu@intel.com>
+
        PR ld/22115
        * elf32-i386.c (elf_i386_convert_load_reloc): Check linker_def.
        Don't use UNDEFINED_WEAK_RESOLVED_TO_ZERO.
index e056c3c..20b07f0 100644 (file)
@@ -1701,15 +1701,14 @@ _bfd_x86_elf_link_symbol_references_local (struct bfd_link_info *info,
      by linker version script.  A weak undefined symbol is forced local
      if
      1. It has non-default visibility.  Or
-     2. When building executable, it has non-GOT/non-PLT relocations
-       in text section or there is no dynamic linker.  Or
+     2. When building executable, there is no dynamic linker.  Or
      3. or "-z nodynamic-undefined-weak" is used.
    */
   if (SYMBOL_REFERENCES_LOCAL (info, h)
       || (h->root.type == bfd_link_hash_undefweak
          && (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
              || (bfd_link_executable (info)
-                 && (htab->interp == NULL || eh->has_non_got_reloc))
+                 && htab->interp == NULL)
              || info->dynamic_undefined_weak == 0))
       || ((h->def_regular || ELF_COMMON_DEF_P (h))
          && h->versioned == unversioned