* cpu-powerpc.c: Comment on ordering of arch_info.
[deliverable/binutils-gdb.git] / bfd / elf64-ppc.c
index 9d798efc083229baaf377e868f0b1f9b3805bb98..ac52ae1375fbaf6f3f8817303bb0eda8a88e67e3 100644 (file)
@@ -57,6 +57,8 @@ static bfd_reloc_status_type ppc64_elf_unhandled_reloc
   PARAMS ((bfd *, arelent *, asymbol *, PTR, asection *, bfd *, char **));
 static void ppc64_elf_get_symbol_info
   PARAMS ((bfd *, asymbol *, symbol_info *));
+static boolean ppc64_elf_object_p
+  PARAMS ((bfd *));
 static boolean ppc64_elf_set_private_flags
   PARAMS ((bfd *, flagword));
 static boolean ppc64_elf_merge_private_bfd_data
@@ -1649,6 +1651,27 @@ ppc64_elf_get_symbol_info (abfd, symbol, ret)
     ret->type = (symbol->flags & BSF_GLOBAL) != 0 ? 'D' : 'd';
 }
 
+/* Fix bad default arch selected for a 64 bit input bfd when the
+   default is 32 bit.  */
+
+static boolean
+ppc64_elf_object_p (abfd)
+     bfd *abfd;
+{
+  if (abfd->arch_info->the_default && abfd->arch_info->bits_per_word == 32)
+    {
+      Elf_Internal_Ehdr *i_ehdr = elf_elfheader (abfd);
+
+      if (i_ehdr->e_ident[EI_CLASS] == ELFCLASS64)
+       {
+         /* Relies on arch after 32 bit default being 64 bit default.  */
+         abfd->arch_info = abfd->arch_info->next;
+         BFD_ASSERT (abfd->arch_info->bits_per_word == 64);
+       }
+    }
+  return true;
+}
+
 /* Function to set whether a module needs the -mrelocatable bit set.  */
 
 static boolean
@@ -6140,6 +6163,7 @@ ppc64_elf_finish_dynamic_sections (output_bfd, info)
 #define bfd_elf64_bfd_link_hash_table_free    ppc64_elf_link_hash_table_free
 #define bfd_elf64_get_symbol_info            ppc64_elf_get_symbol_info
 
+#define elf_backend_object_p                 ppc64_elf_object_p
 #define elf_backend_section_from_shdr        ppc64_elf_section_from_shdr
 #define elf_backend_create_dynamic_sections   ppc64_elf_create_dynamic_sections
 #define elf_backend_copy_indirect_symbol      ppc64_elf_copy_indirect_symbol
This page took 0.028721 seconds and 4 git commands to generate.