2003-11-15 Andrew Cagney <cagney@redhat.com>
authorAndrew Cagney <cagney@redhat.com>
Sun, 16 Nov 2003 04:57:25 +0000 (04:57 +0000)
committerAndrew Cagney <cagney@redhat.com>
Sun, 16 Nov 2003 04:57:25 +0000 (04:57 +0000)
* mips-tdep.c (mips_register_type): Simplify.  Eliminate reference
to MIPS_REGISTER_TYPE.  Make integer registers signed.  Make IRIX
n32 registers 64 bit.
(mips_register_raw_size, mips_register_byte): For pseudo
registers, use the register's pseudo size and not the
corresponding raw register's size.
* config/mips/tm-mips64.h (MIPS_REGISTER_TYPE): Delete macro.
* config/mips/tm-mips.h (MIPS_REGISTER_TYPE): Delete macro.
* config/mips/tm-irix6.h: Don't #undef MIPS_REGISTER_TYPE.
* config/mips/tm-irix5.h (MIPS_REGISTER_TYPE): Delete macro.

gdb/ChangeLog
gdb/config/mips/tm-irix5.h
gdb/config/mips/tm-irix6.h
gdb/config/mips/tm-mips.h
gdb/config/mips/tm-mips64.h
gdb/mips-tdep.c

index f84f9f860e222169ae6138f596945cbea97e26f9..08df945ff5e863c44e3718a8b94af1f77c066444 100644 (file)
@@ -1,3 +1,16 @@
+2003-11-15  Andrew Cagney  <cagney@redhat.com>
+
+       * mips-tdep.c (mips_register_type): Simplify.  Eliminate reference
+       to MIPS_REGISTER_TYPE.  Make integer registers signed.  Make IRIX
+       n32 registers 64 bit.
+       (mips_register_raw_size, mips_register_byte): For pseudo
+       registers, use the register's pseudo size and not the
+       corresponding raw register's size.
+       * config/mips/tm-mips64.h (MIPS_REGISTER_TYPE): Delete macro.
+       * config/mips/tm-mips.h (MIPS_REGISTER_TYPE): Delete macro.
+       * config/mips/tm-irix6.h: Don't #undef MIPS_REGISTER_TYPE.
+       * config/mips/tm-irix5.h (MIPS_REGISTER_TYPE): Delete macro.
+
 2003-11-15  Andrew Cagney  <cagney@redhat.com>
 
        * mips-tdep.c (struct gdbarch_tdep): Delete member
index d7e1938aa00dff83284e1481fbae72cee9da2cf4..da440b63e2465b7dcaa826e351fdbc40353d2a15 100644 (file)
       ((N) - FP0_REGNUM) * sizeof(double) : \
       32 * sizeof(double) + ((N) - 32) * mips_regsize (current_gdbarch))
 
-#undef  MIPS_REGISTER_TYPE
-#define MIPS_REGISTER_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_int)
-
 #endif /* N32 */
 
 
index 4d63001c2b1571627467ad3c3e5c6a0dcdc56822..385923cb64e332d4c73628c09af947347d0b7db7 100644 (file)
 #undef SIGFRAME_FPREGSAVE_OFF
 #define SIGFRAME_FPREGSAVE_OFF (SIGFRAME_BASE + 2 * 4 + 8 + 32 * 8 + 4)
 #define SIGFRAME_REG_SIZE      8
-
-/* Undefine those methods which have been multiarched.  */
-
-/* Undefine MIPS_REGISTER_TYPE, so that GDB uses real C code in
-   mips_register_type() to return the register type, instead of
-   relying on this macro.  */
-#undef MIPS_REGISTER_TYPE
index 35aa8888774cc3838d4c98b2acbb6c11a2f4f0f3..1da59fbfbf868ef803aaec3dd68c968bc5b58e56 100644 (file)
@@ -94,17 +94,6 @@ extern int mips_step_skips_delay (CORE_ADDR);
 
 #define MIPS_REGISTER_BYTE(N) ((N) * mips_regsize (current_gdbarch))
 
-/* Return the GDB type object for the "standard" data type of data in
-   register N.  */
-
-#ifndef MIPS_REGISTER_TYPE
-#define MIPS_REGISTER_TYPE(N) \
-       (((N) >= FP0_REGNUM && (N) < FP0_REGNUM+32) ? builtin_type_float \
-        : ((N) == 32 /*SR*/) ? builtin_type_uint32 \
-        : ((N) >= 70 && (N) <= 89) ? builtin_type_uint32 \
-        : builtin_type_int)
-#endif
-
 /* Special symbol found in blocks associated with routines.  We can hang
    mips_extra_func_info_t's off of this.  */
 
index bce76cfb6fbce9e6cc6386d858684ae80d3ea590..502a27b546d3033c4128ef960f8001a81dd074a3 100644 (file)
    Foundation, Inc., 59 Temple Place - Suite 330,
    Boston, MA 02111-1307, USA.  */
 
-/* define 8 byte register type */
-#define MIPS_REGISTER_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)
-
 /* Load double words in CALL_DUMMY.  */
 #define OP_LDFPR 065           /* ldc1 */
 #define OP_LDGPR 067           /* ld */
index 9342c409d3a2cb099d058f6f41cb9946e4b1b6b7..962e821f997e31e113308ee9bddd28c18d79acde 100644 (file)
@@ -649,9 +649,8 @@ mips_register_raw_size (int regnum)
   else if (regnum < 2 * NUM_REGS)
     {
       /* For the moment map [NUM_REGS .. 2*NUM_REGS) onto the same raw
-        registers, but always return the virtual size.  */
-      int rawnum = regnum % NUM_REGS;
-      return TYPE_LENGTH (gdbarch_register_type (current_gdbarch, rawnum));
+        registers, but return the register's virtual size.  */
+      return TYPE_LENGTH (gdbarch_register_type (current_gdbarch, regnum));
     }
   else
     internal_error (__FILE__, __LINE__, "Register %d out of range", regnum);
@@ -681,8 +680,7 @@ mips_register_byte (int regnum)
       /* Add space for all the proceeding registers based on their
          real size.  */
       for (reg = NUM_REGS; reg < regnum; reg++)
-       byte += TYPE_LENGTH (gdbarch_register_type (current_gdbarch,
-                                                    (reg % NUM_REGS)));
+       byte += TYPE_LENGTH (gdbarch_register_type (current_gdbarch, reg));
       return byte;
     }
   else
@@ -762,35 +760,40 @@ mips_value_to_register (struct frame_info *frame, int regnum,
 static struct type *
 mips_register_type (struct gdbarch *gdbarch, int regnum)
 {
-  /* For moment, map [NUM_REGS .. 2*NUM_REGS) onto the same raw
-     registers.  Even return the same type.  */
-  int rawnum = regnum % NUM_REGS;
-  gdb_assert (rawnum >= 0 && rawnum < NUM_REGS);
-#ifdef MIPS_REGISTER_TYPE
-  return MIPS_REGISTER_TYPE (rawnum);
-#else
-  if (FP0_REGNUM <= rawnum && rawnum < FP0_REGNUM + 32)
+  gdb_assert (regnum >= 0 && regnum < 2 * NUM_REGS);
+  if ((regnum % NUM_REGS) >= FP0_REGNUM
+      && (regnum % NUM_REGS) < FP0_REGNUM + 32)
     {
-      /* Floating point registers...  */
-      if (TARGET_BYTE_ORDER == BFD_ENDIAN_BIG)
-       return builtin_type_ieee_double_big;
-      else
-       return builtin_type_ieee_double_little;
+      /* The floating-point registers raw, or cooked, always match
+         mips_regsize(), and also map 1:1, byte for byte.  */
+      switch (gdbarch_byte_order (gdbarch))
+       {
+       case BFD_ENDIAN_BIG:
+         if (mips_regsize (gdbarch) == 4)
+           return builtin_type_ieee_single_big;
+         else
+           return builtin_type_ieee_double_big;
+       case BFD_ENDIAN_LITTLE:
+         if (mips_regsize (gdbarch) == 4)
+           return builtin_type_ieee_single_little;
+         else
+           return builtin_type_ieee_double_little;
+       case BFD_ENDIAN_UNKNOWN:
+       default:
+         internal_error (__FILE__, __LINE__, "bad switch");
+       }
     }
-  else if (rawnum == PS_REGNUM /* CR */)
-    return builtin_type_uint32;
-  else if (FCRCS_REGNUM <= rawnum && rawnum <= LAST_EMBED_REGNUM)
-    return builtin_type_uint32;
+  else if (regnum >= (NUM_REGS + FCRCS_REGNUM)
+          && regnum <= NUM_REGS + LAST_EMBED_REGNUM)
+    /* The pseudo/cooked view of the embedded registers is always
+       32-bit.  The raw view is handled below.  */
+    return builtin_type_int32;
+  else if (mips_regsize (gdbarch) == 8)
+    /* 64-bit ISA.  */
+    return builtin_type_int64;
   else
-    {
-      /* Everything else...
-         Return type appropriate for width of register.  */
-      if (mips_regsize (current_gdbarch) == TYPE_LENGTH (builtin_type_uint64))
-       return builtin_type_uint64;
-      else
-       return builtin_type_uint32;
-    }
-#endif
+    /* 32-bit ISA.  */
+    return builtin_type_int32;
 }
 
 /* TARGET_READ_SP -- Remove useless bits from the stack pointer.  */