diff options
author | Andrew Cagney <cagney@redhat.com> | 2003-09-09 20:22:37 +0000 |
---|---|---|
committer | Andrew Cagney <cagney@redhat.com> | 2003-09-09 20:22:37 +0000 |
commit | 7a41266bbb4ac11fb6237b143556a02ef0020e18 (patch) | |
tree | 19a0687e2a7df4949eb41ee2df773767c94dbcfb /gdb/rs6000-tdep.c | |
parent | 77b2b6d4605f755f1e0d67514be5d69e5f43ec72 (diff) | |
download | gdb-7a41266bbb4ac11fb6237b143556a02ef0020e18.zip gdb-7a41266bbb4ac11fb6237b143556a02ef0020e18.tar.gz gdb-7a41266bbb4ac11fb6237b143556a02ef0020e18.tar.bz2 |
2003-09-09 Andrew Cagney <cagney@redhat.com>
* rs6000-tdep.c (rs6000_store_struct_return): Delete function.
(rs6000_push_dummy_call): Store the struct return address.
* ppc-sysv-tdep.c (ppc_sysv_abi_push_dummy_call): Ditto.
Diffstat (limited to 'gdb/rs6000-tdep.c')
-rw-r--r-- | gdb/rs6000-tdep.c | 33 |
1 files changed, 14 insertions, 19 deletions
diff --git a/gdb/rs6000-tdep.c b/gdb/rs6000-tdep.c index 17bcb24..8b90e75 100644 --- a/gdb/rs6000-tdep.c +++ b/gdb/rs6000-tdep.c @@ -1123,6 +1123,7 @@ rs6000_push_dummy_call (struct gdbarch *gdbarch, CORE_ADDR func_addr, int nargs, struct value **args, CORE_ADDR sp, int struct_return, CORE_ADDR struct_addr) { + struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch); int ii; int len = 0; int argno; /* current argument number */ @@ -1137,14 +1138,19 @@ rs6000_push_dummy_call (struct gdbarch *gdbarch, CORE_ADDR func_addr, CORE_ADDR saved_sp; /* The first eight words of ther arguments are passed in registers. - Copy them appropriately. - - If the function is returning a `struct', then the first word (which - will be passed in r3) is used for struct return address. In that - case we should advance one word and start from r4 register to copy - parameters. */ - - ii = struct_return ? 1 : 0; + Copy them appropriately. */ + ii = 0; + + /* If the function is returning a `struct', then the first word + (which will be passed in r3) is used for struct return address. + In that case we should advance one word and start from r4 + register to copy parameters. */ + if (struct_return) + { + regcache_raw_write_unsigned (regcache, tdep->ppc_gp0_regnum + 3, + struct_addr); + ii++; + } /* effectively indirect call... gcc does... @@ -2051,16 +2057,6 @@ rs6000_stab_reg_to_regnum (int num) return regnum; } -/* Store the address of the place in which to copy the structure the - subroutine will return. */ - -static void -rs6000_store_struct_return (CORE_ADDR addr, CORE_ADDR sp) -{ - struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch); - write_register (tdep->ppc_gp0_regnum + 3, addr); -} - /* Write into appropriate registers a function return value of type TYPE, given in virtual format. */ static void @@ -2973,7 +2969,6 @@ rs6000_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) else set_gdbarch_push_dummy_call (gdbarch, rs6000_push_dummy_call); - set_gdbarch_deprecated_store_struct_return (gdbarch, rs6000_store_struct_return); set_gdbarch_extract_struct_value_address (gdbarch, rs6000_extract_struct_value_address); set_gdbarch_deprecated_pop_frame (gdbarch, rs6000_pop_frame); |