* readelf.c (slurp_ia64_unwind_table): Correct 64-bit unwind table
authorAlan Modra <amodra@gmail.com>
Wed, 29 Apr 2009 14:21:50 +0000 (14:21 +0000)
committerAlan Modra <amodra@gmail.com>
Wed, 29 Apr 2009 14:21:50 +0000 (14:21 +0000)
read, and merge with 32-bit case.

binutils/ChangeLog
binutils/readelf.c

index 2988c45138126f04f0171ee7bd6d38d72e5e0fa4..60c7f8ac7fddc6b282fa59bd0288048e814d929d 100644 (file)
@@ -1,3 +1,9 @@
+2009-04-29  Alan Modra  <amodra@bigpond.net.au>
+           Denis Scherbakov <denis_scherbakov@yahoo.com>
+
+       * readelf.c (slurp_ia64_unwind_table): Correct 64-bit unwind table
+       read, and merge with 32-bit case.
+
 2009-04-27  Anthony Green  <green@moxielogic.com>
 
        * NEWS: Mention verilog support added to bfd.
index d1dea7b339e2e1fa663cf062ac6de23edd2d04cf..a7e7b05a50f46a5b3686cdcdabd4cca4d0bbd588 100644 (file)
@@ -4975,23 +4975,14 @@ slurp_ia64_unwind_table (FILE * file,
 
   aux->table = xcmalloc (size / (3 * eh_addr_size), sizeof (aux->table[0]));
   tep = aux->table;
-  for (tp = table; tp < table + size; tp += 3 * eh_addr_size, ++tep)
+  for (tp = table; tp < table + size; ++tep)
     {
       tep->start.section = SHN_UNDEF;
       tep->end.section   = SHN_UNDEF;
       tep->info.section  = SHN_UNDEF;
-      if (is_32bit_elf)
-       {
-         tep->start.offset = byte_get ((unsigned char *) tp + 0, 4);
-         tep->end.offset   = byte_get ((unsigned char *) tp + 4, 4);
-         tep->info.offset  = byte_get ((unsigned char *) tp + 8, 4);
-       }
-      else
-       {
-         tep->start.offset = BYTE_GET ((unsigned char *) tp +  0);
-         tep->end.offset   = BYTE_GET ((unsigned char *) tp +  8);
-         tep->info.offset  = BYTE_GET ((unsigned char *) tp + 16);
-       }
+      tep->start.offset = byte_get (tp, eh_addr_size); tp += eh_addr_size;
+      tep->end.offset   = byte_get (tp, eh_addr_size); tp += eh_addr_size;
+      tep->info.offset  = byte_get (tp, eh_addr_size); tp += eh_addr_size;
       tep->start.offset += aux->seg_base;
       tep->end.offset   += aux->seg_base;
       tep->info.offset  += aux->seg_base;