[PATCH] i386: Issue an error for baseless @GOT relocation with relaxation
Jan Beulich
jbeulich@suse.com
Mon Oct 27 09:52:41 GMT 2025
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
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
there. The description in the psABI also clearly mentions forms with and
without base register.
Jan
More information about the Binutils
mailing list