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

This is
  *cst = (data[0] << 24) + (data[1] << 16) + (data[2] << 8) + data[3];
data is unsigned char which promotes to int.

	* h8300-dis.c (extract_immediate): Avoid signed overflow.
	(bfd_h8_disassemble): Likewise.
This commit is contained in:
Alan Modra 2019-12-10 23:53:57 +10:30
parent 159653d8c0
commit f8a87c78e6
2 changed files with 8 additions and 2 deletions

View File

@ -1,3 +1,8 @@
2019-12-11 Alan Modra <amodra@gmail.com>
* h8300-dis.c (extract_immediate): Avoid signed overflow.
(bfd_h8_disassemble): Likewise.
2019-12-11 Alan Modra <amodra@gmail.com>
* d30v-dis.c (print_insn): Make opind unsigned. Don't access

View File

@ -140,7 +140,8 @@ extract_immediate (FILE *stream,
break;
case L_32:
*len = 32;
*cst = (data[0] << 24) + (data[1] << 16) + (data[2] << 8) + data[3];
*cst = (((unsigned) data[0] << 24) + (data[1] << 16)
+ (data[2] << 8) + data[3]);
break;
default:
*len = 0;
@ -530,7 +531,7 @@ bfd_h8_disassemble (bfd_vma addr, disassemble_info *info, int mach)
{
int i = len / 2;
cst[opnr] = ((data[i] << 24)
cst[opnr] = (((unsigned) data[i] << 24)
| (data[i + 1] << 16)
| (data[i + 2] << 8)
| (data[i + 3]));