mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-11-26 11:33:45 +08:00
Multiarch REGISTER_VIRTUAL_TYPE for Irix 6.
This commit is contained in:
parent
fd13ed0cdd
commit
78fde5f8a3
@ -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.
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user