From: Eric Botcazou Date: Thu, 7 Feb 2019 16:02:24 +0000 (+0100) Subject: Visium: fix bogus overflow check on 32-bit hosts X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=1c92e98f548b70b08f01cf512ed755ef84e6f223;p=thirdparty%2Fbinutils-gdb.git Visium: fix bogus overflow check on 32-bit hosts bfd/ * elf32-visium.c (visium_elf_howto_parity_reloc): Minor tweak. : Use explicit range test to detect an overflow. --- diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 4486ee89eb6..75ed014ccdd 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,8 @@ +2019-02-07 Eric Botcazou + + * elf32-visium.c (visium_elf_howto_parity_reloc): Minor tweak. + : Use explicit range test to detect an overflow. + 2018-12-12 Alan Modra Apply from master diff --git a/bfd/elf32-visium.c b/bfd/elf32-visium.c index e8f1c4c9e4c..2846140e4c4 100644 --- a/bfd/elf32-visium.c +++ b/bfd/elf32-visium.c @@ -312,7 +312,6 @@ visium_elf_howto_parity_reloc (bfd * input_bfd, arelent *reloc_entry, bfd_vma relocation; bfd_byte *inplace_address; bfd_vma insn; - const bfd_vma signmask = 0xffff8000; /* This part is from bfd_elf_generic_reloc. If we're relocating, and this an external symbol, we don't want @@ -351,19 +350,19 @@ visium_elf_howto_parity_reloc (bfd * input_bfd, arelent *reloc_entry, if (reloc_entry->howto->pc_relative) { - relocation -= input_section->output_section->vma - + input_section->output_offset; + relocation -= input_section->output_section->vma; + relocation -= input_section->output_offset; relocation -= reloc_entry->address; } switch (reloc_entry->howto->type) { case R_VISIUM_PC16: - relocation >>= 2; - if (ret == bfd_reloc_ok && (relocation & signmask) != 0 - && (relocation & signmask) != signmask) + if (ret == bfd_reloc_ok + && ((bfd_signed_vma) relocation < -0x20000 + || (bfd_signed_vma) relocation > 0x1ffff)) ret = bfd_reloc_overflow; - relocation &= 0xffff; + relocation = (relocation >> 2) & 0xffff; break; case R_VISIUM_HI16: case R_VISIUM_HI16_PCREL: