[PATCH] i386: Allow GOT32 relocations against ABS symbols

H.J. Lu hjl.tools@gmail.com
Tue Feb 8 13:20:35 GMT 2022


On Tue, Feb 8, 2022 at 5:11 AM Jan Beulich <jbeulich@suse.com> wrote:
>
> On 08.02.2022 14:02, H.J. Lu wrote:
> > On Tue, Feb 8, 2022 at 12:37 AM Jan Beulich <jbeulich@suse.com> wrote:
> >>
> >> On 08.02.2022 01:03, H.J. Lu via Binutils wrote:
> >>> GOT32 relocations are allowed since absolute value + addend is stored in
> >>> the GOT slot.
> >>
> >> Before permitting this and with you specifically mentioning addends
> >> here, I think it needs to be clarified what ...
> >>
> >>> --- /dev/null
> >>> +++ b/ld/testsuite/ld-i386/pr28870.s
> >>> @@ -0,0 +1,6 @@
> >>> +     .text
> >>> +     .globl _start
> >>> +_start:
> >>> +     addl    foo@GOT(%ebx), %eax
> >>> +     cmpl    $0, foo@GOT(%ebx)
> >>> +foo = 2
> >>
> >> ... missing (here) variants thereof actually mean (and whether the use
> >> of addends actually works as intended):
> >>
> >>         mov     $v@got+3, %eax                          # bogus, meaningless operand
> >>         mov     $(v+3)@got, %eax                        # wrong (gets treated same as above)
> >>
> >> Comments are my own, preliminary judgement.
> >
> > GOT relocations should only be used as @got or @got(%reg).
> > Other variants are undefined.
>
> Which raises two questions:
>
> 1) Why did you say "absolute value + addend is stored in the GOT slot" in
> the description? Where would an addend come from if it can't be specified
> in the assembly source?

addend came from GOTPCREL relocation.   There is no addend for
GOT32.

> 2) Why isn't the assembler at least warning about such undefined uses?

A warning is useful.

-- 
H.J.


More information about the Binutils mailing list