Allow target to set dynsym indexes.

2014-03-10  Sasa Stankovic  <Sasa.Stankovic@imgtec.com>

gold/
	* symtab.cc (Symbol_table::set_dynsym_indexes): Allow a target to set
	dynsym indexes.
	* target.h (Target::has_custom_set_dynsym_indexes): New function.
	(Target::do_has_custom_set_dynsym_indexes): New function.
	(Target::set_dynsym_indexes): New function.
	(Target::do_set_dynsym_indexes): New function.
This commit is contained in:
Cary Coutant
2014-03-10 13:33:20 -07:00
parent ce15efd88c
commit 98ff923154
3 changed files with 57 additions and 0 deletions

View File

@@ -36,6 +36,7 @@
#include "elfcpp.h"
#include "options.h"
#include "parameters.h"
#include "stringpool.h"
#include "debug.h"
namespace gold
@@ -61,6 +62,7 @@ class Output_section;
class Input_objects;
class Task;
struct Symbol_location;
class Versions;
// The abstract class for target specific handling.
@@ -453,6 +455,21 @@ class Target
entry_symbol_name() const
{ return this->pti_->entry_symbol_name; }
// Whether the target has a custom set_dynsym_indexes method.
bool
has_custom_set_dynsym_indexes() const
{ return this->do_has_custom_set_dynsym_indexes(); }
// Custom set_dynsym_indexes method for a target.
unsigned int
set_dynsym_indexes(std::vector<Symbol*>* dyn_symbols, unsigned int index,
std::vector<Symbol*>* syms, Stringpool* dynpool,
Versions* versions, Symbol_table* symtab) const
{
return this->do_set_dynsym_indexes(dyn_symbols, index, syms, dynpool,
versions, symtab);
}
protected:
// This struct holds the constant information for a child class. We
// use a struct to avoid the overhead of virtual function calls for
@@ -724,6 +741,18 @@ class Target
do_gc_mark_symbol(Symbol_table*, Symbol*) const
{ }
// This may be overridden by the child class.
virtual bool
do_has_custom_set_dynsym_indexes() const
{ return false; }
// This may be overridden by the child class.
virtual unsigned int
do_set_dynsym_indexes(std::vector<Symbol*>*, unsigned int,
std::vector<Symbol*>*, Stringpool*, Versions*,
Symbol_table*) const
{ gold_unreachable(); }
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.