aboutsummaryrefslogtreecommitdiff
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
parent737d21903469dca029a791bcd7e84b33c4c3ee16 (diff)
downloadgdb-8f383897b69c58e02bc447b3c0813361f04bdc1e.zip
gdb-8f383897b69c58e02bc447b3c0813361f04bdc1e.tar.gz
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.
-rw-r--r--bfd/ChangeLog6
-rw-r--r--bfd/elf-m10300.c18
2 files changed, 16 insertions, 8 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 31c74bf..5d004cd 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,9 @@
+2020-08-31 Alan Modra <amodra@gmail.com>
+
+ * elf-m10300.c (mn10300_elf_relax_delete_bytes): Calculate
+ alignment from reloc addend after reloc type R_MN10300_ALIGN is
+ found.
+
2020-08-30 Alan Modra <amodra@gmail.com>
PR 26435
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;
+ }
}
}
}