From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 88004 invoked by alias); 8 Dec 2015 06:15:42 -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 87979 invoked by uid 89); 8 Dec 2015 06:15:40 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.7 required=5.0 tests=AWL,BAYES_00,SPF_HELO_PASS,T_RP_MATCHES_RCVD autolearn=ham version=3.3.2 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 (AES256-GCM-SHA384 encrypted) ESMTPS; Tue, 08 Dec 2015 06:15:35 +0000 Received: from int-mx10.intmail.prod.int.phx2.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by mx1.redhat.com (Postfix) with ESMTPS id 9C1D58EB4D for ; Tue, 8 Dec 2015 06:15:33 +0000 (UTC) Received: from localhost.localdomain (ovpn-113-32.phx2.redhat.com [10.3.113.32]) by int-mx10.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id tB86FXhj030099 for ; Tue, 8 Dec 2015 01:15:33 -0500 To: gcc-patches From: Jeff Law Subject: [RFA] [PATCH] [PR tree-optimization/68619] Avoid direct cfg cleanups in tree-ssa-dom.c [1/3] Message-ID: <56667585.5040307@redhat.com> Date: Tue, 08 Dec 2015 06:15:00 -0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.3.0 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="------------080200080003090307010601" X-IsSubscribed: yes X-SW-Source: 2015-12/txt/msg00814.txt.bz2 This is a multi-part message in MIME format. --------------080200080003090307010601 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Content-length: 936 First in the series. This merely refactors code from tree-ssa-sccvn.c into domwalk.c so that other walkers can use it as they see fit. There's an initialization function which sets all edges to executable. There's a test function to see if a block is reachable. There's a propagation function to propagate the unreachable property to edges. Finally a function to clear m_unreachable_dom. I consider this a wart. Essentially that data member contains the highest unreachable block in the dominator tree. Once we've finished processing that block's children, we need to clear the member. Ideally clients wouldn't need to call this member function. Bikeshedding on the members names is encouraged. And if someone has a clean, simple way to ensure that the m_unreachable_dom member gets cleared regardless of whether or not a client has its own after_dom_children callback, I'd love to hear it. OK for trunk? Jeff --------------080200080003090307010601 Content-Type: text/plain; charset=UTF-8; name="PP" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="PP" Content-length: 13124 Y29tbWl0IDVlNTNmZWZhZTAzNzM3NjhiOThkNTFkNTc0NmQ0M2YzNmNlY2Jl MmEKQXV0aG9yOiBKZWZmIExhdyA8bGF3QHJlZGhhdC5jb20+CkRhdGU6ICAg TW9uIERlYyA3IDExOjMyOjU4IDIwMTUgLTA3MDAKCiAgICAJKiBkb213YWxr LmggKGRvbV93YWxrZXI6OmluaXRfZWRnZV9leGVjdXRhYmxlKTogTmV3IG1l dGhvZC4KICAgIAkoZG9tX3dhbGtlcjo6bWF5YmVfY2xlYXJfdW5yZWFjaGFi bGVfZG9tKTogTGlrZXdpc2UuCiAgICAJKGRvbV93YWxrZXI6OmJiX3JlYWNo YWJsZSk6IExpa2V3aXNlLgogICAgCShkb21fd2Fsa2VyOjpwcm9wYWdhdGVf dW5yZWFjaGFibGVfdG9fZWRnZXMpOiBMaWtld2lzZS4KICAgIAkoZG9tX3dh bGtlcjo6bV91bnJlYWNoYWJsZV9kb20pOiBOZXcgcHJpdmF0ZSBkYXRhIG1l bWJlci4KICAgIAkqIGRvbXdhbGsuYzogSW5jbHVkZSBkdW1wZmlsZS5oLgog ICAgCShkb21fd2Fsa2VyOjppbml0X2VkZ2VfZXhlY3V0YWJsZSk6IE5ldyBt ZXRob2QuCiAgICAJKGRvbV93YWxrZXI6Om1heWJlX2NsZWFyX3VucmVhY2hh YmxlX2RvbSk6IExpa2V3aXNlLgogICAgCShkb21fd2Fsa2VyOjpiYl9yZWFj aGFibGUpOiBMaWtld2lzZS4gIEZhY3RvcmVkIG91dCBvZgogICAgCXRyZWUt c3NhLXNjY3ZuLmMKICAgIAkoZG9tX3dhbGtlcjo6cHJvcGFnYXRlX3VucmVh Y2hhYmxlX3RvX2VkZ2VzKTogTGlrZXdpc2UuCiAgICAJKiB0cmVlLXNzYS1z Y2N2bi5jIChzY2N2bl9kb21fd2Fsa2VyOjp1bnJlYWNoYWJsZV9kb20pOiBS ZW1vdmUKICAgIAlwcml2YXRlIGRhdGEgbWVtYmVyLgogICAgCShzY2N2bl9k b21fd2Fsa2VyOjphZnRlcl9kb21fY2hpbGRyZW4pOiBVc2UgbWV0aG9kcyBm cm9tIGRvbV93YWxrZXIKICAgIAljbGFzcy4KICAgIAkoc2Njdm5fZG9tX3dh bGtlcjo6YmVmb3JlX2RvbV9jaGlsZHJlbik6IFNpbWlsYXJseS4KICAgIAko cnVuX3NjY192bik6IExpa2V3aXNlLgoKZGlmZiAtLWdpdCBhL2djYy9kb213 YWxrLmMgYi9nY2MvZG9td2Fsay5jCmluZGV4IDE2N2ZjMzguLmZlYjY0Nzgg MTAwNjQ0Ci0tLSBhL2djYy9kb213YWxrLmMKKysrIGIvZ2NjL2RvbXdhbGsu YwpAQCAtMjQsNiArMjQsNyBAQCBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBm aWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQogI2luY2x1ZGUgImJhY2tlbmQu aCIKICNpbmNsdWRlICJjZmdhbmFsLmgiCiAjaW5jbHVkZSAiZG9td2Fsay5o IgorI2luY2x1ZGUgImR1bXBmaWxlLmgiCiAKIC8qIFRoaXMgZmlsZSBpbXBs ZW1lbnRzIGEgZ2VuZXJpYyB3YWxrZXIgZm9yIGRvbWluYXRvciB0cmVlcy4K IApAQCAtMTQyLDYgKzE0Myw5MyBAQCBjbXBfYmJfcG9zdG9yZGVyIChjb25z dCB2b2lkICphLCBjb25zdCB2b2lkICpiKQogICByZXR1cm4gMTsKIH0KIAor LyogTWFyayBhbGwgZWRnZXMgaW4gdGhlIENGRyBhcyBwb3NzaWJseSBiZWlu ZyBleGVjdXRhYmxlLiAgKi8KKwordm9pZAorZG9tX3dhbGtlcjo6aW5pdF9l ZGdlX2V4ZWN1dGFibGUgKHN0cnVjdCBmdW5jdGlvbiAqZnVuKQoreworICBi YXNpY19ibG9jayBiYjsKKyAgRk9SX0FMTF9CQl9GTiAoYmIsIGZ1bikKKyAg ICB7CisgICAgICBlZGdlX2l0ZXJhdG9yIGVpOworICAgICAgZWRnZSBlOwor ICAgICAgRk9SX0VBQ0hfRURHRSAoZSwgZWksIGJiLT5zdWNjcykKKwllLT5m bGFncyB8PSBFREdFX0VYRUNVVEFCTEU7CisgICAgfQorfQorCisvKiBSZXR1 cm4gVFJVRSBpZiBCQiBpcyByZWFjaGFibGUsIGZhbHNlIG90aGVyd2lzZS4g ICovCisKK2Jvb2wKK2RvbV93YWxrZXI6OmJiX3JlYWNoYWJsZSAoc3RydWN0 IGZ1bmN0aW9uICpmdW4sIGJhc2ljX2Jsb2NrIGJiKQoreworICAvKiBJZiBh bnkgb2YgdGhlIHByZWRlY2Vzc29yIGVkZ2VzIHRoYXQgZG8gbm90IGNvbWUg ZnJvbSBibG9ja3MgZG9taW5hdGVkCisgICAgIGJ5IHVzIGFyZSBzdGlsbCBt YXJrZWQgYXMgcG9zc2libHkgZXhlY3V0YWJsZSBjb25zaWRlciB0aGlzIGJs b2NrCisgICAgIHJlYWNoYWJsZS4gICovCisgIGJvb2wgcmVhY2hhYmxlID0g ZmFsc2U7CisgIGlmICghbV91bnJlYWNoYWJsZV9kb20pCisgICAgeworICAg ICAgcmVhY2hhYmxlID0gYmIgPT0gRU5UUllfQkxPQ0tfUFRSX0ZPUl9GTiAo ZnVuKTsKKyAgICAgIGVkZ2VfaXRlcmF0b3IgZWk7CisgICAgICBlZGdlIGU7 CisgICAgICBGT1JfRUFDSF9FREdFIChlLCBlaSwgYmItPnByZWRzKQorCWlm ICghZG9taW5hdGVkX2J5X3AgKENESV9ET01JTkFUT1JTLCBlLT5zcmMsIGJi KSkKKwkgIHJlYWNoYWJsZSB8PSAoZS0+ZmxhZ3MgJiBFREdFX0VYRUNVVEFC TEUpOworICAgIH0KKworICByZXR1cm4gcmVhY2hhYmxlOworfQorCisvKiBC QiBoYXMgYmVlbiBkZXRlcm1pbmVkIHRvIGJlIHVucmVhY2hhYmxlLiAgUHJv cGFnYXRlIHRoYXQgcHJvcGVydHkKKyAgIHRvIGluY29taW5nIGFuZCBvdXRn b2luZyBlZGdlcyBvZiBCQiBhcyBhcHByb3ByaWF0ZS4gICovCisKK3ZvaWQK K2RvbV93YWxrZXI6OnByb3BhZ2F0ZV91bnJlYWNoYWJsZV90b19lZGdlcyAo YmFzaWNfYmxvY2sgYmIsCisJCQkJCSAgICBGSUxFICpkdW1wX2ZpbGUsCisJ CQkJCSAgICBpbnQgZHVtcF9mbGFncykKK3sKKyAgaWYgKGR1bXBfZmlsZSAm JiAoZHVtcF9mbGFncyAmIFRERl9ERVRBSUxTKSkKKyAgICBmcHJpbnRmIChk dW1wX2ZpbGUsICJNYXJraW5nIGFsbCBvdXRnb2luZyBlZGdlcyBvZiB1bnJl YWNoYWJsZSAiCisJICAgICAiQkIgJWQgYXMgbm90IGV4ZWN1dGFibGVcbiIs IGJiLT5pbmRleCk7CisKKyAgZWRnZV9pdGVyYXRvciBlaTsKKyAgZWRnZSBl OworICBGT1JfRUFDSF9FREdFIChlLCBlaSwgYmItPnN1Y2NzKQorICAgIGUt PmZsYWdzICY9IH5FREdFX0VYRUNVVEFCTEU7CisKKyAgRk9SX0VBQ0hfRURH RSAoZSwgZWksIGJiLT5wcmVkcykKKyAgICB7CisgICAgICBpZiAoZG9taW5h dGVkX2J5X3AgKENESV9ET01JTkFUT1JTLCBlLT5zcmMsIGJiKSkKKwl7CisJ ICBpZiAoZHVtcF9maWxlICYmIChkdW1wX2ZsYWdzICYgVERGX0RFVEFJTFMp KQorCSAgICBmcHJpbnRmIChkdW1wX2ZpbGUsICJNYXJraW5nIGJhY2tlZGdl IGZyb20gQkIgJWQgaW50byAiCisJCSAgICAgInVucmVhY2hhYmxlIEJCICVk IGFzIG5vdCBleGVjdXRhYmxlXG4iLAorCQkgICAgIGUtPnNyYy0+aW5kZXgs IGJiLT5pbmRleCk7CisJICBlLT5mbGFncyAmPSB+RURHRV9FWEVDVVRBQkxF OworCX0KKyAgICB9CisKKyAgaWYgKCFtX3VucmVhY2hhYmxlX2RvbSkKKyAg ICBtX3VucmVhY2hhYmxlX2RvbSA9IGJiOworfQorCisvKiBXaGVuIHdlIHBy b3BhZ2F0ZSB0aGUgdW5yZWFjaGFibGUgcHJvcGVydHkgdG8gZWRnZXMsIHdl CisgICBhbHNvIGFycmFuZ2UgdG8gdHJhY2sgdGhlIGhpZ2hlc3QgYmxvY2sg aW4gdGhlIGRvbWluYXRvcgorICAgd2FsayB3aGljaCB3YXMgdW5yZWFjaGFi bGUuICBXZSBjYW4gdXNlIHRoYXQgdG8gaWRlbnRpZnkKKyAgIG1vcmUgdW5y ZWFjaGFibGUgYmxvY2tzLgorCisgICBXaGVuIHdlIGZpbmlzaCBwcm9jZXNz aW5nIHRoZSBkb21pbmF0b3IgY2hpbGRyZW4gZm9yIHRoYXQKKyAgIGhpZ2hl c3QgdW5yZWFjaGFibGUgYmxvY2ssIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRv IGNsZWFyCisgICB0aGF0IHJlY29yZGVkIGhpZ2hlc3QgYmxvY2sgdW5yZWFj aGFibGUgYmxvY2sgaW4gdGhlCisgICBkb21pbmF0b3IgdHJlZS4gICovCisK K3ZvaWQKK2RvbV93YWxrZXI6Om1heWJlX2NsZWFyX3VucmVhY2hhYmxlX2Rv bSAoYmFzaWNfYmxvY2sgYmIpCit7CisgIGlmIChtX3VucmVhY2hhYmxlX2Rv bSA9PSBiYikKKyAgICBtX3VucmVhY2hhYmxlX2RvbSA9IE5VTEw7Cit9CisK IC8qIFJlY3Vyc2l2ZWx5IHdhbGsgdGhlIGRvbWluYXRvciB0cmVlLgogICAg QkIgaXMgdGhlIGJhc2ljIGJsb2NrIHdlIGFyZSBjdXJyZW50bHkgdmlzaXRp bmcuICAqLwogCmRpZmYgLS1naXQgYS9nY2MvZG9td2Fsay5oIGIvZ2NjL2Rv bXdhbGsuaAppbmRleCA3MWE3YzQ3Li5kNmIzN2EyIDEwMDY0NAotLS0gYS9n Y2MvZG9td2Fsay5oCisrKyBiL2djYy9kb213YWxrLmgKQEAgLTMwLDcgKzMw LDggQEAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4g IElmIG5vdCBzZWUKIGNsYXNzIGRvbV93YWxrZXIKIHsKIHB1YmxpYzoKLSAg ZG9tX3dhbGtlciAoY2RpX2RpcmVjdGlvbiBkaXJlY3Rpb24pIDogbV9kb21f ZGlyZWN0aW9uIChkaXJlY3Rpb24pIHt9CisgIGRvbV93YWxrZXIgKGNkaV9k aXJlY3Rpb24gZGlyZWN0aW9uKSA6IG1fZG9tX2RpcmVjdGlvbiAoZGlyZWN0 aW9uKSwKKyAgICBtX3VucmVhY2hhYmxlX2RvbSAoTlVMTCkge30KIAogICAv KiBXYWxrIHRoZSBkb21pbmF0b3IgdHJlZS4gICovCiAgIHZvaWQgd2FsayAo YmFzaWNfYmxvY2spOwpAQCAtNDEsMTIgKzQyLDQxIEBAIHB1YmxpYzoKICAg LyogRnVuY3Rpb24gdG8gY2FsbCBhZnRlciB0aGUgcmVjdXJzaXZlIHdhbGsg b2YgdGhlIGRvbWluYXRvciBjaGlsZHJlbi4gICovCiAgIHZpcnR1YWwgdm9p ZCBhZnRlcl9kb21fY2hpbGRyZW4gKGJhc2ljX2Jsb2NrKSB7fQogCisgIC8q IFRoZSBuZXh0IHNldmVyYWwgbWV0aG9kcyBzdXBwb3J0IGRpc2NvdmVyaW5n IHVucmVhY2hhYmxlIGJsb2NrcworICAgICBhbmQgZWRnZXMgaW4gdGhlIENG RyBkdXJpbmcgdGhlIGRvbWluYXRvciB3YWxrLiAgVXNpbmcgdGhlc2Ugcm91 dGluZXMKKyAgICAgaXMgdG90YWxseSBvcHRpb25hbCBhbmQgb25seSBtYWtl cyBzZW5zZSBpZiB5b3VyIHdhbGtlciBjYW4gY2hhbmdlCisgICAgIHRoZSBz dGF0ZSBvZiBhIGJsb2NrL2VkZ2UgdG8gdW5yZWFjaGFibGUvdW5leGVjdXRh YmxlIGFuZCB5b3VyIHdhbGtlcgorICAgICBjYW4gZXhwbG9pdCB0aGF0IGlu Zm9ybWF0aW9uIHRvIG9wdGltaXplIGJldHRlci4gICovCisKKyAgLyogU2V0 IEVER0VfRVhFQ1VUQUJMRSBmb3IgZXZlcnkgZWRnZSBpbiB0aGUgQ0ZHLiAg VGhpcyBtdXN0IGJlIGRvbmUKKyAgICAgYmVmb3JlIHdhbGtpbmcgYmVnaW5z LiAgKi8KKyAgdm9pZCBpbml0X2VkZ2VfZXhlY3V0YWJsZSAoc3RydWN0IGZ1 bmN0aW9uICopOworCisgIC8qIFF1ZXJ5IHdoZXRoZXIgb3Igbm90IHRoZSBn aXZlbiBibG9jayBpcyByZWFjaGFibGUgb3Igbm90LgorCisgICAgIFR5cGlj YWxseSB1c2VkIGluIHRoZSBiZWZvcmVfZG9tX2NoaWxkcmVuIGNhbGxiYWNr LiAgKi8KKyAgYm9vbCBiYl9yZWFjaGFibGUgKHN0cnVjdCBmdW5jdGlvbiAq LCBiYXNpY19ibG9jayk7CisKKyAgLyogR2l2ZW4gYW4gdW5yZWFjaGFibGUg YmxvY2ssIHByb3BhZ2F0ZSB0aGF0IHByb3BlcnR5IHRvIG91dGdvaW5nCisg ICAgIGFuZCBwb3NzaWJseSBpbmNvbWluZyBlZGdlcyBmb3IgdGhlIGJsb2Nr LiAgVHlwaWNhbGx5IGNhbGxlZCBhZnRlcgorICAgICBkZXRlcm1pbmluZyBh IGJsb2NrIGlzIHVucmVhY2hhYmxlIGluIHRoZSBiZWZvcmVfZG9tX2NoaWxk cmVuCisgICAgIGNhbGxiYWNrLiAgKi8KKyAgdm9pZCBwcm9wYWdhdGVfdW5y ZWFjaGFibGVfdG9fZWRnZXMgKGJhc2ljX2Jsb2NrLCBGSUxFICosIGludCk7 CisKKyAgLyogVGhpcyBpcyBhIGJpdCBvZiBhIHdhcnQuICBXZSBuZWVkIHRv IGNvbmRpdGlvbmFsbHkgY2xlYXIgYSBiaXQgb2YKKyAgICAgc3RhdGUgYWZ0 ZXIgd2UgaGF2ZSBwcm9jZXNzIHRoZSBkb21pbmF0b3IgY2hpbGRyZW4uCisK KyAgICAgSSdkIHByZWZlciB0byBoaWRlIHRoaXMgZGV0YWlsIHdpdGhpbiBk b213YWxrLCBidXQgcmlnaHQgbm93IGl0CisgICAgIGJsZWVkcyBvdXQgaW50 byB0aGUgY2xpZW50cy4gICovCisgIHZvaWQgbWF5YmVfY2xlYXJfdW5yZWFj aGFibGVfZG9tIChiYXNpY19ibG9jayk7CisKIHByaXZhdGU6CiAgIC8qIFRo aXMgaXMgdGhlIGRpcmVjdGlvbiBvZiB0aGUgZG9taW5hdG9yIHRyZWUgd2Ug d2FudCB0byB3YWxrLiAgaS5lLiwKICAgICAgaWYgaXQgaXMgc2V0IHRvIENE SV9ET01JTkFUT1JTLCB0aGVuIHdlIHdhbGsgdGhlIGRvbWluYXRvciB0cmVl LAogICAgICBpZiBpdCBpcyBzZXQgdG8gQ0RJX1BPU1RfRE9NSU5BVE9SUywg dGhlbiB3ZSB3YWxrIHRoZSBwb3N0CiAgICAgIGRvbWluYXRvciB0cmVlLiAg Ki8KICAgY29uc3QgRU5VTV9CSVRGSUVMRCAoY2RpX2RpcmVjdGlvbikgbV9k b21fZGlyZWN0aW9uIDogMjsKKyAgYmFzaWNfYmxvY2sgbV91bnJlYWNoYWJs ZV9kb207CiB9OwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2djYy90cmVlLXNz YS1zY2N2bi5jIGIvZ2NjL3RyZWUtc3NhLXNjY3ZuLmMKaW5kZXggMjAxNGVl Ny4uZGJkNjFjOSAxMDA2NDQKLS0tIGEvZ2NjL3RyZWUtc3NhLXNjY3ZuLmMK KysrIGIvZ2NjL3RyZWUtc3NhLXNjY3ZuLmMKQEAgLTQyMDcsOCArNDIwNyw3 IEBAIGNsYXNzIHNjY3ZuX2RvbV93YWxrZXIgOiBwdWJsaWMgZG9tX3dhbGtl cgogewogcHVibGljOgogICBzY2N2bl9kb21fd2Fsa2VyICgpCi0gICAgOiBk b21fd2Fsa2VyIChDRElfRE9NSU5BVE9SUyksIGZhaWwgKGZhbHNlKSwgdW5y ZWFjaGFibGVfZG9tIChOVUxMKSwKLSAgICAgIGNvbmRfc3RhY2sgKHZOVUxM KSB7fQorICAgIDogZG9tX3dhbGtlciAoQ0RJX0RPTUlOQVRPUlMpLCBmYWls IChmYWxzZSksIGNvbmRfc3RhY2sgKHZOVUxMKSB7fQogICB+c2Njdm5fZG9t X3dhbGtlciAoKTsKIAogICB2aXJ0dWFsIHZvaWQgYmVmb3JlX2RvbV9jaGls ZHJlbiAoYmFzaWNfYmxvY2spOwpAQCAtNDIyMCw3ICs0MjE5LDYgQEAgcHVi bGljOgogCQkgICAgIGVudW0gdHJlZV9jb2RlIGNvZGUsIHRyZWUgbGhzLCB0 cmVlIHJocywgYm9vbCB2YWx1ZSk7CiAKICAgYm9vbCBmYWlsOwotICBiYXNp Y19ibG9jayB1bnJlYWNoYWJsZV9kb207CiAgIHZlYzxzdGQ6OnBhaXIgPGJh c2ljX2Jsb2NrLCBzdGQ6OnBhaXIgPHZuX25hcnlfb3BfdCwgdm5fbmFyeV9v cF90PiA+ID4KICAgICBjb25kX3N0YWNrOwogfTsKQEAgLTQzMDEsOCArNDI5 OSw3IEBAIHNjY3ZuX2RvbV93YWxrZXI6OnJlY29yZF9jb25kcyAoYmFzaWNf YmxvY2sgYmIsCiB2b2lkCiBzY2N2bl9kb21fd2Fsa2VyOjphZnRlcl9kb21f Y2hpbGRyZW4gKGJhc2ljX2Jsb2NrIGJiKQogewotICBpZiAodW5yZWFjaGFi bGVfZG9tID09IGJiKQotICAgIHVucmVhY2hhYmxlX2RvbSA9IE5VTEw7Cisg IHRoaXMtPm1heWJlX2NsZWFyX3VucmVhY2hhYmxlX2RvbSAoYmIpOwogCiAg IHdoaWxlICghY29uZF9zdGFjay5pc19lbXB0eSAoKQogCSAmJiBjb25kX3N0 YWNrLmxhc3QgKCkuZmlyc3QgPT0gYmIpCkBAIC00MzI3LDQ1ICs0MzI0LDEx IEBAIHNjY3ZuX2RvbV93YWxrZXI6OmJlZm9yZV9kb21fY2hpbGRyZW4gKGJh c2ljX2Jsb2NrIGJiKQogICBpZiAoZmFpbCkKICAgICByZXR1cm47CiAKLSAg LyogSWYgYW55IG9mIHRoZSBwcmVkZWNlc3NvciBlZGdlcyB0aGF0IGRvIG5v dCBjb21lIGZyb20gYmxvY2tzIGRvbWluYXRlZAotICAgICBieSB1cyBhcmUg c3RpbGwgbWFya2VkIGFzIHBvc3NpYmx5IGV4ZWN1dGFibGUgY29uc2lkZXIg dGhpcyBibG9jawotICAgICByZWFjaGFibGUuICAqLwotICBib29sIHJlYWNo YWJsZSA9IGZhbHNlOwotICBpZiAoIXVucmVhY2hhYmxlX2RvbSkKKyAgLyog SWYgQkIgaXMgbm90IHJlYWNoYWJsZSwgdGhlbiBwcm9wYWdhdGUgdGhhdCBw cm9wZXJ0eSB0byBlZGdlcywgYnV0CisgICAgIGRvIG5vdCBwcm9jZXNzIHRo aXMgYmxvY2sgYW55IGZ1cnRoZXIuICAqLworICBpZiAoIXRoaXMtPmJiX3Jl YWNoYWJsZSAoY2Z1biwgYmIpKQogICAgIHsKLSAgICAgIHJlYWNoYWJsZSA9 IGJiID09IEVOVFJZX0JMT0NLX1BUUl9GT1JfRk4gKGNmdW4pOwotICAgICAg Rk9SX0VBQ0hfRURHRSAoZSwgZWksIGJiLT5wcmVkcykKLQlpZiAoIWRvbWlu YXRlZF9ieV9wIChDRElfRE9NSU5BVE9SUywgZS0+c3JjLCBiYikpCi0JICBy ZWFjaGFibGUgfD0gKGUtPmZsYWdzICYgRURHRV9FWEVDVVRBQkxFKTsKLSAg ICB9Ci0KLSAgLyogSWYgdGhlIGJsb2NrIGlzIG5vdCByZWFjaGFibGUgYWxs IG91dGdvaW5nIGVkZ2VzIGFyZSBub3QKLSAgICAgZXhlY3V0YWJsZS4gIE5l aXRoZXIgYXJlIGluY29taW5nIGVkZ2VzIHdpdGggc3JjIGRvbWluYXRlZCBi eSB1cy4gICovCi0gIGlmICghcmVhY2hhYmxlKQotICAgIHsKLSAgICAgIGlm IChkdW1wX2ZpbGUgJiYgKGR1bXBfZmxhZ3MgJiBUREZfREVUQUlMUykpCi0J ZnByaW50ZiAoZHVtcF9maWxlLCAiTWFya2luZyBhbGwgb3V0Z29pbmcgZWRn ZXMgb2YgdW5yZWFjaGFibGUgIgotCQkgIkJCICVkIGFzIG5vdCBleGVjdXRh YmxlXG4iLCBiYi0+aW5kZXgpOwotCi0gICAgICBGT1JfRUFDSF9FREdFIChl LCBlaSwgYmItPnN1Y2NzKQotCWUtPmZsYWdzICY9IH5FREdFX0VYRUNVVEFC TEU7Ci0KLSAgICAgIEZPUl9FQUNIX0VER0UgKGUsIGVpLCBiYi0+cHJlZHMp Ci0JewotCSAgaWYgKGRvbWluYXRlZF9ieV9wIChDRElfRE9NSU5BVE9SUywg ZS0+c3JjLCBiYikpCi0JICAgIHsKLQkgICAgICBpZiAoZHVtcF9maWxlICYm IChkdW1wX2ZsYWdzICYgVERGX0RFVEFJTFMpKQotCQlmcHJpbnRmIChkdW1w X2ZpbGUsICJNYXJraW5nIGJhY2tlZGdlIGZyb20gQkIgJWQgaW50byAiCi0J CQkgInVucmVhY2hhYmxlIEJCICVkIGFzIG5vdCBleGVjdXRhYmxlXG4iLAot CQkJIGUtPnNyYy0+aW5kZXgsIGJiLT5pbmRleCk7Ci0JICAgICAgZS0+Zmxh Z3MgJj0gfkVER0VfRVhFQ1VUQUJMRTsKLQkgICAgfQotCX0KLQotICAgICAg LyogUmVjb3JkIHRoZSBtb3N0IGRvbWluYXRpbmcgdW5yZWFjaGFibGUgYmxv Y2suICAqLwotICAgICAgaWYgKCF1bnJlYWNoYWJsZV9kb20pCi0JdW5yZWFj aGFibGVfZG9tID0gYmI7Ci0KKyAgICAgIHRoaXMtPnByb3BhZ2F0ZV91bnJl YWNoYWJsZV90b19lZGdlcyAoYmIsIGR1bXBfZmlsZSwgZHVtcF9mbGFncyk7 CiAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC00NTE5LDcgKzQ0ODIsNiBA QCBzY2N2bl9kb21fd2Fsa2VyOjpiZWZvcmVfZG9tX2NoaWxkcmVuIChiYXNp Y19ibG9jayBiYikKIGJvb2wKIHJ1bl9zY2Nfdm4gKHZuX2xvb2t1cF9raW5k IGRlZmF1bHRfdm5fd2Fsa19raW5kXykKIHsKLSAgYmFzaWNfYmxvY2sgYmI7 CiAgIHNpemVfdCBpOwogCiAgIGRlZmF1bHRfdm5fd2Fsa19raW5kID0gZGVm YXVsdF92bl93YWxrX2tpbmRfOwpAQCAtNDU0OSwxOCArNDUxMSwxMCBAQCBy dW5fc2NjX3ZuICh2bl9sb29rdXBfa2luZCBkZWZhdWx0X3ZuX3dhbGtfa2lu ZF8pCiAJfQogICAgIH0KIAotICAvKiBNYXJrIGFsbCBlZGdlcyBhcyBwb3Nz aWJseSBleGVjdXRhYmxlLiAgKi8KLSAgRk9SX0FMTF9CQl9GTiAoYmIsIGNm dW4pCi0gICAgewotICAgICAgZWRnZV9pdGVyYXRvciBlaTsKLSAgICAgIGVk Z2UgZTsKLSAgICAgIEZPUl9FQUNIX0VER0UgKGUsIGVpLCBiYi0+c3VjY3Mp Ci0JZS0+ZmxhZ3MgfD0gRURHRV9FWEVDVVRBQkxFOwotICAgIH0KLQogICAv KiBXYWxrIGFsbCBibG9ja3MgaW4gZG9taW5hdG9yIG9yZGVyLCB2YWx1ZS1u dW1iZXJpbmcgc3RtdHMKICAgICAgU1NBIGRlZnMgYW5kIGRlY2lkZSB3aGV0 aGVyIG91dGdvaW5nIGVkZ2VzIGFyZSBub3QgZXhlY3V0YWJsZS4gICovCiAg IHNjY3ZuX2RvbV93YWxrZXIgd2Fsa2VyOworICB3YWxrZXIuaW5pdF9lZGdl X2V4ZWN1dGFibGUgKGNmdW4pOwogICB3YWxrZXIud2FsayAoRU5UUllfQkxP Q0tfUFRSX0ZPUl9GTiAoY2Z1bikpOwogICBpZiAod2Fsa2VyLmZhaWwpCiAg ICAgewo= --------------080200080003090307010601--