From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 108428 invoked by alias); 10 Aug 2016 23:09:29 -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 108417 invoked by uid 89); 10 Aug 2016 23:09:29 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.4 required=5.0 tests=AWL,BAYES_00,RCVD_IN_DNSWL_LOW,SPF_PASS autolearn=ham version=3.3.2 spammy=starts, MULT_EXPR, mult_expr, Bootstrapped X-HELO: mail-pf0-f177.google.com Received: from mail-pf0-f177.google.com (HELO mail-pf0-f177.google.com) (209.85.192.177) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-GCM-SHA256 encrypted) ESMTPS; Wed, 10 Aug 2016 23:09:18 +0000 Received: by mail-pf0-f177.google.com with SMTP id p64so20212893pfb.1 for ; Wed, 10 Aug 2016 16:09:18 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:subject:to:references:cc:from:message-id:date :user-agent:mime-version:in-reply-to; bh=YUUKMCqQYinAqGpAvTshcf4Z5TMRQz+4NkcNyQrd75U=; b=VwdjZs+NHyenL1RsnyUtUS2hJGMgr/ruob9Dt3qamNVtB8KjuJ+iiAVhGMMLWmnrIB PRl54AzQdaQ10+a3QnpoIkQ3lzZ6qqP9o95Q7ou5WUB72e9Hrv/Bj3kYlfdUqPehmJYY 3CQVw7Wsd2oRuScJjLwhwGCxZIqH64oeYz1AZKWeZkGoM1+MppGTTOJi9A63LZudTZzS bTgJ8MvFAuVLjg0A+i1wukhEUxDhT4z7EijLXaMiGjHKGeOxAMD93BQ39ZUx1prfPCbF A8NVIwXj+OhJLBKXtq8wnbSUtsDmiNjftQo6TggxEpENy7s671ZpgFzq8X2TUg55nP5F hxIw== X-Gm-Message-State: AEkoousinCI5slmMxR0+Eo+l37Xed6/CQkQHerMRwHGIVkzhrcjeQWBx32ATDiDz7fcm7xZK X-Received: by 10.98.60.20 with SMTP id j20mr11482462pfa.114.1470870556529; Wed, 10 Aug 2016 16:09:16 -0700 (PDT) Received: from [10.1.1.4] (58-6-183-210.dyn.iinet.net.au. [58.6.183.210]) by smtp.gmail.com with ESMTPSA id xx7sm66598790pac.3.2016.08.10.16.09.13 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 10 Aug 2016 16:09:15 -0700 (PDT) Subject: Re: [PR72835] Incorrect arithmetic optimization involving bitfield arguments To: Richard Biener , Jakub Jelinek References: <0a1eaaf8-3ede-cd56-ffb5-40b25f94e46e@linaro.org> <98613cff-7c48-1a56-0014-6d87c35a8f26@linaro.org> <20160809214617.GB14857@tucnak.redhat.com> <7210cceb-be3b-44b1-13b7-4152e89d2a4f@linaro.org> <20160809215527.GC14857@tucnak.redhat.com> <0c53b0f3-4af6-387c-9350-95b1ae85850d@linaro.org> <20160810085703.GH14857@tucnak.redhat.com> Cc: "gcc-patches@gcc.gnu.org" From: kugan Message-ID: Date: Wed, 10 Aug 2016 23:09:00 -0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.2.0 MIME-Version: 1.0 In-Reply-To: Content-Type: multipart/mixed; boundary="------------5FEEB9FC85382B206177E29D" X-IsSubscribed: yes X-SW-Source: 2016-08/txt/msg00872.txt.bz2 This is a multi-part message in MIME format. --------------5FEEB9FC85382B206177E29D Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Content-length: 3522 Hi, On 10/08/16 20:28, Richard Biener wrote: > On Wed, Aug 10, 2016 at 10:57 AM, Jakub Jelinek wrote: >> On Wed, Aug 10, 2016 at 08:51:32AM +1000, kugan wrote: >>> I see it now. The problem is we are just looking at (-1) being in the ops >>> list for passing changed to rewrite_expr_tree in the case of multiplication >>> by negate. If we have combined (-1), as in the testcase, we will not have >>> the (-1) and will pass changed=false to rewrite_expr_tree. >>> >>> We should set changed based on what happens in try_special_add_to_ops. >>> Attached patch does this. Bootstrap and regression testing are ongoing. Is >>> this OK for trunk if there is no regression. >> >> I think the bug is elsewhere. In particular in >> undistribute_ops_list/zero_one_operation/decrement_power. >> All those look problematic in this regard, they change RHS of statements >> to something that holds a different value, while keeping the LHS. >> So, generally you should instead just add a new stmt next to the old one, >> and adjust data structures (replace the old SSA_NAME in some ->op with >> the new one). decrement_power might be a problem here, dunno if all the >> builtins are const in all cases that DSE would kill the old one, >> Richard, any preferences for that? reset flow sensitive info + reset debug >> stmt uses, or something different? Though, replacing the LHS with a new >> anonymous SSA_NAME might be needed too, in case it is before SSA_NAME of a >> user var that doesn't yet have any debug stmts. > > I'd say replacing the LHS is the way to go, with calling the appropriate helper > on the old stmt to generate a debug stmt for it / its uses (would need > to look it > up here). > Here is an attempt to fix it. The problem arises when in undistribute_ops_list, we linearize_expr_tree such that NEGATE_EXPR is added (-1) MULT_EXPR (OP). Real problem starts when we handle this in zero_one_operation. Unlike what was done earlier, we now change the stmt (with propagate_op_to_signle use or by directly) such that the value computed by stmt is no longer what it used to be. Because of this, what is computed in undistribute_ops_list and rewrite_expr_tree are also changed. undistribute_ops_list already expects this but rewrite_expr_tree will not if we dont pass the changed as an argument. The way I am fixing this now is, in linearize_expr_tree, I set ops_changed to true if we change NEGATE_EXPR to (-1) MULT_EXPR (OP). Then when we call zero_one_operation with ops_changed = true, I replace all the LHS in zero_one_operation with the new SSA and replace all the uses. I also call the rewrite_expr_tree with changed = false in this case. Does this make sense? Bootstrapped and regression tested for x86_64-linux-gnu without any new regressions. Thanks, Kugan gcc/testsuite/ChangeLog: 2016-08-10 Kugan Vivekanandarajah PR tree-optimization/72835 * gcc.dg/tree-ssa/pr72835.c: New test. gcc/ChangeLog: 2016-08-10 Kugan Vivekanandarajah PR tree-optimization/72835 * tree-ssa-reassoc.c (zero_one_operation): Incase of NEGATE_EXPR create and use new SSA_NAME. (try_special_add_to_ops): Return true if we changed the value in operands. (linearize_expr_tree): Return true if try_special_add_top_ops set ops_changed to true. (undistribute_ops_list): Likewise. (reassociate_bb): Pass ops_changed returned by linearlize_expr_tree to rewrite_expr_tree. whil cif we change the operands such that the /zero_one_operation --------------5FEEB9FC85382B206177E29D Content-Type: text/plain; charset=UTF-8; name="p.txt" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="p.txt" Content-length: 12176 ZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3RyZWUtc3NhL3By NzI4MzUuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3RyZWUtc3NhL3ByNzI4 MzUuYwppbmRleCBlNjlkZTI5Li4wNDllZGRjIDEwMDY0NAotLS0gYS9nY2Mv dGVzdHN1aXRlL2djYy5kZy90cmVlLXNzYS9wcjcyODM1LmMKKysrIGIvZ2Nj L3Rlc3RzdWl0ZS9nY2MuZGcvdHJlZS1zc2EvcHI3MjgzNS5jCkBAIC0wLDAg KzEsMzYgQEAKKy8qIFBSIHRyZWUtb3B0aW1pemF0aW9uLzcyODM1LiAgKi8K Ky8qIHsgZGctZG8gcnVuIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLU8yIiB9 ICovCisKK3N0cnVjdCBzdHJ1Y3RfMSB7CisgICAgdW5zaWduZWQgaW50IG0x IDogNiA7CisgICAgdW5zaWduZWQgaW50IG0yIDogMjQgOworICAgIHVuc2ln bmVkIGludCBtMyA6IDYgOworfTsKKwordW5zaWduZWQgc2hvcnQgdmFyXzMy ID0gMHgyZDEwOworCitzdHJ1Y3Qgc3RydWN0XzEgczE7CisKK3ZvaWQgaW5p dCAoKQoreworICBzMS5tMSA9IDQ7CisgIHMxLm0yID0gMHg3Y2E0Yjg7Cisg IHMxLm0zID0gMjQ7Cit9CisKK3ZvaWQgZm9vICgpCit7CisgIHVuc2lnbmVk IGludCBjCisgICAgPSAoKHVuc2lnbmVkIGludCkgczEubTIpICogKC0oKHVu c2lnbmVkIGludCkgczEubTMpKQorICAgICsgKHZhcl8zMikgKiAoLSgodW5z aWduZWQgaW50KSAoczEubTEpKSk7CisgIGlmIChjICE9IDQwOTg4NzM5ODQp CisgICAgX19idWlsdGluX2Fib3J0ICgpOworfQorCitpbnQgbWFpbiAoKQor eworICAgIGluaXQgKCk7CisgICAgZm9vICgpOworICAgIHJldHVybiAwOwor fQpkaWZmIC0tZ2l0IGEvZ2NjL3RyZWUtc3NhLXJlYXNzb2MuYyBiL2djYy90 cmVlLXNzYS1yZWFzc29jLmMKaW5kZXggN2ZkNzU1MC4uMDM4ZGE0MSAxMDA2 NDQKLS0tIGEvZ2NjL3RyZWUtc3NhLXJlYXNzb2MuYworKysgYi9nY2MvdHJl ZS1zc2EtcmVhc3NvYy5jCkBAIC0xMDM5LDcgKzEwMzksNyBAQCBlbGltaW5h dGVfdXNpbmdfY29uc3RhbnRzIChlbnVtIHRyZWVfY29kZSBvcGNvZGUsCiAK IAogc3RhdGljIHZvaWQgbGluZWFyaXplX2V4cHJfdHJlZSAodmVjPG9wZXJh bmRfZW50cnkgKj4gKiwgZ2ltcGxlICosCi0JCQkJIGJvb2wsIGJvb2wpOwor CQkJCSBib29sLCBib29sLCBib29sICopOwogCiAvKiBTdHJ1Y3R1cmUgZm9y IHRyYWNraW5nIGFuZCBjb3VudGluZyBvcGVyYW5kcy4gICovCiBzdHJ1Y3Qg b2Vjb3VudCB7CkBAIC0xMTgzLDcgKzExODMsNyBAQCBwcm9wYWdhdGVfb3Bf dG9fc2luZ2xlX3VzZSAodHJlZSBvcCwgZ2ltcGxlICpzdG10LCB0cmVlICpk ZWYpCiAgICBpcyB1cGRhdGVkIGlmIHRoZXJlIGlzIG9ubHkgb25lIG9wZXJh bmQgYnV0IG5vIG9wZXJhdGlvbiBsZWZ0LiAgKi8KIAogc3RhdGljIHZvaWQK LXplcm9fb25lX29wZXJhdGlvbiAodHJlZSAqZGVmLCBlbnVtIHRyZWVfY29k ZSBvcGNvZGUsIHRyZWUgb3ApCit6ZXJvX29uZV9vcGVyYXRpb24gKHRyZWUg KmRlZiwgZW51bSB0cmVlX2NvZGUgb3Bjb2RlLCB0cmVlIG9wLCBib29sIG9w c19jaGFuZ2VkKQogewogICBnaW1wbGUgKnN0bXQgPSBTU0FfTkFNRV9ERUZf U1RNVCAoKmRlZik7CiAKQEAgLTExOTMsNiArMTE5MywyNyBAQCB6ZXJvX29u ZV9vcGVyYXRpb24gKHRyZWUgKmRlZiwgZW51bSB0cmVlX2NvZGUgb3Bjb2Rl LCB0cmVlIG9wKQogCiAgICAgICBpZiAob3Bjb2RlID09IE1VTFRfRVhQUikK IAl7CisJICAvKiBJbiB0aGlzIGNhc2UsIHRoZSByZXN1bHQgaW4gdGhlICpk ZWYgd2lsbCBiZSBkaWZmZXJlbnQgYXMKKwkgICAgIGNvbXBhcmVkIHRvIGhv dyBpdCB3YXMuICBUaGVyZWZvcmUsIHRvIGF2b2lkIGhhdmluZyBTU0EKKwkg ICAgIHdoaWNoIHdpbGwgaGF2ZSByYW5nZV9pbmZvIGFuZCBkZWJ1ZyB0aGF0 IHJlZmxlY3RzIG9sZAorCSAgICAgb3BlcmF0aW9uLCBjcmVhdGUgYSBuZXcg U1NBIGFuZCB1c2UgaXQgKFBSNzI4MzUpLiAgKi8KKwkgIGlmIChvcHNfY2hh bmdlZCkKKwkgICAgeworCSAgICAgIGltbV91c2VfaXRlcmF0b3IgaXRlcjsK KwkgICAgICB1c2Vfb3BlcmFuZF9wIHVzZV9wOworCSAgICAgIGdpbXBsZSAq dXNlX3N0bXQ7CisJICAgICAgdHJlZSBsaHMgPSBnaW1wbGVfYXNzaWduX2xo cyAoc3RtdCk7CisJICAgICAgdHJlZSBuZXdfbGhzID0gbWFrZV9zc2FfbmFt ZSAoVFJFRV9UWVBFIChsaHMpKTsKKwkgICAgICBGT1JfRUFDSF9JTU1fVVNF X1NUTVQgKHVzZV9zdG10LCBpdGVyLCBsaHMpCisJCXsKKwkJICBGT1JfRUFD SF9JTU1fVVNFX09OX1NUTVQgKHVzZV9wLCBpdGVyKQorCQkgICAgU0VUX1VT RSAodXNlX3AsIG5ld19saHMpOworCQkgIHVwZGF0ZV9zdG10ICh1c2Vfc3Rt dCk7CisJCX0KKwkgICAgICBpZiAoKmRlZiA9PSBsaHMpCisJCSpkZWYgPSBu ZXdfbGhzOworCSAgICAgIGdpbXBsZV9zZXRfbGhzIChzdG10LCBuZXdfbGhz KTsKKwkgICAgfQogCSAgaWYgKHN0bXRfaXNfcG93ZXJfb2Zfb3AgKHN0bXQs IG9wKSkKIAkgICAgewogCSAgICAgIGlmIChkZWNyZW1lbnRfcG93ZXIgKHN0 bXQpID09IDEpCkBAIC0xMjQxLDYgKzEyNjIsMjYgQEAgemVyb19vbmVfb3Bl cmF0aW9uICh0cmVlICpkZWYsIGVudW0gdHJlZV9jb2RlIG9wY29kZSwgdHJl ZSBvcCkKIAkgICYmIGhhc19zaW5nbGVfdXNlIChnaW1wbGVfYXNzaWduX3Jo czIgKHN0bXQpKSkKIAl7CiAJICBnaW1wbGUgKnN0bXQyID0gU1NBX05BTUVf REVGX1NUTVQgKGdpbXBsZV9hc3NpZ25fcmhzMiAoc3RtdCkpOworCSAgLyog SW4gdGhpcyBjYXNlIHRoZSByZXN1bHQgaW4gdGhlIG9wIHdpbGwgYmUKKwkg ICAgIGRpZmZlcmVudCBhcyBjb21wYXJlZCB0byBob3cgaXQgd2FzLiAgVGhl cmVmb3JlLCB0byBhdm9pZAorCSAgICAgaGF2aW5nIFNTQSB3aGljaCB3aWxs IGhhdmUgcmFuZ2VfaW5mbyBhbmQgZGVidWcgdGhhdAorCSAgICAgcmVmbGVj dHMgb2xkIG9wZXJhdGlvbiwgY3JlYXRlIGEgbmV3IFNTQSBhbmQgdXNlCisJ ICAgICBpdCAoUFI3MjgzNSkuICAqLworCSAgaWYgKG9wc19jaGFuZ2VkKQor CSAgICB7CisJICAgICAgaW1tX3VzZV9pdGVyYXRvciBpdGVyOworCSAgICAg IHVzZV9vcGVyYW5kX3AgdXNlX3A7CisJICAgICAgZ2ltcGxlICp1c2Vfc3Rt dDsKKwkgICAgICB0cmVlIGxocyA9IGdpbXBsZV9hc3NpZ25fbGhzIChzdG10 Mik7CisJICAgICAgdHJlZSBuZXdfbGhzID0gbWFrZV9zc2FfbmFtZSAoVFJF RV9UWVBFIChsaHMpKTsKKwkgICAgICBGT1JfRUFDSF9JTU1fVVNFX1NUTVQg KHVzZV9zdG10LCBpdGVyLCBsaHMpCisJCXsKKwkJICBGT1JfRUFDSF9JTU1f VVNFX09OX1NUTVQgKHVzZV9wLCBpdGVyKQorCQkgICAgU0VUX1VTRSAodXNl X3AsIG5ld19saHMpOworCQkgIHVwZGF0ZV9zdG10ICh1c2Vfc3RtdCk7CisJ CX0KKwkgICAgICBnaW1wbGVfc2V0X2xocyAoc3RtdDIsIG5ld19saHMpOwor CSAgICB9CiAJICBpZiAoc3RtdF9pc19wb3dlcl9vZl9vcCAoc3RtdDIsIG9w KSkKIAkgICAgewogCSAgICAgIGlmIChkZWNyZW1lbnRfcG93ZXIgKHN0bXQy KSA9PSAxKQpAQCAtMTQ1Myw3ICsxNDk0LDggQEAgYnVpbGRfYW5kX2FkZF9z dW0gKHRyZWUgdHlwZSwgdHJlZSBvcDEsIHRyZWUgb3AyLCBlbnVtIHRyZWVf Y29kZSBvcGNvZGUpCiAKIHN0YXRpYyBib29sCiB1bmRpc3RyaWJ1dGVfb3Bz X2xpc3QgKGVudW0gdHJlZV9jb2RlIG9wY29kZSwKLQkJICAgICAgIHZlYzxv cGVyYW5kX2VudHJ5ICo+ICpvcHMsIHN0cnVjdCBsb29wICpsb29wKQorCQkg ICAgICAgdmVjPG9wZXJhbmRfZW50cnkgKj4gKm9wcywgc3RydWN0IGxvb3Ag Kmxvb3AsCisJCSAgICAgICBib29sICpvcHNfY2hhbmdlZCkKIHsKICAgdW5z aWduZWQgaW50IGxlbmd0aCA9IG9wcy0+bGVuZ3RoICgpOwogICBvcGVyYW5k X2VudHJ5ICpvZTE7CkBAIC0xNTIxLDcgKzE1NjMsNyBAQCB1bmRpc3RyaWJ1 dGVfb3BzX2xpc3QgKGVudW0gdHJlZV9jb2RlIG9wY29kZSwKICAgICAgIG9l ZGVmID0gU1NBX05BTUVfREVGX1NUTVQgKCgqb3BzKVtpXS0+b3ApOwogICAg ICAgb2Vjb2RlID0gZ2ltcGxlX2Fzc2lnbl9yaHNfY29kZSAob2VkZWYpOwog ICAgICAgbGluZWFyaXplX2V4cHJfdHJlZSAoJnN1Ym9wc1tpXSwgb2VkZWYs Ci0JCQkgICBhc3NvY2lhdGl2ZV90cmVlX2NvZGUgKG9lY29kZSksIGZhbHNl KTsKKwkJCSAgIGFzc29jaWF0aXZlX3RyZWVfY29kZSAob2Vjb2RlKSwgZmFs c2UsIG9wc19jaGFuZ2VkKTsKIAogICAgICAgRk9SX0VBQ0hfVkVDX0VMVCAo c3Vib3BzW2ldLCBqLCBvZTEpCiAJewpAQCAtMTYxNyw3ICsxNjU5LDcgQEAg dW5kaXN0cmlidXRlX29wc19saXN0IChlbnVtIHRyZWVfY29kZSBvcGNvZGUs CiAJICAgICAgZnByaW50ZiAoZHVtcF9maWxlLCAiQnVpbGRpbmcgKCIpOwog CSAgICAgIHByaW50X2dlbmVyaWNfZXhwciAoZHVtcF9maWxlLCBvZTEtPm9w LCAwKTsKIAkgICAgfQotCSAgemVyb19vbmVfb3BlcmF0aW9uICgmb2UxLT5v cCwgYy0+b2Vjb2RlLCBjLT5vcCk7CisJICB6ZXJvX29uZV9vcGVyYXRpb24g KCZvZTEtPm9wLCBjLT5vZWNvZGUsIGMtPm9wLCAqb3BzX2NoYW5nZWQpOwog CSAgRVhFQ1VURV9JRl9TRVRfSU5fQklUTUFQIChjYW5kaWRhdGVzMiwgZmly c3QrMSwgaSwgc2JpMCkKIAkgICAgewogCSAgICAgIGdpbXBsZSAqc3VtOwpA QCAtMTYyNyw3ICsxNjY5LDcgQEAgdW5kaXN0cmlidXRlX29wc19saXN0IChl bnVtIHRyZWVfY29kZSBvcGNvZGUsCiAJCSAgZnByaW50ZiAoZHVtcF9maWxl LCAiICsgIik7CiAJCSAgcHJpbnRfZ2VuZXJpY19leHByIChkdW1wX2ZpbGUs IG9lMi0+b3AsIDApOwogCQl9Ci0JICAgICAgemVyb19vbmVfb3BlcmF0aW9u ICgmb2UyLT5vcCwgYy0+b2Vjb2RlLCBjLT5vcCk7CisJICAgICAgemVyb19v bmVfb3BlcmF0aW9uICgmb2UyLT5vcCwgYy0+b2Vjb2RlLCBjLT5vcCwgKm9w c19jaGFuZ2VkKTsKIAkgICAgICBzdW0gPSBidWlsZF9hbmRfYWRkX3N1bSAo VFJFRV9UWVBFIChvZTEtPm9wKSwKIAkJCQkgICAgICAgb2UxLT5vcCwgb2Uy LT5vcCwgb3Bjb2RlKTsKIAkgICAgICBvZTItPm9wID0gYnVpbGRfemVyb19j c3QgKFRSRUVfVFlQRSAob2UyLT5vcCkpOwpAQCAtNDQ1NiwxMiArNDQ5OCwx NiBAQCBhY2NlcHRhYmxlX3Bvd19jYWxsIChnY2FsbCAqc3RtdCwgdHJlZSAq YmFzZSwgSE9TVF9XSURFX0lOVCAqZXhwb25lbnQpCiB9CiAKIC8qIFRyeSB0 byBkZXJpdmUgYW5kIGFkZCBvcGVyYW5kIGVudHJ5IGZvciBPUCB0byAqT1BT LiAgUmV0dXJuIGZhbHNlIGlmCi0gICB1bnN1Y2Nlc3NmdWwuICAqLworICAg dW5zdWNjZXNzZnVsLiAgSWYgd2UgY2hhbmdlZCB0aGUgb3BlcmFuZHMgc3Vj aCB0aGF0IHRoZSAoaW50ZXJtZWRpYXRlKQorICAgcmVzdWx0cyBjYW4gYmUg ZGlmZmVyZW50IChhcyBpbiB0aGUgY2FzZSBvZiBORUdBVEVfRVhQUiBjb252 ZXJ0ZWQgdG8KKyAgIG11bHRpcGxpY2F0aW9uIGJ5IC0xKSwgc2V0IG9wc19j aGFuZ2VkIHRvIHRydWUgc28gdGhhdCB3ZSB3aWxsIG5vdAorICAgcmV1c2Ug dGhlIFNTQSAoUFI3MjgzNSkuICAqLwogCiBzdGF0aWMgYm9vbAogdHJ5X3Nw ZWNpYWxfYWRkX3RvX29wcyAodmVjPG9wZXJhbmRfZW50cnkgKj4gKm9wcywK IAkJCWVudW0gdHJlZV9jb2RlIGNvZGUsCi0JCQl0cmVlIG9wLCBnaW1wbGUq IGRlZl9zdG10KQorCQkJdHJlZSBvcCwgZ2ltcGxlKiBkZWZfc3RtdCwKKwkJ CWJvb2wgKm9wc19jaGFuZ2VkKQogewogICB0cmVlIGJhc2UgPSBOVUxMX1RS RUU7CiAgIEhPU1RfV0lERV9JTlQgZXhwb25lbnQgPSAwOwpAQCAtNDQ5Miw2 ICs0NTM4LDggQEAgdHJ5X3NwZWNpYWxfYWRkX3RvX29wcyAodmVjPG9wZXJh bmRfZW50cnkgKj4gKm9wcywKICAgICAgIGFkZF90b19vcHNfdmVjIChvcHMs IHJoczEpOwogICAgICAgYWRkX3RvX29wc192ZWMgKG9wcywgY3N0KTsKICAg ICAgIGdpbXBsZV9zZXRfdmlzaXRlZCAoZGVmX3N0bXQsIHRydWUpOworICAg ICAgaWYgKG9wc19jaGFuZ2VkKQorCSpvcHNfY2hhbmdlZCA9IHRydWU7CiAg ICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTQ0OTksMTEgKzQ1NDcs MTIgQEAgdHJ5X3NwZWNpYWxfYWRkX3RvX29wcyAodmVjPG9wZXJhbmRfZW50 cnkgKj4gKm9wcywKIH0KIAogLyogUmVjdXJzaXZlbHkgbGluZWFyaXplIGEg YmluYXJ5IGV4cHJlc3Npb24gdGhhdCBpcyB0aGUgUkhTIG9mIFNUTVQuCi0g ICBQbGFjZSB0aGUgb3BlcmFuZHMgb2YgdGhlIGV4cHJlc3Npb24gdHJlZSBp biB0aGUgdmVjdG9yIG5hbWVkIE9QUy4gICovCisgICBQbGFjZSB0aGUgb3Bl cmFuZHMgb2YgdGhlIGV4cHJlc3Npb24gdHJlZSBpbiB0aGUgdmVjdG9yIG5h bWVkIE9QUy4KKyAgIFJldHVybiBUUlVFIGlmIHRyeV9zcGVjaWFsX2FkZF90 b19vcHMgaGFzIHNldCBvcHNfY2hhbmdlZCB0byBUUlVFLiAgKi8KIAogc3Rh dGljIHZvaWQKIGxpbmVhcml6ZV9leHByX3RyZWUgKHZlYzxvcGVyYW5kX2Vu dHJ5ICo+ICpvcHMsIGdpbXBsZSAqc3RtdCwKLQkJICAgICBib29sIGlzX2Fz c29jaWF0aXZlLCBib29sIHNldF92aXNpdGVkKQorCQkgICAgIGJvb2wgaXNf YXNzb2NpYXRpdmUsIGJvb2wgc2V0X3Zpc2l0ZWQsIGJvb2wgKm9wc19jaGFu Z2VkKQogewogICB0cmVlIGJpbmxocyA9IGdpbXBsZV9hc3NpZ25fcmhzMSAo c3RtdCk7CiAgIHRyZWUgYmlucmhzID0gZ2ltcGxlX2Fzc2lnbl9yaHMyIChz dG10KTsKQEAgLTQ1NDcsMTAgKzQ1OTYsMTIgQEAgbGluZWFyaXplX2V4cHJf dHJlZSAodmVjPG9wZXJhbmRfZW50cnkgKj4gKm9wcywgZ2ltcGxlICpzdG10 LAogCiAgICAgICBpZiAoIWJpbnJoc2lzcmVhc3NvYykKIAl7Ci0JICBpZiAo IXRyeV9zcGVjaWFsX2FkZF90b19vcHMgKG9wcywgcmhzY29kZSwgYmlucmhz LCBiaW5yaHNkZWYpKQorCSAgaWYgKCF0cnlfc3BlY2lhbF9hZGRfdG9fb3Bz IChvcHMsIHJoc2NvZGUsIGJpbnJocywKKwkJCQkgICAgICAgYmlucmhzZGVm LCBvcHNfY2hhbmdlZCkpCiAJICAgIGFkZF90b19vcHNfdmVjIChvcHMsIGJp bnJocyk7CiAKLQkgIGlmICghdHJ5X3NwZWNpYWxfYWRkX3RvX29wcyAob3Bz LCByaHNjb2RlLCBiaW5saHMsIGJpbmxoc2RlZikpCisJICBpZiAoIXRyeV9z cGVjaWFsX2FkZF90b19vcHMgKG9wcywgcmhzY29kZSwgYmlubGhzLAorCQkJ CSAgICAgICBiaW5saHNkZWYsIG9wc19jaGFuZ2VkKSkKIAkgICAgYWRkX3Rv X29wc192ZWMgKG9wcywgYmlubGhzKTsKIAogCSAgcmV0dXJuOwpAQCAtNDU4 OCw5ICs0NjM5LDkgQEAgbGluZWFyaXplX2V4cHJfdHJlZSAodmVjPG9wZXJh bmRfZW50cnkgKj4gKm9wcywgZ2ltcGxlICpzdG10LAogCSAgICAgIHx8ICFp c19yZWFzc29jaWFibGVfb3AgKFNTQV9OQU1FX0RFRl9TVE1UIChiaW5yaHMp LAogCQkJCSAgICAgIHJoc2NvZGUsIGxvb3ApKTsKICAgbGluZWFyaXplX2V4 cHJfdHJlZSAob3BzLCBTU0FfTkFNRV9ERUZfU1RNVCAoYmlubGhzKSwKLQkJ ICAgICAgIGlzX2Fzc29jaWF0aXZlLCBzZXRfdmlzaXRlZCk7CisJCSAgICAg ICBpc19hc3NvY2lhdGl2ZSwgc2V0X3Zpc2l0ZWQsIG9wc19jaGFuZ2VkKTsK IAotICBpZiAoIXRyeV9zcGVjaWFsX2FkZF90b19vcHMgKG9wcywgcmhzY29k ZSwgYmlucmhzLCBiaW5yaHNkZWYpKQorICBpZiAoIXRyeV9zcGVjaWFsX2Fk ZF90b19vcHMgKG9wcywgcmhzY29kZSwgYmlucmhzLCBiaW5yaHNkZWYsIG9w c19jaGFuZ2VkKSkKICAgICBhZGRfdG9fb3BzX3ZlYyAob3BzLCBiaW5yaHMp OwogfQogCkBAIC01MzIyLDEyICs1MzczLDIwIEBAIHJlYXNzb2NpYXRlX2Ji IChiYXNpY19ibG9jayBiYikKIAkgICAgICBpZiAoVFJFRV9DT0RFIChsaHMp ID09IFNTQV9OQU1FICYmIGhhc196ZXJvX3VzZXMgKGxocykpCiAJCWNvbnRp bnVlOwogCisJICAgICAgYm9vbCBvcHNfY2hhbmdlZCA9IGZhbHNlOwogCSAg ICAgIGdpbXBsZV9zZXRfdmlzaXRlZCAoc3RtdCwgdHJ1ZSk7Ci0JICAgICAg bGluZWFyaXplX2V4cHJfdHJlZSAoJm9wcywgc3RtdCwgdHJ1ZSwgdHJ1ZSk7 CisJICAgICAgbGluZWFyaXplX2V4cHJfdHJlZSAoJm9wcywgc3RtdCwgdHJ1 ZSwgdHJ1ZSwgTlVMTCk7CiAJICAgICAgb3BzLnFzb3J0IChzb3J0X2J5X29w ZXJhbmRfcmFuayk7CiAJICAgICAgb3B0aW1pemVfb3BzX2xpc3QgKHJoc19j b2RlLCAmb3BzKTsKKwkgICAgICAvKiBXaGlsZSBpbiB1bmRpc3RyaWJ1dGVf b3BzX2xpc3QsIE5FR0FURV9FWFBSIGlzIGZhY3RvcmVkIG91dCwKKwkJIG9w ZXJhbmRzIHRvIHRoZSByZWFzc29jaWF0ZWQgc3RtdHMgd2lsbCBiZSBkaWZm ZXJlbnQKKwkJIGNvbXBhcmVkIHRvIGhvdyBpdCB3YXMuIEluIHRoaXMgY2Fz ZSwgdG8gYXZvaWQgaGF2aW5nIFNTQQorCQkgd2hpY2ggd2lsbCBoYXZlIHJh bmdlX2luZm8gYW5kIGRlYnVnIHRoYXQgcmVmbGVjdHMgb2xkCisJCSBvcGVy YXRpb24sIHJld3JpdGVfZXhwcl90cmVlIGhhcyB0byBiZSBjYWxsZWQgd2l0 aAorCQkgY2hhbmdlZCA9IHRydWUgKFBSNzI4MzUpLiAgKi8KIAkgICAgICBp ZiAodW5kaXN0cmlidXRlX29wc19saXN0IChyaHNfY29kZSwgJm9wcywKLQkJ CQkJIGxvb3BfY29udGFpbmluZ19zdG10IChzdG10KSkpCisJCQkJCSBsb29w X2NvbnRhaW5pbmdfc3RtdCAoc3RtdCksCisJCQkJCSAmb3BzX2NoYW5nZWQp KQogCQl7CiAJCSAgb3BzLnFzb3J0IChzb3J0X2J5X29wZXJhbmRfcmFuayk7 CiAJCSAgb3B0aW1pemVfb3BzX2xpc3QgKHJoc19jb2RlLCAmb3BzKTsKQEAg LTU0MTUsNyArNTQ3NCw4IEBAIHJlYXNzb2NpYXRlX2JiIChiYXNpY19ibG9j ayBiYikKIAogCQkgICAgICBuZXdfbGhzID0gcmV3cml0ZV9leHByX3RyZWUg KHN0bXQsIDAsIG9wcywKIAkJCQkJCSAgIHBvd2lfcmVzdWx0ICE9IE5VTEwK LQkJCQkJCSAgIHx8IG5lZ2F0ZV9yZXN1bHQpOworCQkJCQkJICAgfHwgbmVn YXRlX3Jlc3VsdAorCQkJCQkJICAgfHwgb3BzX2NoYW5nZWQpOwogICAgICAg ICAgICAgICAgICAgICB9CiAKIAkJICAvKiBJZiB3ZSBjb21iaW5lZCBzb21l IHJlcGVhdGVkIGZhY3RvcnMgaW50byBhIAo= --------------5FEEB9FC85382B206177E29D--