2009-07-22 H.J. Lu <hongjiu.lu@intel.com>
authorH.J. Lu <hjl.tools@gmail.com>
Wed, 22 Jul 2009 21:30:30 +0000 (21:30 +0000)
committerH.J. Lu <hjl.tools@gmail.com>
Wed, 22 Jul 2009 21:30:30 +0000 (21:30 +0000)
 PR ld/10433
 * elflink.c (elf_link_output_extsym): Special case ifunc syms
 when ref_regular, not def_regular.

bfd/ChangeLog
bfd/elflink.c

index 926e5d9..35e90b3 100644 (file)
@@ -1,3 +1,9 @@
+2009-07-22  H.J. Lu  <hongjiu.lu@intel.com>
+
+        PR ld/10433
+        * elflink.c (elf_link_output_extsym): Special case ifunc syms
+        when ref_regular, not def_regular.
+
 2009-07-21  H.J. Lu  <hongjiu.lu@intel.com>
 
         PR ld/10426
index f9b577c..2af1af5 100644 (file)
@@ -8660,9 +8660,10 @@ elf_link_output_extsym (struct elf_link_hash_entry *h, void *data)
      and also to finish up anything that needs to be done for this
      symbol.  FIXME: Not calling elf_backend_finish_dynamic_symbol for
      forced local syms when non-shared is due to a historical quirk.
-     STT_GNU_IFUNC symbol must go through PLT.  */
+     STT_GNU_IFUNC symbol must go through PLT only if it is ever
+     referenced.  */
   if ((h->type == STT_GNU_IFUNC
-       && h->def_regular
+       && h->ref_regular
        && !finfo->info->relocatable)
       || ((h->dynindx != -1
           || h->forced_local)