diff options
-rw-r--r-- | gold/ChangeLog | 7 | ||||
-rw-r--r-- | gold/arm.cc | 4 | ||||
-rw-r--r-- | gold/layout.cc | 6 |
3 files changed, 16 insertions, 1 deletions
diff --git a/gold/ChangeLog b/gold/ChangeLog index a6e6ab6..9560dab 100644 --- a/gold/ChangeLog +++ b/gold/ChangeLog @@ -1,3 +1,10 @@ +2010-10-20 Doug Kwan <dougkwan@google.com> + + * arm.cc (Arm_relobj::do_read_symbols): Warn about ARM EXIDX sections + without SHF_LINK_ORDER flags. + * layout.cc (Layout::choose_output_section): Do not filter + SHF_LINK_ORDER flag in a relocatable link. + 2010-10-17 Cary Coutant <ccoutant@google.com> * output.h (Output_segment::set_section_addresses): Change function diff --git a/gold/arm.cc b/gold/arm.cc index f13ef23..c2dc026 100644 --- a/gold/arm.cc +++ b/gold/arm.cc @@ -6662,6 +6662,10 @@ Arm_relobj<big_endian>::do_read_symbols(Read_symbols_data* sd) + text_shndx * shdr_size); this->make_exidx_input_section(i, shdr, text_shndx, text_shdr); } + // EHABI 4.4.1 requires that SHF_LINK_ORDER flag to be set. + if ((shdr.get_sh_flags() & elfcpp::SHF_LINK_ORDER) == 0) + gold_warning(_("SHF_LINK_ORDER not set in EXIDX section %s of %s"), + this->section_name(i).c_str(), this->name().c_str()); } } diff --git a/gold/layout.cc b/gold/layout.cc index 95f1de7..bc6a053 100644 --- a/gold/layout.cc +++ b/gold/layout.cc @@ -489,11 +489,15 @@ Layout::choose_output_section(const Relobj* relobj, const char* name, // Some flags in the input section should not be automatically // copied to the output section. flags &= ~ (elfcpp::SHF_INFO_LINK - | elfcpp::SHF_LINK_ORDER | elfcpp::SHF_GROUP | elfcpp::SHF_MERGE | elfcpp::SHF_STRINGS); + // We only clear the SHF_LINK_ORDER flag in for + // a non-relocatable link. + if (!parameters->options().relocatable()) + flags &= ~elfcpp::SHF_LINK_ORDER; + if (this->script_options_->saw_sections_clause()) { // We are using a SECTIONS clause, so the output section is |