From 22f8ba577413fda5817e1eac7605a56c5cbfccdb Mon Sep 17 00:00:00 2001 From: Mark Kettenis Date: Mon, 26 Mar 2001 12:11:14 +0000 Subject: * i386-tdep.c (i386_push_arguments, i386_store_struct_return): New functions. * config/i386/tm-i386.h (PUSH_ARGUMENTS): New macro. (STORE_STRUCT_RETURN): Redefine in terms of i386_store_struct_return. (i386_push_arguments, i386_store_struct_return): New prototypes. * config/i386/tm-i386v.h (STORE_STRUCT_RETURN): Remove. It's definition was identical to the definition in "i386/tm-i386.h" so the new definition should suffice too. --- gdb/i386-tdep.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'gdb/i386-tdep.c') diff --git a/gdb/i386-tdep.c b/gdb/i386-tdep.c index 6d5a777..a5d3ef7 100644 --- a/gdb/i386-tdep.c +++ b/gdb/i386-tdep.c @@ -694,6 +694,30 @@ get_longjmp_target (CORE_ADDR *pc) #endif /* GET_LONGJMP_TARGET */ +CORE_ADDR +i386_push_arguments (int nargs, value_ptr *args, CORE_ADDR sp, + int struct_return, CORE_ADDR struct_addr) +{ + sp = default_push_arguments (nargs, args, sp, struct_return, struct_addr); + + if (struct_return) + { + char buf[4]; + + sp -= 4; + store_address (buf, 4, struct_addr); + write_memory (sp, buf, 4); + } + + return sp; +} + +void +i386_store_struct_return (CORE_ADDR addr, CORE_ADDR sp) +{ + /* Do nothing. Everything was already done by i386_push_arguments. */ +} + /* These registers are used for returning integers (and on some targets also for returning `struct' and `union' values when their size and alignment match an integer type). */ -- cgit v1.1