* 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.
2001-04-01 Mark Kettenis <kettenis@gnu.org>
2001-04-01 Mark Kettenis <kettenis@gnu.org>
+ * 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'.
* i386-linux-nat.c (i386_linux_dr_get): Change type of return
value to `unsigned long'. Change type of `value' to `unsigned
long'.
/* Write into the appropriate registers a function return value stored
in VALBUF of type TYPE, given in virtual format. */
/* 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);
#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
/* The following redefines make backtracing through sigtramp work.
They manufacture a fake sigtramp frame and obtain the saved pc in sigtramp
"Cannot store return value of %d bytes long.", len);
}
}
"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));
+}
\f
/* Convert data from raw format for register REGNUM in buffer FROM to
\f
/* Convert data from raw format for register REGNUM in buffer FROM to