* arm.cc (Target_arm::do_finalize_sections): Don't add dynamic
	tags if data is discarded by linker script.
	* i386.cc (Target_i386::do_finalize_sections): Likewise.
	* powerpc.cc (Target_powerpc::do_finalize_sections): Likewise.
	* sparc.cc (Target_sparc::do_finalize_sections): Likewise.
	* x86_64.cc (Target_x86_64::do_finalize_sections): Likewise.
This commit is contained in:
Ian Lance Taylor 2009-11-04 16:35:51 +00:00
parent f5c870d25d
commit 22b127cceb
6 changed files with 36 additions and 13 deletions

View File

@ -1,3 +1,13 @@
2009-11-04 Ian Lance Taylor <iant@google.com>
PR 10887
* arm.cc (Target_arm::do_finalize_sections): Don't add dynamic
tags if data is discarded by linker script.
* i386.cc (Target_i386::do_finalize_sections): Likewise.
* powerpc.cc (Target_powerpc::do_finalize_sections): Likewise.
* sparc.cc (Target_sparc::do_finalize_sections): Likewise.
* x86_64.cc (Target_x86_64::do_finalize_sections): Likewise.
2009-11-04 Ian Lance Taylor <iant@google.com>
* layout.cc (Layout::get_output_section): Add is_interp and

View File

@ -4252,10 +4252,12 @@ Target_arm<big_endian>::do_finalize_sections(
Output_data_dynamic* const odyn = layout->dynamic_data();
if (odyn != NULL)
{
if (this->got_plt_ != NULL)
if (this->got_plt_ != NULL
&& this->got_plt_->output_section() != NULL)
odyn->add_section_address(elfcpp::DT_PLTGOT, this->got_plt_);
if (this->plt_ != NULL)
if (this->plt_ != NULL
&& this->plt_->output_section() != NULL)
{
const Output_data* od = this->plt_->rel_plt();
odyn->add_section_size(elfcpp::DT_PLTRELSZ, od);
@ -4263,7 +4265,8 @@ Target_arm<big_endian>::do_finalize_sections(
odyn->add_constant(elfcpp::DT_PLTREL, elfcpp::DT_REL);
}
if (this->rel_dyn_ != NULL)
if (this->rel_dyn_ != NULL
&& this->rel_dyn_->output_section() != NULL)
{
const Output_data* od = this->rel_dyn_;
odyn->add_section_address(elfcpp::DT_REL, od);

View File

@ -1558,10 +1558,12 @@ Target_i386::do_finalize_sections(Layout* layout, const Input_objects*)
Output_data_dynamic* const odyn = layout->dynamic_data();
if (odyn != NULL)
{
if (this->got_plt_ != NULL)
if (this->got_plt_ != NULL
&& this->got_plt_->output_section() != NULL)
odyn->add_section_address(elfcpp::DT_PLTGOT, this->got_plt_);
if (this->plt_ != NULL)
if (this->plt_ != NULL
&& this->plt_->output_section() != NULL)
{
const Output_data* od = this->plt_->rel_plt();
odyn->add_section_size(elfcpp::DT_PLTRELSZ, od);
@ -1569,7 +1571,8 @@ Target_i386::do_finalize_sections(Layout* layout, const Input_objects*)
odyn->add_constant(elfcpp::DT_PLTREL, elfcpp::DT_REL);
}
if (this->rel_dyn_ != NULL)
if (this->rel_dyn_ != NULL
&& this->rel_dyn_->output_section() != NULL)
{
const Output_data* od = this->rel_dyn_;
odyn->add_section_address(elfcpp::DT_REL, od);

View File

@ -1538,7 +1538,8 @@ Target_powerpc<size, big_endian>::do_finalize_sections(
Output_data_dynamic* const odyn = layout->dynamic_data();
if (odyn != NULL)
{
if (this->plt_ != NULL)
if (this->plt_ != NULL
&& this->plt_->output_section() != NULL)
{
const Output_data* od = this->plt_->rel_plt();
odyn->add_section_size(elfcpp::DT_PLTRELSZ, od);
@ -1548,7 +1549,8 @@ Target_powerpc<size, big_endian>::do_finalize_sections(
odyn->add_section_address(elfcpp::DT_PLTGOT, this->plt_);
}
if (this->rela_dyn_ != NULL)
if (this->rela_dyn_ != NULL
&& this->rela_dyn_->output_section() != NULL)
{
const Output_data* od = this->rela_dyn_;
odyn->add_section_address(elfcpp::DT_RELA, od);

View File

@ -2325,7 +2325,8 @@ Target_sparc<size, big_endian>::do_finalize_sections(
Output_data_dynamic* const odyn = layout->dynamic_data();
if (odyn != NULL)
{
if (this->plt_ != NULL)
if (this->plt_ != NULL
&& this->plt_->output_section() != NULL)
{
const Output_data* od = this->plt_->rel_plt();
odyn->add_section_size(elfcpp::DT_PLTRELSZ, od);
@ -2335,7 +2336,8 @@ Target_sparc<size, big_endian>::do_finalize_sections(
odyn->add_section_address(elfcpp::DT_PLTGOT, this->plt_);
}
if (this->rela_dyn_ != NULL)
if (this->rela_dyn_ != NULL
&& this->rela_dyn_->output_section() != NULL)
{
const Output_data* od = this->rela_dyn_;
odyn->add_section_address(elfcpp::DT_RELA, od);

View File

@ -1648,10 +1648,12 @@ Target_x86_64::do_finalize_sections(Layout* layout, const Input_objects*)
Output_data_dynamic* const odyn = layout->dynamic_data();
if (odyn != NULL)
{
if (this->got_plt_ != NULL)
if (this->got_plt_ != NULL
&& this->got_plt_->output_section() != NULL)
odyn->add_section_address(elfcpp::DT_PLTGOT, this->got_plt_);
if (this->plt_ != NULL)
if (this->plt_ != NULL
&& this->plt_->output_section() != NULL)
{
const Output_data* od = this->plt_->rel_plt();
odyn->add_section_size(elfcpp::DT_PLTRELSZ, od);
@ -1669,7 +1671,8 @@ Target_x86_64::do_finalize_sections(Layout* layout, const Input_objects*)
}
}
if (this->rela_dyn_ != NULL)
if (this->rela_dyn_ != NULL
&& this->rela_dyn_->output_section() != NULL)
{
const Output_data* od = this->rela_dyn_;
odyn->add_section_address(elfcpp::DT_RELA, od);