PR16794, gold ignores R_386_GOTOFF addend

Alan Modra amodra@gmail.com
Fri Sep 27 06:52:00 GMT 2019


On Thu, Sep 26, 2019 at 09:09:26AM -0700, H.J. Lu wrote:
> On Wed, Sep 25, 2019 at 10:23 PM Alan Modra <amodra@gmail.com> wrote:
> >
> > An R_386_GOTOFF relocation has an addend, typically used when a
> > symbol can be replaced by its section symbol plus an offset.
> > psymval->value(object,0) is quite wrong then, fix it.  The same goes
> > for R_X86_64_GOTOFF64.
> >
> > Note that R_X86_64_GOTOFF64 isn't easy to generate from gcc, and may
> > in fact be impossible nowadays.  Also, x86 gas won't reduce symbols to
> > section symbols on R_386_GOTOFF and R_X86_64_GOTOFF64.  I suspect that
> > isn't necessary, but I'm leaving that to HJ to investigate.  (Keeping
> > the original symbol is necessary for most GOT relocs in order to
> > generate the proper GOT entry because the ABI says to put the symbol
> > in the GOT entry, not symbol plus addend.  The addend becomes a
> > useless offset from the GOT entry.  But anyway, these two relocs don't
> > generate a GOT entry.)
> >
> 
> I got
> 
> [hjl@gnu-cfl-1 tmp]$ cat y.s
> .text
> .globl foo
> .type foo, @function
> foo:
> leal 2+bar@GOTOFF(%eax), %eax
> .size foo, .-foo
> .data
> .align 4
> .type bar, @object
> .size bar, 10
> bar:
> .string "\001"
> .zero 8
> [hjl@gnu-cfl-1 tmp]$ gcc -c -m32 y.s
> [hjl@gnu-cfl-1 tmp]$ readelf -r y.o
> 
> Relocation section '.rel.text' at offset 0x110 contains 1 entry:
>  Offset     Info    Type            Sym.Value  Sym. Name
> 00000002  00000209 R_386_GOTOFF      00000000   .data
> [hjl@gnu-cfl-1 tmp]$
> 
> GOTOFF relocation against the local symbol is reduced to
> section.

Huh, so it is.  Anyway, do you agree that the gold patches are correct?

This case isn't reduced to a section symbol:
 .text
 .globl foo
 .type foo, @function
foo:
 leal 2+bar@GOTOFF(%eax), %eax
 .size foo, .-foo
 .section .rodata.str.1,"ams",1
 .type bar, @object
 .size bar, 4
bar:
 .string "abc"

Nor this:
 .text
 .global _start
_start:
 nop
 nop
.L1:
 nop
 nop
 nop
 nop
.L2:
 nop
 nop
 nop
 nop
 nop
 nop
 nop
 nop
.L3:
 nop
.L4:
 .data
 .dc.a .L1@gotoff
 .dc.a .L2@gotoff
 .dc.a .L3@gotoff
 .dc.a .L4@gotoff

-- 
Alan Modra
Australia Development Lab, IBM



More information about the Binutils mailing list