ubsan: d30v: left shift cannot be represented in type 'long long'
* d30v-dis.c (extract_value): Make num param a uint64_t, constify oper. Use unsigned vars. (print_insn): Make num var uint64_t. Constify oper and remove now unnecessary casts on extract_value calls. (print_insn_d30v): Use unsigned vars. Adjust printf formats.
This commit is contained in:
parent
cd30bcef4a
commit
1a1e2852a5
|
@ -1,3 +1,11 @@
|
||||||
|
2019-12-23 Alan Modra <amodra@gmail.com>
|
||||||
|
|
||||||
|
* d30v-dis.c (extract_value): Make num param a uint64_t, constify
|
||||||
|
oper. Use unsigned vars.
|
||||||
|
(print_insn): Make num var uint64_t. Constify oper and remove now
|
||||||
|
unnecessary casts on extract_value calls.
|
||||||
|
(print_insn_d30v): Use unsigned vars. Adjust printf formats.
|
||||||
|
|
||||||
2019-12-23 Alan Modra <amodra@gmail.com>
|
2019-12-23 Alan Modra <amodra@gmail.com>
|
||||||
|
|
||||||
* wasm32-dis.c (wasm_read_leb128): Don't allow oversize shifts.
|
* wasm32-dis.c (wasm_read_leb128): Don't allow oversize shifts.
|
||||||
|
|
|
@ -90,11 +90,11 @@ lookup_opcode (struct d30v_insn *insn, long num, int is_long)
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
extract_value (long long num, struct d30v_operand *oper, int is_long)
|
extract_value (uint64_t num, const struct d30v_operand *oper, int is_long)
|
||||||
{
|
{
|
||||||
int val;
|
unsigned int val;
|
||||||
int shift = 12 - oper->position;
|
int shift = 12 - oper->position;
|
||||||
int mask = (0xFFFFFFFF >> (32 - oper->bits));
|
unsigned int mask = (0xFFFFFFFF >> (32 - oper->bits));
|
||||||
|
|
||||||
if (is_long)
|
if (is_long)
|
||||||
{
|
{
|
||||||
|
@ -118,13 +118,13 @@ extract_value (long long num, struct d30v_operand *oper, int is_long)
|
||||||
static void
|
static void
|
||||||
print_insn (struct disassemble_info *info,
|
print_insn (struct disassemble_info *info,
|
||||||
bfd_vma memaddr,
|
bfd_vma memaddr,
|
||||||
long long num,
|
uint64_t num,
|
||||||
struct d30v_insn *insn,
|
struct d30v_insn *insn,
|
||||||
int is_long,
|
int is_long,
|
||||||
int show_ext)
|
int show_ext)
|
||||||
{
|
{
|
||||||
int val, opnum, need_comma = 0;
|
int val, opnum, need_comma = 0;
|
||||||
struct d30v_operand *oper;
|
const struct d30v_operand *oper;
|
||||||
int i, match, need_paren = 0, found_control = 0;
|
int i, match, need_paren = 0, found_control = 0;
|
||||||
unsigned int opind = 0;
|
unsigned int opind = 0;
|
||||||
|
|
||||||
|
@ -136,7 +136,7 @@ print_insn (struct disassemble_info *info,
|
||||||
opind++;
|
opind++;
|
||||||
val =
|
val =
|
||||||
extract_value (num,
|
extract_value (num,
|
||||||
(struct d30v_operand *) &d30v_operand_table[insn->form->operands[0]],
|
&d30v_operand_table[insn->form->operands[0]],
|
||||||
is_long);
|
is_long);
|
||||||
(*info->fprintf_func) (info->stream, "%s", d30v_cc_names[val]);
|
(*info->fprintf_func) (info->stream, "%s", d30v_cc_names[val]);
|
||||||
}
|
}
|
||||||
|
@ -160,7 +160,7 @@ print_insn (struct disassemble_info *info,
|
||||||
{
|
{
|
||||||
int bits;
|
int bits;
|
||||||
|
|
||||||
oper = (struct d30v_operand *) &d30v_operand_table[opnum];
|
oper = &d30v_operand_table[opnum];
|
||||||
bits = oper->bits;
|
bits = oper->bits;
|
||||||
if (oper->flags & OPERAND_SHIFT)
|
if (oper->flags & OPERAND_SHIFT)
|
||||||
bits += 3;
|
bits += 3;
|
||||||
|
@ -210,8 +210,8 @@ print_insn (struct disassemble_info *info,
|
||||||
match = 0;
|
match = 0;
|
||||||
if (oper->flags & OPERAND_CONTROL)
|
if (oper->flags & OPERAND_CONTROL)
|
||||||
{
|
{
|
||||||
struct d30v_operand *oper3 =
|
const struct d30v_operand *oper3
|
||||||
(struct d30v_operand *) &d30v_operand_table[insn->form->operands[2]];
|
= &d30v_operand_table[insn->form->operands[2]];
|
||||||
int id = extract_value (num, oper3, is_long);
|
int id = extract_value (num, oper3, is_long);
|
||||||
|
|
||||||
found_control = 1;
|
found_control = 1;
|
||||||
|
@ -330,9 +330,9 @@ print_insn_d30v (bfd_vma memaddr, struct disassemble_info *info)
|
||||||
{
|
{
|
||||||
int status, result;
|
int status, result;
|
||||||
bfd_byte buffer[12];
|
bfd_byte buffer[12];
|
||||||
unsigned long in1, in2;
|
uint32_t in1, in2;
|
||||||
struct d30v_insn insn;
|
struct d30v_insn insn;
|
||||||
long long num;
|
uint64_t num;
|
||||||
|
|
||||||
insn.form = NULL;
|
insn.form = NULL;
|
||||||
|
|
||||||
|
@ -353,9 +353,9 @@ print_insn_d30v (bfd_vma memaddr, struct disassemble_info *info)
|
||||||
{
|
{
|
||||||
info->bytes_per_line = 8;
|
info->bytes_per_line = 8;
|
||||||
if (!(result = lookup_opcode (&insn, in1, 0)))
|
if (!(result = lookup_opcode (&insn, in1, 0)))
|
||||||
(*info->fprintf_func) (info->stream, ".long\t0x%lx", in1);
|
(*info->fprintf_func) (info->stream, ".long\t0x%x", in1);
|
||||||
else
|
else
|
||||||
print_insn (info, memaddr, (long long) in1, &insn, 0, result);
|
print_insn (info, memaddr, (uint64_t) in1, &insn, 0, result);
|
||||||
return 4;
|
return 4;
|
||||||
}
|
}
|
||||||
in2 = bfd_getb32 (buffer);
|
in2 = bfd_getb32 (buffer);
|
||||||
|
@ -365,17 +365,17 @@ print_insn_d30v (bfd_vma memaddr, struct disassemble_info *info)
|
||||||
/* LONG instruction. */
|
/* LONG instruction. */
|
||||||
if (!(result = lookup_opcode (&insn, in1, 1)))
|
if (!(result = lookup_opcode (&insn, in1, 1)))
|
||||||
{
|
{
|
||||||
(*info->fprintf_func) (info->stream, ".long\t0x%lx,0x%lx", in1, in2);
|
(*info->fprintf_func) (info->stream, ".long\t0x%x,0x%x", in1, in2);
|
||||||
return 8;
|
return 8;
|
||||||
}
|
}
|
||||||
num = (long long) in1 << 32 | in2;
|
num = (uint64_t) in1 << 32 | in2;
|
||||||
print_insn (info, memaddr, num, &insn, 1, result);
|
print_insn (info, memaddr, num, &insn, 1, result);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
num = in1;
|
num = in1;
|
||||||
if (!(result = lookup_opcode (&insn, in1, 0)))
|
if (!(result = lookup_opcode (&insn, in1, 0)))
|
||||||
(*info->fprintf_func) (info->stream, ".long\t0x%lx", in1);
|
(*info->fprintf_func) (info->stream, ".long\t0x%x", in1);
|
||||||
else
|
else
|
||||||
print_insn (info, memaddr, num, &insn, 0, result);
|
print_insn (info, memaddr, num, &insn, 0, result);
|
||||||
|
|
||||||
|
@ -396,7 +396,7 @@ print_insn_d30v (bfd_vma memaddr, struct disassemble_info *info)
|
||||||
insn.form = NULL;
|
insn.form = NULL;
|
||||||
num = in2;
|
num = in2;
|
||||||
if (!(result = lookup_opcode (&insn, in2, 0)))
|
if (!(result = lookup_opcode (&insn, in2, 0)))
|
||||||
(*info->fprintf_func) (info->stream, ".long\t0x%lx", in2);
|
(*info->fprintf_func) (info->stream, ".long\t0x%x", in2);
|
||||||
else
|
else
|
||||||
print_insn (info, memaddr, num, &insn, 0, result);
|
print_insn (info, memaddr, num, &insn, 0, result);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue