Add PPC_MAX_REGISTER_SIZE
authorAlan Hayward <alan.hayward@arm.com>
Mon, 22 May 2017 08:23:22 +0000 (09:23 +0100)
committerAlan Hayward <alan.hayward@arm.com>
Mon, 22 May 2017 08:23:22 +0000 (09:23 +0100)
gdb/
* ppc-linux-nat.c (fetch_register): Use PPC_MAX_REGISTER_SIZE.
(store_register): Likewise.
* ppc-sysv-tdep.c (ppc_sysv_abi_push_dummy_call): Likewise.
(get_decimal_float_return_value): Likewise.
(do_ppc_sysv_return_value): Likewise.
(ppc64_sysv_abi_push_integer): Likewise.
(ppc64_sysv_abi_push_freg): Likewise.
(ppc64_sysv_abi_return_value_base): Likewise.
(ppc64_sysv_abi_return_value): Likewise.
* rs6000-aix-tdep.c (rs6000_push_dummy_call): Likewise.
* rs6000-lynx178-tdep.c (rs6000_lynx178_push_dummy_call): Likewise.
* rs6000-nat.c: Likewise.
* rs6000-tdep.c (rs6000_register_to_value): Likewise.
(rs6000_value_to_register): Likewise.
* ppc-tdep.h (PPC_MAX_REGISTER_SIZE): Add.

gdb/ChangeLog
gdb/ppc-linux-nat.c
gdb/ppc-sysv-tdep.c
gdb/ppc-tdep.h
gdb/rs6000-aix-tdep.c
gdb/rs6000-lynx178-tdep.c
gdb/rs6000-nat.c
gdb/rs6000-tdep.c

index c0fcb22..02ca2f8 100644 (file)
@@ -1,3 +1,21 @@
+2017-05-22  Alan Hayward  <alan.hayward@arm.com>
+
+       * ppc-linux-nat.c (fetch_register): Use PPC_MAX_REGISTER_SIZE.
+       (store_register): Likewise.
+       * ppc-sysv-tdep.c (ppc_sysv_abi_push_dummy_call): Likewise.
+       (get_decimal_float_return_value): Likewise.
+       (do_ppc_sysv_return_value): Likewise.
+       (ppc64_sysv_abi_push_integer): Likewise.
+       (ppc64_sysv_abi_push_freg): Likewise.
+       (ppc64_sysv_abi_return_value_base): Likewise.
+       (ppc64_sysv_abi_return_value): Likewise.
+       * rs6000-aix-tdep.c (rs6000_push_dummy_call): Likewise.
+       * rs6000-lynx178-tdep.c (rs6000_lynx178_push_dummy_call): Likewise.
+       * rs6000-nat.c: Likewise.
+       * rs6000-tdep.c (rs6000_register_to_value): Likewise.
+       (rs6000_value_to_register): Likewise.
+       * ppc-tdep.h (PPC_MAX_REGISTER_SIZE): Add.
+
 2017-05-21  Tom Tromey  <tom@tromey.com>
 
        PR rust/21466:
index 142fa31..40ea589 100644 (file)
@@ -497,7 +497,7 @@ fetch_register (struct regcache *regcache, int tid, int regno)
   CORE_ADDR regaddr = ppc_register_u_addr (gdbarch, regno);
   int bytes_transferred;
   unsigned int offset;         /* Offset of registers within the u area.  */
-  gdb_byte buf[MAX_REGISTER_SIZE];
+  gdb_byte buf[PPC_MAX_REGISTER_SIZE];
 
   if (altivec_register_p (gdbarch, regno))
     {
@@ -979,7 +979,7 @@ store_register (const struct regcache *regcache, int tid, int regno)
   CORE_ADDR regaddr = ppc_register_u_addr (gdbarch, regno);
   int i;
   size_t bytes_to_transfer;
-  gdb_byte buf[MAX_REGISTER_SIZE];
+  gdb_byte buf[PPC_MAX_REGISTER_SIZE];
 
   if (altivec_register_p (gdbarch, regno))
     {
index c1778f2..ea655b9 100644 (file)
@@ -134,7 +134,7 @@ ppc_sysv_abi_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
                    {
                      /* Always store the floating point value using
                         the register's floating-point format.  */
-                     gdb_byte regval[MAX_REGISTER_SIZE];
+                     gdb_byte regval[PPC_MAX_REGISTER_SIZE];
                      struct type *regtype
                        = register_type (gdbarch, tdep->ppc_fp0_regnum + freg);
                      convert_typed_floating (val, type, regval, regtype);
@@ -278,7 +278,7 @@ ppc_sysv_abi_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
                {
                  if (write_pass)
                    {
-                     gdb_byte regval[MAX_REGISTER_SIZE];
+                     gdb_byte regval[PPC_MAX_REGISTER_SIZE];
                      const gdb_byte *p;
 
                      /* 32-bit decimal floats are right aligned in the
@@ -364,7 +364,7 @@ ppc_sysv_abi_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
                          if (write_pass)
                            {
                              int regnum = tdep->ppc_fp0_regnum + freg;
-                             gdb_byte regval[MAX_REGISTER_SIZE];
+                             gdb_byte regval[PPC_MAX_REGISTER_SIZE];
                              struct type *regtype
                                = register_type (gdbarch, regnum);
                              convert_typed_floating (elval, eltype,
@@ -411,7 +411,7 @@ ppc_sysv_abi_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
                    }
                  else
                    {
-                     gdb_byte word[MAX_REGISTER_SIZE];
+                     gdb_byte word[PPC_MAX_REGISTER_SIZE];
                      store_unsigned_integer (word, tdep->wordsize, byte_order,
                                              unpack_long (eltype, elval));
 
@@ -516,8 +516,8 @@ ppc_sysv_abi_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
            {
              /* Reduce the parameter down to something that fits in a
                 "word".  */
-             gdb_byte word[MAX_REGISTER_SIZE];
-             memset (word, 0, MAX_REGISTER_SIZE);
+             gdb_byte word[PPC_MAX_REGISTER_SIZE];
+             memset (word, 0, PPC_MAX_REGISTER_SIZE);
              if (len > tdep->wordsize
                  || TYPE_CODE (type) == TYPE_CODE_STRUCT
                  || TYPE_CODE (type) == TYPE_CODE_UNION)
@@ -623,7 +623,7 @@ get_decimal_float_return_value (struct gdbarch *gdbarch, struct type *valtype,
     {
       if (writebuf != NULL)
        {
-         gdb_byte regval[MAX_REGISTER_SIZE];
+         gdb_byte regval[PPC_MAX_REGISTER_SIZE];
          const gdb_byte *p;
 
          /* 32-bit decimal float is right aligned in the doubleword.  */
@@ -706,7 +706,7 @@ do_ppc_sysv_return_value (struct gdbarch *gdbarch, struct type *func_type,
        {
          /* Floats and doubles stored in "f1".  Convert the value to
             the required type.  */
-         gdb_byte regval[MAX_REGISTER_SIZE];
+         gdb_byte regval[PPC_MAX_REGISTER_SIZE];
          struct type *regtype = register_type (gdbarch,
                                                 tdep->ppc_fp0_regnum + 1);
          regcache_cooked_read (regcache, tdep->ppc_fp0_regnum + 1, regval);
@@ -716,7 +716,7 @@ do_ppc_sysv_return_value (struct gdbarch *gdbarch, struct type *func_type,
        {
          /* Floats and doubles stored in "f1".  Convert the value to
             the register's "double" type.  */
-         gdb_byte regval[MAX_REGISTER_SIZE];
+         gdb_byte regval[PPC_MAX_REGISTER_SIZE];
          struct type *regtype = register_type (gdbarch, tdep->ppc_fp0_regnum);
          convert_typed_floating (writebuf, type, regval, regtype);
          regcache_cooked_write (regcache, tdep->ppc_fp0_regnum + 1, regval);
@@ -847,7 +847,7 @@ do_ppc_sysv_return_value (struct gdbarch *gdbarch, struct type *func_type,
          if (TYPE_CODE (eltype) == TYPE_CODE_FLT)
            {
              int regnum = tdep->ppc_fp0_regnum + 1 + i;
-             gdb_byte regval[MAX_REGISTER_SIZE];
+             gdb_byte regval[PPC_MAX_REGISTER_SIZE];
              struct type *regtype = register_type (gdbarch, regnum);
 
              if (writebuf != NULL)
@@ -977,7 +977,7 @@ do_ppc_sysv_return_value (struct gdbarch *gdbarch, struct type *func_type,
       /* GCC screwed up for structures or unions whose size is less
         than or equal to 8 bytes..  Instead of left-aligning, it
         right-aligns the data into the buffer formed by r3, r4.  */
-      gdb_byte regvals[MAX_REGISTER_SIZE * 2];
+      gdb_byte regvals[PPC_MAX_REGISTER_SIZE * 2];
       int len = TYPE_LENGTH (type);
       int offset = (2 * tdep->wordsize - len) % tdep->wordsize;
 
@@ -1010,7 +1010,7 @@ do_ppc_sysv_return_value (struct gdbarch *gdbarch, struct type *func_type,
          /* This matches SVr4 PPC, it does not match GCC.  */
          /* The value is right-padded to 8 bytes and then loaded, as
             two "words", into r3/r4.  */
-         gdb_byte regvals[MAX_REGISTER_SIZE * 2];
+         gdb_byte regvals[PPC_MAX_REGISTER_SIZE * 2];
          regcache_cooked_read (regcache, tdep->ppc_gp0_regnum + 3,
                                regvals + 0 * tdep->wordsize);
          if (TYPE_LENGTH (type) > tdep->wordsize)
@@ -1023,7 +1023,7 @@ do_ppc_sysv_return_value (struct gdbarch *gdbarch, struct type *func_type,
          /* This matches SVr4 PPC, it does not match GCC.  */
          /* The value is padded out to 8 bytes and then loaded, as
             two "words" into r3/r4.  */
-         gdb_byte regvals[MAX_REGISTER_SIZE * 2];
+         gdb_byte regvals[PPC_MAX_REGISTER_SIZE * 2];
          memset (regvals, 0, sizeof regvals);
          memcpy (regvals, writebuf, TYPE_LENGTH (type));
          regcache_cooked_write (regcache, tdep->ppc_gp0_regnum + 3,
@@ -1340,7 +1340,7 @@ ppc64_sysv_abi_push_integer (struct gdbarch *gdbarch, ULONGEST val,
 {
   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
-  gdb_byte buf[MAX_REGISTER_SIZE];
+  gdb_byte buf[PPC_MAX_REGISTER_SIZE];
 
   if (argpos->regcache)
     store_unsigned_integer (buf, tdep->wordsize, byte_order, val);
@@ -1369,7 +1369,7 @@ ppc64_sysv_abi_push_freg (struct gdbarch *gdbarch,
        {
          int regnum = tdep->ppc_fp0_regnum + argpos->freg;
          struct type *regtype = register_type (gdbarch, regnum);
-         gdb_byte regval[MAX_REGISTER_SIZE];
+         gdb_byte regval[PPC_MAX_REGISTER_SIZE];
 
          convert_typed_floating (val, type, regval, regtype);
          regcache_cooked_write (argpos->regcache, regnum, regval);
@@ -1814,7 +1814,7 @@ ppc64_sysv_abi_return_value_base (struct gdbarch *gdbarch, struct type *valtype,
     {
       int regnum = tdep->ppc_fp0_regnum + 1 + index;
       struct type *regtype = register_type (gdbarch, regnum);
-      gdb_byte regval[MAX_REGISTER_SIZE];
+      gdb_byte regval[PPC_MAX_REGISTER_SIZE];
 
       if (writebuf != NULL)
        {
@@ -2071,7 +2071,7 @@ ppc64_sysv_abi_return_value (struct gdbarch *gdbarch, struct value *function,
 
       for (i = 0; i < n_regs; i++)
        {
-         gdb_byte regval[MAX_REGISTER_SIZE];
+         gdb_byte regval[PPC_MAX_REGISTER_SIZE];
          int regnum = tdep->ppc_gp0_regnum + 3 + i;
          int offset = i * tdep->wordsize;
          int len = TYPE_LENGTH (valtype) - offset;
index 8d15ace..4ae5c7f 100644 (file)
@@ -305,6 +305,9 @@ enum {
   PPC_NUM_REGS
 };
 
+/* Big enough to hold the size of the largest register in bytes.  */
+#define PPC_MAX_REGISTER_SIZE  64
+
 /* An instruction to match.  */
 
 struct ppc_insn_pattern
index 7d817be..6cbfdbe 100644 (file)
@@ -253,7 +253,7 @@ rs6000_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
             Always store the floating point value using the register's
             floating-point format.  */
          const int fp_regnum = tdep->ppc_fp0_regnum + 1 + f_argno;
-         gdb_byte reg_val[MAX_REGISTER_SIZE];
+         gdb_byte reg_val[PPC_MAX_REGISTER_SIZE];
          struct type *reg_type = register_type (gdbarch, fp_regnum);
 
          gdb_assert (len <= 8);
@@ -270,7 +270,7 @@ rs6000_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
          /* Argument takes more than one register.  */
          while (argbytes < len)
            {
-             gdb_byte word[MAX_REGISTER_SIZE];
+             gdb_byte word[PPC_MAX_REGISTER_SIZE];
              memset (word, 0, reg_size);
              memcpy (word,
                      ((char *) value_contents (arg)) + argbytes,
@@ -290,7 +290,7 @@ rs6000_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
       else
        {
          /* Argument can fit in one register.  No problem.  */
-         gdb_byte word[MAX_REGISTER_SIZE];
+         gdb_byte word[PPC_MAX_REGISTER_SIZE];
 
          memset (word, 0, reg_size);
          memcpy (word, value_contents (arg), len);
index f2aa1f8..d72a619 100644 (file)
@@ -105,7 +105,7 @@ rs6000_lynx178_push_dummy_call (struct gdbarch *gdbarch,
             Always store the floating point value using the register's
             floating-point format.  */
          const int fp_regnum = tdep->ppc_fp0_regnum + 1 + f_argno;
-         gdb_byte reg_val[MAX_REGISTER_SIZE];
+         gdb_byte reg_val[PPC_MAX_REGISTER_SIZE];
          struct type *reg_type = register_type (gdbarch, fp_regnum);
 
          gdb_assert (len <= 8);
@@ -122,7 +122,7 @@ rs6000_lynx178_push_dummy_call (struct gdbarch *gdbarch,
          /* Argument takes more than one register.  */
          while (argbytes < len)
            {
-             gdb_byte word[MAX_REGISTER_SIZE];
+             gdb_byte word[PPC_MAX_REGISTER_SIZE];
              memset (word, 0, reg_size);
              memcpy (word,
                      ((char *) value_contents (arg)) + argbytes,
@@ -142,7 +142,7 @@ rs6000_lynx178_push_dummy_call (struct gdbarch *gdbarch,
       else
        {
          /* Argument can fit in one register.  No problem.  */
-         gdb_byte word[MAX_REGISTER_SIZE];
+         gdb_byte word[PPC_MAX_REGISTER_SIZE];
 
          memset (word, 0, reg_size);
          memcpy (word, value_contents (arg), len);
index 83e0693..833cf01 100644 (file)
@@ -162,7 +162,7 @@ static void
 fetch_register (struct regcache *regcache, int regno)
 {
   struct gdbarch *gdbarch = get_regcache_arch (regcache);
-  int addr[MAX_REGISTER_SIZE];
+  int addr[PPC_MAX_REGISTER_SIZE];
   int nr, isfloat;
   pid_t pid = ptid_get_pid (regcache_get_ptid (regcache));
 
@@ -221,7 +221,7 @@ static void
 store_register (struct regcache *regcache, int regno)
 {
   struct gdbarch *gdbarch = get_regcache_arch (regcache);
-  int addr[MAX_REGISTER_SIZE];
+  int addr[PPC_MAX_REGISTER_SIZE];
   int nr, isfloat;
   pid_t pid = ptid_get_pid (regcache_get_ptid (regcache));
 
index 4072464..204b34a 100644 (file)
@@ -2611,7 +2611,7 @@ rs6000_register_to_value (struct frame_info *frame,
                          int *optimizedp, int *unavailablep)
 {
   struct gdbarch *gdbarch = get_frame_arch (frame);
-  gdb_byte from[MAX_REGISTER_SIZE];
+  gdb_byte from[PPC_MAX_REGISTER_SIZE];
   
   gdb_assert (TYPE_CODE (type) == TYPE_CODE_FLT);
 
@@ -2633,7 +2633,7 @@ rs6000_value_to_register (struct frame_info *frame,
                           const gdb_byte *from)
 {
   struct gdbarch *gdbarch = get_frame_arch (frame);
-  gdb_byte to[MAX_REGISTER_SIZE];
+  gdb_byte to[PPC_MAX_REGISTER_SIZE];
 
   gdb_assert (TYPE_CODE (type) == TYPE_CODE_FLT);