Set TEXTREL correctly when using a SECTIONS clause.

This commit is contained in:
Ian Lance Taylor
2008-02-12 00:24:00 +00:00
parent 0e43bb4edd
commit 4e8fe71f6c

View File

@ -2168,16 +2168,38 @@ Layout::finish_dynamic_section(const Input_objects* input_objects,
// Look for text segments that have dynamic relocations.
bool have_textrel = false;
for (Segment_list::const_iterator p = this->segment_list_.begin();
p != this->segment_list_.end();
++p)
if (!this->script_options_->saw_sections_clause())
{
if (((*p)->flags() & elfcpp::PF_W) == 0
&& (*p)->dynamic_reloc_count() > 0)
{
have_textrel = true;
break;
}
for (Segment_list::const_iterator p = this->segment_list_.begin();
p != this->segment_list_.end();
++p)
{
if (((*p)->flags() & elfcpp::PF_W) == 0
&& (*p)->dynamic_reloc_count() > 0)
{
have_textrel = true;
break;
}
}
}
else
{
// We don't know the section -> segment mapping, so we are
// conservative and just look for readonly sections with
// relocations. If those sections wind up in writable segments,
// then we have created an unnecessary DT_TEXTREL entry.
for (Section_list::const_iterator p = this->section_list_.begin();
p != this->section_list_.end();
++p)
{
if (((*p)->flags() & elfcpp::SHF_ALLOC) != 0
&& ((*p)->flags() & elfcpp::SHF_WRITE) == 0
&& ((*p)->dynamic_reloc_count() > 0))
{
have_textrel = true;
break;
}
}
}
// Add a DT_FLAGS entry. We add it even if no flags are set so that