diff options
-rw-r--r-- | gold/ChangeLog | 10 | ||||
-rw-r--r-- | gold/arm.cc | 9 | ||||
-rw-r--r-- | gold/i386.cc | 9 | ||||
-rw-r--r-- | gold/powerpc.cc | 6 | ||||
-rw-r--r-- | gold/sparc.cc | 6 | ||||
-rw-r--r-- | gold/x86_64.cc | 9 |
6 files changed, 36 insertions, 13 deletions
diff --git a/gold/ChangeLog b/gold/ChangeLog index 7cb8619..bd91f67 100644 --- a/gold/ChangeLog +++ b/gold/ChangeLog @@ -1,5 +1,15 @@ 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 is_dynamic_linker_section parameters. Change all callers. (Layout::choose_output_section): Likewise. diff --git a/gold/arm.cc b/gold/arm.cc index 8998032..e0c4a9a 100644 --- a/gold/arm.cc +++ b/gold/arm.cc @@ -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); diff --git a/gold/i386.cc b/gold/i386.cc index d0ed561..c48a019 100644 --- a/gold/i386.cc +++ b/gold/i386.cc @@ -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); diff --git a/gold/powerpc.cc b/gold/powerpc.cc index 0475f8e..8fe8877 100644 --- a/gold/powerpc.cc +++ b/gold/powerpc.cc @@ -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); diff --git a/gold/sparc.cc b/gold/sparc.cc index 25f03d1..d344af2 100644 --- a/gold/sparc.cc +++ b/gold/sparc.cc @@ -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); diff --git a/gold/x86_64.cc b/gold/x86_64.cc index c325fc0..cbc45be 100644 --- a/gold/x86_64.cc +++ b/gold/x86_64.cc @@ -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); |