[ELF][HEXAGON] Add R_HEX_GOT_16_X support
Differential Revision: https://reviews.llvm.org/D52909
git-svn-id: https://llvm.org/svn/llvm-project/lld/trunk@343972 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/ELF/Arch/Hexagon.cpp b/ELF/Arch/Hexagon.cpp
index 9933192..b585007 100644
--- a/ELF/Arch/Hexagon.cpp
+++ b/ELF/Arch/Hexagon.cpp
@@ -90,6 +90,7 @@
case R_HEX_B32_PCREL_X:
return R_PLT_PC;
case R_HEX_GOT_11_X:
+ case R_HEX_GOT_16_X:
case R_HEX_GOT_32_6_X:
return R_HEXAGON_GOT;
default:
@@ -191,7 +192,8 @@
case R_HEX_12_X:
or32le(Loc, applyMask(0x000007e0, Val));
break;
- case R_HEX_16_X: // This reloc only has 6 effective bits.
+ case R_HEX_16_X: // These relocs only have 6 effective bits.
+ case R_HEX_GOT_16_X:
or32le(Loc, applyMask(findMaskR16(read32le(Loc)), Val & 0x3f));
break;
case R_HEX_32:
diff --git a/test/ELF/hexagon-shared.s b/test/ELF/hexagon-shared.s
index 9d65b4e..97f8e84 100644
--- a/test/ELF/hexagon-shared.s
+++ b/test/ELF/hexagon-shared.s
@@ -22,6 +22,9 @@
r0 = memw (r2+##bar@GOT)
jumpr r0
+# R_HEX_GOT_16_X
+r0 = add(r1,##bar@GOT)
+
# PLT: { immext(#65472
# PLT: r28 = add(pc,##65488) }
# PLT: { r14 -= add(r28,#16)
@@ -37,6 +40,7 @@
# TEXT: 10000: 00 00 02 00 00020000
# TEXT: { call 0x10050 }
+# TEXT: r0 = add(r1,##65664) }
# GOT: .got:
# GOT: 30080: 00 00 00 00 00000000 <unknown>