[binutils-gdb] resolve gas shift expressions with large exponents to zero
Alan Modra
amodra@sourceware.org
Thu Jan 26 21:53:51 GMT 2023
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=44a178cc69a05d03bcde37a4f46e4e8e81287b84
commit 44a178cc69a05d03bcde37a4f46e4e8e81287b84
Author: Alan Modra <amodra@gmail.com>
Date: Thu Jan 26 18:44:51 2023 +1030
resolve gas shift expressions with large exponents to zero
* expr.c (resolve_expression <O_left_shift, O_right_shift>): Resolve
shifts exceeding bits in a valueT to zero.
Diff:
---
gas/expr.c | 14 ++++++++++++--
1 file changed, 12 insertions(+), 2 deletions(-)
diff --git a/gas/expr.c b/gas/expr.c
index ba3d2109b9d..794be6f09d8 100644
--- a/gas/expr.c
+++ b/gas/expr.c
@@ -2320,8 +2320,18 @@ resolve_expression (expressionS *expressionP)
return 0;
left = (offsetT) left % (offsetT) right;
break;
- case O_left_shift: left <<= right; break;
- case O_right_shift: left >>= right; break;
+ case O_left_shift:
+ if (right >= sizeof (left) * CHAR_BIT)
+ left = 0;
+ else
+ left <<= right;
+ break;
+ case O_right_shift:
+ if (right >= sizeof (left) * CHAR_BIT)
+ left = 0;
+ else
+ left >>= right;
+ break;
case O_bit_inclusive_or: left |= right; break;
case O_bit_or_not: left |= ~right; break;
case O_bit_exclusive_or: left ^= right; break;
More information about the Binutils-cvs
mailing list