This is the mail archive of the
gdb-patches@sources.redhat.com
mailing list for the GDB project.
[PATCH] rs6000-tdep.c: Eliminate references todeprecated_registers[]
- From: Kevin Buettner <kevinb at redhat dot com>
- To: gdb-patches at sources dot redhat dot com
- Date: Wed, 13 Oct 2004 09:42:43 -0700
- Subject: [PATCH] rs6000-tdep.c: Eliminate references todeprecated_registers[]
- Organization: Red Hat
I've just committed the patch below. Tested on powerpc-ibm-aix4.3.3.0 with
no observed change to any of the results.
* 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.
Index: rs6000-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/rs6000-tdep.c,v
retrieving revision 1.229
diff -u -p -r1.229 rs6000-tdep.c
--- rs6000-tdep.c 9 Aug 2004 18:43:21 -0000 1.229
+++ rs6000-tdep.c 13 Oct 2004 16:24:40 -0000
@@ -1478,14 +1478,11 @@ rs6000_push_dummy_call (struct gdbarch *
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);
-
- memcpy (&deprecated_registers[DEPRECATED_REGISTER_BYTE
- (tdep->ppc_fp0_regnum + 1 + f_argno)],
- VALUE_CONTENTS (arg),
- len);
+ gdb_assert (len <= 8);
+
+ 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 *
/* 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 *
{
/* 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);
-
- memcpy (&(deprecated_registers
- [DEPRECATED_REGISTER_BYTE
- (tdep->ppc_fp0_regnum + 1 + f_argno)]),
- VALUE_CONTENTS (arg),
- len);
+ gdb_assert (len <= 8);
+
+ regcache_cooked_write (regcache,
+ tdep->ppc_fp0_regnum + 1 + f_argno,
+ VALUE_CONTENTS (arg));
++f_argno;
}