From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 84760 invoked by alias); 29 Oct 2015 16:20:32 -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 84743 invoked by uid 89); 29 Oct 2015 16:20:31 -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,RP_MATCHES_RCVD,SPF_HELO_PASS 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; Thu, 29 Oct 2015 16:20:30 +0000 Received: from int-mx11.intmail.prod.int.phx2.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.24]) by mx1.redhat.com (Postfix) with ESMTPS id C50D58E256 for ; Thu, 29 Oct 2015 16:20:28 +0000 (UTC) Received: from localhost.localdomain (ovpn-113-196.phx2.redhat.com [10.3.113.196]) by int-mx11.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t9TGKSwp014728 for ; Thu, 29 Oct 2015 12:20:28 -0400 To: gcc-patches@gcc.gnu.org From: Jeff Law Subject: [PATCH][PR tree-optimization/67892] Use FSM threader to handle backedges Message-ID: <5632474C.50002@redhat.com> Date: Thu, 29 Oct 2015 16:20: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="------------060303010908020108050904" X-IsSubscribed: yes X-SW-Source: 2015-10/txt/msg03217.txt.bz2 This is a multi-part message in MIME format. --------------060303010908020108050904 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Content-length: 1747 As as been noted in the past, the old jump threader's support for threading across a loop backedge introduces significant complexity. The most serious complexity is the need to handle processing statements a second time (as we come around the top of the loop). This requires invalidation support, potentially introduces loops in the SSA_NAME_VALUE chains, etc. I've speculated for a while that a backwards threader with a more sensible region copying scheme was the right long term direction. Sebastian got us started on that direction when he introduced the FSM threader. Essentially it walks def-use chains backwards from a conditional to try and find paths where an SSA_NAME has a constant value. Those paths represent potentially optimizable jump threads and he's using a SEME region copier to handle the SSA & CFG updates. BZ67892 is an issue with the old jump threader's backedge handling. Essentially when we thread across the backedge we're not completely invaliding the SSA_NAME_VALUE chains -- and it's not entirely clear if we can properly invalidate them. So rather than bang my head against the wall writing more code to handle cases in the old threader of marginal value I've taken this bug as an opportunity to start exploiting the FSM threader more heavily. The patches to date have been improving the FSM threader to handle cases it missed, or where we really didn't want it to change the CFG. This patch actually disables the old threader's backedge handling and exclusively relies on the FSM threader to pick up those opportunities. Bootstrapped and regression tested on x86_64-linux-gnu. Applied to the trunk. Next step is to start removing the now dead code from the old threader :-) Jeff --------------060303010908020108050904 Content-Type: text/plain; charset=UTF-8; name="P" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="P" Content-length: 11712 ZGlmZiAtLWdpdCBhL2djYy9DaGFuZ2VMb2cgYi9nY2MvQ2hhbmdlTG9nCmlu ZGV4IGEwODhjMTMuLjQzMGQzNjEgMTAwNjQ0Ci0tLSBhL2djYy9DaGFuZ2VM b2cKKysrIGIvZ2NjL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDE1 LTEwLTI5ICBKZWZmIExhdyAgPGxhd0ByZWRoYXQuY29tPgorCisJUFIgdHJl ZS1vcHRpbWl6YXRpb24vNjc4OTIKKwkqIHRyZWUtc3NhLXRocmVhZGVkZ2Uu YyAoc2ltcGxpZnlfY29udHJvTF9zdG10X2NvbmRpdGlvbik6IEZpeCB0eXBv CisJaW4gY29tbWVudC4KKwkodGhyZWFkX3Rocm91Z2hfbm9ybWFsX2Jsb2Nr KTogSWYgd2UgaGF2ZSBzZWVuIGEgYmFja2VkZ2UsIHRoZW4KKwlkbyBub3Ro aW5nLiAgTm8gbG9uZ2VyIGNhbGwgZmluZF9qdW1wX3RocmVhZHNfYmFja3dh cmRzIGhlcmUuCisJKHRocmVhZF9hY3Jvc3NfZWRnZSk6IFVzZSBmaW5kX2p1 bXBfdGhyZWFkc19iYWNrd2FyZHMgdG8gZmluZAorCWp1bXAgdGhyZWFkcyBp ZiB0aGUgb2xkIHN0eWxlIHRocmVhZGVyIHdhcyBub3Qgc3VjY2Vzc2Z1bC4K KwkqIHRyZWUtc3NhLXRocmVhZGJhY2t3YXJkLmMgKGdldF9naW1wbGVfY29u dHJvbF9zdG10KTogVXNlCisJZ3NpX2xhc3Rfbm9uZGVidWdfYmIuICBSZXR1 cm4gTlVMTCBpZiB0aGUgYmxvY2sgZG9lcyBub3QgZW5kCisJd2l0aCBhIGNv bnRyb2wgc3RhdGVtZW50LgorCShmaW5kX2p1bXBfdGhyZWFkc19iYWNrd2Fy ZHMpOiBTZXR1cCBjb2RlIG1vdmVkIGhlcmUgZnJvbQorCXRyZWUtc3NhLXRo cmVhZGVkZ2UuYzo6dGhyZWFkX3Rocm91Z2hfbm9ybWFsX2Jsb2NrLiAgQWNj ZXB0CisJc2luZ2xlIGVkZ2UgYXJndW1lbnQgaW5zdGVhZCBvZiBuYW1lICYg YmxvY2suCisJKiB0cmVlLXNzYS10aHJlYWRiYWNrd2FyZC5oIChmaW5kX2p1 bXBfdGhyZWFkc19iYWNrd2FyZHMpOiBVcGRhdGUKKwlwcm90b3R5cGUuCisK IDIwMTUtMTAtMjkgIFJpY2hhcmQgQmllbmVyICA8cmd1ZW50aGVyQHN1c2Uu ZGU+CiAKIAlQUiBtaWRkbGUtZW5kLzY4MTQyCmRpZmYgLS1naXQgYS9nY2Mv dGVzdHN1aXRlL0NoYW5nZUxvZyBiL2djYy90ZXN0c3VpdGUvQ2hhbmdlTG9n CmluZGV4IDlhN2Q1NDUuLjIyMzU1NGEgMTAwNjQ0Ci0tLSBhL2djYy90ZXN0 c3VpdGUvQ2hhbmdlTG9nCisrKyBiL2djYy90ZXN0c3VpdGUvQ2hhbmdlTG9n CkBAIC0xLDMgKzEsOSBAQAorMjAxNS0xMC0yOSAgSmVmZiBMYXcgIDxsYXdA cmVkaGF0LmNvbT4KKworICAgICAgICBQUiB0cmVlLW9wdGltaXphdGlvbi82 Nzg5MgorCSogZ2NjLmRnL3RyZWUtc3NhL3ByMjE0MTc6IFVwZGF0ZSBleHBl Y3RlZCBvdXRwdXQuCisJKiBnY2MuZGcvdHJlZS1zc2Evc3NhLWRvbS10aHJl YWQtMmIuYzogTGlrZXdpc2UuCisKIDIwMTUtMTAtMjkgIFJpY2hhcmQgQmll bmVyICA8cmd1ZW50aGVyQHN1c2UuZGU+CiAKIAlQUiBtaWRkbGUtZW5kLzY4 MTQyCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy90cmVlLXNz YS9wcjIxNDE3LmMgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy90cmVlLXNzYS9w cjIxNDE3LmMKaW5kZXggYjY3ZGQxOC4uZmVkNmIzMSAxMDA2NDQKLS0tIGEv Z2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdHJlZS1zc2EvcHIyMTQxNy5jCisrKyBi L2djYy90ZXN0c3VpdGUvZ2NjLmRnL3RyZWUtc3NhL3ByMjE0MTcuYwpAQCAt NDksNSArNDksNSBAQCBMMjM6CiAvKiBXZSBzaG91bGQgdGhyZWFkIHRoZSBi YWNrZWRnZSB0byB0aGUgdG9wIG9mIHRoZSBsb29wOyBpZSB3ZSBvbmx5CiAg ICBleGVjdXRlIHRoZSBpZiAoZXhwci0+Y29tbW9uLmNvZGUgIT0gMTQyKSB0 ZXN0IG9uY2UgcGVyIGxvb3AKICAgIGl0ZXJhdGlvbi4gICovCi0vKiB7IGRn LWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgIlRocmVhZGVkIGp1bXAi IDEgImRvbTIiIH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1k dW1wLXRpbWVzICJGU00ganVtcCB0aHJlYWQiIDEgImRvbTIiIH0gfSAqLwog CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy90cmVlLXNzYS9z c2EtZG9tLXRocmVhZC0yYi5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdHJl ZS1zc2Evc3NhLWRvbS10aHJlYWQtMmIuYwppbmRleCAyZjE3NTE3Li45MDkw MDlhIDEwMDY0NAotLS0gYS9nY2MvdGVzdHN1aXRlL2djYy5kZy90cmVlLXNz YS9zc2EtZG9tLXRocmVhZC0yYi5jCisrKyBiL2djYy90ZXN0c3VpdGUvZ2Nj LmRnL3RyZWUtc3NhL3NzYS1kb20tdGhyZWFkLTJiLmMKQEAgLTI1LDYgKzI1 LDUgQEAgdm9pZCB0aHJlYWRfbGF0Y2hfdGhyb3VnaF9oZWFkZXIgKHZvaWQp CiAvKiBUaHJlYWRpbmcgdGhlIGxhdGNoIHRvIGEgbGF0ZXIgcG9pbnQgaW4g dGhlIGxvb3AgaXMgc2FmZSBpbiB0aGlzCiAgICBjYXNlLiAgQW5kIHdlIHdh bnQgdG8gdGhyZWFkIHRocm91Z2ggdGhlIGhlYWRlciBhcyB3ZWxsLiAgVGhl c2UKICAgIGFyZSBib3RoIGNhdWdodCBieSB0aHJlYWRpbmcgaW4gRE9NLiAg Ki8KLS8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC1ub3QgIkp1bXBz IHRocmVhZGVkIiAidnJwMSJ9IH0gKi8KLS8qIHsgZGctZmluYWwgeyBzY2Fu LXRyZWUtZHVtcC10aW1lcyAiSnVtcHMgdGhyZWFkZWQ6IDEiIDAgImRvbTEi fSB9ICovCi0vKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMg Ikp1bXBzIHRocmVhZGVkOiAyIiAxICJkb20xIn0gfSAqLworLyogeyBkZy1m aW5hbCB7IHNjYW4tdHJlZS1kdW1wLW5vdCAiSnVtcHMgdGhyZWFkZWQiICJk b20xIn0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRp bWVzICJKdW1wcyB0aHJlYWRlZDogMiIgMSAidnJwMSJ9IH0gKi8KZGlmZiAt LWdpdCBhL2djYy90cmVlLXNzYS10aHJlYWRiYWNrd2FyZC5jIGIvZ2NjL3Ry ZWUtc3NhLXRocmVhZGJhY2t3YXJkLmMKaW5kZXggY2ZiNGFjZS4uOTBlMDFk ZiAxMDA2NDQKLS0tIGEvZ2NjL3RyZWUtc3NhLXRocmVhZGJhY2t3YXJkLmMK KysrIGIvZ2NjL3RyZWUtc3NhLXRocmVhZGJhY2t3YXJkLmMKQEAgLTM3LDE5 ICszNywyMiBAQCBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJ TkczLiAgSWYgbm90IHNlZQogc3RhdGljIGludCBtYXhfdGhyZWFkZWRfcGF0 aHM7CiAKIC8qIFNpbXBsZSBoZWxwZXIgdG8gZ2V0IHRoZSBsYXN0IHN0YXRl bWVudCBmcm9tIEJCLCB3aGljaCBpcyBhc3N1bWVkCi0gICB0byBiZSBhIGNv bnRyb2wgc3RhdGVtZW50LiAgKi8KKyAgIHRvIGJlIGEgY29udHJvbCBzdGF0 ZW1lbnQuICAgUmV0dXJuIE5VTEwgaWYgdGhlIGxhc3Qgc3RhdGVtZW50IGlz CisgICBub3QgYSBjb250cm9sIHN0YXRlbWVudC4gICovCisKIHN0YXRpYyBn aW1wbGUgKgogZ2V0X2dpbXBsZV9jb250cm9sX3N0bXQgKGJhc2ljX2Jsb2Nr IGJiKQogewotICBnaW1wbGVfc3RtdF9pdGVyYXRvciBnc2kgPSBnc2lfbGFz dF9iYiAoYmIpOworICBnaW1wbGVfc3RtdF9pdGVyYXRvciBnc2kgPSBnc2lf bGFzdF9ub25kZWJ1Z19iYiAoYmIpOwogCiAgIGlmIChnc2lfZW5kX3AgKGdz aSkpCiAgICAgcmV0dXJuIE5VTEw7CiAKICAgZ2ltcGxlICpzdG10ID0gZ3Np X3N0bXQgKGdzaSk7CiAgIGVudW0gZ2ltcGxlX2NvZGUgY29kZSA9IGdpbXBs ZV9jb2RlIChzdG10KTsKLSAgZ2NjX2Fzc2VydCAoY29kZSA9PSBHSU1QTEVf Q09ORCB8fCBjb2RlID09IEdJTVBMRV9TV0lUQ0ggfHwgY29kZSA9PSBHSU1Q TEVfR09UTyk7Ci0gIHJldHVybiBzdG10OworICBpZiAoY29kZSA9PSBHSU1Q TEVfQ09ORCB8fCBjb2RlID09IEdJTVBMRV9TV0lUQ0ggfHwgY29kZSA9PSBH SU1QTEVfR09UTykKKyAgICByZXR1cm4gc3RtdDsKKyAgcmV0dXJuIE5VTEw7 CiB9CiAKIC8qIFJldHVybiB0cnVlIGlmIHRoZSBDRkcgY29udGFpbnMgYXQg bGVhc3Qgb25lIHBhdGggZnJvbSBTVEFSVF9CQiB0byBFTkRfQkIuCkBAIC0z NDAsMTEgKzM0MywzOSBAQCBmc21fZmluZF9jb250cm9sX3N0YXRlbWVudF90 aHJlYWRfcGF0aHMgKHRyZWUgbmFtZSwKICAgIGZpbmRpbmcgYSBwYXRoIHdo ZXJlIE5BTUUgaXMgYSBjb25zdGFudCwgd2UgY2FuIHRocmVhZCB0aGUgcGF0 aC4gICovCiAKIHZvaWQgIAotZmluZF9qdW1wX3RocmVhZHNfYmFja3dhcmRz ICh0cmVlIG5hbWUsIGJhc2ljX2Jsb2NrIGJiKQorZmluZF9qdW1wX3RocmVh ZHNfYmFja3dhcmRzIChlZGdlIGUpCiB7ICAgICAKKyAgaWYgKCFmbGFnX2V4 cGVuc2l2ZV9vcHRpbWl6YXRpb25zCisgICAgICB8fCBvcHRpbWl6ZV9mdW5j dGlvbl9mb3Jfc2l6ZV9wIChjZnVuKQorICAgICAgfHwgZS0+ZGVzdC0+bG9v cF9mYXRoZXIgIT0gZS0+c3JjLT5sb29wX2ZhdGhlcgorICAgICAgfHwgbG9v cF9kZXB0aCAoZS0+ZGVzdC0+bG9vcF9mYXRoZXIpID09IDApCisgICAgcmV0 dXJuOworCisgIGdpbXBsZSAqc3RtdCA9IGdldF9naW1wbGVfY29udHJvbF9z dG10IChlLT5kZXN0KTsKKyAgaWYgKCFzdG10KQorICAgIHJldHVybjsKKwor ICBlbnVtIGdpbXBsZV9jb2RlIGNvZGUgPSBnaW1wbGVfY29kZSAoc3RtdCk7 CisgIHRyZWUgbmFtZSA9IE5VTEw7CisgIGlmIChjb2RlID09IEdJTVBMRV9T V0lUQ0gpCisgICAgbmFtZSA9IGdpbXBsZV9zd2l0Y2hfaW5kZXggKGFzX2Eg PGdzd2l0Y2ggKj4gKHN0bXQpKTsKKyAgZWxzZSBpZiAoY29kZSA9PSBHSU1Q TEVfR09UTykKKyAgICBuYW1lID0gZ2ltcGxlX2dvdG9fZGVzdCAoc3RtdCk7 CisgIGVsc2UgaWYgKGNvZGUgPT0gR0lNUExFX0NPTkQpCisgICAgeworICAg ICAgaWYgKFRSRUVfQ09ERSAoZ2ltcGxlX2NvbmRfbGhzIChzdG10KSkgPT0g U1NBX05BTUUKKwkgICYmIFRSRUVfQ09ERSAoZ2ltcGxlX2NvbmRfcmhzIChz dG10KSkgPT0gSU5URUdFUl9DU1QKKwkgICYmIChJTlRFR1JBTF9UWVBFX1Ag KFRSRUVfVFlQRSAoZ2ltcGxlX2NvbmRfbGhzIChzdG10KSkpCisJICAgICAg fHwgUE9JTlRFUl9UWVBFX1AgKFRSRUVfVFlQRSAoZ2ltcGxlX2NvbmRfbGhz IChzdG10KSkpKSkKKwluYW1lID0gZ2ltcGxlX2NvbmRfbGhzIChzdG10KTsK KyAgICB9CisKKyAgaWYgKCFuYW1lIHx8IFRSRUVfQ09ERSAobmFtZSkgIT0g U1NBX05BTUUpCisgICAgcmV0dXJuOworCiAgIHZlYzxiYXNpY19ibG9jaywg dmFfZ2M+ICpiYl9wYXRoOwogICB2ZWNfYWxsb2MgKGJiX3BhdGgsIG5fYmFz aWNfYmxvY2tzX2Zvcl9mbiAoY2Z1bikpOwotICB2ZWNfc2FmZV9wdXNoIChi Yl9wYXRoLCBiYik7ICAgICAgICAgICAKKyAgdmVjX3NhZmVfcHVzaCAoYmJf cGF0aCwgZS0+ZGVzdCk7CiAgIGhhc2hfc2V0PGJhc2ljX2Jsb2NrPiAqdmlz aXRlZF9iYnMgPSBuZXcgaGFzaF9zZXQ8YmFzaWNfYmxvY2s+OwogCiAgIG1h eF90aHJlYWRlZF9wYXRocyA9IFBBUkFNX1ZBTFVFIChQQVJBTV9NQVhfRlNN X1RIUkVBRF9QQVRIUyk7CkBAIC0zNTIsNCArMzgzLDQgQEAgZmluZF9qdW1w X3RocmVhZHNfYmFja3dhcmRzICh0cmVlIG5hbWUsIGJhc2ljX2Jsb2NrIGJi KQogCiAgIGRlbGV0ZSB2aXNpdGVkX2JiczsKICAgdmVjX2ZyZWUgKGJiX3Bh dGgpOwotfSAgICAgICAgIAorfQpkaWZmIC0tZ2l0IGEvZ2NjL3RyZWUtc3Nh LXRocmVhZGJhY2t3YXJkLmggYi9nY2MvdHJlZS1zc2EtdGhyZWFkYmFja3dh cmQuaAppbmRleCBmMDU1ZjQzLi4yMTM2ZmYyIDEwMDY0NAotLS0gYS9nY2Mv dHJlZS1zc2EtdGhyZWFkYmFja3dhcmQuaAorKysgYi9nY2MvdHJlZS1zc2Et dGhyZWFkYmFja3dhcmQuaApAQCAtMjAsNiArMjAsNiBAQCBhbG9uZyB3aXRo IEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQogI2lm bmRlZiBHQ0NfVFJFRV9TU0FfVEhSRUFERlNNX0gKICNkZWZpbmUgR0NDX1RS RUVfU1NBX1RIUkVBREZTTV9ICiAKLWV4dGVybiB2b2lkIGZpbmRfanVtcF90 aHJlYWRzX2JhY2t3YXJkcyAodHJlZSwgYmFzaWNfYmxvY2spOworZXh0ZXJu IHZvaWQgZmluZF9qdW1wX3RocmVhZHNfYmFja3dhcmRzIChlZGdlKTsKIAog I2VuZGlmIC8qIEdDQ19UUkVFX1NTQV9USFJFQURGU01fSCAqLwpkaWZmIC0t Z2l0IGEvZ2NjL3RyZWUtc3NhLXRocmVhZGVkZ2UuYyBiL2djYy90cmVlLXNz YS10aHJlYWRlZGdlLmMKaW5kZXggMzg2YWVhNy4uZGRkNTA2MSAxMDA2NDQK LS0tIGEvZ2NjL3RyZWUtc3NhLXRocmVhZGVkZ2UuYworKysgYi9nY2MvdHJl ZS1zc2EtdGhyZWFkZWRnZS5jCkBAIC01NjYsNyArNTY2LDcgQEAgc2ltcGxp ZnlfY29udHJvbF9zdG10X2NvbmRpdGlvbiAoZWRnZSBlLAogCiAJIEl0IGlz IHBvc3NpYmxlIHRvIGdldCBsb29wcyBpbiB0aGUgU1NBX05BTUVfVkFMVUUg Y2hhaW5zCiAJIChjb25zaWRlciB0aHJlYWRpbmcgdGhlIGJhY2tlZGdlIG9m IGEgbG9vcCB3aGVyZSB3ZSBoYXZlCi0JIGEgbG9vcCBpbnZhcmlhbnQgU1NB X05BTUUgdXNlZCBpbiB0aGUgY29uZGl0aW9uLiAgKi8KKwkgYSBsb29wIGlu dmFyaWFudCBTU0FfTkFNRSB1c2VkIGluIHRoZSBjb25kaXRpb24pLiAgKi8K ICAgICAgIGlmIChjYWNoZWRfbGhzKQogCXsKIAkgIGZvciAoaW50IGkgPSAw OyBpIDwgMjsgaSsrKQpAQCAtOTA0LDEyICs5MDQsMTAgQEAgdGhyZWFkX3Ro cm91Z2hfbm9ybWFsX2Jsb2NrIChlZGdlIGUsCiAJCQkgICAgIGJpdG1hcCB2 aXNpdGVkLAogCQkJICAgICBib29sICpiYWNrZWRnZV9zZWVuX3ApCiB7Ci0g IC8qIElmIHdlIGhhdmUgdHJhdmVyc2VkIGEgYmFja2VkZ2UsIHRoZW4gd2Ug ZG8gbm90IHdhbnQgdG8gbG9vawotICAgICBhdCBjZXJ0YWluIGV4cHJlc3Np b25zIGluIHRoZSB0YWJsZSB0aGF0IGNhbiBub3QgYmUgcmVsaWVkIHVwb24u Ci0gICAgIEx1Y2tpbHkgdGhlIG9ubHkgY29kZSB0aGF0IGxvb2tlZCBhdCB0 aG9zZSBleHByZXNzaW9ucyBpcyB0aGUKLSAgICAgU0lNUExJRlkgY2FsbGJh Y2ssIHdoaWNoIHdlIHJlcGxhY2UgaWYgd2UgY2FuIG5vIGxvbmdlciB1c2Ug aXQuICAqLworICAvKiBJZiB3ZSBoYXZlIHNlZW4gYSBiYWNrZWRnZSwgdGhl biB3ZSByZWx5IHNvbGVseSBvbiB0aGUgRlNNIHRocmVhZGVyCisgICAgIHRv IGZpbmQganVtcCB0aHJlYWRzLiAgKi8KICAgaWYgKCpiYWNrZWRnZV9zZWVu X3ApCi0gICAgc2ltcGxpZnkgPSBkdW1teV9zaW1wbGlmeTsKKyAgICByZXR1 cm4gMDsKIAogICAvKiBXZSB3YW50IHRvIHJlY29yZCBhbnkgZXF1aXZhbGVu Y2VzIGNyZWF0ZWQgYnkgdHJhdmVyc2luZyBFLiAgKi8KICAgaWYgKCFoYW5k bGVfZG9taW5hdGluZ19hc3NlcnRzKQpAQCAtMTAxOSwyNiArMTAxNyw2IEBA IHRocmVhZF90aHJvdWdoX25vcm1hbF9ibG9jayAoZWRnZSBlLAogCQkJCSAg ICAgIGJhY2tlZGdlX3NlZW5fcCk7CiAJICByZXR1cm4gMTsKIAl9Ci0KLSAg ICAgIGlmICghZmxhZ19leHBlbnNpdmVfb3B0aW1pemF0aW9ucwotCSAgfHwg b3B0aW1pemVfZnVuY3Rpb25fZm9yX3NpemVfcCAoY2Z1bikKLQkgIHx8ICEo VFJFRV9DT0RFIChjb25kKSA9PSBTU0FfTkFNRQotCSAgICAgICB8fCAoVFJF RV9DT0RFX0NMQVNTIChUUkVFX0NPREUgKGNvbmQpKSA9PSB0Y2NfY29tcGFy aXNvbgotCQkgICAmJiBUUkVFX0NPREUgKFRSRUVfT1BFUkFORCAoY29uZCwg MCkpID09IFNTQV9OQU1FCi0JCSAgICYmIFRSRUVfQ09ERSAoVFJFRV9PUEVS QU5EIChjb25kLCAxKSkgPT0gSU5URUdFUl9DU1QpKQotCSAgfHwgZS0+ZGVz dC0+bG9vcF9mYXRoZXIgIT0gZS0+c3JjLT5sb29wX2ZhdGhlcgotCSAgfHwg bG9vcF9kZXB0aCAoZS0+ZGVzdC0+bG9vcF9mYXRoZXIpID09IDApCi0JcmV0 dXJuIDA7Ci0KLSAgICAgIC8qIEV4dHJhY3QgdGhlIFNTQV9OQU1FIHdlIHdh bnQgdG8gdHJhY2UgYmFja3dhcmRzIGlmIENPTkQgaXMgbm90Ci0JIGFscmVh ZHkgYSBiYXJlIFNTQV9OQU1FLiAgKi8KLSAgICAgIGlmIChUUkVFX0NPREUg KGNvbmQpICE9IFNTQV9OQU1FKQotCWNvbmQgPSBUUkVFX09QRVJBTkQgKGNv bmQsIDApOwotCi0gICAgICAvKiBXaGVuIENPTkQgY2Fubm90IGJlIHNpbXBs aWZpZWQsIHRyeSB0byBmaW5kIHBhdGhzIGZyb20gYSBjb250cm9sCi0JIHN0 YXRlbWVudCBiYWNrIHRocm91Z2ggdGhlIFBISSBub2RlcyB3aGljaCB3b3Vs ZCBhZmZlY3QgdGhhdCBjb250cm9sCi0JIHN0YXRlbWVudC4gICovCi0gICAg ICBmaW5kX2p1bXBfdGhyZWFkc19iYWNrd2FyZHMgKGNvbmQsIGUtPmRlc3Qp OwogICAgIH0KICAgcmV0dXJuIDA7CiB9CkBAIC0xMTE4LDYgKzEwOTYsOCBA QCB0aHJlYWRfYWNyb3NzX2VkZ2UgKGdjb25kICpkdW1teV9jb25kLAogICAg ICAgcGF0aC0+cmVsZWFzZSAoKTsKICAgICAgIGRlbGV0ZSBwYXRoOwogCisg ICAgICBmaW5kX2p1bXBfdGhyZWFkc19iYWNrd2FyZHMgKGUpOworCiAgICAg ICAvKiBBIG5lZ2F0aXZlIHN0YXR1cyBpbmRpY2F0ZXMgdGhlIHRhcmdldCBi bG9jayB3YXMgZGVlbWVkIHRvbyBiaWcgdG8KIAkgZHVwbGljYXRlLiAgSnVz dCBxdWl0IG5vdyByYXRoZXIgdGhhbiB0cnlpbmcgdG8gdXNlIHRoZSBibG9j ayBhcwogCSBhIGpvaW5lciBpbiBhIGp1bXAgdGhyZWFkaW5nIHBhdGguCkBA IC0xMjE3LDYgKzExOTcsNyBAQCB0aHJlYWRfYWNyb3NzX2VkZ2UgKGdjb25k ICpkdW1teV9jb25kLAogCSAgfQogCWVsc2UKIAkgIHsKKwkgICAgZmluZF9q dW1wX3RocmVhZHNfYmFja3dhcmRzIChwYXRoLT5sYXN0ICgpLT5lKTsKIAkg ICAgZGVsZXRlX2p1bXBfdGhyZWFkX3BhdGggKHBhdGgpOwogCSAgfQogCg== --------------060303010908020108050904--