mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-09-15 03:40:20 +08:00
* i386-tdep.c (i386_reg_struct_return_p): Allow array types as well.
(i386_return_value): Add handling for functions that return array types.
This commit is contained in:
@ -1,3 +1,9 @@
|
|||||||
|
2005-10-09 Joel Brobecker <brobecker@adacore.com>
|
||||||
|
|
||||||
|
* i386-tdep.c (i386_reg_struct_return_p): Allow array types as well.
|
||||||
|
(i386_return_value): Add handling for functions that return array
|
||||||
|
types.
|
||||||
|
|
||||||
2005-10-09 Joel Brobecker <brobecker@adacore.com>
|
2005-10-09 Joel Brobecker <brobecker@adacore.com>
|
||||||
|
|
||||||
* ada-valprint.c (print_optional_low_bound): Handle properly
|
* ada-valprint.c (print_optional_low_bound): Handle properly
|
||||||
|
@ -1424,9 +1424,9 @@ static const char *valid_conventions[] =
|
|||||||
};
|
};
|
||||||
static const char *struct_convention = default_struct_convention;
|
static const char *struct_convention = default_struct_convention;
|
||||||
|
|
||||||
/* Return non-zero if TYPE, which is assumed to be a structure or
|
/* Return non-zero if TYPE, which is assumed to be a structure,
|
||||||
union type, should be returned in registers for architecture
|
a union type, or an array type, should be returned in registers
|
||||||
GDBARCH. */
|
for architecture GDBARCH. */
|
||||||
|
|
||||||
static int
|
static int
|
||||||
i386_reg_struct_return_p (struct gdbarch *gdbarch, struct type *type)
|
i386_reg_struct_return_p (struct gdbarch *gdbarch, struct type *type)
|
||||||
@ -1435,7 +1435,9 @@ i386_reg_struct_return_p (struct gdbarch *gdbarch, struct type *type)
|
|||||||
enum type_code code = TYPE_CODE (type);
|
enum type_code code = TYPE_CODE (type);
|
||||||
int len = TYPE_LENGTH (type);
|
int len = TYPE_LENGTH (type);
|
||||||
|
|
||||||
gdb_assert (code == TYPE_CODE_STRUCT || code == TYPE_CODE_UNION);
|
gdb_assert (code == TYPE_CODE_STRUCT
|
||||||
|
|| code == TYPE_CODE_UNION
|
||||||
|
|| code == TYPE_CODE_ARRAY);
|
||||||
|
|
||||||
if (struct_convention == pcc_struct_convention
|
if (struct_convention == pcc_struct_convention
|
||||||
|| (struct_convention == default_struct_convention
|
|| (struct_convention == default_struct_convention
|
||||||
@ -1467,7 +1469,9 @@ i386_return_value (struct gdbarch *gdbarch, struct type *type,
|
|||||||
{
|
{
|
||||||
enum type_code code = TYPE_CODE (type);
|
enum type_code code = TYPE_CODE (type);
|
||||||
|
|
||||||
if ((code == TYPE_CODE_STRUCT || code == TYPE_CODE_UNION)
|
if ((code == TYPE_CODE_STRUCT
|
||||||
|
|| code == TYPE_CODE_UNION
|
||||||
|
|| code == TYPE_CODE_ARRAY)
|
||||||
&& !i386_reg_struct_return_p (gdbarch, type))
|
&& !i386_reg_struct_return_p (gdbarch, type))
|
||||||
{
|
{
|
||||||
/* The System V ABI says that:
|
/* The System V ABI says that:
|
||||||
@ -1481,6 +1485,12 @@ i386_return_value (struct gdbarch *gdbarch, struct type *type,
|
|||||||
So the ABI guarantees that we can always find the return
|
So the ABI guarantees that we can always find the return
|
||||||
value just after the function has returned. */
|
value just after the function has returned. */
|
||||||
|
|
||||||
|
/* Note that the ABI doesn't mention functions returning arrays,
|
||||||
|
which is something possible in certain languages such as Ada.
|
||||||
|
In this case, the value is returned as if it was wrapped in
|
||||||
|
a record, so the convention applied to records also applies
|
||||||
|
to arrays. */
|
||||||
|
|
||||||
if (readbuf)
|
if (readbuf)
|
||||||
{
|
{
|
||||||
ULONGEST addr;
|
ULONGEST addr;
|
||||||
|
Reference in New Issue
Block a user