diff options
author | Alan Modra <amodra@gmail.com> | 2020-05-28 22:07:11 +0930 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2020-05-28 22:08:42 +0930 |
commit | efcf5fb585cdb6b7304a5a61a2d1e7db7d4bec6b (patch) | |
tree | f23a72f3082608072b26e15b191361223c00c175 | |
parent | 8eff95bcb6a778c35b91e61ccc066db335d7f06b (diff) | |
download | gdb-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/ChangeLog | 5 | ||||
-rw-r--r-- | opcodes/nios2-dis.c | 16 |
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); |