bfd/
	* elf.c (assign_file_positions_for_load_sections): Set sh_offset for
	.tbss, and page align same for all SHT_NOBITS sections.
ld/
	* ldlang.c (lang_output_section_find_by_flags): Match orphan .sdata2
	like sections to existing .sdata2, and similarly for orphan TLS
	sections.
	* emultempl/elf32.em (place_orphan): Exclude .tbss from orphan_bss.
This commit is contained in:
Alan Modra 2011-05-23 05:41:01 +00:00
parent 3bd61671c3
commit 6de6a7fe35
4 changed files with 39 additions and 6 deletions

View File

@ -1,3 +1,9 @@
2011-05-23 Alan Modra <amodra@gmail.com>
PR 12763
* elf.c (assign_file_positions_for_load_sections): Set sh_offset for
.tbss, and page align same for all SHT_NOBITS sections.
2011-05-21 Alan Modra <amodra@gmail.com>
PR 12763

View File

@ -4684,11 +4684,24 @@ assign_file_positions_for_load_sections (bfd *abfd,
}
else
{
if (p->p_type == PT_LOAD)
if (p->p_type == PT_LOAD
|| (this_hdr->sh_type == SHT_NOBITS
&& (this_hdr->sh_flags & SHF_TLS) != 0
&& this_hdr->sh_offset == 0))
{
this_hdr->sh_offset = sec->filepos = off;
if (this_hdr->sh_type != SHT_NOBITS)
off += this_hdr->sh_size;
if (this_hdr->sh_type == SHT_NOBITS)
{
/* These sections don't really need sh_offset,
but give them one anyway. */
bfd_vma adjust = vma_page_aligned_bias (this_hdr->sh_addr,
off, align);
this_hdr->sh_offset = sec->filepos = off + adjust;
}
else
{
this_hdr->sh_offset = sec->filepos = off;
off += this_hdr->sh_size;
}
}
if (this_hdr->sh_type != SHT_NOBITS)

View File

@ -1,3 +1,11 @@
2011-05-23 Alan Modra <amodra@gmail.com>
PR 12763
* ldlang.c (lang_output_section_find_by_flags): Match orphan .sdata2
like sections to existing .sdata2, and similarly for orphan TLS
sections.
* emultempl/elf32.em (place_orphan): Exclude .tbss from orphan_bss.
2011-05-17 Tomohiro Kashiwada <kikairoya@gmail.com>
PR ld/12759

View File

@ -1579,8 +1579,14 @@ lang_output_section_find_by_flags (const asection *sec,
}
flags ^= sec->flags;
if (!(flags & (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD
| SEC_READONLY))
&& !(look->flags & (SEC_SMALL_DATA | SEC_THREAD_LOCAL)))
| SEC_READONLY | SEC_SMALL_DATA))
|| (!(flags & (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD
| SEC_READONLY))
&& !(look->flags & SEC_SMALL_DATA))
|| (!(flags & (SEC_THREAD_LOCAL | SEC_ALLOC))
&& (look->flags & SEC_THREAD_LOCAL)
&& (!(flags & SEC_LOAD)
|| (look->flags & SEC_LOAD))))
found = look;
}
}