aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gold/ChangeLog7
-rw-r--r--gold/layout.cc8
-rw-r--r--gold/target.h10
3 files changed, 24 insertions, 1 deletions
diff --git a/gold/ChangeLog b/gold/ChangeLog
index 4ddef9a..f1fea46 100644
--- a/gold/ChangeLog
+++ b/gold/ChangeLog
@@ -1,5 +1,12 @@
2014-04-15 Sasa Stankovic <Sasa.Stankovic@imgtec.com>
+ * layout.cc (Layout::include_section): Allow a target to decide
+ whether to include a section.
+ * target.h (Target::should_include_section): New function.
+ (Target::do_should_include_section): New function.
+
+2014-04-15 Sasa Stankovic <Sasa.Stankovic@imgtec.com>
+
* copy-relocs.cc (Copy_relocs::Copy_reloc_entry::emit): Remove and
inline into ...
(Copy_relocs::emit): ... here.
diff --git a/gold/layout.cc b/gold/layout.cc
index c96516c..02f691e 100644
--- a/gold/layout.cc
+++ b/gold/layout.cc
@@ -644,7 +644,13 @@ Layout::include_section(Sized_relobj_file<size, big_endian>*, const char* name,
&& (shdr.get_sh_flags() & elfcpp::SHF_EXCLUDE))
return false;
- switch (shdr.get_sh_type())
+ elfcpp::Elf_Word sh_type = shdr.get_sh_type();
+
+ if ((sh_type >= elfcpp::SHT_LOOS && sh_type <= elfcpp::SHT_HIOS)
+ || (sh_type >= elfcpp::SHT_LOPROC && sh_type <= elfcpp::SHT_HIPROC))
+ return parameters->target().should_include_section(sh_type);
+
+ switch (sh_type)
{
case elfcpp::SHT_NULL:
case elfcpp::SHT_SYMTAB:
diff --git a/gold/target.h b/gold/target.h
index aaf4b1c..e380591 100644
--- a/gold/target.h
+++ b/gold/target.h
@@ -480,6 +480,11 @@ class Target
adjust_dyn_symbol(const Symbol* sym, unsigned char* view) const
{ this->do_adjust_dyn_symbol(sym, view); }
+ // Return whether to include the section in the link.
+ bool
+ should_include_section(elfcpp::Elf_Word sh_type) const
+ { return this->do_should_include_section(sh_type); }
+
protected:
// This struct holds the constant information for a child class. We
// use a struct to avoid the overhead of virtual function calls for
@@ -773,6 +778,11 @@ class Target
do_adjust_dyn_symbol(const Symbol*, unsigned char*) const
{ }
+ // This may be overridden by the child class.
+ virtual bool
+ do_should_include_section(elfcpp::Elf_Word) const
+ { return true; }
+
private:
// The implementations of the four do_make_elf_object virtual functions are
// almost identical except for their sizes and endianness. We use a template.