Message ID | 878uhrvumr.fsf@codesourcery.com |
---|---|
State | New |
Headers | show |
diff --git a/gdb/utils.c b/gdb/utils.c index 47adb67..83a6df6 100644 --- a/gdb/utils.c +++ b/gdb/utils.c @@ -3028,10 +3028,13 @@ gdb_sign_extend (LONGEST value, int bit) { gdb_assert (bit >= 1 && bit <= 8 * sizeof (LONGEST)); - if (((value >> (bit - 1)) & 1) != 0) + if (bit < 8 * sizeof (LONGEST) && ((value >> (bit - 1)) & 1) != 0) { LONGEST signbit = ((LONGEST) 1) << (bit - 1); + /* Clear upper bits from bit BIT. */ + value &= (signbit << 1) - 1; + value = (value ^ signbit) - signbit; }