[llvm] 3362f54 - [JITLink] Add R_RISCV_SUB6 relocation
via llvm-commits
llvm-commits at lists.llvm.org
Mon Feb 28 09:46:40 PST 2022
Author: luxufan
Date: 2022-03-01T01:45:03+08:00
New Revision: 3362f54d086b6d8d4531fe7a503cd79a96b95246
URL: https://github.com/llvm/llvm-project/commit/3362f54d086b6d8d4531fe7a503cd79a96b95246
DIFF: https://github.com/llvm/llvm-project/commit/3362f54d086b6d8d4531fe7a503cd79a96b95246.diff
LOG: [JITLink] Add R_RISCV_SUB6 relocation
Add R_RISCV_SUB6 relocation
Differential Revision: https://reviews.llvm.org/D120001
Added:
Modified:
llvm/include/llvm/ExecutionEngine/JITLink/riscv.h
llvm/lib/ExecutionEngine/JITLink/ELF_riscv.cpp
llvm/lib/ExecutionEngine/JITLink/riscv.cpp
llvm/test/ExecutionEngine/JITLink/RISCV/riscv_reloc_add.s
Removed:
################################################################################
diff --git a/llvm/include/llvm/ExecutionEngine/JITLink/riscv.h b/llvm/include/llvm/ExecutionEngine/JITLink/riscv.h
index 2d32a749111d1..95f45fae91e40 100644
--- a/llvm/include/llvm/ExecutionEngine/JITLink/riscv.h
+++ b/llvm/include/llvm/ExecutionEngine/JITLink/riscv.h
@@ -152,6 +152,12 @@ enum EdgeKind_riscv : Edge::Kind {
/// Fixup <- (Target - *{1}Fixup - Addend)
R_RISCV_SUB8,
+ /// 6 bits label subtraction
+ ///
+ /// Fixup expression
+ /// Fixup <- (Target - *{1}Fixup - Addend)
+ R_RISCV_SUB6,
+
/// Local label assignment
///
/// Fixup expression:
diff --git a/llvm/lib/ExecutionEngine/JITLink/ELF_riscv.cpp b/llvm/lib/ExecutionEngine/JITLink/ELF_riscv.cpp
index 469a81d882aea..29fe59c1acaa8 100644
--- a/llvm/lib/ExecutionEngine/JITLink/ELF_riscv.cpp
+++ b/llvm/lib/ExecutionEngine/JITLink/ELF_riscv.cpp
@@ -372,6 +372,13 @@ class ELFJITLinker_riscv : public JITLinker<ELFJITLinker_riscv> {
*FixupPtr = static_cast<uint8_t>(Value);
break;
}
+ case R_RISCV_SUB6: {
+ int64_t Value =
+ *(reinterpret_cast<const uint8_t *>(FixupAddress.getValue())) &
+ 0x3f - E.getTarget().getAddress().getValue() - E.getAddend();
+ *FixupPtr = (*FixupPtr & 0xc0) | (static_cast<uint8_t>(Value) & 0x3f);
+ break;
+ }
case R_RISCV_SET6: {
int64_t Value = (E.getTarget().getAddress() + E.getAddend()).getValue();
uint32_t RawData = *(little32_t *)FixupPtr;
@@ -457,6 +464,8 @@ class ELFLinkGraphBuilder_riscv : public ELFLinkGraphBuilder<ELFT> {
return EdgeKind_riscv::R_RISCV_SUB16;
case ELF::R_RISCV_SUB8:
return EdgeKind_riscv::R_RISCV_SUB8;
+ case ELF::R_RISCV_SUB6:
+ return EdgeKind_riscv::R_RISCV_SUB6;
case ELF::R_RISCV_SET6:
return EdgeKind_riscv::R_RISCV_SET6;
case ELF::R_RISCV_SET8:
diff --git a/llvm/lib/ExecutionEngine/JITLink/riscv.cpp b/llvm/lib/ExecutionEngine/JITLink/riscv.cpp
index 0bd57b654d402..3848cc6b5f01a 100644
--- a/llvm/lib/ExecutionEngine/JITLink/riscv.cpp
+++ b/llvm/lib/ExecutionEngine/JITLink/riscv.cpp
@@ -58,6 +58,8 @@ const char *getEdgeKindName(Edge::Kind K) {
return "R_RISCV_SUB16";
case R_RISCV_SUB8:
return "R_RISCV_SUB8";
+ case R_RISCV_SUB6:
+ return "R_RISCV_SUB6";
case R_RISCV_SET6:
return "R_RISCV_SET6";
case R_RISCV_SET8:
diff --git a/llvm/test/ExecutionEngine/JITLink/RISCV/riscv_reloc_add.s b/llvm/test/ExecutionEngine/JITLink/RISCV/riscv_reloc_add.s
index 80021a557e4df..c334ce4857dbe 100644
--- a/llvm/test/ExecutionEngine/JITLink/RISCV/riscv_reloc_add.s
+++ b/llvm/test/ExecutionEngine/JITLink/RISCV/riscv_reloc_add.s
@@ -8,6 +8,7 @@
# jitlink-check: *{4}(named_data+8) = 0x8
# jitlink-check: *{2}(named_data+12) = 0x8
# jitlink-check: *{1}(named_data+14) = 0x8
+# jitlink-check: *{1}(named_data+15) = 0x8
.global main
main:
@@ -20,8 +21,10 @@ main:
.section ".rodata","", at progbits
.type named_data, at object
named_data:
+.reloc named_data+15, R_RISCV_SUB6, .L0
.dword .L1 - .L0
.word .L1 - .L0
.half .L1 - .L0
.byte .L1 - .L0
-.size named_data, 15
+.byte 0x8
+.size named_data, 16
More information about the llvm-commits
mailing list