[PATCH] D33574: PPC: Verify that branch fixups fit within the range.
Kyle Butt via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Thu May 25 16:04:11 PDT 2017
iteratee created this revision.
Herald added a subscriber: nemanjai.
Verify that conditional and unconditional branch offsets fit within the
maximal range available in the instruction. Catches the bug that needed
https://reviews.llvm.org/rL303904
Repository:
rL LLVM
https://reviews.llvm.org/D33574
Files:
lib/Target/PowerPC/MCTargetDesc/PPCAsmBackend.cpp
Index: lib/Target/PowerPC/MCTargetDesc/PPCAsmBackend.cpp
===================================================================
--- lib/Target/PowerPC/MCTargetDesc/PPCAsmBackend.cpp
+++ lib/Target/PowerPC/MCTargetDesc/PPCAsmBackend.cpp
@@ -35,10 +35,24 @@
case PPC::fixup_ppc_nofixup:
return Value;
case PPC::fixup_ppc_brcond14:
+ if (static_cast<int64_t>(Value) >= 0 && Value > 0x7fff)
+ llvm_unreachable("Cond branch target overflow.");
+ else if (static_cast<int64_t>(Value) < 0 && Value < 0xffffffffffff8000)
+ llvm_unreachable("Cond branch target underflow.");
+ return Value & 0xfffc;
case PPC::fixup_ppc_brcond14abs:
+ assert(Value >= 0 && Value <= 0xffff &&
+ "Cond branch absolute target overflow.");
return Value & 0xfffc;
case PPC::fixup_ppc_br24:
+ if (static_cast<int64_t>(Value) >= 0 && Value > 0x1ffffff)
+ llvm_unreachable("Branch target overflow.");
+ else if (static_cast<int64_t>(Value) < 0 && Value < 0xfffffffffe000000)
+ llvm_unreachable("Branch target underflow.");
+ return Value & 0x3fffffc;
case PPC::fixup_ppc_br24abs:
+ assert(Value >= 0 && Value <= 0x3ffffff &&
+ "Branch absolute target overflow.");
return Value & 0x3fffffc;
case PPC::fixup_ppc_half16:
return Value & 0xffff;
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D33574.100320.patch
Type: text/x-patch
Size: 1306 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170525/38eff3d1/attachment.bin>
More information about the llvm-commits
mailing list