Add PPC_MAX_REGISTER_SIZE
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.
This commit is contained in:
parent
ca49a96781
commit
0f068fb5e5
@ -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:
|
||||
|
@ -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))
|
||||
{
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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));
|
||||
|
||||
|
@ -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);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user