This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] Re: Don't relax undefined symbols on ppc.




On 07/23/2018 07:01 PM, Alan Modra wrote:
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!


I don't know what to tell you, it does fix the problem.
I can take another look at it at some future date and try to provide more detail.
--Doug


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]