From: "H. J. Lu" <hjl@lucon.org>
To: binutils@sources.redhat.com
Cc: GDB <gdb-patches@sources.redhat.com>
Subject: Re: PATCH: Fix read_leb128 in readelf for 64bit host
Date: Mon, 27 Dec 2004 19:01:00 -0000 [thread overview]
Message-ID: <20041227190130.GA21178@lucon.org> (raw)
In-Reply-To: <20041226004229.GA6483@lucon.org>
[-- Attachment #1: Type: text/plain, Size: 1261 bytes --]
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 #2: gdb-leb128-1.patch --]
[-- Type: text/plain, Size: 639 bytes --]
2004-12-27 H.J. Lu <hongjiu.lu@intel.com>
* dwarf2read.c (read_signed_leb128): Support 64bit host.
--- gdb/dwarf2read.c.leb 2004-12-21 14:24:06.000000000 -0800
+++ gdb/dwarf2read.c 2004-12-27 10:55:02.912450066 -0800
@@ -6098,7 +6098,7 @@ read_signed_leb128 (bfd *abfd, char *buf
result = 0;
shift = 0;
- size = 32;
+ size = 8 * sizeof (result);
num_read = 0;
i = 0;
while (1)
@@ -6115,7 +6115,7 @@ read_signed_leb128 (bfd *abfd, char *buf
}
if ((shift < size) && (byte & 0x40))
{
- result |= -(1 << shift);
+ result |= -(1L << shift);
}
*bytes_read_ptr = num_read;
return result;
next prev parent reply other threads:[~2004-12-27 19:01 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-12-26 0:42 H. J. Lu
2004-12-27 19:01 ` H. J. Lu [this message]
2004-12-28 13:15 ` Dave Korn
2004-12-28 14:57 ` Daniel Jacobowitz
2004-12-28 20:48 ` Dave Korn
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20041227190130.GA21178@lucon.org \
--to=hjl@lucon.org \
--cc=binutils@sources.redhat.com \
--cc=gdb-patches@sources.redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).