PR ld/14207

* elf.c (_bfd_elf_map_sections_to_segments): Disregard bss type
	sections at end of PT_LOAD segment when searching for segment
	that contains end of relro extent.
This commit is contained in:
Alan Modra 2012-06-12 06:31:06 +00:00
parent a6feecf744
commit 3832a4d892
2 changed files with 21 additions and 7 deletions

View File

@ -1,3 +1,10 @@
2012-06-12 Alan Modra <amodra@gmail.com>
PR ld/14207
* elf.c (_bfd_elf_map_sections_to_segments): Disregard bss type
sections at end of PT_LOAD segment when searching for segment
that contains end of relro extent.
2012-06-11 H.J. Lu <hongjiu.lu@intel.com>
* elf.c (assign_file_positions_for_non_load_sections): Reindent.

View File

@ -4152,15 +4152,22 @@ _bfd_elf_map_sections_to_segments (bfd *abfd, struct bfd_link_info *info)
{
for (m = mfirst; m != NULL; m = m->next)
{
if (m->p_type == PT_LOAD)
if (m->p_type == PT_LOAD
&& m->count != 0
&& m->sections[0]->vma >= info->relro_start
&& m->sections[0]->vma < info->relro_end)
{
asection *last = m->sections[m->count - 1];
bfd_vma vaddr = m->sections[0]->vma;
bfd_vma filesz = last->vma - vaddr + last->size;
i = m->count;
while (--i != (unsigned) -1)
if ((m->sections[i]->flags & (SEC_LOAD | SEC_HAS_CONTENTS))
== (SEC_LOAD | SEC_HAS_CONTENTS))
break;
if (vaddr < info->relro_end
&& vaddr >= info->relro_start
&& (vaddr + filesz) >= info->relro_end)
if (i == (unsigned) -1)
continue;
if (m->sections[i]->vma + m->sections[i]->size
>= info->relro_end)
break;
}
}