From f7af964784af9614842c08ccd8421fbda10c6b4b Mon Sep 17 00:00:00 2001 From: Mark Kettenis Date: Sun, 1 Apr 2001 12:39:52 +0000 Subject: [PATCH] * i386-tdep.c (i386_extract_struct_value_address): New function. * config/i386/tm-i386.h (EXTRACT_STRUCT_VALUE_ADDRESS): Redefine in terms of i386_extract_struct_value_address. (i386_extract_struct_value_address): New prototype. --- gdb/ChangeLog | 5 +++++ gdb/config/i386/tm-i386.h | 11 +++++++---- gdb/i386-tdep.c | 11 +++++++++++ 3 files changed, 23 insertions(+), 4 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 3bc5c4cd6ff..6ff6e695d5b 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,10 @@ 2001-04-01 Mark Kettenis + * i386-tdep.c (i386_extract_struct_value_address): New function. + * config/i386/tm-i386.h (EXTRACT_STRUCT_VALUE_ADDRESS): Redefine + in terms of i386_extract_struct_value_address. + (i386_extract_struct_value_address): New prototype. + * i386-linux-nat.c (i386_linux_dr_get): Change type of return value to `unsigned long'. Change type of `value' to `unsigned long'. diff --git a/gdb/config/i386/tm-i386.h b/gdb/config/i386/tm-i386.h index 9417b77a453..a7841b57ed5 100644 --- a/gdb/config/i386/tm-i386.h +++ b/gdb/config/i386/tm-i386.h @@ -305,15 +305,18 @@ extern void i386_extract_return_value (struct type *type, char *regbuf, /* Write into the appropriate registers a function return value stored in VALBUF of type TYPE, given in virtual format. */ + #define STORE_RETURN_VALUE(type, valbuf) \ i386_store_return_value ((type), (valbuf)) extern void i386_store_return_value (struct type *type, char *valbuf); -/* 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). */ +/* 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. */ -#define EXTRACT_STRUCT_VALUE_ADDRESS(REGBUF) (*(int *)(REGBUF)) +#define EXTRACT_STRUCT_VALUE_ADDRESS(regbuf) \ + i386_extract_struct_value_address ((regbuf)) +extern CORE_ADDR i386_extract_struct_value_address (char *regbuf); /* The following redefines make backtracing through sigtramp work. They manufacture a fake sigtramp frame and obtain the saved pc in sigtramp diff --git a/gdb/i386-tdep.c b/gdb/i386-tdep.c index db001dafab7..1090cbef79c 100644 --- a/gdb/i386-tdep.c +++ b/gdb/i386-tdep.c @@ -850,6 +850,17 @@ i386_store_return_value (struct type *type, char *valbuf) "Cannot store return value of %d bytes long.", len); } } + +/* 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. */ + +CORE_ADDR +i386_extract_struct_value_address (char *regbuf) +{ + return extract_address (®buf[REGISTER_BYTE (LOW_RETURN_REGNUM)], + REGISTER_RAW_SIZE (LOW_RETURN_REGNUM)); +} /* Convert data from raw format for register REGNUM in buffer FROM to -- 2.30.2