* reloc16.c (bfd_coff_reloc16_relax_section): Count the total number
authorJeff Law <law@redhat.com>
Tue, 14 Mar 2000 17:50:00 +0000 (17:50 +0000)
committerJeff Law <law@redhat.com>
Tue, 14 Mar 2000 17:50:00 +0000 (17:50 +0000)
        of shrinks properly, including the last reloc.

bfd/ChangeLog
bfd/reloc16.c

index 5247acf..e931e32 100644 (file)
@@ -1,3 +1,8 @@
+2000-03-14  Kazu Hirata  <kazu@hxi.com>
+
+       * reloc16.c (bfd_coff_reloc16_relax_section): Count the total number
+       of shrinks properly, including the last reloc.
+
 2000-03-13  Kazu Hirata  <kazu@hxi.com>
 
        * coff-h8300.c (h8300_reloc16_extra_cases): Fix the sanity
index fd8758a..0e7c18a 100644 (file)
@@ -195,9 +195,10 @@ bfd_coff_reloc16_relax_section (abfd, i, link_info, again)
     {
       int another_pass = 0;
 
-      /* Allocate and initialize the shrinks array for this section.  */
-      shrinks = (int *) bfd_malloc (reloc_count * sizeof (int));
-      memset (shrinks, 0, reloc_count * sizeof (int));
+      /* Allocate and initialize the shrinks array for this section.
+         The last element is used as an accumlator of shrinks.  */
+      shrinks = (int *) bfd_malloc ((reloc_count + 1) * sizeof (int));
+      memset (shrinks, 0, (reloc_count + 1) * sizeof (int));
 
       /* Loop until nothing changes in this section.  */
       do {
@@ -219,13 +220,14 @@ bfd_coff_reloc16_relax_section (abfd, i, link_info, again)
            if (shrink != shrinks[i])
              {
                another_pass = 1;
-               for (j = i + 1; j < reloc_count; j++)
+               for (j = i + 1; j <= reloc_count; j++)
                  shrinks[j] += shrink - shrinks[i];
              }
          }
   
       } while (another_pass);
 
+      shrink = shrinks[reloc_count];
       free((char *)shrinks);
     }