ubsan: nds32: left shift cannot be represented in type 'int'

Yet more.

	* nds32-dis.c (nds32_mask_opcode): Avoid signed overflow.
	(print_insn_nds32): Use uint64_t for "given" and "given1".
This commit is contained in:
Alan Modra
2019-12-17 22:18:57 +10:30
parent 660df28acf
commit e46d79a76e
2 changed files with 15 additions and 9 deletions

View File

@ -1,3 +1,8 @@
2019-12-17 Alan Modra <amodra@gmail.com>
* nds32-dis.c (nds32_mask_opcode): Avoid signed overflow.
(print_insn_nds32): Use uint64_t for "given" and "given1".
2019-12-17 Alan Modra <amodra@gmail.com> 2019-12-17 Alan Modra <amodra@gmail.com>
* tic80-dis.c: Delete file. * tic80-dis.c: Delete file.

View File

@ -877,7 +877,7 @@ nds32_mask_opcode (uint32_t insn)
} }
return MASK_OP (insn, 0x1f << 20); return MASK_OP (insn, 0x1f << 20);
default: default:
return (1 << 31); return 1u << 31;
} }
} }
@ -976,8 +976,8 @@ print_insn_nds32 (bfd_vma pc, disassemble_info *info)
int status; int status;
bfd_byte buf[4]; bfd_byte buf[4];
bfd_byte buf_data[16]; bfd_byte buf_data[16];
long long given; uint64_t given;
long long given1; uint64_t given1;
uint32_t insn; uint32_t insn;
int n; int n;
int last_symbol_index = -1; int last_symbol_index = -1;
@ -1129,24 +1129,25 @@ print_insn_nds32 (bfd_vma pc, disassemble_info *info)
info->bytes_per_line = 4; info->bytes_per_line = 4;
if (size == 16) if (size == 16)
info->fprintf_func (info->stream, ".qword\t0x%016llx%016llx", info->fprintf_func (info->stream, ".qword\t0x%016" PRIx64 "%016" PRIx64,
given, given1); given, given1);
else if (size == 8) else if (size == 8)
info->fprintf_func (info->stream, ".dword\t0x%016llx", given); info->fprintf_func (info->stream, ".dword\t0x%016" PRIx64, given);
else if (size == 4) else if (size == 4)
info->fprintf_func (info->stream, ".word\t0x%08llx", given); info->fprintf_func (info->stream, ".word\t0x%08" PRIx64, given);
else if (size == 2) else if (size == 2)
{ {
/* short */ /* short */
if (mapping_type == MAP_DATA0) if (mapping_type == MAP_DATA0)
info->fprintf_func (info->stream, ".byte\t0x%02llx", given & 0xFF); info->fprintf_func (info->stream, ".byte\t0x%02" PRIx64,
given & 0xFF);
else else
info->fprintf_func (info->stream, ".short\t0x%04llx", given); info->fprintf_func (info->stream, ".short\t0x%04" PRIx64, given);
} }
else else
{ {
/* byte */ /* byte */
info->fprintf_func (info->stream, ".byte\t0x%02llx", given); info->fprintf_func (info->stream, ".byte\t0x%02" PRIx64, given);
} }
return size; return size;