summaryrefslogtreecommitdiffstats
path: root/llvm/lib/ExecutionEngine/RuntimeDyld
diff options
context:
space:
mode:
authorLang Hames <lhames@gmail.com>2014-05-23 18:35:44 +0000
committerLang Hames <lhames@gmail.com>2014-05-23 18:35:44 +0000
commit8e30e4b9b7d6e82aa1f1def07cfba78fef6c1084 (patch)
tree4351563683a16660be5a63af64dd7a2227f5bebd /llvm/lib/ExecutionEngine/RuntimeDyld
parent5de00f3b56805c7e980f049ceb3f166f8c69cec0 (diff)
downloadbcm5719-llvm-8e30e4b9b7d6e82aa1f1def07cfba78fef6c1084.tar.gz
bcm5719-llvm-8e30e4b9b7d6e82aa1f1def07cfba78fef6c1084.zip
[RuntimeDyld] Remove relocation bounds check introduced in r208375 (MachO only).
We do all of our address arithmetic in 64-bit, and operations involving logically negative 32-bit offsets (actually represented as unsigned 64 bit ints) often overflow into higher bits. The overflow check could be preserved by casting to uint32 at the callsite for applyRelocationValue, but this would eliminate the value of the check. The right way to handle overflow in relocations is to make relocation processing target specific, and compute the values for RelocationEntry objects in the appropriate types (32-bit for 32-bit targets, 64-bit for 64-bit targets). This is coming as part of the cleanup I'm working on. This fixes another i386 regression test. <rdar://problem/16889891> llvm-svn: 209536
Diffstat (limited to 'llvm/lib/ExecutionEngine/RuntimeDyld')
-rw-r--r--llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldMachO.h5
1 files changed, 1 insertions, 4 deletions
diff --git a/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldMachO.h b/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldMachO.h
index 6911f2f07aa..08573eed5c8 100644
--- a/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldMachO.h
+++ b/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldMachO.h
@@ -28,16 +28,13 @@ class RuntimeDyldMachO : public RuntimeDyldImpl {
private:
/// Write the least significant 'Size' bytes in 'Value' out at the address
- /// pointed to by Addr. Check for overflow.
+ /// pointed to by Addr.
bool applyRelocationValue(uint8_t *Addr, uint64_t Value, unsigned Size) {
for (unsigned i = 0; i < Size; ++i) {
*Addr++ = (uint8_t)Value;
Value >>= 8;
}
- if (Value) // Catch overflow
- return Error("Relocation out of range.");
-
return false;
}
OpenPOWER on IntegriCloud