<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/202154>202154</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [RISC-V][lld] ld.lld relax GP option unsupported (before LLVM 17)
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            lld
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          XiaobingHou1219
      </td>
    </tr>
</table>

<pre>
    I ran into this while reducing a RISC-V linker testcase. The reproducer is small, and I have been seeing the same result consistently across three reruns.

### Summary
ld.lld 16.0.6 rejects the legal RISC-V link with `unknown argument /'--relax-gp/'`, while 17.0.6 and 22.1.0 accept the option and link the same input successfully.

### Expected behavior
Link a small-data RV64 executable with explicit `--relax-gp` enabled.

### Environment
- linker route: llvm-mc 22 plus ld.lld version replay
- march: rv64i
- mabi: lp64
- first failing stage: link
- local stability check: True

### Reduced testcase
These are the reduced input files from the minimized reproducer I used locally:

#### `case.s`
```asm
.global _start
_start:
  lui a0, %hi(foo)
  addi a0, a0, %lo(foo)
  lw a0, %lo(foo)(a0)
  sw a0, %lo(foo)(a0)
  lui a0, %hi(bar)
  addi a0, a0, %lo(bar)
  lb a0, %lo(bar)(a0)
  sb a0, %lo(bar)(a0)
  lui a0, %hi(norelax)
  addi a0, a0, %lo(norelax)
  lw a0, %lo(norelax)(a0)
  sw a0, %lo(norelax)(a0)
  lui a0, %hi(undefined_weak)
  addi a0, a0, %lo(undefined_weak)
  lw a0, %lo(undefined_weak)(a0)
  sw a0, %lo(undefined_weak)(a0)
  lui a0, %hi(baz)
  addi a0, a0, %lo(baz)
 lw a0, %lo(baz)(a0)
  sw a0, %lo(baz)(a0)
a:
  addi a0, a0, 1

.section .sdata,"aw"
foo:
  .word 0
  .space 4091
bar:
  .byte 0
norelax:
  .word 0
.weak undefined_weak
```

#### `layout.ld`
```ld
SECTIONS {
 .text : {*(.text) }
  .sdata 0x200000 : { }
}
```

### Reproduction notes
- This packaged root does not have a single canonical `run.ps1` wrapper.
- Use the reduced inputs under `case/` and follow the commands documented in `case/README.md`.
- Stable witness outputs, when present, are preserved under `verify/run1..run3/`.

### What I checked
- Reduced inputs are preserved under case/.
- Stable witness outputs are preserved under verify/run1..run3/.
- The strict recheck says stable normalized run signatures across three runs: True.
- Tracker guidance link: https://llvm.org/docs/HowToSubmitABug.html
- evidence summary: 3 clean reproductions under hunt/verify/lld_relax_gp_option_unsupported_before_17/run1..run3 show stable assembly success for rv64.o, stable 16.0.6 link-time rejection with `unknown argument /'--relax-gp/'`, and stable 17.0.6/22.1.0 successful links whose objdump files are materialized as out.17.objdump.txt and out.22.objdump.txt.

### Notes
upstream////llvm-project//lld//test//ELF//riscv-relax-hi20-lo12.s and LLVM 17.0.1 lld release notes

Root key: `lld.riscv.relax_gp_option_unsupported_before_17`
Case id: `20260527-lld-relax-gp-option-unsupported`

</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJycV91u47oRfhr5ZmBBomPZvvBFNj89AfacFkm67V1AiWOJG4oUOKQdn6cvSEm2s3Y2QYPAkMiP88-ZT5xI1hpxncy_JfPbCfeuMXb9X8lNKXX9h_E5y1eT0oj9-gEs1yC1M-AaSbBrpEKwKHwldQ0cHh-ebqY_QEn9ihYckqs4YQrPTYB11ghfoQVJQC1XKmE3wLWAB2j4FqFE1ECIQZZrEIi34Rh55aAymiQ51E7tgVfWEIFrLAaA9ZrSJLtNsuvhl836f3jybcvtvl9WIlVKQF6kWVqAxZ9YOYqaFNZcnVoPO-kaSIrM61dtdhq4rX2L2kHC7hO2mE4tKv42rbv-PSmy4EwfkHwRFQTPGEvzNANeVdi5qMp0ThodN6Oig6NSd94B-apCoo1Xav-BT3dvHVYOBZTY8K00tgd8D9J4H9ip4I7D44_iCvANK-94qbD3Cd86JSvpgnMnXhQZoA4o8ZFWvZXW6BCDfms6ptka7zCZXYNS23baVsAYdMoTDPHeoqXgssVO8f14uOW2asIpuy2u5HG1lFFUV1yNaxtpycGGSxUKgxyve21Svx4sMRVXYauUSro9VA1WrwH0bD1e9ucxVC2KQ5H2-88NEgK3GPNiB0yfmo1USLCxpo2brdSylX-jOK3sB_CEordH7ZPZ9UXlQX9SZPFuUCidfrvI-n9Obb-S1sqUXMELOW6HsA_Po2QA5SXwWH0JmzcyYcuNMQlbjftciBFwgClzBlO7y9tsGZYPMPoa7NyoktuvGPUepsrL278a9TXYuVHaxAvwFcPOoWcRO4F8FrWPoedGei1wIzWKlx3y16_Y-uGJM5PPkZ9Z_umJS6n_-2upP4GdWTrsfmbeJRg_uS1n2vPTG5oSVrE9pxQ6aMJuEsb4LmGs3w_FfpSV7owVkB1eqeMVwlW2GmSGKjxBl3uHI3rM_wfC0hBb-CXU75vE7xqL4nvjXarEeW9Rol94urt5fvjnX0-QLL4NJqQO3xyErhnW2HXClnEpYStIFrdHN-Nwyd5YFv7GA0fI8eG3tsLj0DZjwLVxSGM7fw7kouPVK69DezXGgTBIAdQzBQ4kda0QKq6NlqH5J0VmvU47ysMs21nedWjTUeK_6UJHpxhhO7biMMmLLE7mjVHK7OKJyrQt14JAmCoygHj65Mzj3fXtn3dpG4J90Pd0mLgaicB4F_T1FAE1dBYpDNJQhRb7V7tFcTRoi1Zu9gm7t17naWq9nvX2fTCe_9NwBw_94EMxmvH43t1LugYvPrH84tHLNqbHLCKQs7JyYDEaBsT3FMe0QtDGtlz1A9RrCCyUO2-RfqF3XtM4yY-iLa8C9ai9FFxX2JOB2TU0znUBHlnZfSAkqbF1wu6FqShh93-Y3bN58mUr3fU3X6eNa9UoFLdSYBBGA2mcXcMMKoVcH0Z8qNWxbBofMnh_iIJS4iXe6pe6e-lp3ovX5LvOWIfipcSNsfiSL95FDKgxuzEmnAjbUu1HGggbYyNBSk2olQE1ENjg89TJyJF_Dn3r_6OtoeRH2ZG7Jux-YK5HPhr1Bc5vCMGUP4Vvu4ETheJouUMrh4TyWDhpvkgHYOreXFQTlhk7Xf6goP86NgTfkbPI2z6px9ROO2uC4-OK6B8Co-uf7r4PaCup2g6-N5JlU2VyllK06Pv3H3_2bucQ6KpFhZzwtCP1v4-hD71irIvQSZVIo9z0a0kf2-BNEC7FIIVlrMjmbDFVShySM-0FTU8EHY5PxHomVrMVn-A6Xyyz5axYsHzSrOd8JnDJmCjmm6y4Khnf8NV8tVqWxWaZ43Ii11FZkS1yNmdZnorlrOQLPtuwxbzMV8vkKsOWS5WO92YiiTyGY_n8aqJ4iYridyJjMdosfDDadcxF6WtKrjIlydFRgJNOxU_L_tsqmd8m82_h7Px2_DyITsM__jV-GZ04DWGgxwCOWUrYauKtWr-_57V0jS_TyrRDZZwXSPQkdIDBme2a_S8AAP__ib-CTg">