From 609ca2b95777ae176d12721010225ad7aad86321 Mon Sep 17 00:00:00 2001 From: Daniel Jacobowitz Date: Wed, 22 Aug 2007 15:16:56 +0000 Subject: * mips-tdep.c (mips_gdbarch_init): Use Tag_GNU_MIPS_ABI_FP to determine the file's FPU type. --- gdb/ChangeLog | 5 +++++ gdb/mips-tdep.c | 25 +++++++++++++++++++++++++ 2 files changed, 30 insertions(+) (limited to 'gdb') diff --git a/gdb/ChangeLog b/gdb/ChangeLog index cde1d09..f1edff4 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,10 @@ 2007-08-22 Daniel Jacobowitz + * mips-tdep.c (mips_gdbarch_init): Use Tag_GNU_MIPS_ABI_FP to + determine the file's FPU type. + +2007-08-22 Daniel Jacobowitz + * mips-tdep.c (mips_n32n64_fp_arg_chunk_p): New. (mips_n32n64_push_dummy_call): Always increment float_argreg along with argreg. Use mips_n32n64_fp_arg_chunk_p. diff --git a/gdb/mips-tdep.c b/gdb/mips-tdep.c index 68621e1..654ef13 100644 --- a/gdb/mips-tdep.c +++ b/gdb/mips-tdep.c @@ -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) -- cgit v1.1