aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2020-05-28 22:07:11 +0930
committerAlan Modra <amodra@gmail.com>2020-05-28 22:08:42 +0930
commitefcf5fb585cdb6b7304a5a61a2d1e7db7d4bec6b (patch)
treef23a72f3082608072b26e15b191361223c00c175
parent8eff95bcb6a778c35b91e61ccc066db335d7f06b (diff)
downloadgdb-efcf5fb585cdb6b7304a5a61a2d1e7db7d4bec6b.zip
gdb-efcf5fb585cdb6b7304a5a61a2d1e7db7d4bec6b.tar.gz
gdb-efcf5fb585cdb6b7304a5a61a2d1e7db7d4bec6b.tar.bz2
ubsan: nios2: undefined shift
* nios2-dis.c (nios2_print_insn_arg): Avoid shift left of negative values.
-rw-r--r--opcodes/ChangeLog5
-rw-r--r--opcodes/nios2-dis.c16
2 files changed, 10 insertions, 11 deletions
diff --git a/opcodes/ChangeLog b/opcodes/ChangeLog
index 986761e..d361ea7 100644
--- a/opcodes/ChangeLog
+++ b/opcodes/ChangeLog
@@ -1,5 +1,10 @@
2020-05-28 Alan Modra <amodra@gmail.com>
+ * nios2-dis.c (nios2_print_insn_arg): Avoid shift left of negative
+ values.
+
+2020-05-28 Alan Modra <amodra@gmail.com>
+
* ns32k-dis.c (print_insn_arg): Handle d value of 'f' for
immediates.
(print_insn_ns32k): Revert last change.
diff --git a/opcodes/nios2-dis.c b/opcodes/nios2-dis.c
index e1eeacc..6de2079 100644
--- a/opcodes/nios2-dis.c
+++ b/opcodes/nios2-dis.c
@@ -276,7 +276,7 @@ nios2_print_insn_arg (const char *argptr,
{
unsigned long i = 0;
long s = 0;
- bfd_signed_vma o = 0;
+ int32_t o = 0;
struct nios2_reg *reg_base;
switch (*argptr)
@@ -677,12 +677,10 @@ nios2_print_insn_arg (const char *argptr,
switch (op->format)
{
case iw_i_type:
- o = ((int32_t) ((GET_IW_I_IMM16 (opcode) & 0xffff) ^ 0x8000)
- - 0x8000);
+ o = ((GET_IW_I_IMM16 (opcode) & 0xffff) ^ 0x8000) - 0x8000;
break;
case iw_F2I16_type:
- o = ((int32_t) ((GET_IW_F2I16_IMM16 (opcode) & 0xffff) ^ 0x8000)
- - 0x8000);
+ o = ((GET_IW_F2I16_IMM16 (opcode) & 0xffff) ^ 0x8000) - 0x8000;
break;
default:
bad_opcode (op);
@@ -696,9 +694,7 @@ nios2_print_insn_arg (const char *argptr,
switch (op->format)
{
case iw_I10_type:
- o = (((int32_t) ((GET_IW_I10_IMM10 (opcode) & 0x3ff) ^ 0x400)
- - 0x400)
- << 1);
+ o = (((GET_IW_I10_IMM10 (opcode) & 0x3ff) ^ 0x400) - 0x400) * 2;
break;
default:
bad_opcode (op);
@@ -712,9 +708,7 @@ nios2_print_insn_arg (const char *argptr,
switch (op->format)
{
case iw_T1I7_type:
- o = (((int32_t) ((GET_IW_T1I7_IMM7 (opcode) & 0x7f) ^ 0x40)
- - 0x40)
- << 1);
+ o = (((GET_IW_T1I7_IMM7 (opcode) & 0x7f) ^ 0x40) - 0x40) * 2;
break;
default:
bad_opcode (op);