summaryrefslogtreecommitdiff
path: root/bfd/elf-m10300.c
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2020-08-31 08:09:23 +0930
committerAlan Modra <amodra@gmail.com>2020-08-31 20:28:08 +0930
commit8f383897b69c58e02bc447b3c0813361f04bdc1e (patch)
tree0e999da88e13204d87c3cb4da90a5d13160d1abc /bfd/elf-m10300.c
parent737d21903469dca029a791bcd7e84b33c4c3ee16 (diff)
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.c18
1 files changed, 10 insertions, 8 deletions
diff --git a/bfd/elf-m10300.c b/bfd/elf-m10300.c
index 7c63ce4cd1..7a2b67569b 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;
+ }
}
}
}