diff options
author | Alan Modra <amodra@bigpond.net.au> | 2005-11-18 04:52:57 +0000 |
---|---|---|
committer | Alan Modra <amodra@bigpond.net.au> | 2005-11-18 04:52:57 +0000 |
commit | b7361bb7bd0021be3017f4eb5c3b609e212f048d (patch) | |
tree | 26a0eab7c39b7f3a6e2272bbb3d02e2078d65bc1 /bfd | |
parent | d12964030d0a610cc8ce29aceb37e8b013a2fd32 (diff) | |
download | gdb-b7361bb7bd0021be3017f4eb5c3b609e212f048d.tar.gz |
* 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 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: |