diff options
author | Alan Modra <amodra@gmail.com> | 2020-08-31 08:09:23 +0930 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2020-08-31 20:28:08 +0930 |
commit | 8f383897b69c58e02bc447b3c0813361f04bdc1e (patch) | |
tree | 0e999da88e13204d87c3cb4da90a5d13160d1abc /bfd/elf-m10300.c | |
parent | 737d21903469dca029a791bcd7e84b33c4c3ee16 (diff) | |
download | fsf-binutils-gdb-8f383897b69c58e02bc447b3c0813361f04bdc1e.zip fsf-binutils-gdb-8f383897b69c58e02bc447b3c0813361f04bdc1e.tar.gz fsf-binutils-gdb-8f383897b69c58e02bc447b3c0813361f04bdc1e.tar.bz2 |
mn10300: ubsan: shift exponent too large
* elf-m10300.c (mn10300_elf_relax_delete_bytes): Calculate
alignment from reloc addend after reloc type R_MN10300_ALIGN is
found.
Diffstat (limited to 'bfd/elf-m10300.c')
-rw-r--r-- | bfd/elf-m10300.c | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/bfd/elf-m10300.c b/bfd/elf-m10300.c index 7c63ce4..7a2b675 100644 --- a/bfd/elf-m10300.c +++ b/bfd/elf-m10300.c @@ -2418,17 +2418,19 @@ mn10300_elf_relax_delete_bytes (bfd *abfd, are deleting. */ for (; irel < irelend; irel++) { - int alignment = 1 << irel->r_addend; - if (ELF32_R_TYPE (irel->r_info) == (int) R_MN10300_ALIGN && irel->r_offset > addr - && irel->r_offset < toaddr - && (count < alignment - || alignment % count != 0)) + && irel->r_offset < toaddr) { - irelalign = irel; - toaddr = irel->r_offset; - break; + int alignment = 1 << irel->r_addend; + + if (count < alignment + || alignment % count != 0) + { + irelalign = irel; + toaddr = irel->r_offset; + break; + } } } } |