mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-28 23:39:35 +08:00
* output.h: Formatting, whitespace.
This commit is contained in:
@ -1,3 +1,7 @@
|
|||||||
|
2012-12-03 Alan Modra <amodra@gmail.com>
|
||||||
|
|
||||||
|
* output.h: Formatting, whitespace.
|
||||||
|
|
||||||
i2012-12-03 Alan Modra <amodra@gmail.com>
|
i2012-12-03 Alan Modra <amodra@gmail.com>
|
||||||
|
|
||||||
* layout.h (Layout::get_executable_sections): Declare.
|
* layout.h (Layout::get_executable_sections): Declare.
|
||||||
|
236
gold/output.h
236
gold/output.h
@ -92,7 +92,7 @@ class Output_data
|
|||||||
bool
|
bool
|
||||||
is_data_size_fixed() const
|
is_data_size_fixed() const
|
||||||
{ return this->is_data_size_fixed_; }
|
{ return this->is_data_size_fixed_; }
|
||||||
|
|
||||||
// Return the file offset. This is only valid after
|
// Return the file offset. This is only valid after
|
||||||
// Layout::finalize is finished. For some non-allocated sections,
|
// Layout::finalize is finished. For some non-allocated sections,
|
||||||
// it may not be valid until near the end of the link.
|
// it may not be valid until near the end of the link.
|
||||||
@ -414,7 +414,7 @@ class Output_data
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Fix the data size. Once it is fixed, it cannot be changed
|
// Fix the data size. Once it is fixed, it cannot be changed
|
||||||
// and the data size remains always valid.
|
// and the data size remains always valid.
|
||||||
void
|
void
|
||||||
fix_data_size()
|
fix_data_size()
|
||||||
{
|
{
|
||||||
@ -1033,7 +1033,7 @@ class Output_reloc<elfcpp::SHT_REL, dynamic, size, big_endian>
|
|||||||
bool use_plt_offset);
|
bool use_plt_offset);
|
||||||
|
|
||||||
Output_reloc(Symbol* gsym, unsigned int type,
|
Output_reloc(Symbol* gsym, unsigned int type,
|
||||||
Sized_relobj<size, big_endian>* relobj,
|
Sized_relobj<size, big_endian>* relobj,
|
||||||
unsigned int shndx, Address address, bool is_relative,
|
unsigned int shndx, Address address, bool is_relative,
|
||||||
bool is_symbolless, bool use_plt_offset);
|
bool is_symbolless, bool use_plt_offset);
|
||||||
|
|
||||||
@ -1042,14 +1042,14 @@ class Output_reloc<elfcpp::SHT_REL, dynamic, size, big_endian>
|
|||||||
Output_reloc(Sized_relobj<size, big_endian>* relobj,
|
Output_reloc(Sized_relobj<size, big_endian>* relobj,
|
||||||
unsigned int local_sym_index, unsigned int type,
|
unsigned int local_sym_index, unsigned int type,
|
||||||
Output_data* od, Address address, bool is_relative,
|
Output_data* od, Address address, bool is_relative,
|
||||||
bool is_symbolless, bool is_section_symbol,
|
bool is_symbolless, bool is_section_symbol,
|
||||||
bool use_plt_offset);
|
bool use_plt_offset);
|
||||||
|
|
||||||
Output_reloc(Sized_relobj<size, big_endian>* relobj,
|
Output_reloc(Sized_relobj<size, big_endian>* relobj,
|
||||||
unsigned int local_sym_index, unsigned int type,
|
unsigned int local_sym_index, unsigned int type,
|
||||||
unsigned int shndx, Address address, bool is_relative,
|
unsigned int shndx, Address address, bool is_relative,
|
||||||
bool is_symbolless, bool is_section_symbol,
|
bool is_symbolless, bool is_section_symbol,
|
||||||
bool use_plt_offset);
|
bool use_plt_offset);
|
||||||
|
|
||||||
// A reloc against the STT_SECTION symbol of an output section.
|
// A reloc against the STT_SECTION symbol of an output section.
|
||||||
|
|
||||||
@ -1100,10 +1100,10 @@ class Output_reloc<elfcpp::SHT_REL, dynamic, size, big_endian>
|
|||||||
is_local_section_symbol() const
|
is_local_section_symbol() const
|
||||||
{
|
{
|
||||||
return (this->local_sym_index_ != GSYM_CODE
|
return (this->local_sym_index_ != GSYM_CODE
|
||||||
&& this->local_sym_index_ != SECTION_CODE
|
&& this->local_sym_index_ != SECTION_CODE
|
||||||
&& this->local_sym_index_ != INVALID_CODE
|
&& this->local_sym_index_ != INVALID_CODE
|
||||||
&& this->local_sym_index_ != TARGET_CODE
|
&& this->local_sym_index_ != TARGET_CODE
|
||||||
&& this->is_section_symbol_);
|
&& this->is_section_symbol_);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Return whether this is a target specific relocation.
|
// Return whether this is a target specific relocation.
|
||||||
@ -1271,7 +1271,7 @@ class Output_reloc<elfcpp::SHT_RELA, dynamic, size, big_endian>
|
|||||||
{ }
|
{ }
|
||||||
|
|
||||||
Output_reloc(Symbol* gsym, unsigned int type,
|
Output_reloc(Symbol* gsym, unsigned int type,
|
||||||
Sized_relobj<size, big_endian>* relobj,
|
Sized_relobj<size, big_endian>* relobj,
|
||||||
unsigned int shndx, Address address, Addend addend,
|
unsigned int shndx, Address address, Addend addend,
|
||||||
bool is_relative, bool is_symbolless, bool use_plt_offset)
|
bool is_relative, bool is_symbolless, bool use_plt_offset)
|
||||||
: rel_(gsym, type, relobj, shndx, address, is_relative,
|
: rel_(gsym, type, relobj, shndx, address, is_relative,
|
||||||
@ -1287,7 +1287,7 @@ class Output_reloc<elfcpp::SHT_RELA, dynamic, size, big_endian>
|
|||||||
bool is_symbolless, bool is_section_symbol,
|
bool is_symbolless, bool is_section_symbol,
|
||||||
bool use_plt_offset)
|
bool use_plt_offset)
|
||||||
: rel_(relobj, local_sym_index, type, od, address, is_relative,
|
: rel_(relobj, local_sym_index, type, od, address, is_relative,
|
||||||
is_symbolless, is_section_symbol, use_plt_offset),
|
is_symbolless, is_section_symbol, use_plt_offset),
|
||||||
addend_(addend)
|
addend_(addend)
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
@ -1298,7 +1298,7 @@ class Output_reloc<elfcpp::SHT_RELA, dynamic, size, big_endian>
|
|||||||
bool is_symbolless, bool is_section_symbol,
|
bool is_symbolless, bool is_section_symbol,
|
||||||
bool use_plt_offset)
|
bool use_plt_offset)
|
||||||
: rel_(relobj, local_sym_index, type, shndx, address, is_relative,
|
: rel_(relobj, local_sym_index, type, shndx, address, is_relative,
|
||||||
is_symbolless, is_section_symbol, use_plt_offset),
|
is_symbolless, is_section_symbol, use_plt_offset),
|
||||||
addend_(addend)
|
addend_(addend)
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
@ -1310,7 +1310,7 @@ class Output_reloc<elfcpp::SHT_RELA, dynamic, size, big_endian>
|
|||||||
{ }
|
{ }
|
||||||
|
|
||||||
Output_reloc(Output_section* os, unsigned int type,
|
Output_reloc(Output_section* os, unsigned int type,
|
||||||
Sized_relobj<size, big_endian>* relobj,
|
Sized_relobj<size, big_endian>* relobj,
|
||||||
unsigned int shndx, Address address, Addend addend,
|
unsigned int shndx, Address address, Addend addend,
|
||||||
bool is_relative)
|
bool is_relative)
|
||||||
: rel_(os, type, relobj, shndx, address, is_relative), addend_(addend)
|
: rel_(os, type, relobj, shndx, address, is_relative), addend_(addend)
|
||||||
@ -1570,14 +1570,19 @@ class Output_data_reloc<elfcpp::SHT_REL, dynamic, size, big_endian>
|
|||||||
|
|
||||||
void
|
void
|
||||||
add_global(Symbol* gsym, unsigned int type, Output_data* od, Address address)
|
add_global(Symbol* gsym, unsigned int type, Output_data* od, Address address)
|
||||||
{ this->add(od, Output_reloc_type(gsym, type, od, address, false, false, false)); }
|
{
|
||||||
|
this->add(od, Output_reloc_type(gsym, type, od, address,
|
||||||
|
false, false, false));
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
add_global(Symbol* gsym, unsigned int type, Output_data* od,
|
add_global(Symbol* gsym, unsigned int type, Output_data* od,
|
||||||
Sized_relobj<size, big_endian>* relobj,
|
Sized_relobj<size, big_endian>* relobj,
|
||||||
unsigned int shndx, Address address)
|
unsigned int shndx, Address address)
|
||||||
{ this->add(od, Output_reloc_type(gsym, type, relobj, shndx, address,
|
{
|
||||||
false, false, false)); }
|
this->add(od, Output_reloc_type(gsym, type, relobj, shndx, address,
|
||||||
|
false, false, false));
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
add_global_generic(Symbol* gsym, unsigned int type, Output_data* od,
|
add_global_generic(Symbol* gsym, unsigned int type, Output_data* od,
|
||||||
@ -1607,17 +1612,19 @@ class Output_data_reloc<elfcpp::SHT_REL, dynamic, size, big_endian>
|
|||||||
|
|
||||||
void
|
void
|
||||||
add_global_relative(Symbol* gsym, unsigned int type, Output_data* od,
|
add_global_relative(Symbol* gsym, unsigned int type, Output_data* od,
|
||||||
Address address)
|
Address address)
|
||||||
{ this->add(od, Output_reloc_type(gsym, type, od, address, true, true,
|
{
|
||||||
false)); }
|
this->add(od, Output_reloc_type(gsym, type, od, address, true, true,
|
||||||
|
false));
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
add_global_relative(Symbol* gsym, unsigned int type, Output_data* od,
|
add_global_relative(Symbol* gsym, unsigned int type, Output_data* od,
|
||||||
Sized_relobj<size, big_endian>* relobj,
|
Sized_relobj<size, big_endian>* relobj,
|
||||||
unsigned int shndx, Address address)
|
unsigned int shndx, Address address)
|
||||||
{
|
{
|
||||||
this->add(od, Output_reloc_type(gsym, type, relobj, shndx, address,
|
this->add(od, Output_reloc_type(gsym, type, relobj, shndx, address,
|
||||||
true, true, false));
|
true, true, false));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add a global relocation which does not use a symbol for the relocation,
|
// Add a global relocation which does not use a symbol for the relocation,
|
||||||
@ -1626,8 +1633,10 @@ class Output_data_reloc<elfcpp::SHT_REL, dynamic, size, big_endian>
|
|||||||
void
|
void
|
||||||
add_symbolless_global_addend(Symbol* gsym, unsigned int type,
|
add_symbolless_global_addend(Symbol* gsym, unsigned int type,
|
||||||
Output_data* od, Address address)
|
Output_data* od, Address address)
|
||||||
{ this->add(od, Output_reloc_type(gsym, type, od, address, false, true,
|
{
|
||||||
false)); }
|
this->add(od, Output_reloc_type(gsym, type, od, address, false, true,
|
||||||
|
false));
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
add_symbolless_global_addend(Symbol* gsym, unsigned int type,
|
add_symbolless_global_addend(Symbol* gsym, unsigned int type,
|
||||||
@ -1636,7 +1645,7 @@ class Output_data_reloc<elfcpp::SHT_REL, dynamic, size, big_endian>
|
|||||||
unsigned int shndx, Address address)
|
unsigned int shndx, Address address)
|
||||||
{
|
{
|
||||||
this->add(od, Output_reloc_type(gsym, type, relobj, shndx, address,
|
this->add(od, Output_reloc_type(gsym, type, relobj, shndx, address,
|
||||||
false, true, false));
|
false, true, false));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add a reloc against a local symbol.
|
// Add a reloc against a local symbol.
|
||||||
@ -1647,7 +1656,7 @@ class Output_data_reloc<elfcpp::SHT_REL, dynamic, size, big_endian>
|
|||||||
Output_data* od, Address address)
|
Output_data* od, Address address)
|
||||||
{
|
{
|
||||||
this->add(od, Output_reloc_type(relobj, local_sym_index, type, od,
|
this->add(od, Output_reloc_type(relobj, local_sym_index, type, od,
|
||||||
address, false, false, false, false));
|
address, false, false, false, false));
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -1689,17 +1698,17 @@ class Output_data_reloc<elfcpp::SHT_REL, dynamic, size, big_endian>
|
|||||||
|
|
||||||
void
|
void
|
||||||
add_local_relative(Sized_relobj<size, big_endian>* relobj,
|
add_local_relative(Sized_relobj<size, big_endian>* relobj,
|
||||||
unsigned int local_sym_index, unsigned int type,
|
unsigned int local_sym_index, unsigned int type,
|
||||||
Output_data* od, Address address)
|
Output_data* od, Address address)
|
||||||
{
|
{
|
||||||
this->add(od, Output_reloc_type(relobj, local_sym_index, type, od,
|
this->add(od, Output_reloc_type(relobj, local_sym_index, type, od,
|
||||||
address, true, true, false, false));
|
address, true, true, false, false));
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
add_local_relative(Sized_relobj<size, big_endian>* relobj,
|
add_local_relative(Sized_relobj<size, big_endian>* relobj,
|
||||||
unsigned int local_sym_index, unsigned int type,
|
unsigned int local_sym_index, unsigned int type,
|
||||||
Output_data* od, unsigned int shndx, Address address)
|
Output_data* od, unsigned int shndx, Address address)
|
||||||
{
|
{
|
||||||
this->add(od, Output_reloc_type(relobj, local_sym_index, type, shndx,
|
this->add(od, Output_reloc_type(relobj, local_sym_index, type, shndx,
|
||||||
address, true, true, false, false));
|
address, true, true, false, false));
|
||||||
@ -1714,7 +1723,7 @@ class Output_data_reloc<elfcpp::SHT_REL, dynamic, size, big_endian>
|
|||||||
Output_data* od, Address address)
|
Output_data* od, Address address)
|
||||||
{
|
{
|
||||||
this->add(od, Output_reloc_type(relobj, local_sym_index, type, od,
|
this->add(od, Output_reloc_type(relobj, local_sym_index, type, od,
|
||||||
address, false, true, false, false));
|
address, false, true, false, false));
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -1733,20 +1742,20 @@ class Output_data_reloc<elfcpp::SHT_REL, dynamic, size, big_endian>
|
|||||||
|
|
||||||
void
|
void
|
||||||
add_local_section(Sized_relobj<size, big_endian>* relobj,
|
add_local_section(Sized_relobj<size, big_endian>* relobj,
|
||||||
unsigned int input_shndx, unsigned int type,
|
unsigned int input_shndx, unsigned int type,
|
||||||
Output_data* od, Address address)
|
Output_data* od, Address address)
|
||||||
{
|
{
|
||||||
this->add(od, Output_reloc_type(relobj, input_shndx, type, od,
|
this->add(od, Output_reloc_type(relobj, input_shndx, type, od,
|
||||||
address, false, false, true, false));
|
address, false, false, true, false));
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
add_local_section(Sized_relobj<size, big_endian>* relobj,
|
add_local_section(Sized_relobj<size, big_endian>* relobj,
|
||||||
unsigned int input_shndx, unsigned int type,
|
unsigned int input_shndx, unsigned int type,
|
||||||
Output_data* od, unsigned int shndx, Address address)
|
Output_data* od, unsigned int shndx, Address address)
|
||||||
{
|
{
|
||||||
this->add(od, Output_reloc_type(relobj, input_shndx, type, shndx,
|
this->add(od, Output_reloc_type(relobj, input_shndx, type, shndx,
|
||||||
address, false, false, true, false));
|
address, false, false, true, false));
|
||||||
}
|
}
|
||||||
|
|
||||||
// A reloc against the STT_SECTION symbol of an output section.
|
// A reloc against the STT_SECTION symbol of an output section.
|
||||||
@ -1761,7 +1770,7 @@ class Output_data_reloc<elfcpp::SHT_REL, dynamic, size, big_endian>
|
|||||||
void
|
void
|
||||||
add_output_section(Output_section* os, unsigned int type, Output_data* od,
|
add_output_section(Output_section* os, unsigned int type, Output_data* od,
|
||||||
Sized_relobj<size, big_endian>* relobj,
|
Sized_relobj<size, big_endian>* relobj,
|
||||||
unsigned int shndx, Address address)
|
unsigned int shndx, Address address)
|
||||||
{ this->add(od, Output_reloc_type(os, type, relobj, shndx, address, false)); }
|
{ this->add(od, Output_reloc_type(os, type, relobj, shndx, address, false)); }
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -1866,16 +1875,20 @@ class Output_data_reloc<elfcpp::SHT_RELA, dynamic, size, big_endian>
|
|||||||
void
|
void
|
||||||
add_global(Symbol* gsym, unsigned int type, Output_data* od,
|
add_global(Symbol* gsym, unsigned int type, Output_data* od,
|
||||||
Address address, Addend addend)
|
Address address, Addend addend)
|
||||||
{ this->add(od, Output_reloc_type(gsym, type, od, address, addend,
|
{
|
||||||
false, false, false)); }
|
this->add(od, Output_reloc_type(gsym, type, od, address, addend,
|
||||||
|
false, false, false));
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
add_global(Symbol* gsym, unsigned int type, Output_data* od,
|
add_global(Symbol* gsym, unsigned int type, Output_data* od,
|
||||||
Sized_relobj<size, big_endian>* relobj,
|
Sized_relobj<size, big_endian>* relobj,
|
||||||
unsigned int shndx, Address address,
|
unsigned int shndx, Address address,
|
||||||
Addend addend)
|
Addend addend)
|
||||||
{ this->add(od, Output_reloc_type(gsym, type, relobj, shndx, address,
|
{
|
||||||
addend, false, false, false)); }
|
this->add(od, Output_reloc_type(gsym, type, relobj, shndx, address,
|
||||||
|
addend, false, false, false));
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
add_global_generic(Symbol* gsym, unsigned int type, Output_data* od,
|
add_global_generic(Symbol* gsym, unsigned int type, Output_data* od,
|
||||||
@ -1907,17 +1920,21 @@ class Output_data_reloc<elfcpp::SHT_RELA, dynamic, size, big_endian>
|
|||||||
|
|
||||||
void
|
void
|
||||||
add_global_relative(Symbol* gsym, unsigned int type, Output_data* od,
|
add_global_relative(Symbol* gsym, unsigned int type, Output_data* od,
|
||||||
Address address, Addend addend, bool use_plt_offset)
|
Address address, Addend addend, bool use_plt_offset)
|
||||||
{ this->add(od, Output_reloc_type(gsym, type, od, address, addend, true,
|
{
|
||||||
true, use_plt_offset)); }
|
this->add(od, Output_reloc_type(gsym, type, od, address, addend, true,
|
||||||
|
true, use_plt_offset));
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
add_global_relative(Symbol* gsym, unsigned int type, Output_data* od,
|
add_global_relative(Symbol* gsym, unsigned int type, Output_data* od,
|
||||||
Sized_relobj<size, big_endian>* relobj,
|
Sized_relobj<size, big_endian>* relobj,
|
||||||
unsigned int shndx, Address address, Addend addend,
|
unsigned int shndx, Address address, Addend addend,
|
||||||
bool use_plt_offset)
|
bool use_plt_offset)
|
||||||
{ this->add(od, Output_reloc_type(gsym, type, relobj, shndx, address,
|
{
|
||||||
addend, true, true, use_plt_offset)); }
|
this->add(od, Output_reloc_type(gsym, type, relobj, shndx, address,
|
||||||
|
addend, true, true, use_plt_offset));
|
||||||
|
}
|
||||||
|
|
||||||
// Add a global relocation which does not use a symbol for the relocation,
|
// Add a global relocation which does not use a symbol for the relocation,
|
||||||
// but which gets its addend from a symbol.
|
// but which gets its addend from a symbol.
|
||||||
@ -1925,16 +1942,21 @@ class Output_data_reloc<elfcpp::SHT_RELA, dynamic, size, big_endian>
|
|||||||
void
|
void
|
||||||
add_symbolless_global_addend(Symbol* gsym, unsigned int type, Output_data* od,
|
add_symbolless_global_addend(Symbol* gsym, unsigned int type, Output_data* od,
|
||||||
Address address, Addend addend)
|
Address address, Addend addend)
|
||||||
{ this->add(od, Output_reloc_type(gsym, type, od, address, addend,
|
{
|
||||||
false, true, false)); }
|
this->add(od, Output_reloc_type(gsym, type, od, address, addend,
|
||||||
|
false, true, false));
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
add_symbolless_global_addend(Symbol* gsym, unsigned int type,
|
add_symbolless_global_addend(Symbol* gsym, unsigned int type,
|
||||||
Output_data* od,
|
Output_data* od,
|
||||||
Sized_relobj<size, big_endian>* relobj,
|
Sized_relobj<size, big_endian>* relobj,
|
||||||
unsigned int shndx, Address address, Addend addend)
|
unsigned int shndx, Address address,
|
||||||
{ this->add(od, Output_reloc_type(gsym, type, relobj, shndx, address,
|
Addend addend)
|
||||||
addend, false, true, false)); }
|
{
|
||||||
|
this->add(od, Output_reloc_type(gsym, type, relobj, shndx, address,
|
||||||
|
addend, false, true, false));
|
||||||
|
}
|
||||||
|
|
||||||
// Add a reloc against a local symbol.
|
// Add a reloc against a local symbol.
|
||||||
|
|
||||||
@ -1954,8 +1976,8 @@ class Output_data_reloc<elfcpp::SHT_RELA, dynamic, size, big_endian>
|
|||||||
Addend addend)
|
Addend addend)
|
||||||
{
|
{
|
||||||
this->add(od, Output_reloc_type(relobj, local_sym_index, type, shndx,
|
this->add(od, Output_reloc_type(relobj, local_sym_index, type, shndx,
|
||||||
address, addend, false, false, false,
|
address, addend, false, false, false,
|
||||||
false));
|
false));
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -1988,9 +2010,9 @@ class Output_data_reloc<elfcpp::SHT_RELA, dynamic, size, big_endian>
|
|||||||
|
|
||||||
void
|
void
|
||||||
add_local_relative(Sized_relobj<size, big_endian>* relobj,
|
add_local_relative(Sized_relobj<size, big_endian>* relobj,
|
||||||
unsigned int local_sym_index, unsigned int type,
|
unsigned int local_sym_index, unsigned int type,
|
||||||
Output_data* od, Address address, Addend addend,
|
Output_data* od, Address address, Addend addend,
|
||||||
bool use_plt_offset)
|
bool use_plt_offset)
|
||||||
{
|
{
|
||||||
this->add(od, Output_reloc_type(relobj, local_sym_index, type, od, address,
|
this->add(od, Output_reloc_type(relobj, local_sym_index, type, od, address,
|
||||||
addend, true, true, false,
|
addend, true, true, false,
|
||||||
@ -1999,13 +2021,13 @@ class Output_data_reloc<elfcpp::SHT_RELA, dynamic, size, big_endian>
|
|||||||
|
|
||||||
void
|
void
|
||||||
add_local_relative(Sized_relobj<size, big_endian>* relobj,
|
add_local_relative(Sized_relobj<size, big_endian>* relobj,
|
||||||
unsigned int local_sym_index, unsigned int type,
|
unsigned int local_sym_index, unsigned int type,
|
||||||
Output_data* od, unsigned int shndx, Address address,
|
Output_data* od, unsigned int shndx, Address address,
|
||||||
Addend addend, bool use_plt_offset)
|
Addend addend, bool use_plt_offset)
|
||||||
{
|
{
|
||||||
this->add(od, Output_reloc_type(relobj, local_sym_index, type, shndx,
|
this->add(od, Output_reloc_type(relobj, local_sym_index, type, shndx,
|
||||||
address, addend, true, true, false,
|
address, addend, true, true, false,
|
||||||
use_plt_offset));
|
use_plt_offset));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add a local relocation which does not use a symbol for the relocation,
|
// Add a local relocation which does not use a symbol for the relocation,
|
||||||
@ -2027,8 +2049,8 @@ class Output_data_reloc<elfcpp::SHT_RELA, dynamic, size, big_endian>
|
|||||||
Address address, Addend addend)
|
Address address, Addend addend)
|
||||||
{
|
{
|
||||||
this->add(od, Output_reloc_type(relobj, local_sym_index, type, shndx,
|
this->add(od, Output_reloc_type(relobj, local_sym_index, type, shndx,
|
||||||
address, addend, false, true, false,
|
address, addend, false, true, false,
|
||||||
false));
|
false));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add a reloc against a local section symbol. This will be
|
// Add a reloc against a local section symbol. This will be
|
||||||
@ -2037,8 +2059,8 @@ class Output_data_reloc<elfcpp::SHT_RELA, dynamic, size, big_endian>
|
|||||||
|
|
||||||
void
|
void
|
||||||
add_local_section(Sized_relobj<size, big_endian>* relobj,
|
add_local_section(Sized_relobj<size, big_endian>* relobj,
|
||||||
unsigned int input_shndx, unsigned int type,
|
unsigned int input_shndx, unsigned int type,
|
||||||
Output_data* od, Address address, Addend addend)
|
Output_data* od, Address address, Addend addend)
|
||||||
{
|
{
|
||||||
this->add(od, Output_reloc_type(relobj, input_shndx, type, od, address,
|
this->add(od, Output_reloc_type(relobj, input_shndx, type, od, address,
|
||||||
addend, false, false, true, false));
|
addend, false, false, true, false));
|
||||||
@ -2051,8 +2073,8 @@ class Output_data_reloc<elfcpp::SHT_RELA, dynamic, size, big_endian>
|
|||||||
Addend addend)
|
Addend addend)
|
||||||
{
|
{
|
||||||
this->add(od, Output_reloc_type(relobj, input_shndx, type, shndx,
|
this->add(od, Output_reloc_type(relobj, input_shndx, type, shndx,
|
||||||
address, addend, false, false, true,
|
address, addend, false, false, true,
|
||||||
false));
|
false));
|
||||||
}
|
}
|
||||||
|
|
||||||
// A reloc against the STT_SECTION symbol of an output section.
|
// A reloc against the STT_SECTION symbol of an output section.
|
||||||
@ -2064,10 +2086,12 @@ class Output_data_reloc<elfcpp::SHT_RELA, dynamic, size, big_endian>
|
|||||||
|
|
||||||
void
|
void
|
||||||
add_output_section(Output_section* os, unsigned int type, Output_data* od,
|
add_output_section(Output_section* os, unsigned int type, Output_data* od,
|
||||||
Sized_relobj<size, big_endian>* relobj,
|
Sized_relobj<size, big_endian>* relobj,
|
||||||
unsigned int shndx, Address address, Addend addend)
|
unsigned int shndx, Address address, Addend addend)
|
||||||
{ this->add(od, Output_reloc_type(os, type, relobj, shndx, address,
|
{
|
||||||
addend, false)); }
|
this->add(od, Output_reloc_type(os, type, relobj, shndx, address,
|
||||||
|
addend, false));
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
add_output_section_generic(Output_section* os, unsigned int type,
|
add_output_section_generic(Output_section* os, unsigned int type,
|
||||||
@ -2123,8 +2147,10 @@ class Output_data_reloc<elfcpp::SHT_RELA, dynamic, size, big_endian>
|
|||||||
add_absolute(unsigned int type, Output_data* od,
|
add_absolute(unsigned int type, Output_data* od,
|
||||||
Sized_relobj<size, big_endian>* relobj,
|
Sized_relobj<size, big_endian>* relobj,
|
||||||
unsigned int shndx, Address address, Addend addend)
|
unsigned int shndx, Address address, Addend addend)
|
||||||
{ this->add(od, Output_reloc_type(type, relobj, shndx, address, addend,
|
{
|
||||||
false)); }
|
this->add(od, Output_reloc_type(type, relobj, shndx, address, addend,
|
||||||
|
false));
|
||||||
|
}
|
||||||
|
|
||||||
// Add a relative relocation
|
// Add a relative relocation
|
||||||
|
|
||||||
@ -2137,8 +2163,10 @@ class Output_data_reloc<elfcpp::SHT_RELA, dynamic, size, big_endian>
|
|||||||
add_relative(unsigned int type, Output_data* od,
|
add_relative(unsigned int type, Output_data* od,
|
||||||
Sized_relobj<size, big_endian>* relobj,
|
Sized_relobj<size, big_endian>* relobj,
|
||||||
unsigned int shndx, Address address, Addend addend)
|
unsigned int shndx, Address address, Addend addend)
|
||||||
{ this->add(od, Output_reloc_type(type, relobj, shndx, address, addend,
|
{
|
||||||
true)); }
|
this->add(od, Output_reloc_type(type, relobj, shndx, address, addend,
|
||||||
|
true));
|
||||||
|
}
|
||||||
|
|
||||||
// Add a target specific relocation. A target which calls this must
|
// Add a target specific relocation. A target which calls this must
|
||||||
// define the reloc_symbol_index and reloc_addend virtual functions.
|
// define the reloc_symbol_index and reloc_addend virtual functions.
|
||||||
@ -2293,13 +2321,13 @@ class Output_data_got : public Output_data_got_base
|
|||||||
// relocation of type R_TYPE for the GOT entry.
|
// relocation of type R_TYPE for the GOT entry.
|
||||||
void
|
void
|
||||||
add_global_with_rel(Symbol* gsym, unsigned int got_type,
|
add_global_with_rel(Symbol* gsym, unsigned int got_type,
|
||||||
Output_data_reloc_generic* rel_dyn, unsigned int r_type);
|
Output_data_reloc_generic* rel_dyn, unsigned int r_type);
|
||||||
|
|
||||||
// Add a pair of entries for a global symbol to the GOT, and add
|
// Add a pair of entries for a global symbol to the GOT, and add
|
||||||
// dynamic relocations of type R_TYPE_1 and R_TYPE_2, respectively.
|
// dynamic relocations of type R_TYPE_1 and R_TYPE_2, respectively.
|
||||||
void
|
void
|
||||||
add_global_pair_with_rel(Symbol* gsym, unsigned int got_type,
|
add_global_pair_with_rel(Symbol* gsym, unsigned int got_type,
|
||||||
Output_data_reloc_generic* rel_dyn,
|
Output_data_reloc_generic* rel_dyn,
|
||||||
unsigned int r_type_1, unsigned int r_type_2);
|
unsigned int r_type_1, unsigned int r_type_2);
|
||||||
|
|
||||||
// Add an entry for a local symbol to the GOT. This returns true if
|
// Add an entry for a local symbol to the GOT. This returns true if
|
||||||
@ -2335,7 +2363,7 @@ class Output_data_got : public Output_data_got_base
|
|||||||
add_local_pair_with_rel(Relobj* object, unsigned int sym_index,
|
add_local_pair_with_rel(Relobj* object, unsigned int sym_index,
|
||||||
unsigned int shndx, unsigned int got_type,
|
unsigned int shndx, unsigned int got_type,
|
||||||
Output_data_reloc_generic* rel_dyn,
|
Output_data_reloc_generic* rel_dyn,
|
||||||
unsigned int r_type);
|
unsigned int r_type);
|
||||||
|
|
||||||
// Add a pair of entries for a local symbol to the GOT, and add
|
// 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.
|
// a dynamic relocation of type R_TYPE using STN_UNDEF on the first.
|
||||||
@ -2518,7 +2546,7 @@ class Output_data_dynamic : public Output_section_data
|
|||||||
// plus a constant offset.
|
// plus a constant offset.
|
||||||
void
|
void
|
||||||
add_section_plus_offset(elfcpp::DT tag, const Output_data* od,
|
add_section_plus_offset(elfcpp::DT tag, const Output_data* od,
|
||||||
unsigned int offset)
|
unsigned int offset)
|
||||||
{ this->add_entry(Dynamic_entry(tag, od, offset)); }
|
{ this->add_entry(Dynamic_entry(tag, od, offset)); }
|
||||||
|
|
||||||
// Add a new dynamic entry with the size of output data.
|
// Add a new dynamic entry with the size of output data.
|
||||||
@ -2726,12 +2754,12 @@ class Output_relaxed_input_section : public Output_section_data_build
|
|||||||
uint64_t addralign)
|
uint64_t addralign)
|
||||||
: Output_section_data_build(addralign), relobj_(relobj), shndx_(shndx)
|
: Output_section_data_build(addralign), relobj_(relobj), shndx_(shndx)
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
// Return the Relobj of this relaxed input section.
|
// Return the Relobj of this relaxed input section.
|
||||||
Relobj*
|
Relobj*
|
||||||
relobj() const
|
relobj() const
|
||||||
{ return this->relobj_; }
|
{ return this->relobj_; }
|
||||||
|
|
||||||
// Return the section index of this relaxed input section.
|
// Return the section index of this relaxed input section.
|
||||||
unsigned int
|
unsigned int
|
||||||
shndx() const
|
shndx() const
|
||||||
@ -2781,7 +2809,7 @@ class Merge_section_properties
|
|||||||
h = (h ^ static_cast<uint64_t>(this->addralign_)) * prime;
|
h = (h ^ static_cast<uint64_t>(this->addralign_)) * prime;
|
||||||
return h;
|
return h;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Functors for associative containers.
|
// Functors for associative containers.
|
||||||
struct equal_to
|
struct equal_to
|
||||||
{
|
{
|
||||||
@ -2838,7 +2866,7 @@ class Output_section_lookup_maps
|
|||||||
// A cleared map is valid.
|
// A cleared map is valid.
|
||||||
this->is_valid_ = true;
|
this->is_valid_ = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Find a merge section by merge section properties. Return NULL if none
|
// Find a merge section by merge section properties. Return NULL if none
|
||||||
// is found.
|
// is found.
|
||||||
Output_merge_base*
|
Output_merge_base*
|
||||||
@ -2871,7 +2899,7 @@ class Output_section_lookup_maps
|
|||||||
this->merge_sections_by_properties_.insert(value);
|
this->merge_sections_by_properties_.insert(value);
|
||||||
gold_assert(result.second);
|
gold_assert(result.second);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add a mapping from a merged input section in OBJECT with index SHNDX
|
// Add a mapping from a merged input section in OBJECT with index SHNDX
|
||||||
// to a merge output section pointed by POMB.
|
// to a merge output section pointed by POMB.
|
||||||
void
|
void
|
||||||
@ -3050,7 +3078,7 @@ class Output_section : public Output_data
|
|||||||
template<int size, bool big_endian>
|
template<int size, bool big_endian>
|
||||||
off_t
|
off_t
|
||||||
add_input_section(Layout* layout, Sized_relobj_file<size, big_endian>* object,
|
add_input_section(Layout* layout, Sized_relobj_file<size, big_endian>* object,
|
||||||
unsigned int shndx, const char* name,
|
unsigned int shndx, const char* name,
|
||||||
const elfcpp::Shdr<size, big_endian>& shdr,
|
const elfcpp::Shdr<size, big_endian>& shdr,
|
||||||
unsigned int reloc_shndx, bool have_sections_script);
|
unsigned int reloc_shndx, bool have_sections_script);
|
||||||
|
|
||||||
@ -3404,7 +3432,7 @@ class Output_section : public Output_data
|
|||||||
void
|
void
|
||||||
set_segment_alignment(uint64_t align)
|
set_segment_alignment(uint64_t align)
|
||||||
{ this->segment_alignment_ = align; }
|
{ this->segment_alignment_ = align; }
|
||||||
|
|
||||||
// If a section requires postprocessing, return the buffer to use.
|
// If a section requires postprocessing, return the buffer to use.
|
||||||
unsigned char*
|
unsigned char*
|
||||||
postprocessing_buffer() const
|
postprocessing_buffer() const
|
||||||
@ -3584,7 +3612,7 @@ class Output_section : public Output_data
|
|||||||
this->p2align_ = ffsll(static_cast<long long>(addralign));
|
this->p2align_ = ffsll(static_cast<long long>(addralign));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Return the current required size, without finalization.
|
// Return the current required size, without finalization.
|
||||||
off_t
|
off_t
|
||||||
current_data_size() const;
|
current_data_size() const;
|
||||||
@ -3607,13 +3635,13 @@ class Output_section : public Output_data
|
|||||||
// parameters.
|
// parameters.
|
||||||
bool
|
bool
|
||||||
is_merge_section(bool is_string, uint64_t entsize,
|
is_merge_section(bool is_string, uint64_t entsize,
|
||||||
uint64_t addralign) const
|
uint64_t addralign) const
|
||||||
{
|
{
|
||||||
return (this->shndx_ == (is_string
|
return (this->shndx_ == (is_string
|
||||||
? MERGE_STRING_SECTION_CODE
|
? MERGE_STRING_SECTION_CODE
|
||||||
: MERGE_DATA_SECTION_CODE)
|
: MERGE_DATA_SECTION_CODE)
|
||||||
&& this->u1_.entsize == entsize
|
&& this->u1_.entsize == entsize
|
||||||
&& this->addralign() == addralign);
|
&& this->addralign() == addralign);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Return whether this is a merge section for some input section.
|
// Return whether this is a merge section for some input section.
|
||||||
@ -3652,7 +3680,7 @@ class Output_section : public Output_data
|
|||||||
gold_assert(!this->is_input_section());
|
gold_assert(!this->is_input_section());
|
||||||
return this->u2_.posd;
|
return this->u2_.posd;
|
||||||
}
|
}
|
||||||
|
|
||||||
// For a merge section, return the Output_merge_base pointer.
|
// For a merge section, return the Output_merge_base pointer.
|
||||||
Output_merge_base*
|
Output_merge_base*
|
||||||
output_merge_base() const
|
output_merge_base() const
|
||||||
@ -3674,8 +3702,8 @@ class Output_section : public Output_data
|
|||||||
set_output_section(Output_section* os)
|
set_output_section(Output_section* os)
|
||||||
{
|
{
|
||||||
gold_assert(!this->is_input_section());
|
gold_assert(!this->is_input_section());
|
||||||
Output_section_data* posd =
|
Output_section_data* posd =
|
||||||
this->is_relaxed_input_section() ? this->u2_.poris : this->u2_.posd;
|
this->is_relaxed_input_section() ? this->u2_.poris : this->u2_.posd;
|
||||||
posd->set_output_section(os);
|
posd->set_output_section(os);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3836,7 +3864,7 @@ class Output_section : public Output_data
|
|||||||
// with index SHNDX. Return NULL if none is found.
|
// with index SHNDX. Return NULL if none is found.
|
||||||
const Output_relaxed_input_section*
|
const Output_relaxed_input_section*
|
||||||
find_relaxed_input_section(const Relobj* object, unsigned int shndx) const;
|
find_relaxed_input_section(const Relobj* object, unsigned int shndx) const;
|
||||||
|
|
||||||
// Whether section offsets need adjustment due to relaxation.
|
// Whether section offsets need adjustment due to relaxation.
|
||||||
bool
|
bool
|
||||||
section_offsets_need_adjustment() const
|
section_offsets_need_adjustment() const
|
||||||
@ -4372,7 +4400,7 @@ class Output_section : public Output_data
|
|||||||
uint64_t tls_offset_;
|
uint64_t tls_offset_;
|
||||||
// Additional segment flags, specified via linker plugin, when mapping some
|
// Additional segment flags, specified via linker plugin, when mapping some
|
||||||
// input sections to unique segments.
|
// input sections to unique segments.
|
||||||
uint64_t extra_segment_flags_;
|
uint64_t extra_segment_flags_;
|
||||||
// Segment alignment specified via linker plugin, when mapping some
|
// Segment alignment specified via linker plugin, when mapping some
|
||||||
// input sections to unique segments.
|
// input sections to unique segments.
|
||||||
uint64_t segment_alignment_;
|
uint64_t segment_alignment_;
|
||||||
@ -4608,8 +4636,8 @@ class Output_segment
|
|||||||
// Set the section addresses in an Output_data_list.
|
// Set the section addresses in an Output_data_list.
|
||||||
uint64_t
|
uint64_t
|
||||||
set_section_list_addresses(Layout*, bool reset, Output_data_list*,
|
set_section_list_addresses(Layout*, bool reset, Output_data_list*,
|
||||||
uint64_t addr, off_t* poff, unsigned int* pshndx,
|
uint64_t addr, off_t* poff, unsigned int* pshndx,
|
||||||
bool* in_tls);
|
bool* in_tls);
|
||||||
|
|
||||||
// Return the number of Output_sections in an Output_data_list.
|
// Return the number of Output_sections in an Output_data_list.
|
||||||
unsigned int
|
unsigned int
|
||||||
@ -4645,7 +4673,7 @@ class Output_segment
|
|||||||
|
|
||||||
// NOTE: We want to use the copy constructor. Currently, shallow copy
|
// NOTE: We want to use the copy constructor. Currently, shallow copy
|
||||||
// works for us so we do not need to write our own copy constructor.
|
// works for us so we do not need to write our own copy constructor.
|
||||||
|
|
||||||
// The list of output data attached to this segment.
|
// The list of output data attached to this segment.
|
||||||
Output_data_list output_lists_[ORDER_MAX];
|
Output_data_list output_lists_[ORDER_MAX];
|
||||||
// The segment virtual address.
|
// The segment virtual address.
|
||||||
@ -4742,7 +4770,7 @@ class Output_file
|
|||||||
get_output_view(off_t start, size_t size)
|
get_output_view(off_t start, size_t size)
|
||||||
{
|
{
|
||||||
gold_assert(start >= 0
|
gold_assert(start >= 0
|
||||||
&& start + static_cast<off_t>(size) <= this->file_size_);
|
&& start + static_cast<off_t>(size) <= this->file_size_);
|
||||||
return this->base_ + start;
|
return this->base_ + start;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user