From 5974eba65b82912621ac68f2c0ff844efbd02b25 Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Fri, 21 Nov 2014 12:12:30 -0800 Subject: [PATCH] Optimize PC-relative offset overflow check * elf64-x86-64.c (elf_x86_64_finish_dynamic_symbol): Optimize PC-relative offset overflow check. --- bfd/ChangeLog | 5 +++++ bfd/elf64-x86-64.c | 8 ++------ 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index a9e6787c557..1f5ad559907 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,8 @@ +2014-11-21 H.J. Lu + + * elf64-x86-64.c (elf_x86_64_finish_dynamic_symbol): Optimize + PC-relative offset overflow check. + 2014-11-21 Alexander Cherepanov PR binutils/17512 diff --git a/bfd/elf64-x86-64.c b/bfd/elf64-x86-64.c index 432ab588546..c64ff4f8ac6 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); -- 2.30.2