From bf08749b29ebc1a8d546aaa2d48a09431b73b17b Mon Sep 17 00:00:00 2001 From: Igor Kudrin Date: Mon, 23 Nov 2015 16:56:10 +0000 Subject: [ELF/AArch64] Fix overflow checks for R_AARCH64_PREL16 and _PREL32 relocations. llvm-svn: 253879 --- lld/ELF/Target.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lld/ELF/Target.cpp b/lld/ELF/Target.cpp index 6584f639977..81a56d6a194 100644 --- a/lld/ELF/Target.cpp +++ b/lld/ELF/Target.cpp @@ -755,12 +755,12 @@ void AArch64TargetInfo::relocateOne(uint8_t *Loc, uint8_t *BufEnd, or32le(Loc, (SA & 0xFFF) << 10); break; case R_AARCH64_PREL16: - if (!isInt<16>(SA)) + if (!isInt<16>(SA - P)) error("Relocation R_AARCH64_PREL16 out of range"); write16le(Loc, SA - P); break; case R_AARCH64_PREL32: - if (!isInt<32>(SA)) + if (!isInt<32>(SA - P)) error("Relocation R_AARCH64_PREL32 out of range"); write32le(Loc, SA - P); break; -- cgit v1.2.3