2004-12-27 H.J. Lu <hongjiu.lu@intel.com>
authorH.J. Lu <hjl.tools@gmail.com>
Mon, 27 Dec 2004 19:08:31 +0000 (19:08 +0000)
committerH.J. Lu <hjl.tools@gmail.com>
Mon, 27 Dec 2004 19:08:31 +0000 (19:08 +0000)
* readelf.c (read_leb128): Support 64bit host.

binutils/ChangeLog
binutils/readelf.c

index f418f99..80fe241 100644 (file)
@@ -1,3 +1,7 @@
+2004-12-27  H.J. Lu  <hongjiu.lu@intel.com>
+
+       * readelf.c (read_leb128): Support 64bit host.
+
 2004-12-22  Nick Clifton  <nickc@redhat.com>
 
        * readelf.c (last_pointer_size, warned_about_missing_comp_units):
index 3610376..6cecdc3 100644 (file)
@@ -6933,7 +6933,7 @@ read_leb128 (unsigned char *data, int *length_return, int sign)
 {
   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 *length_return, int sign)
       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 *length_return, int sign)
   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;
 }