From a984ee1d25de86d678270ec5a8b7491a3ab68a57 Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Fri, 16 May 2008 15:27:49 +0000 Subject: [PATCH] * output.cc (Output_reloc::get_address): Change return type to Elf_Addr. * output.h (class Output_reloc): Update get_address declaration. * x86_64.cc (Output_data_plt_x86_64::do_write): Use 64-bit types for section addresses. --- gold/ChangeLog | 8 ++++++++ gold/output.cc | 2 +- gold/output.h | 2 +- gold/x86_64.cc | 16 +++++++++------- 4 files changed, 19 insertions(+), 9 deletions(-) diff --git a/gold/ChangeLog b/gold/ChangeLog index 7ded23176d0..9bac71f1076 100644 --- a/gold/ChangeLog +++ b/gold/ChangeLog @@ -1,3 +1,11 @@ +2008-05-16 Ian Lance Taylor + + * output.cc (Output_reloc::get_address): Change return type to + Elf_Addr. + * output.h (class Output_reloc): Update get_address declaration. + * x86_64.cc (Output_data_plt_x86_64::do_write): Use 64-bit types + for section addresses. + 2008-05-09 Ian Lance Taylor PR 6493 diff --git a/gold/output.cc b/gold/output.cc index 12858964850..ce29b53ccbb 100644 --- a/gold/output.cc +++ b/gold/output.cc @@ -854,7 +854,7 @@ Output_reloc:: // Get the output address of a relocation. template -section_offset_type +typename elfcpp::Elf_types::Elf_Addr Output_reloc::get_address() const { Address address = this->address_; diff --git a/gold/output.h b/gold/output.h index 6c7dc394ef4..7c24372fed8 100644 --- a/gold/output.h +++ b/gold/output.h @@ -878,7 +878,7 @@ class Output_reloc get_symbol_index() const; // Return the output address. - section_offset_type + Address get_address() const; // Codes for local_sym_index_. diff --git a/gold/x86_64.cc b/gold/x86_64.cc index 6459e500827..d7877007981 100644 --- a/gold/x86_64.cc +++ b/gold/x86_64.cc @@ -672,20 +672,22 @@ Output_data_plt_x86_64::do_write(Output_file* of) unsigned char* pov = oview; // The base address of the .plt section. - elfcpp::Elf_types<32>::Elf_Addr plt_address = this->address(); + elfcpp::Elf_types<64>::Elf_Addr plt_address = this->address(); // The base address of the .got section. - elfcpp::Elf_types<32>::Elf_Addr got_base = this->got_->address(); + elfcpp::Elf_types<64>::Elf_Addr got_base = this->got_->address(); // The base address of the PLT portion of the .got section, // which is where the GOT pointer will point, and where the // three reserved GOT entries are located. - elfcpp::Elf_types<32>::Elf_Addr got_address = this->got_plt_->address(); + elfcpp::Elf_types<64>::Elf_Addr got_address = this->got_plt_->address(); memcpy(pov, first_plt_entry, plt_entry_size); // We do a jmp relative to the PC at the end of this instruction. - elfcpp::Swap_unaligned<32, false>::writeval(pov + 2, got_address + 8 - - (plt_address + 6)); - elfcpp::Swap<32, false>::writeval(pov + 8, got_address + 16 - - (plt_address + 12)); + elfcpp::Swap_unaligned<32, false>::writeval(pov + 2, + (got_address + 8 + - (plt_address + 6))); + elfcpp::Swap<32, false>::writeval(pov + 8, + (got_address + 16 + - (plt_address + 12))); pov += plt_entry_size; unsigned char* got_pov = got_view;