From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from sonic313-21.consmr.mail.ir2.yahoo.com (sonic313-21.consmr.mail.ir2.yahoo.com [77.238.179.188]) by sourceware.org (Postfix) with ESMTPS id AA7DA386102B for ; Wed, 8 Jul 2020 17:23:34 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org AA7DA386102B Authentication-Results: sourceware.org; dmarc=pass (p=reject dis=none) header.from=yahoo.de Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=ssbssa@yahoo.de DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.de; s=s2048; t=1594229013; bh=KKeN7sOEB5RZOD4SCeXRKg9qnHh84RB/7qI3pQPige8=; h=Date:From:To:In-Reply-To:References:Subject:From:Subject; b=Se5tjFtF98+KvoigGam040O4v11PRHl2oYuuOME8Q4647tUncMQ528VptiNntdiOAVH7CSAP9ob4SzM9t9aJ57W7R/hkDbOgMzvQkr4IgYrgKbyxsoln+lYCdIy7IJ3cG3EtDlKbYZhhqHj+5sHRwLUH3/Iqh2vq2qFcG9XCne8y6Kx512rxOvFtgKUUB4sBdHqd7raM2TKBSE1Si20VAgnt2Nw7CjU5Fu9OnloIHXvbL+tVOlFd0NXvMbjvdCZGP7XmX1tWJ1OdM96SYR64ANdHKr9rvZkierelI5I9uMZIkz6mcCx6IrTkXT94EhLGI4zpslSm5hWx6AHnU7sVtQ== X-YMail-OSG: OMZwBkcVM1mQOcoWDz2vNaxuQ9__AtDQRbnHlc3qPJGLhu3c0QLWuNvYyX_hPIr UJlJYcwvvhgqs6C0zwcRiKtkkHldJycWqfx5VCfHg1HNFt8CNy8V9_LHZ2cv8akCi0vyOyRLLIVk s6GMyZb3HSXZ6VpLk3baVPz1Y3SMHgeMoyRkYq4SkHP2fSXd9hYMcMX6BGUUvqk5FH8KPsyCZ.gY td9QfSx1mvocnuhijfZMpXFSpd2_FdD6hssEeT5WRqMUik344IoRy6ojSJH7zHyTMNiTKgo8WouX TC1dQgzQZ5uO5oBpn28vWOnEkMCI7KyeYbq_JByZoWqT8yV_XZoLbdvdRQp.Ci_4jaguO7g3ZcMa mJXxQwchh5iP75.XL7fFgizxgvUmJ3ajzuzjnx6cR9rp6lwNJ6aF2Cn0dTNc_6KSDZbSDg3gH3Ud PHvFxTOnbt7CyLbx7mYSJsVS8IX.0UnP3lKhVM1GArbJ25nWYWq9Ume.Z1693IrjCQdWQe9uks1H bc2PpTFh1yRW8eulwYiqffjrA9c1i8wxLDvqF5lvksdKAtprGdOjss7lBFHJQbEvWjn7uDdLMshx o41qkLjxusNKwL3xMnG7ET1UIKtnlPsegxClr8JQZInbfAIDg6eHWn9i7AJo4Ud8OdjZSiCCCiAy FLAmdTNHbPn5.o06ezRK7XbIwcD3n9WutvdJmYu_XlzJ_td_xckhqeDy0e.UiiZPMtURYlttJOVi VHELdJszVA27TiApPN2ZahNhwsJKcU0GEMH81fFtyFc_ZU.NhtRt7lNdV3Hl6QZyLdxX84DpAq3N I8JNFttxV.O2c2bw7tVejG960ZbXuh74LX2sM_kguP3isTlYN1jv.mRCR3Y70AbqEWoDBCj_zmrR Wl7MQItaxJ.csG9WDeM0hNzW28GD1lNi47YaQH.50SYhQx3TWjK_lUojYI8Kzi.1BulnuO4KIciQ 9nqyAm9gCAAB55RTRNcPpY5RaDg05Xtc2CMemlPob382lD1yhW_tzxyPzGlxGOPLdskM_9cuofKZ aGcBTbol7CizegRK.xp5dtSnVgYF9dIv8nbB5Q2T5Q7hhOG0xMXfWFUaYiWWl0avHHo3cFW6kZCb L0yfVn_AG01vsViyeEkZdLDI5p5KRJvv5ehHvwSttlNme4fvYfcwehawJlS96YARQz7ev_JHyQJS adClwmASEIKHfCry6aGQDu0qxUchBHZH1knQ4tmbMJBp4OzJQTFNTg3jAVSO6EL5sB8rsTrXMAdM Vm3tyVHW.9wt56PArr_iExEkoMCzB3.u6DkFFBfxHUF2z0FwZcuJ9TZphRJJaWRBz5VaaIpgmuBP IbO50ymdsQN13 Received: from sonic.gate.mail.ne1.yahoo.com by sonic313.consmr.mail.ir2.yahoo.com with HTTP; Wed, 8 Jul 2020 17:23:33 +0000 Date: Wed, 8 Jul 2020 17:23:30 +0000 (UTC) From: Hannes Domani To: Simon Marchi via Gdb-patches Message-ID: <204187398.7882070.1594229010956@mail.yahoo.com> In-Reply-To: <20200529150800.2013-1-ssbssa@yahoo.de> References: <20200529150800.2013-1-ssbssa.ref@yahoo.de> <20200529150800.2013-1-ssbssa@yahoo.de> Subject: Re: [PATCH v2 1/2] Fix function argument and return value locations MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable X-Mailer: WebService/1.1.16197 YMailNorrin Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:76.0) Gecko/20100101 Firefox/76.0 X-Spam-Status: No, score=-8.8 required=5.0 tests=BAYES_00, BODY_8BITS, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) 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, 08 Jul 2020 17:23:36 -0000 Ping. Am Freitag, 29. Mai 2020, 17:08:40 MESZ hat Hannes Domani via Gdb-patches <= gdb-patches@sourceware.org> Folgendes geschrieben: > Fixes these testsuite fails on Windows: > FAIL: gdb.base/callfuncs.exp: p t_float_complex_values(fc1, fc2) > FAIL: gdb.base/callfuncs.exp: p t_float_complex_many_args(fc1, fc2, fc3, = fc4, fc1, fc2, fc3, fc4, fc1, fc2, fc3, fc4, fc1, fc2, fc3, fc4) > FAIL: gdb.base/callfuncs.exp: noproto: p t_float_complex_values(fc1, fc2) > FAIL: gdb.base/callfuncs.exp: noproto: p t_float_complex_many_args(fc1, f= c2, fc3, fc4, fc1, fc2, fc3, fc4, fc1, fc2, fc3, fc4, fc1, fc2, fc3, fc4) > FAIL: gdb.base/call-sc.exp: p/c fun(); call call-sc-tld > FAIL: gdb.base/call-sc.exp: advance to fun for return; return call-sc-tld > FAIL: gdb.base/call-sc.exp: zed L for return; return call-sc-tld > FAIL: gdb.base/call-sc.exp: return foo; return call-sc-tld > FAIL: gdb.base/call-sc.exp: return foo; synchronize pc to main() for 'cal= l-sc-tld' > FAIL: gdb.base/call-sc.exp: return foo; synchronize pc to main() for 'cal= l-sc-tld' > FAIL: gdb.base/call-sc.exp: advance to fun for finish; return call-sc-tld > FAIL: gdb.base/call-sc.exp: zed L for finish; return call-sc-tld > FAIL: gdb.base/call-sc.exp: finish foo; return call-sc-tld (the program i= s no longer running) > FAIL: gdb.base/call-sc.exp: value foo finished; return call-sc-tld > > For function arguments (callfuncs.exp), only TYPE_CODE_COMPLEX was > missing in the types passed via integer registers. > > For return values, there were a lot more issues: > - TYPE_CODE_DECFLOAT is NOT returned via XMM0. > - long double is NOT returned via XMM0. > - but __int128 IS returned via XMM0. > - the comments for TYPE_CODE_FLT state that __m128, __m128i and __m128d a= re >=C2=A0=C2=A0 returned by XMM0, and this is correct, but it doesn't actuall= y check for >=C2=A0=C2=A0 them, because they are TYPE_CODE_ARRAY with TYPE_VECTOR > > So I had to add TYPE_CODE_DECFLOAT to the arguments passed via XMM regist= er, > but I had to remove it from the values returned via XMM0 register. > > gdb/ChangeLog: > > 2020-05-29=C2=A0 Hannes Domani=C2=A0 > >=C2=A0=C2=A0=C2=A0=C2=A0 * amd64-windows-tdep.c (amd64_windows_passed_by_i= nteger_register): >=C2=A0=C2=A0=C2=A0=C2=A0 Add TYPE_CODE_COMPLEX. >=C2=A0=C2=A0=C2=A0=C2=A0 (amd64_windows_return_value): Fix types returned = via XMM0. > > gdb/testsuite/ChangeLog: > > 2020-05-29=C2=A0 Hannes Domani=C2=A0 > >=C2=A0=C2=A0=C2=A0=C2=A0 * gdb.base/call-sc.c: Fix return struct on stack = test case. >=C2=A0=C2=A0=C2=A0=C2=A0 * gdb.base/call-sc.exp: Likewise. > --- > v2: > - TYPE_CODE_COMPLEX is actually passed via integer register, not XMM >=C2=A0=C2=A0 register. > --- > gdb/amd64-windows-tdep.c=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0 | 21 +++++++++++++++++---- > gdb/testsuite/gdb.base/call-sc.c=C2=A0 |=C2=A0 6 +++++- > gdb/testsuite/gdb.base/call-sc.exp | 13 +++++++++++++ > 3 files changed, 35 insertions(+), 5 deletions(-) > > diff --git a/gdb/amd64-windows-tdep.c b/gdb/amd64-windows-tdep.c > index 487dfd45fc..e83d76257f 100644 > --- a/gdb/amd64-windows-tdep.c > +++ b/gdb/amd64-windows-tdep.c > @@ -60,6 +60,7 @@ amd64_windows_passed_by_integer_register (struct type *= type) >=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 case TYPE_CODE_RVALUE_REF: >=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 case TYPE_CODE_STRUCT: >=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 case TYPE_CODE_UNION: > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 case TYPE_CODE_COMPLEX: >=C2=A0=C2=A0=C2=A0=C2=A0 return (TYPE_LENGTH (type) =3D=3D 1 >=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 || TYPE_LENGTH (type) =3D= =3D 2 >=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 || TYPE_LENGTH (type) =3D= =3D 4 > @@ -299,17 +300,29 @@ amd64_windows_return_value (struct gdbarch *gdbarch= , struct value *function, >=C2=A0=C2=A0 switch (type->code ()) >=C2=A0=C2=A0=C2=A0=C2=A0 { >=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 case TYPE_CODE_FLT: > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 case TYPE_CODE_DECFLOAT: > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 /* __m128, __m128i, __m128d, = floats, and doubles are returned > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 via XMM0.=C2=A0 *= / > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 if (len =3D=3D 4 || len =3D= =3D 8 || len =3D=3D 16) > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 /* floats, and doubles are re= turned via XMM0.=C2=A0 */ > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 if (len =3D=3D 4 || len =3D= =3D 8) >=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 regnum =3D AM= D64_XMM0_REGNUM; >=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 break; > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 case TYPE_CODE_ARRAY: > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 /* __m128, __m128i and __m128= d are returned via XMM0.=C2=A0 */ > +=C2=A0=C2=A0=C2=A0 if (TYPE_VECTOR (type) && len =3D=3D 16) > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 { > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 enum type_code code =3D TYPE_= TARGET_TYPE (type)->code (); > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 if (code =3D=3D TYPE_CODE_INT= || code =3D=3D TYPE_CODE_FLT) > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 { > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 regnum =3D AMD64_XMM0_REGNUM; > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 break; > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 } > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 } > +=C2=A0=C2=A0=C2=A0 /* fall through */ >=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 default: >=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 /* All other values that = are 1, 2, 4 or 8 bytes long are returned >=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 v= ia RAX.=C2=A0 */ >=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 if (len =3D=3D 1 || len = =3D=3D 2 || len =3D=3D 4 || len =3D=3D 8) >=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 regnum =3D AM= D64_RAX_REGNUM; > +=C2=A0=C2=A0=C2=A0 else if (len =3D=3D 16 && type->code () =3D=3D TYPE_C= ODE_INT) > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 regnum =3D AMD64_XMM0_REGNUM; >=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 break; >=C2=A0=C2=A0=C2=A0=C2=A0 } > > diff --git a/gdb/testsuite/gdb.base/call-sc.c b/gdb/testsuite/gdb.base/ca= ll-sc.c > index ba80576ac3..eb140cd9cf 100644 > --- a/gdb/testsuite/gdb.base/call-sc.c > +++ b/gdb/testsuite/gdb.base/call-sc.c > @@ -35,6 +35,7 @@ typedef t T; > #endif > > T foo =3D '1', L; > +T init =3D '9'; > > T fun() > { > @@ -55,7 +56,10 @@ int main() > { >=C2=A0=C2=A0 int i; > > -=C2=A0 Fun(foo);=C2=A0 =C2=A0 > +=C2=A0 /* Use a different initial value then is later used in the > +=C2=A0=C2=A0=C2=A0 "value foo returned" test, so in case the struct is t= hen returned > +=C2=A0=C2=A0=C2=A0 on the stack, it doesn't have the correct value by ac= cident.=C2=A0 */ > +=C2=A0 Fun(init); > >=C2=A0=C2=A0 /* An infinite loop that first clears all the variables and t= hen >=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 calls the function.=C2=A0 This "hack"= is to make re-testing easier - > diff --git a/gdb/testsuite/gdb.base/call-sc.exp b/gdb/testsuite/gdb.base/= call-sc.exp > index 719000435a..9697c5ac24 100644 > --- a/gdb/testsuite/gdb.base/call-sc.exp > +++ b/gdb/testsuite/gdb.base/call-sc.exp > @@ -291,6 +291,19 @@ proc test_scalar_returns { } { >=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 fail "${test}" >=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 } >=C2=A0=C2=A0=C2=A0=C2=A0 } > +=C2=A0=C2=A0=C2=A0 -re " =3D 57 .*${gdb_prompt} $" { > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 if $return_value_unknown { > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 # The struct return case. > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 # The return value is stored = on the stack, and since GDB > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 # didn't override it, it stil= l has value that was stored > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 # there in the earlier Foo(in= it) call. > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 pass "${test}" > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 } else { > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 # This contradicts the above = claim that GDB knew > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 # the location of the return-= value. > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 fail "${test}" > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 } > +=C2=A0=C2=A0=C2=A0 } >=C2=A0=C2=A0=C2=A0=C2=A0 -re ".*${gdb_prompt} $" { >=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 if $return_value_unimplem= ented { >=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 # What a suprize.=C2=A0 T= he architecture hasn't implemented > -- > 2.26.2