ubsan: gas resolve_symbol_value

Alan Modra amodra@gmail.com
Sun Jul 6 10:58:06 GMT 2025


Avoid signed overflow when resolving constant +/- constant.

diff --git a/gas/symbols.c b/gas/symbols.c
index 02ea741bde2..6a4dea88b8f 100644
--- a/gas/symbols.c
+++ b/gas/symbols.c
@@ -1729,8 +1729,8 @@ resolve_symbol_value (symbolS *symp)
 	    case O_bit_or_not:		left |= ~right; break;
 	    case O_bit_exclusive_or:	left ^= right; break;
 	    case O_bit_and:		left &= right; break;
-	    case O_add:			left += right; break;
-	    case O_subtract:		left -= right; break;
+	    case O_add:			left += (valueT) right; break;
+	    case O_subtract:		left -= (valueT) right; break;
 	    case O_eq:
 	    case O_ne:
 	      left = (left == right && seg_left == seg_right

-- 
Alan Modra


More information about the Binutils mailing list