diff options
author | H.J. Lu <hjl.tools@gmail.com> | 2014-11-21 12:12:30 -0800 |
---|---|---|
committer | H.J. Lu <hjl.tools@gmail.com> | 2014-11-21 12:12:30 -0800 |
commit | 5974eba65b82912621ac68f2c0ff844efbd02b25 (patch) | |
tree | e316477af87e27e9c8fec008709b5327b6371be2 /bfd | |
parent | 9d585188889de38c7191976051d9acdd8d57cbbf (diff) | |
download | gdb-5974eba65b82912621ac68f2c0ff844efbd02b25.zip gdb-5974eba65b82912621ac68f2c0ff844efbd02b25.tar.gz gdb-5974eba65b82912621ac68f2c0ff844efbd02b25.tar.bz2 |
Optimize PC-relative offset overflow check
* elf64-x86-64.c (elf_x86_64_finish_dynamic_symbol): Optimize
PC-relative offset overflow check.
Diffstat (limited to 'bfd')
-rw-r--r-- | bfd/ChangeLog | 5 | ||||
-rw-r--r-- | bfd/elf64-x86-64.c | 8 |
2 files changed, 7 insertions, 6 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index a9e6787..1f5ad55 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,8 @@ +2014-11-21 H.J. Lu <hongjiu.lu@intel.com> + + * elf64-x86-64.c (elf_x86_64_finish_dynamic_symbol): Optimize + PC-relative offset overflow check. + 2014-11-21 Alexander Cherepanov <cherepan@mccme.ru> PR binutils/17512 diff --git a/bfd/elf64-x86-64.c b/bfd/elf64-x86-64.c index 432ab58..c64ff4f 100644 --- a/bfd/elf64-x86-64.c +++ b/bfd/elf64-x86-64.c @@ -4749,8 +4749,7 @@ elf_x86_64_finish_dynamic_symbol (bfd *output_bfd, bfd_byte *loc; asection *plt, *gotplt, *relplt, *resolved_plt; const struct elf_backend_data *bed; - bfd_boolean gotplt_after_plt; - int32_t plt_got_pcrel_offset; + bfd_vma plt_got_pcrel_offset; /* When building a static executable, use .iplt, .igot.plt and .rela.iplt sections for STT_GNU_IFUNC symbols. */ @@ -4864,10 +4863,7 @@ elf_x86_64_finish_dynamic_symbol (bfd *output_bfd, - plt_got_insn_size); /* Check PC-relative offset overflow in PLT entry. */ - gotplt_after_plt = (gotplt->output_section->vma - > resolved_plt->output_section->vma); - if ((gotplt_after_plt && plt_got_pcrel_offset < 0) - || (!gotplt_after_plt && plt_got_pcrel_offset > 0)) + if ((plt_got_pcrel_offset + 0x80000000) > 0xffffffff) info->callbacks->einfo (_("%F%B: PC-relative offset overflow in PLT entry for `%s'\n"), output_bfd, h->root.root.string); |