From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 23188 invoked by alias); 25 Oct 2017 17:14:48 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 23179 invoked by uid 89); 25 Oct 2017 17:14:48 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-26.9 required=5.0 tests=BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,RP_MATCHES_RCVD,SPF_HELO_PASS autolearn=ham version=3.3.2 spammy=morgan, Morgan X-HELO: mx1.redhat.com Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Wed, 25 Oct 2017 17:14:45 +0000 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 5C0147E380 for ; Wed, 25 Oct 2017 17:14:44 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 5C0147E380 Authentication-Results: ext-mx04.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx04.extmail.prod.ext.phx2.redhat.com; spf=fail smtp.mailfrom=law@redhat.com Received: from localhost.localdomain (ovpn-112-30.phx2.redhat.com [10.3.112.30]) by smtp.corp.redhat.com (Postfix) with ESMTP id D67477A3AF; Wed, 25 Oct 2017 17:14:42 +0000 (UTC) Subject: Re: [RFA][PATCH] Provide a class interface to ssa_propagate To: David Malcolm , gcc-patches References: <4b766dde-648f-97a4-7366-e38e0154f29d@redhat.com> <1508878173.17132.26.camel@redhat.com> From: Jeff Law Message-ID: <77de0862-5d41-f214-9821-b107dc46ab64@redhat.com> Date: Wed, 25 Oct 2017 17:20:00 -0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.4.0 MIME-Version: 1.0 In-Reply-To: <1508878173.17132.26.camel@redhat.com> Content-Type: multipart/mixed; boundary="------------244AC66EA148CC4D677F8B10" X-IsSubscribed: yes X-SW-Source: 2017-10/txt/msg01829.txt.bz2 This is a multi-part message in MIME format. --------------244AC66EA148CC4D677F8B10 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit Content-length: 2649 On 10/24/2017 02:49 PM, David Malcolm wrote: > On Tue, 2017-10-24 at 11:40 -0600, Jeff Law wrote: >> tree-ssa-propagate.c provides a fairly generic engine to propagate >> values through a lattice while in SSA form. The engine uses two >> callbacks to allow passes to provide pass specific handling of >> statements and phi nodes. >> >> The callback mechanism served us well in a C world. It is however >> somewhat painful to have state in those callbacks without resorting >> to >> global variables or passing around void * objects which contain the >> class instance pointer. >> >> For example, tree-vrp uses the propagation engine to compute global >> range information. Its callbacks vrp_visit_stmt and vrp_visit_phi >> and >> their children read/modify a variety of tree-vrp.c statics such as >> vr_data. >> >> In some changes I'm working on I'd really like to move vr_data into a >> distinct class and avoid having direct accesses to the underlying >> array. >> >> So the problem is how are routines like vrp_visit_stmt and >> vrp_visit_phi >> and their children supposed to access the class instance? >> >> One way would be to just add a void * argument to them and pass the >> class instance around. Alternately we could leave the global >> variable >> in place and have it set up, checked and wiped clean by the vr_data >> class's ctor/dtor. Both are valid and would work, but they're a bit >> ugly IMHO. >> >> This patch takes another approach. It builds a simple little class >> around ssa_propagate where the statement and phi visitors are virtual >> functions. Thus clients can override the visitors *and* they'll get >> a >> class instance pointer. >> >> I haven't gone hog wild with C++-ification, basically just enough to >> get >> the class around ssa_propagate and its children which are going to >> need >> to pass down the class instance to the virtual functions. There's a >> lot >> more that could be done here. >> >> As you can see the client side changes are pretty minimal. They just >> derive a new class from ssa_propagation_engine to provide their >> implementations of the statement and phi visitor. More importantly, >> they can hang data off that derived class which we'll exploit later. >> >> There will be a similar patch for the substitute_and_fold which has >> callbacks of its own. >> >> Bootstrapped and regression tested on x86_64. >> >> The ChangeLog makes the patch look huge. But it's actually >> relatively >> small and the client side bits are repetitive. >> >> OK for the trunk? >> >> Jeff > > Looks like you forgot to attach the patch. Ugh. Attached, with the FINAL OVERRIDE addition. Jeff --------------244AC66EA148CC4D677F8B10 Content-Type: text/plain; charset=UTF-8; name="P1" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="P1" Content-length: 18109 CSogdHJlZS1zc2EtcHJvcGFnYXRlLmggKHNzYV9wcm9wX3Zpc2l0X3N0bXRf Zm4pOiBSZW1vdmUgdHlwZWRlZi4KCShzc2FfcHJvcF92aXNpdF9waGlfZm4p OiBMaWtld2lzZS4KCShjbGFzcyBzc2FfcHJvcGFnYXRpb25fZW5naW5lKTog TmV3IGNsYXNzIHRvIHByb3ZpZGUgYW4gaW50ZXJmYWNlCglpbnRvIHNzYV9w cm9wYWdhdGUuCgkqIHRyZWUtc3NhLXByb3BhZ2F0ZS5jIChzc2FfcHJvcF92 aXNpdF9zdG10KTogUmVtb3ZlIGZpbGUgc2NvcGVkCgl2YXJpYWJsZS4KCShz c2FfcHJvcF92aXNpdF9waGkpOiBMaWtld2lzZS4KCShzc2FfcHJvcGFnYXRp b25fZW5naW5lOjpzaW11bGF0ZV9zdG10KTogTW92ZWQgaW50byBjbGFzcy4K CUNhbGwgdmlzaXRfcGhpL3Zpc2l0X3N0bXQgZnJvbSB0aGUgY2xhc3MgcmF0 aGVyIHRoYW4gdmlhCglmaWxlIHNjb3BlZCBzdGF0aWMgdmFyaWFibGVzLgoJ KHNzYV9wcm9wYWdhdGlvbl9lbmdpbmU6OnNpbXVsYXRlX2Jsb2NrKTogTW92 ZWQgaW50byBjbGFzcy4KCShzc2FfcHJvcGFnYXRpb25fZW5naW5lOjpwcm9j ZXNzX3NzYV9lZGdlX3dvcmtsaXN0KTogU2ltaWxhcmx5LgoJKHNzYV9wcm9w YWdhdGlvbl9lbmdpbmU6OnNzYV9wcm9wYWdhdGUpOiBTaW1pbGFybHkuICBO byBsb25nZXIKCXNldCBmaWxlIHNjb3BlZCBzdGF0aWNzIGZvciB0aGUgdmlz aXRfc3RtdC92aXNpdF9waGkgY2FsbGJhY2tzLgoJKiB0cmVlLWNvbXBsZXgu YyAoY29tcGxleF9wcm9wYWdhdGUpOiBOZXcgY2xhc3MgZGVyaXZlZCBmcm9t Cglzc2FfcHJvcGFnYXRpb25fZW5naW5lLgoJKGNvbXBsZXhfcHJvcGFnYXRl Ojp2aXNpdF9zdG10KTogUmVuYW1lZCBmcm9tIGNvbXBsZXhfdmlzaXRfc3Rt dC4KCShjb21wbGV4X3Byb3BhZ2F0ZTo6dmlzaXRfcGhpKTogUmVuYW1lZCBm cm9tIGNvbXBsZXhfdmlzaXRfcGhpLgoJKHRyZWVfbG93ZXJfY29tcGxleCk6 IENhbGwgc3NhX3Byb3BhZ2F0ZSB2aWEgdGhlIGNvbXBsZXhfcHJvcGFnYXRl CgljbGFzcy4KCSogdHJlZS1zc2EtY2NwLmM6IChjY3BfcHJvcGFnYXRlKTog TmV3IGNsYXNzIGRlcml2ZWQgZnJvbQoJc3NhX3Byb3BhZ2F0aW9uX2VuZ2lu ZS4KCShjY3BfcHJvcGFnYXRlOjp2aXNpdF9waGkpOiBSZW5hbWVkIGZyb20g Y2NwX3Zpc2l0X3BoaV9ub2RlLgoJKGNjcF9wcm9wYWdhdGU6OnZpc2l0X3N0 bXQpOiBSZW5hbWVkIGZyb20gY2NwX3Zpc2l0X3N0bXQuCgkoZG9fc3NhX2Nj cCk6IENhbGwgc3NhX3Byb3BhZ2F0ZSBmcm9tIHRoZSBjY3BfcHJvcGFnYXRl IGNsYXNzLgoJKiB0cmVlLXNzYS1jb3B5LmMgKGNvcHlfcHJvcCk6IE5ldyBj bGFzcyBkZXJpdmVkIGZyb20KCXNzYV9wcm9wYWdhdGlvbl9lbmdpbmUuCgko Y29weV9wcm9wOjp2aXNpdF9zdG10KTogUmVuYW1lZCBmcm9tIGNvcHlfcHJv cF92aXNpdF9zdG10LgoJKGNvcHlfcHJvcDo6dmlzaXRfcGhpKTogUmVuYW1l ZCBmcm9tIGNvcHlfcHJvcF92aXNpdF9waGlfbm9kZS4KCShleGVjdXRlX2Nv cHlfcHJvcCk6IENhbGwgc3NhX3Byb3BhZ2F0ZSBmcm9tIHRoZSBjb3B5X3By b3AgY2xhc3MuCgkqIHRyZWUtdnJwLmMgKHZycF9wcm9wKTogTmV3IGNsYXNz IGRlcml2ZWQgZnJvbSBzc2FfcHJvcGFnYXRpb25fZW5naW5lLgoJKHZycF9w cm9wOjp2aXNpdF9zdG10KTogUmVuYW1lZCBmcm9tIHZycF92aXNpdF9zdG10 LgoJKHZycF9wcm9wOjp2aXNpdF9waGkpOiBSZW5hbWVkIGZyb20gdnJwX3Zp c2l0X3BoaV9ub2RlLgoJKGV4ZWN1dGVfdnJwKTogQ2FsbCBzc2FfcHJvcGFn YXRlIGZyb20gdGhlIHZycF9wcm9wIGNsYXNzLgoKCgpkaWZmIC0tZ2l0IGEv Z2NjL3RyZWUtY29tcGxleC5jIGIvZ2NjL3RyZWUtY29tcGxleC5jCmluZGV4 IGUyZDkzYjcuLmU5ZTdlMmEgMTAwNjQ0Ci0tLSBhL2djYy90cmVlLWNvbXBs ZXguYworKysgYi9nY2MvdHJlZS1jb21wbGV4LmMKQEAgLTYwLDYgKzYwLDEx IEBAIHR5cGVkZWYgaW50IGNvbXBsZXhfbGF0dGljZV90OwogCiAjZGVmaW5l IFBBSVIoYSwgYikgICgoYSkgPDwgMiB8IChiKSkKIAorY2xhc3MgY29tcGxl eF9wcm9wYWdhdGUgOiBwdWJsaWMgc3NhX3Byb3BhZ2F0aW9uX2VuZ2luZQor eworICBlbnVtIHNzYV9wcm9wX3Jlc3VsdCB2aXNpdF9zdG10IChnaW1wbGUg KiwgZWRnZSAqLCB0cmVlICopIEZJTkFMIE9WRVJSSURFOworICBlbnVtIHNz YV9wcm9wX3Jlc3VsdCB2aXNpdF9waGkgKGdwaGkgKikgRklOQUwgT1ZFUlJJ REU7Cit9OwogCiBzdGF0aWMgdmVjPGNvbXBsZXhfbGF0dGljZV90PiBjb21w bGV4X2xhdHRpY2VfdmFsdWVzOwogCkBAIC0zMDAsOSArMzA1LDkgQEAgaW5p dF9kb250X3NpbXVsYXRlX2FnYWluICh2b2lkKQogCiAvKiBFdmFsdWF0ZSBz dGF0ZW1lbnQgU1RNVCBhZ2FpbnN0IHRoZSBjb21wbGV4IGxhdHRpY2UgZGVm aW5lZCBhYm92ZS4gICovCiAKLXN0YXRpYyBlbnVtIHNzYV9wcm9wX3Jlc3Vs dAotY29tcGxleF92aXNpdF9zdG10IChnaW1wbGUgKnN0bXQsIGVkZ2UgKnRh a2VuX2VkZ2VfcCBBVFRSSUJVVEVfVU5VU0VELAotCQkgICAgdHJlZSAqcmVz dWx0X3ApCitlbnVtIHNzYV9wcm9wX3Jlc3VsdAorY29tcGxleF9wcm9wYWdh dGU6OnZpc2l0X3N0bXQgKGdpbXBsZSAqc3RtdCwgZWRnZSAqdGFrZW5fZWRn ZV9wIEFUVFJJQlVURV9VTlVTRUQsCisJCQkgICAgICAgdHJlZSAqcmVzdWx0 X3ApCiB7CiAgIGNvbXBsZXhfbGF0dGljZV90IG5ld19sLCBvbGRfbCwgb3Ax X2wsIG9wMl9sOwogICB1bnNpZ25lZCBpbnQgdmVyOwpAQCAtMzk1LDggKzQw MCw4IEBAIGNvbXBsZXhfdmlzaXRfc3RtdCAoZ2ltcGxlICpzdG10LCBlZGdl ICp0YWtlbl9lZGdlX3AgQVRUUklCVVRFX1VOVVNFRCwKIAogLyogRXZhbHVh dGUgYSBQSEkgbm9kZSBhZ2FpbnN0IHRoZSBjb21wbGV4IGxhdHRpY2UgZGVm aW5lZCBhYm92ZS4gICovCiAKLXN0YXRpYyBlbnVtIHNzYV9wcm9wX3Jlc3Vs dAotY29tcGxleF92aXNpdF9waGkgKGdwaGkgKnBoaSkKK2VudW0gc3NhX3By b3BfcmVzdWx0Citjb21wbGV4X3Byb3BhZ2F0ZTo6dmlzaXRfcGhpIChncGhp ICpwaGkpCiB7CiAgIGNvbXBsZXhfbGF0dGljZV90IG5ld19sLCBvbGRfbDsK ICAgdW5zaWduZWQgaW50IHZlcjsKQEAgLTE2NzMsNyArMTY3OCw4IEBAIHRy ZWVfbG93ZXJfY29tcGxleCAodm9pZCkKICAgY29tcGxleF9sYXR0aWNlX3Zh bHVlcy5zYWZlX2dyb3dfY2xlYXJlZCAobnVtX3NzYV9uYW1lcyk7CiAKICAg aW5pdF9wYXJhbWV0ZXJfbGF0dGljZV92YWx1ZXMgKCk7Ci0gIHNzYV9wcm9w YWdhdGUgKGNvbXBsZXhfdmlzaXRfc3RtdCwgY29tcGxleF92aXNpdF9waGkp OworICBjbGFzcyBjb21wbGV4X3Byb3BhZ2F0ZSBjb21wbGV4X3Byb3BhZ2F0 ZTsKKyAgY29tcGxleF9wcm9wYWdhdGUuc3NhX3Byb3BhZ2F0ZSAoKTsKIAog ICBjb21wbGV4X3ZhcmlhYmxlX2NvbXBvbmVudHMgPSBuZXcgaW50X3RyZWVf aHRhYl90eXBlICgxMCk7CiAKZGlmZiAtLWdpdCBhL2djYy90cmVlLXNzYS1j Y3AuYyBiL2djYy90cmVlLXNzYS1jY3AuYwppbmRleCA1NjliMDU3Li5kNGIz NjIzIDEwMDY0NAotLS0gYS9nY2MvdHJlZS1zc2EtY2NwLmMKKysrIGIvZ2Nj L3RyZWUtc3NhLWNjcC5jCkBAIC0xNzEsNiArMTcxLDEzIEBAIHN0cnVjdCBj Y3BfcHJvcF92YWx1ZV90IHsKICAgICB3aWRlc3RfaW50IG1hc2s7CiB9Owog CitjbGFzcyBjY3BfcHJvcGFnYXRlIDogcHVibGljIHNzYV9wcm9wYWdhdGlv bl9lbmdpbmUKK3sKKyBwdWJsaWM6CisgIGVudW0gc3NhX3Byb3BfcmVzdWx0 IHZpc2l0X3N0bXQgKGdpbXBsZSAqLCBlZGdlICosIHRyZWUgKikgRklOQUwg T1ZFUlJJREU7CisgIGVudW0gc3NhX3Byb3BfcmVzdWx0IHZpc2l0X3BoaSAo Z3BoaSAqKSBGSU5BTCBPVkVSUklERTsKK307CisKIC8qIEFycmF5IG9mIHBy b3BhZ2F0ZWQgY29uc3RhbnQgdmFsdWVzLiAgQWZ0ZXIgcHJvcGFnYXRpb24s CiAgICBDT05TVF9WQUxbSV0uVkFMVUUgaG9sZHMgdGhlIGNvbnN0YW50IHZh bHVlIGZvciBTU0FfTkFNRShJKS4gIElmCiAgICB0aGUgY29uc3RhbnQgaXMg aGVsZCBpbiBhbiBTU0EgbmFtZSByZXByZXNlbnRpbmcgYSBtZW1vcnkgc3Rv cmUKQEAgLTEwNjQsOCArMTA3MSw4IEBAIGNjcF9sYXR0aWNlX21lZXQgKGNj cF9wcm9wX3ZhbHVlX3QgKnZhbDEsIGNjcF9wcm9wX3ZhbHVlX3QgKnZhbDIp CiAgICBQSEkgbm9kZSBpcyBkZXRlcm1pbmVkIGNhbGxpbmcgY2NwX2xhdHRp Y2VfbWVldCB3aXRoIGFsbCB0aGUgYXJndW1lbnRzCiAgICBvZiB0aGUgUEhJ IG5vZGUgdGhhdCBhcmUgaW5jb21pbmcgdmlhIGV4ZWN1dGFibGUgZWRnZXMu ICAqLwogCi1zdGF0aWMgZW51bSBzc2FfcHJvcF9yZXN1bHQKLWNjcF92aXNp dF9waGlfbm9kZSAoZ3BoaSAqcGhpKQorZW51bSBzc2FfcHJvcF9yZXN1bHQK K2NjcF9wcm9wYWdhdGU6OnZpc2l0X3BoaSAoZ3BoaSAqcGhpKQogewogICB1 bnNpZ25lZCBpOwogICBjY3BfcHJvcF92YWx1ZV90IG5ld192YWw7CkBAIC0y Mzc4LDggKzIzODUsOCBAQCB2aXNpdF9jb25kX3N0bXQgKGdpbXBsZSAqc3Rt dCwgZWRnZSAqdGFrZW5fZWRnZV9wKQogICAgdmFsdWUsIHNldCAqVEFLRU5f RURHRV9QIGFjY29yZGluZ2x5LiAgSWYgU1RNVCBwcm9kdWNlcyBhIHZhcnlp bmcKICAgIHZhbHVlLCByZXR1cm4gU1NBX1BST1BfVkFSWUlORy4gICovCiAK LXN0YXRpYyBlbnVtIHNzYV9wcm9wX3Jlc3VsdAotY2NwX3Zpc2l0X3N0bXQg KGdpbXBsZSAqc3RtdCwgZWRnZSAqdGFrZW5fZWRnZV9wLCB0cmVlICpvdXRw dXRfcCkKK2VudW0gc3NhX3Byb3BfcmVzdWx0CitjY3BfcHJvcGFnYXRlOjp2 aXNpdF9zdG10IChnaW1wbGUgKnN0bXQsIGVkZ2UgKnRha2VuX2VkZ2VfcCwg dHJlZSAqb3V0cHV0X3ApCiB7CiAgIHRyZWUgZGVmOwogICBzc2Ffb3BfaXRl ciBpdGVyOwpAQCAtMjQ0MSw3ICsyNDQ4LDggQEAgZG9fc3NhX2NjcCAoYm9v bCBub256ZXJvX3ApCiAgIGNhbGN1bGF0ZV9kb21pbmFuY2VfaW5mbyAoQ0RJ X0RPTUlOQVRPUlMpOwogCiAgIGNjcF9pbml0aWFsaXplICgpOwotICBzc2Ff cHJvcGFnYXRlIChjY3BfdmlzaXRfc3RtdCwgY2NwX3Zpc2l0X3BoaV9ub2Rl KTsKKyAgY2xhc3MgY2NwX3Byb3BhZ2F0ZSBjY3BfcHJvcGFnYXRlOworICBj Y3BfcHJvcGFnYXRlLnNzYV9wcm9wYWdhdGUgKCk7CiAgIGlmIChjY3BfZmlu YWxpemUgKG5vbnplcm9fcCB8fCBmbGFnX2lwYV9iaXRfY3ApKQogICAgIHsK ICAgICAgIHRvZG8gPSAoVE9ET19jbGVhbnVwX2NmZyB8IFRPRE9fdXBkYXRl X3NzYSk7CmRpZmYgLS1naXQgYS9nY2MvdHJlZS1zc2EtY29weS5jIGIvZ2Nj L3RyZWUtc3NhLWNvcHkuYwppbmRleCA5ZjBmZTU0Li45ZGIxMWUyIDEwMDY0 NAotLS0gYS9nY2MvdHJlZS1zc2EtY29weS5jCisrKyBiL2djYy90cmVlLXNz YS1jb3B5LmMKQEAgLTY4LDYgKzY4LDEzIEBAIHN0cnVjdCBwcm9wX3ZhbHVl X3QgewogICAgIHRyZWUgdmFsdWU7CiB9OwogCitjbGFzcyBjb3B5X3Byb3Ag OiBwdWJsaWMgc3NhX3Byb3BhZ2F0aW9uX2VuZ2luZQoreworIHB1YmxpYzoK KyAgZW51bSBzc2FfcHJvcF9yZXN1bHQgdmlzaXRfc3RtdCAoZ2ltcGxlICos IGVkZ2UgKiwgdHJlZSAqKSBGSU5BTCBPVkVSUklERTsKKyAgZW51bSBzc2Ff cHJvcF9yZXN1bHQgdmlzaXRfcGhpIChncGhpICopIEZJTkFMIE9WRVJSSURF OworfTsKKwogc3RhdGljIHByb3BfdmFsdWVfdCAqY29weV9vZjsKIHN0YXRp YyB1bnNpZ25lZCBuX2NvcHlfb2Y7CiAKQEAgLTI2Myw4ICsyNzAsOCBAQCBj b3B5X3Byb3BfdmlzaXRfY29uZF9zdG10IChnaW1wbGUgKnN0bXQsIGVkZ2Ug KnRha2VuX2VkZ2VfcCkKICAgIElmIHRoZSBuZXcgdmFsdWUgcHJvZHVjZWQg YnkgU1RNVCBpcyB2YXJ5aW5nLCByZXR1cm4KICAgIFNTQV9QUk9QX1ZBUllJ TkcuICAqLwogCi1zdGF0aWMgZW51bSBzc2FfcHJvcF9yZXN1bHQKLWNvcHlf cHJvcF92aXNpdF9zdG10IChnaW1wbGUgKnN0bXQsIGVkZ2UgKnRha2VuX2Vk Z2VfcCwgdHJlZSAqcmVzdWx0X3ApCitlbnVtIHNzYV9wcm9wX3Jlc3VsdAor Y29weV9wcm9wOjp2aXNpdF9zdG10IChnaW1wbGUgKnN0bXQsIGVkZ2UgKnRh a2VuX2VkZ2VfcCwgdHJlZSAqcmVzdWx0X3ApCiB7CiAgIGVudW0gc3NhX3By b3BfcmVzdWx0IHJldHZhbDsKIApAQCAtMzE3LDggKzMyNCw4IEBAIGNvcHlf cHJvcF92aXNpdF9zdG10IChnaW1wbGUgKnN0bXQsIGVkZ2UgKnRha2VuX2Vk Z2VfcCwgdHJlZSAqcmVzdWx0X3ApCiAvKiBWaXNpdCBQSEkgbm9kZSBQSEku ICBJZiBhbGwgdGhlIGFyZ3VtZW50cyBwcm9kdWNlIHRoZSBzYW1lIHZhbHVl LAogICAgc2V0IGl0IHRvIGJlIHRoZSB2YWx1ZSBvZiB0aGUgTEhTIG9mIFBI SS4gICovCiAKLXN0YXRpYyBlbnVtIHNzYV9wcm9wX3Jlc3VsdAotY29weV9w cm9wX3Zpc2l0X3BoaV9ub2RlIChncGhpICpwaGkpCitlbnVtIHNzYV9wcm9w X3Jlc3VsdAorY29weV9wcm9wOjp2aXNpdF9waGkgKGdwaGkgKnBoaSkKIHsK ICAgZW51bSBzc2FfcHJvcF9yZXN1bHQgcmV0dmFsOwogICB1bnNpZ25lZCBp OwpAQCAtNjAxLDcgKzYwOCw4IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQKIGV4 ZWN1dGVfY29weV9wcm9wICh2b2lkKQogewogICBpbml0X2NvcHlfcHJvcCAo KTsKLSAgc3NhX3Byb3BhZ2F0ZSAoY29weV9wcm9wX3Zpc2l0X3N0bXQsIGNv cHlfcHJvcF92aXNpdF9waGlfbm9kZSk7CisgIGNsYXNzIGNvcHlfcHJvcCBj b3B5X3Byb3A7CisgIGNvcHlfcHJvcC5zc2FfcHJvcGFnYXRlICgpOwogICBp ZiAoZmluaV9jb3B5X3Byb3AgKCkpCiAgICAgcmV0dXJuIFRPRE9fY2xlYW51 cF9jZmc7CiAgIHJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZ2NjL3RyZWUtc3Nh LXByb3BhZ2F0ZS5jIGIvZ2NjL3RyZWUtc3NhLXByb3BhZ2F0ZS5jCmluZGV4 IDAwYWIzZDcuLjkwZGYyODUgMTAwNjQ0Ci0tLSBhL2djYy90cmVlLXNzYS1w cm9wYWdhdGUuYworKysgYi9nY2MvdHJlZS1zc2EtcHJvcGFnYXRlLmMKQEAg LTEwOCwxMCArMTA4LDYgQEAKICAgICAgWzNdIEFkdmFuY2VkIENvbXBpbGVy IERlc2lnbiBhbmQgSW1wbGVtZW50YXRpb24sCiAJIFN0ZXZlbiBNdWNobmlj aywgTW9yZ2FuIEthdWZtYW5uLCAxOTk3LCBTZWN0aW9uIDEyLjYgICovCiAK LS8qIEZ1bmN0aW9uIHBvaW50ZXJzIHVzZWQgdG8gcGFyYW1ldGVyaXplIHRo ZSBwcm9wYWdhdGlvbiBlbmdpbmUuICAqLwotc3RhdGljIHNzYV9wcm9wX3Zp c2l0X3N0bXRfZm4gc3NhX3Byb3BfdmlzaXRfc3RtdDsKLXN0YXRpYyBzc2Ff cHJvcF92aXNpdF9waGlfZm4gc3NhX3Byb3BfdmlzaXRfcGhpOwotCiAvKiBX b3JrbGlzdCBvZiBjb250cm9sIGZsb3cgZWRnZSBkZXN0aW5hdGlvbnMuICBU aGlzIGNvbnRhaW5zCiAgICB0aGUgQ0ZHIG9yZGVyIG51bWJlciBvZiB0aGUg YmxvY2tzIHNvIHdlIGNhbiBpdGVyYXRlIGluIENGRwogICAgb3JkZXIgYnkg dmlzaXRpbmcgaW4gYml0LW9yZGVyLiAgKi8KQEAgLTIxNyw4ICsyMTMsOCBA QCBhZGRfY29udHJvbF9lZGdlIChlZGdlIGUpCiAKIC8qIFNpbXVsYXRlIHRo ZSBleGVjdXRpb24gb2YgU1RNVCBhbmQgdXBkYXRlIHRoZSB3b3JrIGxpc3Rz IGFjY29yZGluZ2x5LiAgKi8KIAotc3RhdGljIHZvaWQKLXNpbXVsYXRlX3N0 bXQgKGdpbXBsZSAqc3RtdCkKK3ZvaWQKK3NzYV9wcm9wYWdhdGlvbl9lbmdp bmU6OnNpbXVsYXRlX3N0bXQgKGdpbXBsZSAqc3RtdCkKIHsKICAgZW51bSBz c2FfcHJvcF9yZXN1bHQgdmFsID0gU1NBX1BST1BfTk9UX0lOVEVSRVNUSU5H OwogICBlZGdlIHRha2VuX2VkZ2UgPSBOVUxMOwpAQCAtMjM0LDExICsyMzAs MTEgQEAgc2ltdWxhdGVfc3RtdCAoZ2ltcGxlICpzdG10KQogCiAgIGlmIChn aW1wbGVfY29kZSAoc3RtdCkgPT0gR0lNUExFX1BISSkKICAgICB7Ci0gICAg ICB2YWwgPSBzc2FfcHJvcF92aXNpdF9waGkgKGFzX2EgPGdwaGkgKj4gKHN0 bXQpKTsKKyAgICAgIHZhbCA9IHZpc2l0X3BoaSAoYXNfYSA8Z3BoaSAqPiAo c3RtdCkpOwogICAgICAgb3V0cHV0X25hbWUgPSBnaW1wbGVfcGhpX3Jlc3Vs dCAoc3RtdCk7CiAgICAgfQogICBlbHNlCi0gICAgdmFsID0gc3NhX3Byb3Bf dmlzaXRfc3RtdCAoc3RtdCwgJnRha2VuX2VkZ2UsICZvdXRwdXRfbmFtZSk7 CisgICAgdmFsID0gdmlzaXRfc3RtdCAoc3RtdCwgJnRha2VuX2VkZ2UsICZv dXRwdXRfbmFtZSk7CiAKICAgaWYgKHZhbCA9PSBTU0FfUFJPUF9WQVJZSU5H KQogICAgIHsKQEAgLTMyMSw4ICszMTcsOCBAQCBzaW11bGF0ZV9zdG10IChn aW1wbGUgKnN0bXQpCiAgICB3aGVuIGFuIFNTQSBlZGdlIGlzIGFkZGVkIHRv IGl0IGluIHNpbXVsYXRlX3N0bXQuICBSZXR1cm4gdHJ1ZSBpZiBhIHN0bXQK ICAgIHdhcyBzaW11bGF0ZWQuICAqLwogCi1zdGF0aWMgdm9pZAotcHJvY2Vz c19zc2FfZWRnZV93b3JrbGlzdCAoKQordm9pZAorc3NhX3Byb3BhZ2F0aW9u X2VuZ2luZTo6cHJvY2Vzc19zc2FfZWRnZV93b3JrbGlzdCAodm9pZCkKIHsK ICAgLyogUHJvY2VzcyB0aGUgbmV4dCBlbnRyeSBmcm9tIHRoZSB3b3JrbGlz dC4gICovCiAgIHVuc2lnbmVkIHN0bXRfdWlkID0gYml0bWFwX2ZpcnN0X3Nl dF9iaXQgKHNzYV9lZGdlX3dvcmtsaXN0KTsKQEAgLTM0NSw4ICszNDEsOCBA QCBwcm9jZXNzX3NzYV9lZGdlX3dvcmtsaXN0ICgpCiAvKiBTaW11bGF0ZSB0 aGUgZXhlY3V0aW9uIG9mIEJMT0NLLiAgRXZhbHVhdGUgdGhlIHN0YXRlbWVu dCBhc3NvY2lhdGVkCiAgICB3aXRoIGVhY2ggdmFyaWFibGUgcmVmZXJlbmNl IGluc2lkZSB0aGUgYmxvY2suICAqLwogCi1zdGF0aWMgdm9pZAotc2ltdWxh dGVfYmxvY2sgKGJhc2ljX2Jsb2NrIGJsb2NrKQordm9pZAorc3NhX3Byb3Bh Z2F0aW9uX2VuZ2luZTo6c2ltdWxhdGVfYmxvY2sgKGJhc2ljX2Jsb2NrIGJs b2NrKQogewogICBnaW1wbGVfc3RtdF9pdGVyYXRvciBnc2k7CiAKQEAgLTc4 MSwxOSArNzc3LDE1IEBAIHVwZGF0ZV9jYWxsX2Zyb21fdHJlZSAoZ2ltcGxl X3N0bXRfaXRlcmF0b3IgKnNpX3AsIHRyZWUgZXhwcikKICAgICByZXR1cm4g ZmFsc2U7CiB9CiAKLQogLyogRW50cnkgcG9pbnQgdG8gdGhlIHByb3BhZ2F0 aW9uIGVuZ2luZS4KIAotICAgVklTSVRfU1RNVCBpcyBjYWxsZWQgZm9yIGV2 ZXJ5IHN0YXRlbWVudCB2aXNpdGVkLgotICAgVklTSVRfUEhJIGlzIGNhbGxl ZCBmb3IgZXZlcnkgUEhJIG5vZGUgdmlzaXRlZC4gICovCisgICBUaGUgVklT SVRfU1RNVCB2aXJ0dWFsIGZ1bmN0aW9uIGlzIGNhbGxlZCBmb3IgZXZlcnkg c3RhdGVtZW50CisgICB2aXNpdGVkIGFuZCB0aGUgVklTSVRfUEhJIHZpcnR1 YWwgZnVuY3Rpb24gaXMgY2FsbGVkIGZvciBldmVyeSBQSEkKKyAgIG5vZGUg dmlzaXRlZC4gICovCiAKIHZvaWQKLXNzYV9wcm9wYWdhdGUgKHNzYV9wcm9w X3Zpc2l0X3N0bXRfZm4gdmlzaXRfc3RtdCwKLQkgICAgICAgc3NhX3Byb3Bf dmlzaXRfcGhpX2ZuIHZpc2l0X3BoaSkKK3NzYV9wcm9wYWdhdGlvbl9lbmdp bmU6OnNzYV9wcm9wYWdhdGUgKHZvaWQpCiB7Ci0gIHNzYV9wcm9wX3Zpc2l0 X3N0bXQgPSB2aXNpdF9zdG10OwotICBzc2FfcHJvcF92aXNpdF9waGkgPSB2 aXNpdF9waGk7Ci0KICAgc3NhX3Byb3BfaW5pdCAoKTsKIAogICAvKiBJdGVy YXRlIHVudGlsIHRoZSB3b3JrbGlzdHMgYXJlIGVtcHR5LiAgKi8KZGlmZiAt LWdpdCBhL2djYy90cmVlLXNzYS1wcm9wYWdhdGUuaCBiL2djYy90cmVlLXNz YS1wcm9wYWdhdGUuaAppbmRleCA5YThlY2M4Li5jZmY5ZTUzIDEwMDY0NAot LS0gYS9nY2MvdHJlZS1zc2EtcHJvcGFnYXRlLmgKKysrIGIvZ2NjL3RyZWUt c3NhLXByb3BhZ2F0ZS5oCkBAIC02Miw5ICs2Miw2IEBAIGVudW0gc3NhX3By b3BfcmVzdWx0IHsKIAogCiAvKiBDYWxsLWJhY2sgZnVuY3Rpb25zIHVzZWQg YnkgdGhlIHZhbHVlIHByb3BhZ2F0aW9uIGVuZ2luZS4gICovCi10eXBlZGVm IGVudW0gc3NhX3Byb3BfcmVzdWx0ICgqc3NhX3Byb3BfdmlzaXRfc3RtdF9m bikgKGdpbXBsZSAqLCBlZGdlICosCi0JCQkJCQkJdHJlZSAqKTsKLXR5cGVk ZWYgZW51bSBzc2FfcHJvcF9yZXN1bHQgKCpzc2FfcHJvcF92aXNpdF9waGlf Zm4pIChncGhpICopOwogdHlwZWRlZiBib29sICgqc3NhX3Byb3BfZm9sZF9z dG10X2ZuKSAoZ2ltcGxlX3N0bXRfaXRlcmF0b3IgKmdzaSk7CiB0eXBlZGVm IHRyZWUgKCpzc2FfcHJvcF9nZXRfdmFsdWVfZm4pICh0cmVlKTsKIApAQCAt NzMsNyArNzAsNiBAQCBleHRlcm4gYm9vbCB2YWxpZF9naW1wbGVfcmhzX3Ag KHRyZWUpOwogZXh0ZXJuIHZvaWQgbW92ZV9zc2FfZGVmaW5pbmdfc3RtdF9m b3JfZGVmcyAoZ2ltcGxlICosIGdpbXBsZSAqKTsKIGV4dGVybiBib29sIHVw ZGF0ZV9naW1wbGVfY2FsbCAoZ2ltcGxlX3N0bXRfaXRlcmF0b3IgKiwgdHJl ZSwgaW50LCAuLi4pOwogZXh0ZXJuIGJvb2wgdXBkYXRlX2NhbGxfZnJvbV90 cmVlIChnaW1wbGVfc3RtdF9pdGVyYXRvciAqLCB0cmVlKTsKLWV4dGVybiB2 b2lkIHNzYV9wcm9wYWdhdGUgKHNzYV9wcm9wX3Zpc2l0X3N0bXRfZm4sIHNz YV9wcm9wX3Zpc2l0X3BoaV9mbik7CiBleHRlcm4gYm9vbCBzdG10X21ha2Vz X3NpbmdsZV9zdG9yZSAoZ2ltcGxlICopOwogZXh0ZXJuIGJvb2wgc3Vic3Rp dHV0ZV9hbmRfZm9sZCAoc3NhX3Byb3BfZ2V0X3ZhbHVlX2ZuLCBzc2FfcHJv cF9mb2xkX3N0bXRfZm4pOwogZXh0ZXJuIGJvb2wgbWF5X3Byb3BhZ2F0ZV9j b3B5ICh0cmVlLCB0cmVlKTsKQEAgLTg1LDQgKzgxLDI3IEBAIGV4dGVybiB2 b2lkIHByb3BhZ2F0ZV90cmVlX3ZhbHVlICh0cmVlICosIHRyZWUpOwogZXh0 ZXJuIHZvaWQgcHJvcGFnYXRlX3RyZWVfdmFsdWVfaW50b19zdG10IChnaW1w bGVfc3RtdF9pdGVyYXRvciAqLCB0cmVlKTsKIGV4dGVybiBib29sIHJlcGxh Y2VfdXNlc19pbiAoZ2ltcGxlICpzdG10LCBzc2FfcHJvcF9nZXRfdmFsdWVf Zm4gZ2V0X3ZhbHVlKTsKIAorLyogUHVibGljIGludGVyZmFjZSBpbnRvIHRo ZSBTU0EgcHJvcGFnYXRpb24gZW5naW5lLiAgQ2xpZW50cyBzaG91bGQgaW5o ZXJpdAorICAgZnJvbSB0aGlzIGNsYXNzIGFuZCBwcm92aWRlIHRoZWlyIG93 biB2aXNpdG9ycy4gICovCisKK2NsYXNzIHNzYV9wcm9wYWdhdGlvbl9lbmdp bmUKK3sKKyBwdWJsaWM6CisKKyAgLyogTWFpbiBpbnRlcmZhY2UgaW50byB0 aGUgcHJvcGFnYXRpb24gZW5naW5lLiAgKi8KKyAgdm9pZCBzc2FfcHJvcGFn YXRlICh2b2lkKTsKKworICAvKiBWaXJ0dWFsIGZ1bmN0aW9ucyB0aGUgY2xp ZW50cyBtdXN0IHByb3ZpZGUgdG8gdmlzaXQgc3RhdGVtZW50cworICAgICBh bmQgcGhpIG5vZGVzIHJlc3BlY3RpdmVseS4gICovCisgIHZpcnR1YWwgZW51 bSBzc2FfcHJvcF9yZXN1bHQgdmlzaXRfc3RtdCAoZ2ltcGxlICosIGVkZ2Ug KiwgdHJlZSAqKSA9IDA7CisgIHZpcnR1YWwgZW51bSBzc2FfcHJvcF9yZXN1 bHQgdmlzaXRfcGhpIChncGhpICopID0gMDsKKworIHByaXZhdGU6CisgIC8q IEludGVybmFsIGltcGxlbWVudGF0aW9uIGRldGFpbHMuICAqLworICB2b2lk IHNpbXVsYXRlX3N0bXQgKGdpbXBsZSAqc3RtdCk7CisgIHZvaWQgcHJvY2Vz c19zc2FfZWRnZV93b3JrbGlzdCAodm9pZCk7CisgIHZvaWQgc2ltdWxhdGVf YmxvY2sgKGJhc2ljX2Jsb2NrKTsKKworfTsKKwogI2VuZGlmIC8qIF9UUkVF X1NTQV9QUk9QQUdBVEVfSCAgKi8KZGlmZiAtLWdpdCBhL2djYy90cmVlLXZy cC5jIGIvZ2NjL3RyZWUtdnJwLmMKaW5kZXggMmM4NmI4ZS4uODVkZWVjYyAx MDA2NDQKLS0tIGEvZ2NjL3RyZWUtdnJwLmMKKysrIGIvZ2NjL3RyZWUtdnJw LmMKQEAgLTgwOTIsNiArODA5MiwxMyBAQCBleHRyYWN0X3JhbmdlX2Zyb21f c3RtdCAoZ2ltcGxlICpzdG10LCBlZGdlICp0YWtlbl9lZGdlX3AsCiAgICAg dnJwX3Zpc2l0X3N3aXRjaF9zdG10IChhc19hIDxnc3dpdGNoICo+IChzdG10 KSwgdGFrZW5fZWRnZV9wKTsKIH0KIAorY2xhc3MgdnJwX3Byb3AgOiBwdWJs aWMgc3NhX3Byb3BhZ2F0aW9uX2VuZ2luZQoreworIHB1YmxpYzoKKyAgZW51 bSBzc2FfcHJvcF9yZXN1bHQgdmlzaXRfc3RtdCAoZ2ltcGxlICosIGVkZ2Ug KiwgdHJlZSAqKSBGSU5BTCBPVkVSUklERTsKKyAgZW51bSBzc2FfcHJvcF9y ZXN1bHQgdmlzaXRfcGhpIChncGhpICopIEZJTkFMIE9WRVJSSURFOworfTsK KwogLyogRXZhbHVhdGUgc3RhdGVtZW50IFNUTVQuICBJZiB0aGUgc3RhdGVt ZW50IHByb2R1Y2VzIGEgdXNlZnVsIHJhbmdlLAogICAgcmV0dXJuIFNTQV9Q Uk9QX0lOVEVSRVNUSU5HIGFuZCByZWNvcmQgdGhlIFNTQSBuYW1lIHdpdGgg dGhlCiAgICBpbnRlcmVzdGluZyByYW5nZSBpbnRvICpPVVRQVVRfUC4KQEAg LTgxMDEsOCArODEwOCw4IEBAIGV4dHJhY3RfcmFuZ2VfZnJvbV9zdG10IChn aW1wbGUgKnN0bXQsIGVkZ2UgKnRha2VuX2VkZ2VfcCwKIAogICAgSWYgU1RN VCBwcm9kdWNlcyBhIHZhcnlpbmcgdmFsdWUsIHJldHVybiBTU0FfUFJPUF9W QVJZSU5HLiAgKi8KIAotc3RhdGljIGVudW0gc3NhX3Byb3BfcmVzdWx0Ci12 cnBfdmlzaXRfc3RtdCAoZ2ltcGxlICpzdG10LCBlZGdlICp0YWtlbl9lZGdl X3AsIHRyZWUgKm91dHB1dF9wKQorZW51bSBzc2FfcHJvcF9yZXN1bHQKK3Zy cF9wcm9wOjp2aXNpdF9zdG10IChnaW1wbGUgKnN0bXQsIGVkZ2UgKnRha2Vu X2VkZ2VfcCwgdHJlZSAqb3V0cHV0X3ApCiB7CiAgIHZhbHVlX3JhbmdlIHZy ID0gVlJfSU5JVElBTElaRVI7CiAgIHRyZWUgbGhzID0gZ2ltcGxlX2dldF9s aHMgKHN0bXQpOwpAQCAtOTE5Myw4ICs5MjAwLDggQEAgdXBkYXRlX3Jhbmdl OgogICAgZWRnZXMuICBJZiBhIHZhbGlkIHZhbHVlIHJhbmdlIGNhbiBiZSBk ZXJpdmVkIGZyb20gYWxsIHRoZSBpbmNvbWluZwogICAgdmFsdWUgcmFuZ2Vz LCBzZXQgYSBuZXcgcmFuZ2UgZm9yIHRoZSBMSFMgb2YgUEhJLiAgKi8KIAot c3RhdGljIGVudW0gc3NhX3Byb3BfcmVzdWx0Ci12cnBfdmlzaXRfcGhpX25v ZGUgKGdwaGkgKnBoaSkKK2VudW0gc3NhX3Byb3BfcmVzdWx0Cit2cnBfcHJv cDo6dmlzaXRfcGhpIChncGhpICpwaGkpCiB7CiAgIHRyZWUgbGhzID0gUEhJ X1JFU1VMVCAocGhpKTsKICAgdmFsdWVfcmFuZ2UgdnJfcmVzdWx0ID0gVlJf SU5JVElBTElaRVI7CkBAIC0xMTQ2OSw3ICsxMTQ3Niw4IEBAIGV4ZWN1dGVf dnJwIChib29sIHdhcm5fYXJyYXlfYm91bmRzX3ApCiAKICAgdnJwX2luaXRp YWxpemVfbGF0dGljZSAoKTsKICAgdnJwX2luaXRpYWxpemUgKCk7Ci0gIHNz YV9wcm9wYWdhdGUgKHZycF92aXNpdF9zdG10LCB2cnBfdmlzaXRfcGhpX25v ZGUpOworICBjbGFzcyB2cnBfcHJvcCB2cnBfcHJvcDsKKyAgdnJwX3Byb3Au c3NhX3Byb3BhZ2F0ZSAoKTsKICAgdnJwX2ZpbmFsaXplICh3YXJuX2FycmF5 X2JvdW5kc19wKTsKIAogICAvKiBXZSBtdXN0IGlkZW50aWZ5IGp1bXAgdGhy ZWFkaW5nIG9wcG9ydHVuaXRpZXMgYmVmb3JlIHdlIHJlbGVhc2UK --------------244AC66EA148CC4D677F8B10--