Adjust LOAD segment to generate GNU_RELRO segment
authorH.J. Lu <hjl.tools@gmail.com>
Thu, 12 Dec 2013 18:35:47 +0000 (10:35 -0800)
committerH.J. Lu <hjl.tools@gmail.com>
Wed, 8 Jan 2014 13:57:21 +0000 (05:57 -0800)
commit43a8475ca01b676fb764aaed0c4ed1cc16fc3c87
treefa782701a2a7bfcba6852cb7d9b51bb8d7650fd0
parent221fd5d598e7dcf7b953150986a501b462b99891
Adjust LOAD segment to generate GNU_RELRO segment

This patch fixes 2 GNU_RELRO segment bugs:

1. lang_size_sections didn't properly align base to the maximum
alignment power of sections between DATA_SEGMENT_ALIGN and
DATA_SEGMENT_RELRO_END.
2. ld failed to adjust LOAD segment to generate GNU_RELRO segment
when LOAD segment doesn't fit GNU_RELRO segment.  This is

https://sourceware.org/bugzilla/show_bug.cgi?id=14207

We "fixed" ld by not generating GNU_RELRO segment.  This patch
adjusts LOAD segment to generate GNU_RELRO segment.  It fixes
PR ld/16322 and at the same time it also fixes PR binutils/16323
since now we can adjust LOAD segment if it is too small.

bfd/

PR ld/14207
PR ld/16322
PR binutils/16323
* elf.c (_bfd_elf_map_sections_to_segments): Don't check section
size for PT_GNU_RELRO segment.
(assign_file_positions_for_load_sections): If PT_LOAD segment
doesn't fit PT_GNU_RELRO segment, adjust its p_filesz and p_memsz.

ld/

PR ld/14207
PR ld/16322
PR binutils/16323
* ldlang.c (lang_size_sections): Properly align RELRO base.

ld/testsuite/

PR ld/14207
PR ld/16322
PR binutils/16323
* ld-elf/pr16322.d: New file.
* ld-elf/pr16322.s: Likewise.

* ld-x86-64/pr14207.d: Expect PT_GNU_RELRO segment.
bfd/ChangeLog
bfd/elf.c
ld/ChangeLog
ld/ldlang.c
ld/testsuite/ChangeLog
ld/testsuite/ld-elf/pr16322.d [new file with mode: 0644]
ld/testsuite/ld-elf/pr16322.s [new file with mode: 0644]
ld/testsuite/ld-x86-64/pr14207.d