summaryrefslogtreecommitdiffstats
path: root/linker/linker.cpp
diff options
context:
space:
mode:
authorPavel Chupin <pavel.v.chupin@intel.com>2013-10-16 19:13:58 +0400
committerPavel Chupin <pavel.v.chupin@intel.com>2013-10-16 19:13:58 +0400
commitc075c18537d18ccb6760ba1f5727ce2c0890285a (patch)
tree16b87064fe486ce5a1d9b59dd64798b5d72c0e48 /linker/linker.cpp
parentabeafbd6d5e11044dd305e48134bc3d84319a3da (diff)
downloadbionic-c075c18537d18ccb6760ba1f5727ce2c0890285a.zip
bionic-c075c18537d18ccb6760ba1f5727ce2c0890285a.tar.gz
bionic-c075c18537d18ccb6760ba1f5727ce2c0890285a.tar.bz2
x86_64: Add R_X86_64_64 relocation handling
Change-Id: I86ffc56fa6a9053bed44e92a579530c2beb8eb2c Signed-off-by: Pavel Chupin <pavel.v.chupin@intel.com>
Diffstat (limited to 'linker/linker.cpp')
-rwxr-xr-xlinker/linker.cpp8
1 files changed, 8 insertions, 0 deletions
diff --git a/linker/linker.cpp b/linker/linker.cpp
index d08bf75..196acb6 100755
--- a/linker/linker.cpp
+++ b/linker/linker.cpp
@@ -947,6 +947,14 @@ static int soinfo_relocate_a(soinfo* si, Elf_Rela* rela, unsigned count, soinfo*
*reinterpret_cast<Elf_Addr*>(reloc) = sym_addr + rela->r_addend;
break;
+ case R_X86_64_64:
+ count_relocation(kRelocRelative);
+ MARK(rela->r_offset);
+ TRACE_TYPE(RELO, "RELO R_X86_64_64 %08zx <- +%08zx %s", static_cast<size_t>(reloc),
+ static_cast<size_t>(sym_addr), sym_name);
+ *reinterpret_cast<Elf_Addr*>(reloc) = sym_addr + rela->r_addend;
+ break;
+
case R_X86_64_PC32:
count_relocation(kRelocRelative);
MARK(rela->r_offset);