aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Jacobowitz <drow@false.org>2005-08-01 04:06:27 +0000
committerDaniel Jacobowitz <drow@false.org>2005-08-01 04:06:27 +0000
commit77e0b926c11f74a3f7d4029dcdde8e5e722f0cae (patch)
tree2ac46260c5832bb5b252f1f236201271c2bde83f
parent3ffbc0a50081df3ef17811030bad04db8c9bac98 (diff)
downloadgdb-77e0b926c11f74a3f7d4029dcdde8e5e722f0cae.zip
gdb-77e0b926c11f74a3f7d4029dcdde8e5e722f0cae.tar.gz
gdb-77e0b926c11f74a3f7d4029dcdde8e5e722f0cae.tar.bz2
* dwarf2-frame.c (read_signed_leb128): Handle values that do not
fit in 32 bits. * dwarf2read.c (read_signed_leb128): Likewise.
-rw-r--r--gdb/ChangeLog6
-rw-r--r--gdb/dwarf2-frame.c4
-rw-r--r--gdb/dwarf2read.c9
3 files changed, 11 insertions, 8 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 18a2451..7f17909 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -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>:
diff --git a/gdb/dwarf2-frame.c b/gdb/dwarf2-frame.c
index 945d216..ef0d626 100644
--- a/gdb/dwarf2-frame.c
+++ b/gdb/dwarf2-frame.c
@@ -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;
diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
index eb6cec9..ae85ef3 100644
--- a/gdb/dwarf2read.c
+++ b/gdb/dwarf2read.c
@@ -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;
}