aboutsummaryrefslogtreecommitdiff
path: root/gas/expr.c
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2014-10-14 13:36:20 +1030
committerAlan Modra <amodra@gmail.com>2014-10-14 14:36:35 +1030
commit65879393f04e14a9ab8797a8e66e0ec8d94108b5 (patch)
tree7f4300ec569ff44c6fd1c412f4ddad82d040477c /gas/expr.c
parent9495b2e66f772783eb89cfa755e1e09641fa44eb (diff)
downloadfsf-binutils-gdb-65879393f04e14a9ab8797a8e66e0ec8d94108b5.zip
fsf-binutils-gdb-65879393f04e14a9ab8797a8e66e0ec8d94108b5.tar.gz
fsf-binutils-gdb-65879393f04e14a9ab8797a8e66e0ec8d94108b5.tar.bz2
Avoid undefined behaviour with signed expressions
PR 17453 bfd/ * libbfd.c (COERCE16, COERCE32, COERCE64): Use unsigned types. (EIGHT_GAZILLION): Delete. binutils/ * dwarf.c (read_leb128): Avoid signed overflow. (read_debug_line_header): Likewise. gas/ * config/tc-i386.c (fits_in_signed_long): Use unsigned param and expression to avoid signed overflow. (fits_in_signed_byte, fits_in_unsigned_byte, fits_in_unsigned_word, fits_in_signed_word, fits_in_unsigned_long): Similarly. * expr.c (operand <'-'>): Avoid signed overflow. * read.c (s_comm_internal): Likewise.
Diffstat (limited to 'gas/expr.c')
-rw-r--r--gas/expr.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/gas/expr.c b/gas/expr.c
index eb7255f..0ccfbd3 100644
--- a/gas/expr.c
+++ b/gas/expr.c
@@ -1021,7 +1021,8 @@ operand (expressionS *expressionP, enum expr_mode mode)
/* input_line_pointer -> char after operand. */
if (c == '-')
{
- expressionP->X_add_number = - expressionP->X_add_number;
+ expressionP->X_add_number
+ = - (addressT) expressionP->X_add_number;
/* Notice: '-' may overflow: no warning is given.
This is compatible with other people's
assemblers. Sigh. */