forked from Imagelibrary/binutils-gdb
elfcpp/ChangeLog:
* elfcpp.h (enum SHT): Add SHT_GNU_INCREMENTAL_GOT_PLT. gold/ChangeLog: * arm.cc (Target_arm::got_size): Add const. (Target_arm::got_entry_count): New function. (Target_arm::plt_entry_count): New function. (Target_arm::first_plt_entry_offset): New function. (Target_arm::plt_entry_size): New function. (Output_data_plt_arm::entry_count): New function. (Output_data_plt_arm::first_plt_entry_offset): New function. (Output_data_plt_arm::get_plt_entry_size): New function. * i386.cc (Target_i386::got_size): Add const. (Target_i386::got_entry_count): New function. (Target_i386::plt_entry_count): New function. (Target_i386::first_plt_entry_offset): New function. (Target_i386::plt_entry_size): New function. (Output_data_plt_i386::entry_count): New function. (Output_data_plt_i386::first_plt_entry_offset): New function. (Output_data_plt_i386::get_plt_entry_size): New function. * incremental-dump.cc (dump_incremental_inputs): Adjust call to find_incremental_inputs_sections. Dump incremental_got_plt section. * incremental.cc: Include target.h. (Sized_incremental_binary::do_find_incremental_inputs_sections): Add parameter. Adjust all callers. Find incremental_got_plt section. (Incremental_inputs::create_data_sections): Create incremental_got_plt section. (Output_section_incremental_inputs::set_final_data_size): Calculate size of incremental_got_plt section. (Output_section_incremental_inputs::do_write): Write the incremental_got_plt section. (Got_plt_view_info): New struct. (Local_got_offset_visitor): New class. (Global_got_offset_visitor): New class. (Global_symbol_visitor_got_plt): New class. (Output_section_incremental_inputs::write_got_plt): New function. * incremental.h (Incremental_binary::find_incremental_inputs_sections): Add parameter. Adjust all callers. (Incremental_binary::do_find_incremental_inputs_sections): Likewise. (Incremental_inputs::got_plt_section): New function. (Incremental_inputs::got_plt_section_): New data member. (Incremental_got_plt_reader): New class. * layout.cc (Layout::create_incremental_info_sections): Add the incremental_got_plt section. * object.h (Got_offset_list::get_list): New function. (Got offset_list::for_all_got_offsets): New function. (Sized_relobj::local_got_offset_list): New function. * powerpc.cc (Target_powerpc::got_size): Add const. (Target_powerpc::got_entry_count): New function. (Target_powerpc::plt_entry_count): New function. (Target_powerpc::first_plt_entry_offset): New function. (Target_powerpc::plt_entry_size): New function. (Output_data_plt_powerpc::entry_count): New function. (Output_data_plt_powerpc::first_plt_entry_offset): New function. (Output_data_plt_powerpc::get_plt_entry_size): New function. * sparc.cc (Target_sparc::got_size): Add const. (Target_sparc::got_entry_count): New function. (Target_sparc::plt_entry_count): New function. (Target_sparc::first_plt_entry_offset): New function. (Target_sparc::plt_entry_size): New function. (Output_data_plt_sparc::entry_count): New function. (Output_data_plt_sparc::first_plt_entry_offset): New function. (Output_data_plt_sparc::get_plt_entry_size): New function. * symtab.h (Symbol::got_offset_list): New function. (Symbol_table::for_all_symbols): New function. * target.h (Sized_target::got_entry_count): New function. (Sized_target::plt_entry_count): New function. (Sized_target::plt_entry_size): New function. * x86_64.cc (Target_x86_64::got_size): Add const. (Target_x86_64::got_entry_count): New function. (Target_x86_64::plt_entry_count): New function. (Target_x86_64::first_plt_entry_offset): New function. (Target_x86_64::plt_entry_size): New function. (Output_data_plt_x86_64::entry_count): New function. (Output_data_plt_x86_64::first_plt_entry_offset): New function. (Output_data_plt_x86_64::get_plt_entry_size): New function.
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
// sparc.cc -- sparc target support for gold.
|
||||
|
||||
// Copyright 2008, 2009 Free Software Foundation, Inc.
|
||||
// Copyright 2008, 2009, 2010 Free Software Foundation, Inc.
|
||||
// Written by David S. Miller <davem@davemloft.net>.
|
||||
|
||||
// This file is part of gold.
|
||||
@@ -161,12 +161,33 @@ class Target_sparc : public Sized_target<size, big_endian>
|
||||
|
||||
// Return the size of the GOT section.
|
||||
section_size_type
|
||||
got_size()
|
||||
got_size() const
|
||||
{
|
||||
gold_assert(this->got_ != NULL);
|
||||
return this->got_->data_size();
|
||||
}
|
||||
|
||||
// Return the number of entries in the GOT.
|
||||
unsigned int
|
||||
got_entry_count() const
|
||||
{
|
||||
if (this->got_ == NULL)
|
||||
return 0;
|
||||
return this->got_size() / (size / 8);
|
||||
}
|
||||
|
||||
// Return the number of entries in the PLT.
|
||||
unsigned int
|
||||
plt_entry_count() const;
|
||||
|
||||
// Return the offset of the first non-reserved PLT entry.
|
||||
unsigned int
|
||||
first_plt_entry_offset() const;
|
||||
|
||||
// Return the size of each PLT entry.
|
||||
unsigned int
|
||||
plt_entry_size() const;
|
||||
|
||||
private:
|
||||
|
||||
// The class which scans relocations.
|
||||
@@ -343,6 +364,9 @@ class Target_sparc : public Sized_target<size, big_endian>
|
||||
static Target::Target_info sparc_info;
|
||||
|
||||
// The types of GOT entries needed for this platform.
|
||||
// These values are exposed to the ABI in an incremental link.
|
||||
// Do not renumber existing values without changing the version
|
||||
// number of the .gnu_incremental_inputs section.
|
||||
enum Got_type
|
||||
{
|
||||
GOT_TYPE_STANDARD = 0, // GOT entry for a regular symbol
|
||||
@@ -1100,6 +1124,21 @@ class Output_data_plt_sparc : public Output_section_data
|
||||
return this->rel_;
|
||||
}
|
||||
|
||||
// Return the number of PLT entries.
|
||||
unsigned int
|
||||
entry_count() const
|
||||
{ return this->count_; }
|
||||
|
||||
// Return the offset of the first non-reserved PLT entry.
|
||||
static unsigned int
|
||||
first_plt_entry_offset()
|
||||
{ return 4 * base_plt_entry_size; }
|
||||
|
||||
// Return the size of a PLT entry.
|
||||
static unsigned int
|
||||
get_plt_entry_size()
|
||||
{ return base_plt_entry_size; }
|
||||
|
||||
protected:
|
||||
void do_adjust_output_section(Output_section* os);
|
||||
|
||||
@@ -1415,6 +1454,35 @@ Target_sparc<size, big_endian>::make_plt_entry(Symbol_table* symtab,
|
||||
this->plt_->add_entry(gsym);
|
||||
}
|
||||
|
||||
// Return the number of entries in the PLT.
|
||||
|
||||
template<int size, bool big_endian>
|
||||
unsigned int
|
||||
Target_sparc<size, big_endian>::plt_entry_count() const
|
||||
{
|
||||
if (this->plt_ == NULL)
|
||||
return 0;
|
||||
return this->plt_->entry_count();
|
||||
}
|
||||
|
||||
// Return the offset of the first non-reserved PLT entry.
|
||||
|
||||
template<int size, bool big_endian>
|
||||
unsigned int
|
||||
Target_sparc<size, big_endian>::first_plt_entry_offset() const
|
||||
{
|
||||
return Output_data_plt_sparc<size, big_endian>::first_plt_entry_offset();
|
||||
}
|
||||
|
||||
// Return the size of each PLT entry.
|
||||
|
||||
template<int size, bool big_endian>
|
||||
unsigned int
|
||||
Target_sparc<size, big_endian>::plt_entry_size() const
|
||||
{
|
||||
return Output_data_plt_sparc<size, big_endian>::get_plt_entry_size();
|
||||
}
|
||||
|
||||
// Create a GOT entry for the TLS module index.
|
||||
|
||||
template<int size, bool big_endian>
|
||||
|
||||
Reference in New Issue
Block a user