aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bfd/ChangeLog4
-rw-r--r--bfd/elf.c25
-rw-r--r--gas/testsuite/ChangeLog6
-rw-r--r--gas/testsuite/gas/elf/group0a.d3
-rw-r--r--gas/testsuite/gas/elf/group1a.d3
-rw-r--r--gas/testsuite/gas/elf/section4.d4
6 files changed, 37 insertions, 8 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index a92af7b..69ae520 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -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.
diff --git a/bfd/elf.c b/bfd/elf.c
index dcb5c3d..ff322bb 100644
--- 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;
diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog
index eb3ebd4..a8514c0 100644
--- a/gas/testsuite/ChangeLog
+++ b/gas/testsuite/ChangeLog
@@ -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.
diff --git a/gas/testsuite/gas/elf/group0a.d b/gas/testsuite/gas/elf/group0a.d
index 9b2b967..8aedc0c 100644
--- a/gas/testsuite/gas/elf/group0a.d
+++ b/gas/testsuite/gas/elf/group0a.d
@@ -3,7 +3,8 @@
#source: group0.s
#...
+[ ]*\[.*\][ ]+\.foo_group[ ]+GROUP.*
+#...
[ ]*\[.*\][ ]+\.foo[ ]+PROGBITS.*[ ]+AXG[ ]+.*
[ ]*\[.*\][ ]+\.bar[ ]+PROGBITS.*[ ]+AG[ ]+.*
-[ ]*\[.*\][ ]+\.foo_group[ ]+GROUP.*
#pass
diff --git a/gas/testsuite/gas/elf/group1a.d b/gas/testsuite/gas/elf/group1a.d
index 2db4033..a5b3298 100644
--- a/gas/testsuite/gas/elf/group1a.d
+++ b/gas/testsuite/gas/elf/group1a.d
@@ -3,8 +3,9 @@
#source: group1.s
#...
+[ ]*\[.*\][ ]+\.foo_group[ ]+GROUP.*
+#...
[ ]*\[.*\][ ]+\.text[ ]+PROGBITS.*[ ]+AX[ ]+.*
#...
[ ]*\[.*\][ ]+\.text[ ]+PROGBITS.*[ ]+AXG[ ]+.*
-[ ]*\[.*\][ ]+\.foo_group[ ]+GROUP.*
#pass
diff --git a/gas/testsuite/gas/elf/section4.d b/gas/testsuite/gas/elf/section4.d
index 2e417e7..5cda69b 100644
--- a/gas/testsuite/gas/elf/section4.d
+++ b/gas/testsuite/gas/elf/section4.d
@@ -2,11 +2,11 @@
#name: label arithmetic with multiple same-name sections
#...
+[ ]*\[.*\][ ]+foo[ ]+GROUP.*
+#...
[ ]*\[.*\][ ]+\.text[ ]+PROGBITS.*
#...
[ ]*\[.*\][ ]+\.data[ ]+PROGBITS.*
#...
[ ]*\[.*\][ ]+\.text[ ]+PROGBITS.*
-#...
-[ ]*\[.*\][ ]+foo[ ]+GROUP.*
#pass