summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKazushi (Jam) Marukawa <marukawa@nec.com>2021-12-11 03:06:02 +0900
committerKazushi (Jam) Marukawa <marukawa@nec.com>2021-12-13 20:29:17 +0900
commitcffce86a1cb2d76b9296c1d3c6a06f9f6f9182f0 (patch)
tree6fdc460100016130d8312d4cdf5d9470c0bb0d59
parentd1057f9604713ca157e7d3a04dea4d5fc42313ed (diff)
[VE] Support srel32 in symbol reference
Support R_VE_SREL32 in symbol references in MC layer. Reviewed By: simoll Differential Revision: https://reviews.llvm.org/D115591
-rw-r--r--llvm/lib/Target/VE/MCTargetDesc/VEELFObjectWriter.cpp1
-rw-r--r--llvm/test/MC/VE/sym-lea.s11
2 files changed, 12 insertions, 0 deletions
diff --git a/llvm/lib/Target/VE/MCTargetDesc/VEELFObjectWriter.cpp b/llvm/lib/Target/VE/MCTargetDesc/VEELFObjectWriter.cpp
index 3b0a46944109..ae065407409a 100644
--- a/llvm/lib/Target/VE/MCTargetDesc/VEELFObjectWriter.cpp
+++ b/llvm/lib/Target/VE/MCTargetDesc/VEELFObjectWriter.cpp
@@ -67,6 +67,7 @@ unsigned VEELFObjectWriter::getRelocType(MCContext &Ctx, const MCValue &Target,
Ctx.reportError(Fixup.getLoc(),
"8-byte pc-relative data relocation is not supported");
return ELF::R_VE_NONE;
+ case VE::fixup_ve_reflong:
case VE::fixup_ve_srel32:
return ELF::R_VE_SREL32;
case VE::fixup_ve_pc_hi32:
diff --git a/llvm/test/MC/VE/sym-lea.s b/llvm/test/MC/VE/sym-lea.s
new file mode 100644
index 000000000000..904485a17946
--- /dev/null
+++ b/llvm/test/MC/VE/sym-lea.s
@@ -0,0 +1,11 @@
+# RUN: llvm-mc -triple=ve %s -o - | FileCheck %s
+# RUN: llvm-mc -triple=ve -filetype=obj %s -o - | llvm-objdump -r - | FileCheck %s --check-prefix=CHECK-OBJ
+
+ lea %s0, tgt
+ lea %s0, tgt2-.
+# CHECK: lea %s0, tgt
+# CHECK-NEXT: [[LABEL:.*]]:
+# CHECK-NEXT: lea %s0, tgt2-[[LABEL]]
+
+# CHECK-OBJ: 0 R_VE_REFLONG tgt
+# CHECK-OBJ: 8 R_VE_SREL32 tgt2