From: Ian Lance Taylor Date: Thu, 6 Mar 2008 06:10:44 +0000 (+0000) Subject: Use absolute address for relocations when not doing a relocatable X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=6be6f3bdcd929ff4133a1bc210bd7bf70fa4ede8;p=binutils-gdb.git Use absolute address for relocations when not doing a relocatable link. --- diff --git a/gold/target-reloc.h b/gold/target-reloc.h index 09f5076d857..2823c1796c0 100644 --- a/gold/target-reloc.h +++ b/gold/target-reloc.h @@ -375,7 +375,7 @@ relocate_for_relocatable( off_t offset_in_output_section, const Relocatable_relocs* rr, unsigned char* view, - typename elfcpp::Elf_types::Elf_Addr, + typename elfcpp::Elf_types::Elf_Addr view_address, section_size_type, unsigned char* reloc_view, section_size_type reloc_view_size) @@ -466,6 +466,12 @@ relocate_for_relocatable( gold_assert(new_offset != -1); } + // In an object file, r_offset is an offset within the section. + // In an executable or dynamic object, generated by + // --emit-relocs, r_offset is an absolute address. + if (!parameters->options().relocatable()) + new_offset += view_address; + reloc_write.put_r_offset(new_offset); reloc_write.put_r_info(elfcpp::elf_r_info(new_symndx, r_type));