<html><head></head><body><div id="editor_version_7.68.0_tKiAPIoS" style="word-break:break-word;"><div data-zone-id="0" data-line-index="0" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">Sorry, I sent the wrong one. Here's an updated version.</div></div><ol start="1" data-list-number="true" style="margin-top: 0px; margin-bottom: 0px; margin-left: 0px; padding-left: 0px; list-style-position: inside;"><li class="temp-li number1 font-size-14px" data-li-line="true" data-list="number1" data-ol-id="QLBHo1XW" data-start="1" style="line-height: 1.6; margin-top: 4px; margin-bottom: 4px; padding-left: 0px; display: list-item; list-style-type: decimal; font-size: 14px; font-family: LarkHackSafariFont, LarkEmojiFont, LarkChineseQuote, -apple-system, BlinkMacSystemFont, "Helvetica Neue", Tahoma, "PingFang SC", "Microsoft Yahei", Arial, "Hiragino Sans GB", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; margin-left: 0px; list-style-position: inside;" dir="auto"><span style="font-size: 14px;"><span style="font-family: LarkHackSafariFont, LarkEmojiFont, LarkChineseQuote, -apple-system, BlinkMacSystemFont, "Helvetica Neue", Tahoma, "PingFang SC", "Microsoft Yahei", Arial, "Hiragino Sans GB", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";"><span style="color: rgb(31, 35, 41);"><span style="background-color: rgb(255, 255, 255);">Address the comments && clang-format</span></span></span></span></li><li class="temp-li number1 font-size-14px" data-li-line="true" data-list="number1" data-ol-id="QLBHo1XW" data-start="2" style="line-height: 1.6; margin-top: 4px; margin-bottom: 4px; padding-left: 0px; display: list-item; list-style-type: decimal; font-size: 14px; font-family: LarkHackSafariFont, LarkEmojiFont, LarkChineseQuote, -apple-system, BlinkMacSystemFont, "Helvetica Neue", Tahoma, "PingFang SC", "Microsoft Yahei", Arial, "Hiragino Sans GB", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; margin-left: 0px; list-style-position: inside;" dir="auto"><span style="font-size: 14px;"><span style="font-family: LarkHackSafariFont, LarkEmojiFont, LarkChineseQuote, -apple-system, BlinkMacSystemFont, "Helvetica Neue", Tahoma, "PingFang SC", "Microsoft Yahei", Arial, "Hiragino Sans GB", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";"><span style="color: rgb(31, 35, 41);"><span style="background-color: rgb(255, 255, 255);">Rename the relocation name: R_RISCV_BASE_IDX_ADD/R_RISCV_BASE_IDX_LO12_I/R_RISCV_BASE_IDX_LO12_S</span></span></span></span></li><li class="temp-li number1 font-size-14px" data-li-line="true" data-list="number1" data-ol-id="QLBHo1XW" data-start="3" style="line-height: 1.6; margin-top: 4px; margin-bottom: 4px; padding-left: 0px; display: list-item; list-style-type: decimal; font-size: 14px; font-family: LarkHackSafariFont, LarkEmojiFont, LarkChineseQuote, -apple-system, BlinkMacSystemFont, "Helvetica Neue", Tahoma, "PingFang SC", "Microsoft Yahei", Arial, "Hiragino Sans GB", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; margin-left: 0px; list-style-position: inside;" dir="auto"><span style="font-size: 14px;"><span style="font-family: LarkHackSafariFont, LarkEmojiFont, LarkChineseQuote, -apple-system, BlinkMacSystemFont, "Helvetica Neue", Tahoma, "PingFang SC", "Microsoft Yahei", Arial, "Hiragino Sans GB", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";"><span style="color: rgb(31, 35, 41);"><span style="background-color: rgb(255, 255, 255);">Remove the R_RISCV_BASE_IDX_SHXADD</span></span></span></span></li></ol><div data-zone-id="0" data-line-index="4" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"><br/></div></div><div data-zone-id="0" data-line-index="5" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"><span style="font-size: 14px;"><span style="font-family: LarkHackSafariFont, LarkEmojiFont, LarkChineseQuote, -apple-system, BlinkMacSystemFont, "Helvetica Neue", Tahoma, "PingFang SC", "Microsoft Yahei", Arial, "Hiragino Sans GB", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";"><span style="color: rgb(31, 35, 41);"><span style="background-color: rgb(255, 255, 255);">LLVM Implement in LLD && MC : </span></span></span></span><span style="font-size: 14px;"><span style="font-family: LarkHackSafariFont, LarkEmojiFont, LarkChineseQuote, -apple-system, BlinkMacSystemFont, "Helvetica Neue", Tahoma, "PingFang SC", "Microsoft Yahei", Arial, "Hiragino Sans GB", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";"><span style="background-color: rgb(255, 255, 255);"><a class="not-doclink" href="https://github.com/llvm/llvm-project/pull/207901" linkid="jlYWXgrovN" target="_blank" rel="noopener noreferrer" style="transition: color 0.3s; cursor: pointer; text-decoration: none; color: rgb(20, 86, 240);">https://github.com/llvm/llvm-project/pull/207901</a></span></span></span></div></div><div data-zone-id="0" data-line-index="6" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"><br/></div></div><div data-zone-id="0" data-line-index="7" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">-----</div></div><div data-zone-id="0" data-line-index="8" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">From 1a8a35215b89ac1d06c44b71b215c5eaa369d104 Mon Sep 17 00:00:00 2001</div></div><div id="lark-mail-quote-8403aa90d10ad86155189f1e397b37e3"><div data-zone-id="0" data-line-index="9" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">From: wengliqin <<a class="not-doclink" href="mailto:liqin.weng@spacemit.com" linkid="8DdZFSDGw9" target="_blank" rel="noopener noreferrer" style="transition: color 0.3s; cursor: pointer; text-decoration: none; color: rgb(20, 86, 240);">liqin.weng@spacemit.com</a>></div></div><div data-zone-id="0" data-line-index="10" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">Date: Wed, 8 Jul 2026 19:13:20 +0800</div></div><div data-zone-id="0" data-line-index="11" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">Subject: [PATCH] RISCV-V: Add new relocation type for global array accesses</div></div><div data-zone-id="0" data-line-index="12" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> with non-constant indices.</div></div><div data-zone-id="0" data-line-index="13" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"><br/></div></div><div data-zone-id="0" data-line-index="14" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">This patch introduces support for new RISC-V relocation types (R_RISCV_BASE_IDX_*) to enable more efficient code generation for global array accesses with non-constant array subscripts</div></div><div data-zone-id="0" data-line-index="15" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"><br/></div></div><div data-zone-id="0" data-line-index="16" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">RISC-V PSABI specification: <a class="not-doclink" href="https://github.com/riscv-non-isa/riscv-elf-psabi-doc/pull/489" linkid="PoteXYGIS8" target="_blank" rel="noopener noreferrer" style="transition: color 0.3s; cursor: pointer; text-decoration: none; color: rgb(20, 86, 240);">https://github.com/riscv-non-isa/riscv-elf-psabi-doc/pull/489</a></div></div><div data-zone-id="0" data-line-index="17" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">---</div></div><div data-zone-id="0" data-line-index="18" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> bfd/ChangeLog | 13 +++</div></div><div data-zone-id="0" data-line-index="19" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> bfd/bfd-in2.h | 3 +</div></div><div data-zone-id="0" data-line-index="20" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> bfd/elfnn-riscv.c | 64 ++++++++++++++-</div></div><div data-zone-id="0" data-line-index="21" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> bfd/elfxx-riscv.c | 105 ++++++++++++++++++++++++-</div></div><div data-zone-id="0" data-line-index="22" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> bfd/libbfd.h | 3 +</div></div><div data-zone-id="0" data-line-index="23" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> bfd/reloc.c | 6 ++</div></div><div data-zone-id="0" data-line-index="24" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> gas/ChangeLog | 10 +++</div></div><div data-zone-id="0" data-line-index="25" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> gas/config/tc-riscv.c | 75 +++++++++++-------</div></div><div data-zone-id="0" data-line-index="26" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> gas/testsuite/gas/riscv/base-idx-add.d | 3 +</div></div><div data-zone-id="0" data-line-index="27" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> gas/testsuite/gas/riscv/base-idx-add.l | 10 +++</div></div><div data-zone-id="0" data-line-index="28" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> gas/testsuite/gas/riscv/base-idx-add.s | 19 +++++</div></div><div data-zone-id="0" data-line-index="29" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> include/ChangeLog | 4 +</div></div><div data-zone-id="0" data-line-index="30" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> include/elf/riscv.h | 6 ++</div></div><div data-zone-id="0" data-line-index="31" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> opcodes/riscv-opc.c | 19 +++--</div></div><div data-zone-id="0" data-line-index="32" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> 14 files changed, 301 insertions(+), 39 deletions(-)</div></div><div data-zone-id="0" data-line-index="33" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> create mode 100644 gas/testsuite/gas/riscv/base-idx-add.d</div></div><div data-zone-id="0" data-line-index="34" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> create mode 100644 gas/testsuite/gas/riscv/base-idx-add.l</div></div><div data-zone-id="0" data-line-index="35" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> create mode 100644 gas/testsuite/gas/riscv/base-idx-add.s</div></div><div data-zone-id="0" data-line-index="36" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"><br/></div></div><div data-zone-id="0" data-line-index="37" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">diff --git a/bfd/ChangeLog b/bfd/ChangeLog</div></div><div data-zone-id="0" data-line-index="38" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">index 6046f658f8b..ea4b9e41c69 100644</div></div><div data-zone-id="0" data-line-index="39" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">--- a/bfd/ChangeLog</div></div><div data-zone-id="0" data-line-index="40" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+++ b/bfd/ChangeLog</div></div><div data-zone-id="0" data-line-index="41" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">@@ -1,3 +1,16 @@</div></div><div data-zone-id="0" data-line-index="42" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+2026-06-22 wengliqin <<a class="not-doclink" href="mailto:liqin.weng@spacemit.com" linkid="UqJMVDXTFT" target="_blank" rel="noopener noreferrer" style="transition: color 0.3s; cursor: pointer; text-decoration: none; color: rgb(20, 86, 240);">liqin.weng@spacemit.com</a>></div></div><div data-zone-id="0" data-line-index="43" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+</div></div><div data-zone-id="0" data-line-index="44" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ * reloc.c (BFD_RELOC_RISCV_BASE_IDX_LO12_I, BFD_RELOC_RISCV_BASE_IDX_LO12_S,</div></div><div data-zone-id="0" data-line-index="45" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ BFD_RELOC_RISCV_BASE_IDX_ADD): New</div></div><div data-zone-id="0" data-line-index="46" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ relocation types.</div></div><div data-zone-id="0" data-line-index="47" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ * bfd-in2.h: Regenerate.</div></div><div data-zone-id="0" data-line-index="48" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ * libbfd.h: Regenerate.</div></div><div data-zone-id="0" data-line-index="49" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ * elfnn-riscv.c (perform_relocation): Add support for new REGREL</div></div><div data-zone-id="0" data-line-index="50" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ relocations.</div></div><div data-zone-id="0" data-line-index="51" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ (riscv_elf_relocate_section): Handle REGREL relocations for global</div></div><div data-zone-id="0" data-line-index="52" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ array accesses with non-constant indices.</div></div><div data-zone-id="0" data-line-index="53" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ * elfxx-riscv.c: Define relocation information for new REGREL types.</div></div><div data-zone-id="0" data-line-index="54" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+</div></div><div data-zone-id="0" data-line-index="55" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> 2025-09-16 Rainer Orth <<a class="not-doclink" href="mailto:ro@CeBiTec.Uni-Bielefeld.DE" linkid="TiEUKUdqkV" target="_blank" rel="noopener noreferrer" style="transition: color 0.3s; cursor: pointer; text-decoration: none; color: rgb(20, 86, 240);">ro@CeBiTec.Uni-Bielefeld.DE</a>></div></div><div data-zone-id="0" data-line-index="56" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"><span>
</span></div></div><div data-zone-id="0" data-line-index="57" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> * config.bfd <powerpc-*-solaris2*>: Remove.</div></div><div data-zone-id="0" data-line-index="58" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">diff --git a/bfd/bfd-in2.h b/bfd/bfd-in2.h</div></div><div data-zone-id="0" data-line-index="59" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">index d4e4f8e4375..b958ed3c048 100644</div></div><div data-zone-id="0" data-line-index="60" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">--- a/bfd/bfd-in2.h</div></div><div data-zone-id="0" data-line-index="61" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+++ b/bfd/bfd-in2.h</div></div><div data-zone-id="0" data-line-index="62" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">@@ -5364,6 +5364,9 @@ enum bfd_reloc_code_real</div></div><div data-zone-id="0" data-line-index="63" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> BFD_RELOC_RISCV_32_PCREL,</div></div><div data-zone-id="0" data-line-index="64" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> BFD_RELOC_RISCV_SET_ULEB128,</div></div><div data-zone-id="0" data-line-index="65" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> BFD_RELOC_RISCV_SUB_ULEB128,</div></div><div data-zone-id="0" data-line-index="66" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ BFD_RELOC_RISCV_BASE_IDX_LO12_I,</div></div><div data-zone-id="0" data-line-index="67" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ BFD_RELOC_RISCV_BASE_IDX_LO12_S,</div></div><div data-zone-id="0" data-line-index="68" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ BFD_RELOC_RISCV_BASE_IDX_ADD,</div></div><div data-zone-id="0" data-line-index="69" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"><span>
</span></div></div><div data-zone-id="0" data-line-index="70" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> /* Renesas RL78 Relocations. */</div></div><div data-zone-id="0" data-line-index="71" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> BFD_RELOC_RL78_NEG8,</div></div><div data-zone-id="0" data-line-index="72" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">diff --git a/bfd/elfnn-riscv.c b/bfd/elfnn-riscv.c</div></div><div data-zone-id="0" data-line-index="73" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">index d3963ec9a58..4ca57ab0c1a 100644</div></div><div data-zone-id="0" data-line-index="74" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">--- a/bfd/elfnn-riscv.c</div></div><div data-zone-id="0" data-line-index="75" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+++ b/bfd/elfnn-riscv.c</div></div><div data-zone-id="0" data-line-index="76" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">@@ -1999,7 +1999,9 @@ perform_relocation (const reloc_howto_type *howto,</div></div><div data-zone-id="0" data-line-index="77" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> break;</div></div><div data-zone-id="0" data-line-index="78" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"><span>
</span></div></div><div data-zone-id="0" data-line-index="79" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> case R_RISCV_LO12_I:</div></div><div data-zone-id="0" data-line-index="80" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ case R_RISCV_BASE_IDX_LO12_I:</div></div><div data-zone-id="0" data-line-index="81" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> case R_RISCV_GPREL_I:</div></div><div data-zone-id="0" data-line-index="82" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ case INTERNAL_R_RISCV_BASE_IDX_I:</div></div><div data-zone-id="0" data-line-index="83" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> case R_RISCV_TPREL_LO12_I:</div></div><div data-zone-id="0" data-line-index="84" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> case R_RISCV_TPREL_I:</div></div><div data-zone-id="0" data-line-index="85" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> case R_RISCV_PCREL_LO12_I:</div></div><div data-zone-id="0" data-line-index="86" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">@@ -2009,7 +2011,9 @@ perform_relocation (const reloc_howto_type *howto,</div></div><div data-zone-id="0" data-line-index="87" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> break;</div></div><div data-zone-id="0" data-line-index="88" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"><span>
</span></div></div><div data-zone-id="0" data-line-index="89" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> case R_RISCV_LO12_S:</div></div><div data-zone-id="0" data-line-index="90" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ case R_RISCV_BASE_IDX_LO12_S:</div></div><div data-zone-id="0" data-line-index="91" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> case R_RISCV_GPREL_S:</div></div><div data-zone-id="0" data-line-index="92" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ case INTERNAL_R_RISCV_BASE_IDX_S:</div></div><div data-zone-id="0" data-line-index="93" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> case R_RISCV_TPREL_LO12_S:</div></div><div data-zone-id="0" data-line-index="94" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> case R_RISCV_TPREL_S:</div></div><div data-zone-id="0" data-line-index="95" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> case R_RISCV_PCREL_LO12_S:</div></div><div data-zone-id="0" data-line-index="96" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">@@ -2130,6 +2134,8 @@ perform_relocation (const reloc_howto_type *howto,</div></div><div data-zone-id="0" data-line-index="97" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> case R_RISCV_32_PCREL:</div></div><div data-zone-id="0" data-line-index="98" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> case R_RISCV_TLS_DTPREL32:</div></div><div data-zone-id="0" data-line-index="99" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> case R_RISCV_TLS_DTPREL64:</div></div><div data-zone-id="0" data-line-index="100" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ case R_RISCV_BASE_IDX_ADD:</div></div><div data-zone-id="0" data-line-index="101" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ case INTERNAL_R_RISCV_BASE_IDX_ADD:</div></div><div data-zone-id="0" data-line-index="102" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> break;</div></div><div data-zone-id="0" data-line-index="103" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"><span>
</span></div></div><div data-zone-id="0" data-line-index="104" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> case R_RISCV_DELETE:</div></div><div data-zone-id="0" data-line-index="105" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">@@ -2722,6 +2728,9 @@ riscv_elf_relocate_section (bfd *output_bfd,</div></div><div data-zone-id="0" data-line-index="106" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> case R_RISCV_HI20:</div></div><div data-zone-id="0" data-line-index="107" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> case R_RISCV_LO12_I:</div></div><div data-zone-id="0" data-line-index="108" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> case R_RISCV_LO12_S:</div></div><div data-zone-id="0" data-line-index="109" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ case R_RISCV_BASE_IDX_LO12_I:</div></div><div data-zone-id="0" data-line-index="110" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ case R_RISCV_BASE_IDX_LO12_S:</div></div><div data-zone-id="0" data-line-index="111" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ case R_RISCV_BASE_IDX_ADD:</div></div><div data-zone-id="0" data-line-index="112" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> goto do_relocation;</div></div><div data-zone-id="0" data-line-index="113" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"><span>
</span></div></div><div data-zone-id="0" data-line-index="114" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> case R_RISCV_PCREL_HI20:</div></div><div data-zone-id="0" data-line-index="115" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">@@ -2788,6 +2797,9 @@ riscv_elf_relocate_section (bfd *output_bfd,</div></div><div data-zone-id="0" data-line-index="116" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> case R_RISCV_RVC_LUI:</div></div><div data-zone-id="0" data-line-index="117" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> case R_RISCV_LO12_I:</div></div><div data-zone-id="0" data-line-index="118" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> case R_RISCV_LO12_S:</div></div><div data-zone-id="0" data-line-index="119" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ case R_RISCV_BASE_IDX_LO12_I:</div></div><div data-zone-id="0" data-line-index="120" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ case R_RISCV_BASE_IDX_LO12_S:</div></div><div data-zone-id="0" data-line-index="121" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ case R_RISCV_BASE_IDX_ADD:</div></div><div data-zone-id="0" data-line-index="122" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> case R_RISCV_SET6:</div></div><div data-zone-id="0" data-line-index="123" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> case R_RISCV_SET8:</div></div><div data-zone-id="0" data-line-index="124" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> case R_RISCV_SET16:</div></div><div data-zone-id="0" data-line-index="125" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">@@ -3089,6 +3101,37 @@ riscv_elf_relocate_section (bfd *output_bfd,</div></div><div data-zone-id="0" data-line-index="126" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> break;</div></div><div data-zone-id="0" data-line-index="127" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> }</div></div><div data-zone-id="0" data-line-index="128" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"><span>
</span></div></div><div data-zone-id="0" data-line-index="129" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ case INTERNAL_R_RISCV_BASE_IDX_I:</div></div><div data-zone-id="0" data-line-index="130" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ case INTERNAL_R_RISCV_BASE_IDX_S:</div></div><div data-zone-id="0" data-line-index="131" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ {</div></div><div data-zone-id="0" data-line-index="132" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ /* After relaxation, the ld/st uses (gp + index) as its base</div></div><div data-zone-id="0" data-line-index="133" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ register, so the immediate encodes the symbol's displacement</div></div><div data-zone-id="0" data-line-index="134" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ from gp. perform_relocation will encode the final value</div></div><div data-zone-id="0" data-line-index="135" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ from (relocation + r_addend). */</div></div><div data-zone-id="0" data-line-index="136" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ bfd_vma gp = riscv_global_pointer_value (info);</div></div><div data-zone-id="0" data-line-index="137" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ bfd_vma disp = relocation + rel->r_addend - gp;</div></div><div data-zone-id="0" data-line-index="138" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ bool valid = (r_type == INTERNAL_R_RISCV_BASE_IDX_I)</div></div><div data-zone-id="0" data-line-index="139" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ ? VALID_ITYPE_IMM (disp)</div></div><div data-zone-id="0" data-line-index="140" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ : VALID_STYPE_IMM (disp);</div></div><div data-zone-id="0" data-line-index="141" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ if (valid)</div></div><div data-zone-id="0" data-line-index="142" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ rel->r_addend -= gp;</div></div><div data-zone-id="0" data-line-index="143" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ else</div></div><div data-zone-id="0" data-line-index="144" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ r = bfd_reloc_overflow;</div></div><div data-zone-id="0" data-line-index="145" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ break;</div></div><div data-zone-id="0" data-line-index="146" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ }</div></div><div data-zone-id="0" data-line-index="147" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+</div></div><div data-zone-id="0" data-line-index="148" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ case INTERNAL_R_RISCV_BASE_IDX_ADD:</div></div><div data-zone-id="0" data-line-index="149" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ {</div></div><div data-zone-id="0" data-line-index="150" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ /* Rewrite rs2 of the add/shXadd instruction to use gp as the</div></div><div data-zone-id="0" data-line-index="151" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ base register after relaxation. The same encoding change</div></div><div data-zone-id="0" data-line-index="152" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ applies to both add and shXadd — the opcode itself is left</div></div><div data-zone-id="0" data-line-index="153" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ intact. */</div></div><div data-zone-id="0" data-line-index="154" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ bfd_vma insn = bfd_getl32 (contents + rel->r_offset);</div></div><div data-zone-id="0" data-line-index="155" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ insn = (insn & ~(OP_MASK_RS2 << OP_SH_RS2)) | (X_GP << OP_SH_RS2);</div></div><div data-zone-id="0" data-line-index="156" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ bfd_putl32 (insn, contents + rel->r_offset);</div></div><div data-zone-id="0" data-line-index="157" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ break;</div></div><div data-zone-id="0" data-line-index="158" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ }</div></div><div data-zone-id="0" data-line-index="159" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+</div></div><div data-zone-id="0" data-line-index="160" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> case R_RISCV_PCREL_HI20:</div></div><div data-zone-id="0" data-line-index="161" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> absolute = riscv_zero_pcrel_hi_reloc (rel, info, pc, &relocation,</div></div><div data-zone-id="0" data-line-index="162" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> contents, howto);</div></div><div data-zone-id="0" data-line-index="163" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">@@ -5148,6 +5191,18 @@ _bfd_riscv_relax_lui (bfd *abfd,</div></div><div data-zone-id="0" data-line-index="164" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> rel->r_info = ELFNN_R_INFO (sym, R_RISCV_GPREL_S);</div></div><div data-zone-id="0" data-line-index="165" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> return true;</div></div><div data-zone-id="0" data-line-index="166" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"><span>
</span></div></div><div data-zone-id="0" data-line-index="167" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ case R_RISCV_BASE_IDX_LO12_I:</div></div><div data-zone-id="0" data-line-index="168" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ rel->r_info = ELFNN_R_INFO (sym, INTERNAL_R_RISCV_BASE_IDX_I);</div></div><div data-zone-id="0" data-line-index="169" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ return true;</div></div><div data-zone-id="0" data-line-index="170" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+</div></div><div data-zone-id="0" data-line-index="171" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ case R_RISCV_BASE_IDX_LO12_S:</div></div><div data-zone-id="0" data-line-index="172" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ rel->r_info = ELFNN_R_INFO (sym, INTERNAL_R_RISCV_BASE_IDX_S);</div></div><div data-zone-id="0" data-line-index="173" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ return true;</div></div><div data-zone-id="0" data-line-index="174" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+</div></div><div data-zone-id="0" data-line-index="175" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ case R_RISCV_BASE_IDX_ADD:</div></div><div data-zone-id="0" data-line-index="176" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ rel->r_info = ELFNN_R_INFO (sym, INTERNAL_R_RISCV_BASE_IDX_ADD);</div></div><div data-zone-id="0" data-line-index="177" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ return true;</div></div><div data-zone-id="0" data-line-index="178" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+</div></div><div data-zone-id="0" data-line-index="179" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> case R_RISCV_HI20:</div></div><div data-zone-id="0" data-line-index="180" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> /* Delete unnecessary LUI and reuse the reloc. */</div></div><div data-zone-id="0" data-line-index="181" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> *again = true;</div></div><div data-zone-id="0" data-line-index="182" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">@@ -5160,7 +5215,7 @@ _bfd_riscv_relax_lui (bfd *abfd,</div></div><div data-zone-id="0" data-line-index="183" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> }</div></div><div data-zone-id="0" data-line-index="184" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"><span>
</span></div></div><div data-zone-id="0" data-line-index="185" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> /* Can we relax LUI to C.LUI? Alignment might move the section forward;</div></div><div data-zone-id="0" data-line-index="186" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">- account for this assuming page alignment at worst. In the presence of </div></div><div data-zone-id="0" data-line-index="187" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ account for this assuming page alignment at worst. In the presence of</div></div><div data-zone-id="0" data-line-index="188" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> RELRO segment the linker aligns it by one page size, therefore sections</div></div><div data-zone-id="0" data-line-index="189" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> after the segment can be moved more than one page. */</div></div><div data-zone-id="0" data-line-index="190" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"><span>
</span></div></div><div data-zone-id="0" data-line-index="191" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">@@ -5537,9 +5592,10 @@ _bfd_riscv_relax_section (bfd *abfd, asection *sec,</div></div><div data-zone-id="0" data-line-index="192" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> if (type == R_RISCV_CALL</div></div><div data-zone-id="0" data-line-index="193" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> || type == R_RISCV_CALL_PLT)</div></div><div data-zone-id="0" data-line-index="194" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> relax_func = _bfd_riscv_relax_call;</div></div><div data-zone-id="0" data-line-index="195" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">- else if (type == R_RISCV_HI20</div></div><div data-zone-id="0" data-line-index="196" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">- || type == R_RISCV_LO12_I</div></div><div data-zone-id="0" data-line-index="197" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">- || type == R_RISCV_LO12_S)</div></div><div data-zone-id="0" data-line-index="198" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ else if (type == R_RISCV_HI20 || type == R_RISCV_LO12_I</div></div><div data-zone-id="0" data-line-index="199" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ || type == R_RISCV_LO12_S || type == R_RISCV_BASE_IDX_LO12_I</div></div><div data-zone-id="0" data-line-index="200" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ || type == R_RISCV_BASE_IDX_LO12_S</div></div><div data-zone-id="0" data-line-index="201" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ || type == R_RISCV_BASE_IDX_ADD)</div></div><div data-zone-id="0" data-line-index="202" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> relax_func = _bfd_riscv_relax_lui;</div></div><div data-zone-id="0" data-line-index="203" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> else if (type == R_RISCV_TPREL_HI20</div></div><div data-zone-id="0" data-line-index="204" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> || type == R_RISCV_TPREL_ADD</div></div><div data-zone-id="0" data-line-index="205" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">diff --git a/bfd/elfxx-riscv.c b/bfd/elfxx-riscv.c</div></div><div data-zone-id="0" data-line-index="206" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">index ee962b4f6f1..de385906589 100644</div></div><div data-zone-id="0" data-line-index="207" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">--- a/bfd/elfxx-riscv.c</div></div><div data-zone-id="0" data-line-index="208" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+++ b/bfd/elfxx-riscv.c</div></div><div data-zone-id="0" data-line-index="209" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">@@ -876,7 +876,63 @@ static const reloc_howto_type howto_table[] =</div></div><div data-zone-id="0" data-line-index="210" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> false, /* partial_inplace */</div></div><div data-zone-id="0" data-line-index="211" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> 0, /* src_mask */</div></div><div data-zone-id="0" data-line-index="212" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> ENCODE_ITYPE_IMM (-1U), /* dst_mask */</div></div><div data-zone-id="0" data-line-index="213" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">- false) /* pcrel_offset */</div></div><div data-zone-id="0" data-line-index="214" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ false), /* pcrel_offset */</div></div><div data-zone-id="0" data-line-index="215" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+</div></div><div data-zone-id="0" data-line-index="216" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ /* Reserved slots 66-76. */</div></div><div data-zone-id="0" data-line-index="217" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ EMPTY_HOWTO (66),</div></div><div data-zone-id="0" data-line-index="218" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ EMPTY_HOWTO (67),</div></div><div data-zone-id="0" data-line-index="219" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ EMPTY_HOWTO (68),</div></div><div data-zone-id="0" data-line-index="220" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ EMPTY_HOWTO (69),</div></div><div data-zone-id="0" data-line-index="221" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ EMPTY_HOWTO (70),</div></div><div data-zone-id="0" data-line-index="222" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ EMPTY_HOWTO (71),</div></div><div data-zone-id="0" data-line-index="223" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ EMPTY_HOWTO (72),</div></div><div data-zone-id="0" data-line-index="224" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ EMPTY_HOWTO (73),</div></div><div data-zone-id="0" data-line-index="225" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ EMPTY_HOWTO (74),</div></div><div data-zone-id="0" data-line-index="226" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ EMPTY_HOWTO (75),</div></div><div data-zone-id="0" data-line-index="227" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ EMPTY_HOWTO (76),</div></div><div data-zone-id="0" data-line-index="228" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+</div></div><div data-zone-id="0" data-line-index="229" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ /* Global array accesses with non-constant subscript (base + index). */</div></div><div data-zone-id="0" data-line-index="230" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ HOWTO (R_RISCV_BASE_IDX_LO12_I, /* type */</div></div><div data-zone-id="0" data-line-index="231" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ 0, /* rightshift */</div></div><div data-zone-id="0" data-line-index="232" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ 4, /* size */</div></div><div data-zone-id="0" data-line-index="233" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ 32, /* bitsize */</div></div><div data-zone-id="0" data-line-index="234" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ false, /* pc_relative */</div></div><div data-zone-id="0" data-line-index="235" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ 0, /* bitpos */</div></div><div data-zone-id="0" data-line-index="236" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ complain_overflow_dont, /* complain_on_overflow */</div></div><div data-zone-id="0" data-line-index="237" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ bfd_elf_generic_reloc, /* special_function */</div></div><div data-zone-id="0" data-line-index="238" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ "R_RISCV_BASE_IDX_LO12_I", /* name */</div></div><div data-zone-id="0" data-line-index="239" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ false, /* partial_inplace */</div></div><div data-zone-id="0" data-line-index="240" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ 0, /* src_mask */</div></div><div data-zone-id="0" data-line-index="241" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ ENCODE_ITYPE_IMM (-1U), /* dst_mask */</div></div><div data-zone-id="0" data-line-index="242" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ false), /* pcrel_offset */</div></div><div data-zone-id="0" data-line-index="243" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+</div></div><div data-zone-id="0" data-line-index="244" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ HOWTO (R_RISCV_BASE_IDX_LO12_S, /* type */</div></div><div data-zone-id="0" data-line-index="245" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ 0, /* rightshift */</div></div><div data-zone-id="0" data-line-index="246" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ 4, /* size */</div></div><div data-zone-id="0" data-line-index="247" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ 32, /* bitsize */</div></div><div data-zone-id="0" data-line-index="248" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ false, /* pc_relative */</div></div><div data-zone-id="0" data-line-index="249" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ 0, /* bitpos */</div></div><div data-zone-id="0" data-line-index="250" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ complain_overflow_dont, /* complain_on_overflow */</div></div><div data-zone-id="0" data-line-index="251" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ bfd_elf_generic_reloc, /* special_function */</div></div><div data-zone-id="0" data-line-index="252" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ "R_RISCV_BASE_IDX_LO12_S", /* name */</div></div><div data-zone-id="0" data-line-index="253" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ false, /* partial_inplace */</div></div><div data-zone-id="0" data-line-index="254" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ 0, /* src_mask */</div></div><div data-zone-id="0" data-line-index="255" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ ENCODE_STYPE_IMM (-1U), /* dst_mask */</div></div><div data-zone-id="0" data-line-index="256" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ false), /* pcrel_offset */</div></div><div data-zone-id="0" data-line-index="257" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+</div></div><div data-zone-id="0" data-line-index="258" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ HOWTO (R_RISCV_BASE_IDX_ADD, /* type */</div></div><div data-zone-id="0" data-line-index="259" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ 0, /* rightshift */</div></div><div data-zone-id="0" data-line-index="260" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ 4, /* size */</div></div><div data-zone-id="0" data-line-index="261" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ 32, /* bitsize */</div></div><div data-zone-id="0" data-line-index="262" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ false, /* pc_relative */</div></div><div data-zone-id="0" data-line-index="263" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ 0, /* bitpos */</div></div><div data-zone-id="0" data-line-index="264" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ complain_overflow_dont, /* complain_on_overflow */</div></div><div data-zone-id="0" data-line-index="265" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ bfd_elf_generic_reloc, /* special_function */</div></div><div data-zone-id="0" data-line-index="266" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ "R_RISCV_BASE_IDX_ADD", /* name */</div></div><div data-zone-id="0" data-line-index="267" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ false, /* partial_inplace */</div></div><div data-zone-id="0" data-line-index="268" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ 0, /* src_mask */</div></div><div data-zone-id="0" data-line-index="269" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ 0, /* dst_mask */</div></div><div data-zone-id="0" data-line-index="270" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ false), /* pcrel_offset */</div></div><div data-zone-id="0" data-line-index="271" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> };</div></div><div data-zone-id="0" data-line-index="272" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"><span>
</span></div></div><div data-zone-id="0" data-line-index="273" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> static const reloc_howto_type howto_table_internal[] =</div></div><div data-zone-id="0" data-line-index="274" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">@@ -961,6 +1017,50 @@ static const reloc_howto_type howto_table_internal[] =</div></div><div data-zone-id="0" data-line-index="275" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> 0, /* src_mask */</div></div><div data-zone-id="0" data-line-index="276" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> ENCODE_STYPE_IMM (-1U), /* dst_mask */</div></div><div data-zone-id="0" data-line-index="277" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> false), /* pcrel_offset */</div></div><div data-zone-id="0" data-line-index="278" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+</div></div><div data-zone-id="0" data-line-index="279" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ /* Global array accesses with non-constant subscript (base + index),</div></div><div data-zone-id="0" data-line-index="280" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ after relaxation. */</div></div><div data-zone-id="0" data-line-index="281" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ HOWTO (INTERNAL_R_RISCV_BASE_IDX_I, /* type */</div></div><div data-zone-id="0" data-line-index="282" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ 0, /* rightshift */</div></div><div data-zone-id="0" data-line-index="283" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ 4, /* size */</div></div><div data-zone-id="0" data-line-index="284" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ 32, /* bitsize */</div></div><div data-zone-id="0" data-line-index="285" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ false, /* pc_relative */</div></div><div data-zone-id="0" data-line-index="286" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ 0, /* bitpos */</div></div><div data-zone-id="0" data-line-index="287" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ complain_overflow_dont, /* complain_on_overflow */</div></div><div data-zone-id="0" data-line-index="288" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ bfd_elf_generic_reloc, /* special_function */</div></div><div data-zone-id="0" data-line-index="289" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ "INTERNAL_R_RISCV_BASE_IDX_I", /* name */</div></div><div data-zone-id="0" data-line-index="290" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ false, /* partial_inplace */</div></div><div data-zone-id="0" data-line-index="291" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ 0, /* src_mask */</div></div><div data-zone-id="0" data-line-index="292" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ ENCODE_ITYPE_IMM (-1U), /* dst_mask */</div></div><div data-zone-id="0" data-line-index="293" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ false), /* pcrel_offset */</div></div><div data-zone-id="0" data-line-index="294" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+</div></div><div data-zone-id="0" data-line-index="295" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ HOWTO (INTERNAL_R_RISCV_BASE_IDX_S, /* type */</div></div><div data-zone-id="0" data-line-index="296" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ 0, /* rightshift */</div></div><div data-zone-id="0" data-line-index="297" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ 4, /* size */</div></div><div data-zone-id="0" data-line-index="298" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ 32, /* bitsize */</div></div><div data-zone-id="0" data-line-index="299" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ false, /* pc_relative */</div></div><div data-zone-id="0" data-line-index="300" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ 0, /* bitpos */</div></div><div data-zone-id="0" data-line-index="301" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ complain_overflow_dont, /* complain_on_overflow */</div></div><div data-zone-id="0" data-line-index="302" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ bfd_elf_generic_reloc, /* special_function */</div></div><div data-zone-id="0" data-line-index="303" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ "INTERNAL_R_RISCV_BASE_IDX_S", /* name */</div></div><div data-zone-id="0" data-line-index="304" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ false, /* partial_inplace */</div></div><div data-zone-id="0" data-line-index="305" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ 0, /* src_mask */</div></div><div data-zone-id="0" data-line-index="306" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ ENCODE_STYPE_IMM (-1U), /* dst_mask */</div></div><div data-zone-id="0" data-line-index="307" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ false), /* pcrel_offset */</div></div><div data-zone-id="0" data-line-index="308" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+</div></div><div data-zone-id="0" data-line-index="309" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ HOWTO (INTERNAL_R_RISCV_BASE_IDX_ADD, /* type */</div></div><div data-zone-id="0" data-line-index="310" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ 0, /* rightshift */</div></div><div data-zone-id="0" data-line-index="311" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ 4, /* size */</div></div><div data-zone-id="0" data-line-index="312" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ 32, /* bitsize */</div></div><div data-zone-id="0" data-line-index="313" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ false, /* pc_relative */</div></div><div data-zone-id="0" data-line-index="314" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ 0, /* bitpos */</div></div><div data-zone-id="0" data-line-index="315" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ complain_overflow_dont, /* complain_on_overflow */</div></div><div data-zone-id="0" data-line-index="316" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ bfd_elf_generic_reloc, /* special_function */</div></div><div data-zone-id="0" data-line-index="317" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ "INTERNAL_R_RISCV_BASE_IDX_ADD", /* name */</div></div><div data-zone-id="0" data-line-index="318" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ false, /* partial_inplace */</div></div><div data-zone-id="0" data-line-index="319" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ 0, /* src_mask */</div></div><div data-zone-id="0" data-line-index="320" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ 0, /* dst_mask */</div></div><div data-zone-id="0" data-line-index="321" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ false) /* pcrel_offset */</div></div><div data-zone-id="0" data-line-index="322" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> };</div></div><div data-zone-id="0" data-line-index="323" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"><span>
</span></div></div><div data-zone-id="0" data-line-index="324" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> /* A mapping from BFD reloc types to RISC-V ELF reloc types. */</div></div><div data-zone-id="0" data-line-index="325" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">@@ -1023,6 +1123,9 @@ static const struct elf_reloc_map riscv_reloc_map[] =</div></div><div data-zone-id="0" data-line-index="326" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> { BFD_RELOC_RISCV_32_PCREL, R_RISCV_32_PCREL },</div></div><div data-zone-id="0" data-line-index="327" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> { BFD_RELOC_RISCV_SET_ULEB128, R_RISCV_SET_ULEB128 },</div></div><div data-zone-id="0" data-line-index="328" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> { BFD_RELOC_RISCV_SUB_ULEB128, R_RISCV_SUB_ULEB128 },</div></div><div data-zone-id="0" data-line-index="329" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ { BFD_RELOC_RISCV_BASE_IDX_LO12_I, R_RISCV_BASE_IDX_LO12_I},</div></div><div data-zone-id="0" data-line-index="330" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ { BFD_RELOC_RISCV_BASE_IDX_LO12_S, R_RISCV_BASE_IDX_LO12_S},</div></div><div data-zone-id="0" data-line-index="331" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ { BFD_RELOC_RISCV_BASE_IDX_ADD, R_RISCV_BASE_IDX_ADD},</div></div><div data-zone-id="0" data-line-index="332" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> };</div></div><div data-zone-id="0" data-line-index="333" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"><span>
</span></div></div><div data-zone-id="0" data-line-index="334" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> struct riscv_profiles</div></div><div data-zone-id="0" data-line-index="335" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">diff --git a/bfd/libbfd.h b/bfd/libbfd.h</div></div><div data-zone-id="0" data-line-index="336" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">index a27134dcd78..7e49498d0f1 100644</div></div><div data-zone-id="0" data-line-index="337" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">--- a/bfd/libbfd.h</div></div><div data-zone-id="0" data-line-index="338" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+++ b/bfd/libbfd.h</div></div><div data-zone-id="0" data-line-index="339" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">@@ -2363,6 +2363,9 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@",</div></div><div data-zone-id="0" data-line-index="340" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> "BFD_RELOC_RISCV_TLSDESC_ADD_LO12",</div></div><div data-zone-id="0" data-line-index="341" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> "BFD_RELOC_RISCV_TLSDESC_CALL",</div></div><div data-zone-id="0" data-line-index="342" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> "BFD_RELOC_RISCV_ALIGN",</div></div><div data-zone-id="0" data-line-index="343" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ "BFD_RELOC_RISCV_BASE_IDX_LO12_I",</div></div><div data-zone-id="0" data-line-index="344" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ "BFD_RELOC_RISCV_BASE_IDX_LO12_S",</div></div><div data-zone-id="0" data-line-index="345" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ "BFD_RELOC_RISCV_BASE_IDX_ADD",</div></div><div data-zone-id="0" data-line-index="346" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> "BFD_RELOC_RISCV_RVC_BRANCH",</div></div><div data-zone-id="0" data-line-index="347" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> "BFD_RELOC_RISCV_RVC_JUMP",</div></div><div data-zone-id="0" data-line-index="348" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> "BFD_RELOC_RISCV_RELAX",</div></div><div data-zone-id="0" data-line-index="349" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">diff --git a/bfd/reloc.c b/bfd/reloc.c</div></div><div data-zone-id="0" data-line-index="350" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">index 98343696a33..6f6ff98c4a5 100644</div></div><div data-zone-id="0" data-line-index="351" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">--- a/bfd/reloc.c</div></div><div data-zone-id="0" data-line-index="352" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+++ b/bfd/reloc.c</div></div><div data-zone-id="0" data-line-index="353" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">@@ -4861,6 +4861,12 @@ ENUMX</div></div><div data-zone-id="0" data-line-index="354" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> BFD_RELOC_RISCV_TLSDESC_ADD_LO12</div></div><div data-zone-id="0" data-line-index="355" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> ENUMX</div></div><div data-zone-id="0" data-line-index="356" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> BFD_RELOC_RISCV_TLSDESC_CALL</div></div><div data-zone-id="0" data-line-index="357" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ENUMX</div></div><div data-zone-id="0" data-line-index="358" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ BFD_RELOC_RISCV_BASE_IDX_LO12_I</div></div><div data-zone-id="0" data-line-index="359" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ENUMX</div></div><div data-zone-id="0" data-line-index="360" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ BFD_RELOC_RISCV_BASE_IDX_LO12_S</div></div><div data-zone-id="0" data-line-index="361" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ENUMX</div></div><div data-zone-id="0" data-line-index="362" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ BFD_RELOC_RISCV_BASE_IDX_ADD</div></div><div data-zone-id="0" data-line-index="363" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> ENUMX</div></div><div data-zone-id="0" data-line-index="364" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> BFD_RELOC_RISCV_ALIGN</div></div><div data-zone-id="0" data-line-index="365" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> ENUMX</div></div><div data-zone-id="0" data-line-index="366" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">diff --git a/gas/ChangeLog b/gas/ChangeLog</div></div><div data-zone-id="0" data-line-index="367" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">index 492475658f1..5c69c63bce6 100644</div></div><div data-zone-id="0" data-line-index="368" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">--- a/gas/ChangeLog</div></div><div data-zone-id="0" data-line-index="369" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+++ b/gas/ChangeLog</div></div><div data-zone-id="0" data-line-index="370" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">@@ -1,3 +1,13 @@</div></div><div data-zone-id="0" data-line-index="371" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+2026-03-24 wengliqin <<a class="not-doclink" href="mailto:liqin.weng@spacemit.com" linkid="Wc8ng2qlo0" target="_blank" rel="noopener noreferrer" style="transition: color 0.3s; cursor: pointer; text-decoration: none; color: rgb(20, 86, 240);">liqin.weng@spacemit.com</a>></div></div><div data-zone-id="0" data-line-index="372" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+</div></div><div data-zone-id="0" data-line-index="373" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ * config/tc-riscv.c: Add support for RISC-V Base IDX relocations.</div></div><div data-zone-id="0" data-line-index="374" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ * testsuite/gas/riscv/base-idx-add.s: New test for BASE_IDX_ADD.</div></div><div data-zone-id="0" data-line-index="375" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ * testsuite/gas/riscv/base-idx-add.d: Corresponding test output.</div></div><div data-zone-id="0" data-line-index="376" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ * testsuite/gas/riscv/base-idx-add.l: Corresponding test output.</div></div><div data-zone-id="0" data-line-index="377" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ * testsuite/gas/riscv/base-idx-shxadd.s: Ditto</div></div><div data-zone-id="0" data-line-index="378" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ * testsuite/gas/riscv/base-idx-shxadd.d: Corresponding test output.</div></div><div data-zone-id="0" data-line-index="379" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ * testsuite/gas/riscv/base-idx-shxadd.l: Corresponding test output.</div></div><div data-zone-id="0" data-line-index="380" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+</div></div><div data-zone-id="0" data-line-index="381" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> 2025-09-16 Rainer Orth <<a class="not-doclink" href="mailto:ro@CeBiTec.Uni-Bielefeld.DE" linkid="Ef1hd7sKel" target="_blank" rel="noopener noreferrer" style="transition: color 0.3s; cursor: pointer; text-decoration: none; color: rgb(20, 86, 240);">ro@CeBiTec.Uni-Bielefeld.DE</a>></div></div><div data-zone-id="0" data-line-index="382" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"><span>
</span></div></div><div data-zone-id="0" data-line-index="383" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> * NEWS: Mention Solaris/PowerPC removal.</div></div><div data-zone-id="0" data-line-index="384" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">diff --git a/gas/config/tc-riscv.c b/gas/config/tc-riscv.c</div></div><div data-zone-id="0" data-line-index="385" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">index 6bcf53832a0..e7753ff7487 100644</div></div><div data-zone-id="0" data-line-index="386" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">--- a/gas/config/tc-riscv.c</div></div><div data-zone-id="0" data-line-index="387" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+++ b/gas/config/tc-riscv.c</div></div><div data-zone-id="0" data-line-index="388" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">@@ -1958,6 +1958,12 @@ riscv_apply_const_reloc (bfd_reloc_code_real_type reloc_type, bfd_vma value)</div></div><div data-zone-id="0" data-line-index="389" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> case BFD_RELOC_RISCV_LO12_I:</div></div><div data-zone-id="0" data-line-index="390" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> return ENCODE_ITYPE_IMM (value);</div></div><div data-zone-id="0" data-line-index="391" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"><span>
</span></div></div><div data-zone-id="0" data-line-index="392" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ case BFD_RELOC_RISCV_BASE_IDX_LO12_S:</div></div><div data-zone-id="0" data-line-index="393" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ return ENCODE_STYPE_IMM (value);</div></div><div data-zone-id="0" data-line-index="394" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+</div></div><div data-zone-id="0" data-line-index="395" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ case BFD_RELOC_RISCV_BASE_IDX_LO12_I:</div></div><div data-zone-id="0" data-line-index="396" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ return ENCODE_ITYPE_IMM (value);</div></div><div data-zone-id="0" data-line-index="397" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+</div></div><div data-zone-id="0" data-line-index="398" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> default:</div></div><div data-zone-id="0" data-line-index="399" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> abort ();</div></div><div data-zone-id="0" data-line-index="400" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> }</div></div><div data-zone-id="0" data-line-index="401" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">@@ -2022,7 +2028,8 @@ append_insn (struct riscv_cl_insn *ip, expressionS *address_expr,</div></div><div data-zone-id="0" data-line-index="402" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> if (reloc_type == BFD_RELOC_RISCV_HI20</div></div><div data-zone-id="0" data-line-index="403" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> || reloc_type == BFD_RELOC_RISCV_PCREL_HI20</div></div><div data-zone-id="0" data-line-index="404" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> || reloc_type == BFD_RELOC_RISCV_TPREL_HI20</div></div><div data-zone-id="0" data-line-index="405" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">- || reloc_type == BFD_RELOC_RISCV_TPREL_ADD)</div></div><div data-zone-id="0" data-line-index="406" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ || reloc_type == BFD_RELOC_RISCV_TPREL_ADD</div></div><div data-zone-id="0" data-line-index="407" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ || reloc_type == BFD_RELOC_RISCV_BASE_IDX_ADD)</div></div><div data-zone-id="0" data-line-index="408" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> {</div></div><div data-zone-id="0" data-line-index="409" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> frag_wane (frag_now);</div></div><div data-zone-id="0" data-line-index="410" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> frag_new (0);</div></div><div data-zone-id="0" data-line-index="411" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">@@ -2452,30 +2459,27 @@ static const struct percent_op_match percent_op_utype[] =</div></div><div data-zone-id="0" data-line-index="412" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> {0, 0}</div></div><div data-zone-id="0" data-line-index="413" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> };</div></div><div data-zone-id="0" data-line-index="414" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"><span>
</span></div></div><div data-zone-id="0" data-line-index="415" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">-static const struct percent_op_match percent_op_itype[] =</div></div><div data-zone-id="0" data-line-index="416" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">-{</div></div><div data-zone-id="0" data-line-index="417" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">- {"lo", BFD_RELOC_RISCV_LO12_I},</div></div><div data-zone-id="0" data-line-index="418" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">- {"tprel_lo", BFD_RELOC_RISCV_TPREL_LO12_I},</div></div><div data-zone-id="0" data-line-index="419" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">- {"pcrel_lo", BFD_RELOC_RISCV_PCREL_LO12_I},</div></div><div data-zone-id="0" data-line-index="420" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">- {"tlsdesc_load_lo", BFD_RELOC_RISCV_TLSDESC_LOAD_LO12},</div></div><div data-zone-id="0" data-line-index="421" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">- {"tlsdesc_add_lo", BFD_RELOC_RISCV_TLSDESC_ADD_LO12},</div></div><div data-zone-id="0" data-line-index="422" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">- {0, 0}</div></div><div data-zone-id="0" data-line-index="423" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">-};</div></div><div data-zone-id="0" data-line-index="424" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">-</div></div><div data-zone-id="0" data-line-index="425" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">-static const struct percent_op_match percent_op_stype[] =</div></div><div data-zone-id="0" data-line-index="426" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">-{</div></div><div data-zone-id="0" data-line-index="427" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">- {"lo", BFD_RELOC_RISCV_LO12_S},</div></div><div data-zone-id="0" data-line-index="428" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">- {"tprel_lo", BFD_RELOC_RISCV_TPREL_LO12_S},</div></div><div data-zone-id="0" data-line-index="429" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">- {"pcrel_lo", BFD_RELOC_RISCV_PCREL_LO12_S},</div></div><div data-zone-id="0" data-line-index="430" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">- {0, 0}</div></div><div data-zone-id="0" data-line-index="431" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">-};</div></div><div data-zone-id="0" data-line-index="432" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">-</div></div><div data-zone-id="0" data-line-index="433" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">-static const struct percent_op_match percent_op_relax_only[] =</div></div><div data-zone-id="0" data-line-index="434" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">-{</div></div><div data-zone-id="0" data-line-index="435" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">- {"tlsdesc_call", BFD_RELOC_RISCV_TLSDESC_CALL},</div></div><div data-zone-id="0" data-line-index="436" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">- {"tprel_add", BFD_RELOC_RISCV_TPREL_ADD},</div></div><div data-zone-id="0" data-line-index="437" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">- {0, 0}</div></div><div data-zone-id="0" data-line-index="438" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">-};</div></div><div data-zone-id="0" data-line-index="439" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+static const struct percent_op_match percent_op_itype[]</div></div><div data-zone-id="0" data-line-index="440" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ = {{"lo", BFD_RELOC_RISCV_LO12_I},</div></div><div data-zone-id="0" data-line-index="441" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ {"base_idx_lo", BFD_RELOC_RISCV_BASE_IDX_LO12_I},</div></div><div data-zone-id="0" data-line-index="442" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ {"tprel_lo", BFD_RELOC_RISCV_TPREL_LO12_I},</div></div><div data-zone-id="0" data-line-index="443" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ {"pcrel_lo", BFD_RELOC_RISCV_PCREL_LO12_I},</div></div><div data-zone-id="0" data-line-index="444" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ {"tlsdesc_load_lo", BFD_RELOC_RISCV_TLSDESC_LOAD_LO12},</div></div><div data-zone-id="0" data-line-index="445" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ {"tlsdesc_add_lo", BFD_RELOC_RISCV_TLSDESC_ADD_LO12},</div></div><div data-zone-id="0" data-line-index="446" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ {0, 0}};</div></div><div data-zone-id="0" data-line-index="447" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+</div></div><div data-zone-id="0" data-line-index="448" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+static const struct percent_op_match percent_op_stype[]</div></div><div data-zone-id="0" data-line-index="449" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ = {{"lo", BFD_RELOC_RISCV_LO12_S},</div></div><div data-zone-id="0" data-line-index="450" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ {"base_idx_lo", BFD_RELOC_RISCV_BASE_IDX_LO12_S},</div></div><div data-zone-id="0" data-line-index="451" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ {"tprel_lo", BFD_RELOC_RISCV_TPREL_LO12_S},</div></div><div data-zone-id="0" data-line-index="452" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ {"pcrel_lo", BFD_RELOC_RISCV_PCREL_LO12_S},</div></div><div data-zone-id="0" data-line-index="453" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ {0, 0}};</div></div><div data-zone-id="0" data-line-index="454" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+</div></div><div data-zone-id="0" data-line-index="455" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+static const struct percent_op_match percent_op_relax_only[]</div></div><div data-zone-id="0" data-line-index="456" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ = {{"tlsdesc_call", BFD_RELOC_RISCV_TLSDESC_CALL},</div></div><div data-zone-id="0" data-line-index="457" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ {"tprel_add", BFD_RELOC_RISCV_TPREL_ADD},</div></div><div data-zone-id="0" data-line-index="458" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ {"base_idx_add", BFD_RELOC_RISCV_BASE_IDX_ADD},</div></div><div data-zone-id="0" data-line-index="459" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ {0, 0}};</div></div><div data-zone-id="0" data-line-index="460" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"><span>
</span></div></div><div data-zone-id="0" data-line-index="461" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> static const struct percent_op_match percent_op_null[] =</div></div><div data-zone-id="0" data-line-index="462" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> {</div></div><div data-zone-id="0" data-line-index="463" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">@@ -3633,15 +3637,24 @@ riscv_ip (char *str, struct riscv_cl_insn *ip, expressionS *imm_expr,</div></div><div data-zone-id="0" data-line-index="464" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"><span>
</span></div></div><div data-zone-id="0" data-line-index="465" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> case 'j': /* Sign-extended immediate. */</div></div><div data-zone-id="0" data-line-index="466" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> p = percent_op_itype;</div></div><div data-zone-id="0" data-line-index="467" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">- *imm_reloc = BFD_RELOC_RISCV_LO12_I;</div></div><div data-zone-id="0" data-line-index="468" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ if (strncmp (asarg, "%base_idx_lo", 9) == 0)</div></div><div data-zone-id="0" data-line-index="469" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ *imm_reloc = BFD_RELOC_RISCV_BASE_IDX_LO12_I;</div></div><div data-zone-id="0" data-line-index="470" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ else</div></div><div data-zone-id="0" data-line-index="471" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ *imm_reloc = BFD_RELOC_RISCV_LO12_I;</div></div><div data-zone-id="0" data-line-index="472" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> goto alu_op;</div></div><div data-zone-id="0" data-line-index="473" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> case 'q': /* Store displacement. */</div></div><div data-zone-id="0" data-line-index="474" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> p = percent_op_stype;</div></div><div data-zone-id="0" data-line-index="475" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">- *imm_reloc = BFD_RELOC_RISCV_LO12_S;</div></div><div data-zone-id="0" data-line-index="476" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ if (strncmp (asarg, "%base_idx_lo", 9) == 0)</div></div><div data-zone-id="0" data-line-index="477" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ *imm_reloc = BFD_RELOC_RISCV_BASE_IDX_LO12_S;</div></div><div data-zone-id="0" data-line-index="478" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ else</div></div><div data-zone-id="0" data-line-index="479" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ *imm_reloc = BFD_RELOC_RISCV_LO12_S;</div></div><div data-zone-id="0" data-line-index="480" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> goto load_store;</div></div><div data-zone-id="0" data-line-index="481" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> case 'o': /* Load displacement. */</div></div><div data-zone-id="0" data-line-index="482" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> p = percent_op_itype;</div></div><div data-zone-id="0" data-line-index="483" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">- *imm_reloc = BFD_RELOC_RISCV_LO12_I;</div></div><div data-zone-id="0" data-line-index="484" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ if (strncmp (asarg, "%base_idx_lo", 9) == 0)</div></div><div data-zone-id="0" data-line-index="485" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ *imm_reloc = BFD_RELOC_RISCV_BASE_IDX_LO12_I;</div></div><div data-zone-id="0" data-line-index="486" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ else</div></div><div data-zone-id="0" data-line-index="487" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ *imm_reloc = BFD_RELOC_RISCV_LO12_I;</div></div><div data-zone-id="0" data-line-index="488" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> goto load_store;</div></div><div data-zone-id="0" data-line-index="489" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> case '1':</div></div><div data-zone-id="0" data-line-index="490" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> /* This is used for TLS relocations that acts as relaxation</div></div><div data-zone-id="0" data-line-index="491" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">@@ -4687,6 +4700,8 @@ md_apply_fix (fixS *fixP, valueT *valP, segT seg)</div></div><div data-zone-id="0" data-line-index="492" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> case BFD_RELOC_RISCV_HI20:</div></div><div data-zone-id="0" data-line-index="493" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> case BFD_RELOC_RISCV_LO12_I:</div></div><div data-zone-id="0" data-line-index="494" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> case BFD_RELOC_RISCV_LO12_S:</div></div><div data-zone-id="0" data-line-index="495" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ case BFD_RELOC_RISCV_BASE_IDX_LO12_I:</div></div><div data-zone-id="0" data-line-index="496" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ case BFD_RELOC_RISCV_BASE_IDX_LO12_S:</div></div><div data-zone-id="0" data-line-index="497" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> bfd_putl32 (riscv_apply_const_reloc (fixP->fx_r_type, *valP)</div></div><div data-zone-id="0" data-line-index="498" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> | bfd_getl32 (buf), buf);</div></div><div data-zone-id="0" data-line-index="499" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> if (fixP->fx_addsy == NULL)</div></div><div data-zone-id="0" data-line-index="500" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">@@ -4694,6 +4709,10 @@ md_apply_fix (fixS *fixP, valueT *valP, segT seg)</div></div><div data-zone-id="0" data-line-index="501" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> relaxable = true;</div></div><div data-zone-id="0" data-line-index="502" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> break;</div></div><div data-zone-id="0" data-line-index="503" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"><span>
</span></div></div><div data-zone-id="0" data-line-index="504" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ case BFD_RELOC_RISCV_BASE_IDX_ADD:</div></div><div data-zone-id="0" data-line-index="505" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ relaxable = true;</div></div><div data-zone-id="0" data-line-index="506" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ break;</div></div><div data-zone-id="0" data-line-index="507" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+</div></div><div data-zone-id="0" data-line-index="508" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> case BFD_RELOC_RISCV_GOT_HI20:</div></div><div data-zone-id="0" data-line-index="509" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> /* R_RISCV_GOT_HI20 and the following R_RISCV_LO12_I are relaxable</div></div><div data-zone-id="0" data-line-index="510" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> only if it is created as a result of la or lga assembler macros. */</div></div><div data-zone-id="0" data-line-index="511" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">diff --git a/gas/testsuite/gas/riscv/base-idx-add.d b/gas/testsuite/gas/riscv/base-idx-add.d</div></div><div data-zone-id="0" data-line-index="512" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">new file mode 100644</div></div><div data-zone-id="0" data-line-index="513" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">index 00000000000..488ffbc1956</div></div><div data-zone-id="0" data-line-index="514" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">--- /dev/null</div></div><div data-zone-id="0" data-line-index="515" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+++ b/gas/testsuite/gas/riscv/base-idx-add.d</div></div><div data-zone-id="0" data-line-index="516" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">@@ -0,0 +1,3 @@</div></div><div data-zone-id="0" data-line-index="517" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+#as: -march=rv64imafdc_zbb_zba</div></div><div data-zone-id="0" data-line-index="518" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+#source: base-idx-add.s</div></div><div data-zone-id="0" data-line-index="519" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+#error_output: base-idx-add.l</div></div><div data-zone-id="0" data-line-index="520" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">diff --git a/gas/testsuite/gas/riscv/base-idx-add.l b/gas/testsuite/gas/riscv/base-idx-add.l</div></div><div data-zone-id="0" data-line-index="521" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">new file mode 100644</div></div><div data-zone-id="0" data-line-index="522" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">index 00000000000..8321b40ccc6</div></div><div data-zone-id="0" data-line-index="523" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">--- /dev/null</div></div><div data-zone-id="0" data-line-index="524" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+++ b/gas/testsuite/gas/riscv/base-idx-add.l</div></div><div data-zone-id="0" data-line-index="525" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">@@ -0,0 +1,10 @@</div></div><div data-zone-id="0" data-line-index="526" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+.*: Assembler messages:</div></div><div data-zone-id="0" data-line-index="527" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+.*: Error: illegal operands `amoadd.w x8,x9,%base_idx_add\(sym\)\(x10\)'</div></div><div data-zone-id="0" data-line-index="528" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+.*: Error: illegal operands `add a5,a5,a0,0'</div></div><div data-zone-id="0" data-line-index="529" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+.*: Error: illegal operands `sh1add a0,a0,a5,0'</div></div><div data-zone-id="0" data-line-index="530" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+.*: Error: illegal operands `sh1add.uw a0,a0,a5,0'</div></div><div data-zone-id="0" data-line-index="531" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+.*: Error: illegal operands `sh2add a0,a0,a5,0'</div></div><div data-zone-id="0" data-line-index="532" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+.*: Error: illegal operands `sh2add.uw a0,a0,a5,0'</div></div><div data-zone-id="0" data-line-index="533" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+.*: Error: illegal operands `sh3add a0,a0,a5,0'</div></div><div data-zone-id="0" data-line-index="534" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+.*: Error: illegal operands `sh3add.uw a0,a0,a5,0'</div></div><div data-zone-id="0" data-line-index="535" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+.*: Error: illegal operands `add.uw a0,a0,a5,0'</div></div><div data-zone-id="0" data-line-index="536" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">diff --git a/gas/testsuite/gas/riscv/base-idx-add.s b/gas/testsuite/gas/riscv/base-idx-add.s</div></div><div data-zone-id="0" data-line-index="537" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">new file mode 100644</div></div><div data-zone-id="0" data-line-index="538" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">index 00000000000..5a068e80ce4</div></div><div data-zone-id="0" data-line-index="539" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">--- /dev/null</div></div><div data-zone-id="0" data-line-index="540" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+++ b/gas/testsuite/gas/riscv/base-idx-add.s</div></div><div data-zone-id="0" data-line-index="541" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">@@ -0,0 +1,19 @@</div></div><div data-zone-id="0" data-line-index="542" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+.option arch, +a</div></div><div data-zone-id="0" data-line-index="543" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ # Don't allow base_idx_add in amoadd.</div></div><div data-zone-id="0" data-line-index="544" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ amoadd.w x8,x9,%base_idx_add(sym)(x10)</div></div><div data-zone-id="0" data-line-index="545" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ # Do require base_idx_add in 4-operand add.</div></div><div data-zone-id="0" data-line-index="546" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ add a5,a5,a0,0</div></div><div data-zone-id="0" data-line-index="547" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ sh1add a0,a0,a5,0</div></div><div data-zone-id="0" data-line-index="548" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ sh1add.uw a0,a0,a5,0</div></div><div data-zone-id="0" data-line-index="549" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ sh2add a0,a0,a5,0</div></div><div data-zone-id="0" data-line-index="550" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ sh2add.uw a0,a0,a5,0</div></div><div data-zone-id="0" data-line-index="551" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ sh3add a0,a0,a5,0</div></div><div data-zone-id="0" data-line-index="552" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ sh3add.uw a0,a0,a5,0</div></div><div data-zone-id="0" data-line-index="553" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ add.uw a0,a0,a5,0</div></div><div data-zone-id="0" data-line-index="554" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ .globl sym</div></div><div data-zone-id="0" data-line-index="555" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ .section .tbss,"awT",@nobits</div></div><div data-zone-id="0" data-line-index="556" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ .align 2</div></div><div data-zone-id="0" data-line-index="557" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ .type sym, @object</div></div><div data-zone-id="0" data-line-index="558" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ .size sym, 4</div></div><div data-zone-id="0" data-line-index="559" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+sym:</div></div><div data-zone-id="0" data-line-index="560" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ .zero 4</div></div><div data-zone-id="0" data-line-index="561" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">diff --git a/include/ChangeLog b/include/ChangeLog</div></div><div data-zone-id="0" data-line-index="562" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">index 2d05f2e4da1..97ab4a9b2d7 100644</div></div><div data-zone-id="0" data-line-index="563" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">--- a/include/ChangeLog</div></div><div data-zone-id="0" data-line-index="564" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+++ b/include/ChangeLog</div></div><div data-zone-id="0" data-line-index="565" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">@@ -1,3 +1,7 @@</div></div><div data-zone-id="0" data-line-index="566" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+2026-03-24 wengliqin <<a class="not-doclink" href="mailto:liqin.weng@spacemit.com" linkid="2k4Aht0pIl" target="_blank" rel="noopener noreferrer" style="transition: color 0.3s; cursor: pointer; text-decoration: none; color: rgb(20, 86, 240);">liqin.weng@spacemit.com</a>></div></div><div data-zone-id="0" data-line-index="567" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+</div></div><div data-zone-id="0" data-line-index="568" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ * elf/riscv.h: Define new RISC-V base-idx relocation macros.</div></div><div data-zone-id="0" data-line-index="569" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+</div></div><div data-zone-id="0" data-line-index="570" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> 2025-07-13 Nick Clifton <<a class="not-doclink" href="mailto:nickc@redhat.com" linkid="BnJOgpBfLN" target="_blank" rel="noopener noreferrer" style="transition: color 0.3s; cursor: pointer; text-decoration: none; color: rgb(20, 86, 240);">nickc@redhat.com</a>></div></div><div data-zone-id="0" data-line-index="571" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"><span>
</span></div></div><div data-zone-id="0" data-line-index="572" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> * 2.45 Branch point.</div></div><div data-zone-id="0" data-line-index="573" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">diff --git a/include/elf/riscv.h b/include/elf/riscv.h</div></div><div data-zone-id="0" data-line-index="574" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">index f6ca3d4acd8..690c511a536 100644</div></div><div data-zone-id="0" data-line-index="575" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">--- a/include/elf/riscv.h</div></div><div data-zone-id="0" data-line-index="576" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+++ b/include/elf/riscv.h</div></div><div data-zone-id="0" data-line-index="577" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">@@ -95,6 +95,9 @@ START_RELOC_NUMBERS (elf_riscv_reloc_type)</div></div><div data-zone-id="0" data-line-index="578" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> RELOC_NUMBER (R_RISCV_TLSDESC_LOAD_LO12, 63)</div></div><div data-zone-id="0" data-line-index="579" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> RELOC_NUMBER (R_RISCV_TLSDESC_ADD_LO12, 64)</div></div><div data-zone-id="0" data-line-index="580" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> RELOC_NUMBER (R_RISCV_TLSDESC_CALL, 65)</div></div><div data-zone-id="0" data-line-index="581" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ RELOC_NUMBER (R_RISCV_BASE_IDX_LO12_I, 77)</div></div><div data-zone-id="0" data-line-index="582" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ RELOC_NUMBER (R_RISCV_BASE_IDX_LO12_S, 78)</div></div><div data-zone-id="0" data-line-index="583" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+ RELOC_NUMBER (R_RISCV_BASE_IDX_ADD, 79)</div></div><div data-zone-id="0" data-line-index="584" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> END_RELOC_NUMBERS (R_RISCV_max)</div></div><div data-zone-id="0" data-line-index="585" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"><span>
</span></div></div><div data-zone-id="0" data-line-index="586" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> /* Internal relocations used exclusively by the relaxation pass. */</div></div><div data-zone-id="0" data-line-index="587" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">@@ -105,6 +108,9 @@ END_RELOC_NUMBERS (R_RISCV_max)</div></div><div data-zone-id="0" data-line-index="588" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> #define R_RISCV_GPREL_S (R_RISCV_max + 4)</div></div><div data-zone-id="0" data-line-index="589" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> #define R_RISCV_TPREL_I (R_RISCV_max + 5)</div></div><div data-zone-id="0" data-line-index="590" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> #define R_RISCV_TPREL_S (R_RISCV_max + 6)</div></div><div data-zone-id="0" data-line-index="591" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+#define INTERNAL_R_RISCV_BASE_IDX_I (R_RISCV_max + 7)</div></div><div data-zone-id="0" data-line-index="592" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+#define INTERNAL_R_RISCV_BASE_IDX_S (R_RISCV_max + 8)</div></div><div data-zone-id="0" data-line-index="593" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+#define INTERNAL_R_RISCV_BASE_IDX_ADD (R_RISCV_max + 9)</div></div><div data-zone-id="0" data-line-index="594" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"><span>
</span></div></div><div data-zone-id="0" data-line-index="595" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> /* Processor specific flags for the ELF header e_flags field. */</div></div><div data-zone-id="0" data-line-index="596" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"><span>
</span></div></div><div data-zone-id="0" data-line-index="597" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">diff --git a/opcodes/riscv-opc.c b/opcodes/riscv-opc.c</div></div><div data-zone-id="0" data-line-index="598" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">index 54887c97880..0433d2ca41f 100644</div></div><div data-zone-id="0" data-line-index="599" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">--- a/opcodes/riscv-opc.c</div></div><div data-zone-id="0" data-line-index="600" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+++ b/opcodes/riscv-opc.c</div></div><div data-zone-id="0" data-line-index="601" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">@@ -1378,16 +1378,23 @@ const struct riscv_opcode riscv_opcodes[] =</div></div><div data-zone-id="0" data-line-index="602" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> {"rorw", 64, INSN_CLASS_ZBB_OR_ZBKB, "d,s,<", MATCH_RORIW, MASK_RORIW, match_opcode, INSN_ALIAS },</div></div><div data-zone-id="0" data-line-index="603" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"><span>
</span></div></div><div data-zone-id="0" data-line-index="604" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> /* Zba instructions. */</div></div><div data-zone-id="0" data-line-index="605" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">-{"sh1add", 0, INSN_CLASS_ZBA, "d,s,t", MATCH_SH1ADD, MASK_SH1ADD, match_opcode, 0 },</div></div><div data-zone-id="0" data-line-index="606" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">-{"sh2add", 0, INSN_CLASS_ZBA, "d,s,t", MATCH_SH2ADD, MASK_SH2ADD, match_opcode, 0 },</div></div><div data-zone-id="0" data-line-index="607" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">-{"sh3add", 0, INSN_CLASS_ZBA, "d,s,t", MATCH_SH3ADD, MASK_SH3ADD, match_opcode, 0 },</div></div><div data-zone-id="0" data-line-index="608" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">-{"sh1add.uw", 64, INSN_CLASS_ZBA, "d,s,t", MATCH_SH1ADD_UW, MASK_SH1ADD_UW, match_opcode, 0 },</div></div><div data-zone-id="0" data-line-index="609" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">-{"sh2add.uw", 64, INSN_CLASS_ZBA, "d,s,t", MATCH_SH2ADD_UW, MASK_SH2ADD_UW, match_opcode, 0 },</div></div><div data-zone-id="0" data-line-index="610" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">-{"sh3add.uw", 64, INSN_CLASS_ZBA, "d,s,t", MATCH_SH3ADD_UW, MASK_SH3ADD_UW, match_opcode, 0 },</div></div><div data-zone-id="0" data-line-index="611" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+{"sh1add", 0, INSN_CLASS_ZBA, "d,s,t", MATCH_SH1ADD, MASK_SH1ADD, match_opcode, 0 },</div></div><div data-zone-id="0" data-line-index="612" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+{"sh1add", 0, INSN_CLASS_ZBA, "d,s,t,1", MATCH_SH1ADD, MASK_SH1ADD, match_opcode, 0 },</div></div><div data-zone-id="0" data-line-index="613" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+{"sh2add", 0, INSN_CLASS_ZBA, "d,s,t", MATCH_SH2ADD, MASK_SH2ADD, match_opcode, 0 },</div></div><div data-zone-id="0" data-line-index="614" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+{"sh2add", 0, INSN_CLASS_ZBA, "d,s,t,1", MATCH_SH2ADD, MASK_SH2ADD, match_opcode, 0 },</div></div><div data-zone-id="0" data-line-index="615" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+{"sh3add", 0, INSN_CLASS_ZBA, "d,s,t", MATCH_SH3ADD, MASK_SH3ADD, match_opcode, 0 },</div></div><div data-zone-id="0" data-line-index="616" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+{"sh3add", 0, INSN_CLASS_ZBA, "d,s,t,1", MATCH_SH3ADD, MASK_SH3ADD, match_opcode, 0 },</div></div><div data-zone-id="0" data-line-index="617" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+{"sh1add.uw", 64, INSN_CLASS_ZBA, "d,s,t", MATCH_SH1ADD_UW, MASK_SH1ADD_UW, match_opcode, 0 },</div></div><div data-zone-id="0" data-line-index="618" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+{"sh1add.uw", 64, INSN_CLASS_ZBA, "d,s,t,1", MATCH_SH1ADD_UW, MASK_SH1ADD_UW, match_opcode, 0 },</div></div><div data-zone-id="0" data-line-index="619" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+{"sh2add.uw", 64, INSN_CLASS_ZBA, "d,s,t", MATCH_SH2ADD_UW, MASK_SH2ADD_UW, match_opcode, 0 },</div></div><div data-zone-id="0" data-line-index="620" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+{"sh2add.uw", 64, INSN_CLASS_ZBA, "d,s,t,1", MATCH_SH2ADD_UW, MASK_SH2ADD_UW, match_opcode, 0 },</div></div><div data-zone-id="0" data-line-index="621" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+{"sh3add.uw", 64, INSN_CLASS_ZBA, "d,s,t", MATCH_SH3ADD_UW, MASK_SH3ADD_UW, match_opcode, 0 },</div></div><div data-zone-id="0" data-line-index="622" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+{"sh3add.uw", 64, INSN_CLASS_ZBA, "d,s,t,1", MATCH_SH3ADD_UW, MASK_SH3ADD_UW, match_opcode, 0 },</div></div><div data-zone-id="0" data-line-index="623" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> {"zext.w", 64, INSN_CLASS_ZCB_AND_ZBA, "Cs,Cw", MATCH_C_ZEXT_W, MASK_C_ZEXT_W, match_opcode, INSN_ALIAS },</div></div><div data-zone-id="0" data-line-index="624" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> {"zext.w", 64, INSN_CLASS_ZBA, "d,s", MATCH_ADD_UW, MASK_ADD_UW | MASK_RS2, match_opcode, INSN_ALIAS },</div></div><div data-zone-id="0" data-line-index="625" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> {"zext.w", 64, INSN_CLASS_I, "d,s", 0, (int) M_ZEXTW, NULL, INSN_MACRO },</div></div><div data-zone-id="0" data-line-index="626" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> {"add.uw", 64, INSN_CLASS_ZBA, "d,s,t", MATCH_ADD_UW, MASK_ADD_UW, match_opcode, 0 },</div></div><div data-zone-id="0" data-line-index="627" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">+{"add.uw", 64, INSN_CLASS_ZBA, "d,s,t,1", MATCH_ADD_UW, MASK_ADD_UW, match_opcode, 0 },</div></div><div data-zone-id="0" data-line-index="628" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> {"slli.uw", 64, INSN_CLASS_ZBA, "d,s,>", MATCH_SLLI_UW, MASK_SLLI_UW, match_opcode, 0 },</div></div><div data-zone-id="0" data-line-index="629" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"><span>
</span></div></div><div data-zone-id="0" data-line-index="630" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"> /* Zbc or zbkc instructions. */</div></div><div data-zone-id="0" data-line-index="631" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">-- </div></div><div data-zone-id="0" data-line-index="632" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">2.43.0</div></div><div data-zone-id="0" data-line-index="633" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;"><br/></div></div></div></div><div class="history-quote-wrapper" id="lark-mail-quote-178350944"><div data-html-block="quote" data-mail-html-ignore=""><div id="lark-mail-quote-178350934" class="history-quote-wrapper"><div class="adit-html-block adit-html-block--collapsed" style="border-left: none; padding-left: 0px;"><div><div style="padding: 12px; background: rgb(245, 246, 247); color: rgb(31, 35, 41); border-radius: 4px; margin-top: 24px; margin-bottom: 12px;" id="lark-mail-meta-VI9WXuSEz" class="adit-html-block__attr history-quote-meta-wrapper history-quote-gap-tag"><div style="word-break: break-word;"><div class="lme-line-signal" style=""><span>From: </span> <span>"翁丽琴"<<a href="mailto:liqin.weng@spacemit.com" style="overflow-wrap: break-word; white-space: pre-wrap; hyphens: none; word-break: break-word; cursor: pointer; text-decoration: none; color: inherit;" class="quote-head-meta-mailto" data-mailto="mailto:liqin.weng@spacemit.com">liqin.weng@spacemit.com</a>></span></div><div class="lme-line-signal" style=""><span>Date: </span> Wed, Jul 8, 2026, 15:06</div><div class="lme-line-signal" style=""><span>Subject: </span> Re: [PATCH] RISCV-V: Add new relocation type for global array accesses with non-constant indices</div><div class="lme-line-signal" style=""><span>To: </span> <span>"Jan Beulich"<<a href="mailto:jbeulich@suse.com" style="overflow-wrap: break-word; white-space: pre-wrap; hyphens: none; word-break: break-word; cursor: pointer; text-decoration: none; color: inherit;" class="quote-head-meta-mailto" data-mailto="mailto:jbeulich@suse.com">jbeulich@suse.com</a>></span></div><div class="lme-line-signal" style=""><span>Cc: </span> <span>"craig.topper@sifive.com"<<a href="mailto:craig.topper@sifive.com" style="overflow-wrap: break-word; white-space: pre-wrap; hyphens: none; word-break: break-word; cursor: pointer; text-decoration: none; color: inherit;" class="quote-head-meta-mailto" data-mailto="mailto:craig.topper@sifive.com">craig.topper@sifive.com</a>></span>, <span>"kavin.balag@gmail.com"<<a href="mailto:kavin.balag@gmail.com" style="overflow-wrap: break-word; white-space: pre-wrap; hyphens: none; word-break: break-word; cursor: pointer; text-decoration: none; color: inherit;" class="quote-head-meta-mailto" data-mailto="mailto:kavin.balag@gmail.com">kavin.balag@gmail.com</a>></span>, <span>"Kito Cheng"<<a href="mailto:kito.cheng@gmail.com" style="overflow-wrap: break-word; white-space: pre-wrap; hyphens: none; word-break: break-word; cursor: pointer; text-decoration: none; color: inherit;" class="quote-head-meta-mailto" data-mailto="mailto:kito.cheng@gmail.com">kito.cheng@gmail.com</a>></span>, <span>"binutils@sourceware.org"<<a href="mailto:binutils@sourceware.org" style="overflow-wrap: break-word; white-space: pre-wrap; hyphens: none; word-break: break-word; cursor: pointer; text-decoration: none; color: inherit;" class="quote-head-meta-mailto" data-mailto="mailto:binutils@sourceware.org">binutils@sourceware.org</a>></span>, <span>"庄秋彬"<<a href="mailto:mark.zhuang@spacemit.com" style="overflow-wrap: break-word; white-space: pre-wrap; hyphens: none; word-break: break-word; cursor: pointer; text-decoration: none; color: inherit;" class="quote-head-meta-mailto" data-mailto="mailto:mark.zhuang@spacemit.com">mark.zhuang@spacemit.com</a>></span></div></div></div><div><div><div id="editor_version_7.68.0_iuD2zuQA" style="word-break:break-word"><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"><br/></div></div><ol start="1" data-list-number="true" style="margin-top:0px;margin-bottom:0px;margin-left:0px;padding-left:0px;list-style-position:inside"><li class="temp-li number1 lme-line-signal" data-list="number1" data-ol-id="5oaNYAfA" data-start="1" style="line-height:1.6;margin-top:4px;margin-bottom:4px;padding-left:0px;display:list-item;list-style-type:decimal;font-size:14px;margin-left:0px;list-style-position:inside" dir="auto">Address the comments && clang-format</li><li class="temp-li number1 lme-line-signal" data-list="number1" data-ol-id="5oaNYAfA" data-start="2" style="line-height:1.6;margin-top:4px;margin-bottom:4px;padding-left:0px;display:list-item;list-style-type:decimal;font-size:14px;margin-left:0px;list-style-position:inside" dir="auto">Rename the relocation name: R_RISCV_BASE_IDX_ADD/R_RISCV_BASE_IDX_LO12_I/R_RISCV_BASE_IDX_LO12_S</li><li class="temp-li number1 lme-line-signal" data-list="number1" data-ol-id="5oaNYAfA" data-start="3" style="line-height:1.6;margin-top:4px;margin-bottom:4px;padding-left:0px;display:list-item;list-style-type:decimal;font-size:14px;margin-left:0px;list-style-position:inside" dir="auto">Remove the R_RISCV_BASE_IDX_SHXADD</li></ol><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"><br/></div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">LLVM Implement in LLD && MC : <a class="not-doclink" href="https://github.com/llvm/llvm-project/pull/207901" style="transition:color 0.3s;cursor:pointer;text-decoration:none;color:rgb(20, 86, 240)" rel="nofollow noopener noreferrer">https://github.com/llvm/llvm-project/pull/207901</a></div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"><br/></div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"><br/></div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">-----</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"><br/></div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">From b33b8deaaa6f9f1a436db2e4a114ce122913c2e2 Mon Sep 17 00:00:00 2001</div></div><div id="lark-mail-quote-9007ce65f072d1adaecc2e1996c9a5c0"><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">From: wengliqin <<a class="not-doclink" href="mailto:liqin.weng@spacemit.com" style="transition:color 0.3s;cursor:pointer;text-decoration:none;color:rgb(20, 86, 240)" rel="nofollow noopener noreferrer">liqin.weng@spacemit.com</a>></div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">Date: Wed, 24 Jun 2026 18:57:07 +0800</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">Subject: [PATCH] RISCV-V: Add new relocation type for global array accesses</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> with non-constant indices.</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"><br/></div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">This patch introduces support for new RISC-V relocation types (R_RISCV_BASE_IDX_*) to enable more efficient code generation for global array accesses with non-constant array subscripts</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"><br/></div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">RISC-V PSABI specification: <a class="not-doclink" href="https://github.com/riscv-non-isa/riscv-elf-psabi-doc/pull/489" style="transition:color 0.3s;cursor:pointer;text-decoration:none;color:rgb(20, 86, 240)" rel="nofollow noopener noreferrer">https://github.com/riscv-non-isa/riscv-elf-psabi-doc/pull/489</a></div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">---</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> bfd/ChangeLog | 13 ++++</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> bfd/bfd-in2.h | 3 +</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> bfd/elfnn-riscv.c | 61 ++++++++++++++-</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> bfd/elfxx-riscv.c | 104 ++++++++++++++++++++++++-</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> bfd/libbfd.h | 3 +</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> bfd/reloc.c | 6 ++</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> gas/ChangeLog | 10 +++</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> gas/config/tc-riscv.c | 35 +++++++--</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> gas/testsuite/gas/riscv/base-idx-add.d | 3 +</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> gas/testsuite/gas/riscv/base-idx-add.l | 10 +++</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> gas/testsuite/gas/riscv/base-idx-add.s | 19 +++++</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> include/ChangeLog | 4 +</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> include/elf/riscv.h | 6 ++</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> opcodes/riscv-opc.c | 19 +++--</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> 14 files changed, 282 insertions(+), 14 deletions(-)</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> create mode 100644 gas/testsuite/gas/riscv/base-idx-add.d</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> create mode 100644 gas/testsuite/gas/riscv/base-idx-add.l</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> create mode 100644 gas/testsuite/gas/riscv/base-idx-add.s</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"><br/></div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">diff --git a/bfd/ChangeLog b/bfd/ChangeLog</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">index 6046f658f8b..ea4b9e41c69 100644</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">--- a/bfd/ChangeLog</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+++ b/bfd/ChangeLog</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">@@ -1,3 +1,16 @@</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+2026-06-22 wengliqin <<a class="not-doclink" href="mailto:liqin.weng@spacemit.com" style="transition:color 0.3s;cursor:pointer;text-decoration:none;color:rgb(20, 86, 240)" rel="nofollow noopener noreferrer">liqin.weng@spacemit.com</a>></div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ * reloc.c (BFD_RELOC_RISCV_BASE_IDX_LO12_I, BFD_RELOC_RISCV_BASE_IDX_LO12_S,</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ BFD_RELOC_RISCV_BASE_IDX_ADD): New</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ relocation types.</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ * bfd-in2.h: Regenerate.</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ * libbfd.h: Regenerate.</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ * elfnn-riscv.c (perform_relocation): Add support for new REGREL</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ relocations.</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ (riscv_elf_relocate_section): Handle REGREL relocations for global</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ array accesses with non-constant indices.</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ * elfxx-riscv.c: Define relocation information for new REGREL types.</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> 2025-09-16 Rainer Orth <<a class="not-doclink" href="mailto:ro@CeBiTec.Uni-Bielefeld.DE" style="transition:color 0.3s;cursor:pointer;text-decoration:none;color:rgb(20, 86, 240)" rel="nofollow noopener noreferrer">ro@CeBiTec.Uni-Bielefeld.DE</a>></div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"><span>
</span></div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> * config.bfd <powerpc-*-solaris2*>: Remove.</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">diff --git a/bfd/bfd-in2.h b/bfd/bfd-in2.h</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">index d4e4f8e4375..b958ed3c048 100644</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">--- a/bfd/bfd-in2.h</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+++ b/bfd/bfd-in2.h</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">@@ -5364,6 +5364,9 @@ enum bfd_reloc_code_real</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> BFD_RELOC_RISCV_32_PCREL,</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> BFD_RELOC_RISCV_SET_ULEB128,</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> BFD_RELOC_RISCV_SUB_ULEB128,</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ BFD_RELOC_RISCV_BASE_IDX_LO12_I,</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ BFD_RELOC_RISCV_BASE_IDX_LO12_S,</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ BFD_RELOC_RISCV_BASE_IDX_ADD,</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"><span>
</span></div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> /* Renesas RL78 Relocations. */</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> BFD_RELOC_RL78_NEG8,</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">diff --git a/bfd/elfnn-riscv.c b/bfd/elfnn-riscv.c</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">index d3963ec9a58..71212e5c78b 100644</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">--- a/bfd/elfnn-riscv.c</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+++ b/bfd/elfnn-riscv.c</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">@@ -1999,7 +1999,9 @@ perform_relocation (const reloc_howto_type *howto,</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> break;</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"><span>
</span></div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> case R_RISCV_LO12_I:</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ case R_RISCV_BASE_IDX_LO12_I:</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> case R_RISCV_GPREL_I:</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ case INTERNAL_R_RISCV_BASE_IDX_I:</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> case R_RISCV_TPREL_LO12_I:</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> case R_RISCV_TPREL_I:</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> case R_RISCV_PCREL_LO12_I:</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">@@ -2009,7 +2011,9 @@ perform_relocation (const reloc_howto_type *howto,</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> break;</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"><span>
</span></div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> case R_RISCV_LO12_S:</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ case R_RISCV_BASE_IDX_LO12_S:</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> case R_RISCV_GPREL_S:</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ case INTERNAL_R_RISCV_BASE_IDX_S:</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> case R_RISCV_TPREL_LO12_S:</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> case R_RISCV_TPREL_S:</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> case R_RISCV_PCREL_LO12_S:</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">@@ -2130,6 +2134,8 @@ perform_relocation (const reloc_howto_type *howto,</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> case R_RISCV_32_PCREL:</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> case R_RISCV_TLS_DTPREL32:</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> case R_RISCV_TLS_DTPREL64:</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ case R_RISCV_BASE_IDX_ADD:</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ case INTERNAL_R_RISCV_BASE_IDX_ADD:</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> break;</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"><span>
</span></div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> case R_RISCV_DELETE:</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">@@ -2722,6 +2728,9 @@ riscv_elf_relocate_section (bfd *output_bfd,</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> case R_RISCV_HI20:</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> case R_RISCV_LO12_I:</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> case R_RISCV_LO12_S:</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ case R_RISCV_BASE_IDX_LO12_I:</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ case R_RISCV_BASE_IDX_LO12_S:</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ case R_RISCV_BASE_IDX_ADD:</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> goto do_relocation;</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"><span>
</span></div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> case R_RISCV_PCREL_HI20:</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">@@ -2788,6 +2797,9 @@ riscv_elf_relocate_section (bfd *output_bfd,</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> case R_RISCV_RVC_LUI:</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> case R_RISCV_LO12_I:</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> case R_RISCV_LO12_S:</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ case R_RISCV_BASE_IDX_LO12_I:</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ case R_RISCV_BASE_IDX_LO12_S:</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ case R_RISCV_BASE_IDX_ADD:</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> case R_RISCV_SET6:</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> case R_RISCV_SET8:</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> case R_RISCV_SET16:</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">@@ -3089,6 +3101,36 @@ riscv_elf_relocate_section (bfd *output_bfd,</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> break;</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> }</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"><span>
</span></div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ case INTERNAL_R_RISCV_BASE_IDX_I:</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ case INTERNAL_R_RISCV_BASE_IDX_S:</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ {</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ /* After relaxation, the ld/st uses (gp + index) as its base</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ register, so the immediate encodes the symbol's displacement</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ from gp. perform_relocation will encode the final value</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ from (relocation + r_addend). */</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ bfd_vma gp = riscv_global_pointer_value (info);</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ bfd_vma disp = relocation + rel->r_addend - gp;</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ bool valid = (r_type == INTERNAL_R_RISCV_BASE_IDX_I)</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ ? VALID_ITYPE_IMM (disp) : VALID_STYPE_IMM (disp);</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ if (valid)</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ rel->r_addend -= gp;</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ else</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ r = bfd_reloc_overflow;</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ break;</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ }</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ case INTERNAL_R_RISCV_BASE_IDX_ADD:</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ {</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ /* Rewrite rs2 of the add/shXadd instruction to use gp as the</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ base register after relaxation. The same encoding change</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ applies to both add and shXadd — the opcode itself is left</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ intact. */</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ bfd_vma insn = bfd_getl32 (contents + rel->r_offset);</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ insn = (insn & ~(OP_MASK_RS2 << OP_SH_RS2)) | (X_GP << OP_SH_RS2);</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ bfd_putl32 (insn, contents + rel->r_offset);</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ break;</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ }</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> case R_RISCV_PCREL_HI20:</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> absolute = riscv_zero_pcrel_hi_reloc (rel, info, pc, &relocation,</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> contents, howto);</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">@@ -5148,6 +5190,18 @@ _bfd_riscv_relax_lui (bfd *abfd,</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> rel->r_info = ELFNN_R_INFO (sym, R_RISCV_GPREL_S);</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> return true;</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"><span>
</span></div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ case R_RISCV_BASE_IDX_LO12_I:</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ rel->r_info = ELFNN_R_INFO (sym, INTERNAL_R_RISCV_BASE_IDX_I);</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ return true;</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ case R_RISCV_BASE_IDX_LO12_S:</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ rel->r_info = ELFNN_R_INFO (sym, INTERNAL_R_RISCV_BASE_IDX_S);</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ return true;</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ case R_RISCV_BASE_IDX_ADD:</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ rel->r_info = ELFNN_R_INFO (sym, INTERNAL_R_RISCV_BASE_IDX_ADD);</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ return true;</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> case R_RISCV_HI20:</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> /* Delete unnecessary LUI and reuse the reloc. */</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> *again = true;</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">@@ -5160,7 +5214,7 @@ _bfd_riscv_relax_lui (bfd *abfd,</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> }</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"><span>
</span></div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> /* Can we relax LUI to C.LUI? Alignment might move the section forward;</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">- account for this assuming page alignment at worst. In the presence of </div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ account for this assuming page alignment at worst. In the presence of</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> RELRO segment the linker aligns it by one page size, therefore sections</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> after the segment can be moved more than one page. */</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"><span>
</span></div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">@@ -5539,7 +5593,10 @@ _bfd_riscv_relax_section (bfd *abfd, asection *sec,</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> relax_func = _bfd_riscv_relax_call;</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> else if (type == R_RISCV_HI20</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> || type == R_RISCV_LO12_I</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">- || type == R_RISCV_LO12_S)</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ || type == R_RISCV_LO12_S</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ || type == R_RISCV_BASE_IDX_LO12_I</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ || type == R_RISCV_BASE_IDX_LO12_S</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ || type == R_RISCV_BASE_IDX_ADD)</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> relax_func = _bfd_riscv_relax_lui;</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> else if (type == R_RISCV_TPREL_HI20</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> || type == R_RISCV_TPREL_ADD</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">diff --git a/bfd/elfxx-riscv.c b/bfd/elfxx-riscv.c</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">index ee962b4f6f1..8c87bbfe815 100644</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">--- a/bfd/elfxx-riscv.c</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+++ b/bfd/elfxx-riscv.c</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">@@ -876,7 +876,62 @@ static const reloc_howto_type howto_table[] =</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> false, /* partial_inplace */</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> 0, /* src_mask */</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> ENCODE_ITYPE_IMM (-1U), /* dst_mask */</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">- false) /* pcrel_offset */</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ false), /* pcrel_offset */</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ /* Reserved slots 66-76. */</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ EMPTY_HOWTO (66),</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ EMPTY_HOWTO (67),</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ EMPTY_HOWTO (68),</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ EMPTY_HOWTO (69),</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ EMPTY_HOWTO (70),</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ EMPTY_HOWTO (71),</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ EMPTY_HOWTO (72),</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ EMPTY_HOWTO (74),</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ EMPTY_HOWTO (75),</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ EMPTY_HOWTO (76),</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ /* Global array accesses with non-constant subscript (base + index). */</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ HOWTO (R_RISCV_BASE_IDX_LO12_I, /* type */</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ 0, /* rightshift */</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ 4, /* size */</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ 32, /* bitsize */</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ false, /* pc_relative */</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ 0, /* bitpos */</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ complain_overflow_dont, /* complain_on_overflow */</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ bfd_elf_generic_reloc, /* special_function */</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ "R_RISCV_BASE_IDX_LO12_I", /* name */</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ false, /* partial_inplace */</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ 0, /* src_mask */</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ ENCODE_ITYPE_IMM (-1U), /* dst_mask */</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ false), /* pcrel_offset */</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ HOWTO (R_RISCV_BASE_IDX_LO12_S, /* type */</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ 0, /* rightshift */</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ 4, /* size */</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ 32, /* bitsize */</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ false, /* pc_relative */</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ 0, /* bitpos */</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ complain_overflow_dont, /* complain_on_overflow */</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ bfd_elf_generic_reloc, /* special_function */</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ "R_RISCV_BASE_IDX_LO12_S", /* name */</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ false, /* partial_inplace */</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ 0, /* src_mask */</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ ENCODE_STYPE_IMM (-1U), /* dst_mask */</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ false), /* pcrel_offset */</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ HOWTO (R_RISCV_BASE_IDX_ADD, /* type */</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ 0, /* rightshift */</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ 4, /* size */</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ 32, /* bitsize */</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ false, /* pc_relative */</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ 0, /* bitpos */</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ complain_overflow_dont, /* complain_on_overflow */</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ bfd_elf_generic_reloc, /* special_function */</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ "R_RISCV_BASE_IDX_ADD", /* name */</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ false, /* partial_inplace */</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ 0, /* src_mask */</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ 0, /* dst_mask */</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ false), /* pcrel_offset */</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> };</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"><span>
</span></div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> static const reloc_howto_type howto_table_internal[] =</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">@@ -961,6 +1016,50 @@ static const reloc_howto_type howto_table_internal[] =</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> 0, /* src_mask */</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> ENCODE_STYPE_IMM (-1U), /* dst_mask */</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> false), /* pcrel_offset */</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ /* Global array accesses with non-constant subscript (base + index),</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ after relaxation. */</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ HOWTO (INTERNAL_R_RISCV_BASE_IDX_I, /* type */</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ 0, /* rightshift */</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ 4, /* size */</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ 32, /* bitsize */</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ false, /* pc_relative */</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ 0, /* bitpos */</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ complain_overflow_dont, /* complain_on_overflow */</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ bfd_elf_generic_reloc, /* special_function */</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ "INTERNAL_R_RISCV_BASE_IDX_I", /* name */</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ false, /* partial_inplace */</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ 0, /* src_mask */</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ ENCODE_ITYPE_IMM (-1U), /* dst_mask */</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ false), /* pcrel_offset */</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ HOWTO (INTERNAL_R_RISCV_BASE_IDX_S, /* type */</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ 0, /* rightshift */</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ 4, /* size */</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ 32, /* bitsize */</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ false, /* pc_relative */</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ 0, /* bitpos */</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ complain_overflow_dont, /* complain_on_overflow */</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ bfd_elf_generic_reloc, /* special_function */</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ "INTERNAL_R_RISCV_BASE_IDX_S", /* name */</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ false, /* partial_inplace */</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ 0, /* src_mask */</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ ENCODE_STYPE_IMM (-1U), /* dst_mask */</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ false), /* pcrel_offset */</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ HOWTO (INTERNAL_R_RISCV_BASE_IDX_ADD, /* type */</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ 0, /* rightshift */</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ 4, /* size */</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ 32, /* bitsize */</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ false, /* pc_relative */</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ 0, /* bitpos */</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ complain_overflow_dont, /* complain_on_overflow */</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ bfd_elf_generic_reloc, /* special_function */</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ "INTERNAL_R_RISCV_BASE_IDX_ADD", /* name */</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ false, /* partial_inplace */</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ 0, /* src_mask */</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ 0, /* dst_mask */</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ false) /* pcrel_offset */</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> };</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"><span>
</span></div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> /* A mapping from BFD reloc types to RISC-V ELF reloc types. */</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">@@ -1023,6 +1122,9 @@ static const struct elf_reloc_map riscv_reloc_map[] =</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> { BFD_RELOC_RISCV_32_PCREL, R_RISCV_32_PCREL },</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> { BFD_RELOC_RISCV_SET_ULEB128, R_RISCV_SET_ULEB128 },</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> { BFD_RELOC_RISCV_SUB_ULEB128, R_RISCV_SUB_ULEB128 },</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ { BFD_RELOC_RISCV_BASE_IDX_LO12_I, R_RISCV_BASE_IDX_LO12_I},</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ { BFD_RELOC_RISCV_BASE_IDX_LO12_S, R_RISCV_BASE_IDX_LO12_S},</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ { BFD_RELOC_RISCV_BASE_IDX_ADD, R_RISCV_BASE_IDX_ADD},</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> };</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"><span>
</span></div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> struct riscv_profiles</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">diff --git a/bfd/libbfd.h b/bfd/libbfd.h</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">index a27134dcd78..7e49498d0f1 100644</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">--- a/bfd/libbfd.h</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+++ b/bfd/libbfd.h</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">@@ -2363,6 +2363,9 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@",</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> "BFD_RELOC_RISCV_TLSDESC_ADD_LO12",</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> "BFD_RELOC_RISCV_TLSDESC_CALL",</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> "BFD_RELOC_RISCV_ALIGN",</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ "BFD_RELOC_RISCV_BASE_IDX_LO12_I",</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ "BFD_RELOC_RISCV_BASE_IDX_LO12_S",</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ "BFD_RELOC_RISCV_BASE_IDX_ADD",</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> "BFD_RELOC_RISCV_RVC_BRANCH",</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> "BFD_RELOC_RISCV_RVC_JUMP",</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> "BFD_RELOC_RISCV_RELAX",</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">diff --git a/bfd/reloc.c b/bfd/reloc.c</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">index 98343696a33..6f6ff98c4a5 100644</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">--- a/bfd/reloc.c</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+++ b/bfd/reloc.c</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">@@ -4861,6 +4861,12 @@ ENUMX</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> BFD_RELOC_RISCV_TLSDESC_ADD_LO12</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> ENUMX</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> BFD_RELOC_RISCV_TLSDESC_CALL</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ENUMX</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ BFD_RELOC_RISCV_BASE_IDX_LO12_I</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ENUMX</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ BFD_RELOC_RISCV_BASE_IDX_LO12_S</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ENUMX</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ BFD_RELOC_RISCV_BASE_IDX_ADD</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> ENUMX</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> BFD_RELOC_RISCV_ALIGN</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> ENUMX</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">diff --git a/gas/ChangeLog b/gas/ChangeLog</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">index 492475658f1..5c69c63bce6 100644</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">--- a/gas/ChangeLog</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+++ b/gas/ChangeLog</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">@@ -1,3 +1,13 @@</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+2026-03-24 wengliqin <<a class="not-doclink" href="mailto:liqin.weng@spacemit.com" style="transition:color 0.3s;cursor:pointer;text-decoration:none;color:rgb(20, 86, 240)" rel="nofollow noopener noreferrer">liqin.weng@spacemit.com</a>></div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ * config/tc-riscv.c: Add support for RISC-V Base IDX relocations.</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ * testsuite/gas/riscv/base-idx-add.s: New test for BASE_IDX_ADD.</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ * testsuite/gas/riscv/base-idx-add.d: Corresponding test output.</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ * testsuite/gas/riscv/base-idx-add.l: Corresponding test output.</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ * testsuite/gas/riscv/base-idx-shxadd.s: Ditto</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ * testsuite/gas/riscv/base-idx-shxadd.d: Corresponding test output.</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ * testsuite/gas/riscv/base-idx-shxadd.l: Corresponding test output.</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> 2025-09-16 Rainer Orth <<a class="not-doclink" href="mailto:ro@CeBiTec.Uni-Bielefeld.DE" style="transition:color 0.3s;cursor:pointer;text-decoration:none;color:rgb(20, 86, 240)" rel="nofollow noopener noreferrer">ro@CeBiTec.Uni-Bielefeld.DE</a>></div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"><span>
</span></div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> * NEWS: Mention Solaris/PowerPC removal.</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">diff --git a/gas/config/tc-riscv.c b/gas/config/tc-riscv.c</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">index 6bcf53832a0..f1e56ec4aa6 100644</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">--- a/gas/config/tc-riscv.c</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+++ b/gas/config/tc-riscv.c</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">@@ -1958,6 +1958,12 @@ riscv_apply_const_reloc (bfd_reloc_code_real_type reloc_type, bfd_vma value)</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> case BFD_RELOC_RISCV_LO12_I:</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> return ENCODE_ITYPE_IMM (value);</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"><span>
</span></div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ case BFD_RELOC_RISCV_BASE_IDX_LO12_S:</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ return ENCODE_STYPE_IMM (value);</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ case BFD_RELOC_RISCV_BASE_IDX_LO12_I:</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ return ENCODE_ITYPE_IMM (value);</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> default:</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> abort ();</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> }</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">@@ -2022,7 +2028,8 @@ append_insn (struct riscv_cl_insn *ip, expressionS *address_expr,</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> if (reloc_type == BFD_RELOC_RISCV_HI20</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> || reloc_type == BFD_RELOC_RISCV_PCREL_HI20</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> || reloc_type == BFD_RELOC_RISCV_TPREL_HI20</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">- || reloc_type == BFD_RELOC_RISCV_TPREL_ADD)</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ || reloc_type == BFD_RELOC_RISCV_TPREL_ADD</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ || reloc_type == BFD_RELOC_RISCV_BASE_IDX_ADD)</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> {</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> frag_wane (frag_now);</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> frag_new (0);</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">@@ -2455,6 +2462,7 @@ static const struct percent_op_match percent_op_utype[] =</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> static const struct percent_op_match percent_op_itype[] =</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> {</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> {"lo", BFD_RELOC_RISCV_LO12_I},</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ {"base_idx_lo", BFD_RELOC_RISCV_BASE_IDX_LO12_I},</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> {"tprel_lo", BFD_RELOC_RISCV_TPREL_LO12_I},</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> {"pcrel_lo", BFD_RELOC_RISCV_PCREL_LO12_I},</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> {"tlsdesc_load_lo", BFD_RELOC_RISCV_TLSDESC_LOAD_LO12},</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">@@ -2465,6 +2473,7 @@ static const struct percent_op_match percent_op_itype[] =</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> static const struct percent_op_match percent_op_stype[] =</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> {</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> {"lo", BFD_RELOC_RISCV_LO12_S},</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ {"base_idx_lo", BFD_RELOC_RISCV_BASE_IDX_LO12_S},</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> {"tprel_lo", BFD_RELOC_RISCV_TPREL_LO12_S},</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> {"pcrel_lo", BFD_RELOC_RISCV_PCREL_LO12_S},</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> {0, 0}</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">@@ -2474,6 +2483,7 @@ static const struct percent_op_match percent_op_relax_only[] =</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> {</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> {"tlsdesc_call", BFD_RELOC_RISCV_TLSDESC_CALL},</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> {"tprel_add", BFD_RELOC_RISCV_TPREL_ADD},</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ {"base_idx_add", BFD_RELOC_RISCV_BASE_IDX_ADD},</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> {0, 0}</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> };</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"><span>
</span></div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">@@ -3633,15 +3643,24 @@ riscv_ip (char *str, struct riscv_cl_insn *ip, expressionS *imm_expr,</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"><span>
</span></div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> case 'j': /* Sign-extended immediate. */</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> p = percent_op_itype;</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">- *imm_reloc = BFD_RELOC_RISCV_LO12_I;</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ if (strncmp(asarg, "%base_idx_lo", 9) == 0)</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ *imm_reloc = BFD_RELOC_RISCV_BASE_IDX_LO12_I;</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ else</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ *imm_reloc = BFD_RELOC_RISCV_LO12_I;</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> goto alu_op;</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> case 'q': /* Store displacement. */</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> p = percent_op_stype;</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">- *imm_reloc = BFD_RELOC_RISCV_LO12_S;</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ if (strncmp(asarg, "%base_idx_lo", 9) == 0)</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ *imm_reloc = BFD_RELOC_RISCV_BASE_IDX_LO12_S;</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ else</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ *imm_reloc = BFD_RELOC_RISCV_LO12_S;</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> goto load_store;</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> case 'o': /* Load displacement. */</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">- p = percent_op_itype;</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">- *imm_reloc = BFD_RELOC_RISCV_LO12_I;</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ p = percent_op_itype;</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ if (strncmp(asarg, "%base_idx_lo", 9) == 0)</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ *imm_reloc = BFD_RELOC_RISCV_BASE_IDX_LO12_I;</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ else</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ *imm_reloc = BFD_RELOC_RISCV_LO12_I;</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> goto load_store;</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> case '1':</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> /* This is used for TLS relocations that acts as relaxation</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">@@ -4687,6 +4706,8 @@ md_apply_fix (fixS *fixP, valueT *valP, segT seg)</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> case BFD_RELOC_RISCV_HI20:</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> case BFD_RELOC_RISCV_LO12_I:</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> case BFD_RELOC_RISCV_LO12_S:</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ case BFD_RELOC_RISCV_BASE_IDX_LO12_I:</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ case BFD_RELOC_RISCV_BASE_IDX_LO12_S:</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> bfd_putl32 (riscv_apply_const_reloc (fixP->fx_r_type, *valP)</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> | bfd_getl32 (buf), buf);</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> if (fixP->fx_addsy == NULL)</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">@@ -4694,6 +4715,10 @@ md_apply_fix (fixS *fixP, valueT *valP, segT seg)</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> relaxable = true;</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> break;</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"><span>
</span></div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ case BFD_RELOC_RISCV_BASE_IDX_ADD:</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ relaxable = true;</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ break;</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> case BFD_RELOC_RISCV_GOT_HI20:</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> /* R_RISCV_GOT_HI20 and the following R_RISCV_LO12_I are relaxable</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> only if it is created as a result of la or lga assembler macros. */</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">diff --git a/gas/testsuite/gas/riscv/base-idx-add.d b/gas/testsuite/gas/riscv/base-idx-add.d</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">new file mode 100644</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">index 00000000000..488ffbc1956</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">--- /dev/null</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+++ b/gas/testsuite/gas/riscv/base-idx-add.d</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">@@ -0,0 +1,3 @@</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+#as: -march=rv64imafdc_zbb_zba</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+#source: base-idx-add.s</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+#error_output: base-idx-add.l</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">diff --git a/gas/testsuite/gas/riscv/base-idx-add.l b/gas/testsuite/gas/riscv/base-idx-add.l</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">new file mode 100644</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">index 00000000000..8321b40ccc6</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">--- /dev/null</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+++ b/gas/testsuite/gas/riscv/base-idx-add.l</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">@@ -0,0 +1,10 @@</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+.*: Assembler messages:</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+.*: Error: illegal operands `amoadd.w x8,x9,%base_idx_add\(sym\)\(x10\)'</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+.*: Error: illegal operands `add a5,a5,a0,0'</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+.*: Error: illegal operands `sh1add a0,a0,a5,0'</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+.*: Error: illegal operands `sh1add.uw a0,a0,a5,0'</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+.*: Error: illegal operands `sh2add a0,a0,a5,0'</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+.*: Error: illegal operands `sh2add.uw a0,a0,a5,0'</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+.*: Error: illegal operands `sh3add a0,a0,a5,0'</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+.*: Error: illegal operands `sh3add.uw a0,a0,a5,0'</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+.*: Error: illegal operands `add.uw a0,a0,a5,0'</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">diff --git a/gas/testsuite/gas/riscv/base-idx-add.s b/gas/testsuite/gas/riscv/base-idx-add.s</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">new file mode 100644</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">index 00000000000..5a068e80ce4</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">--- /dev/null</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+++ b/gas/testsuite/gas/riscv/base-idx-add.s</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">@@ -0,0 +1,19 @@</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+.option arch, +a</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ # Don't allow base_idx_add in amoadd.</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ amoadd.w x8,x9,%base_idx_add(sym)(x10)</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ # Do require base_idx_add in 4-operand add.</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ add a5,a5,a0,0</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ sh1add a0,a0,a5,0</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ sh1add.uw a0,a0,a5,0</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ sh2add a0,a0,a5,0</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ sh2add.uw a0,a0,a5,0</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ sh3add a0,a0,a5,0</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ sh3add.uw a0,a0,a5,0</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ add.uw a0,a0,a5,0</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ .globl sym</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ .section .tbss,"awT",@nobits</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ .align 2</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ .type sym, @object</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ .size sym, 4</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+sym:</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ .zero 4</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">diff --git a/include/ChangeLog b/include/ChangeLog</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">index 2d05f2e4da1..97ab4a9b2d7 100644</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">--- a/include/ChangeLog</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+++ b/include/ChangeLog</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">@@ -1,3 +1,7 @@</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+2026-03-24 wengliqin <<a class="not-doclink" href="mailto:liqin.weng@spacemit.com" style="transition:color 0.3s;cursor:pointer;text-decoration:none;color:rgb(20, 86, 240)" rel="nofollow noopener noreferrer">liqin.weng@spacemit.com</a>></div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ * elf/riscv.h: Define new RISC-V base-idx relocation macros.</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> 2025-07-13 Nick Clifton <<a class="not-doclink" href="mailto:nickc@redhat.com" style="transition:color 0.3s;cursor:pointer;text-decoration:none;color:rgb(20, 86, 240)" rel="nofollow noopener noreferrer">nickc@redhat.com</a>></div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"><span>
</span></div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> * 2.45 Branch point.</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">diff --git a/include/elf/riscv.h b/include/elf/riscv.h</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">index f6ca3d4acd8..52a67294ae9 100644</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">--- a/include/elf/riscv.h</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+++ b/include/elf/riscv.h</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">@@ -95,6 +95,9 @@ START_RELOC_NUMBERS (elf_riscv_reloc_type)</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> RELOC_NUMBER (R_RISCV_TLSDESC_LOAD_LO12, 63)</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> RELOC_NUMBER (R_RISCV_TLSDESC_ADD_LO12, 64)</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> RELOC_NUMBER (R_RISCV_TLSDESC_CALL, 65)</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ RELOC_NUMBER (R_RISCV_BASE_IDX_LO12_I, 77)</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ RELOC_NUMBER (R_RISCV_BASE_IDX_LO12_S, 78)</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+ RELOC_NUMBER (R_RISCV_BASE_IDX_ADD, 79)</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> END_RELOC_NUMBERS (R_RISCV_max)</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"><span>
</span></div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> /* Internal relocations used exclusively by the relaxation pass. */</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">@@ -105,6 +108,9 @@ END_RELOC_NUMBERS (R_RISCV_max)</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> #define R_RISCV_GPREL_S (R_RISCV_max + 4)</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> #define R_RISCV_TPREL_I (R_RISCV_max + 5)</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> #define R_RISCV_TPREL_S (R_RISCV_max + 6)</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+#define INTERNAL_R_RISCV_BASE_IDX_I (R_RISCV_max + 7)</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+#define INTERNAL_R_RISCV_BASE_IDX_S (R_RISCV_max + 8)</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+#define INTERNAL_R_RISCV_BASE_IDX_ADD (R_RISCV_max + 9)</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"><span>
</span></div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> /* Processor specific flags for the ELF header e_flags field. */</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"><span>
</span></div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">diff --git a/opcodes/riscv-opc.c b/opcodes/riscv-opc.c</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">index 54887c97880..0433d2ca41f 100644</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">--- a/opcodes/riscv-opc.c</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+++ b/opcodes/riscv-opc.c</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">@@ -1378,16 +1378,23 @@ const struct riscv_opcode riscv_opcodes[] =</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> {"rorw", 64, INSN_CLASS_ZBB_OR_ZBKB, "d,s,<", MATCH_RORIW, MASK_RORIW, match_opcode, INSN_ALIAS },</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"><span>
</span></div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> /* Zba instructions. */</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">-{"sh1add", 0, INSN_CLASS_ZBA, "d,s,t", MATCH_SH1ADD, MASK_SH1ADD, match_opcode, 0 },</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">-{"sh2add", 0, INSN_CLASS_ZBA, "d,s,t", MATCH_SH2ADD, MASK_SH2ADD, match_opcode, 0 },</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">-{"sh3add", 0, INSN_CLASS_ZBA, "d,s,t", MATCH_SH3ADD, MASK_SH3ADD, match_opcode, 0 },</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">-{"sh1add.uw", 64, INSN_CLASS_ZBA, "d,s,t", MATCH_SH1ADD_UW, MASK_SH1ADD_UW, match_opcode, 0 },</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">-{"sh2add.uw", 64, INSN_CLASS_ZBA, "d,s,t", MATCH_SH2ADD_UW, MASK_SH2ADD_UW, match_opcode, 0 },</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">-{"sh3add.uw", 64, INSN_CLASS_ZBA, "d,s,t", MATCH_SH3ADD_UW, MASK_SH3ADD_UW, match_opcode, 0 },</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+{"sh1add", 0, INSN_CLASS_ZBA, "d,s,t", MATCH_SH1ADD, MASK_SH1ADD, match_opcode, 0 },</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+{"sh1add", 0, INSN_CLASS_ZBA, "d,s,t,1", MATCH_SH1ADD, MASK_SH1ADD, match_opcode, 0 },</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+{"sh2add", 0, INSN_CLASS_ZBA, "d,s,t", MATCH_SH2ADD, MASK_SH2ADD, match_opcode, 0 },</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+{"sh2add", 0, INSN_CLASS_ZBA, "d,s,t,1", MATCH_SH2ADD, MASK_SH2ADD, match_opcode, 0 },</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+{"sh3add", 0, INSN_CLASS_ZBA, "d,s,t", MATCH_SH3ADD, MASK_SH3ADD, match_opcode, 0 },</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+{"sh3add", 0, INSN_CLASS_ZBA, "d,s,t,1", MATCH_SH3ADD, MASK_SH3ADD, match_opcode, 0 },</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+{"sh1add.uw", 64, INSN_CLASS_ZBA, "d,s,t", MATCH_SH1ADD_UW, MASK_SH1ADD_UW, match_opcode, 0 },</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+{"sh1add.uw", 64, INSN_CLASS_ZBA, "d,s,t,1", MATCH_SH1ADD_UW, MASK_SH1ADD_UW, match_opcode, 0 },</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+{"sh2add.uw", 64, INSN_CLASS_ZBA, "d,s,t", MATCH_SH2ADD_UW, MASK_SH2ADD_UW, match_opcode, 0 },</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+{"sh2add.uw", 64, INSN_CLASS_ZBA, "d,s,t,1", MATCH_SH2ADD_UW, MASK_SH2ADD_UW, match_opcode, 0 },</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+{"sh3add.uw", 64, INSN_CLASS_ZBA, "d,s,t", MATCH_SH3ADD_UW, MASK_SH3ADD_UW, match_opcode, 0 },</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+{"sh3add.uw", 64, INSN_CLASS_ZBA, "d,s,t,1", MATCH_SH3ADD_UW, MASK_SH3ADD_UW, match_opcode, 0 },</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> {"zext.w", 64, INSN_CLASS_ZCB_AND_ZBA, "Cs,Cw", MATCH_C_ZEXT_W, MASK_C_ZEXT_W, match_opcode, INSN_ALIAS },</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> {"zext.w", 64, INSN_CLASS_ZBA, "d,s", MATCH_ADD_UW, MASK_ADD_UW | MASK_RS2, match_opcode, INSN_ALIAS },</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> {"zext.w", 64, INSN_CLASS_I, "d,s", 0, (int) M_ZEXTW, NULL, INSN_MACRO },</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> {"add.uw", 64, INSN_CLASS_ZBA, "d,s,t", MATCH_ADD_UW, MASK_ADD_UW, match_opcode, 0 },</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">+{"add.uw", 64, INSN_CLASS_ZBA, "d,s,t,1", MATCH_ADD_UW, MASK_ADD_UW, match_opcode, 0 },</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> {"slli.uw", 64, INSN_CLASS_ZBA, "d,s,>", MATCH_SLLI_UW, MASK_SLLI_UW, match_opcode, 0 },</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"><span>
</span></div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"> /* Zbc or zbkc instructions. */</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">-- </div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px">2.43.0</div></div><div style="margin-top:4px;margin-bottom:4px;line-height:1.6"><div class="lme-line-signal" dir="auto" style="font-size:14px"><br/></div></div></div></div><div class="history-quote-wrapper" id="lark-mail-quote-178349437"><div><div style="border-left:none;padding-left:0px" class="adit-html-block adit-html-block--collapsed"><div><div class="adit-html-block__attr history-quote-meta-wrapper" id="lark-mail-meta-67o2Tpz96" style="padding: 12px; background: rgb(245, 246, 247); color: rgb(31, 35, 41); border-radius: 4px; margin-top: 24px; margin-bottom: 12px;"><div style="word-break:break-word"><div style="" class="lme-line-signal"><span>From: </span> <span>"Jan Beulich"<<a class="quote-head-meta-mailto" style="overflow-wrap: break-word; white-space: pre-wrap; hyphens: none; word-break: break-word; cursor: pointer; text-decoration: none; color: inherit;" href="mailto:jbeulich@suse.com" rel="nofollow noopener noreferrer" data-mailto="mailto:jbeulich@suse.com">jbeulich@suse.com</a>></span></div><div style="" class="lme-line-signal"><span>Date: </span> Tue, Mar 24, 2026, 18:08</div><div style="" class="lme-line-signal"><span>Subject: </span> Re: [PATCH] RISCV-V: Add new relocation type for global array accesses with non-constant indices</div><div style="" class="lme-line-signal"><span>To: </span> <span>"翁丽琴"<<a class="quote-head-meta-mailto" style="overflow-wrap: break-word; white-space: pre-wrap; hyphens: none; word-break: break-word; cursor: pointer; text-decoration: none; color: inherit;" href="mailto:liqin.weng@spacemit.com" rel="nofollow noopener noreferrer" data-mailto="mailto:liqin.weng@spacemit.com">liqin.weng@spacemit.com</a>></span></div><div style="" class="lme-line-signal"><span>Cc: </span> <span>"craig.topper@sifive.com"<<a class="quote-head-meta-mailto" style="overflow-wrap: break-word; white-space: pre-wrap; hyphens: none; word-break: break-word; cursor: pointer; text-decoration: none; color: inherit;" href="mailto:craig.topper@sifive.com" rel="nofollow noopener noreferrer" data-mailto="mailto:craig.topper@sifive.com">craig.topper@sifive.com</a>></span>, <span>"kavin.balag@gmail.com"<<a class="quote-head-meta-mailto" style="overflow-wrap: break-word; white-space: pre-wrap; hyphens: none; word-break: break-word; cursor: pointer; text-decoration: none; color: inherit;" href="mailto:kavin.balag@gmail.com" rel="nofollow noopener noreferrer" data-mailto="mailto:kavin.balag@gmail.com">kavin.balag@gmail.com</a>></span>, <span>"kito.cheng@gmail.com"<<a class="quote-head-meta-mailto" style="overflow-wrap: break-word; white-space: pre-wrap; hyphens: none; word-break: break-word; cursor: pointer; text-decoration: none; color: inherit;" href="mailto:kito.cheng@gmail.com" rel="nofollow noopener noreferrer" data-mailto="mailto:kito.cheng@gmail.com">kito.cheng@gmail.com</a>></span>, <span>"binutils@sourceware.org"<<a class="quote-head-meta-mailto" style="overflow-wrap: break-word; white-space: pre-wrap; hyphens: none; word-break: break-word; cursor: pointer; text-decoration: none; color: inherit;" href="mailto:binutils@sourceware.org" rel="nofollow noopener noreferrer" data-mailto="mailto:binutils@sourceware.org">binutils@sourceware.org</a>></span></div></div></div><div><div class="lme-line-signal">On 24.03.2026 10:44, 翁丽琴 wrote:<br/>> @@ -3089,6 +3107,30 @@ riscv_elf_relocate_section (bfd *output_bfd,<br/>> break;<br/>> }<br/>> <br/>> + case INTERNAL_R_RISCV_REGREL_LO12_I:<br/>> + case INTERNAL_R_RISCV_REGREL_LO12_S:<br/>> + {<br/>> + bfd_vma gp = riscv_global_pointer_value (info);<br/>> + if (VALID_ITYPE_IMM (relocation + rel->r_addend - gp))<br/>> + {<br/>> + bfd_vma insn = bfd_getl32 (contents + rel->r_offset);<br/>> + rel->r_addend -= gp;<br/>> + bfd_putl32 (insn, contents + rel->r_offset);<br/>> + }<br/>> + else<br/>> + r = bfd_reloc_overflow;<br/>> + break;<br/>> + }<br/>> +<br/>> + case INTERNAL_R_RISCV_REGREL_ADD:<br/>> + case INTERNAL_R_RISCV_REGREL_SHXADD:<br/>> + {<br/>> + bfd_vma insn = bfd_getl32 (contents + rel->r_offset);<br/>> + insn = (insn & ~(OP_MASK_RS2 << OP_SH_RS2)) | (X_GP << OP_SH_RS2);<br/>> + bfd_putl32 (insn, contents + rel->r_offset);<br/>> + break;<br/>> + }<br/><br/>Nit: Entirely bogus indentation.<br/><br/>> --- a/bfd/elfxx-riscv.c<br/>> +++ b/bfd/elfxx-riscv.c<br/>> @@ -876,7 +876,70 @@ static const reloc_howto_type howto_table[] =<br/>> false, /* partial_inplace */<br/>> 0, /* src_mask */<br/>> ENCODE_ITYPE_IMM (-1U), /* dst_mask */<br/>> - false) /* pcrel_offset */<br/>> + false), /* pcrel_offset */<br/><br/>Why the fiddling with existing code?<br/><br/>> + /* Global array non-constant subscript addressing */<br/>> + HOWTO (R_RISCV_REGREL_LO12_I, /* type */<br/>> + 0, /* rightshift */<br/>> + 4, /* size */<br/>> + 32, /* bitsize */<br/><br/>I realize you copy what other, similar entries have, but are these bit<br/>sizes (and perhaps also sizes) actually sensible? This is a 12-bit<br/>reloc, isn't it?<br/><br/>> --- a/gas/config/tc-riscv.c<br/>> +++ b/gas/config/tc-riscv.c<br/>> @@ -1957,6 +1957,13 @@ riscv_apply_const_reloc (bfd_reloc_code_real_type reloc_type, bfd_vma value)<br/>> case BFD_RELOC_RISCV_LO12_I:<br/>> return ENCODE_ITYPE_IMM (value);<br/>> <br/>> +<br/><br/>Please don't introduce double blank lines.<br/><br/>> @@ -3631,16 +3644,25 @@ riscv_ip (char *str, struct riscv_cl_insn *ip, expressionS *imm_expr,<br/>> continue;<br/>> <br/>> case 'j': /* Sign-extended immediate. */<br/>> - p = percent_op_itype;<br/>> - *imm_reloc = BFD_RELOC_RISCV_LO12_I;<br/>> + p = percent_op_itype;<br/>> + if (strncmp(asarg, "%regrel_lo", 9) == 0)<br/>> + *imm_reloc = BFD_RELOC_RISCV_REGREL_LO12_I;<br/>> + else<br/>> + *imm_reloc = BFD_RELOC_RISCV_LO12_I;<br/>> goto alu_op;<br/>> case 'q': /* Store displacement. */<br/>> - p = percent_op_stype;<br/>> - *imm_reloc = BFD_RELOC_RISCV_LO12_S;<br/>> + p = percent_op_stype;<br/>> + if (strncmp(asarg, "%regrel_lo", 9) == 0)<br/>> + *imm_reloc = BFD_RELOC_RISCV_REGREL_LO12_S;<br/>> + else<br/>> + *imm_reloc = BFD_RELOC_RISCV_LO12_S;<br/>> goto load_store;<br/>> case 'o': /* Load displacement. */<br/>> - p = percent_op_itype;<br/>> - *imm_reloc = BFD_RELOC_RISCV_LO12_I;<br/>> + p = percent_op_itype;<br/>> + if (strncmp(asarg, "%regrel_lo", 9) == 0)<br/>> + *imm_reloc = BFD_RELOC_RISCV_REGREL_LO12_I;<br/>> + else<br/>> + *imm_reloc = BFD_RELOC_RISCV_LO12_I;<br/>> goto load_store;<br/><br/>Why all the re-indentation, causing extra churn? And then while causing extra<br/>churn you don't even fix the style problem (using hard tabs for 8 leading<br/>blanks).<br/><br/>> --- /dev/null<br/>> +++ b/gas/testsuite/gas/riscv/regrel-add.d<br/>> @@ -0,0 +1,3 @@<br/>> +#as: -march=rv32ia<br/>> +#source regrel-add.s<br/>> +#error_output: regrel-add.l<br/>> \ No newline at end of file<br/><br/>Please (throughout) can you avoid introduction of files without trailing<br/>newlines?<br/><br/>> --- a/include/elf/riscv.h<br/>> +++ b/include/elf/riscv.h<br/>> @@ -95,6 +95,14 @@ START_RELOC_NUMBERS (elf_riscv_reloc_type)<br/>> RELOC_NUMBER (R_RISCV_TLSDESC_LOAD_LO12, 63)<br/>> RELOC_NUMBER (R_RISCV_TLSDESC_ADD_LO12, 64)<br/>> RELOC_NUMBER (R_RISCV_TLSDESC_CALL, 65)<br/>> + RELOC_NUMBER (R_RISCV_REGREL_LO12_I, 77)<br/>> + RELOC_NUMBER (R_RISCV_REGREL_LO12_S, 78)<br/>> + RELOC_NUMBER (R_RISCV_REGREL_ADD, 79)<br/>> + RELOC_NUMBER (R_RISCV_REGREL_SHXADD, 80)<br/>> + RELOC_NUMBER (INTERNAL_R_RISCV_REGREL_LO12_I, 81)<br/>> + RELOC_NUMBER (INTERNAL_R_RISCV_REGREL_LO12_S, 82)<br/>> + RELOC_NUMBER (INTERNAL_R_RISCV_REGREL_ADD, 83)<br/>> + RELOC_NUMBER (INTERNAL_R_RISCV_REGREL_SHXADD, 84)<br/><br/>These last four don't appear in the spec (and the numbers used collide with<br/>whatever the spec may assign later). Why do yu need them, when you have ...<br/><br/>> END_RELOC_NUMBERS (R_RISCV_max)<br/>> <br/>> /* Internal relocations used exclusively by the relaxation pass. */<br/>> @@ -105,6 +113,10 @@ END_RELOC_NUMBERS (R_RISCV_max)<br/>> #define R_RISCV_GPREL_S (R_RISCV_max + 4)<br/>> #define R_RISCV_TPREL_I (R_RISCV_max + 5)<br/>> #define R_RISCV_TPREL_S (R_RISCV_max + 6)<br/>> +#define INTERNAL_R_RISCV_REGREL_LO12_I (R_RISCV_max + 7)<br/>> +#define INTERNAL_R_RISCV_REGREL_LO12_S (R_RISCV_max + 8)<br/>> +#define INTERNAL_R_RISCV_REGREL_ADD (R_RISCV_max + 9)<br/>> +#define INTERNAL_R_RISCV_REGREL_SHXADD (R_RISCV_max + 10)<br/><br/>... these?<br/><br/>> --- a/opcodes/ChangeLog<br/>> +++ b/opcodes/ChangeLog<br/>> @@ -1,3 +1,7 @@<br/>> +2026-03-24 wengliqin <liqin.weng@spacemit.com><br/>> +<br/>> + * riscv-opc.c: Update relocation definitions for new REGREL types.<br/><br/>I don't think this adequately describes the changes being made. (Such patching<br/>of ChangeLog files shouldn't be done anymore anyway, aiui. If you want ChangeLog<br/>entries, make them part of the commit message.)<br/><br/>Jan<br/></div></div></div></div></div></div></div></div></div></div></div></div></div></body></html><meta data-version="editor_version_1.2.12"/><div data-zone-id="0" data-line-index="0" data-line="true" style="white-space: pre-wrap; margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><br></div><div data-zone-id="0" data-line-index="1" data-line="true" style="white-space: pre-wrap; margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><span style="font-size: 12pt;"><span style="font-family: "Times New Roman", serif;">This message and any attachment are confidential and may be privileged or otherwise protected from disclosure. If you are not an intended recipient of this message, please delete it and any attachment from your system and notify the sender immediately by reply e-mail. Unintended recipients should not use, copy, disclose or take any action based on this message or any information contained in this message. Emails cannot be guaranteed to be secure or error free as they can be intercepted, amended, lost or destroyed, and you should take full responsibility for security checking. </span></span>
</div><div data-zone-id="0" data-line-index="2" data-line="true" style="white-space: pre-wrap; margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><span style="font-size: 12pt;"><span style="font-family: "Times New Roman", serif;"> </span></span>
</div><div data-zone-id="0" data-line-index="3" data-line="true" style="white-space: pre-wrap; margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><span style="font-size: 12pt;"><span style="font-family: 宋体;">本邮件及其任何附件具有保密性质,并可能受其他保护或不允许被披露给第三方。如阁下误收到本邮件,敬请立即以回复电子邮件的方式通知发件人,并将本邮件及其任何附件从阁下系统中予以删除。如阁下并非本邮件写明之收件人,敬请切勿使用、复制、披露本邮件或其任何内容,亦请切勿依本邮件或其任何内容而采取任何行动。电子邮件无法保证是一种安全和不会出现任何差错的通信方式,可能会被拦截、修改、丢失或损坏,收件人需自行负责做好安全检查。</span></span>
</div>