* elf64-ppc.c (toc_adjusting_stub_needed): Return true for

old-style branches to undefined dot-symbols which will be
	satisfied by a plt call.
This commit is contained in:
Alan Modra 2005-02-11 14:18:15 +00:00
parent 16a48f83f6
commit 2917689a80
2 changed files with 26 additions and 7 deletions

View file

@ -1,3 +1,9 @@
2005-02-12 Alan Modra <amodra@bigpond.net.au>
* elf64-ppc.c (toc_adjusting_stub_needed): Return true for
old-style branches to undefined dot-symbols which will be
satisfied by a plt call.
2005-02-11 Alan Modra <amodra@bigpond.net.au>
* elf64-ppc.c (move_plt_plist): New function, extracted from..

View file

@ -8361,13 +8361,27 @@ toc_adjusting_stub_needed (struct bfd_link_info *info, asection *isec)
break;
}
/* Ignore branches to undefined syms. */
if (sym_sec == NULL)
continue;
/* Calls to dynamic lib functions go through a plt call stub
that uses r2. Assume branches to other sections not included
in the link need stubs too, to cover -R and absolute syms. */
that uses r2. Branches to undefined symbols might be a call
using old-style dot symbols that can be satisfied by a plt
call into a new-style dynamic library. */
if (sym_sec == NULL)
{
struct ppc_link_hash_entry *eh = (struct ppc_link_hash_entry *) h;
if (eh != NULL
&& eh->oh != NULL
&& eh->oh->elf.plt.plist != NULL)
{
ret = 1;
break;
}
/* Ignore other undefined symbols. */
continue;
}
/* Assume branches to other sections not included in the link need
stubs too, to cover -R and absolute syms. */
if (sym_sec->output_section == NULL)
{
ret = 1;
@ -8389,7 +8403,6 @@ toc_adjusting_stub_needed (struct bfd_link_info *info, asection *isec)
opd_adjust = get_opd_info (sym_sec);
if (opd_adjust != NULL)
{
if (h == NULL)
{
long adjust;