[ELF] [HEXAGON] Add support for PLT_B22_PCREL and HEX_32_PCREL

Update testcase.

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

git-svn-id: https://llvm.org/svn/llvm-project/lld/trunk@343515 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/ELF/Arch/Hexagon.cpp b/ELF/Arch/Hexagon.cpp
index 03b66aa..b448f61 100644
--- a/ELF/Arch/Hexagon.cpp
+++ b/ELF/Arch/Hexagon.cpp
@@ -75,8 +75,10 @@
   case R_HEX_B15_PCREL:
   case R_HEX_B15_PCREL_X:
   case R_HEX_6_PCREL_X:
+  case R_HEX_32_PCREL:
     return R_PC;
   case R_HEX_B22_PCREL:
+  case R_HEX_PLT_B22_PCREL:
   case R_HEX_B22_PCREL_X:
   case R_HEX_B32_PCREL_X:
     return R_PLT_PC;
@@ -182,6 +184,7 @@
     or32le(Loc, applyMask(findMaskR16(read32le(Loc)), Val & 0x3f));
     break;
   case R_HEX_32:
+  case R_HEX_32_PCREL:
     or32le(Loc, Val);
     break;
   case R_HEX_32_6_X:
@@ -203,6 +206,7 @@
     or32le(Loc, applyMask(0x00df20fe, Val & 0x3f));
     break;
   case R_HEX_B22_PCREL:
+  case R_HEX_PLT_B22_PCREL:
     or32le(Loc, applyMask(0x1ff3ffe, Val >> 2));
     break;
   case R_HEX_B22_PCREL_X:
diff --git a/test/ELF/hexagon-shared.s b/test/ELF/hexagon-shared.s
index d422c30..33d9a7a 100644
--- a/test/ELF/hexagon-shared.s
+++ b/test/ELF/hexagon-shared.s
@@ -3,21 +3,29 @@
 # RUN: llvm-mc -filetype=obj -triple=hexagon-unknown-elf %S/Inputs/hexagon-shared.s -o %t2.o
 # RUN: ld.lld -shared %t2.o -soname %t3.so -o %t3.so
 # RUN: ld.lld -shared %t %t3.so -soname %t4.so -o %t4.so
-# RUN: llvm-objdump -d -j .plt %t4.so | FileCheck %s
+# RUN: llvm-objdump -d -j=.plt %t4.so | FileCheck --check-prefix=PLT %s
+# RUN: llvm-objdump -d -j=.text %t4.so | FileCheck --check-prefix=TEXT %s
 
 .global foo
 foo:
+# _HEX_32_PCREL
+.word _DYNAMIC - .
 call ##bar
+# R_HEX_PLT_B22_PCREL
+call bar@PLT
 
-# CHECK: { immext(#65472
-# CHECK: r28 = add(pc,##65520) }
-# CHECK: { r14 -= add(r28,#16)
-# CHECK: r15 = memw(r28+#8)
-# CHECK: r28 = memw(r28+#4) }
-# CHECK: { r14 = asr(r14,#2)
-# CHECK: jumpr r28 }
-# CHECK: { trap0(#219) }
-# CHECK: immext(#65472)
-# CHECK: r14 = add(pc,##65488) }
-# CHECK: r28 = memw(r14+#0) }
-# CHECK: jumpr r28 }
+# PLT: { immext(#65472
+# PLT: r28 = add(pc,##65520) }
+# PLT: { r14 -= add(r28,#16)
+# PLT: r15 = memw(r28+#8)
+# PLT: r28 = memw(r28+#4) }
+# PLT: { r14 = asr(r14,#2)
+# PLT: jumpr r28 }
+# PLT: { trap0(#219) }
+# PLT: immext(#65472)
+# PLT: r14 = add(pc,##65488) }
+# PLT: r28 = memw(r14+#0) }
+# PLT: jumpr r28 }
+
+# TEXT:  10000: 00 00 01 00 00010000
+# TEXT: { 	call 0x10030 }