summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2019-12-11 08:57:45 +1030
committerAlan Modra <amodra@gmail.com>2019-12-11 11:42:09 +1030
commit5c05618a0a1f94565001a19da28595ce1dc537f8 (patch)
tree7621eeff0955bb221e096e9561f4c1239de416bb
parent2a81ccbbbf81ab9c66ba366a0c1da7abb6460423 (diff)
downloadbinutils-gdb-5c05618a0a1f94565001a19da28595ce1dc537f8.tar.gz
ubsan: vax: left shift cannot be represented in type 'int'
* vax-dis.c (NEXTLONG): Avoid signed overflow.
-rw-r--r--opcodes/ChangeLog4
-rw-r--r--opcodes/vax-dis.c2
2 files changed, 5 insertions, 1 deletions
diff --git a/opcodes/ChangeLog b/opcodes/ChangeLog
index 2ad26cb5d6f..c1fce7f33cc 100644
--- a/opcodes/ChangeLog
+++ b/opcodes/ChangeLog
@@ -1,5 +1,9 @@
2019-12-11 Alan Modra <amodra@gmail.com>
+ * vax-dis.c (NEXTLONG): Avoid signed overflow.
+
+2019-12-11 Alan Modra <amodra@gmail.com>
+
* v850-dis.c (get_operand_value): Use unsigned arithmetic. Don't
sign extend using shifts.
diff --git a/opcodes/vax-dis.c b/opcodes/vax-dis.c
index 2c02c29d72d..3bdfa151920 100644
--- a/opcodes/vax-dis.c
+++ b/opcodes/vax-dis.c
@@ -64,7 +64,7 @@ static char *entry_mask_bit[] =
#define COERCE32(x) ((int) (((x) ^ 0x80000000) - 0x80000000))
#define NEXTLONG(p) \
(p += 4, FETCH_DATA (info, p), \
- (COERCE32 ((((((p[-1] << 8) + p[-2]) << 8) + p[-3]) << 8) + p[-4])))
+ (COERCE32 (((((((unsigned) p[-1] << 8) + p[-2]) << 8) + p[-3]) << 8) + p[-4])))
/* Maximum length of an instruction. */
#define MAXLEN 25