summaryrefslogtreecommitdiff
path: root/bfd/elf32-i386.c
diff options
context:
space:
mode:
authorH.J. Lu <hjl.tools@gmail.com>2015-05-20 07:55:45 -0700
committerH.J. Lu <hjl.tools@gmail.com>2015-05-20 07:55:45 -0700
commitfca6ae69c41882f5adfba05da7d932b7c8bc2153 (patch)
tree953c079ecf7ac5ab3b26f3546876a3c857959f09 /bfd/elf32-i386.c
parentce336788820b5d04700cdb9ead2ade880f5e2caa (diff)
downloadbinutils-gdb-fca6ae69c41882f5adfba05da7d932b7c8bc2153.tar.gz
Skip extra relocations in .rel.plt/.rela.plt
Extra relocations may be added to the .rel.plt/.rela.plt section, which are unrelated to PLT. We should skip them when retrieving PLT entry symbol values. PR binutils/18437 * elf32-i386.c (elf_i386_get_plt_sym_val): Skip extra relocations in .rel.plt/.rela.plt. * elf64-x86-64.c (elf_x86_64_get_plt_sym_val): Likewise.
Diffstat (limited to 'bfd/elf32-i386.c')
-rw-r--r--bfd/elf32-i386.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/bfd/elf32-i386.c b/bfd/elf32-i386.c
index c6ff7463a35..23d50e1193d 100644
--- a/bfd/elf32-i386.c
+++ b/bfd/elf32-i386.c
@@ -5260,6 +5260,11 @@ bad_return:
abort ();
plt_sym_val[reloc_index] = plt->vma + plt_offset;
plt_offset += bed->plt->plt_entry_size;
+
+ /* PR binutils/18437: Skip extra relocations in the .rel.plt
+ section. */
+ if (plt_offset >= plt->size)
+ break;
}
free (plt_contents);