From b2c759ce68102931140ce34c2ac00619ba363622 Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Mon, 13 Jan 2020 10:46:55 +1030 Subject: ubsan: score: left shift of negative value * score-dis.c (print_insn_score48): Use unsigned variables for unsigned values. Don't left shift negative values. (print_insn_score32): Likewise. * score7-dis.c (print_insn_score32, print_insn_score16): Likewise. --- opcodes/score-dis.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) (limited to 'opcodes/score-dis.c') diff --git a/opcodes/score-dis.c b/opcodes/score-dis.c index 6b98a33..6f37dfd 100644 --- a/opcodes/score-dis.c +++ b/opcodes/score-dis.c @@ -565,7 +565,7 @@ print_insn_score48 (struct disassemble_info *info, bfd_vma given) { case 'r': { - long reg; + unsigned long reg; reg = given >> bitstart; reg &= (2u << (bitend - bitstart)) - 1; @@ -575,7 +575,7 @@ print_insn_score48 (struct disassemble_info *info, bfd_vma given) break; case 'd': { - long reg; + unsigned long reg; reg = given >> bitstart; reg &= (2u << (bitend - bitstart)) - 1; @@ -600,14 +600,14 @@ print_insn_score48 (struct disassemble_info *info, bfd_vma given) || ((given & insn->mask) == 0x0c00000b) /* stc1 */ || ((given & insn->mask) == 0x0c000013) /* stc2 */ || ((given & insn->mask) == 0x0c00001b)) /* stc3 */ - reg <<= 2; + reg *= 4; func (stream, "%ld", reg); } break; case 'x': { - long reg; + unsigned long reg; reg = given >> bitstart; reg &= (2u << (bitend - bitstart)) - 1; @@ -617,7 +617,7 @@ print_insn_score48 (struct disassemble_info *info, bfd_vma given) break; case 'w': { - long reg; + unsigned long reg; reg = given >> bitstart; reg &= (2u << (bitend - bitstart)) - 1; reg <<= 2; @@ -731,7 +731,7 @@ print_insn_score32 (bfd_vma pc, struct disassemble_info *info, long given) } else { - long reg; + unsigned long reg; int bitstart = 10; int bitend = 14; reg = given >> bitstart; @@ -784,7 +784,7 @@ print_insn_score32 (bfd_vma pc, struct disassemble_info *info, long given) { case 'r': { - long reg; + unsigned long reg; reg = given >> bitstart; reg &= (2u << (bitend - bitstart)) - 1; @@ -794,7 +794,7 @@ print_insn_score32 (bfd_vma pc, struct disassemble_info *info, long given) break; case 'd': { - long reg; + unsigned long reg; reg = given >> bitstart; reg &= (2u << (bitend - bitstart)) - 1; @@ -817,14 +817,14 @@ print_insn_score32 (bfd_vma pc, struct disassemble_info *info, long given) || ((given & insn->mask) == 0x0c00000b) /* stc1 */ || ((given & insn->mask) == 0x0c000013) /* stc2 */ || ((given & insn->mask) == 0x0c00001b)) /* stc3 */ - reg <<= 2; + reg *= 4; func (stream, "%ld", reg); } break; case 'x': { - long reg; + unsigned long reg; reg = given >> bitstart; reg &= (2u << (bitend - bitstart)) - 1; -- cgit v1.1