summaryrefslogtreecommitdiff
path: root/gold/object.cc
diff options
context:
space:
mode:
authorVladimir Radosavljevic <Vladimir.Radosavljevic@imgtec.com>2015-12-03 15:29:17 -0800
committerCary Coutant <ccoutant@gmail.com>2015-12-03 15:29:17 -0800
commit7ef8ae7c5f352bb1ef166af0fe6a09a3d3b39f67 (patch)
tree26bf34449c9d504a4b6dfcf872eafa655ef80a92 /gold/object.cc
parente58c48b4c81f25ec08174f324990d021aad0e96e (diff)
downloadbinutils-gdb-7ef8ae7c5f352bb1ef166af0fe6a09a3d3b39f67.tar.gz
Take addend into account when making GOT entries for local symbols.
gold/ * object.cc (Sized_relobj::do_for_all_local_got_entries): Use Local_got_entry_key for searching in local_got_offsets_. * object.h (class Local_got_entry_key): New class. (Relobj::local_has_got_offset): New overloaded method. (Relobj::local_got_offset): Likewise. (Relobj::set_local_got_offset): Likewise. (Relobj::do_local_has_got_offset): Add addend argument. (Relobj::do_local_got_offset): Likewise. (Relobj::do_set_local_got_offset): Likewise. (Sized_relobj::do_local_has_got_offset): Add addend argument, and use Local_got_entry_key for searching through local_got_offsets_. (Sized_relobj::do_local_got_offset): Likewise. (Sized_relobj::do_set_local_got_offset): Likewise. (Sized_relobj::Local_got_offsets): Change type of the key from unsigned int to Local_got_entry_key, and add hash and equal_to. * output.cc (Got_entry::write): Take addend into account for calculating value of the local symbol for GOT. (Output_data_got::add_local): New definition of overloaded method. (Output_data_got::add_local_with_rel): Likewise. (Output_data_got::add_local_pair_with_rel): Likewise. * output.h (Output_data_got::add_local): New declaration of overloaded method.
Diffstat (limited to 'gold/object.cc')
-rw-r--r--gold/object.cc3
1 files changed, 2 insertions, 1 deletions
diff --git a/gold/object.cc b/gold/object.cc
index 5381addde71..54b76bd0b20 100644
--- a/gold/object.cc
+++ b/gold/object.cc
@@ -427,7 +427,8 @@ Sized_relobj<size, big_endian>::do_for_all_local_got_entries(
unsigned int nsyms = this->local_symbol_count();
for (unsigned int i = 0; i < nsyms; i++)
{
- Local_got_offsets::const_iterator p = this->local_got_offsets_.find(i);
+ Local_got_entry_key key(i, 0);
+ Local_got_offsets::const_iterator p = this->local_got_offsets_.find(key);
if (p != this->local_got_offsets_.end())
{
const Got_offset_list* got_offsets = p->second;