diff options
author | Kevin Buettner <kevinb@redhat.com> | 2004-10-13 16:38:22 +0000 |
---|---|---|
committer | Kevin Buettner <kevinb@redhat.com> | 2004-10-13 16:38:22 +0000 |
commit | 9f3359456878efddffc9c96c2107ee7f3ef2436b (patch) | |
tree | 36972480f6f00954c837e4dda28c9e871ae1b81c /gdb/rs6000-tdep.c | |
parent | fb5b547845302fe64f118f9bc5eb0ef636cfafb7 (diff) | |
download | gdb-9f3359456878efddffc9c96c2107ee7f3ef2436b.zip gdb-9f3359456878efddffc9c96c2107ee7f3ef2436b.tar.gz gdb-9f3359456878efddffc9c96c2107ee7f3ef2436b.tar.bz2 |
* 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.
Diffstat (limited to 'gdb/rs6000-tdep.c')
-rw-r--r-- | gdb/rs6000-tdep.c | 42 |
1 files changed, 20 insertions, 22 deletions
diff --git a/gdb/rs6000-tdep.c b/gdb/rs6000-tdep.c index 36741c5..37988a3 100644 --- a/gdb/rs6000-tdep.c +++ b/gdb/rs6000-tdep.c @@ -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); - - 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 *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; } |