OSDN Git Service

2004-11-24 Paul Brook <paul@codesourcery.com>
authorpbrook <pbrook>
Thu, 25 Nov 2004 00:55:55 +0000 (00:55 +0000)
committerpbrook <pbrook>
Thu, 25 Nov 2004 00:55:55 +0000 (00:55 +0000)
bfd/
* elf.c (assign_section_numbers): Number SHT_GROUP sections first.
gas/testsuite/
* gas/elf/group0a.d: Adjust expected secion ordering.
* gas/elf/group1a.d: Ditto.
* gas/elf/section4.d: Ditto.

bfd/ChangeLog
bfd/elf.c
gas/testsuite/ChangeLog
gas/testsuite/gas/elf/group0a.d
gas/testsuite/gas/elf/group1a.d
gas/testsuite/gas/elf/section4.d

index a92af7b..69ae520 100644 (file)
@@ -1,5 +1,9 @@
 2004-11-24  Paul Brook  <paul@codesourcery.com>
 
+       * elf.c (assign_section_numbers): Number SHT_GROUP sections first.
+
+2004-11-24  Paul Brook  <paul@codesourcery.com>
+
        * elf32-arm.c (elf32_arm_swap_symbol_in): New function.
        (elf32_arm_swap_symbol_out): New function.
        (elf32_arm_size_info): Add.
index dcb5c3d..ff322bb 100644 (file)
--- a/bfd/elf.c
+++ b/bfd/elf.c
@@ -2725,18 +2725,35 @@ assign_section_numbers (bfd *abfd)
   unsigned int section_number, secn;
   Elf_Internal_Shdr **i_shdrp;
   bfd_size_type amt;
+  struct bfd_elf_section_data *d;
 
   section_number = 1;
 
   _bfd_elf_strtab_clear_all_refs (elf_shstrtab (abfd));
 
+  /* Put SHT_GROUP sections first.  */
   for (sec = abfd->sections; sec; sec = sec->next)
     {
-      struct bfd_elf_section_data *d = elf_section_data (sec);
+      d = elf_section_data (sec);
 
-      if (section_number == SHN_LORESERVE)
-       section_number += SHN_HIRESERVE + 1 - SHN_LORESERVE;
-      d->this_idx = section_number++;
+      if (d->this_hdr.sh_type == SHT_GROUP)
+       {
+         if (section_number == SHN_LORESERVE)
+           section_number += SHN_HIRESERVE + 1 - SHN_LORESERVE;
+         d->this_idx = section_number++;
+       }
+    }
+
+  for (sec = abfd->sections; sec; sec = sec->next)
+    {
+      d = elf_section_data (sec);
+
+      if (d->this_hdr.sh_type != SHT_GROUP)
+       {
+         if (section_number == SHN_LORESERVE)
+           section_number += SHN_HIRESERVE + 1 - SHN_LORESERVE;
+         d->this_idx = section_number++;
+       }
       _bfd_elf_strtab_addref (elf_shstrtab (abfd), d->this_hdr.sh_name);
       if ((sec->flags & SEC_RELOC) == 0)
        d->rel_idx = 0;
index eb3ebd4..a8514c0 100644 (file)
@@ -1,3 +1,9 @@
+2004-11-24  Paul Brook  <paul@codesourcery.com>
+
+       * gas/elf/group0a.d: Adjust expected secion ordering.
+       * gas/elf/group1a.d: Ditto.
+       * gas/elf/section4.d: Ditto.
+
 2004-11-24  Nick Clifton  <nickc@redhat.com>
 
        * gas/iq2000/allinsn.exp: Remove IQ10 tests.
index 9b2b967..8aedc0c 100644 (file)
@@ -3,7 +3,8 @@
 #source: group0.s
 
 #...
+[      ]*\[.*\][       ]+\.foo_group[  ]+GROUP.*
+#...
 [      ]*\[.*\][       ]+\.foo[        ]+PROGBITS.*[   ]+AXG[  ]+.*
 [      ]*\[.*\][       ]+\.bar[        ]+PROGBITS.*[   ]+AG[   ]+.*
-[      ]*\[.*\][       ]+\.foo_group[  ]+GROUP.*
 #pass
index 2db4033..a5b3298 100644 (file)
@@ -3,8 +3,9 @@
 #source: group1.s
 
 #...
+[      ]*\[.*\][       ]+\.foo_group[  ]+GROUP.*
+#...
 [      ]*\[.*\][       ]+\.text[       ]+PROGBITS.*[   ]+AX[   ]+.*
 #...
 [      ]*\[.*\][       ]+\.text[       ]+PROGBITS.*[   ]+AXG[  ]+.*
-[      ]*\[.*\][       ]+\.foo_group[  ]+GROUP.*
 #pass
index 2e417e7..5cda69b 100644 (file)
@@ -2,11 +2,11 @@
 #name: label arithmetic with multiple same-name sections
 
 #...
+[      ]*\[.*\][       ]+foo[  ]+GROUP.*
+#...
 [      ]*\[.*\][       ]+\.text[       ]+PROGBITS.*
 #...
 [      ]*\[.*\][       ]+\.data[       ]+PROGBITS.*
 #...
 [      ]*\[.*\][       ]+\.text[       ]+PROGBITS.*
-#...
-[      ]*\[.*\][       ]+foo[  ]+GROUP.*
 #pass