From 1e8d0a7b553cd82164b9eb5bc55045cf7aa40728 Mon Sep 17 00:00:00 2001 From: Mark Kettenis Date: Sat, 31 Mar 2001 13:05:16 +0000 Subject: [PATCH] * i386-tdep.c (i386_extract_return_value): If the type of the return value is TYPE_STRUCT and the number of fields is one, call ourselves with TYPE set tp the type of the first field. (i386_store_return_value): Likewise. This fixes a problem with returning structs consisting of a single `float' or `double' on *BSD. --- gdb/ChangeLog | 9 +++++++++ gdb/i386-tdep.c | 13 +++++++++++-- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 0489c981ab7..550af70f944 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,12 @@ +2001-03-31 Mark Kettenis + + * i386-tdep.c (i386_extract_return_value): If the type of the + return value is TYPE_STRUCT and the number of fields is one, call + ourselves with TYPE set tp the type of the first field. + (i386_store_return_value): Likewise. + This fixes a problem with returning structs consisting of a single + `float' or `double' on *BSD. + 2001-03-30 Mark Kettenis * lin-lwp.c (lin_lwp_resume): Don't mark LWP as not stopped until diff --git a/gdb/i386-tdep.c b/gdb/i386-tdep.c index a5d3ef74f94..db001dafab7 100644 --- a/gdb/i386-tdep.c +++ b/gdb/i386-tdep.c @@ -733,7 +733,12 @@ i386_extract_return_value (struct type *type, char *regbuf, char *valbuf) { int len = TYPE_LENGTH (type); - if (TYPE_CODE_FLT == TYPE_CODE (type)) + if (TYPE_CODE (type) == TYPE_CODE_STRUCT + && TYPE_NFIELDS (type) == 1) + return i386_extract_return_value (TYPE_FIELD_TYPE (type, 0), + regbuf, valbuf); + + if (TYPE_CODE (type) == TYPE_CODE_FLT) { if (NUM_FREGS == 0) { @@ -791,7 +796,11 @@ i386_store_return_value (struct type *type, char *valbuf) { int len = TYPE_LENGTH (type); - if (TYPE_CODE_FLT == TYPE_CODE (type)) + if (TYPE_CODE (type) == TYPE_CODE_STRUCT + && TYPE_NFIELDS (type) == 1) + return i386_store_return_value (TYPE_FIELD_TYPE (type, 0), valbuf); + + if (TYPE_CODE (type) == TYPE_CODE_FLT) { if (NUM_FREGS == 0) { -- 2.30.2