From 68a091326f6ac25005c49c4cbda1855080ba1d5f Mon Sep 17 00:00:00 2001 From: Eric Botcazou Date: Thu, 7 Feb 2019 17:02:24 +0100 Subject: [PATCH] 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. --- bfd/ChangeLog | 5 +++++ bfd/elf32-visium.c | 13 ++++++------- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 0aff60c..c0a3a37 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. + 2019-02-07 Nick Clifton * config.bfd: Move the powerpc-lynxos and powerpc-windiss targets diff --git a/bfd/elf32-visium.c b/bfd/elf32-visium.c index 316eb39..de81fdc 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: -- 2.7.4