OSDN Git Service

2009-08-03 H.J. Lu <hongjiu.lu@intel.com>
authorhjl <hjl>
Mon, 3 Aug 2009 15:50:50 +0000 (15:50 +0000)
committerhjl <hjl>
Mon, 3 Aug 2009 15:50:50 +0000 (15:50 +0000)
PR ld/10433
* elf-ifunc.c (_bfd_elf_allocate_ifunc_dyn_relocs): Set got
to htab->init_got_offset and plt to htab->init_plt_offset
when discarding space for dynamic relocations.

bfd/ChangeLog
bfd/elf-ifunc.c

index 74c6032..4107449 100644 (file)
@@ -1,3 +1,10 @@
+2009-08-03  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR ld/10433
+       * elf-ifunc.c (_bfd_elf_allocate_ifunc_dyn_relocs): Set got
+       to htab->init_got_offset and plt to htab->init_plt_offset
+       when discarding space for dynamic relocations.
+
 2009-08-03  Alan Modra  <amodra@bigpond.net.au>
 
        * elf32-ppc.c (struct plt_entry): Revise comments.
index b9b50c3..0de236f 100644 (file)
@@ -185,6 +185,8 @@ _bfd_elf_allocate_ifunc_dyn_relocs (struct bfd_link_info *info,
       return FALSE;
     }
 
+  htab = elf_hash_table (info);
+
   /* Return and discard space for dynamic relocations against it if
      it is never referenced in a non-shared object.  */
   if (!h->ref_regular)
@@ -192,7 +194,8 @@ _bfd_elf_allocate_ifunc_dyn_relocs (struct bfd_link_info *info,
       if (h->plt.refcount > 0
          || h->got.refcount > 0)
        abort ();
-      h->got.offset = (bfd_vma) -1;
+      h->got = htab->init_got_offset;
+      h->plt = htab->init_plt_offset;
       *head = NULL;
       return TRUE;
     }
@@ -203,8 +206,6 @@ _bfd_elf_allocate_ifunc_dyn_relocs (struct bfd_link_info *info,
   else
     sizeof_reloc = bed->s->sizeof_rel;
 
-  htab = elf_hash_table (info);
-
   /* When building a static executable, use .iplt, .igot.plt and
      .rel[a].iplt sections for STT_GNU_IFUNC symbols.  */
   if (htab->splt != NULL)