mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-11-23 18:14:13 +08:00
ubsan: d30v: left shift cannot be represented in type 'int'
* d30v-dis.c (print_insn): Avoid signed overflow in left shift.
This commit is contained in:
parent
991fb595e3
commit
2e98c6c5c5
@ -1,3 +1,7 @@
|
||||
2020-01-04 Alan Modra <amodra@gmail.com>
|
||||
|
||||
* d30v-dis.c (print_insn): Avoid signed overflow in left shift.
|
||||
|
||||
2020-01-03 Jan Beulich <jbeulich@suse.com>
|
||||
|
||||
* aarch64-tbl.h (aarch64_opcode_table): Use
|
||||
|
@ -271,14 +271,10 @@ print_insn (struct disassemble_info *info,
|
||||
/* IMM6S3 is unsigned. */
|
||||
if (oper->flags & OPERAND_SIGNED || bits == 32)
|
||||
{
|
||||
long max;
|
||||
max = (1 << (bits - 1));
|
||||
if (val & max)
|
||||
unsigned int sign = 1u << (bits - 1);
|
||||
if (val & sign)
|
||||
{
|
||||
if (bits == 32)
|
||||
val = -val;
|
||||
else
|
||||
val = -val & ((1 << bits) - 1);
|
||||
val = -val & (sign + sign - 1);
|
||||
neg = 1;
|
||||
}
|
||||
}
|
||||
@ -303,13 +299,11 @@ print_insn (struct disassemble_info *info,
|
||||
{
|
||||
if (oper->flags & OPERAND_SIGNED)
|
||||
{
|
||||
int max = (1 << (bits - 1));
|
||||
unsigned int sign = 1u << (bits - 1);
|
||||
|
||||
if (val & max)
|
||||
if (val & sign)
|
||||
{
|
||||
val = -val;
|
||||
if (bits < 32)
|
||||
val &= ((1 << bits) - 1);
|
||||
val = -val & (sign + sign - 1);
|
||||
(*info->fprintf_func) (info->stream, "-");
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user