Revert the last change
authorH.J. Lu <hjl.tools@gmail.com>
Wed, 15 Jan 2014 11:59:42 +0000 (03:59 -0800)
committerH.J. Lu <hjl.tools@gmail.com>
Wed, 15 Jan 2014 11:59:42 +0000 (03:59 -0800)
It has been fixed by

commit 4199e3b8669d0a36448687850374fdc2ad7240b6
Author: Alan Modra <amodra@gmail.com>
Date:   Wed Jan 15 21:50:55 2014 +1030

    non-PIC references to __ehdr_start in pie and shared

    Rather than hacking every backend to not discard dynamic relocations
    against an undefined hidden __ehdr_start, make it appear to be defined
    early.  We want __ehdr_start hidden before size_dynamic_sections so
    that it isn't put in .dynsym, but we do need the dynamic relocations
    for a PIE or shared library with a non-PIC reference.  Defining it
    early is wrong if we don't actually define the symbol later to its
    proper value.  (In some cases we want to leave the symbol undefined,
    for example, when the ELF header isn't loaded, and we don't have this
    infomation available in before_allocation.)

* elf32-i386.c (elf_i386_allocate_dynrelocs): Revert the last
change.
* elf64-x86-64.c (elf_x86_64_allocate_dynrelocs): Likewise.

bfd/ChangeLog
bfd/elf32-i386.c
bfd/elf64-x86-64.c

index f4acda0ad2e7f1cfe1160c61e4299013c74ec965..0bf76654e1bcafe3a8154f7c2cc0348bc0aeacb8 100644 (file)
@@ -1,3 +1,9 @@
+2014-01-15  H.J. Lu  <hongjiu.lu@intel.com>
+
+       * elf32-i386.c (elf_i386_allocate_dynrelocs): Revert the last
+       change.
+       * elf64-x86-64.c (elf_x86_64_allocate_dynrelocs): Likewise.
+
 2014-01-14  H.J. Lu  <hongjiu.lu@intel.com>
 
        PR ld/16428
index e834a5a1152474326e4680e0be7c595be9afa872..4d391e13c7d7fa504fc3b996582efd1f6bcbc993 100644 (file)
@@ -2390,12 +2390,9 @@ elf_i386_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
        }
 
       /* Also discard relocs on undefined weak syms with non-default
-        visibility.   Don't discard relocs against __ehdr_start which
-        will be defined by assign_file_positions_for_non_load_sections
-        later.  */
+        visibility.  */
       if (eh->dyn_relocs != NULL
-         && h->root.type == bfd_link_hash_undefweak
-         && strcmp (h->root.root.string, "__ehdr_start") != 0)
+         && h->root.type == bfd_link_hash_undefweak)
        {
          if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT)
            eh->dyn_relocs = NULL;
index f364fe43dceeeefa9afd804f9e51028ee6870d0b..edee8ecefd50e98d87d58746e5f9a9509fadfc64 100644 (file)
@@ -2473,12 +2473,9 @@ elf_x86_64_allocate_dynrelocs (struct elf_link_hash_entry *h, void * inf)
        }
 
       /* Also discard relocs on undefined weak syms with non-default
-        visibility.   Don't discard relocs against __ehdr_start which
-        will be defined by assign_file_positions_for_non_load_sections
-        later.  */
+        visibility.  */
       if (eh->dyn_relocs != NULL
-         && h->root.type == bfd_link_hash_undefweak
-         && strcmp (h->root.root.string, "__ehdr_start") != 0)
+         && h->root.type == bfd_link_hash_undefweak)
        {
          if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT)
            eh->dyn_relocs = NULL;