diff options
author | Ian Lance Taylor <ian@airs.com> | 2009-12-30 19:29:20 +0000 |
---|---|---|
committer | Ian Lance Taylor <ian@airs.com> | 2009-12-30 19:29:20 +0000 |
commit | b3436455189b8cedb9571bd75195e0c92682bfb3 (patch) | |
tree | bbec8d557eb38320cbf46641910f2a7014c81c78 /gold/output.cc | |
parent | 14c112926c6c52e5d2dd3d9213566fd53d26dfe9 (diff) | |
download | binutils-redhat-b3436455189b8cedb9571bd75195e0c92682bfb3.tar.gz |
PR 10450
* output.cc (Output_segment::Output_segment): If PT_TLS, set the
flags to PF_R.
(Output_segment::add_output_section): Don't change the flags if
the type is PT_TLS.
Diffstat (limited to 'gold/output.cc')
-rw-r--r-- | gold/output.cc | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/gold/output.cc b/gold/output.cc index e643fb76f4..8f1060ed3f 100644 --- a/gold/output.cc +++ b/gold/output.cc @@ -3063,6 +3063,10 @@ Output_segment::Output_segment(elfcpp::Elf_Word type, elfcpp::Elf_Word flags) are_addresses_set_(false), is_large_data_segment_(false) { + // The ELF ABI specifies that a PT_TLS segment always has PF_R as + // the flags. + if (type == elfcpp::PT_TLS) + this->flags_ = elfcpp::PF_R; } // Add an Output_section to an Output_segment. @@ -3077,8 +3081,11 @@ Output_segment::add_output_section(Output_section* os, gold_assert(os->is_large_data_section() == this->is_large_data_segment()); gold_assert(this->type() == elfcpp::PT_LOAD || !do_sort); - // Update the segment flags. - this->flags_ |= seg_flags; + // Update the segment flags. The ELF ABI specifies that a PT_TLS + // segment should always have PF_R as the flags, regardless of the + // associated sections. + if (this->type() != elfcpp::PT_TLS) + this->flags_ |= seg_flags; Output_segment::Output_data_list* pdl; if (os->type() == elfcpp::SHT_NOBITS) |