From 307fc0961972ac5264d6f3459978fbec95cad3a9 Mon Sep 17 00:00:00 2001 From: Richard-Qin-X Date: Wed, 19 Aug 2026 04:27:41 +0800 Subject: [RISCV][GlobalISel] Select and expand global addresses --- backend/lib/Target/RISCV/RISCVAsmBackend.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'backend/lib/Target/RISCV/RISCVAsmBackend.cpp') diff --git a/backend/lib/Target/RISCV/RISCVAsmBackend.cpp b/backend/lib/Target/RISCV/RISCVAsmBackend.cpp index ac17403..e118d79 100644 --- a/backend/lib/Target/RISCV/RISCVAsmBackend.cpp +++ b/backend/lib/Target/RISCV/RISCVAsmBackend.cpp @@ -21,6 +21,7 @@ enum class RISCVRelocation : std::uint32_t { Branch = 16, JAL = 17, CallPLT = 19, + GOTHigh20 = 20, PCRelativeHigh20 = 23, PCRelativeLow12I = 24, PCRelativeLow12S = 25, @@ -193,6 +194,7 @@ Expected RISCVAsmBackend::applyFixup(mc::MCFixupKind Kind, std::span(Value) + 0x800U; const std::uint32_t High = static_cast(Adjusted >> 12U); @@ -244,6 +246,13 @@ Expected RISCVAsmBackend::relocationType(const mc::MCFixup &Fixup return std::unexpected(Kind.error()); return Relocation(RISCVRelocation::PCRelativeHigh20); } + if (isTargetKind(Fixup.Kind, RISCVFixupKind::GOTPCRelativeHigh20)) { + auto Kind = requireRelocationTargetKind( + Value, static_cast(RISCVMCExprKind::GOTPCRelativeHigh), "R_RISCV_GOT_HI20"); + if (!Kind) + return std::unexpected(Kind.error()); + return Relocation(RISCVRelocation::GOTHigh20); + } if (isTargetKind(Fixup.Kind, RISCVFixupKind::PCRelativeLow12I) || isTargetKind(Fixup.Kind, RISCVFixupKind::PCRelativeLow12S)) { auto Kind = requireRelocationTargetKind( -- cgit v1.2.3