aboutsummaryrefslogtreecommitdiff
path: root/gold/target.h
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2021-08-25 21:58:51 +0930
committerAlan Modra <amodra@gmail.com>2021-09-18 08:20:11 +0930
commite4d49a0f908415edb7a7e718ef2008a96dd43f9b (patch)
treeb23f491455f9e03d32f806cd26590414f4259b73 /gold/target.h
parent2cc9ed14fae1b288bbdbd9b102b2cbc9a29bf348 (diff)
downloadbinutils-e4d49a0f908415edb7a7e718ef2008a96dd43f9b.zip
binutils-e4d49a0f908415edb7a7e718ef2008a96dd43f9b.tar.gz
binutils-e4d49a0f908415edb7a7e718ef2008a96dd43f9b.tar.bz2
[GOLD] Got_entry::write addends
This takes care of writing out GOT entries with addends. The local symbol case was already largely handled, except for passing the addend to tls_offset_for_local which might need the addend in a local_got_offset call. That's needed also in tls_offset_for_global. I'm assuming here that GOT entries for function symbols won't ever have addends, and in particular that a GOT entry referencing PLT call stub code won't want an offset into the code. PR 28192 * output.cc (Output_data_got::Got_entry::write): Include addend in global symbol value. Pass addend to tls_offset_for_*. * powerpc.cc (Target_powerpc::do_tls_offset_for_local): Handle addend. (Target_powerpc::do_tls_offset_for_global): Likewise. * s390.cc (Target_s390::do_tls_offset_for_local): Likewise. (Target_s390::do_tls_offset_for_global): Likewise. * target.h (Target::tls_offset_for_local): Add addend param. (Target::tls_offset_for_global): Likewise. (Target::do_tls_offset_for_local): Likewise. (Target::do_tls_offset_for_global): Likewise.
Diffstat (limited to 'gold/target.h')
-rw-r--r--gold/target.h15
1 files changed, 9 insertions, 6 deletions
diff --git a/gold/target.h b/gold/target.h
index 24f7111..4fce9fd 100644
--- a/gold/target.h
+++ b/gold/target.h
@@ -289,14 +289,16 @@ class Target
int64_t
tls_offset_for_local(const Relobj* object,
unsigned int symndx,
- unsigned int got_indx) const
- { return do_tls_offset_for_local(object, symndx, got_indx); }
+ unsigned int got_indx,
+ uint64_t addend) const
+ { return do_tls_offset_for_local(object, symndx, got_indx, addend); }
// Return the offset to use for the GOT_INDX'th got entry which is
// for global tls symbol GSYM.
int64_t
- tls_offset_for_global(Symbol* gsym, unsigned int got_indx) const
- { return do_tls_offset_for_global(gsym, got_indx); }
+ tls_offset_for_global(Symbol* gsym, unsigned int got_indx,
+ uint64_t addend) const
+ { return do_tls_offset_for_global(gsym, got_indx, addend); }
// For targets that use function descriptors, if LOC is the location
// of a function, modify it to point at the function entry location.
@@ -648,11 +650,12 @@ class Target
{ gold_unreachable(); }
virtual int64_t
- do_tls_offset_for_local(const Relobj*, unsigned int, unsigned int) const
+ do_tls_offset_for_local(const Relobj*, unsigned int, unsigned int,
+ uint64_t) const
{ gold_unreachable(); }
virtual int64_t
- do_tls_offset_for_global(Symbol*, unsigned int) const
+ do_tls_offset_for_global(Symbol*, unsigned int, uint64_t) const
{ gold_unreachable(); }
virtual void