[PATCH] Fix complex doube/long double return of i386

Mark Kettenis mark.kettenis@xs4all.nl
Wed Oct 24 14:56:00 GMT 2012


Just like on amd64, returning complex numbers wasn't handled.  The
official System V ABI doesn't mention complex numbers, but returning
them as if they are a struct (just like the large decimal floating
point types) is the only sensible thing to do.

Committed.

2012-10-24  Mark Kettenis  <kettenis@gnu.org>

	PR gdb/12783
	* i386-tdep.c (i386_return_value): Handle complex double and long
	double.

Index: i386-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/i386-tdep.c,v
retrieving revision 1.358
diff -u -p -r1.358 i386-tdep.c
--- i386-tdep.c	15 Oct 2012 20:37:39 -0000	1.358
+++ i386-tdep.c	24 Oct 2012 14:50:13 -0000
@@ -2630,6 +2630,9 @@ i386_return_value (struct gdbarch *gdbar
 	|| code == TYPE_CODE_UNION
 	|| code == TYPE_CODE_ARRAY)
        && !i386_reg_struct_return_p (gdbarch, type))
+      /* Complex double and long double uses the struct return covention.  */
+      || (code == TYPE_CODE_COMPLEX && TYPE_LENGTH (type) == 16)
+      || (code == TYPE_CODE_COMPLEX && TYPE_LENGTH (type) == 24)
       /* 128-bit decimal float uses the struct return convention.  */
       || (code == TYPE_CODE_DECFLOAT && TYPE_LENGTH (type) == 16))
     {



More information about the Gdb-patches mailing list