diff options
Diffstat (limited to 'gdb')
-rw-r--r-- | gdb/ChangeLog | 11 | ||||
-rw-r--r-- | gdb/config/mips/tm-irix6.h | 16 | ||||
-rw-r--r-- | gdb/mips-tdep.c | 32 |
3 files changed, 47 insertions, 12 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 236e969a1af..14c000dde2c 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,14 @@ +2002-08-01 Kevin Buettner <kevinb@redhat.com> + + * mips-tdep.c (mips_register_virtual_type): New function. + (mips_gdbarch_init): Register mips_register_virtual_type() + with gdbarch machinery. + * config/mips/tm-irix6.h (mips/tm-bigmips64.h): Include + this file instead of tm-bigmips.h. + (MIPS_REGSIZE): Delete this macro. + (REGISTER_VIRTUAL_TYPE): Delete macro. Undef macro so that + multiarch version in mips-tdep.c will be found. + 2002-08-01 Andrew Cagney <cagney@redhat.com> * NEWS: Menion that CHILL has been made obsolete. diff --git a/gdb/config/mips/tm-irix6.h b/gdb/config/mips/tm-irix6.h index 1d2ed392bbb..1230a9bd96a 100644 --- a/gdb/config/mips/tm-irix6.h +++ b/gdb/config/mips/tm-irix6.h @@ -19,10 +19,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#include "mips/tm-bigmips.h" - -#undef MIPS_REGSIZE -#define MIPS_REGSIZE 8 +#include "mips/tm-bigmips64.h" /* SGI's assembler doesn't grok dollar signs in identifiers. So we use dots instead. This item must be coordinated with G++. */ @@ -91,14 +88,6 @@ ((N) - FP0_REGNUM) * sizeof(double) : \ 32 * sizeof(double) + ((N) - 32) * MIPS_REGSIZE) -#undef REGISTER_VIRTUAL_TYPE -/* define 8 byte register type */ -#define REGISTER_VIRTUAL_TYPE(N) \ - (((N) >= FP0_REGNUM && (N) < FP0_REGNUM+32) ? builtin_type_double \ - : ((N) == 32 /*SR*/) ? builtin_type_uint32 \ - : ((N) >= 70 && (N) <= 89) ? builtin_type_uint32 \ - : builtin_type_long_long) - /* Force N32 ABI as the default. */ #define MIPS_DEFAULT_ABI MIPS_ABI_N32 @@ -129,3 +118,6 @@ /* Select the disassembler */ #undef TM_PRINT_INSN_MACH #define TM_PRINT_INSN_MACH bfd_mach_mips8000 + +/* Undefine those methods which have been multiarched. */ +#undef REGISTER_VIRTUAL_TYPE diff --git a/gdb/mips-tdep.c b/gdb/mips-tdep.c index ff00aa7167e..d3c97460302 100644 --- a/gdb/mips-tdep.c +++ b/gdb/mips-tdep.c @@ -483,6 +483,36 @@ mips_register_convert_to_raw (struct type *virtual_type, int n, TYPE_LENGTH (virtual_type)); } +/* Return the GDB type object for the "standard" data type + of data in register REG. + + Note: kevinb/2002-08-01: The definition below should faithfully + reproduce the behavior of each of the REGISTER_VIRTUAL_TYPE + definitions found in config/mips/tm-*.h. I'm concerned about + the ``FCRCS_REGNUM <= reg && reg <= LAST_EMBED_REGNUM'' clause + though. In some cases FP_REGNUM is in this range, and I doubt + that this code is correct for the 64-bit case. */ + +static struct type * +mips_register_virtual_type (int reg) +{ + if (FP0_REGNUM <= reg && reg < FP0_REGNUM + 32) + return builtin_type_double; + else if (reg == PS_REGNUM /* CR */) + return builtin_type_uint32; + else if (FCRCS_REGNUM <= reg && reg <= LAST_EMBED_REGNUM) + return builtin_type_uint32; + else + { + /* Everything else... return ``long long'' when registers + are 64-bits wide, ``int'' otherwise. */ + if (MIPS_REGSIZE == TYPE_LENGTH (builtin_type_long_long)) + return builtin_type_long_long; + else + return builtin_type_int; + } +} + /* Should the upper word of 64-bit addresses be zeroed? */ enum auto_boolean mask_address_var = AUTO_BOOLEAN_AUTO; @@ -4635,6 +4665,8 @@ mips_gdbarch_init (struct gdbarch_info info, set_gdbarch_address_to_pointer (gdbarch, address_to_signed_pointer); set_gdbarch_integer_to_address (gdbarch, mips_integer_to_address); + set_gdbarch_register_virtual_type (gdbarch, mips_register_virtual_type); + /* Hook in OS ABI-specific overrides, if they have been registered. */ gdbarch_init_osabi (info, gdbarch, osabi); |