From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from lndn.lancelotsix.com (vps-42846194.vps.ovh.net [IPv6:2001:41d0:801:2000::2400]) by sourceware.org (Postfix) with ESMTPS id E98AC384402D for ; Wed, 16 Mar 2022 08:42:53 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org E98AC384402D Received: from Plymouth (unknown [IPv6:2a02:390:9086:0:71c2:1524:1149:fea4]) by lndn.lancelotsix.com (Postfix) with ESMTPSA id E0F0B822B3; Wed, 16 Mar 2022 08:42:52 +0000 (UTC) Date: Wed, 16 Mar 2022 08:42:48 +0000 From: Lancelot SIX To: Youling Tang Cc: gdb-patches@sourceware.org, "Maciej W. Rozycki" Subject: Re: [PATCH] gdb: mips: Fix the handling of complex type of function return value Message-ID: <20220316084248.m5m2et3njtngeoge@Plymouth> References: <1647406106-25723-1-git-send-email-tangyouling@loongson.cn> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <1647406106-25723-1-git-send-email-tangyouling@loongson.cn> X-Greylist: Sender succeeded SMTP AUTH, not delayed by milter-greylist-4.5.11 (lndn.lancelotsix.com [0.0.0.0]); Wed, 16 Mar 2022 08:42:53 +0000 (UTC) X-Spam-Status: No, score=-10.4 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_SBL_CSS, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 16 Mar 2022 08:42:57 -0000 On Wed, Mar 16, 2022 at 12:48:26PM +0800, Youling Tang wrote: > $ objdump -d outputs/gdb.base/varargs/varargs > 00000001200012e8 : > ... > 1200013b8: c7c10000 lwc1 $f1,0(s8) > 1200013bc: c7c00004 lwc1 $f0,4(s8) > 1200013c0: 46000886 mov.s $f2,$f1 > 1200013c4: 46000046 mov.s $f1,$f0 > 1200013c8: 46001006 mov.s $f0,$f2 > 1200013cc: 46000886 mov.s $f2,$f1 > 1200013d0: 03c0e825 move sp,s8 > 1200013d4: dfbe0038 ld s8,56(sp) > 1200013d8: 67bd0080 daddiu sp,sp,128 > 1200013dc: 03e00008 jr ra > 1200013e0: 00000000 nop > > From the above disassembly, we can see that when the return value of the > function is a complex type and len <= 2 * MIPS64_REGSIZE, the return value > will be passed through $f0 and $f2, so fix the corresponding processing > in mips_n32n64_return_value(). > > $ make check RUNTESTFLAGS='GDB=../gdb gdb.base/varargs.exp --outdir=test' > > Before applying the patch: > FAIL: gdb.base/varargs.exp: print find_max_float_real(4, fc1, fc2, fc3, fc4) > FAIL: gdb.base/varargs.exp: print find_max_double_real(4, dc1, dc2, dc3, dc4) > > # of expected passes 9 > # of unexpected failures 2 > > After applying the patch: > # of expected passes 11 > > Signed-off-by: Youling Tang > --- > gdb/mips-tdep.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/gdb/mips-tdep.c b/gdb/mips-tdep.c > index 7e37578..cddb8f8 100644 > --- a/gdb/mips-tdep.c > +++ b/gdb/mips-tdep.c > @@ -5224,9 +5224,10 @@ mips_n32n64_return_value (struct gdbarch *gdbarch, struct value *function, > > if (TYPE_LENGTH (type) > 2 * MIPS64_REGSIZE) > return RETURN_VALUE_STRUCT_CONVENTION; > - else if (type->code () == TYPE_CODE_FLT > + else if ((type->code () == TYPE_CODE_FLT > && TYPE_LENGTH (type) == 16 > && tdep->mips_fpu_type != MIPS_FPU_NONE) Hi, Just minor note, those 2 lines above should be indented 2 more space I think (so the && operator continues to vertically align with "type->code ()"). > + || (type->code () == TYPE_CODE_COMPLEX)) I do not think the extra set of parens are requires (but they do no harm either). For the rest, it seems reasonable to me but I’ll let MIPS / global maintainers comment. Best, Lancelot. > { > /* A 128-bit floating-point value fills both $f0 and $f2. The > two registers are used in the same as memory order, so the > -- > 2.1.0 > -- Lancelot SIX