2009-04-01 Christophe Lyon <christophe.lyon@st.com>
authorChristophe Lyon <christophe.lyon@st.com>
Wed, 1 Apr 2009 15:34:12 +0000 (15:34 +0000)
committerChristophe Lyon <christophe.lyon@st.com>
Wed, 1 Apr 2009 15:34:12 +0000 (15:34 +0000)
bfd/
* elf32-arm.c (group_sections): Rewrite loops for better
readability.

bfd/ChangeLog
bfd/elf32-arm.c

index f655ab08552e8623091117e3917c350f5fa6223e..e0ed3a66a3e181849db846fcebf88f428ce6b2fc 100644 (file)
@@ -1,3 +1,8 @@
+2009-04-01  Christophe Lyon  <christophe.lyon@st.com>
+
+       * elf32-arm.c (group_sections): Rewrite loops for better
+       readability.
+
 2009-03-30  DJ Delorie  <dj@redhat.com>
 
        * elflink.c (elf_link_input_bfd): Don't try to resolve complex
index c456fdde4a9e36880768d612a9dcc5d03415b995..d8106d3d0ffbfb9e5b58c62dd6f0d34481429eba 100644 (file)
@@ -3525,7 +3525,6 @@ group_sections (struct elf32_arm_link_hash_table *htab,
     {
       asection *tail = *list;
       asection *head;
-      asection *tp;
 
       if (tail == bfd_abs_section_ptr)
        continue;
@@ -3535,38 +3534,35 @@ group_sections (struct elf32_arm_link_hash_table *htab,
         section may be required for an interrupt vector in bare metal
         code.  */
 #define NEXT_SEC PREV_SEC
-      head = tail;
-      tp = NULL;
-      for (;;)
-       {
-         asection *h = PREV_SEC (head);
-         NEXT_SEC (head) = tp;
-         if (h == NULL)
-           break;
-         tp = head;
-         head = h;
-       }
+      head = NULL;
+      while (tail != NULL)
+        {
+          /* Pop from tail.  */
+          asection *item = tail;
+          tail = PREV_SEC (item);
+
+          /* Push on head.  */
+          NEXT_SEC (item) = head;
+          head = item;
+        }
 
       while (head != NULL)
        {
          asection *curr;
          asection *next;
-         bfd_size_type total;
+         bfd_vma stub_group_start = head->output_offset;
+         bfd_vma end_of_next;
 
          curr = head;
-         total = 0;
-         while ((next = NEXT_SEC (curr)) != NULL)
+         while (NEXT_SEC (curr) != NULL)
            {
-             if ( (total + next->output_offset - curr->output_offset
-                   + next->size)
-                  < stub_group_size )
-               {
-                 total += next->output_offset - curr->output_offset;
-               }
-             else
+             next = NEXT_SEC (curr);
+             end_of_next = next->output_offset + next->size;
+             if (end_of_next - stub_group_start >= stub_group_size)
+               /* End of NEXT is too far from start, so stop.  */
                break;
-
-           curr = next;
+             /* Add NEXT to the group.  */
+             curr = next;
            }
 
          /* OK, the size from the start to the start of CURR is less
@@ -3588,18 +3584,15 @@ group_sections (struct elf32_arm_link_hash_table *htab,
             bytes after the stub section can be handled by it too.  */
          if (!stubs_always_after_branch)
            {
-             total = head->size;
+             stub_group_start = curr->output_offset + curr->size;
+
              while (next != NULL)
                {
-                 if ( (total + next->output_offset - head->output_offset
-                       + next->size)
-                      < stub_group_size )
-                   {
-                     total += next->output_offset - head->output_offset;
-                   }
-                 else
+                 end_of_next = next->output_offset + next->size;
+                 if (end_of_next - stub_group_start >= stub_group_size)
+                   /* End of NEXT is too far from stubs, so stop.  */
                    break;
-
+                 /* Add NEXT to the stub group.  */
                  head = next;
                  next = NEXT_SEC (head);
                  htab->stub_group[head->id].link_sec = curr;