Summary: | ld fails to generate GNU_RELRO segment | ||
---|---|---|---|
Product: | binutils | Reporter: | H.J. Lu <hjl.tools> |
Component: | ld | Assignee: | Not yet assigned to anyone <unassigned> |
Status: | RESOLVED FIXED | ||
Severity: | normal | ||
Priority: | P2 | ||
Version: | 2.25 | ||
Target Milestone: | --- | ||
Host: | Target: | ||
Build: | Last reconfirmed: |
Description
H.J. Lu
2013-12-12 01:12:04 UTC
That is invalid since ld can't align .data.rel.ro section to 32-byte and make p_vaddr + ->p_filesz for RELO segment on page boundary without padding .data.rel.ro section. We can do better, This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "gdb and binutils". The branch, master has been updated via 43a8475ca01b676fb764aaed0c4ed1cc16fc3c87 (commit) from 221fd5d598e7dcf7b953150986a501b462b99891 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=43a8475ca01b676fb764aaed0c4ed1cc16fc3c87 commit 43a8475ca01b676fb764aaed0c4ed1cc16fc3c87 Author: H.J. Lu <hjl.tools@gmail.com> Date: Thu Dec 12 10:35:47 2013 -0800 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. ----------------------------------------------------------------------- Summary of changes: bfd/ChangeLog | 10 +++++++++ bfd/elf.c | 41 +++++++++++++++++++++++++++++++++---- ld/ChangeLog | 7 ++++++ ld/ldlang.c | 3 +- ld/testsuite/ChangeLog | 10 +++++++++ ld/testsuite/ld-elf/pr16322.d | 7 ++++++ ld/testsuite/ld-elf/pr16322.s | 6 +++++ ld/testsuite/ld-x86-64/pr14207.d | 23 +++++++++++++++++--- 8 files changed, 97 insertions(+), 10 deletions(-) create mode 100644 ld/testsuite/ld-elf/pr16322.d create mode 100644 ld/testsuite/ld-elf/pr16322.s Fixed. This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "gdb and binutils". The branch, master has been updated via eec2f3ed9f053653ed5d629eb50e08e3ee61e9bd (commit) from a2cd8cfed14491303eb8338f90e206034c5a3fe2 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=eec2f3ed9f053653ed5d629eb50e08e3ee61e9bd commit eec2f3ed9f053653ed5d629eb50e08e3ee61e9bd Author: Alan Modra <amodra@gmail.com> Date: Fri Jan 10 21:11:46 2014 +1030 Don't adjust LOAD segment to match GNU_RELRO segment Instead, fix Jakub's original code setting up the PR_GNU_RELRO header from the PT_LOAD header. PR ld/14207 PR ld/16322 PR binutils/16323 bfd/ * elf.c (assign_file_positions_for_load_sections): Revert last change. (assign_file_positions_for_non_load_sections): When setting up PT_GNU_RELRO header, don't require a corresponding PT_LOAD header that completely covers the relro region. ld/ * ldlang.c (lang_size_sections): Remove unneeded RELRO base adjust. Tidy comments. * ld.texinfo (DATA_SEGMENT_RELRO_END): Correct description. ld/testsuite/ * ld-x86-64/pr14207.d: Adjust ----------------------------------------------------------------------- Summary of changes: bfd/ChangeLog | 10 ++++++++++ bfd/elf.c | 37 ------------------------------------- ld/ChangeLog | 9 +++++++++ ld/ld.texinfo | 6 ++++-- ld/ldlang.c | 21 +++++++++------------ ld/testsuite/ChangeLog | 4 ++++ ld/testsuite/ld-x86-64/pr14207.d | 2 +- 7 files changed, 37 insertions(+), 52 deletions(-) |