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:
Cary Coutant 2015-01-09 15:55:50 -08:00
parent 6bf045cd32
commit a5cd8f05ca
2 changed files with 8 additions and 1 deletions

View file

@ -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>

View file

@ -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)