* i386-tdep.c (i386_reg_struct_return_p): Handle structures with a

single 'long double' member correctly.
(i386_return_value): Tweak comment.
This commit is contained in:
Mark Kettenis 2005-07-18 12:40:13 +00:00
parent 6bdae935ab
commit 9edde48e00
2 changed files with 21 additions and 5 deletions

View File

@ -1,3 +1,9 @@
2005-07-18 Mark Kettenis <kettenis@gnu.org>
* i386-tdep.c (i386_reg_struct_return_p): Handle structures with a
single 'long double' member correctly.
(i386_return_value): Tweak comment.
2005-07-16 Nick Roberts <nickrob@snap.net.nz>
* mi/gdb-mi.el: Update for changes in Emacs 22.0.50. Bring more

View File

@ -1427,6 +1427,15 @@ i386_reg_struct_return_p (struct gdbarch *gdbarch, struct type *type)
&& tdep->struct_return == pcc_struct_return))
return 0;
/* Structures consisting of a single `float', `double' or 'long
double' member are returned in %st(0). */
if (code == TYPE_CODE_STRUCT && TYPE_NFIELDS (type) == 1)
{
type = check_typedef (TYPE_FIELD_TYPE (type, 0));
if (TYPE_CODE (type) == TYPE_CODE_FLT)
return (len == 4 || len == 8 || len == 12);
}
return (len == 1 || len == 2 || len == 4 || len == 8);
}
@ -1469,11 +1478,12 @@ i386_return_value (struct gdbarch *gdbarch, struct type *type,
}
/* This special case is for structures consisting of a single
`float' or `double' member. These structures are returned in
%st(0). For these structures, we call ourselves recursively,
changing TYPE into the type of the first member of the structure.
Since that should work for all structures that have only one
member, we don't bother to check the member's type here. */
`float', `double' or 'long double' member. These structures are
returned in %st(0). For these structures, we call ourselves
recursively, changing TYPE into the type of the first member of
the structure. Since that should work for all structures that
have only one member, we don't bother to check the member's type
here. */
if (code == TYPE_CODE_STRUCT && TYPE_NFIELDS (type) == 1)
{
type = check_typedef (TYPE_FIELD_TYPE (type, 0));