* 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.
This commit is contained in:
parent
e9c75b65b1
commit
22f8ba5774
@ -1,3 +1,15 @@
|
||||
2001-03-26 Mark Kettenis <kettenis@gnu.org>
|
||||
|
||||
* 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.
|
||||
|
||||
2001-03-26 Eli Zaretskii <eliz@is.elta.co.il>
|
||||
|
||||
* event-loop.c (toplevel) [!HAVE_POLL] [NO_FD_SET]: Remove unused
|
||||
|
@ -279,16 +279,20 @@ extern void i386_register_convert_to_raw (struct type *type, int regnum,
|
||||
extern void i387_float_info (void);
|
||||
#define FLOAT_INFO { i387_float_info (); }
|
||||
#endif
|
||||
|
||||
|
||||
/* Store the address of the place in which to copy the structure the
|
||||
subroutine will return. This is called from call_function. */
|
||||
|
||||
#define STORE_STRUCT_RETURN(ADDR, SP) \
|
||||
{ char buf[REGISTER_SIZE]; \
|
||||
(SP) -= sizeof (ADDR); \
|
||||
store_address (buf, sizeof (ADDR), ADDR); \
|
||||
write_memory ((SP), buf, sizeof (ADDR)); }
|
||||
#define PUSH_ARGUMENTS(nargs, args, sp, struct_return, struct_addr) \
|
||||
i386_push_arguments ((nargs), (args), (sp), (struct_return), (struct_addr))
|
||||
extern CORE_ADDR i386_push_arguments (int nargs, struct value **args,
|
||||
CORE_ADDR sp, int struct_return,
|
||||
CORE_ADDR struct_addr);
|
||||
|
||||
/* Store the address of the place in which to copy the structure the
|
||||
subroutine will return. This is called from call_function. */
|
||||
|
||||
#define STORE_STRUCT_RETURN(addr, sp) \
|
||||
i386_store_struct_return ((addr), (sp))
|
||||
extern void i386_store_struct_return (CORE_ADDR addr, CORE_ADDR sp);
|
||||
|
||||
/* Extract from an array REGBUF containing the (raw) register state
|
||||
a function return value of type TYPE, and copy that, in virtual format,
|
||||
|
@ -34,13 +34,6 @@
|
||||
#undef START_INFERIOR_TRAPS_EXPECTED
|
||||
#define START_INFERIOR_TRAPS_EXPECTED 4
|
||||
|
||||
#undef STORE_STRUCT_RETURN
|
||||
#define STORE_STRUCT_RETURN(ADDR, SP) \
|
||||
{ char buf[REGISTER_SIZE]; \
|
||||
(SP) -= sizeof (ADDR); \
|
||||
store_address (buf, sizeof (ADDR), ADDR); \
|
||||
write_memory ((SP), buf, sizeof (ADDR)); }
|
||||
|
||||
/* Extract from an array REGBUF containing the (raw) register state
|
||||
a function return value of type TYPE, and copy that, in virtual format,
|
||||
into VALBUF. */
|
||||
|
@ -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). */
|
||||
|
Loading…
Reference in New Issue
Block a user