From: Cary Coutant Date: Fri, 2 Dec 2016 03:00:30 +0000 (-0800) Subject: Fix problem causing internal error when -z max-page-size is used. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=be2884c1ea9b96fdb04c6d244d9e7aa1b654a47a;p=binutils-gdb.git Fix problem causing internal error when -z max-page-size is used. If the default starting address is less than the new ABI page size, we end up misaligning the file header, causing an internal error. gold/ PR gold/20834 * target.h (Target::default_text_segment_address): Bump default start address up to ABI page size. --- diff --git a/gold/ChangeLog b/gold/ChangeLog index ab1181ad2e8..ea7b9f8be39 100644 --- a/gold/ChangeLog +++ b/gold/ChangeLog @@ -1,3 +1,9 @@ +2016-12-01 Cary Coutant + + PR gold/20834 + * target.h (Target::default_text_segment_address): Bump default + start address up to ABI page size. + 2016-12-01 Cary Coutant PR gold/18989 diff --git a/gold/target.h b/gold/target.h index 8e801e18278..51402c20dee 100644 --- a/gold/target.h +++ b/gold/target.h @@ -119,9 +119,19 @@ class Target { return this->pti_->dynamic_linker; } // Return the default address to use for the text segment. + // If a -z max-page-size argument has set the ABI page size + // to a value larger than the default starting address, + // bump the starting address up to the page size, to avoid + // misaligning the text segment in the file. uint64_t default_text_segment_address() const - { return this->pti_->default_text_segment_address; } + { + uint64_t addr = this->pti_->default_text_segment_address; + uint64_t pagesize = this->abi_pagesize(); + if (addr < pagesize) + addr = pagesize; + return addr; + } // Return the ABI specified page size. uint64_t