PR24015, glibc-2.28 on little-endian mips32 broken
authorAlan Modra <amodra@gmail.com>
Thu, 27 Dec 2018 23:11:44 +0000 (09:41 +1030)
committerAlan Modra <amodra@gmail.com>
Fri, 28 Dec 2018 04:32:08 +0000 (15:02 +1030)
commit0e41bebb938dbe9eae7063f5321429194bfc5ab7
treeb29f3fb4479bd29ebb404d81e1d0e4f7d1f2fd75
parentcb87d9f1a49986b2eb92ac381444f4cc7c9d8a4f
PR24015, glibc-2.28 on little-endian mips32 broken

Commit 2bf2bf23da exposed a bug on targets that create common sections
other than the standard ELF SHN_COMMON.  If these are output by ld -r,
then their type becomes SHT_PROGBITS unless the target handles them
specially (eg. by elf_backend_special_sections), and if they are
merged into .bss/.sbss by ld -r then that section becomes SHT_PROGBITS.

Worse, if they are output by ld -r, then their size is increased by
bfd_generic_define_common_symbol during final link, which leads to
bogus file contents being copied to output.

For mips, it seems to me that the .scommon section should not be
output for ld -r, but I haven't made that change in this patch.

PR 24015
* elf.c (bfd_elf_get_default_section_type): Make common sections
SHT_NOBITS.
* linker.c (bfd_generic_define_common_symbol): Clear
SEC_HAS_CONTENTS.
bfd/ChangeLog
bfd/elf.c
bfd/linker.c