mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-08-06 14:49:38 +08:00
[GOLD] Output_data_got tidy
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.
This commit is contained in:
@ -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.
|
||||
// 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)
|
||||
{ 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.
|
||||
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.
|
||||
|
@ -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.
|
||||
|
@ -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.
|
||||
|
Reference in New Issue
Block a user