From: Alan Modra Date: Mon, 23 May 2011 05:41:01 +0000 (+0000) Subject: PR 12763 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=6de6a7fe356bbb94c090d48366908f1eb8db6dbb;p=binutils-gdb.git PR 12763 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. --- diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 4517a4f46e6..36675c24cb4 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,9 @@ +2011-05-23 Alan Modra + + 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 PR 12763 diff --git a/bfd/elf.c b/bfd/elf.c index ffc9c8e2d53..3d44ef8d287 100644 --- a/bfd/elf.c +++ b/bfd/elf.c @@ -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) diff --git a/ld/ChangeLog b/ld/ChangeLog index d0b21575b36..2cce57b998b 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,11 @@ +2011-05-23 Alan Modra + + 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 PR ld/12759 diff --git a/ld/ldlang.c b/ld/ldlang.c index 5ccb36f514f..7cf5108e479 100644 --- a/ld/ldlang.c +++ b/ld/ldlang.c @@ -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; } }