Properly move kept relocations when deleting relocations
authorH.J. Lu <hjl.tools@gmail.com>
Tue, 10 Nov 2015 07:49:02 +0000 (23:49 -0800)
committerH.J. Lu <hjl.tools@gmail.com>
Tue, 10 Nov 2015 08:17:59 +0000 (00:17 -0800)
* elf32-i386.c (elf_i386_relocate_section): Properly move
kept relocations when deleting relocations.
* elf64-x86-64.c (elf_x86_64_relocate_section): Likewise.

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

index d7000cb..8dbe72b 100644 (file)
@@ -1,3 +1,9 @@
+2015-11-10  H.J. Lu  <hongjiu.lu@intel.com>
+
+       * elf32-i386.c (elf_i386_relocate_section): Properly move
+       kept relocations when deleting relocations.
+       * elf64-x86-64.c (elf_x86_64_relocate_section): Likewise.
+
 2015-11-09  H.J. Lu  <hongjiu.lu@intel.com>
 
        * elf32-i386.c (elf_i386_relocate_section): Use read and write
index 6c353e9..ee45ed1 100644 (file)
@@ -3791,7 +3791,11 @@ elf_i386_relocate_section (bfd *output_bfd,
        }
 
       if (bfd_link_relocatable (info))
-       continue;
+       {
+         if (wrel != rel)
+           *wrel = *rel;
+         continue;
+       }
 
       /* Since STT_GNU_IFUNC symbol must go through PLT, we handle
         it here if it is defined in a non-shared object.  */
index 8e62d3d..dfa1276 100644 (file)
@@ -3980,7 +3980,11 @@ elf_x86_64_relocate_section (bfd *output_bfd,
        }
 
       if (bfd_link_relocatable (info))
-       continue;
+       {
+         if (wrel != rel)
+           *wrel = *rel;
+         continue;
+       }
 
       if (rel->r_addend == 0 && !ABI_64_P (output_bfd))
        {