From 220c76ddc0eee77b4165d778be9f6be0d5398d9f Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Fri, 18 Nov 2005 04:52:57 +0000 Subject: [PATCH] * elf64-ppc.c (ppc64_elf_check_relocs): Don't set has_14bit_branch on branches to same section. --- bfd/ChangeLog | 5 +++++ bfd/elf64-ppc.c | 19 ++++++++++++++++++- 2 files changed, 23 insertions(+), 1 deletion(-) 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 + + * elf64-ppc.c (ppc64_elf_check_relocs): Don't set has_14bit_branch + on branches to same section. + 2005-11-17 Randolph Chung * 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: -- 2.7.4