diff options
author | Alan Modra <amodra@gmail.com> | 2005-02-11 14:18:15 +0000 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2005-02-11 14:18:15 +0000 |
commit | 2917689a80eb96160c7d4d1788f050bdfdcae4f5 (patch) | |
tree | 01e0cd3875e7e3d2d8d4aafd8b3ef5dcbab8caa1 /bfd | |
parent | 16a48f83f6c37a7004c6586951df9522ada96400 (diff) | |
download | gdb-2917689a80eb96160c7d4d1788f050bdfdcae4f5.zip gdb-2917689a80eb96160c7d4d1788f050bdfdcae4f5.tar.gz gdb-2917689a80eb96160c7d4d1788f050bdfdcae4f5.tar.bz2 |
* 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.
Diffstat (limited to 'bfd')
-rw-r--r-- | bfd/ChangeLog | 6 | ||||
-rw-r--r-- | bfd/elf64-ppc.c | 25 |
2 files changed, 25 insertions, 6 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index f73afa1..4b5600c 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -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.. diff --git a/bfd/elf64-ppc.c b/bfd/elf64-ppc.c index 4162d55..86419b9 100644 --- a/bfd/elf64-ppc.c +++ b/bfd/elf64-ppc.c @@ -8361,13 +8361,27 @@ toc_adjusting_stub_needed (struct bfd_link_info *info, asection *isec) break; } - /* Ignore branches to undefined syms. */ + /* Calls to dynamic lib functions go through a plt call stub + 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) - continue; + { + 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; + } - /* 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. */ + /* 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; |