From: Richard Sandiford Date: Fri, 20 Oct 2006 07:59:44 +0000 (+0000) Subject: bfd/ X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=f6f62d6fe657686bf5e793c45bb1b325898a95df;p=binutils-gdb.git bfd/ * elfxx-mips.c (_bfd_mips_elf_modify_segment_map): Don't extend PT_DYNAMIC on GNU/Linux targets. --- diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 304783a34fd..d00759366bf 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,8 @@ +2006-10-20 Richard Sandiford + + * elfxx-mips.c (_bfd_mips_elf_modify_segment_map): Don't extend + PT_DYNAMIC on GNU/Linux targets. + 2006-10-20 Richard Sandiford * elfxx-mips.c (_bfd_mips_elf_finish_dynamic_sections): Make the diff --git a/bfd/elfxx-mips.c b/bfd/elfxx-mips.c index 34a06c8df43..5483cf2b02c 100644 --- a/bfd/elfxx-mips.c +++ b/bfd/elfxx-mips.c @@ -9329,8 +9329,18 @@ _bfd_mips_elf_modify_segment_map (bfd *abfd, m->p_flags_valid = 1; } } - if (m != NULL - && m->count == 1 && strcmp (m->sections[0]->name, ".dynamic") == 0) + /* GNU/Linux binaries do not need the extended PT_DYNAMIC section. + glibc's dynamic linker has traditionally derived the number of + tags from the p_filesz field, and sometimes allocates stack + arrays of that size. An overly-big PT_DYNAMIC segment can + be actively harmful in such cases. Making PT_DYNAMIC contain + other sections can also make life hard for the prelinker, + which might move one of the other sections to a different + PT_LOAD segment. */ + if (SGI_COMPAT (abfd) + && m != NULL + && m->count == 1 + && strcmp (m->sections[0]->name, ".dynamic") == 0) { static const char *sec_names[] = {