diff options
author | Alan Modra <amodra@gmail.com> | 2004-09-06 12:37:12 +0000 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2004-09-06 12:37:12 +0000 |
commit | 7b53ace3e99c019e1372b4fcf8c152902c9c85e6 (patch) | |
tree | 2e7a12485ee9068caf6854313a69f03e040470e6 /bfd/elf64-ppc.c | |
parent | 9cbe82da8b4ee2ff487e75995389a431eba5fc05 (diff) | |
download | gdb-7b53ace3e99c019e1372b4fcf8c152902c9c85e6.zip gdb-7b53ace3e99c019e1372b4fcf8c152902c9c85e6.tar.gz gdb-7b53ace3e99c019e1372b4fcf8c152902c9c85e6.tar.bz2 |
* elf64-ppc.c (is_ppc64_target): New function, extracted from..
(ppc64_elf_check_directives): ..here.
(ppc64_elf_size_dynamic_sections): Use it here to check bfd type
before accessing ppc64_elf_tdata.
(ppc64_elf_finish_dynamic_sections): And here too.
Diffstat (limited to 'bfd/elf64-ppc.c')
-rw-r--r-- | bfd/elf64-ppc.c | 26 |
1 files changed, 20 insertions, 6 deletions
diff --git a/bfd/elf64-ppc.c b/bfd/elf64-ppc.c index 77082ef..8654605 100644 --- a/bfd/elf64-ppc.c +++ b/bfd/elf64-ppc.c @@ -2400,6 +2400,15 @@ ppc64_elf_mkobject (bfd *abfd) return TRUE; } +static bfd_boolean +is_ppc64_target (const struct bfd_target *targ) +{ + extern const bfd_target bfd_elf64_powerpc_vec; + extern const bfd_target bfd_elf64_powerpcle_vec; + + return targ == &bfd_elf64_powerpc_vec || targ == &bfd_elf64_powerpcle_vec; +} + /* Fix bad default arch selected for a 64 bit input bfd when the default is 32 bit. */ @@ -4027,12 +4036,9 @@ ppc64_elf_check_directives (bfd *abfd ATTRIBUTE_UNUSED, struct bfd_link_info *info) { struct ppc_link_hash_table *htab; - extern const bfd_target bfd_elf64_powerpc_vec; - extern const bfd_target bfd_elf64_powerpcle_vec; htab = ppc_hash_table (info); - if (htab->elf.root.creator != &bfd_elf64_powerpc_vec - && htab->elf.root.creator != &bfd_elf64_powerpcle_vec) + if (!is_ppc64_target (htab->elf.root.creator)) return TRUE; elf_link_hash_traverse (&htab->elf, add_symbol_adjust, info); @@ -6892,7 +6898,7 @@ ppc64_elf_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, Elf_Internal_Shdr *symtab_hdr; asection *srel; - if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour) + if (!is_ppc64_target (ibfd->xvec)) continue; if (ppc64_tlsld_got (ibfd)->refcount > 0) @@ -7062,6 +7068,9 @@ ppc64_elf_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link_next) { + if (!is_ppc64_target (ibfd->xvec)) + continue; + s = ppc64_elf_tdata (ibfd)->got; if (s != NULL && s != htab->got) { @@ -10101,10 +10110,15 @@ ppc64_elf_finish_dynamic_sections (bfd *output_bfd, } /* We need to handle writing out multiple GOT sections ourselves, - since we didn't add them to DYNOBJ. */ + since we didn't add them to DYNOBJ. We know dynobj is the first + bfd. */ while ((dynobj = dynobj->link_next) != NULL) { asection *s; + + if (!is_ppc64_target (dynobj->xvec)) + continue; + s = ppc64_elf_tdata (dynobj)->got; if (s != NULL && s->size != 0 |