This is the mail archive of the gdb-patches@sources.redhat.com mailing list for the GDB project.
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
| Other format: | [Raw text] | |
On Sat, Dec 25, 2004 at 04:42:29PM -0800, H. J. Lu wrote:
> read_leb128 in readelf assumes long == int == 32bit. It doesn't work
> with 64bit host. Does this patch look right?
>
>
I am going to check in this patch. Gdb 6.3 has the same problem. I
am enclosing a patch here.
H.J.
----
2004-12-27 H.J. Lu <hongjiu.lu@intel.com>
* readelf.c (read_leb128): Support 64bit host.
--- binutils/readelf.c.leb 2004-12-10 14:20:22.000000000 -0800
+++ binutils/readelf.c 2004-12-27 10:49:33.689234088 -0800
@@ -6933,7 +6933,7 @@ read_leb128 (unsigned char *data, int *l
{
unsigned long int result = 0;
unsigned int num_read = 0;
- int shift = 0;
+ unsigned int shift = 0;
unsigned char byte;
do
@@ -6941,7 +6941,7 @@ read_leb128 (unsigned char *data, int *l
byte = *data++;
num_read++;
- result |= (byte & 0x7f) << shift;
+ result |= ((unsigned long int) (byte & 0x7f)) << shift;
shift += 7;
@@ -6951,8 +6951,8 @@ read_leb128 (unsigned char *data, int *l
if (length_return != NULL)
*length_return = num_read;
- if (sign && (shift < 32) && (byte & 0x40))
- result |= -1 << shift;
+ if (sign && (shift < 8 * sizeof (result)) && (byte & 0x40))
+ result |= -1L << shift;
return result;
}
Attachment:
gdb-leb128-1.patch
Description: Text document
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |