From 30288845d67c64d07905c1e4ca9de4768d3b2dd8 Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Thu, 14 Sep 2006 12:11:33 +0000 Subject: PR 3182 * elf.c (_bfd_elf_copy_private_header_data): Fix group members that have had their SHT_GROUP section removed. * objcopy.c (group_signature): New function, split out from.. (setup_section): ..here. (is_strip_section): Return true for SHT_GROUP sections that are going to lose their group signature symbol. --- bfd/ChangeLog | 6 ++++++ bfd/elf.c | 23 +++++++++++++++++++++++ 2 files changed, 29 insertions(+) (limited to 'bfd') diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 1e22c44..8222b43 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,9 @@ +2006-09-14 Alan Modra + + PR 3182 + * elf.c (_bfd_elf_copy_private_header_data): Fix group members + that have had their SHT_GROUP section removed. + 2006-09-12 H.J. Lu PR ld/3197 diff --git a/bfd/elf.c b/bfd/elf.c index e47f266..ce8f4bc 100644 --- a/bfd/elf.c +++ b/bfd/elf.c @@ -6012,6 +6012,8 @@ _bfd_elf_copy_private_section_data (bfd *ibfd, bfd_boolean _bfd_elf_copy_private_header_data (bfd *ibfd, bfd *obfd) { + asection *isec; + if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour || bfd_get_flavour (obfd) != bfd_target_elf_flavour) return TRUE; @@ -6027,6 +6029,27 @@ _bfd_elf_copy_private_header_data (bfd *ibfd, bfd *obfd) return FALSE; } + /* _bfd_elf_copy_private_section_data copied over the SHF_GROUP flag + but this might be wrong if we deleted the group section. */ + for (isec = ibfd->sections; isec != NULL; isec = isec->next) + if (elf_section_type (isec) == SHT_GROUP + && isec->output_section == NULL) + { + asection *first = elf_next_in_group (isec); + asection *s = first; + while (s != NULL) + { + if (s->output_section != NULL) + { + elf_section_flags (s->output_section) &= ~SHF_GROUP; + elf_group_name (s->output_section) = NULL; + } + s = elf_next_in_group (s); + if (s == first) + break; + } + } + return TRUE; } -- cgit v1.1