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/elf64-x86-64.c | |
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/elf64-x86-64.c')
-rw-r--r-- | bfd/elf64-x86-64.c | 8 |
1 files changed, 2 insertions, 6 deletions
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); |