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 | bb321bb1c4c33cdea5f547e727833e7f17f1cd3f (patch) | |
tree | 5fcf1e9eee23fa0b7441da455ecb709a3bfd4591 | |
parent | 553e4c1193524cadcf86e8d2d040ba8e5aa491d5 (diff) | |
download | gdb-bb321bb1c4c33cdea5f547e727833e7f17f1cd3f.zip gdb-bb321bb1c4c33cdea5f547e727833e7f17f1cd3f.tar.gz gdb-bb321bb1c4c33cdea5f547e727833e7f17f1cd3f.tar.bz2 |
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.
-rw-r--r-- | gold/ChangeLog | 6 | ||||
-rw-r--r-- | gold/output.cc | 11 |
2 files changed, 15 insertions, 2 deletions
diff --git a/gold/ChangeLog b/gold/ChangeLog index 8acaf87..12dc7f0 100644 --- a/gold/ChangeLog +++ b/gold/ChangeLog @@ -1,6 +1,12 @@ 2009-12-30 Ian Lance Taylor <iant@google.com> 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. + + PR 10450 * dynobj.cc (Dynobj::create_gnu_hash_table): Add symbols to the GNU hash table if they need a dynamic value. Otherwise, don't add them if they are defined in a dynamic object or are forced local. diff --git a/gold/output.cc b/gold/output.cc index e643fb7..8f1060e 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) |