[GOLD] Output_data_got tidy
authorAlan Modra <amodra@gmail.com>
Sat, 28 Aug 2021 05:15:53 +0000 (14:45 +0930)
committerAlan Modra <amodra@gmail.com>
Fri, 17 Sep 2021 22:50:11 +0000 (08:20 +0930)
Some Output_data_got methods already have support for addends, but
were implemented as separate methods.  This removes unnecessary code
duplication.

Relobj::local_has_got_offset and others there get a similar treatment.
Comments are removed since it should be obvious without a comment, and
the existing comments are not precisely what the code does.  For
example, a local_has_got_offset call without an addend does not return
whether the local symbol has *a* GOT offset of type GOT_TYPE, it
returns whether there is a GOT entry of type GOT_TYPE for the symbol
with addend of zero.

PR 28192
* output.h (Output_data_got::add_local): Make addend optional.
(Output_data_got::add_local_with_rel): Likewise.
(Output_data_got::add_local_pair_with_rel): Likewise.
* output.cc (Output_data_got::add_local): Delete overload
without addend.
(Output_data_got::add_local_with_rel): Likewise.
(Output_data_got::add_local_pair_with_rel): Likewise.
* object.h (Relobj::local_has_got_offset): Make addend optional.
Delete overload without addend later.  Update comment.
(Relobj::local_got_offset): Likewise.
(Relobj::set_local_got_offset): Likewise.

gold/object.h
gold/output.cc
gold/output.h

index 2dbe4b3e1be4e242e55565449e03bd5a6e5c5642..dc089f5a417a5c5634b09a796d994459b59c3349 100644 (file)
@@ -1216,46 +1216,27 @@ class Relobj : public Object
   local_plt_offset(unsigned int symndx) const
   { return this->do_local_plt_offset(symndx); }
 
-  // Return whether the local symbol SYMNDX has a GOT offset of type
-  // GOT_TYPE.
-  bool
-  local_has_got_offset(unsigned int symndx, unsigned int got_type) const
-  { return this->do_local_has_got_offset(symndx, got_type, 0); }
-
-  // Return whether the local symbol SYMNDX plus ADDEND has a GOT offset
-  // of type GOT_TYPE.
+  // Return whether there is a GOT entry of type GOT_TYPE for the
+  // local symbol SYMNDX with given ADDEND.
   bool
   local_has_got_offset(unsigned int symndx, unsigned int got_type,
-                      uint64_t addend) const
+                      uint64_t addend = 0) const
   { return this->do_local_has_got_offset(symndx, got_type, addend); }
 
-  // Return the GOT offset of type GOT_TYPE of the local symbol
-  // SYMNDX.  It is an error to call this if the symbol does not have
-  // a GOT offset of the specified type.
-  unsigned int
-  local_got_offset(unsigned int symndx, unsigned int got_type) const
-  { return this->do_local_got_offset(symndx, got_type, 0); }
-
-  // Return the GOT offset of type GOT_TYPE of the local symbol
-  // SYMNDX plus ADDEND.  It is an error to call this if the symbol
-  // does not have a GOT offset of the specified type.
+  // Return the GOT offset of the GOT entry with type GOT_TYPE for the
+  // local symbol SYMNDX with given ADDEND.  It is an error to call
+  // this function if the symbol does not have such a GOT entry.
   unsigned int
   local_got_offset(unsigned int symndx, unsigned int got_type,
-                      uint64_t addend) const
+                  uint64_t addend = 0) const
   { return this->do_local_got_offset(symndx, got_type, addend); }
 
-  // Set the GOT offset with type GOT_TYPE of the local symbol SYMNDX
-  // to GOT_OFFSET.
-  void
-  set_local_got_offset(unsigned int symndx, unsigned int got_type,
-                      unsigned int got_offset)
-  { this->do_set_local_got_offset(symndx, got_type, got_offset, 0); }
-
-  // Set the GOT offset with type GOT_TYPE of the local symbol SYMNDX
-  // plus ADDEND to GOT_OFFSET.
+  // Set the GOT offset for a GOT entry with type GOT_TYPE for the
+  // local symbol SYMNDX with ADDEND to GOT_OFFSET.  Create such an
+  // entry if none exists.
   void
   set_local_got_offset(unsigned int symndx, unsigned int got_type,
-                      unsigned int got_offset, uint64_t addend)
+                      unsigned int got_offset, uint64_t addend = 0)
   { this->do_set_local_got_offset(symndx, got_type, got_offset, addend); }
 
   // Return whether the local symbol SYMNDX is a TLS symbol.
index afdba06753eb8f8b67b7f2a9cb6c23cf6966fe8e..75f54f02f23605e930eaadf80dfc30dab85a96d5 100644 (file)
@@ -1531,26 +1531,6 @@ Output_data_got<got_size, big_endian>::add_global_pair_with_rel(
                                got_offset + got_size / 8, 0);
 }
 
-// Add an entry for a local symbol to the GOT.  This returns true if
-// this is a new GOT entry, false if the symbol already has a GOT
-// entry.
-
-template<int got_size, bool big_endian>
-bool
-Output_data_got<got_size, big_endian>::add_local(
-    Relobj* object,
-    unsigned int symndx,
-    unsigned int got_type)
-{
-  if (object->local_has_got_offset(symndx, got_type))
-    return false;
-
-  unsigned int got_offset = this->add_got_entry(Got_entry(object, symndx,
-                                                         false));
-  object->set_local_got_offset(symndx, got_type, got_offset);
-  return true;
-}
-
 // Add an entry for a local symbol plus ADDEND to the GOT.  This returns
 // true if this is a new GOT entry, false if the symbol already has a GOT
 // entry.
@@ -1590,26 +1570,6 @@ Output_data_got<got_size, big_endian>::add_local_plt(
   return true;
 }
 
-// Add an entry for a local symbol to the GOT, and add a dynamic
-// relocation of type R_TYPE for the GOT entry.
-
-template<int got_size, bool big_endian>
-void
-Output_data_got<got_size, big_endian>::add_local_with_rel(
-    Relobj* object,
-    unsigned int symndx,
-    unsigned int got_type,
-    Output_data_reloc_generic* rel_dyn,
-    unsigned int r_type)
-{
-  if (object->local_has_got_offset(symndx, got_type))
-    return;
-
-  unsigned int got_offset = this->add_got_entry(Got_entry());
-  object->set_local_got_offset(symndx, got_type, got_offset);
-  rel_dyn->add_local_generic(object, symndx, r_type, this, got_offset, 0);
-}
-
 // Add an entry for a local symbol plus ADDEND to the GOT, and add a dynamic
 // relocation of type R_TYPE for the GOT entry.
 
@@ -1631,32 +1591,6 @@ Output_data_got<got_size, big_endian>::add_local_with_rel(
                              addend);
 }
 
-// Add a pair of entries for a local symbol to the GOT, and add
-// a dynamic relocation of type R_TYPE using the section symbol of
-// the output section to which input section SHNDX maps, on the first.
-// The first got entry will have a value of zero, the second the
-// value of the local symbol.
-template<int got_size, bool big_endian>
-void
-Output_data_got<got_size, big_endian>::add_local_pair_with_rel(
-    Relobj* object,
-    unsigned int symndx,
-    unsigned int shndx,
-    unsigned int got_type,
-    Output_data_reloc_generic* rel_dyn,
-    unsigned int r_type)
-{
-  if (object->local_has_got_offset(symndx, got_type))
-    return;
-
-  unsigned int got_offset =
-      this->add_got_entry_pair(Got_entry(),
-                              Got_entry(object, symndx, false));
-  object->set_local_got_offset(symndx, got_type, got_offset);
-  Output_section* os = object->output_section(shndx);
-  rel_dyn->add_output_section_generic(os, r_type, this, got_offset, 0);
-}
-
 // Add a pair of entries for a local symbol plus ADDEND to the GOT, and add
 // a dynamic relocation of type R_TYPE using the section symbol of
 // the output section to which input section SHNDX maps, on the first.
index 9c44f6259a29fd8ca9f9d126fd269ff0ae0d0cee..726c93beb5bfea5b3eab62610fb959cd8c042c06 100644 (file)
@@ -2488,18 +2488,12 @@ class Output_data_got : public Output_data_got_base
                           Output_data_reloc_generic* rel_dyn,
                           unsigned int r_type_1, unsigned int r_type_2);
 
-  // Add an entry for a local symbol to the GOT.  This returns true if
-  // this is a new GOT entry, false if the symbol already has a GOT
-  // entry.
-  bool
-  add_local(Relobj* object, unsigned int sym_index, unsigned int got_type);
-
   // Add an entry for a local symbol plus ADDEND to the GOT.  This returns
   // true if this is a new GOT entry, false if the symbol already has a GOT
   // entry.
   bool
   add_local(Relobj* object, unsigned int sym_index, unsigned int got_type,
-           uint64_t addend);
+           uint64_t addend = 0);
 
   // Like add_local, but use the PLT offset of the local symbol if it
   // has one.
@@ -2512,30 +2506,12 @@ class Output_data_got : public Output_data_got_base
   add_local_tls(Relobj* object, unsigned int sym_index, unsigned int got_type)
   { return add_local_plt(object, sym_index, got_type); }
 
-  // Add an entry for a local symbol to the GOT, and add a dynamic
-  // relocation of type R_TYPE for the GOT entry.
-  void
-  add_local_with_rel(Relobj* object, unsigned int sym_index,
-                    unsigned int got_type, Output_data_reloc_generic* rel_dyn,
-                    unsigned int r_type);
-
   // Add an entry for a local symbol plus ADDEND to the GOT, and add a dynamic
   // relocation of type R_TYPE for the GOT entry.
   void
   add_local_with_rel(Relobj* object, unsigned int sym_index,
                     unsigned int got_type, Output_data_reloc_generic* rel_dyn,
-                    unsigned int r_type, uint64_t addend);
-
-  // Add a pair of entries for a local symbol to the GOT, and add
-  // a dynamic relocation of type R_TYPE using the section symbol of
-  // the output section to which input section SHNDX maps, on the first.
-  // The first got entry will have a value of zero, the second the
-  // value of the local symbol.
-  void
-  add_local_pair_with_rel(Relobj* object, unsigned int sym_index,
-                         unsigned int shndx, unsigned int got_type,
-                         Output_data_reloc_generic* rel_dyn,
-                         unsigned int r_type);
+                    unsigned int r_type, uint64_t addend = 0);
 
   // Add a pair of entries for a local symbol plus ADDEND to the GOT, and add
   // a dynamic relocation of type R_TYPE using the section symbol of
@@ -2546,7 +2522,7 @@ class Output_data_got : public Output_data_got_base
   add_local_pair_with_rel(Relobj* object, unsigned int sym_index,
                          unsigned int shndx, unsigned int got_type,
                          Output_data_reloc_generic* rel_dyn,
-                         unsigned int r_type, uint64_t addend);
+                         unsigned int r_type, uint64_t addend = 0);
 
   // Add a pair of entries for a local symbol to the GOT, and add
   // a dynamic relocation of type R_TYPE using STN_UNDEF on the first.