forked from Imagelibrary/binutils-gdb
* rs6000-tdep.c (rs6000_push_dummy_call): Replace references to
``deprecated_registers'' with equivalent code. Use gdb_assert() instead of explicit test and print statement.
This commit is contained in:
@@ -1478,14 +1478,11 @@ rs6000_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
|
||||
There are 13 fpr's reserved for passing parameters. At this point
|
||||
there is no way we would run out of them. */
|
||||
|
||||
if (len > 8)
|
||||
printf_unfiltered ("Fatal Error: a floating point parameter "
|
||||
"#%d with a size > 8 is found!\n", argno);
|
||||
gdb_assert (len <= 8);
|
||||
|
||||
memcpy (&deprecated_registers[DEPRECATED_REGISTER_BYTE
|
||||
(tdep->ppc_fp0_regnum + 1 + f_argno)],
|
||||
VALUE_CONTENTS (arg),
|
||||
len);
|
||||
regcache_cooked_write (regcache,
|
||||
tdep->ppc_fp0_regnum + 1 + f_argno,
|
||||
VALUE_CONTENTS (arg));
|
||||
++f_argno;
|
||||
}
|
||||
|
||||
@@ -1495,12 +1492,15 @@ rs6000_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
|
||||
/* Argument takes more than one register. */
|
||||
while (argbytes < len)
|
||||
{
|
||||
memset (&deprecated_registers[DEPRECATED_REGISTER_BYTE (ii + 3)], 0,
|
||||
reg_size);
|
||||
memcpy (&deprecated_registers[DEPRECATED_REGISTER_BYTE (ii + 3)],
|
||||
char word[MAX_REGISTER_SIZE];
|
||||
memset (word, 0, reg_size);
|
||||
memcpy (word,
|
||||
((char *) VALUE_CONTENTS (arg)) + argbytes,
|
||||
(len - argbytes) > reg_size
|
||||
? reg_size : len - argbytes);
|
||||
regcache_cooked_write (regcache,
|
||||
tdep->ppc_gp0_regnum + 3 + ii,
|
||||
word);
|
||||
++ii, argbytes += reg_size;
|
||||
|
||||
if (ii >= 8)
|
||||
@@ -1513,9 +1513,11 @@ rs6000_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
|
||||
{
|
||||
/* Argument can fit in one register. No problem. */
|
||||
int adj = TARGET_BYTE_ORDER == BFD_ENDIAN_BIG ? reg_size - len : 0;
|
||||
memset (&deprecated_registers[DEPRECATED_REGISTER_BYTE (ii + 3)], 0, reg_size);
|
||||
memcpy ((char *)&deprecated_registers[DEPRECATED_REGISTER_BYTE (ii + 3)] + adj,
|
||||
VALUE_CONTENTS (arg), len);
|
||||
char word[MAX_REGISTER_SIZE];
|
||||
|
||||
memset (word, 0, reg_size);
|
||||
memcpy (word, VALUE_CONTENTS (arg), len);
|
||||
regcache_cooked_write (regcache, tdep->ppc_gp0_regnum + 3 +ii, word);
|
||||
}
|
||||
++argno;
|
||||
}
|
||||
@@ -1592,15 +1594,11 @@ ran_out_of_registers_for_arguments:
|
||||
if (TYPE_CODE (type) == TYPE_CODE_FLT && f_argno < 13)
|
||||
{
|
||||
|
||||
if (len > 8)
|
||||
printf_unfiltered ("Fatal Error: a floating point parameter"
|
||||
" #%d with a size > 8 is found!\n", argno);
|
||||
gdb_assert (len <= 8);
|
||||
|
||||
memcpy (&(deprecated_registers
|
||||
[DEPRECATED_REGISTER_BYTE
|
||||
(tdep->ppc_fp0_regnum + 1 + f_argno)]),
|
||||
VALUE_CONTENTS (arg),
|
||||
len);
|
||||
regcache_cooked_write (regcache,
|
||||
tdep->ppc_fp0_regnum + 1 + f_argno,
|
||||
VALUE_CONTENTS (arg));
|
||||
++f_argno;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user