* dwarf2-frame.c (read_signed_leb128): Handle values that do not
authorDaniel Jacobowitz <drow@false.org>
Mon, 1 Aug 2005 04:06:27 +0000 (04:06 +0000)
committerDaniel Jacobowitz <drow@false.org>
Mon, 1 Aug 2005 04:06:27 +0000 (04:06 +0000)
fit in 32 bits.
* dwarf2read.c (read_signed_leb128): Likewise.

gdb/ChangeLog
gdb/dwarf2-frame.c
gdb/dwarf2read.c

index 18a2451..7f17909 100644 (file)
@@ -1,3 +1,9 @@
+2005-08-01  Daniel Jacobowitz  <dan@codesourcery.com>
+
+       * dwarf2-frame.c (read_signed_leb128): Handle values that do not
+       fit in 32 bits.
+       * dwarf2read.c (read_signed_leb128): Likewise.
+
 2005-07-31  Daniel Jacobowitz  <dan@codesourcery.com>
 
        From Josef Ezra <jezra@emc.com>:
index 945d216..ef0d626 100644 (file)
@@ -1105,8 +1105,8 @@ read_signed_leb128 (bfd *abfd, gdb_byte *buf, unsigned int *bytes_read_ptr)
     }
   while (byte & 0x80);
 
-  if ((shift < 32) && (byte & 0x40))
-    result |= -(1 << shift);
+  if (shift < 8 * sizeof (result) && (byte & 0x40))
+    result |= -(((LONGEST)1) << shift);
 
   *bytes_read_ptr = num_read;
 
index eb6cec9..ae85ef3 100644 (file)
@@ -6032,12 +6032,11 @@ static long
 read_signed_leb128 (bfd *abfd, char *buf, unsigned int *bytes_read_ptr)
 {
   long result;
-  int i, shift, size, num_read;
+  int i, shift, num_read;
   unsigned char byte;
 
   result = 0;
   shift = 0;
-  size = 32;
   num_read = 0;
   i = 0;
   while (1)
@@ -6052,10 +6051,8 @@ read_signed_leb128 (bfd *abfd, char *buf, unsigned int *bytes_read_ptr)
          break;
        }
     }
-  if ((shift < size) && (byte & 0x40))
-    {
-      result |= -(1 << shift);
-    }
+  if ((shift < 8 * sizeof (result)) && (byte & 0x40))
+    result |= -(((long)1) << shift);
   *bytes_read_ptr = num_read;
   return result;
 }