[binutils-gdb] ubsan: gas resolve_symbol_value

Alan Modra amodra@sourceware.org
Sun Jul 6 11:06:36 GMT 2025


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=35842f370e07b64a6ae332fdaaa0b5e795efe5a7

commit 35842f370e07b64a6ae332fdaaa0b5e795efe5a7
Author: Alan Modra <amodra@gmail.com>
Date:   Sat Jul 5 10:55:47 2025 +0930

    ubsan: gas resolve_symbol_value
    
    Avoid signed overflow when resolving constant +/- constant.

Diff:
---
 gas/symbols.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

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


More information about the Binutils-cvs mailing list