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:
parent
a6feecf744
commit
3832a4d892
2 changed files with 21 additions and 7 deletions
|
@ -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.
|
||||
|
|
21
bfd/elf.c
21
bfd/elf.c
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue