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

* m68k-dis.c (COERCE32): Cast value first.
	(NEXTLONG, NEXTULONG): Avoid signed overflow.
This commit is contained in:
Alan Modra 2019-12-11 08:23:33 +10:30
parent f8a87c78e6
commit 334175b693
2 changed files with 10 additions and 3 deletions

View File

@ -1,3 +1,8 @@
2019-12-11 Alan Modra <amodra@gmail.com>
* m68k-dis.c (COERCE32): Cast value first.
(NEXTLONG, NEXTULONG): Avoid signed overflow.
2019-12-11 Alan Modra <amodra@gmail.com>
* h8300-dis.c (extract_immediate): Avoid signed overflow.

View File

@ -96,7 +96,7 @@ enum print_insn_arg_error
while (0)
/* Get a 4 byte signed integer. */
#define COERCE32(x) ((bfd_signed_vma) ((x) ^ 0x80000000) - 0x80000000)
#define COERCE32(x) (((bfd_vma) (x) ^ 0x80000000) - 0x80000000)
#define NEXTLONG(p, val, ret_val) \
do \
@ -104,7 +104,8 @@ enum print_insn_arg_error
p += 4; \
if (!FETCH_DATA (info, p)) \
return ret_val; \
val = COERCE32 ((((((p[-4] << 8) + p[-3]) << 8) + p[-2]) << 8) + p[-1]); \
val = COERCE32 (((((((unsigned) p[-4] << 8) + p[-3]) << 8) \
+ p[-2]) << 8) + p[-1]); \
} \
while (0)
@ -115,7 +116,8 @@ enum print_insn_arg_error
p += 4; \
if (!FETCH_DATA (info, p)) \
return PRINT_INSN_ARG_MEMORY_ERROR; \
val = (unsigned int) ((((((p[-4] << 8) + p[-3]) << 8) + p[-2]) << 8) + p[-1]); \
val = (((((((unsigned) p[-4] << 8) + p[-3]) << 8) \
+ p[-2]) << 8) + p[-1]); \
} \
while (0)