The PT_DYNAMIC segment was being hard coded to have read, write, and

execute permission regardless of the underlying PT_LOAD segment permissions.
Deleting this code allows the default linker behavior which is to set the
dynamic segment to the same permissions as the sections that make it up.

This change alters one existing test case to check the segment flags for
PT_DYNAMIC.

bfd/ChangeLog
        * elfxx-mips.c(_bfd_mips_elf_modify_segment_map): Deleted hard coding of
        PT_DYNAMIC segment flags.

ld/testsuite/ChangeLog
	* ld-mips-elf/pic-and-nonpic-3a.sd: Check DYNAMIC segment flags.
This commit is contained in:
Jack Carter 2014-02-18 16:23:48 -08:00
parent c17ef0d5d2
commit 5db3e65d39
4 changed files with 10 additions and 13 deletions

View file

@ -1,3 +1,8 @@
2014-02-18 Jack Carter <jack.carter@imgtec.com>
* elfxx-mips.c(_bfd_mips_elf_modify_segment_map): Deleted hard coding of
PT_DYNAMIC segment flags.
2014-02-17 Jan Kratochvil <jan.kratochvil@redhat.com>
PR binutils/16595

View file

@ -11919,18 +11919,6 @@ _bfd_mips_elf_modify_segment_map (bfd *abfd,
if ((*pm)->p_type == PT_DYNAMIC)
break;
m = *pm;
if (m != NULL && IRIX_COMPAT (abfd) == ict_none)
{
/* For a normal mips executable the permissions for the PT_DYNAMIC
segment are read, write and execute. We do that here since
the code in elf.c sets only the read permission. This matters
sometimes for the dynamic linker. */
if (bfd_get_section_by_name (abfd, ".dynamic") != NULL)
{
m->p_flags = PF_R | PF_W | PF_X;
m->p_flags_valid = 1;
}
}
/* 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

View file

@ -1,3 +1,7 @@
2014-02-18 Jack Carter <jack.carter@imgtec.com>
* ld-mips-elf/pic-and-nonpic-3a.sd: Check DYNAMIC segment flags.
2014-02-16 Thomas Schwinge <thomas@codesourcery.com>
* ld-elfweak/elfweak.exp (setup_xfail_gnu_hurd): Remove function

View file

@ -8,7 +8,7 @@ Program Headers:
* REGINFO * [^ ]+ * 0x0+00000 * 0x0+00000 [^ ]+ * [^ ]+ * R * 0x.*
* LOAD * [^ ]+ * 0x0+00000 * 0x0+00000 [^ ]+ * [^ ]+ * R E * 0x.*
* LOAD * [^ ]+ * 0x0+10000 * 0x0+10000 [^ ]+ * [^ ]+ * RW * 0x.*
* DYNAMIC * [^ ]+ * 0x0+00400 * 0x0+00400 .*
* DYNAMIC * [^ ]+ * 0x0+00400 * 0x0+00400 [^ ]+ * [^ ]+ * R * 0x.*
* NULL * .*
*Section to Segment mapping: