summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gold/ChangeLog7
-rw-r--r--gold/arm.cc4
-rw-r--r--gold/layout.cc6
3 files changed, 16 insertions, 1 deletions
diff --git a/gold/ChangeLog b/gold/ChangeLog
index a6e6ab6fbf..9560dab848 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 f13ef23439..c2dc026dac 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 95f1de755a..bc6a053c48 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