From: Jason Thorpe Date: Mon, 22 Apr 2002 20:59:28 +0000 (+0000) Subject: * vax-tdep.c (vax_store_struct_return): New function. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=ea74468cd028a4fc0a500ae8f7a13ba373b9af99;p=binutils-gdb.git * vax-tdep.c (vax_store_struct_return): New function. (vax_extract_return_value): Ditto. (vax_store_return_value): Ditto. (vax_extract_struct_value_address): Ditto. * config/vax/tm-vax.h (STORE_STRUCT_RETURN): Use vax_store_struct_return. (EXTRACT_RETURN_VALUE): Use vax_extract_return_value. (STORE_RETURN_VALUE): Use vax_store_return_value. (EXTRACT_STRUCT_VALUE_ADDRESS): Use vax_extract_struct_value_address. --- diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 6785efb5729..667ceac133a 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,15 @@ +2002-04-22 Jason Thorpe + + * vax-tdep.c (vax_store_struct_return): New function. + (vax_extract_return_value): Ditto. + (vax_store_return_value): Ditto. + (vax_extract_struct_value_address): Ditto. + * config/vax/tm-vax.h (STORE_STRUCT_RETURN): Use + vax_store_struct_return. + (EXTRACT_RETURN_VALUE): Use vax_extract_return_value. + (STORE_RETURN_VALUE): Use vax_store_return_value. + (EXTRACT_STRUCT_VALUE_ADDRESS): Use vax_extract_struct_value_address. + 2002-04-22 Jason Thorpe * vax-tdep.c (vax_frame_saved_pc): New function. diff --git a/gdb/config/vax/tm-vax.h b/gdb/config/vax/tm-vax.h index e8bab7efd92..015665ccc76 100644 --- a/gdb/config/vax/tm-vax.h +++ b/gdb/config/vax/tm-vax.h @@ -122,30 +122,20 @@ extern int vax_register_virtual_size (int); #define REGISTER_VIRTUAL_TYPE(N) vax_register_virtual_type ((N)) extern struct type *vax_register_virtual_type (int); -/* 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) \ - { write_register (1, (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. */ +#define STORE_STRUCT_RETURN(ADDR, SP) vax_store_struct_return ((ADDR), (SP)) +extern void vax_store_struct_return (CORE_ADDR, CORE_ADDR); #define EXTRACT_RETURN_VALUE(TYPE,REGBUF,VALBUF) \ - memcpy (VALBUF, REGBUF, TYPE_LENGTH (TYPE)) - -/* Write into appropriate registers a function return value - of type TYPE, given in virtual format. */ + vax_extract_return_value ((TYPE), (REGBUF), (VALBUF)) +extern void vax_extract_return_value (struct type *, char *, char *); #define STORE_RETURN_VALUE(TYPE,VALBUF) \ - write_register_bytes (0, VALBUF, TYPE_LENGTH (TYPE)) - -/* Extract from an array REGBUF containing the (raw) register state - the address in which a function should return its structure value, - as a CORE_ADDR (or an expression that can be used as one). */ + vax_store_return_value ((TYPE), (VALBUF)) +extern void vax_store_return_value (struct type *, char *); -#define EXTRACT_STRUCT_VALUE_ADDRESS(REGBUF) (*(int *)(REGBUF)) +#define EXTRACT_STRUCT_VALUE_ADDRESS(REGBUF) \ + vax_extract_struct_value_address ((REGBUF)) +extern CORE_ADDR vax_extract_struct_value_address (char *); /* Describe the pointer in each stack frame to the previous stack frame diff --git a/gdb/vax-tdep.c b/gdb/vax-tdep.c index 8e4c083c8b5..2ff2187a0e3 100644 --- a/gdb/vax-tdep.c +++ b/gdb/vax-tdep.c @@ -178,6 +178,30 @@ vax_frame_num_args (struct frame_info *fi) return (0xff & read_memory_integer (FRAME_ARGS_ADDRESS (fi), 1)); } +void +vax_store_struct_return (CORE_ADDR addr, CORE_ADDR sp) +{ + write_register (1, addr); +} + +void +vax_extract_return_value (struct type *valtype, char *regbuf, char *valbuf) +{ + memcpy (valbuf, regbuf + REGISTER_BYTE (0), TYPE_LENGTH (valtype)); +} + +void +vax_store_return_value (struct type *valtype, char *valbuf) +{ + write_register_bytes (0, valbuf, TYPE_LENGTH (valtype)); +} + +CORE_ADDR +vax_extract_struct_value_address (char *regbuf) +{ + return (extract_address (regbuf + REGISTER_BYTE (0), REGISTER_RAW_SIZE (0))); +} + /* Advance PC across any function entry prologue instructions to reach some "real" code. */