* elf32-ppc.c (is_ppc_elf_target): New function.
authorAlan Modra <amodra@gmail.com>
Mon, 21 Mar 2005 11:22:24 +0000 (11:22 +0000)
committerAlan Modra <amodra@gmail.com>
Mon, 21 Mar 2005 11:22:24 +0000 (11:22 +0000)
(ppc_elf_merge_private_bfd_data): Use it rather than just testing
for bfd_target_elf_flavour.  Do this test before endian check.
(ppc_elf_add_symbol_hook): Use is_pcc_elf_target.
(ppc_elf_size_dynamic_sections): Likewise.

bfd/ChangeLog
bfd/elf32-ppc.c

index 5c966886c203f9a5c7e0ce95d74e5621c9991956..e462aa1da066e8d48e7074d900c49474cf98eb31 100644 (file)
@@ -1,3 +1,11 @@
+2005-03-21  Alan Modra  <amodra@bigpond.net.au>
+
+       * elf32-ppc.c (is_ppc_elf_target): New function.
+       (ppc_elf_merge_private_bfd_data): Use it rather than just testing
+       for bfd_target_elf_flavour.  Do this test before endian check.
+       (ppc_elf_add_symbol_hook): Use is_pcc_elf_target.
+       (ppc_elf_size_dynamic_sections): Likewise.
+
 2005-03-20  H.J. Lu  <hongjiu.lu@intel.com>
 
        * elf-bfd.h (elf_backend_data): Add int to
index 27eed3b166de7fc9d9bb3a195d81e8eb81571ed6..bc269d0559d5fb7fe7e5fae7fedb55feec4527ef 100644 (file)
@@ -1594,6 +1594,17 @@ ppc_elf_set_private_flags (bfd *abfd, flagword flags)
   return TRUE;
 }
 
+/* Return 1 if target is one of ours.  */
+
+static bfd_boolean
+is_ppc_elf_target (const struct bfd_target *targ)
+{
+  extern const bfd_target bfd_elf32_powerpc_vec;
+  extern const bfd_target bfd_elf32_powerpcle_vec;
+
+  return targ == &bfd_elf32_powerpc_vec || targ == &bfd_elf32_powerpcle_vec;
+}
+
 /* Merge backend specific data from an object file to the output
    object file when linking.  */
 
@@ -1604,14 +1615,14 @@ ppc_elf_merge_private_bfd_data (bfd *ibfd, bfd *obfd)
   flagword new_flags;
   bfd_boolean error;
 
+  if (!is_ppc_elf_target (ibfd->xvec)
+      || !is_ppc_elf_target (obfd->xvec))
+    return TRUE;
+
   /* Check if we have the same endianess.  */
   if (! _bfd_generic_verify_endian_match (ibfd, obfd))
     return FALSE;
 
-  if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
-      || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
-    return TRUE;
-
   new_flags = elf_elfheader (ibfd)->e_flags;
   old_flags = elf_elfheader (obfd)->e_flags;
   if (!elf_flags_init (obfd))
@@ -2444,8 +2455,7 @@ ppc_elf_add_symbol_hook (bfd *abfd,
   if (sym->st_shndx == SHN_COMMON
       && !info->relocatable
       && sym->st_size <= elf_gp_size (abfd)
-      && (info->hash->creator == abfd->xvec
-         || info->hash->creator == abfd->xvec->alternative_target))
+      && is_ppc_elf_target (info->hash->creator))
     {
       /* Common symbols less than or equal to -G nn bytes are automatically
         put into .sbss.  */
@@ -4047,7 +4057,7 @@ ppc_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_ppc_elf_target (ibfd->xvec))
        continue;
 
       for (s = ibfd->sections; s != NULL; s = s->next)