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.
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.
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.
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.
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.
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
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.