[PATCH] Re: Don't relax undefined symbols on ppc.
Alan Modra
amodra@gmail.com
Tue Jul 24 02:55:00 GMT 2018
On Mon, Jul 23, 2018 at 07:38:44AM -0700, Douglas B Rupp wrote:
>
>
> On 07/09/2018 06:27 PM, Alan Modra wrote:
> > On Mon, Jul 09, 2018 at 01:58:33PM -0700, Douglas B Rupp wrote:
> > > There is a problem with --relax in the partial link trying to relax the
> > > undefined symbols, leading to the RTP failing at startup with signal 11.
> >
> > Please describe the problem in detail. ld -r --relax non-pic is
> > supposed to work for ppc32, with a branch to an undefined symbol being
> > resolved to a trampoline which has relocations to the symbol. Are the
> > emitted relocations wrong?
> >
> > > I solicit comments on the attached patch, which causes undefined symbols to
> > > be ignored during the relax process. Leaving them to be relaxed and
> > > resolved during the final link.
> >
> > If ld -r mashes together sections such that the resulting output
> > section size exceeds the reach of a branch, then it may not be
> > possible to for branches to reach trampolines placed at the end of the
> > section. That's the problem ld -r --relax is trying to solve, by
> > placing trampolines at the end of each input section.
> >
>
> The problem is that "tsec" is the undefined section and basically a no-op in
> the following line, so existing trampolines are found when they shouldn't be
> found.
>
> elf32-ppc.c: if (f->tsec == tsec && f->toff == toff)
But for undefined syms and relocatable linking, toff is the symbol
index. Or at least it is supposed to be. I do see a bug where the
reloc addend could be added to toff, but that is unlikely to trigger.
>
> The attached patch fixes it.
I don't see how adding "abfd" to the branch fixup struct can possibly
help. "abfd" is a constant for any one invocation of
ppc_elf_relax_section!
--
Alan Modra
Australia Development Lab, IBM
More information about the Binutils
mailing list