* mips-tdep.c (mips_gdbarch_init): Use Tag_GNU_MIPS_ABI_FP to
authorDaniel Jacobowitz <drow@false.org>
Wed, 22 Aug 2007 15:16:56 +0000 (15:16 +0000)
committerDaniel Jacobowitz <drow@false.org>
Wed, 22 Aug 2007 15:16:56 +0000 (15:16 +0000)
determine the file's FPU type.

gdb/ChangeLog
gdb/mips-tdep.c

index cde1d095db8e3598719e7a96a492b4d9f607af12..f1edff4aaeecaf2ac8b29a4edcc0e7f87b437a1c 100644 (file)
@@ -1,3 +1,8 @@
+2007-08-22  Daniel Jacobowitz  <dan@codesourcery.com>
+
+       * mips-tdep.c (mips_gdbarch_init): Use Tag_GNU_MIPS_ABI_FP to
+       determine the file's FPU type.
+
 2007-08-22  Daniel Jacobowitz  <dan@codesourcery.com>
 
        * mips-tdep.c (mips_n32n64_fp_arg_chunk_p): New.
index 68621e1c40b97834152abe2144723fd09077a8d7..654ef13abc3ec87a29a0837bb0afbc5c492a7fcf 100644 (file)
@@ -4913,6 +4913,7 @@ mips_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
   int i, num_regs;
   enum mips_fpu_type fpu_type;
   struct tdesc_arch_data *tdesc_data = NULL;
+  int elf_fpu_type = 0;
 
   /* Check any target description for validity.  */
   if (tdesc_has_registers (info.target_desc))
@@ -5120,8 +5121,32 @@ mips_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
                        mips64_transfers_32bit_regs_p);
 
   /* Determine the MIPS FPU type.  */
+#ifdef HAVE_ELF
+  if (info.abfd
+      && bfd_get_flavour (info.abfd) == bfd_target_elf_flavour)
+    elf_fpu_type = bfd_elf_get_obj_attr_int (info.abfd, OBJ_ATTR_GNU,
+                                            Tag_GNU_MIPS_ABI_FP);
+#endif /* HAVE_ELF */
+
   if (!mips_fpu_type_auto)
     fpu_type = mips_fpu_type;
+  else if (elf_fpu_type != 0)
+    {
+      switch (elf_fpu_type)
+       {
+       case 1:
+         fpu_type = MIPS_FPU_DOUBLE;
+         break;
+       case 2:
+         fpu_type = MIPS_FPU_SINGLE;
+         break;
+       case 3:
+       default:
+         /* Soft float or unknown.  */
+         fpu_type = MIPS_FPU_NONE;
+         break;
+       }
+    }
   else if (info.bfd_arch_info != NULL
           && info.bfd_arch_info->arch == bfd_arch_mips)
     switch (info.bfd_arch_info->mach)