From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from sender4-pp-o91.zoho.com (sender4-pp-o91.zoho.com [136.143.188.91]) by sourceware.org (Postfix) with ESMTPS id EC9B13853832; Fri, 28 May 2021 01:23:09 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org EC9B13853832 ARC-Seal: i=1; a=rsa-sha256; t=1622164973; cv=none; d=zohomail.com; s=zohoarc; b=VVLR9SdBaSbeFERESyXoaHRlECdofRtU4ZTb2qDeV7VXAQt3IU7LGASZuRa5M33zSjEdFUW0Cv7ARU1cHwmxNVLBvjYQ9t7sTxDYUi69W2hPLx5A5irINGaGKA0MLvMYSMMOj8zS1jT8ODma/VpIZscWExxvlS1cqudeGQAZkF8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1622164973; h=Content-Type:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:To; bh=M4pxJc8w1eYxXo950P5pox5M9AisBlXoG7k5OdKf2VM=; b=cHC6LKIJ9v0u33hF901TS3NWirtvsymTxzO+BLy6PopE5Shnf4hEFjXz7I3yxub0MLnGc4Bqqfp0UT1PK4vOH7rjNs9EyT9B5o72OMR8+chCvkahtkVMnGcOsBHClVBWOQAhZQTWIhZphMqguyiRiisBAqUHSKaZ2MMR7f+8j1g= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=zoho.com; spf=pass smtp.mailfrom=bouanto@zoho.com; dmarc=pass header.from= Received: from [192.168.1.174] (38.87.11.6 [38.87.11.6]) by mx.zohomail.com with SMTPS id 16221649710841006.9002451819499; Thu, 27 May 2021 18:22:51 -0700 (PDT) Message-ID: <8d782bf220cc81c727f842b21d835b5b991d3a35.camel@zoho.com> Subject: Re: [PATCH] libgccjit: Handle truncation and extension for casts [PR 95498] From: Antoni Boucher To: David Malcolm Cc: Tom Tromey , jit@gcc.gnu.org, Antoni Boucher via Gcc-patches Date: Thu, 27 May 2021 21:22:48 -0400 In-Reply-To: <651ead30f4fa016c233c203bd5d3e749273ab92b.camel@redhat.com> References: <20200713003002.bs5hwv4gav6ml5rt@bouanto-laptop.localdomain> <874ki6txcc.fsf@tromey.com> <20210220221706.ewfq2b3i2mzx4ice@bouanto-desktop.localdomain> <3ae55b5acc33b38c579ac9c293993c29adc55ae9.camel@redhat.com> <597ecec1c91c1176f740796e20432372377aa554.camel@redhat.com> <0f7f2bf386c29efa1403020cbb02bec815ce25fe.camel@zoho.com> <651ead30f4fa016c233c203bd5d3e749273ab92b.camel@redhat.com> Content-Type: multipart/mixed; boundary="=-BKOiuMGUTxhcH8Qok3JP" User-Agent: Evolution 3.40.1 MIME-Version: 1.0 X-Zoho-Virus-Status: 1 X-ZohoMailClient: External X-Spam-Status: No, score=-11.3 required=5.0 tests=BAYES_00, BODY_8BITS, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, KAM_SHORT, RCVD_IN_DNSWL_NONE, 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: jit@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Jit mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 28 May 2021 01:23:12 -0000 --=-BKOiuMGUTxhcH8Qok3JP Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Here's the patch with the condition removed. I believe everything is now fixed. Thanks! Le jeudi 27 mai 2021 =C3=A0 18:21 -0400, David Malcolm a =C3=A9crit=C2=A0: > On Tue, 2021-05-25 at 20:16 -0400, Antoni Boucher wrote: > > I updated the patch according to the comments by Tom Tromey. > >=20 > > There's one question left about your question regarding > > C_MAYBE_CONST_EXPR, David: > >=20 > > I am not sure if we can get a C_MAYBE_CONST_EXPR from libgccjit, > > and > > it > > indeed seems like it's only created in c-family. > > However, we do use it in libgccjit here: > > https://github.com/gcc-mirror/gcc/blob/master/gcc/jit/jit-playback.c#L1= 180 > >=20 > > I tried removing the condition `if (TREE_CODE (t_ret) !=3D > > C_MAYBE_CONST_EXPR)` and all the tests of libgccjit still pass. > >=20 > > That code was copied from here: > > https://github.com/gcc-mirror/gcc/blob/master/gcc/c/c-convert.c#L175 > > and might not be needed in libgccjit. > >=20 > > Should I just remove the condition, then? >=20 > I think so. >=20 > Thanks > Dave >=20 > >=20 > > Le jeudi 13 mai 2021 =C3=A0 19:58 -0400, David Malcolm a =C3=A9crit=C2= =A0: > > > On Thu, 2021-05-13 at 19:31 -0400, Antoni Boucher wrote: > > > > Thanks for your answer. > > > >=20 > > > > See my answers below: > > > >=20 > > > > Le jeudi 13 mai 2021 =C3=A0 18:13 -0400, David Malcolm a =C3=A9crit= =C2=A0: > > > > > On Sat, 2021-02-20 at 17:17 -0500, Antoni Boucher via Gcc- > > > > > patches > > > > > wrote: > > > > > > Hi. > > > > > > Thanks for your feedback! > > > > > >=20 > > > > >=20 > > > > > Sorry about the delay in responding. > > > > >=20 > > > > > In the past I was hesitant about adding more cast support to > > > > > libgccjit > > > > > since I felt that the user could always just create a union > > > > > to > > > > > do > > > > > the > > > > > cast.=C2=A0 Then I tried actually using the libgccjit API to do > > > > > this, > > > > > and > > > > > realized how much work it adds, so I now think we do want to > > > > > support > > > > > casting more types. > > > > >=20 > > > > >=20 > > > > > > See answers below: > > > > > >=20 > > > > > > On Sat, Feb 20, 2021 at 11:20:35AM -0700, Tom Tromey wrote: > > > > > > > > > > > > "Antoni" =3D=3D Antoni Boucher via Gcc-patches <=C2= =A0=C2=A0=20 > > > > > > > > > > > > gcc-patches@gcc.gnu.org> writes: > > > > > > >=20 > > > > > > > Antoni> gcc/jit/ > > > > > > > Antoni>=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= PR target/95498 > > > > > > > Antoni>=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= * jit-playback.c: Add support to handle > > > > > > > truncation > > > > > > > and extension > > > > > > > Antoni>=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= in the convert function. > > > > > > >=20 > > > > > > > Antoni> +=C2=A0 switch (dst_code) > > > > > > > Antoni> +=C2=A0=C2=A0=C2=A0 { > > > > > > > Antoni> +=C2=A0=C2=A0=C2=A0 case INTEGER_TYPE: > > > > > > > Antoni> +=C2=A0=C2=A0=C2=A0 case ENUMERAL_TYPE: > > > > > > > Antoni> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 t_ret =3D convert_to_= integer (dst_type, > > > > > > > expr); > > > > > > > Antoni> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 goto maybe_fold; > > > > > > > Antoni> + > > > > > > > Antoni> +=C2=A0=C2=A0=C2=A0 default: > > > > > > > Antoni> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 gcc_assert > > > > > > > (gcc::jit::active_playback_ctxt); > > > > > > > Antoni> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 gcc::jit::active_play= back_ctxt->add_error > > > > > > > (NULL, > > > > > > > "unhandled conversion"); > > > > > > > Antoni> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 fprintf (stderr, "inp= ut expression:\n"); > > > > > > > Antoni> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 debug_tree (expr); > > > > > > > Antoni> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 fprintf (stderr, "req= uested type:\n"); > > > > > > > Antoni> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 debug_tree (dst_type)= ; > > > > > > > Antoni> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 return error_mark_nod= e; > > > > > > > Antoni> + > > > > > > > Antoni> +=C2=A0=C2=A0=C2=A0 maybe_fold: > > > > > > > Antoni> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 if (TREE_CODE (t_ret)= !=3D > > > > > > > C_MAYBE_CONST_EXPR) > > > > >=20 > > > > > Do we even get C_MAYBE_CONST_EXPR in libgccjit?=C2=A0 That tree > > > > > code > > > > > is > > > > > defined in c-family/c-common.def; how can nodes of that kind > > > > > be > > > > > created > > > > > outside of the c-family? > > > >=20 > > > > I am not sure, but that seems like it's only created in c- > > > > family > > > > indeed. > > > > However, we do use it in libgccjit here: > > > >=20 > > > > https://github.com/gcc-mirror/gcc/blob/master/gcc/jit/jit-playback.= c#L1180 > > > >=20 > > > > >=20 > > > > > > > Antoni> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0t_ret =3D = fold (t_ret); > > > > > > > Antoni> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 return t_ret; > > > > > > >=20 > > > > > > > It seems weird to have a single 'goto' to maybe_fold, > > > > > > > especially > > > > > > > inside > > > > > > > a switch like this. > > > > > > >=20 > > > > > > > If you think the maybe_fold code won't be reused, then it > > > > > > > should > > > > > > > just > > > > > > > be > > > > > > > hoisted up and the 'goto' removed. > > > > > >=20 > > > > > > This actually depends on how the support for cast between > > > > > > integers > > > > > > and=20 > > > > > > pointers will be implemented (see below). > > > > > > If we will support truncating pointers (does that even make > > > > > > sense? > > > > > > and > > > > > > I=20 > > > > > > guess we cannot extend a pointer unless we add the support > > > > > > for=20 > > > > > > uint128_t), that label will be reused for that case. > > > > > > Otherwise, it might not be reused. > > > > > >=20 > > > > > > So, please tell me which option to choose and I'll update > > > > > > my > > > > > > patch. > > > > >=20 > > > > > FWIW I don't think we'll want to support truncating or > > > > > extending > > > > > pointers. > > > >=20 > > > > Ok, but do you think we'll want to support casts between > > > > integers > > > > and > > > > pointers? > > >=20 > > > Yes, though we probably want to reject truncating a pointer into > > > a > > > smaller integer type. > > >=20 > > > > I opened an issue about this > > > > (https://gcc.gnu.org/bugzilla/show_bug.cgi?id=3D95438) and would > > > > be > > > > willing to do a patch for it eventually. > > > >=20 > > > > > >=20 > > > > > > > On the other hand, if the maybe_fold code might be reused > > > > > > > for > > > > > > > some > > > > > > > other > > > > > > > case, then I suppose I would have the case end with > > > > > > > 'break' > > > > > > > and > > > > > > > then > > > > > > > have this code outside the switch. > > > > > > >=20 > > > > > > >=20 > > > > > > > In another message, you wrote: > > > > > > >=20 > > > > > > > Antoni> For your question, the current code already works > > > > > > > with > > > > > > > boolean and > > > > > > > Antoni> reals and casts between integers and pointers is > > > > > > > currently > > > > > > > not > > > > > > > Antoni> supported. > > > > > > >=20 > > > > > > > I am curious why this wasn't supported.=C2=A0 It seems like > > > > > > > something > > > > > > > that > > > > > > > one might want to do. > > > > > >=20 > > > > > > I have no idea as this is my first contribution to gcc. > > > > > > But this would be indeed very useful and I opened an issue > > > > > > about > > > > > > this:=20 > > > > > > https://gcc.gnu.org/bugzilla/show_bug.cgi?id=3D95438 > > > > > >=20 > > > > > > > thanks, > > > > > > > Tom > > > > > >=20 > > > > > > Thanks! > > > > > >=20 > > > > >=20 > > > > >=20 > > > >=20 > > > >=20 > > >=20 > > >=20 > >=20 >=20 >=20 --=-BKOiuMGUTxhcH8Qok3JP Content-Disposition: attachment; filename*0=0001-This-patch-handles-truncation-and-extension-for-cast.pat; filename*1=ch Content-Transfer-Encoding: base64 Content-Type: text/x-patch; name="0001-This-patch-handles-truncation-and-extension-for-cast.patch"; charset="UTF-8" RnJvbSAxOGI5YjA1MjY4YzUzMzY4NjMxOTM3ZTliZGYzMDg2YWFiODg4M2RkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbnRvbmkgQm91Y2hlciA8Ym91YW50b0B6b2hvLmNvbT4KRGF0 ZTogU3VuLCA1IEp1bCAyMDIwIDE5OjA3OjMwIC0wNDAwClN1YmplY3Q6IFtQQVRDSF0gVGhpcyBw YXRjaCBoYW5kbGVzIHRydW5jYXRpb24gYW5kIGV4dGVuc2lvbiBmb3IgY2FzdHMgaW4gaml0LgoK MjAyMC0wNy0xMiAgQW50b25pIEJvdWNoZXIgIDxib3VhbnRvQHpvaG8uY29tPgoKZ2NjL2ppdC8K CVBSIHRhcmdldC85NTQ5OAogICAgICAgICogaml0LXBsYXliYWNrLmMgKGNvbnZlcnQpOiBBZGQg c3VwcG9ydCB0byBoYW5kbGUgdHJ1bmNhdGlvbiBhbmQKICAgICAgICBleHRlbnNpb24gaW4gdGhl IGNvbnZlcnQgZnVuY3Rpb24uCgpnY2MvdGVzdHN1aXRlLwoJUFIgdGFyZ2V0Lzk1NDk4CgkqIGpp dC5kZy9hbGwtbm9uLWZhaWxpbmctdGVzdHMuaDogTmV3IHRlc3QuCgkqIGppdC5kZy90ZXN0LWNh c3QuYzogTmV3IHRlc3QuCgpTaWduZWQtb2ZmLWJ5OiBBbnRvbmkgQm91Y2hlciA8Ym91YW50b0B6 b2hvLmNvbT4KLS0tCiBnY2Mvaml0L2ppdC1wbGF5YmFjay5jICAgICAgICAgICAgICAgICAgICAg ICB8IDMzICsrKysrKy0tLS0KIGdjYy90ZXN0c3VpdGUvaml0LmRnL2FsbC1ub24tZmFpbGluZy10 ZXN0cy5oIHwgMTAgKysrCiBnY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LWNhc3QuYyAgICAgICAg ICAgICB8IDY2ICsrKysrKysrKysrKysrKysrKysrCiAzIGZpbGVzIGNoYW5nZWQsIDk4IGluc2Vy dGlvbnMoKyksIDExIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3Vp dGUvaml0LmRnL3Rlc3QtY2FzdC5jCgpkaWZmIC0tZ2l0IGEvZ2NjL2ppdC9qaXQtcGxheWJhY2su YyBiL2djYy9qaXQvaml0LXBsYXliYWNrLmMKaW5kZXggYzYxMzYzMDEyNDMuLmQyNmYwOGJmYzFi IDEwMDY0NAotLS0gYS9nY2Mvaml0L2ppdC1wbGF5YmFjay5jCisrKyBiL2djYy9qaXQvaml0LXBs YXliYWNrLmMKQEAgLTYyLDIyICs2MiwzMyBAQCBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxl IENPUFlJTkczLiAgSWYgbm90IHNlZQogCiAvKiBnY2M6OmppdDo6cGxheWJhY2s6OmNvbnRleHQ6 OmJ1aWxkX2Nhc3QgdXNlcyB0aGUgY29udmVydC5oIEFQSSwKICAgIHdoaWNoIGluIHR1cm4gcmVx dWlyZXMgdGhlIGZyb250ZW5kIHRvIHByb3ZpZGUgYSAiY29udmVydCIKLSAgIGZ1bmN0aW9uLCBh cHBhcmVudGx5IGFzIGEgZmFsbGJhY2suCi0KLSAgIEhlbmNlIHdlIHByb3ZpZGUgdGhpcyBkdW1t eSBvbmUsIHdpdGggdGhlIHJlcXVpcmVtZW50IHRoYXQgYW55IGNhc3RzCi0gICBhcmUgaGFuZGxl ZCBiZWZvcmUgcmVhY2hpbmcgdGhpcy4gICovCisgICBmdW5jdGlvbiwgYXBwYXJlbnRseSBhcyBh IGZhbGxiYWNrIGZvciBjYXN0cyB0aGF0IGNhbiBiZSBzaW1wbGlmaWVkCisgICAodHJ1bmNhdGlv biwgZXh0ZW5zaW9uKS4gKi8KIGV4dGVybiB0cmVlIGNvbnZlcnQgKHRyZWUgdHlwZSwgdHJlZSBl eHByKTsKIAogdHJlZQogY29udmVydCAodHJlZSBkc3RfdHlwZSwgdHJlZSBleHByKQogewotICBn Y2NfYXNzZXJ0IChnY2M6OmppdDo6YWN0aXZlX3BsYXliYWNrX2N0eHQpOwotICBnY2M6OmppdDo6 YWN0aXZlX3BsYXliYWNrX2N0eHQtPmFkZF9lcnJvciAoTlVMTCwgInVuaGFuZGxlZCBjb252ZXJz aW9uIik7Ci0gIGZwcmludGYgKHN0ZGVyciwgImlucHV0IGV4cHJlc3Npb246XG4iKTsKLSAgZGVi dWdfdHJlZSAoZXhwcik7Ci0gIGZwcmludGYgKHN0ZGVyciwgInJlcXVlc3RlZCB0eXBlOlxuIik7 Ci0gIGRlYnVnX3RyZWUgKGRzdF90eXBlKTsKLSAgcmV0dXJuIGVycm9yX21hcmtfbm9kZTsKKyAg dHJlZSB0X3JldCA9IE5VTEw7CisgIHRfcmV0ID0gdGFyZ2V0bS5jb252ZXJ0X3RvX3R5cGUgKGRz dF90eXBlLCBleHByKTsKKyAgaWYgKHRfcmV0KQorICAgICAgcmV0dXJuIHRfcmV0OworICBlbnVt IHRyZWVfY29kZSBkc3RfY29kZSA9IFRSRUVfQ09ERSAoZHN0X3R5cGUpOworICBzd2l0Y2ggKGRz dF9jb2RlKQorICAgIHsKKyAgICBjYXNlIElOVEVHRVJfVFlQRToKKyAgICBjYXNlIEVOVU1FUkFM X1RZUEU6CisgICAgICByZXR1cm4gZm9sZCAoY29udmVydF90b19pbnRlZ2VyIChkc3RfdHlwZSwg ZXhwcikpOworCisgICAgZGVmYXVsdDoKKyAgICAgIGdjY19hc3NlcnQgKGdjYzo6aml0OjphY3Rp dmVfcGxheWJhY2tfY3R4dCk7CisgICAgICBnY2M6OmppdDo6YWN0aXZlX3BsYXliYWNrX2N0eHQt PmFkZF9lcnJvciAoTlVMTCwgInVuaGFuZGxlZCBjb252ZXJzaW9uIik7CisgICAgICBmcHJpbnRm IChzdGRlcnIsICJpbnB1dCBleHByZXNzaW9uOlxuIik7CisgICAgICBkZWJ1Z190cmVlIChleHBy KTsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgInJlcXVlc3RlZCB0eXBlOlxuIik7CisgICAgICBk ZWJ1Z190cmVlIChkc3RfdHlwZSk7CisgICAgICByZXR1cm4gZXJyb3JfbWFya19ub2RlOworICAg IH0KIH0KIAogbmFtZXNwYWNlIGdjYyB7CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2ppdC5k Zy9hbGwtbm9uLWZhaWxpbmctdGVzdHMuaCBiL2djYy90ZXN0c3VpdGUvaml0LmRnL2FsbC1ub24t ZmFpbGluZy10ZXN0cy5oCmluZGV4IDQyMDJlYjc3OThiLi44NGVmNTRhMDM4NiAxMDA2NDQKLS0t IGEvZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvYWxsLW5vbi1mYWlsaW5nLXRlc3RzLmgKKysrIGIvZ2Nj L3Rlc3RzdWl0ZS9qaXQuZGcvYWxsLW5vbi1mYWlsaW5nLXRlc3RzLmgKQEAgLTk4LDYgKzk4LDEz IEBACiAjdW5kZWYgY3JlYXRlX2NvZGUKICN1bmRlZiB2ZXJpZnlfY29kZQogCisvKiB0ZXN0LWNh c3QuYyAqLworI2RlZmluZSBjcmVhdGVfY29kZSBjcmVhdGVfY29kZV9jYXN0CisjZGVmaW5lIHZl cmlmeV9jb2RlIHZlcmlmeV9jb2RlX2Nhc3QKKyNpbmNsdWRlICJ0ZXN0LWNhc3QuYyIKKyN1bmRl ZiBjcmVhdGVfY29kZQorI3VuZGVmIHZlcmlmeV9jb2RlCisKIC8qIHRlc3QtY29tcG91bmQtYXNz aWdubWVudC5jICovCiAjZGVmaW5lIGNyZWF0ZV9jb2RlIGNyZWF0ZV9jb2RlX2NvbXBvdW5kX2Fz c2lnbm1lbnQKICNkZWZpbmUgdmVyaWZ5X2NvZGUgdmVyaWZ5X2NvZGVfY29tcG91bmRfYXNzaWdu bWVudApAQCAtMzYxLDYgKzM2OCw5IEBAIGNvbnN0IHN0cnVjdCB0ZXN0Y2FzZSB0ZXN0Y2FzZXNb XSA9IHsKICAgeyJjYWxsaW5nX2ludGVybmFsX2Z1bmN0aW9uIiwKICAgIGNyZWF0ZV9jb2RlX2Nh bGxpbmdfaW50ZXJuYWxfZnVuY3Rpb24sCiAgICB2ZXJpZnlfY29kZV9jYWxsaW5nX2ludGVybmFs X2Z1bmN0aW9ufSwKKyAgeyJjYXN0IiwKKyAgIGNyZWF0ZV9jb2RlX2Nhc3QsCisgICB2ZXJpZnlf Y29kZV9jYXN0fSwKICAgeyJjb21wb3VuZF9hc3NpZ25tZW50IiwKICAgIGNyZWF0ZV9jb2RlX2Nv bXBvdW5kX2Fzc2lnbm1lbnQsCiAgICB2ZXJpZnlfY29kZV9jb21wb3VuZF9hc3NpZ25tZW50fSwK ZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3QtY2FzdC5jIGIvZ2NjL3Rlc3Rz dWl0ZS9qaXQuZGcvdGVzdC1jYXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMDAuLjJiMWUzODVhZTQwCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9qaXQu ZGcvdGVzdC1jYXN0LmMKQEAgLTAsMCArMSw2NiBAQAorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2lu Y2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJsaWJnY2Nq aXQuaCIKKworI2luY2x1ZGUgImhhcm5lc3MuaCIKKwordm9pZAorY3JlYXRlX2NvZGUgKGdjY19q aXRfY29udGV4dCAqY3R4dCwgdm9pZCAqdXNlcl9kYXRhKQoreworICAvKiBMZXQncyB0cnkgdG8g aW5qZWN0IHRoZSBlcXVpdmFsZW50IG9mOgorY2hhcgorbXlfY2FzdHMgKGludCB4KQoreworICAg cmV0dXJuIChjaGFyKShsb25nKSB4OworfQorICAgKi8KKyAgZ2NjX2ppdF90eXBlICppbnRfdHlw ZSA9CisgICAgZ2NjX2ppdF9jb250ZXh0X2dldF90eXBlIChjdHh0LCBHQ0NfSklUX1RZUEVfSU5U KTsKKyAgZ2NjX2ppdF90eXBlICpsb25nX3R5cGUgPQorICAgIGdjY19qaXRfY29udGV4dF9nZXRf dHlwZSAoY3R4dCwgR0NDX0pJVF9UWVBFX0xPTkcpOworICBnY2Nfaml0X3R5cGUgKnJldHVybl90 eXBlID0KKyAgICBnY2Nfaml0X2NvbnRleHRfZ2V0X3R5cGUgKGN0eHQsIEdDQ19KSVRfVFlQRV9D SEFSKTsKKworICBnY2Nfaml0X3BhcmFtICp4ID0KKyAgICBnY2Nfaml0X2NvbnRleHRfbmV3X3Bh cmFtICgKKyAgICAgIGN0eHQsCisgICAgICBOVUxMLAorICAgICAgaW50X3R5cGUsICJ4Iik7Cisg IGdjY19qaXRfcGFyYW0gKnBhcmFtc1sxXSA9IHt4fTsKKyAgZ2NjX2ppdF9mdW5jdGlvbiAqZnVu YyA9CisgICAgZ2NjX2ppdF9jb250ZXh0X25ld19mdW5jdGlvbiAoY3R4dCwKKwkJCQkgIE5VTEws CisJCQkJICBHQ0NfSklUX0ZVTkNUSU9OX0VYUE9SVEVELAorCQkJCSAgcmV0dXJuX3R5cGUsCisJ CQkJICAibXlfY2FzdHMiLAorCQkJCSAgMSwgcGFyYW1zLCAwKTsKKworICBnY2Nfaml0X2Jsb2Nr ICppbml0aWFsID0KKyAgICBnY2Nfaml0X2Z1bmN0aW9uX25ld19ibG9jayAoZnVuYywgImluaXRp YWwiKTsKKworICBnY2Nfaml0X2Jsb2NrX2VuZF93aXRoX3JldHVybihpbml0aWFsLCBOVUxMLAor ICAgIGdjY19qaXRfY29udGV4dF9uZXdfY2FzdChjdHh0LAorICAgICAgICBOVUxMLAorICAgICAg ICBnY2Nfaml0X2NvbnRleHRfbmV3X2Nhc3QoY3R4dCwKKyAgICAgICAgICAgIE5VTEwsCisgICAg ICAgICAgICBnY2Nfaml0X3BhcmFtX2FzX3J2YWx1ZSh4KSwKKyAgICAgICAgICAgIGxvbmdfdHlw ZQorICAgICAgICApLAorICAgICAgICByZXR1cm5fdHlwZQorICAgICkpOworfQorCit2b2lkCit2 ZXJpZnlfY29kZSAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0LCBnY2Nfaml0X3Jlc3VsdCAqcmVzdWx0 KQoreworICB0eXBlZGVmIGludCAoKm15X2Nhc3RzX2ZuX3R5cGUpIChpbnQpOworICBDSEVDS19O T05fTlVMTCAocmVzdWx0KTsKKyAgbXlfY2FzdHNfZm5fdHlwZSBteV9jYXN0cyA9CisgICAgKG15 X2Nhc3RzX2ZuX3R5cGUpZ2NjX2ppdF9yZXN1bHRfZ2V0X2NvZGUgKHJlc3VsdCwgIm15X2Nhc3Rz Iik7CisgIENIRUNLX05PTl9OVUxMIChteV9jYXN0cyk7CisgIGNoYXIgdmFsID0gbXlfY2FzdHMg KDEwKTsKKyAgbm90ZSAoIm15X2Nhc3RzIHJldHVybmVkOiAlZCIsIHZhbCk7CisgIENIRUNLX1ZB TFVFICh2YWwsIDEwKTsKK30KLS0gCjIuMzEuMQoK --=-BKOiuMGUTxhcH8Qok3JP--