diff options
author | Cary Coutant <ccoutant@google.com> | 2014-03-10 13:35:53 -0700 |
---|---|---|
committer | Cary Coutant <ccoutant@google.com> | 2014-03-10 13:35:53 -0700 |
commit | 800d982336156359cad5f98ba26a249a94f13108 (patch) | |
tree | e7ff1c14daead3937a629a34ba91d2b53a047c53 | |
parent | 918fc1f8d23c634227c871b67ccb4ed32d0df83c (diff) | |
download | fsf-binutils-gdb-800d982336156359cad5f98ba26a249a94f13108.zip fsf-binutils-gdb-800d982336156359cad5f98ba26a249a94f13108.tar.gz fsf-binutils-gdb-800d982336156359cad5f98ba26a249a94f13108.tar.bz2 |
Allow target to adjust dynamic symbol value.
2014-03-10 Sasa Stankovic <Sasa.Stankovic@imgtec.com>
gold/
* symtab.cc (Symbol_table::sized_write_globals): Allow a target to
adjust dynamic symbol value.
* target.h (Target::adjust_dyn_symbol): New function.
(Target::do_adjust_dyn_symbol): New function.
-rw-r--r-- | gold/ChangeLog | 7 | ||||
-rw-r--r-- | gold/symtab.cc | 2 | ||||
-rw-r--r-- | gold/target.h | 10 |
3 files changed, 19 insertions, 0 deletions
diff --git a/gold/ChangeLog b/gold/ChangeLog index c29eb1e..21e23d3 100644 --- a/gold/ChangeLog +++ b/gold/ChangeLog @@ -1,4 +1,11 @@ 2014-03-10 Sasa Stankovic <Sasa.Stankovic@imgtec.com> + + * symtab.cc (Symbol_table::sized_write_globals): Allow a target to + adjust dynamic symbol value. + * target.h (Target::adjust_dyn_symbol): New function. + (Target::do_adjust_dyn_symbol): New function. + +2014-03-10 Sasa Stankovic <Sasa.Stankovic@imgtec.com> * output.cc (Output_data_dynamic::Dynamic_entry::write): Get the value of DYNAMIC_CUSTOM dynamic entry. diff --git a/gold/symtab.cc b/gold/symtab.cc index 87173b2..2a00d56 100644 --- a/gold/symtab.cc +++ b/gold/symtab.cc @@ -3012,6 +3012,8 @@ Symbol_table::sized_write_globals(const Stringpool* sympool, unsigned char* pd = dynamic_view + (dynsym_index * sym_size); this->sized_write_symbol<size, big_endian>(sym, dynsym_value, shndx, binding, dynpool, pd); + // Allow a target to adjust dynamic symbol value. + parameters->target().adjust_dyn_symbol(sym, pd); } } diff --git a/gold/target.h b/gold/target.h index bd51250..aaf4b1c 100644 --- a/gold/target.h +++ b/gold/target.h @@ -475,6 +475,11 @@ class Target dynamic_tag_custom_value(elfcpp::DT tag) const { return this->do_dynamic_tag_custom_value(tag); } + // Adjust the value written to the dynamic symbol table. + void + adjust_dyn_symbol(const Symbol* sym, unsigned char* view) const + { this->do_adjust_dyn_symbol(sym, view); } + protected: // This struct holds the constant information for a child class. We // use a struct to avoid the overhead of virtual function calls for @@ -763,6 +768,11 @@ class Target do_dynamic_tag_custom_value(elfcpp::DT) const { gold_unreachable(); } + // This may be overridden by the child class. + virtual void + do_adjust_dyn_symbol(const Symbol*, unsigned char*) const + { } + 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. |