[llvm] ed92c36 - [RuntimeDyld][ELF] Actually fix R_AARCH64_ABS{16, 32} overflow check
Fangrui Song via llvm-commits
llvm-commits at lists.llvm.org
Wed Apr 5 06:59:14 PDT 2023
Author: Fangrui Song
Date: 2023-04-05T06:59:09-07:00
New Revision: ed92c369e5436bea9abf7eed986bae640ac13147
URL: https://github.com/llvm/llvm-project/commit/ed92c369e5436bea9abf7eed986bae640ac13147
DIFF: https://github.com/llvm/llvm-project/commit/ed92c369e5436bea9abf7eed986bae640ac13147.diff
LOG: [RuntimeDyld][ELF] Actually fix R_AARCH64_ABS{16,32} overflow check
7b58259481417bb22d144a9c12ee8f4fb0a046e0 is incorrect.
Added:
Modified:
llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldELF.cpp
Removed:
################################################################################
diff --git a/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldELF.cpp b/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldELF.cpp
index 300bb1d73e52..762f51f54188 100644
--- a/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldELF.cpp
+++ b/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldELF.cpp
@@ -426,13 +426,15 @@ void RuntimeDyldELF::resolveAArch64Relocation(const SectionEntry &Section,
break;
case ELF::R_AARCH64_ABS16: {
uint64_t Result = Value + Addend;
- assert(static_cast<int64_t>(Result) >= INT16_MIN && Result <= UINT16_MAX);
+ assert(Result == static_cast<uint64_t>(llvm::SignExtend64(Result, 16)) ||
+ (Result >> 16) == 0);
write(isBE, TargetPtr, static_cast<uint16_t>(Result & 0xffffU));
break;
}
case ELF::R_AARCH64_ABS32: {
uint64_t Result = Value + Addend;
- assert(static_cast<int64_t>(Result) >= INT32_MIN && Result <= UINT32_MAX);
+ assert(Result == static_cast<uint64_t>(llvm::SignExtend64(Result, 32)) ||
+ (Result >> 32) == 0);
write(isBE, TargetPtr, static_cast<uint32_t>(Result & 0xffffffffU));
break;
}
More information about the llvm-commits
mailing list