diff options
author | David S. Miller <davem@redhat.com> | 2010-02-09 20:29:44 +0000 |
---|---|---|
committer | David S. Miller <davem@redhat.com> | 2010-02-09 20:29:44 +0000 |
commit | 612a8d3dbf065f5fbaf7d9fe094a252ea6eb6c17 (patch) | |
tree | 4c383e3823597ab1d18e73ed5dd49a0539f07b4e /gold/output.h | |
parent | 684b268abacfb21ae5b35b2bb6d8fc24665e97d9 (diff) | |
download | gdb-612a8d3dbf065f5fbaf7d9fe094a252ea6eb6c17.zip gdb-612a8d3dbf065f5fbaf7d9fe094a252ea6eb6c17.tar.gz gdb-612a8d3dbf065f5fbaf7d9fe094a252ea6eb6c17.tar.bz2 |
* output.h (Output_data_dynamic::add_section_size): New method
that takes two Output_data objects.
(Output_data_dynamic::Dynamic_entry): Create storage for secondary
entry param. Handle it in initializers.
* output.cc (Output_data_dynamic::Dynamic_entry::write): For
DYNAMIC_SECTION_SIZE, add in second object size if non-NULL.
* layout.h (Layout::add_target_dynamic_tags): Add dynrel_includes_plt
arg.
* layout.cc (Layout::add_target_dynamic_tags): If dynrel_includes_plt,
and .rela.plt exists, set DT_REL{,A}SZ to sum of .rela.dyn and .rela.plt
* arm.cc (Target_arm::do_finalize_sections): Update to pass false
for dynrel_includes_plt.
* i386.cc (Target_i386::do_finalize_sections): Likewise.
* x86_64.cc (Target_x86_64::do_finalize_sections): Likewise.
* sparc.cc (Target_sparc::make_plt_entry): Force .rela.dyn to be output
before .rela.plt
(Target_sparc::do_finalize_sections): Update to pass true for
dynrel_includes_plt.
* powerpc.cc (Target_powerpc::make_plt_entry): Force .rela.dyn to be
output before .rela.plt
(Target_powerpc::do_finalize_sections): Update to pass true for
dynrel_includes_plt when 32-bit.
Diffstat (limited to 'gold/output.h')
-rw-r--r-- | gold/output.h | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/gold/output.h b/gold/output.h index 60d57de..a549b74 100644 --- a/gold/output.h +++ b/gold/output.h @@ -1997,6 +1997,12 @@ class Output_data_dynamic : public Output_section_data add_section_size(elfcpp::DT tag, const Output_data* od) { this->add_entry(Dynamic_entry(tag, od, true)); } + // Add a new dynamic entry with the total size of two output datas. + void + add_section_size(elfcpp::DT tag, const Output_data* od, + const Output_data* od2) + { this->add_entry(Dynamic_entry(tag, od, od2)); } + // Add a new dynamic entry with the address of a symbol. void add_symbol(elfcpp::DT tag, const Symbol* sym) @@ -2045,7 +2051,19 @@ class Output_data_dynamic : public Output_section_data offset_(section_size ? DYNAMIC_SECTION_SIZE : DYNAMIC_SECTION_ADDRESS) - { this->u_.od = od; } + { + this->u_.od = od; + this->od2 = NULL; + } + + // Create an entry with the size of two sections. + Dynamic_entry(elfcpp::DT tag, const Output_data* od, const Output_data* od2) + : tag_(tag), + offset_(DYNAMIC_SECTION_SIZE) + { + this->u_.od = od; + this->od2 = od2; + } // Create an entry with the address of a section plus a constant offset. Dynamic_entry(elfcpp::DT tag, const Output_data* od, unsigned int offset) @@ -2101,6 +2119,8 @@ class Output_data_dynamic : public Output_section_data // For DYNAMIC_STRING. const char* str; } u_; + // For DYNAMIC_SYMBOL with two sections. + const Output_data* od2; // The dynamic tag. elfcpp::DT tag_; // The type of entry (Classification) or offset within a section. |