[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