* elf.c (copy_elf_program_header): Do not check that PT_GNU_RELRO
	p_filesz and p_memsz are equal.  Use p_memsz as the segment size.
	(assign_file_positions_for_non_load_sections): Zap PT_GNU_RELRO
	if we don't find matching PT_LOAD when copying.
This commit is contained in:
Alan Modra 2009-03-26 12:23:52 +00:00
parent 0cc9e1d385
commit 9433b9b16e
2 changed files with 11 additions and 6 deletions

View File

@ -1,3 +1,11 @@
2009-03-26 Alan Modra <amodra@bigpond.net.au>
PR 6494
* elf.c (copy_elf_program_header): Do not check that PT_GNU_RELRO
p_filesz and p_memsz are equal. Use p_memsz as the segment size.
(assign_file_positions_for_non_load_sections): Zap PT_GNU_RELRO
if we don't find matching PT_LOAD when copying.
2009-03-25 M R Swami Reddy <MR.Swami.Reddy@nsc.com>
* elf32-crx.c (crx_elf_howto_table): Zero the src_mask field of

View File

@ -4683,13 +4683,11 @@ assign_file_positions_for_non_load_sections (bfd *abfd,
p->p_align = 1;
p->p_flags = (lp->p_flags & ~PF_W);
}
else if (link_info != NULL)
else
{
memset (p, 0, sizeof *p);
p->p_type = PT_NULL;
}
else
abort ();
}
else if (m->count != 0)
{
@ -5838,14 +5836,13 @@ copy_elf_program_header (bfd *ibfd, bfd *obfd)
map->p_align_valid = 1;
map->p_vaddr_offset = 0;
if (map->p_type == PT_GNU_RELRO
&& segment->p_filesz == segment->p_memsz)
if (map->p_type == PT_GNU_RELRO)
{
/* The PT_GNU_RELRO segment may contain the first a few
bytes in the .got.plt section even if the whole .got.plt
section isn't in the PT_GNU_RELRO segment. We won't
change the size of the PT_GNU_RELRO segment. */
map->p_size = segment->p_filesz;
map->p_size = segment->p_memsz;
map->p_size_valid = 1;
}