[lld] r320677 - [COFF] Error out if 20 bit thumb branches are out of range

Martin Storsjo via llvm-commits llvm-commits at lists.llvm.org
Thu Dec 14 00:56:36 PST 2017


Author: mstorsjo
Date: Thu Dec 14 00:56:36 2017
New Revision: 320677

URL: http://llvm.org/viewvc/llvm-project?rev=320677&view=rev
Log:
[COFF] Error out if 20 bit thumb branches are out of range

This is similar to what was added in SVN r277838 for 24 bit
branch instructions.

Differential Revision: https://reviews.llvm.org/D41163

Added:
    lld/trunk/test/COFF/Inputs/far-arm-thumb-abs20.s
    lld/trunk/test/COFF/arm-thumb-branch20-error.s
Modified:
    lld/trunk/COFF/Chunks.cpp

Modified: lld/trunk/COFF/Chunks.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/COFF/Chunks.cpp?rev=320677&r1=320676&r2=320677&view=diff
==============================================================================
--- lld/trunk/COFF/Chunks.cpp (original)
+++ lld/trunk/COFF/Chunks.cpp Thu Dec 14 00:56:36 2017
@@ -129,6 +129,8 @@ void applyMOV32T(uint8_t *Off, uint32_t
 }
 
 static void applyBranch20T(uint8_t *Off, int32_t V) {
+  if (!isInt<21>(V))
+    fatal("relocation out of range");
   uint32_t S = V < 0 ? 1 : 0;
   uint32_t J1 = (V >> 19) & 1;
   uint32_t J2 = (V >> 18) & 1;

Added: lld/trunk/test/COFF/Inputs/far-arm-thumb-abs20.s
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/Inputs/far-arm-thumb-abs20.s?rev=320677&view=auto
==============================================================================
--- lld/trunk/test/COFF/Inputs/far-arm-thumb-abs20.s (added)
+++ lld/trunk/test/COFF/Inputs/far-arm-thumb-abs20.s Thu Dec 14 00:56:36 2017
@@ -0,0 +1,2 @@
+.global too_far20
+too_far20 = 0x501004

Added: lld/trunk/test/COFF/arm-thumb-branch20-error.s
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/arm-thumb-branch20-error.s?rev=320677&view=auto
==============================================================================
--- lld/trunk/test/COFF/arm-thumb-branch20-error.s (added)
+++ lld/trunk/test/COFF/arm-thumb-branch20-error.s Thu Dec 14 00:56:36 2017
@@ -0,0 +1,10 @@
+// REQUIRES: arm
+// RUN: llvm-mc -filetype=obj -triple=thumbv7a-windows-gnu %s -o %t.obj
+// RUN: llvm-mc -filetype=obj -triple=thumbv7a-windows-gnu %S/Inputs/far-arm-thumb-abs20.s -o %t.far.obj
+// RUN: not lld-link -entry:_start -subsystem:console %t.obj %t.far.obj -out:%t.exe 2>&1 | FileCheck %s
+ .syntax unified
+ .globl _start
+_start:
+ bne too_far20
+
+// CHECK: relocation out of range




More information about the llvm-commits mailing list