[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