From cf197f0bdee1ea4af8cfd3853421de94943f0b1c Mon Sep 17 00:00:00 2001 From: Petar Jovanovic Date: Mon, 8 Jun 2015 14:10:23 +0000 Subject: [Mips64][mcjit] Add R_MIPS_PC32 relocation This patch adds R_MIPS_PC32 relocation for Mips64. Patch by Vladimir Radosavljevic. Differential Revision: http://reviews.llvm.org/D10235 llvm-svn: 239301 --- llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldELF.cpp | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'llvm/lib/ExecutionEngine/RuntimeDyld') diff --git a/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldELF.cpp b/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldELF.cpp index 720b7b22933..b4a34e8acf3 100644 --- a/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldELF.cpp +++ b/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldELF.cpp @@ -631,6 +631,10 @@ RuntimeDyldELF::evaluateMIPS64Relocation(const SectionEntry &Section, uint64_t FinalAddress = (Section.LoadAddress + Offset); return ((Value + Addend - FinalAddress - 4) >> 2) & 0xffff; } + case ELF::R_MIPS_PC32: { + uint64_t FinalAddress = (Section.LoadAddress + Offset); + return Value + Addend - FinalAddress; + } case ELF::R_MIPS_PC18_S3: { uint64_t FinalAddress = (Section.LoadAddress + Offset); return ((Value + Addend - ((FinalAddress | 7) ^ 7)) >> 3) & 0x3ffff; @@ -669,6 +673,7 @@ void RuntimeDyldELF::applyMIPS64Relocation(uint8_t *TargetPtr, break; case ELF::R_MIPS_32: case ELF::R_MIPS_GPREL32: + case ELF::R_MIPS_PC32: writeBytesUnaligned(CalculatedValue & 0xffffffff, TargetPtr, 4); break; case ELF::R_MIPS_64: -- cgit v1.2.3