Don't align start of segment unless alignment is larger than page size.
This fixes an issue where a page-aligned data section, combined with -z relro, could lead to a gap between text and data segments larger than a page, and we would fail to overlap the segments in the file. gold/ * layout.cc (Layout::set_segment_offsets): Don't align start of segment unless alignment is larger than page size.
This commit is contained in:
parent
6bf045cd32
commit
a5cd8f05ca
2 changed files with 8 additions and 1 deletions
|
@ -1,3 +1,8 @@
|
|||
2015-01-09 Cary Coutant <ccoutant@google.com>
|
||||
|
||||
* layout.cc (Layout::set_segment_offsets): Don't align start of segment
|
||||
unless alignment is larger than page size.
|
||||
|
||||
2015-01-06 H.J. Lu <hongjiu.lu@intel.com>
|
||||
Cary Coutant <ccoutant@google.com>
|
||||
|
||||
|
|
|
@ -3524,7 +3524,9 @@ Layout::set_segment_offsets(const Target* target, Output_segment* load_seg,
|
|||
// put them on different pages in memory. We will revisit this
|
||||
// decision once we know the size of the segment.
|
||||
|
||||
addr = align_address(addr, (*p)->maximum_alignment());
|
||||
uint64_t max_align = (*p)->maximum_alignment();
|
||||
if (max_align > abi_pagesize)
|
||||
addr = align_address(addr, max_align);
|
||||
aligned_addr = addr;
|
||||
|
||||
if (load_seg == *p)
|
||||
|
|
Loading…
Reference in a new issue