diff options
author | Alan Modra <amodra@gmail.com> | 2005-11-18 04:52:57 +0000 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2005-11-18 04:52:57 +0000 |
commit | 220c76ddc0eee77b4165d778be9f6be0d5398d9f (patch) | |
tree | f6a4f1075d64206d7672eab52f81bd6afeeb1ec3 /bfd | |
parent | 33ec65816e2f0dad27d9c02ed3e7384d22b314fc (diff) | |
download | fsf-binutils-gdb-220c76ddc0eee77b4165d778be9f6be0d5398d9f.zip fsf-binutils-gdb-220c76ddc0eee77b4165d778be9f6be0d5398d9f.tar.gz fsf-binutils-gdb-220c76ddc0eee77b4165d778be9f6be0d5398d9f.tar.bz2 |
* elf64-ppc.c (ppc64_elf_check_relocs): Don't set has_14bit_branch
on branches to same section.
Diffstat (limited to 'bfd')
-rw-r--r-- | bfd/ChangeLog | 5 | ||||
-rw-r--r-- | bfd/elf64-ppc.c | 19 |
2 files changed, 23 insertions, 1 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index c4519f2..49da6eb 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,8 @@ +2005-11-18 Alan Modra <amodra@bigpond.net.au> + + * elf64-ppc.c (ppc64_elf_check_relocs): Don't set has_14bit_branch + on branches to same section. + 2005-11-17 Randolph Chung <tausq@debian.org> * elf64-hppa.c (elf64_hppa_object_p): Recognize corefiles under diff --git a/bfd/elf64-ppc.c b/bfd/elf64-ppc.c index d15c772..65b9c21 100644 --- a/bfd/elf64-ppc.c +++ b/bfd/elf64-ppc.c @@ -4507,7 +4507,24 @@ ppc64_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, case R_PPC64_REL14: case R_PPC64_REL14_BRTAKEN: case R_PPC64_REL14_BRNTAKEN: - htab->has_14bit_branch = 1; + { + asection *dest = NULL; + + /* Heuristic: If jumping outside our section, chances are + we are going to need a stub. */ + if (h != NULL) + { + /* If the sym is weak it may be overridden later, so + don't assume we know where a weak sym lives. */ + if (h->root.type == bfd_link_hash_defined) + dest = h->root.u.def.section; + } + else + dest = bfd_section_from_r_symndx (abfd, &htab->sym_sec, + sec, r_symndx); + if (dest != sec) + htab->has_14bit_branch = 1; + } /* Fall through. */ case R_PPC64_REL24: |