[PATCH] i386: Issue an error for baseless @GOT relocation with relaxation

H.J. Lu hjl.tools@gmail.com
Mon Oct 27 10:09:07 GMT 2025


On Mon, Oct 27, 2025 at 5:52 PM Jan Beulich <jbeulich@suse.com> wrote:
>
> On 27.10.2025 10:31, H.J. Lu wrote:
> > On Mon, Oct 27, 2025 at 4:41 PM Jan Beulich <jbeulich@suse.com> wrote:
> >>
> >> On 26.10.2025 00:28, H.J. Lu wrote:
> >>> When -mrelax-relocations=no is used, don't generate baseless R_386_GOT32X
> >>> relocation.  Issue an error instead.
> >>>
> >>> PR gas/33552
> >>> * config/tc-i386.c (output_disp): Issue an error for baseless @GOT
> >>> relocation without relaxation in 32-bit.
> >>> * testsuite/gas/i386/got-no-relax-error.l: New file.
> >>> * testsuite/gas/i386/got-no-relax-error.s: Likewise.
> >>> * testsuite/gas/i386/got-no-relax.d: Don't use got.s.  Remove
> >>> R_386_GOT32X entries.
> >>> * testsuite/gas/i386/i386.exp: Run got-no-relax-error.
> >>>
> >>
> >> Please can you add a reference to the part of the spec that puts in place
> >> this restriction?
> >
> > It is more of an ISA restriction.  In i386 psABI, there are 2 kinds of PLTs,
> > one with EBX for PIC and the other without EBX for non-PIC.  The baseless
> > @GOT reloc can only be used with non-PIC PLT.
>
> But the two PLT kinds must be specified somewhere. As must be the relocation

It is in i386 psABI.   They are implemented in elf32-i386.c.

> types. Furthermore, how does the PLT come into play here when we're talking
> of a GOT reloc? R_386-GOT32X is G + A - GOT / G + A, i.e. nothing PLT-ish in

jmp *foo@GOT

was added for -fno-plt.  For the same reason as non-PIC PLT, it only works
without PIC.

> there. The description in the psABI also clearly mentions forms with and
> without base register.
>

It is covered in:

https://gitlab.com/x86-psABIs/i386-ABI

-- 
H.J.


More information about the Binutils mailing list