From 6be6f3bdcd929ff4133a1bc210bd7bf70fa4ede8 Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Thu, 6 Mar 2008 06:10:44 +0000 Subject: [PATCH] Use absolute address for relocations when not doing a relocatable link. --- gold/target-reloc.h | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/gold/target-reloc.h b/gold/target-reloc.h index 09f5076..2823c17 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)); -- 2.7.4