From 18ae9cc1db45e2e7f6467b91d8abbc5eb45fbaa5 Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Tue, 18 May 2010 03:31:07 +0000 Subject: Implement generic SHF_EXCLUDE. bfd/ 2010-05-18 H.J. Lu PR gas/11600 * elf.c (_bfd_elf_make_section_from_shdr): Handle SHF_EXCLUDE (elf_fake_sections): Likewise. * elf32-i370.c (i370_elf_section_from_shdr): Don't handle SHF_EXCLUDE here. * elf32-ppc.c (ppc_elf_fake_sections): Likewise. binutils/ 2010-05-18 H.J. Lu PR gas/11600 * readelf.c (get_elf_section_flags): Treat SHF_EXCLUDE as a generic flag. binutils/testsuite/ 2010-05-18 H.J. Lu PR gas/11600 * binutils-all/objcopy.exp: Run exclude-1a and exclude-1b for ELF targets. * binutils-all/exclude-1.s: New. * binutils-all/exclude-1a.d: Likewise. * binutils-all/exclude-1b.d: Likewise. gas/ 2010-05-18 H.J. Lu PR gas/11600 * obj-elf.c (obj_elf_change_section): Handle SHF_EXCLUDE. (obj_elf_parse_section_letters): Likewise. (obj_elf_section_word): Likewise. * config/tc-ppc.c (ppc_section_letter): Removed. (ppc_section_word): Likewise. * config/tc-ppc.h (ppc_section_letter): Likewise. (ppc_section_word): Likewise. (md_elf_section_letter): Likewise. (md_elf_section_word): Likewise. * doc/as.texinfo: Document `e' and `#exclude'. gas/testsuite/ 2010-05-18 H.J. Lu PR gas/11600 * gas/elf/elf.exp: Run section8. * gas/elf/section8.d: New. * gas/elf/section8.s: Likewise. include/elf/ 2010-05-18 H.J. Lu PR gas/11600 * common.h (SHF_EXCLUDE): New. * i370.h (SHF_EXCLUDE): Removed. * or32.h (SHF_EXCLUDE): Likewise. * ppc.h (SHF_EXCLUDE): Likewise. * sparc.h (SHF_EXCLUDE): Likewise. ld/testsuite/ 2010-05-18 H.J. Lu PR gas/11600 * ld-elf/exclude3.s: New. * ld-elf/exclude3a.d: Likewise. * ld-elf/exclude3b.d: Likewise. * ld-elf/exclude3c.d: Likewise. --- bfd/ChangeLog | 10 ++++++++++ bfd/elf.c | 4 ++++ bfd/elf32-i370.c | 3 --- bfd/elf32-ppc.c | 3 --- 4 files changed, 14 insertions(+), 6 deletions(-) (limited to 'bfd') diff --git a/bfd/ChangeLog b/bfd/ChangeLog index f5dc25e..8c3eb13 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,13 @@ +2010-05-18 H.J. Lu + + PR gas/11600 + * elf.c (_bfd_elf_make_section_from_shdr): Handle SHF_EXCLUDE + (elf_fake_sections): Likewise. + + * elf32-i370.c (i370_elf_section_from_shdr): Don't handle + SHF_EXCLUDE here. + * elf32-ppc.c (ppc_elf_fake_sections): Likewise. + 2010-05-17 Tristan Gingold * vms-alpha.c: Include esgps.h and eidc.h. diff --git a/bfd/elf.c b/bfd/elf.c index a5a24c5..0fa75d2 100644 --- a/bfd/elf.c +++ b/bfd/elf.c @@ -876,6 +876,8 @@ _bfd_elf_make_section_from_shdr (bfd *abfd, return FALSE; if ((hdr->sh_flags & SHF_TLS) != 0) flags |= SEC_THREAD_LOCAL; + if ((hdr->sh_flags & SHF_EXCLUDE) != 0) + flags |= SEC_EXCLUDE; if ((flags & SEC_ALLOC) == 0) { @@ -2627,6 +2629,8 @@ elf_fake_sections (bfd *abfd, asection *asect, void *failedptrarg) } } } + if ((asect->flags & (SEC_GROUP | SEC_EXCLUDE)) == SEC_EXCLUDE) + this_hdr->sh_flags |= SHF_EXCLUDE; /* Check for processor-specific section types. */ sh_type = this_hdr->sh_type; diff --git a/bfd/elf32-i370.c b/bfd/elf32-i370.c index c419edd..ff0208e 100644 --- a/bfd/elf32-i370.c +++ b/bfd/elf32-i370.c @@ -375,9 +375,6 @@ i370_elf_section_from_shdr (bfd *abfd, newsect = hdr->bfd_section; flags = bfd_get_section_flags (abfd, newsect); - if (hdr->sh_flags & SHF_EXCLUDE) - flags |= SEC_EXCLUDE; - if (hdr->sh_type == SHT_ORDERED) flags |= SEC_SORT_ENTRIES; diff --git a/bfd/elf32-ppc.c b/bfd/elf32-ppc.c index 28274c4..1580599 100644 --- a/bfd/elf32-ppc.c +++ b/bfd/elf32-ppc.c @@ -1994,9 +1994,6 @@ ppc_elf_fake_sections (bfd *abfd ATTRIBUTE_UNUSED, Elf_Internal_Shdr *shdr, asection *asect) { - if ((asect->flags & (SEC_GROUP | SEC_EXCLUDE)) == SEC_EXCLUDE) - shdr->sh_flags |= SHF_EXCLUDE; - if ((asect->flags & SEC_SORT_ENTRIES) != 0) shdr->sh_type = SHT_ORDERED; -- cgit v1.1