summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSid Manning <sidneym@codeaurora.org>2018-10-01 18:27:26 +0000
committerSid Manning <sidneym@codeaurora.org>2018-10-01 18:27:26 +0000
commitd04917c65617c64599994ac4bf399a6c998bb5ba (patch)
tree5d8a208a603d6a966f2b102818c88ff7d5431818
parent4501639b15dbc481ca3f3e44737e878a7c5ec54b (diff)
[ELF] [HEXAGON] Add support for PLT_B22_PCREL and HEX_32_PCREL
Update testcase. Differential Revision: https://reviews.llvm.org/D52734
-rw-r--r--lld/ELF/Arch/Hexagon.cpp4
-rw-r--r--lld/test/ELF/hexagon-shared.s34
2 files changed, 25 insertions, 13 deletions
diff --git a/lld/ELF/Arch/Hexagon.cpp b/lld/ELF/Arch/Hexagon.cpp
index 03b66aaffe1..b448f612b6f 100644
--- a/lld/ELF/Arch/Hexagon.cpp
+++ b/lld/ELF/Arch/Hexagon.cpp
@@ -75,8 +75,10 @@ RelExpr Hexagon::getRelExpr(RelType Type, const Symbol &S,
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 @@ void Hexagon::relocateOne(uint8_t *Loc, RelType Type, uint64_t Val) const {
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 @@ void Hexagon::relocateOne(uint8_t *Loc, RelType Type, uint64_t Val) const {
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/lld/test/ELF/hexagon-shared.s b/lld/test/ELF/hexagon-shared.s
index d422c303af8..33d9a7ae9ac 100644
--- a/lld/test/ELF/hexagon-shared.s
+++ b/lld/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 }