diff options
author | Jan Beulich <jbeulich@novell.com> | 2009-04-16 08:52:27 +0000 |
---|---|---|
committer | Jan Beulich <jbeulich@novell.com> | 2009-04-16 08:52:27 +0000 |
commit | d85733c8e2e51ba2159d27fe10d36b0eba98884d (patch) | |
tree | 2fee7b99df3f1cf26b2d5b292640824a38ab199e /gas | |
parent | 3f904b169712db815150b4d032ca2bfff79b2b4a (diff) | |
download | gdb-d85733c8e2e51ba2159d27fe10d36b0eba98884d.zip gdb-d85733c8e2e51ba2159d27fe10d36b0eba98884d.tar.gz gdb-d85733c8e2e51ba2159d27fe10d36b0eba98884d.tar.bz2 |
gas/
2009-04-16 Jan Beulich <jbeulich@novell.com>
* expr.c: Include limits.h if available, and #define CHAR_BITS
otherwise.
(expr): Check range of shift count when evaluating a constant
expression.
Diffstat (limited to 'gas')
-rw-r--r-- | gas/ChangeLog | 7 | ||||
-rw-r--r-- | gas/expr.c | 15 |
2 files changed, 22 insertions, 0 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog index 910f8b0..b837c17 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,10 @@ +2009-04-16 Jan Beulich <jbeulich@novell.com> + + * expr.c: Include limits.h if available, and #define CHAR_BITS + otherwise. + (expr): Check range of shift count when evaluating a constant + expression. + 2009-04-15 Jan Beulich <jbeulich@novell.com> * config/tc-i386.c (process_operands): Print operands in @@ -31,6 +31,13 @@ #include "safe-ctype.h" #include "obstack.h" +#ifdef HAVE_LIMITS_H +#include <limits.h> +#endif +#ifndef CHAR_BIT +#define CHAR_BIT 8 +#endif + static void floating_constant (expressionS * expressionP); static valueT generic_bignum_to_int32 (void); #ifdef BFD64 @@ -1779,6 +1786,14 @@ expr (int rankarg, /* Larger # is higher rank. */ as_warn (_("division by zero")); v = 1; } + if ((valueT) v >= sizeof(valueT) * CHAR_BIT + && (op_left == O_left_shift || op_left == O_right_shift)) + { + as_warn_value_out_of_range (_("shift count"), v, 0, + sizeof(valueT) * CHAR_BIT - 1, + NULL, 0); + resultP->X_add_number = v = 0; + } switch (op_left) { default: abort (); |