diff options
-rw-r--r-- | ld/ChangeLog | 6 | ||||
-rw-r--r-- | ld/ldlang.c | 15 |
2 files changed, 16 insertions, 5 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog index d4324ec..d6bf9ab 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,9 @@ +2015-11-19 Alan Modra <amodra@gmail.com> + + PR ld/19264 + * ldlang.c (lang_size_sections): Don't ignore .tbss when + adjusting start of relro region. + 2015-11-16 Nick Clifton <nickc@redhat.com> PR ld/19106 diff --git a/ld/ldlang.c b/ld/ldlang.c index 3841afc..c45b912 100644 --- a/ld/ldlang.c +++ b/ld/ldlang.c @@ -5457,18 +5457,23 @@ lang_size_sections (bfd_boolean *relax, bfd_boolean check_regions) /* For sections in the relro segment.. */ for (sec = link_info.output_bfd->section_last; sec; sec = sec->prev) - if (!IGNORE_SECTION (sec) + if ((sec->flags & SEC_ALLOC) != 0 && sec->vma >= expld.dataseg.base && sec->vma < expld.dataseg.relro_end - expld.dataseg.relro_offset) { /* Where do we want to put this section so that it ends as desired? */ - bfd_vma start = sec->vma; - bfd_vma end = start + sec->size; - bfd_vma bump = desired_end - end; + bfd_vma start, end, bump; + + end = start = sec->vma; + if ((sec->flags & SEC_HAS_CONTENTS) != 0 + || (sec->flags & SEC_THREAD_LOCAL) == 0) + end += sec->size; + bump = desired_end - end; /* We'd like to increase START by BUMP, but we must heed alignment so the increase might be less than optimum. */ - start += bump & ~(((bfd_vma) 1 << sec->alignment_power) - 1); + start += bump; + start &= ~(((bfd_vma) 1 << sec->alignment_power) - 1); /* This is now the desired end for the previous section. */ desired_end = start; } |