From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from sender3-of-o90.zoho.com (sender3-of-o90.zoho.com [136.143.184.90]) by sourceware.org (Postfix) with ESMTPS id D7D203858D3C; Sun, 21 Nov 2021 21:45:03 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org D7D203858D3C ARC-Seal: i=1; a=rsa-sha256; t=1637531098; cv=none; d=zohomail.com; s=zohoarc; b=EVXMXV3oR73zj6cIvN5fo7bdCWiGGD8LrWbCfv8AS1QlQulJCuC4LwiG2QAx6F1uvIwS1/DIxEE+9oEYRcQdYLHZH+eEmiegCdSBRP+y6ROT7hNwp+KJcXWtsYmOsoIPYcbOcO0glTpH/y+eB08KiRVq0LQ/MM+/xYcneb3UVm0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1637531098; h=Content-Type:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:To; bh=FCXeoMls5tK98VDuKWPm8A+L+Sa2wi+iGi3buONk8HU=; b=BvA1ZI35c86KOgpT9UU2NWfb1coRRHpF7hbfWyFeOCwWtTDE8/2pw40c//0moqJh1r151sApC1PqZtisKy93np3j9VeUbdfGrdMmVWDD4HEPkkpDe52exoYmSlRFq1N71VnYgMggDXrvfyunSKHZ6bMC11qrMWuy7MFUNmWOIo4= 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 163753109509049.644431133577314; Sun, 21 Nov 2021 13:44:55 -0800 (PST) Message-ID: <8e5c4b562f6c232e592c0a585777cf325321bf54.camel@zoho.com> Subject: Re: [PATCH] libgccjit: Add support for types used by atomic builtins [PR96066] [PR96067] From: Antoni Boucher To: David Malcolm , jit@gcc.gnu.org, gcc-patches@gcc.gnu.org Date: Sun, 21 Nov 2021 16:44:53 -0500 In-Reply-To: <45c7ea23708a4ff029c0d8711f809230e90ea057.camel@redhat.com> References: <212418d2a4b81cfff1e125ddb12d0b4d10d8404a.camel@zoho.com> <3abfd5cf6546892f25a01c1772121c848487a196.camel@zoho.com> <45c7ea23708a4ff029c0d8711f809230e90ea057.camel@redhat.com> Content-Type: multipart/mixed; boundary="=-0414c1EbC0CgVXokpRfz" User-Agent: Evolution 3.42.1 MIME-Version: 1.0 X-Zoho-Virus-Status: 1 X-ZohoMailClient: External X-Spam-Status: No, score=-10.4 required=5.0 tests=BAYES_00, BODY_8BITS, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, SPF_HELO_NONE, SPF_PASS, TXREP 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: 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: Sun, 21 Nov 2021 21:45:06 -0000 --=-0414c1EbC0CgVXokpRfz Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Thanks for the review! I updated the patch. See notes below. Le samedi 20 novembre 2021 =C3=A0 13:50 -0500, David Malcolm a =C3=A9crit= =C2=A0: > On Sat, 2021-11-20 at 11:27 -0500, Antoni Boucher wrote: > > Hi. > > Here's the updated patch. > > Thanks for the review! >=20 > Thanks for the updated patch... >=20 > >=20 > > Le jeudi 20 mai 2021 =C3=A0 16:24 -0400, David Malcolm a =C3=A9crit=C2= =A0: > > > On Mon, 2021-05-17 at 21:02 -0400, Antoni Boucher via Jit wrote: > > > > Hello. > > > > This patch fixes the issue with using atomic builtins in > > > > libgccjit. > > > > Thanks to review it. > > >=20 > > > [...snip...] > > > =C2=A0 > > > > diff --git a/gcc/jit/jit-recording.c b/gcc/jit/jit-recording.c > > > > index 117ff70114c..de876ff9fa6 100644 > > > > --- a/gcc/jit/jit-recording.c > > > > +++ b/gcc/jit/jit-recording.c > > > > @@ -2598,8 +2598,18 @@ > > > > recording::memento_of_get_pointer::accepts_writes_from (type > > > > *rtype) > > > > =C2=A0=C2=A0=C2=A0=C2=A0 return false; > > > > =C2=A0 > > > > =C2=A0=C2=A0 /* It's OK to assign to a (const T *) from a (T *).=C2= =A0 */ > > > > -=C2=A0 return m_other_type->unqualified () > > > > -=C2=A0=C2=A0=C2=A0 ->accepts_writes_from (rtype_points_to); > > > > +=C2=A0 if (m_other_type->unqualified () > > > > +=C2=A0=C2=A0=C2=A0 ->accepts_writes_from (rtype_points_to)) { > > > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 return true; > > > > +=C2=A0 } > > > > + > > > > +=C2=A0 /* It's OK to assign to a (volatile const T *) from a > > > > (volatile > > > > const T *). */ > > > > +=C2=A0 if (m_other_type->unqualified ()->unqualified () > > > > +=C2=A0=C2=A0=C2=A0 ->accepts_writes_from (rtype_points_to->unquali= fied ())) { > > > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 return true; > > > > +=C2=A0 } > > >=20 > > > Presumably you need this to get the atomic builtins working? > > >=20 > > > If I'm reading the above correctly, the new test doesn't > > > distinguish > > > between the 3 different kinds of qualifiers (aligned, volatile, > > > and > > > const), it merely tries to strip some of them off. > > >=20 > > > It's not valid to e.g.=C2=A0assign to a (aligned T *) from a (const T > > > *). > > >=20 > > > Maybe we need an internal enum to discriminate between different > > > subclasses of decorated_type? >=20 > I'm still concerned about this case, my reading of the updated patch > is > that this case is still not quite correctly handled (see notes > below). > I don't think we currently have test coverage for assignment to e.g. > (aligned T *) from a (const T*); I feel that it should be an error, > without an explicit cast. >=20 > Please can you add a testcase for this? Done. >=20 > If you want to go the extra mile, given that this is code created > through an API, you could have a testcase that iterates through all > possible combinations of qualifiers (for both source and destination > pointer), and verifies that libgccjit at least doesn't crash on them > (and hopefully does the right thing on each one)=C2=A0 :/ >=20 > (perhaps doing each one in a different gcc_jit_context) >=20 > Might be nice to update test-fuzzer.c for the new qualifiers; I don't > think I've touched it in a long time. Done. >=20 > [...snip...] >=20 > > diff --git a/gcc/jit/jit-recording.h b/gcc/jit/jit-recording.h > > index 4a994fe7094..60aaba2a246 100644 > > --- a/gcc/jit/jit-recording.h > > +++ b/gcc/jit/jit-recording.h > > @@ -545,6 +545,8 @@ public: > > =C2=A0=C2=A0 virtual bool is_float () const =3D 0; > > =C2=A0=C2=A0 virtual bool is_bool () const =3D 0; > > =C2=A0=C2=A0 virtual type *is_pointer () =3D 0; > > +=C2=A0 virtual type *is_volatile () { return NULL; } > > +=C2=A0 virtual type *is_const () { return NULL; } > > =C2=A0=C2=A0 virtual type *is_array () =3D 0; > > =C2=A0=C2=A0 virtual struct_ *is_struct () { return NULL; } > > =C2=A0=C2=A0 virtual bool is_void () const { return false; } > > @@ -687,6 +689,13 @@ public: > > =C2=A0=C2=A0 /* Strip off the "const", giving the underlying type.=C2= =A0 */ > > =C2=A0=C2=A0 type *unqualified () FINAL OVERRIDE { return m_other_type;= } > > =C2=A0 > > +=C2=A0 virtual bool is_same_type_as (type *other) > > +=C2=A0 { > > +=C2=A0=C2=A0=C2=A0 return m_other_type->is_same_type_as (other->is_con= st ()); > > +=C2=A0 } >=20 > What happens if other_is_const () returns NULL, and > =C2=A0 m_other_type->is_same_type_as () > tries to call a vfunc on it... Fixed. >=20 > > + > > +=C2=A0 virtual type *is_const () { return m_other_type; } > > + > > =C2=A0=C2=A0 void replay_into (replayer *) FINAL OVERRIDE; > > =C2=A0 > > =C2=A0private: > > @@ -701,9 +710,16 @@ public: > > =C2=A0=C2=A0 memento_of_get_volatile (type *other_type) > > =C2=A0=C2=A0 : decorated_type (other_type) {} > > =C2=A0 > > +=C2=A0 virtual bool is_same_type_as (type *other) > > +=C2=A0 { > > +=C2=A0=C2=A0=C2=A0 return m_other_type->is_same_type_as (other->is_vol= atile ()); > > +=C2=A0 } >=20 > ...with similar considerations here. >=20 > i.e. is it possible for the user to create combinations of qualifiers > that lead to a vfunc call with NULL "this" (and thus a segfault?) >=20 > > + > > =C2=A0=C2=A0 /* Strip off the "volatile", giving the underlying type.= =C2=A0 */ > > =C2=A0=C2=A0 type *unqualified () FINAL OVERRIDE { return m_other_type;= } > > =C2=A0 > > +=C2=A0 virtual type *is_volatile () { return m_other_type; } > > + > > =C2=A0=C2=A0 void replay_into (replayer *) FINAL OVERRIDE; > > =C2=A0 >=20 > Hope this is constructive > Dave >=20 --=-0414c1EbC0CgVXokpRfz Content-Disposition: attachment; filename*0=0001-libgccjit-Add-support-for-types-used-by-atomic-built.pat; filename*1=ch Content-Transfer-Encoding: base64 Content-Type: text/x-patch; name="0001-libgccjit-Add-support-for-types-used-by-atomic-built.patch"; charset="UTF-8" RnJvbSBiMmQ3OGEyZWRjMWNkOGIyNGZmODhmMGRhNjA4YTY5ZjFkZmY4MjI5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbnRvbmkgQm91Y2hlciA8Ym91YW50b0B6b2hvLmNvbT4KRGF0 ZTogU3VuLCA5IE1heSAyMDIxIDIwOjE0OjM3IC0wNDAwClN1YmplY3Q6IFtQQVRDSF0gbGliZ2Nj aml0OiBBZGQgc3VwcG9ydCBmb3IgdHlwZXMgdXNlZCBieSBhdG9taWMgYnVpbHRpbnMKIFtQUjk2 MDY2XSBbUFI5NjA2N10KCjIwMjEtMTEtMjAgIEFudG9uaSBCb3VjaGVyICA8Ym91YW50b0B6b2hv LmNvbT4KCiAgICBnY2Mvaml0LwogICAgICAgICAgICBQUiB0YXJnZXQvUFI5NjA2NgogICAgICAg ICAgICBQUiB0YXJnZXQvUFI5NjA2NwogICAgICAgICAgICAqIGppdC1idWlsdGlucy5jOiBJbXBs ZW1lbnQgbWlzc2luZyB0eXBlcyBmb3IgYnVpbHRpbnMuCiAgICAgICAgICAgICogaml0LXJlY29y ZGluZy5jOjogQWxsb3cgc2VuZGluZyBhIHZvbGF0aWxlIGNvbnN0IHZvaWQgKiBhcwogICAgICAg ICAgICBhcmd1bWVudC4KICAgICAgICAgICAgKiBqaXQtcmVjb3JkaW5nLmg6IE5ldyBmdW5jdGlv bnMgKGlzX3ZvbGF0aWxlLCBpc19jb25zdCkgYW5kCiAgICAgICAgICAgICAgYWxsb3cgY29tcGFy aW5nIHF1YWxpZmllZCB0eXBlcy4KICAgIGdjYy90ZXN0c3VpdGUvCiAgICAgICAgICAgIFBSIHRh cmdldC9QUjk2MDY2CiAgICAgICAgICAgIFBSIHRhcmdldC9QUjk2MDY3CiAgICAgICAgICAgICog aml0LmRnL2FsbC1ub24tZmFpbGluZy10ZXN0cy5oOiBBZGQgdGVzdC1idWlsdGluLXR5cGVzLmMu CiAgICAgICAgICAgICogaml0LmRnL3Rlc3QtYnVpbHRpbi10eXBlcy5jCiAgICAgICAgICAgICog aml0LmRnL3Rlc3QtZXJyb3ItYmFkLWFzc2lnbm1lbnQuYwogICAgICAgICAgICAqIGppdC5kZy90 ZXN0LWZ1enplci5jOiBBZGQgZnV6emluZyBmb3IgdHlwZSBxdWFsaWZpZXJzLgoKU2lnbmVkLW9m Zi1ieTogQW50b25pIEJvdWNoZXIgPGJvdWFudG9Aem9oby5jb20+Ci0tLQogZ2NjL2ppdC9qaXQt YnVpbHRpbnMuYyAgICAgICAgICAgICAgICAgICAgICAgIHwgMTAgKy0tCiBnY2Mvaml0L2ppdC1y ZWNvcmRpbmcuYyAgICAgICAgICAgICAgICAgICAgICAgfCAgOSArKy0KIGdjYy9qaXQvaml0LXJl Y29yZGluZy5oICAgICAgICAgICAgICAgICAgICAgICB8IDIwICsrKysrCiBnY2MvdGVzdHN1aXRl L2ppdC5kZy9hbGwtbm9uLWZhaWxpbmctdGVzdHMuaCAgfCAxMCArKysKIGdjYy90ZXN0c3VpdGUv aml0LmRnL3Rlc3QtYnVpbHRpbi10eXBlcy5jICAgICB8IDQzICsrKysrKysrKysKIC4uLi9qaXQu ZGcvdGVzdC1lcnJvci1iYWQtYXNzaWdubWVudC5jICAgICAgICB8IDc4ICsrKysrKysrKysrKysr KysrKysKIGdjYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3QtZnV6emVyLmMgICAgICAgICAgICB8ICA4 ICstCiA3IGZpbGVzIGNoYW5nZWQsIDE3MCBpbnNlcnRpb25zKCspLCA4IGRlbGV0aW9ucygtKQog Y3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3QtYnVpbHRpbi10eXBl cy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1lcnJvci1i YWQtYXNzaWdubWVudC5jCgpkaWZmIC0tZ2l0IGEvZ2NjL2ppdC9qaXQtYnVpbHRpbnMuYyBiL2dj Yy9qaXQvaml0LWJ1aWx0aW5zLmMKaW5kZXggMWVhOTZmNGUwMjUuLmMyNzlkZDg1OGY5IDEwMDY0 NAotLS0gYS9nY2Mvaml0L2ppdC1idWlsdGlucy5jCisrKyBiL2djYy9qaXQvaml0LWJ1aWx0aW5z LmMKQEAgLTU0MSwxMSArNTQxLDExIEBAIGJ1aWx0aW5zX21hbmFnZXI6Om1ha2VfcHJpbWl0aXZl X3R5cGUgKGVudW0gaml0X2J1aWx0aW5fdHlwZSB0eXBlX2lkKQogICAgIC8vIGNhc2UgQlRfREZM T0FUMTI4OgogICAgIC8vIGNhc2UgQlRfVkFMSVNUX1JFRjoKICAgICAvLyBjYXNlIEJUX1ZBTElT VF9BUkc6Ci0gICAgLy8gY2FzZSBCVF9JMToKLSAgICAvLyBjYXNlIEJUX0kyOgotICAgIC8vIGNh c2UgQlRfSTQ6Ci0gICAgLy8gY2FzZSBCVF9JODoKLSAgICAvLyBjYXNlIEJUX0kxNjoKKyAgICBj YXNlIEJUX0kxOiByZXR1cm4gbV9jdHh0LT5nZXRfaW50X3R5cGUgKDEsIHRydWUpOworICAgIGNh c2UgQlRfSTI6IHJldHVybiBtX2N0eHQtPmdldF9pbnRfdHlwZSAoMiwgdHJ1ZSk7CisgICAgY2Fz ZSBCVF9JNDogcmV0dXJuIG1fY3R4dC0+Z2V0X2ludF90eXBlICg0LCB0cnVlKTsKKyAgICBjYXNl IEJUX0k4OiByZXR1cm4gbV9jdHh0LT5nZXRfaW50X3R5cGUgKDgsIHRydWUpOworICAgIGNhc2Ug QlRfSTE2OiByZXR1cm4gbV9jdHh0LT5nZXRfaW50X3R5cGUgKDE2LCB0cnVlKTsKICAgICAvLyBj YXNlIEJUX1BUUl9DT05TVF9TVFJJTkc6CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvZ2NjL2ppdC9q aXQtcmVjb3JkaW5nLmMgYi9nY2Mvaml0L2ppdC1yZWNvcmRpbmcuYwppbmRleCAxMTdmZjcwMTE0 Yy4uMmVlY2Y0NGM4ZGIgMTAwNjQ0Ci0tLSBhL2djYy9qaXQvaml0LXJlY29yZGluZy5jCisrKyBi L2djYy9qaXQvaml0LXJlY29yZGluZy5jCkBAIC0yNTk4LDggKzI1OTgsMTMgQEAgcmVjb3JkaW5n OjptZW1lbnRvX29mX2dldF9wb2ludGVyOjphY2NlcHRzX3dyaXRlc19mcm9tICh0eXBlICpydHlw ZSkKICAgICByZXR1cm4gZmFsc2U7CiAKICAgLyogSXQncyBPSyB0byBhc3NpZ24gdG8gYSAoY29u c3QgVCAqKSBmcm9tIGEgKFQgKikuICAqLwotICByZXR1cm4gbV9vdGhlcl90eXBlLT51bnF1YWxp ZmllZCAoKQotICAgIC0+YWNjZXB0c193cml0ZXNfZnJvbSAocnR5cGVfcG9pbnRzX3RvKTsKKyAg aWYgKG1fb3RoZXJfdHlwZS0+dW5xdWFsaWZpZWQgKCktPmFjY2VwdHNfd3JpdGVzX2Zyb20gKHJ0 eXBlX3BvaW50c190bykpCisgIHsKKyAgICByZXR1cm4gdHJ1ZTsKKyAgfQorCisgIC8qIEl0J3Mg T0sgdG8gYXNzaWduIHRvIGEgKHZvbGF0aWxlIGNvbnN0IFQgKikgZnJvbSBhICh2b2xhdGlsZSBj b25zdCBUICopLiAqLworICByZXR1cm4gbV9vdGhlcl90eXBlLT5pc19zYW1lX3R5cGVfYXMgKHJ0 eXBlX3BvaW50c190byk7CiB9CiAKIC8qIEltcGxlbWVudGF0aW9uIG9mIHB1cmUgdmlydHVhbCBo b29rIHJlY29yZGluZzo6bWVtZW50bzo6cmVwbGF5X2ludG8KZGlmZiAtLWdpdCBhL2djYy9qaXQv aml0LXJlY29yZGluZy5oIGIvZ2NjL2ppdC9qaXQtcmVjb3JkaW5nLmgKaW5kZXggNGE5OTRmZTcw OTQuLjMxNjNmZjY3NDhlIDEwMDY0NAotLS0gYS9nY2Mvaml0L2ppdC1yZWNvcmRpbmcuaAorKysg Yi9nY2Mvaml0L2ppdC1yZWNvcmRpbmcuaApAQCAtNTQ1LDYgKzU0NSw4IEBAIHB1YmxpYzoKICAg dmlydHVhbCBib29sIGlzX2Zsb2F0ICgpIGNvbnN0ID0gMDsKICAgdmlydHVhbCBib29sIGlzX2Jv b2wgKCkgY29uc3QgPSAwOwogICB2aXJ0dWFsIHR5cGUgKmlzX3BvaW50ZXIgKCkgPSAwOworICB2 aXJ0dWFsIHR5cGUgKmlzX3ZvbGF0aWxlICgpIHsgcmV0dXJuIE5VTEw7IH0KKyAgdmlydHVhbCB0 eXBlICppc19jb25zdCAoKSB7IHJldHVybiBOVUxMOyB9CiAgIHZpcnR1YWwgdHlwZSAqaXNfYXJy YXkgKCkgPSAwOwogICB2aXJ0dWFsIHN0cnVjdF8gKmlzX3N0cnVjdCAoKSB7IHJldHVybiBOVUxM OyB9CiAgIHZpcnR1YWwgYm9vbCBpc192b2lkICgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CkBA IC02ODcsNiArNjg5LDE1IEBAIHB1YmxpYzoKICAgLyogU3RyaXAgb2ZmIHRoZSAiY29uc3QiLCBn aXZpbmcgdGhlIHVuZGVybHlpbmcgdHlwZS4gICovCiAgIHR5cGUgKnVucXVhbGlmaWVkICgpIEZJ TkFMIE9WRVJSSURFIHsgcmV0dXJuIG1fb3RoZXJfdHlwZTsgfQogCisgIHZpcnR1YWwgYm9vbCBp c19zYW1lX3R5cGVfYXMgKHR5cGUgKm90aGVyKQorICB7CisgICAgaWYgKCFvdGhlci0+aXNfY29u c3QgKCkpCisgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIG1fb3RoZXJfdHlwZS0+aXNf c2FtZV90eXBlX2FzIChvdGhlci0+aXNfY29uc3QgKCkpOworICB9CisKKyAgdmlydHVhbCB0eXBl ICppc19jb25zdCAoKSB7IHJldHVybiBtX290aGVyX3R5cGU7IH0KKwogICB2b2lkIHJlcGxheV9p bnRvIChyZXBsYXllciAqKSBGSU5BTCBPVkVSUklERTsKIAogcHJpdmF0ZToKQEAgLTcwMSw5ICs3 MTIsMTggQEAgcHVibGljOgogICBtZW1lbnRvX29mX2dldF92b2xhdGlsZSAodHlwZSAqb3RoZXJf dHlwZSkKICAgOiBkZWNvcmF0ZWRfdHlwZSAob3RoZXJfdHlwZSkge30KIAorICB2aXJ0dWFsIGJv b2wgaXNfc2FtZV90eXBlX2FzICh0eXBlICpvdGhlcikKKyAgeworICAgIGlmICghb3RoZXItPmlz X3ZvbGF0aWxlICgpKQorICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBtX290aGVyX3R5 cGUtPmlzX3NhbWVfdHlwZV9hcyAob3RoZXItPmlzX3ZvbGF0aWxlICgpKTsKKyAgfQorCiAgIC8q IFN0cmlwIG9mZiB0aGUgInZvbGF0aWxlIiwgZ2l2aW5nIHRoZSB1bmRlcmx5aW5nIHR5cGUuICAq LwogICB0eXBlICp1bnF1YWxpZmllZCAoKSBGSU5BTCBPVkVSUklERSB7IHJldHVybiBtX290aGVy X3R5cGU7IH0KIAorICB2aXJ0dWFsIHR5cGUgKmlzX3ZvbGF0aWxlICgpIHsgcmV0dXJuIG1fb3Ro ZXJfdHlwZTsgfQorCiAgIHZvaWQgcmVwbGF5X2ludG8gKHJlcGxheWVyICopIEZJTkFMIE9WRVJS SURFOwogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvYWxsLW5v bi1mYWlsaW5nLXRlc3RzLmggYi9nY2MvdGVzdHN1aXRlL2ppdC5kZy9hbGwtbm9uLWZhaWxpbmct dGVzdHMuaAppbmRleCBhN2ZkZGY5NmRiOC4uYmU0YTQxZjhkYWQgMTAwNjQ0Ci0tLSBhL2djYy90 ZXN0c3VpdGUvaml0LmRnL2FsbC1ub24tZmFpbGluZy10ZXN0cy5oCisrKyBiL2djYy90ZXN0c3Vp dGUvaml0LmRnL2FsbC1ub24tZmFpbGluZy10ZXN0cy5oCkBAIC0xODgsNiArMTg4LDEzIEBACiAj dW5kZWYgY3JlYXRlX2NvZGUKICN1bmRlZiB2ZXJpZnlfY29kZQogCisvKiB0ZXN0LWJ1aWx0aW4t dHlwZXMuYyAqLworI2RlZmluZSBjcmVhdGVfY29kZSBjcmVhdGVfY29kZV9idWlsdGluX3R5cGVz CisjZGVmaW5lIHZlcmlmeV9jb2RlIHZlcmlmeV9jb2RlX2J1aWx0aW5fdHlwZXMKKyNpbmNsdWRl ICJ0ZXN0LWJ1aWx0aW4tdHlwZXMuYyIKKyN1bmRlZiBjcmVhdGVfY29kZQorI3VuZGVmIHZlcmlm eV9jb2RlCisKIC8qIHRlc3QtaGVsbG8td29ybGQuYyAqLwogI2RlZmluZSBjcmVhdGVfY29kZSBj cmVhdGVfY29kZV9oZWxsb193b3JsZAogI2RlZmluZSB2ZXJpZnlfY29kZSB2ZXJpZnlfY29kZV9o ZWxsb193b3JsZApAQCAtNDA4LDYgKzQxNSw5IEBAIGNvbnN0IHN0cnVjdCB0ZXN0Y2FzZSB0ZXN0 Y2FzZXNbXSA9IHsKICAgeyJmdW5jdGlvbnMiLAogICAgY3JlYXRlX2NvZGVfZnVuY3Rpb25zLAog ICAgdmVyaWZ5X2NvZGVfZnVuY3Rpb25zfSwKKyAgeyJidWlsdGluLXR5cGVzIiwKKyAgIGNyZWF0 ZV9jb2RlX2J1aWx0aW5fdHlwZXMsCisgICB2ZXJpZnlfY29kZV9idWlsdGluX3R5cGVzfSwKICAg eyJoZWxsb193b3JsZCIsCiAgICBjcmVhdGVfY29kZV9oZWxsb193b3JsZCwKICAgIHZlcmlmeV9j b2RlX2hlbGxvX3dvcmxkfSwKZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3Qt YnVpbHRpbi10eXBlcy5jIGIvZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1idWlsdGluLXR5cGVz LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjE1YjAyNmM5NTkzCi0t LSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1idWlsdGluLXR5cGVz LmMKQEAgLTAsMCArMSw0MyBAQAorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGlv Lmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dGltZS5oPgorCisjaW5jbHVkZSAi bGliZ2Njaml0LmgiCisKKyNpbmNsdWRlICJoYXJuZXNzLmgiCisKK3ZvaWQKK2NyZWF0ZV9jb2Rl IChnY2Nfaml0X2NvbnRleHQgKmN0eHQsIHZvaWQgKnVzZXJfZGF0YSkKK3sKKyAgQ0hFQ0tfTk9O X05VTEwgKGdjY19qaXRfY29udGV4dF9nZXRfYnVpbHRpbl9mdW5jdGlvbiAoY3R4dCwgIl9fYXRv bWljX2ZldGNoX2FkZF80IikpOworCisgIGdjY19qaXRfZnVuY3Rpb24gKmF0b21pY19sb2FkID0g Z2NjX2ppdF9jb250ZXh0X2dldF9idWlsdGluX2Z1bmN0aW9uIChjdHh0LCAiX19hdG9taWNfbG9h ZF84Iik7CisKKyAgZ2NjX2ppdF90eXBlICp2b2lkX3R5cGUgPQorICAgIGdjY19qaXRfY29udGV4 dF9nZXRfdHlwZSAoY3R4dCwgR0NDX0pJVF9UWVBFX1ZPSUQpOworICBnY2Nfaml0X3R5cGUgKmNv bnN0X3ZvaWRfdHlwZSA9CisgICAgZ2NjX2ppdF90eXBlX2dldF9jb25zdCAoZ2NjX2ppdF9jb250 ZXh0X2dldF90eXBlIChjdHh0LCBHQ0NfSklUX1RZUEVfVk9JRCkpOworICBnY2Nfaml0X3R5cGUg KnZvbGF0aWxlX3ZvaWRfcHRyID0KKyAgICBnY2Nfaml0X3R5cGVfZ2V0X3BvaW50ZXIgKGdjY19q aXRfdHlwZV9nZXRfdm9sYXRpbGUgKGNvbnN0X3ZvaWRfdHlwZSkpOworICBnY2Nfaml0X3R5cGUg KmxvbmdfdHlwZSA9CisgICAgZ2NjX2ppdF9jb250ZXh0X2dldF90eXBlIChjdHh0LCBHQ0NfSklU X1RZUEVfTE9ORyk7CisgIGdjY19qaXRfdHlwZSAqaW50X3R5cGUgPQorICAgIGdjY19qaXRfY29u dGV4dF9nZXRfdHlwZSAoY3R4dCwgR0NDX0pJVF9UWVBFX0lOVCk7CisgIGdjY19qaXRfZnVuY3Rp b24gKmZ1bmMgPQorICAgIGdjY19qaXRfY29udGV4dF9uZXdfZnVuY3Rpb24gKGN0eHQsIE5VTEws IEdDQ19KSVRfRlVOQ1RJT05fRVhQT1JURUQsIHZvaWRfdHlwZSwgImF0b21pY3MiLCAwLCBOVUxM LCAwKTsKKworICBnY2Nfaml0X2x2YWx1ZSAqdmFyaWFibGUgPSBnY2Nfaml0X2Z1bmN0aW9uX25l d19sb2NhbCAoZnVuYywgTlVMTCwgbG9uZ190eXBlLCAidmFyaWFibGUiKTsKKyAgZ2NjX2ppdF9y dmFsdWUgKmJ1aWx0aW5fYXJnc1syXTsKKyAgZ2NjX2ppdF9ydmFsdWUgKnBhcmFtMSA9IGdjY19q aXRfbHZhbHVlX2dldF9hZGRyZXNzKHZhcmlhYmxlLCBOVUxMKTsKKyAgYnVpbHRpbl9hcmdzWzBd ID0gZ2NjX2ppdF9jb250ZXh0X25ld19jYXN0KGN0eHQsIE5VTEwsIHBhcmFtMSwgdm9sYXRpbGVf dm9pZF9wdHIpOworICBidWlsdGluX2FyZ3NbMV0gPSBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1 ZV9mcm9tX2xvbmcoY3R4dCwgaW50X3R5cGUsIDApOworICBnY2Nfaml0X2NvbnRleHRfbmV3X2Nh bGwgKGN0eHQsIE5VTEwsIGF0b21pY19sb2FkLCAyLCBidWlsdGluX2FyZ3MpOworfQorCit2b2lk Cit2ZXJpZnlfY29kZSAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0LCBnY2Nfaml0X3Jlc3VsdCAqcmVz dWx0KQoreworICAvKiBWZXJpZnkgdGhhdCBubyBlcnJvcnMgd2VyZSBlbWl0dGVkLiAgKi8KKyAg Q0hFQ0tfTk9OX05VTEwgKHJlc3VsdCk7Cit9CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2pp dC5kZy90ZXN0LWVycm9yLWJhZC1hc3NpZ25tZW50LmMgYi9nY2MvdGVzdHN1aXRlL2ppdC5kZy90 ZXN0LWVycm9yLWJhZC1hc3NpZ25tZW50LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMDAuLmZlYTJiMzcyZTFmCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9q aXQuZGcvdGVzdC1lcnJvci1iYWQtYXNzaWdubWVudC5jCkBAIC0wLDAgKzEsNzggQEAKKyNpbmNs dWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaW5jbHVkZSAibGliZ2Njaml0 LmgiCisKKyNpbmNsdWRlICJoYXJuZXNzLmgiCisKK3ZvaWQKK2NyZWF0ZV9jb2RlIChnY2Nfaml0 X2NvbnRleHQgKmN0eHQsIHZvaWQgKnVzZXJfZGF0YSkKK3sKKyAgLyogTGV0J3MgdHJ5IHRvIGlu amVjdCB0aGUgZXF1aXZhbGVudCBvZjoKKworICAgICB2b2lkCisgICAgIHRlc3RfZm4gKCkKKyAg ICAgeworICAgICAgICBsb25nIGludGVnZXI7CisgICAgICAgIHZvbGF0aWxlIGNvbnN0IHZvaWQg KnZhcmlhYmxlOworICAgICAgICB2YXJpYWJsZSA9ICZpbnRlZ2VyOworICAgICAgICBsb25nIGFs aWduZWRfaW50ZWdlciBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDQpKSk7CisgICAgICAgIHZhcmlh YmxlID0gJmFsaWduZWRfaW50ZWdlcjsKKyAgICAgfQorCisgICAgIGFuZCB2ZXJpZnkgdGhhdCB0 aGUgQVBJIGNvbXBsYWlucyBhYm91dCB0aGUgbWlzbWF0Y2hpbmcgdHlwZXMKKyAgICAgaW4gdGhl IGFzc2lnbm1lbnRzLgorICAqLworICBnY2Nfaml0X3R5cGUgKnZvaWRfdHlwZSA9CisgICAgZ2Nj X2ppdF9jb250ZXh0X2dldF90eXBlIChjdHh0LCBHQ0NfSklUX1RZUEVfVk9JRCk7CisgIGdjY19q aXRfdHlwZSAqbG9uZ190eXBlID0KKyAgICBnY2Nfaml0X2NvbnRleHRfZ2V0X3R5cGUgKGN0eHQs IEdDQ19KSVRfVFlQRV9MT05HKTsKKyAgZ2NjX2ppdF90eXBlICpjb25zdF92b2lkX3R5cGUgPQor ICAgIGdjY19qaXRfdHlwZV9nZXRfY29uc3QgKHZvaWRfdHlwZSk7CisgIGdjY19qaXRfdHlwZSAq dm9sYXRpbGVfdm9pZF9wdHIgPQorICAgIGdjY19qaXRfdHlwZV9nZXRfcG9pbnRlciAoZ2NjX2pp dF90eXBlX2dldF92b2xhdGlsZSAoY29uc3Rfdm9pZF90eXBlKSk7CisKKyAgZ2NjX2ppdF9mdW5j dGlvbiAqZnVuYyA9CisgICAgZ2NjX2ppdF9jb250ZXh0X25ld19mdW5jdGlvbiAoY3R4dCwgTlVM TCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQ0NfSklUX0ZVTkNUSU9OX0VY UE9SVEVELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWRfdHlwZSwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdF9mbiIsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgMCwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAwKTsKKworICBnY2Nfaml0X2x2YWx1ZSAqaW50ZWdlciA9IGdjY19qaXRfZnVuY3Rp b25fbmV3X2xvY2FsIChmdW5jLCBOVUxMLCBsb25nX3R5cGUsICJpbnRlZ2VyIik7CisgIGdjY19q aXRfcnZhbHVlICphZGRyZXNzID0gZ2NjX2ppdF9sdmFsdWVfZ2V0X2FkZHJlc3MoaW50ZWdlciwg TlVMTCk7CisKKyAgZ2NjX2ppdF9sdmFsdWUgKnZhcmlhYmxlID0gZ2NjX2ppdF9mdW5jdGlvbl9u ZXdfbG9jYWwgKGZ1bmMsIE5VTEwsIHZvbGF0aWxlX3ZvaWRfcHRyLCAidmFyaWFibGUiKTsKKyAg Z2NjX2ppdF9ibG9jayAqaW5pdGlhbCA9CisgICAgZ2NjX2ppdF9mdW5jdGlvbl9uZXdfYmxvY2sg KGZ1bmMsICJpbml0aWFsIik7CisgIGdjY19qaXRfYmxvY2tfYWRkX2Fzc2lnbm1lbnQoaW5pdGlh bCwgTlVMTCwgdmFyaWFibGUsIGFkZHJlc3MpOworCisgIGdjY19qaXRfdHlwZSAqYWxpZ25lZF9s b25nX3R5cGUgPSBnY2Nfaml0X3R5cGVfZ2V0X2FsaWduZWQgKGxvbmdfdHlwZSwgNCk7CisgIGdj Y19qaXRfbHZhbHVlICphbGlnbmVkX2ludGVnZXIgPSBnY2Nfaml0X2Z1bmN0aW9uX25ld19sb2Nh bCAoZnVuYywgTlVMTCwgYWxpZ25lZF9sb25nX3R5cGUsICJhbGlnbmVkX2ludGVnZXIiKTsKKyAg Z2NjX2ppdF9ydmFsdWUgKmFsaWduZWRfYWRkcmVzcyA9IGdjY19qaXRfbHZhbHVlX2dldF9hZGRy ZXNzKGFsaWduZWRfaW50ZWdlciwgTlVMTCk7CisKKyAgZ2NjX2ppdF9ibG9ja19hZGRfYXNzaWdu bWVudChpbml0aWFsLCBOVUxMLCB2YXJpYWJsZSwgYWxpZ25lZF9hZGRyZXNzKTsKKworICBnY2Nf aml0X2Jsb2NrX2VuZF93aXRoX3ZvaWRfcmV0dXJuIChpbml0aWFsLCBOVUxMKTsKK30KKwordm9p ZAordmVyaWZ5X2NvZGUgKGdjY19qaXRfY29udGV4dCAqY3R4dCwgZ2NjX2ppdF9yZXN1bHQgKnJl c3VsdCkKK3sKKyAgQ0hFQ0tfVkFMVUUgKHJlc3VsdCwgTlVMTCk7CisKKyAgLyogVmVyaWZ5IHRo YXQgdGhlIGNvcnJlY3QgZXJyb3IgbWVzc2FnZXMgd2VyZSBlbWl0dGVkLiAgKi8KKyAgQ0hFQ0tf U1RSSU5HX1ZBTFVFIChnY2Nfaml0X2NvbnRleHRfZ2V0X2ZpcnN0X2Vycm9yIChjdHh0KSwKKwkJ ICAgICAgImdjY19qaXRfYmxvY2tfYWRkX2Fzc2lnbm1lbnQ6IgorCQkgICAgICAiIG1pc21hdGNo aW5nIHR5cGVzOiIKKwkJICAgICAgIiBhc3NpZ25tZW50IHRvIHZhcmlhYmxlICh0eXBlOiB2b2xh dGlsZSBjb25zdCB2b2lkICopIgorCQkgICAgICAiIGZyb20gJmludGVnZXIgKHR5cGU6IGxvbmcg KikiKTsKKworICBDSEVDS19TVFJJTkdfVkFMVUUgKGdjY19qaXRfY29udGV4dF9nZXRfbGFzdF9l cnJvciAoY3R4dCksCisJCSAgICAgICJnY2Nfaml0X2Jsb2NrX2FkZF9hc3NpZ25tZW50OiIKKwkJ ICAgICAgIiBtaXNtYXRjaGluZyB0eXBlczoiCisJCSAgICAgICIgYXNzaWdubWVudCB0byB2YXJp YWJsZSAodHlwZTogdm9sYXRpbGUgY29uc3Qgdm9pZCAqKSIKKwkJICAgICAgIiBmcm9tICZhbGln bmVkX2ludGVnZXIgKHR5cGU6IGxvbmcgIF9fYXR0cmlidXRlX18oKGFsaWduZWQoNCkpKSAqKSIp OworfQorCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LWZ1enplci5jIGIv Z2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1mdXp6ZXIuYwppbmRleCA0ZmQ0OWRhY2Y2ZC4uNmZh OTVkOTdiMzIgMTAwNjQ0Ci0tLSBhL2djYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3QtZnV6emVyLmMK KysrIGIvZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1mdXp6ZXIuYwpAQCAtMTkzLDEyICsxOTMs MTggQEAgZ2V0X3JhbmRvbV90eXBlIChmdXp6ZXIgKmYpCiBzdGF0aWMgZ2NjX2ppdF90eXBlICoK IG1ha2VfcmFuZG9tX3R5cGUgKGZ1enplciAqZikKIHsKLSAgc3dpdGNoIChmdXp6ZXJfcmFuZHJh bmdlIChmLCAwLCA1KSkKKyAgc3dpdGNoIChmdXp6ZXJfcmFuZHJhbmdlIChmLCAwLCA4KSkKICAg ICB7CiAgICAgY2FzZSAwOgogICAgICAgcmV0dXJuIGdjY19qaXRfdHlwZV9nZXRfcG9pbnRlciAo Z2V0X3JhbmRvbV90eXBlIChmKSk7CiAgICAgY2FzZSAxOgogICAgICAgcmV0dXJuIGdjY19qaXRf dHlwZV9nZXRfY29uc3QgKGdldF9yYW5kb21fdHlwZSAoZikpOworICAgIGNhc2UgMjoKKyAgICAg IHJldHVybiBnY2Nfaml0X3R5cGVfZ2V0X3ZlY3RvciAoZ2V0X3JhbmRvbV90eXBlIChmKSwgNCk7 CisgICAgY2FzZSAzOgorICAgICAgcmV0dXJuIGdjY19qaXRfdHlwZV9nZXRfdm9sYXRpbGUgKGdl dF9yYW5kb21fdHlwZSAoZikpOworICAgIGNhc2UgNDoKKyAgICAgIHJldHVybiBnY2Nfaml0X3R5 cGVfZ2V0X2FsaWduZWQgKGdldF9yYW5kb21fdHlwZSAoZiksIDQpOwogICAgIGRlZmF1bHQ6CiAg ICAgICB7CiAJLyogQ3JlYXRlIGEgc3RydWN0LiAgKi8KLS0gCjIuMjYuMi43LmcxOWRiOWNmYjY4 LmRpcnR5Cgo= --=-0414c1EbC0CgVXokpRfz--