From 47cc2cf5192b9e5ad2f7571393127d8c378f8d66 Mon Sep 17 00:00:00 2001 From: Paul Brook Date: Thu, 25 Nov 2004 00:56:00 +0000 Subject: [PATCH] 2004-11-24 Paul Brook 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 | 4 ++++ bfd/elf.c | 25 +++++++++++++++++++++---- gas/testsuite/ChangeLog | 6 ++++++ gas/testsuite/gas/elf/group0a.d | 3 ++- gas/testsuite/gas/elf/group1a.d | 3 ++- gas/testsuite/gas/elf/section4.d | 4 ++-- 6 files changed, 37 insertions(+), 8 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index a92af7be08d..69ae520085e 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,7 @@ +2004-11-24 Paul Brook + + * elf.c (assign_section_numbers): Number SHT_GROUP sections first. + 2004-11-24 Paul Brook * elf32-arm.c (elf32_arm_swap_symbol_in): New function. diff --git a/bfd/elf.c b/bfd/elf.c index dcb5c3d586a..ff322bbcbd2 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 eb3ebd45c0c..a8514c05aa3 100644 --- a/gas/testsuite/ChangeLog +++ b/gas/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2004-11-24 Paul Brook + + * gas/elf/group0a.d: Adjust expected secion ordering. + * gas/elf/group1a.d: Ditto. + * gas/elf/section4.d: Ditto. + 2004-11-24 Nick Clifton * gas/iq2000/allinsn.exp: Remove IQ10 tests. diff --git a/gas/testsuite/gas/elf/group0a.d b/gas/testsuite/gas/elf/group0a.d index 9b2b967bab9..8aedc0caa4f 100644 --- a/gas/testsuite/gas/elf/group0a.d +++ b/gas/testsuite/gas/elf/group0a.d @@ -2,8 +2,9 @@ #name: group section #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 2db4033afea..a5b32987574 100644 --- a/gas/testsuite/gas/elf/group1a.d +++ b/gas/testsuite/gas/elf/group1a.d @@ -2,9 +2,10 @@ #name: group section with multiple sections of same name #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 2e417e7de6f..5cda69ba735 100644 --- a/gas/testsuite/gas/elf/section4.d +++ b/gas/testsuite/gas/elf/section4.d @@ -1,12 +1,12 @@ #readelf: --sections #name: label arithmetic with multiple same-name sections +#... +[ ]*\[.*\][ ]+foo[ ]+GROUP.* #... [ ]*\[.*\][ ]+\.text[ ]+PROGBITS.* #... [ ]*\[.*\][ ]+\.data[ ]+PROGBITS.* #... [ ]*\[.*\][ ]+\.text[ ]+PROGBITS.* -#... -[ ]*\[.*\][ ]+foo[ ]+GROUP.* #pass -- 2.30.2