<html><head></head><body><div id="editor_version_7.68.0_iuD2zuQA" 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;"><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" data-li-line="true" 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" data-li-line="true" 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" data-li-line="true" 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 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;">LLVM Implement in LLD && MC : <a class="not-doclink" href="https://github.com/llvm/llvm-project/pull/207901" linkid="OLUHTGGIWn" 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></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;"><br/></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;">-----</div></div><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;"><br/></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;">From b33b8deaaa6f9f1a436db2e4a114ce122913c2e2 Mon Sep 17 00:00:00 2001</div></div><div id="lark-mail-quote-9007ce65f072d1adaecc2e1996c9a5c0"><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;">From: wengliqin <<a class="not-doclink" href="mailto:liqin.weng@spacemit.com" linkid="enyVf5FoAJ" 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="12" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">Date: Wed, 24 Jun 2026 18:57:07 +0800</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;">Subject: [PATCH]  RISCV-V: Add new relocation type for global array accesses</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;"> with non-constant indices.</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;">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="17" 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="18" 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="0phsPoA3q8" 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="19" 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="20" 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="21" 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="22" 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                      |  61 ++++++++++++++-</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/elfxx-riscv.c                      | 104 ++++++++++++++++++++++++-</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;"> bfd/libbfd.h                           |   3 +</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;"> bfd/reloc.c                            |   6 ++</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/ChangeLog                          |  10 +++</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/config/tc-riscv.c                  |  35 +++++++--</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.d |   3 +</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;"> gas/testsuite/gas/riscv/base-idx-add.l |  10 +++</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;"> gas/testsuite/gas/riscv/base-idx-add.s |  19 +++++</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;"> include/ChangeLog                      |   4 +</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;"> include/elf/riscv.h                    |   6 ++</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;"> opcodes/riscv-opc.c                    |  19 +++--</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;"> 14 files changed, 282 insertions(+), 14 deletions(-)</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.d</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;"> create mode 100644 gas/testsuite/gas/riscv/base-idx-add.l</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;"> create mode 100644 gas/testsuite/gas/riscv/base-idx-add.s</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;"><br/></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;">diff --git a/bfd/ChangeLog b/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;">index 6046f658f8b..ea4b9e41c69 100644</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;">--- a/bfd/ChangeLog</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;">+++ b/bfd/ChangeLog</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;">@@ -1,3 +1,16 @@</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;">+2026-06-22  wengliqin  <<a class="not-doclink" href="mailto:liqin.weng@spacemit.com" linkid="MJXLUYBPBM" 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="45" 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="46" 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="47" 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="48" 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="49" 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="50" 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="51" 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="52" 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="53" 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="54" 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="55" 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="56" 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="57" 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="zNeHae3H4X" 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="58" 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="59" 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="60" 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="61" 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="62" 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="63" 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="64" 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="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_32_PCREL,</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_SET_ULEB128,</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_SUB_ULEB128,</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_LO12_I,</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;">+  BFD_RELOC_RISCV_BASE_IDX_LO12_S,</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;">+  BFD_RELOC_RISCV_BASE_IDX_ADD,</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;"><span> 
</span></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;">   /* Renesas RL78 Relocations.  */</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;">   BFD_RELOC_RL78_NEG8,</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;">diff --git a/bfd/elfnn-riscv.c b/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;">index d3963ec9a58..71212e5c78b 100644</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;">--- a/bfd/elfnn-riscv.c</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;">+++ b/bfd/elfnn-riscv.c</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;">@@ -1999,7 +1999,9 @@ perform_relocation (const reloc_howto_type *howto,</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;">       break;</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;"><span> 
</span></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_LO12_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 R_RISCV_BASE_IDX_LO12_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_GPREL_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 INTERNAL_R_RISCV_BASE_IDX_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_TPREL_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;">     case R_RISCV_TPREL_I:</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;">     case R_RISCV_PCREL_LO12_I:</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;">@@ -2009,7 +2011,9 @@ perform_relocation (const reloc_howto_type *howto,</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;">       break;</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;"><span> 
</span></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_LO12_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 R_RISCV_BASE_IDX_LO12_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_GPREL_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 INTERNAL_R_RISCV_BASE_IDX_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_TPREL_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;">     case R_RISCV_TPREL_S:</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_PCREL_LO12_S:</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;">@@ -2130,6 +2134,8 @@ perform_relocation (const reloc_howto_type *howto,</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_32_PCREL:</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_TLS_DTPREL32:</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 R_RISCV_TLS_DTPREL64:</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;">+    case R_RISCV_BASE_IDX_ADD:</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;">+    case INTERNAL_R_RISCV_BASE_IDX_ADD:</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;">       break;</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;"><span> 
</span></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_DELETE:</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;">@@ -2722,6 +2728,9 @@ riscv_elf_relocate_section (bfd *output_bfd,</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_HI20:</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_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_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_LO12_I:</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;">+              case R_RISCV_BASE_IDX_LO12_S:</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;">+              case R_RISCV_BASE_IDX_ADD:</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;">                 goto do_relocation;</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;"><span> 
</span></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_PCREL_HI20:</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;">@@ -2788,6 +2797,9 @@ riscv_elf_relocate_section (bfd *output_bfd,</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_RVC_LUI:</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_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_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_LO12_I:</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_BASE_IDX_LO12_S:</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_BASE_IDX_ADD:</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_SET6:</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;">         case R_RISCV_SET8:</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;">         case R_RISCV_SET16:</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;">@@ -3089,6 +3101,36 @@ riscv_elf_relocate_section (bfd *output_bfd,</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;">             break;</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;">           }</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;"><span> 
</span></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;">+        case INTERNAL_R_RISCV_BASE_IDX_I:</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;">+        case INTERNAL_R_RISCV_BASE_IDX_S:</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;">+          {</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;">+            /* After relaxation, the ld/st uses (gp + index) as its base</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;">+               register, so the immediate encodes the symbol's displacement</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;">+               from gp.  perform_relocation will encode the final value</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;">+               from (relocation + r_addend).  */</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;">+            bfd_vma gp = riscv_global_pointer_value (info);</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;">+            bfd_vma disp = relocation + rel->r_addend - gp;</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;">+            bool valid = (r_type == INTERNAL_R_RISCV_BASE_IDX_I)</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;">+                         ? VALID_ITYPE_IMM (disp) : VALID_STYPE_IMM (disp);</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;">+            if (valid)</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;">+              rel->r_addend -= gp;</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;">+            else</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;">+              r = bfd_reloc_overflow;</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;">+            break;</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;">+</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;">+        case INTERNAL_R_RISCV_BASE_IDX_ADD:</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;">+          {</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;">+            /* Rewrite rs2 of the add/shXadd instruction to use gp as the</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;">+               base register after relaxation.  The same encoding change</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;">+               applies to both add and shXadd — the opcode itself is left</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;">+               intact.  */</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;">+            bfd_vma insn = bfd_getl32 (contents + rel->r_offset);</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;">+            insn = (insn & ~(OP_MASK_RS2 << OP_SH_RS2)) | (X_GP << OP_SH_RS2);</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;">+            bfd_putl32 (insn, contents + rel->r_offset);</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;">+            break;</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;">+</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;">         case R_RISCV_PCREL_HI20:</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;">           absolute = riscv_zero_pcrel_hi_reloc (rel, info, pc, &relocation,</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;">                                                 contents, howto);</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;">@@ -5148,6 +5190,18 @@ _bfd_riscv_relax_lui (bfd *abfd,</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;">           rel->r_info = ELFNN_R_INFO (sym, R_RISCV_GPREL_S);</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;">           return true;</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;"><span> 
</span></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;">+        case R_RISCV_BASE_IDX_LO12_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;">+          rel->r_info = ELFNN_R_INFO (sym, INTERNAL_R_RISCV_BASE_IDX_I);</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;">+          return true;</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;">+</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;">+        case R_RISCV_BASE_IDX_LO12_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;">+          rel->r_info = ELFNN_R_INFO (sym, INTERNAL_R_RISCV_BASE_IDX_S);</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;">+          return true;</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;">+</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;">+        case 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;">+          rel->r_info = ELFNN_R_INFO (sym, INTERNAL_R_RISCV_BASE_IDX_ADD);</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;">+          return true;</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;">+</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;">         case R_RISCV_HI20:</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;">           /* Delete unnecessary LUI and reuse the reloc.  */</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;">           *again = true;</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;">@@ -5160,7 +5214,7 @@ _bfd_riscv_relax_lui (bfd *abfd,</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;">     }</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;"><span> 
</span></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;">   /* Can we relax LUI to C.LUI?  Alignment might move the section forward;</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;">+     account for this assuming page alignment at worst. In the presence of</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;">      RELRO segment the linker aligns it by one page size, therefore sections</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;">      after the segment can be moved more than one page. */</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;"><span> 
</span></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;">@@ -5539,7 +5593,10 @@ _bfd_riscv_relax_section (bfd *abfd, asection *sec,</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;">             relax_func = _bfd_riscv_relax_call;</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;">           else if (type == R_RISCV_HI20</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;">                    || type == R_RISCV_LO12_I</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_S)</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;">+                   || type == R_RISCV_BASE_IDX_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_BASE_IDX_LO12_S</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_ADD)</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;">             relax_func = _bfd_riscv_relax_lui;</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;">           else if (type == R_RISCV_TPREL_HI20</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;">                    || type == R_RISCV_TPREL_ADD</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;">diff --git a/bfd/elfxx-riscv.c b/bfd/elfxx-riscv.c</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;">index ee962b4f6f1..8c87bbfe815 100644</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;">--- a/bfd/elfxx-riscv.c</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;">+++ b/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;">@@ -876,7 +876,62 @@ static const reloc_howto_type howto_table[] =</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;">          false,                                /* partial_inplace */</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;">          0,                                /* src_mask */</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;">          ENCODE_ITYPE_IMM (-1U),        /* dst_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;">-         false)                         /* pcrel_offset */</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;">+</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;">+  /* Reserved slots 66-76.  */</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;">+  EMPTY_HOWTO (66),</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 (67),</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 (68),</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 (69),</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 (70),</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 (71),</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 (72),</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 (74),</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 (75),</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 (76),</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;">+</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;">+  /* Global array accesses with non-constant subscript (base + index).  */</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;">+  HOWTO (R_RISCV_BASE_IDX_LO12_I,        /* type */</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;">+         0,                                /* rightshift */</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;">+         4,                                /* size */</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;">+         32,                                /* bitsize */</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;">+         false,                                /* pc_relative */</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;">+         0,                                /* bitpos */</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;">+         complain_overflow_dont,        /* complain_on_overflow */</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;">+         bfd_elf_generic_reloc,                /* special_function */</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;">+         "R_RISCV_BASE_IDX_LO12_I",        /* name */</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;">+         false,                                /* partial_inplace */</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;">+         0,                                /* src_mask */</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;">+         ENCODE_ITYPE_IMM (-1U),        /* dst_mask */</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;">+         false),                        /* pcrel_offset */</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;">+</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;">+  HOWTO (R_RISCV_BASE_IDX_LO12_S,        /* type */</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;">+         0,                                /* rightshift */</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;">+         4,                                /* size */</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;">+         32,                                /* bitsize */</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;">+         false,                                /* pc_relative */</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;">+         0,                                /* bitpos */</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;">+         complain_overflow_dont,        /* complain_on_overflow */</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;">+         bfd_elf_generic_reloc,                /* special_function */</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;">+         "R_RISCV_BASE_IDX_LO12_S",        /* name */</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;">+         false,                                /* partial_inplace */</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;">+         0,                                /* src_mask */</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;">+         ENCODE_STYPE_IMM (-1U),        /* dst_mask */</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;">+         false),                        /* pcrel_offset */</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;">+</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;">+  HOWTO (R_RISCV_BASE_IDX_ADD,                /* type */</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;">+         0,                                /* rightshift */</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;">+         4,                                /* size */</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;">+         32,                                /* bitsize */</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;">+         false,                                /* pc_relative */</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;">+         0,                                /* bitpos */</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;">+         complain_overflow_dont,        /* complain_on_overflow */</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;">+         bfd_elf_generic_reloc,                /* special_function */</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;">+         "R_RISCV_BASE_IDX_ADD",        /* name */</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;">+         false,                                /* partial_inplace */</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;">+         0,                                /* src_mask */</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;">+         0,                                /* dst_mask */</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;">+         false),                        /* pcrel_offset */</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;"> };</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;"><span> 
</span></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;"> static const reloc_howto_type howto_table_internal[] =</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;">@@ -961,6 +1016,50 @@ static const reloc_howto_type howto_table_internal[] =</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;">          0,                                /* src_mask */</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;">          ENCODE_STYPE_IMM (-1U),        /* dst_mask */</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;">          false),                        /* pcrel_offset */</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;">+</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;">+  /* Global array accesses with non-constant subscript (base + index),</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;">+     after relaxation.  */</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;">+  HOWTO (INTERNAL_R_RISCV_BASE_IDX_I,                /* type */</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;">+         0,                                /* rightshift */</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;">+         4,                                /* size */</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;">+         32,                                /* bitsize */</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;">+         false,                                /* pc_relative */</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;">+         0,                                /* bitpos */</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;">+         complain_overflow_dont,        /* complain_on_overflow */</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;">+         bfd_elf_generic_reloc,                /* special_function */</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;">+         "INTERNAL_R_RISCV_BASE_IDX_I",                /* name */</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;">+         false,                                /* partial_inplace */</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;">+         0,                                /* src_mask */</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;">+         ENCODE_ITYPE_IMM (-1U),        /* dst_mask */</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;">+         false),                        /* pcrel_offset */</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;">+</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;">+  HOWTO (INTERNAL_R_RISCV_BASE_IDX_S,                /* type */</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;">+         0,                                /* rightshift */</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;">+         4,                                /* size */</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;">+         32,                                /* bitsize */</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;">+         false,                                /* pc_relative */</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;">+         0,                                /* bitpos */</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;">+         complain_overflow_dont,        /* complain_on_overflow */</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;">+         bfd_elf_generic_reloc,                /* special_function */</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;">+         "INTERNAL_R_RISCV_BASE_IDX_S",                /* name */</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;">+         false,                                /* partial_inplace */</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;">+         0,                                /* src_mask */</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;">+         ENCODE_STYPE_IMM (-1U),        /* dst_mask */</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;">+         false),                        /* pcrel_offset */</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;">+</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;">+  HOWTO (INTERNAL_R_RISCV_BASE_IDX_ADD,                /* type */</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;">+         0,                                /* rightshift */</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;">+         4,                                /* size */</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;">+         32,                                /* bitsize */</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;">+         false,                                /* pc_relative */</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;">+         0,                                /* bitpos */</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;">+         complain_overflow_dont,        /* complain_on_overflow */</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;">+         bfd_elf_generic_reloc,                /* special_function */</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;">+         "INTERNAL_R_RISCV_BASE_IDX_ADD",                /* name */</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;">+         false,                                /* partial_inplace */</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;">+         0,                                /* src_mask */</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;">+         0,        /* dst_mask */</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;">+         false)                        /* pcrel_offset */</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;"> };</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;"><span> 
</span></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;"> /* A mapping from BFD reloc types to RISC-V ELF reloc types.  */</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;">@@ -1023,6 +1122,9 @@ static const struct elf_reloc_map riscv_reloc_map[] =</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;">   { BFD_RELOC_RISCV_32_PCREL, R_RISCV_32_PCREL },</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;">   { BFD_RELOC_RISCV_SET_ULEB128, R_RISCV_SET_ULEB128 },</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_SUB_ULEB128, R_RISCV_SUB_ULEB128 },</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_BASE_IDX_LO12_I, R_RISCV_BASE_IDX_LO12_I},</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_BASE_IDX_LO12_S, R_RISCV_BASE_IDX_LO12_S},</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_ADD, R_RISCV_BASE_IDX_ADD},</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;"> };</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;"><span> 
</span></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;"> struct riscv_profiles</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;">diff --git a/bfd/libbfd.h b/bfd/libbfd.h</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;">index a27134dcd78..7e49498d0f1 100644</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;">--- a/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;">+++ b/bfd/libbfd.h</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;">@@ -2363,6 +2363,9 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@",</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;">   "BFD_RELOC_RISCV_TLSDESC_ADD_LO12",</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;">   "BFD_RELOC_RISCV_TLSDESC_CALL",</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_ALIGN",</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_BASE_IDX_LO12_I",</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_BASE_IDX_LO12_S",</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_ADD",</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_RVC_BRANCH",</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_RVC_JUMP",</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_RELAX",</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;">diff --git a/bfd/reloc.c b/bfd/reloc.c</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;">index 98343696a33..6f6ff98c4a5 100644</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;">--- a/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;">+++ b/bfd/reloc.c</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;">@@ -4861,6 +4861,12 @@ ENUMX</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;">   BFD_RELOC_RISCV_TLSDESC_ADD_LO12</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;"> 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_CALL</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_BASE_IDX_LO12_I</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_S</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_ADD</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_ALIGN</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;">diff --git a/gas/ChangeLog b/gas/ChangeLog</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;">index 492475658f1..5c69c63bce6 100644</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;">--- a/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;">+++ b/gas/ChangeLog</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;">@@ -1,3 +1,13 @@</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;">+2026-03-24  wengliqin  <<a class="not-doclink" href="mailto:liqin.weng@spacemit.com" linkid="TCYz1MhRYr" 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="370" 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="371" 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="372" 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="373" 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="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.l: Corresponding test output.</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-shxadd.s: Ditto</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-shxadd.d: 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.l: Corresponding test output.</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;">+</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;"> 2025-09-16  Rainer Orth  <<a class="not-doclink" href="mailto:ro@CeBiTec.Uni-Bielefeld.DE" linkid="2yp6FJSXGd" 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="380" 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="381" 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="382" 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="383" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">index 6bcf53832a0..f1e56ec4aa6 100644</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;">--- a/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;">+++ b/gas/config/tc-riscv.c</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;">@@ -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="387" 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="388" 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="389" 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="390" 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="391" 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="392" 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="393" 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="394" 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="395" 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="396" 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="397" 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="398" 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="399" 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="400" 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="401" 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="402" 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="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_TPREL_ADD)</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_ADD</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_BASE_IDX_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;">     {</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;">       frag_wane (frag_now);</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;">       frag_new (0);</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;">@@ -2455,6 +2462,7 @@ static const struct percent_op_match percent_op_utype[] =</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;"> static const struct percent_op_match percent_op_itype[] =</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;"> {</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;">   {"lo", BFD_RELOC_RISCV_LO12_I},</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;">+  {"base_idx_lo", BFD_RELOC_RISCV_BASE_IDX_LO12_I},</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;">   {"tprel_lo", BFD_RELOC_RISCV_TPREL_LO12_I},</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;">   {"pcrel_lo", BFD_RELOC_RISCV_PCREL_LO12_I},</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;">   {"tlsdesc_load_lo", BFD_RELOC_RISCV_TLSDESC_LOAD_LO12},</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;">@@ -2465,6 +2473,7 @@ static const struct percent_op_match percent_op_itype[] =</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;"> static const struct percent_op_match percent_op_stype[] =</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;"> {</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;">   {"lo", BFD_RELOC_RISCV_LO12_S},</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;">+  {"base_idx_lo", BFD_RELOC_RISCV_BASE_IDX_LO12_S},</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;">   {"tprel_lo", BFD_RELOC_RISCV_TPREL_LO12_S},</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;">   {"pcrel_lo", BFD_RELOC_RISCV_PCREL_LO12_S},</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;">   {0, 0}</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;">@@ -2474,6 +2483,7 @@ static const struct percent_op_match percent_op_relax_only[] =</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;">   {"tlsdesc_call", BFD_RELOC_RISCV_TLSDESC_CALL},</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_add", BFD_RELOC_RISCV_TPREL_ADD},</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;">+  {"base_idx_add", BFD_RELOC_RISCV_BASE_IDX_ADD},</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;"><span> 
</span></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;">@@ -3633,15 +3643,24 @@ riscv_ip (char *str, struct riscv_cl_insn *ip, expressionS *imm_expr,</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;"><span> 
</span></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;">             case 'j': /* Sign-extended immediate.  */</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;">               p = percent_op_itype;</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;">-              *imm_reloc = BFD_RELOC_RISCV_LO12_I;</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;">+              if (strncmp(asarg, "%base_idx_lo", 9) == 0)</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;">+                *imm_reloc = BFD_RELOC_RISCV_BASE_IDX_LO12_I;</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;">+              else</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;">+                *imm_reloc = BFD_RELOC_RISCV_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;">               goto alu_op;</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;">             case 'q': /* Store displacement.  */</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;">               p = percent_op_stype;</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;">-              *imm_reloc = BFD_RELOC_RISCV_LO12_S;</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;">+              if (strncmp(asarg, "%base_idx_lo", 9) == 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;">+                *imm_reloc = BFD_RELOC_RISCV_BASE_IDX_LO12_S;</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;">+              else</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;">+                *imm_reloc = 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;">               goto load_store;</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;">             case 'o': /* Load displacement.  */</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;">-              p = percent_op_itype;</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;">-              *imm_reloc = BFD_RELOC_RISCV_LO12_I;</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;">+                  p = percent_op_itype;</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;">+                  if (strncmp(asarg, "%base_idx_lo", 9) == 0)</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;">+                    *imm_reloc = BFD_RELOC_RISCV_BASE_IDX_LO12_I;</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;">+                  else</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;">+                    *imm_reloc = BFD_RELOC_RISCV_LO12_I;</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;">               goto load_store;</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;">             case '1':</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;">               /* This is used for TLS relocations that acts as relaxation</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;">@@ -4687,6 +4706,8 @@ md_apply_fix (fixS *fixP, valueT *valP, segT seg)</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;">     case BFD_RELOC_RISCV_HI20:</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;">     case BFD_RELOC_RISCV_LO12_I:</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 BFD_RELOC_RISCV_LO12_S:</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;">+    case BFD_RELOC_RISCV_BASE_IDX_LO12_I:</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;">+    case BFD_RELOC_RISCV_BASE_IDX_LO12_S:</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;">       bfd_putl32 (riscv_apply_const_reloc (fixP->fx_r_type, *valP)</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;">                   | bfd_getl32 (buf), buf);</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;">       if (fixP->fx_addsy == NULL)</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;">@@ -4694,6 +4715,10 @@ md_apply_fix (fixS *fixP, valueT *valP, segT seg)</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;">       relaxable = true;</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;">       break;</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;"><span> 
</span></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;">+    case BFD_RELOC_RISCV_BASE_IDX_ADD:</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;">+      relaxable = true;</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;">+      break;</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;">+</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;">     case BFD_RELOC_RISCV_GOT_HI20:</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;">       /* R_RISCV_GOT_HI20 and the following R_RISCV_LO12_I are relaxable</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;">          only if it is created as a result of la or lga assembler macros. */</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;">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="483" 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="484" 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="485" 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="486" 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="487" 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="488" 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="489" 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="490" 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="491" 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="492" 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="493" 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="494" 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="495" 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="496" 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="497" 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="498" 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="499" 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="500" 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="501" 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="502" 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="503" 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="504" 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="505" 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="506" 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="507" 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="508" 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="509" 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="510" 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="511" 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="512" 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="513" 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="514" 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="515" 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="516" 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="517" 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="518" 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="519" 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="520" 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="521" 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="522" 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="523" 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="524" 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="525" 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="526" 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="527" 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="528" 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="529" 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="530" 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="531" 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="532" 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="533" 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="534" 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="535" 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="536" 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="537" 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="JIA7ZoTa1l" 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="538" 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="539" 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="540" 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="541" 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="HaCtgUHzcG" 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="542" 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="543" 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="544" 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="545" data-line="true" style="margin-top: 4px; margin-bottom: 4px; line-height: 1.6;"><div dir="auto" style="font-size: 14px;">index f6ca3d4acd8..52a67294ae9 100644</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;">--- a/include/elf/riscv.h</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;">+++ b/include/elf/riscv.h</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;">@@ -95,6 +95,9 @@ START_RELOC_NUMBERS (elf_riscv_reloc_type)</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;">   RELOC_NUMBER (R_RISCV_TLSDESC_LOAD_LO12, 63)</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;">   RELOC_NUMBER (R_RISCV_TLSDESC_ADD_LO12, 64)</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;">   RELOC_NUMBER (R_RISCV_TLSDESC_CALL, 65)</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;">+  RELOC_NUMBER (R_RISCV_BASE_IDX_LO12_I, 77)</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;">+  RELOC_NUMBER (R_RISCV_BASE_IDX_LO12_S, 78)</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;">+  RELOC_NUMBER (R_RISCV_BASE_IDX_ADD,    79)</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;"> END_RELOC_NUMBERS (R_RISCV_max)</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;"><span> 
</span></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;"> /* Internal relocations used exclusively by the relaxation pass.  */</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;">@@ -105,6 +108,9 @@ END_RELOC_NUMBERS (R_RISCV_max)</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;"> #define R_RISCV_GPREL_S           (R_RISCV_max + 4)</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;"> #define R_RISCV_TPREL_I           (R_RISCV_max + 5)</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;"> #define R_RISCV_TPREL_S           (R_RISCV_max + 6)</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;">+#define INTERNAL_R_RISCV_BASE_IDX_I (R_RISCV_max + 7)</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;">+#define INTERNAL_R_RISCV_BASE_IDX_S (R_RISCV_max + 8)</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;">+#define INTERNAL_R_RISCV_BASE_IDX_ADD (R_RISCV_max + 9)</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;"><span> 
</span></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;"> /* Processor specific flags for the ELF header e_flags field.  */</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;"><span> 
</span></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;">diff --git a/opcodes/riscv-opc.c b/opcodes/riscv-opc.c</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;">index 54887c97880..0433d2ca41f 100644</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;">--- a/opcodes/riscv-opc.c</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;">+++ b/opcodes/riscv-opc.c</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;">@@ -1378,16 +1378,23 @@ const struct riscv_opcode riscv_opcodes[] =</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;"> {"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="574" 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="575" 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="576" 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="577" 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="578" 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="579" 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="580" 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="581" 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="582" 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="583" 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="584" 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="585" 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="586" 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="587" 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="588" 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="589" 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="590" 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="591" 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="592" 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="593" 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="594" 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="595" 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="596" 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="597" 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="598" 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="599" 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="600" 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="601" 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="602" 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="603" 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="604" 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-178349437"><div data-html-block="quote" data-mail-html-ignore=""><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 history-quote-gap-tag" 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 data-mailto="mailto:jbeulich@suse.com" 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">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 data-mailto="mailto:liqin.weng@spacemit.com" 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">liqin.weng@spacemit.com</a>></span></div><div style="" class="lme-line-signal"><span>Cc: </span> <span>"craig.topper@sifive.com"<<a data-mailto="mailto:craig.topper@sifive.com" 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">craig.topper@sifive.com</a>></span>, <span>"kavin.balag@gmail.com"<<a data-mailto="mailto:kavin.balag@gmail.com" 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">kavin.balag@gmail.com</a>></span>, <span>"kito.cheng@gmail.com"<<a data-mailto="mailto:kito.cheng@gmail.com" 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">kito.cheng@gmail.com</a>></span>, <span>"binutils@sourceware.org"<<a data-mailto="mailto:binutils@sourceware.org" 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">binutils@sourceware.org</a>></span></div></div></div><div><div data-type="plainText" 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></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>