[ELF][HEXAGON] Add support for R_HEX_B15_PCREL
authorSid Manning <sidneym@codeaurora.org>
Thu, 19 Jul 2018 20:27:43 +0000 (20:27 +0000)
committerSid Manning <sidneym@codeaurora.org>
Thu, 19 Jul 2018 20:27:43 +0000 (20:27 +0000)
Add support and update the testcase.

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

llvm-svn: 337494

lld/ELF/Arch/Hexagon.cpp
lld/test/ELF/hexagon.s

index 8820ddc..c0d48a8 100644 (file)
@@ -53,6 +53,7 @@ static uint32_t applyMask(uint32_t Mask, uint32_t Data) {
 RelExpr Hexagon::getRelExpr(RelType Type, const Symbol &S,
                             const uint8_t *Loc) const {
   switch (Type) {
+  case R_HEX_B15_PCREL:
   case R_HEX_B22_PCREL:
   case R_HEX_B22_PCREL_X:
   case R_HEX_B32_PCREL_X:
@@ -68,6 +69,9 @@ void Hexagon::relocateOne(uint8_t *Loc, RelType Type, uint64_t Val) const {
   switch (Type) {
   case R_HEX_NONE:
     break;
+  case R_HEX_B15_PCREL:
+    or32le(Loc, applyMask(0x00df20fe, Val >> 2));
+    break;
   case R_HEX_B22_PCREL:
     or32le(Loc, applyMask(0x1ff3ffe, Val >> 2));
     break;
index 54922fa..efc7c62 100644 (file)
@@ -4,6 +4,10 @@
 # RUN: ld.lld %t2 %t  -o %t3
 # RUN: llvm-objdump -d  %t3 | FileCheck %s
 
+# R_HEX_B15_PCREL
+if (p0) jump:nt #_start
+# CHECK: if (p0) jump:nt 0x11000
+
 # R_HEX_B22_PCREL
 call #_start
 # CHECK: call 0x11000