From 2d0f9ad979091f0f49a4a5dc3d4536f3b5071707 Mon Sep 17 00:00:00 2001 From: Joseph Myers Date: Fri, 6 Feb 2009 14:11:00 +0000 Subject: [PATCH] * elfxx-mips.c (_bfd_mips_elf_section_processing): Remove special .sbss handling. --- bfd/ChangeLog | 5 +++++ bfd/elfxx-mips.c | 12 +++++++----- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index de0f5960905..b118fa2921d 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,8 @@ +2009-02-06 Joseph Myers + + * elfxx-mips.c (_bfd_mips_elf_section_processing): Remove special + .sbss handling. + 2009-02-04 Alan Modra * elf32-spu.c (spu_elf_build_stubs): Define __icache_neg_log2_linesize. diff --git a/bfd/elfxx-mips.c b/bfd/elfxx-mips.c index 5a345f4482a..94d56be9671 100644 --- a/bfd/elfxx-mips.c +++ b/bfd/elfxx-mips.c @@ -6249,6 +6249,13 @@ _bfd_mips_elf_section_processing (bfd *abfd, Elf_Internal_Shdr *hdr) { const char *name = bfd_get_section_name (abfd, hdr->bfd_section); + /* .sbss is not handled specially here because the GNU/Linux + prelinker can convert .sbss from NOBITS to PROGBITS and + changing it back to NOBITS breaks the binary. The entry in + _bfd_mips_elf_special_sections will ensure the correct flags + are set on .sbss if BFD creates it without reading it from an + input file, and without special handling here the flags set + on it in an input file will be followed. */ if (strcmp (name, ".sdata") == 0 || strcmp (name, ".lit8") == 0 || strcmp (name, ".lit4") == 0) @@ -6256,11 +6263,6 @@ _bfd_mips_elf_section_processing (bfd *abfd, Elf_Internal_Shdr *hdr) hdr->sh_flags |= SHF_ALLOC | SHF_WRITE | SHF_MIPS_GPREL; hdr->sh_type = SHT_PROGBITS; } - else if (strcmp (name, ".sbss") == 0) - { - hdr->sh_flags |= SHF_ALLOC | SHF_WRITE | SHF_MIPS_GPREL; - hdr->sh_type = SHT_NOBITS; - } else if (strcmp (name, ".srdata") == 0) { hdr->sh_flags |= SHF_ALLOC | SHF_MIPS_GPREL; -- 2.30.2