summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlan Modra <amodra@bigpond.net.au>2005-11-18 04:52:57 +0000
committerAlan Modra <amodra@bigpond.net.au>2005-11-18 04:52:57 +0000
commitb7361bb7bd0021be3017f4eb5c3b609e212f048d (patch)
tree26a0eab7c39b7f3a6e2272bbb3d02e2078d65bc1
parentd12964030d0a610cc8ce29aceb37e8b013a2fd32 (diff)
downloadgdb-b7361bb7bd0021be3017f4eb5c3b609e212f048d.tar.gz
* elf64-ppc.c (ppc64_elf_check_relocs): Don't set has_14bit_branch
on branches to same section.
-rw-r--r--bfd/ChangeLog5
-rw-r--r--bfd/elf64-ppc.c19
2 files changed, 23 insertions, 1 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index c4519f25294..49da6ebb239 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 d15c77230d7..65b9c2162b1 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: