From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 30441 invoked by alias); 12 Oct 2015 21:39:57 -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 30421 invoked by uid 89); 12 Oct 2015 21:39:56 -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; Mon, 12 Oct 2015 21:39:48 +0000 Received: from int-mx09.intmail.prod.int.phx2.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by mx1.redhat.com (Postfix) with ESMTPS id 0771DC0AED25 for ; Mon, 12 Oct 2015 21:39:47 +0000 (UTC) Received: from localhost.localdomain (ovpn-113-105.phx2.redhat.com [10.3.113.105]) by int-mx09.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t9CLdkTZ013629 for ; Mon, 12 Oct 2015 17:39:46 -0400 To: gcc-patches@gcc.gnu.org From: Jeff Law Subject: [PATCH] Allow FSM threader to thread more complex conditions Message-ID: <561C28A2.50308@redhat.com> Date: Mon, 12 Oct 2015 21:39:00 -0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.2.0 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="------------000004030400000209040101" X-IsSubscribed: yes X-SW-Source: 2015-10/txt/msg01174.txt.bz2 This is a multi-part message in MIME format. --------------000004030400000209040101 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Content-length: 923 Right now the FSM threader only handles trivial conditions. Specifically looking up a naked SSA_NAME (used for GIMPLE_SWITCH) and SSA_NAME != 0. The FSM threader need not be so restrictive. We can easily use it to lookup things like SSA_NAME constant for integral and pointer names. Essentially the FSM threader walks backwards to find a value for a name. If we find a constant, we can then substitute the value into the expression and simplify. This patch implements the substitution part, then exploits it from tree-ssa-threadedge.c. I'm also renaming the test I added in my previous commit. It was poorly associated with DOM when in fact it was testing the FSM threader when called via VRP. Given the desire to run the FSM threader independently, I'm just going to call these ssa-thread-.c tests. Bootstrapped and regression tested on x86_64-linux-gnu. Installed on the trunk. Jeff --------------000004030400000209040101 Content-Type: text/plain; charset=UTF-8; name="patch" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="patch" Content-length: 17304 Y29tbWl0IDRiN2YwZmI3ZmJiMzM4YWU2NzdjODNkM2JlMzM1NzBlZGQ0NjQ4 ODUKQXV0aG9yOiBKZWZmIExhdyA8bGF3QHJlZGhhdC5jb20+CkRhdGU6ICAg TW9uIE9jdCAxMiAxNTozNzo0MiAyMDE1IC0wNjAwCgogICAgW1BBVENIXSBB bGxvdyBGU00gdGhyZWFkZXIgdG8gdGhyZWFkIG1vcmUgY29tcGxleCBjb25k aXRpb25zCiAgICAKICAgIAkqIHRyZWUtc3NhLXRocmVhZGJhY2t3YXJkLmMg KGdldF9naW1wbGVfY29udHJvbF9zdG10KTogTmV3IGZ1bmN0aW9uLgogICAg CShmc21fZmluZF9jb250cm9sX3N0bXRfcGF0aHMpOiBDaGFuZ2UgbmFtZSBv ZiBmaXJzdCBhcmd1bWVudCB0bwogICAgCW1vcmUgYWNjdXJhdGVseSByZWxm ZWN0IHdoYXQgaXQgcmVhbGx5IGlzLiAgSGFuZGxlIHNpbXBsaWZpY2F0aW9u CiAgICAJb2YgR0lNUExFX0NPTkQgYWZ0ZXIgZmluZGluZyBhIHRocmVhZCBw YXRoIGZvciBOQU1FLgogICAgCSogdHJlZS1zc2EtdGhyZWFkZWRnZS5jIChz aW1wbGlmeV9jb250cm9sX3N0bXRfY29uZGl0aW9uKTogQWxsb3cKICAgIAlu b250cml2aWFsIGNvbmRpdGlvbnMgdG8gYmUgaGFuZGxlZCBieSBGU00gdGhy ZWFkZXIuCiAgICAJKHRocmVhZF90aHJvdWdoX25vcm1hbF9ibG9jayk6IEV4 dHJhY3QgdGhlIG5hbWUgdG8gbG9vdXAgdmlhCiAgICAJRlNNIHRocmVhZGVy IGZyb20gQ09ORF9FWFBSLgogICAgCiAgICAJKiBnY2MuZGcvdHJlZS1zc2Ev c3NhLXRocmVhZC0xMi5jOiBOZXcgdGVzdC4KICAgIAkqIGdjYy5kZy90cmVl LXNzYS9zc2EtZG9tLXRocmVhZC03LmM6IFVwZGF0ZSBleHBlY3RlZCBvdXRw dXQuCiAgICAJKiBnY2MuZGcvdHJlZS1zc2Evc3NhLXRocmVhZC0xMS5jOiBS ZW5hbWVkIGZyb20KICAgIAlzc2EtZG9tLXRocmVhZC0xMS5jLgoKZGlmZiAt LWdpdCBhL2djYy9DaGFuZ2VMb2cgYi9nY2MvQ2hhbmdlTG9nCmluZGV4IDYx ZTQ2ZmYuLmE4NjUwNDMgMTAwNjQ0Ci0tLSBhL2djYy9DaGFuZ2VMb2cKKysr IGIvZ2NjL0NoYW5nZUxvZwpAQCAtNyw2ICs3LDE1IEBACiAKIDIwMTUtMTAt MTIgIEplZmYgTGF3ICA8bGF3QHJlZGhhdC5jb20+CiAKKwkqIHRyZWUtc3Nh LXRocmVhZGJhY2t3YXJkLmMgKGdldF9naW1wbGVfY29udHJvbF9zdG10KTog TmV3IGZ1bmN0aW9uLgorCShmc21fZmluZF9jb250cm9sX3N0bXRfcGF0aHMp OiBDaGFuZ2UgbmFtZSBvZiBmaXJzdCBhcmd1bWVudCB0bworCW1vcmUgYWNj dXJhdGVseSByZWxmZWN0IHdoYXQgaXQgcmVhbGx5IGlzLiAgSGFuZGxlIHNp bXBsaWZpY2F0aW9uCisJb2YgR0lNUExFX0NPTkQgYWZ0ZXIgZmluZGluZyBh IHRocmVhZCBwYXRoIGZvciBOQU1FLiAKKwkqIHRyZWUtc3NhLXRocmVhZGVk Z2UuYyAoc2ltcGxpZnlfY29udHJvbF9zdG10X2NvbmRpdGlvbik6IEFsbG93 CisJbm9udHJpdmlhbCBjb25kaXRpb25zIHRvIGJlIGhhbmRsZWQgYnkgRlNN IHRocmVhZGVyLgorCSh0aHJlYWRfdGhyb3VnaF9ub3JtYWxfYmxvY2spOiBF eHRyYWN0IHRoZSBuYW1lIHRvIGxvb3VwIHZpYQorCUZTTSB0aHJlYWRlciBm cm9tIENPTkRfRVhQUi4KKwogCSogdHJlZS1zc2EtdGhyZWFkYmFja3dhcmQu YyAoZnNtX2ZpbmRfdGhyZWFkX3BhdGgpOiBSZW1vdmUKIAlyZXN0cmljdGlv biB0aGF0IHRyYWNlZCBTU0FfTkFNRSBpcyBhIHVzZXIgdmFyaWFibGUuCiAK ZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvQ2hhbmdlTG9nIGIvZ2NjL3Rl c3RzdWl0ZS9DaGFuZ2VMb2cKaW5kZXggODlmMzM2My4uNGEwOGYwZiAxMDA2 NDQKLS0tIGEvZ2NjL3Rlc3RzdWl0ZS9DaGFuZ2VMb2cKKysrIGIvZ2NjL3Rl c3RzdWl0ZS9DaGFuZ2VMb2cKQEAgLTEsNSArMSwxMCBAQAogMjAxNS0xMC0x MiAgSmVmZiBMYXcgIDxsYXdAcmVkaGF0LmNvbT4KIAorCSogZ2NjLmRnL3Ry ZWUtc3NhL3NzYS10aHJlYWQtMTIuYzogTmV3IHRlc3QuCisJKiBnY2MuZGcv dHJlZS1zc2Evc3NhLWRvbS10aHJlYWQtNy5jOiBVcGRhdGUgZXhwZWN0ZWQg b3V0cHV0LgorCSogZ2NjLmRnL3RyZWUtc3NhL3NzYS10aHJlYWQtMTEuYzog UmVuYW1lZCBmcm9tCisJc3NhLWRvbS10aHJlYWQtMTEuYy4KKwogCSogZ2Nj LmRnL3RyZWUtc3NhL3NzYS1kb20tdGhyZWFkLTExLmM6IE5ldyB0ZXN0Lgog CiAyMDE1LTEwLTEyICBWaWxsZSBWb3V0aWxhaW5lbiAgPHZpbGxlLnZvdXRp bGFpbmVuQGdtYWlsLmNvbT4KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUv Z2NjLmRnL3RyZWUtc3NhL3NzYS1kb20tdGhyZWFkLTExLmMgYi9nY2MvdGVz dHN1aXRlL2djYy5kZy90cmVlLXNzYS9zc2EtZG9tLXRocmVhZC0xMS5jCmRl bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwM2QwMzM0Li4wMDAwMDAw Ci0tLSBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3RyZWUtc3NhL3NzYS1kb20t dGhyZWFkLTExLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi0v KiB7IGRnLWRvIGNvbXBpbGUgfSAqLwotLyogeyBkZy1vcHRpb25zICItTzIg LWZkdW1wLXRyZWUtdnJwMi1kZXRhaWxzIiB9ICovCi0vKiB7IGRnLWZpbmFs IHsgc2Nhbi10cmVlLWR1bXAgIkZTTSIgInZycDIiIH0gfSAqLwotCi12b2lk IGFib3J0ICh2b2lkKTsKLXR5cGVkZWYgc3RydWN0IGJpdG1hcF9oZWFkX2Rl ZiAqYml0bWFwOwotdHlwZWRlZiBjb25zdCBzdHJ1Y3QgYml0bWFwX2hlYWRf ZGVmICpjb25zdF9iaXRtYXA7Ci10eXBlZGVmIHN0cnVjdCBiaXRtYXBfb2Jz dGFjawotewotICBzdHJ1Y3QgYml0bWFwX29ic3RhY2sgKm5leHQ7Ci0gIHVu c2lnbmVkIGludCBpbmR4OwotfQotYml0bWFwX2VsZW1lbnQ7Ci10eXBlZGVm IHN0cnVjdCBiaXRtYXBfaGVhZF9kZWYKLXsKLSAgYml0bWFwX2VsZW1lbnQg KmZpcnN0OwotfQotYml0bWFwX2hlYWQ7Ci1zdGF0aWMgX19pbmxpbmVfXyB1 bnNpZ25lZCBjaGFyCi1iaXRtYXBfZWx0X2lvciAoYml0bWFwIGRzdCwgYml0 bWFwX2VsZW1lbnQgKiBkc3RfZWx0LAotCQliaXRtYXBfZWxlbWVudCAqIGRz dF9wcmV2LCBjb25zdCBiaXRtYXBfZWxlbWVudCAqIGFfZWx0LAotCQljb25z dCBiaXRtYXBfZWxlbWVudCAqIGJfZWx0KQotewotICAoKHZvaWQpICghKGFf ZWx0IHx8IGJfZWx0KSA/IGFib3J0ICgpLCAwIDogMCkpOwotfQotCi11bnNp Z25lZCBjaGFyCi1iaXRtYXBfaW9yX2FuZF9jb21wbCAoYml0bWFwIGRzdCwg Y29uc3RfYml0bWFwIGEsIGNvbnN0X2JpdG1hcCBiLAotCQkgICAgICBjb25z dF9iaXRtYXAga2lsbCkKLXsKLSAgYml0bWFwX2VsZW1lbnQgKmRzdF9lbHQg PSBkc3QtPmZpcnN0OwotICBjb25zdCBiaXRtYXBfZWxlbWVudCAqYV9lbHQg PSBhLT5maXJzdDsKLSAgY29uc3QgYml0bWFwX2VsZW1lbnQgKmJfZWx0ID0g Yi0+Zmlyc3Q7Ci0gIGNvbnN0IGJpdG1hcF9lbGVtZW50ICpraWxsX2VsdCA9 IGtpbGwtPmZpcnN0OwotICBiaXRtYXBfZWxlbWVudCAqZHN0X3ByZXYgPSAo KHZvaWQgKikgMCk7Ci0gIHdoaWxlIChhX2VsdCB8fCBiX2VsdCkKLSAgICB7 Ci0gICAgICBpZiAoYl9lbHQgJiYga2lsbF9lbHQgJiYga2lsbF9lbHQtPmlu ZHggPT0gYl9lbHQtPmluZHgKLQkgICYmICghYV9lbHQgfHwgYV9lbHQtPmlu ZHggPj0gYl9lbHQtPmluZHgpKTsKLSAgICAgIGVsc2UKLQl7Ci0JICBiaXRt YXBfZWx0X2lvciAoZHN0LCBkc3RfZWx0LCBkc3RfcHJldiwgYV9lbHQsIGJf ZWx0KTsKLQkgIGlmIChhX2VsdCAmJiBiX2VsdCAmJiBhX2VsdC0+aW5keCA9 PSBiX2VsdC0+aW5keCkKLQkgICAgOwotCSAgZWxzZSBpZiAoYV9lbHQgJiYg KCFiX2VsdCB8fCBhX2VsdC0+aW5keCA8PSBiX2VsdC0+aW5keCkpCi0JICAg IGFfZWx0ID0gYV9lbHQtPm5leHQ7Ci0JfQotICAgIH0KLX0KZGlmZiAtLWdp dCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3RyZWUtc3NhL3NzYS1kb20tdGhy ZWFkLTcuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3RyZWUtc3NhL3NzYS1k b20tdGhyZWFkLTcuYwppbmRleCBkOGJlMDIzLi40NDVmMjUwIDEwMDY0NAot LS0gYS9nY2MvdGVzdHN1aXRlL2djYy5kZy90cmVlLXNzYS9zc2EtZG9tLXRo cmVhZC03LmMKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdHJlZS1zc2Ev c3NhLWRvbS10aHJlYWQtNy5jCkBAIC0xLDYgKzEsNiBAQAogLyogeyBkZy1k byBjb21waWxlIH0gKi8KIC8qIHsgZGctb3B0aW9ucyAiLU8yIC1mZHVtcC10 cmVlLWRvbTEtZGV0YWlscyIgfSAqLwotLyogeyBkZy1maW5hbCB7IHNjYW4t dHJlZS1kdW1wLXRpbWVzICJGU00iIDE5ICJkb20xIiB9IH0gKi8KKy8qIHsg ZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAiRlNNIiAzOCAiZG9t MSIgfSB9ICovCiAKIGVudW0gU1RBVEUgewogICBTMD0wLApkaWZmIC0tZ2l0 IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdHJlZS1zc2Evc3NhLXRocmVhZC0x MS5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdHJlZS1zc2Evc3NhLXRocmVh ZC0xMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAz ZDAzMzQKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy5k Zy90cmVlLXNzYS9zc2EtdGhyZWFkLTExLmMKQEAgLTAsMCArMSw0OSBAQAor LyogeyBkZy1kbyBjb21waWxlIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLU8y IC1mZHVtcC10cmVlLXZycDItZGV0YWlscyIgfSAqLworLyogeyBkZy1maW5h bCB7IHNjYW4tdHJlZS1kdW1wICJGU00iICJ2cnAyIiB9IH0gKi8KKwordm9p ZCBhYm9ydCAodm9pZCk7Cit0eXBlZGVmIHN0cnVjdCBiaXRtYXBfaGVhZF9k ZWYgKmJpdG1hcDsKK3R5cGVkZWYgY29uc3Qgc3RydWN0IGJpdG1hcF9oZWFk X2RlZiAqY29uc3RfYml0bWFwOwordHlwZWRlZiBzdHJ1Y3QgYml0bWFwX29i c3RhY2sKK3sKKyAgc3RydWN0IGJpdG1hcF9vYnN0YWNrICpuZXh0OworICB1 bnNpZ25lZCBpbnQgaW5keDsKK30KK2JpdG1hcF9lbGVtZW50OwordHlwZWRl ZiBzdHJ1Y3QgYml0bWFwX2hlYWRfZGVmCit7CisgIGJpdG1hcF9lbGVtZW50 ICpmaXJzdDsKK30KK2JpdG1hcF9oZWFkOworc3RhdGljIF9faW5saW5lX18g dW5zaWduZWQgY2hhcgorYml0bWFwX2VsdF9pb3IgKGJpdG1hcCBkc3QsIGJp dG1hcF9lbGVtZW50ICogZHN0X2VsdCwKKwkJYml0bWFwX2VsZW1lbnQgKiBk c3RfcHJldiwgY29uc3QgYml0bWFwX2VsZW1lbnQgKiBhX2VsdCwKKwkJY29u c3QgYml0bWFwX2VsZW1lbnQgKiBiX2VsdCkKK3sKKyAgKCh2b2lkKSAoIShh X2VsdCB8fCBiX2VsdCkgPyBhYm9ydCAoKSwgMCA6IDApKTsKK30KKwordW5z aWduZWQgY2hhcgorYml0bWFwX2lvcl9hbmRfY29tcGwgKGJpdG1hcCBkc3Qs IGNvbnN0X2JpdG1hcCBhLCBjb25zdF9iaXRtYXAgYiwKKwkJICAgICAgY29u c3RfYml0bWFwIGtpbGwpCit7CisgIGJpdG1hcF9lbGVtZW50ICpkc3RfZWx0 ID0gZHN0LT5maXJzdDsKKyAgY29uc3QgYml0bWFwX2VsZW1lbnQgKmFfZWx0 ID0gYS0+Zmlyc3Q7CisgIGNvbnN0IGJpdG1hcF9lbGVtZW50ICpiX2VsdCA9 IGItPmZpcnN0OworICBjb25zdCBiaXRtYXBfZWxlbWVudCAqa2lsbF9lbHQg PSBraWxsLT5maXJzdDsKKyAgYml0bWFwX2VsZW1lbnQgKmRzdF9wcmV2ID0g KCh2b2lkICopIDApOworICB3aGlsZSAoYV9lbHQgfHwgYl9lbHQpCisgICAg eworICAgICAgaWYgKGJfZWx0ICYmIGtpbGxfZWx0ICYmIGtpbGxfZWx0LT5p bmR4ID09IGJfZWx0LT5pbmR4CisJICAmJiAoIWFfZWx0IHx8IGFfZWx0LT5p bmR4ID49IGJfZWx0LT5pbmR4KSk7CisgICAgICBlbHNlCisJeworCSAgYml0 bWFwX2VsdF9pb3IgKGRzdCwgZHN0X2VsdCwgZHN0X3ByZXYsIGFfZWx0LCBi X2VsdCk7CisJICBpZiAoYV9lbHQgJiYgYl9lbHQgJiYgYV9lbHQtPmluZHgg PT0gYl9lbHQtPmluZHgpCisJICAgIDsKKwkgIGVsc2UgaWYgKGFfZWx0ICYm ICghYl9lbHQgfHwgYV9lbHQtPmluZHggPD0gYl9lbHQtPmluZHgpKQorCSAg ICBhX2VsdCA9IGFfZWx0LT5uZXh0OworCX0KKyAgICB9Cit9CmRpZmYgLS1n aXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy90cmVlLXNzYS9zc2EtdGhyZWFk LTEyLmMgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy90cmVlLXNzYS9zc2EtdGhy ZWFkLTEyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u MDY5N2ZiMAotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2Nj LmRnL3RyZWUtc3NhL3NzYS10aHJlYWQtMTIuYwpAQCAtMCwwICsxLDcyIEBA CisvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLworLyogeyBkZy1vcHRpb25zICIt TzIgLWZkdW1wLXRyZWUtZG9tMS1kZXRhaWxzIiB9ICovCisvKiB7IGRnLWZp bmFsIHsgc2Nhbi10cmVlLWR1bXAgIkZTTSIgImRvbTEiIH0gfSAqLworCit0 eXBlZGVmIHN0cnVjdCBiaXRtYXBfaGVhZF9kZWYgKmJpdG1hcDsKK3R5cGVk ZWYgY29uc3Qgc3RydWN0IGJpdG1hcF9oZWFkX2RlZiAqY29uc3RfYml0bWFw OwordHlwZWRlZiBzdHJ1Y3QgVkVDX2ludF9iYXNlCit7Cit9CitWRUNfaW50 X2Jhc2U7Cit0eXBlZGVmIHN0cnVjdCBWRUNfaW50X2hlYXAKK3sKKyAgVkVD X2ludF9iYXNlIGJhc2U7Cit9CitWRUNfaW50X2hlYXA7Cit0eXBlZGVmIHVu c2lnbmVkIGxvbmcgQklUTUFQX1dPUkQ7Cit0eXBlZGVmIHN0cnVjdCBiaXRt YXBfZWxlbWVudF9kZWYKK3sKKyAgc3RydWN0IGJpdG1hcF9lbGVtZW50X2Rl ZiAqbmV4dDsKKyAgdW5zaWduZWQgaW50IGluZHg7Cit9CitiaXRtYXBfZWxl bWVudDsKK3R5cGVkZWYgc3RydWN0IGJpdG1hcF9oZWFkX2RlZgoreworfQor Yml0bWFwX2hlYWQ7Cit0eXBlZGVmIHN0cnVjdAoreworICBiaXRtYXBfZWxl bWVudCAqZWx0MTsKKyAgYml0bWFwX2VsZW1lbnQgKmVsdDI7CisgIEJJVE1B UF9XT1JEIGJpdHM7Cit9CitiaXRtYXBfaXRlcmF0b3I7CitzdGF0aWMgX19p bmxpbmVfXyB2b2lkCitibXBfaXRlcl9hbmRfY29tcGxfaW5pdCAoYml0bWFw X2l0ZXJhdG9yICogYmksIGNvbnN0X2JpdG1hcCBtYXAxLAorCQkJIGNvbnN0 X2JpdG1hcCBtYXAyLCB1bnNpZ25lZCBzdGFydF9iaXQsCisJCQkgdW5zaWdu ZWQgKmJpdF9ubykKK3sKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZAor Ym1wX2l0ZXJfbmV4dCAoYml0bWFwX2l0ZXJhdG9yICogYmksIHVuc2lnbmVk ICpiaXRfbm8pCit7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVk IGNoYXIKK2JtcF9pdGVyX2FuZF9jb21wbCAoYml0bWFwX2l0ZXJhdG9yICog YmksIHVuc2lnbmVkICpiaXRfbm8pCit7CisgIGlmIChiaS0+Yml0cykKKyAg ICB7CisgICAgICB3aGlsZSAoYmktPmVsdDIgJiYgYmktPmVsdDItPmluZHgg PCBiaS0+ZWx0MS0+aW5keCkKKwliaS0+ZWx0MiA9IGJpLT5lbHQyLT5uZXh0 OworICAgIH0KK30KKworZXh0ZXJuIGludCBWRUNfaW50X2Jhc2VfbGVuZ3Ro IChWRUNfaW50X2Jhc2UgKik7CitiaXRtYXAKK2NvbXB1dGVfaWRmIChiaXRt YXAgZGVmX2Jsb2NrcywgYml0bWFwX2hlYWQgKiBkZnMpCit7CisgIGJpdG1h cF9pdGVyYXRvciBiaTsKKyAgdW5zaWduZWQgYmJfaW5kZXgsIGk7CisgIFZF Q19pbnRfaGVhcCAqd29ya19zdGFjazsKKyAgYml0bWFwIHBoaV9pbnNlcnRp b25fcG9pbnRzOworICB3aGlsZSAoKFZFQ19pbnRfYmFzZV9sZW5ndGggKCgo d29ya19zdGFjaykgPyAmKHdvcmtfc3RhY2spLT5iYXNlIDogMCkpKSA+IDAp CisgICAgeworICAgICAgZm9yIChibXBfaXRlcl9hbmRfY29tcGxfaW5pdAor CSAgICgmKGJpKSwgKCZkZnNbYmJfaW5kZXhdKSwgKHBoaV9pbnNlcnRpb25f cG9pbnRzKSwgKDApLCAmKGkpKTsKKwkgICBibXBfaXRlcl9hbmRfY29tcGwg KCYoYmkpLCAmKGkpKTsgYm1wX2l0ZXJfbmV4dCAoJihiaSksICYoaSkpKQor CXsKKwl9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvZ2NjL3RyZWUtc3NhLXRo cmVhZGJhY2t3YXJkLmMgYi9nY2MvdHJlZS1zc2EtdGhyZWFkYmFja3dhcmQu YwppbmRleCBmZjY0ODFjLi41YmU2ZWU0IDEwMDY0NAotLS0gYS9nY2MvdHJl ZS1zc2EtdGhyZWFkYmFja3dhcmQuYworKysgYi9nY2MvdHJlZS1zc2EtdGhy ZWFkYmFja3dhcmQuYwpAQCAtMzYsNiArMzYsMjIgQEAgYWxvbmcgd2l0aCBH Q0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKIAogc3Rh dGljIGludCBtYXhfdGhyZWFkZWRfcGF0aHM7CiAKKy8qIFNpbXBsZSBoZWxw ZXIgdG8gZ2V0IHRoZSBsYXN0IHN0YXRlbWVudCBmcm9tIEJCLCB3aGljaCBp cyBhc3N1bWVkCisgICB0byBiZSBhIGNvbnRyb2wgc3RhdGVtZW50LiAgKi8K K3N0YXRpYyBnaW1wbGUgKgorZ2V0X2dpbXBsZV9jb250cm9sX3N0bXQgKGJh c2ljX2Jsb2NrIGJiKQoreworICBnaW1wbGVfc3RtdF9pdGVyYXRvciBnc2kg PSBnc2lfbGFzdF9iYiAoYmIpOworCisgIGlmIChnc2lfZW5kX3AgKGdzaSkp CisgICAgcmV0dXJuIE5VTEw7CisKKyAgZ2ltcGxlICpzdG10ID0gZ3NpX3N0 bXQgKGdzaSk7CisgIGVudW0gZ2ltcGxlX2NvZGUgY29kZSA9IGdpbXBsZV9j b2RlIChzdG10KTsKKyAgZ2NjX2Fzc2VydCAoY29kZSA9PSBHSU1QTEVfQ09O RCB8fCBjb2RlID09IEdJTVBMRV9TV0lUQ0ggfHwgY29kZSA9PSBHSU1QTEVf R09UTyk7CisgIHJldHVybiBzdG10OworfQorCiAvKiBSZXR1cm4gdHJ1ZSBp ZiB0aGUgQ0ZHIGNvbnRhaW5zIGF0IGxlYXN0IG9uZSBwYXRoIGZyb20gU1RB UlRfQkIgdG8gRU5EX0JCLgogICAgV2hlbiBhIHBhdGggaXMgZm91bmQsIHJl Y29yZCBpbiBQQVRIIHRoZSBibG9ja3MgZnJvbSBFTkRfQkIgdG8gU1RBUlRf QkIuCiAgICBWSVNJVEVEX0JCUyBpcyB1c2VkIHRvIG1ha2Ugc3VyZSB3ZSBk b24ndCBmYWxsIGludG8gYW4gaW5maW5pdGUgbG9vcC4gIEJvdW5kCkBAIC03 MCwxNyArODYsMTcgQEAgZnNtX2ZpbmRfdGhyZWFkX3BhdGggKGJhc2ljX2Js b2NrIHN0YXJ0X2JiLCBiYXNpY19ibG9jayBlbmRfYmIsCiAgIHJldHVybiBm YWxzZTsKIH0KIAotLyogV2UgdHJhY2UgdGhlIHZhbHVlIG9mIHRoZSBTU0Ff TkFNRSBFWFBSIGJhY2sgdGhyb3VnaCBhbnkgcGhpIG5vZGVzIGxvb2tpbmcK Ky8qIFdlIHRyYWNlIHRoZSB2YWx1ZSBvZiB0aGUgU1NBX05BTUUgTkFNRSBi YWNrIHRocm91Z2ggYW55IHBoaSBub2RlcyBsb29raW5nCiAgICBmb3IgcGxh Y2VzIHdoZXJlIGl0IGdldHMgYSBjb25zdGFudCB2YWx1ZSBhbmQgc2F2ZSB0 aGUgcGF0aC4gIFN0b3AgYWZ0ZXIKICAgIGhhdmluZyByZWNvcmRlZCBNQVhf UEFUSFMganVtcCB0aHJlYWRpbmcgcGF0aHMuICAqLwogCiBzdGF0aWMgdm9p ZAotZnNtX2ZpbmRfY29udHJvbF9zdGF0ZW1lbnRfdGhyZWFkX3BhdGhzICh0 cmVlIGV4cHIsCitmc21fZmluZF9jb250cm9sX3N0YXRlbWVudF90aHJlYWRf cGF0aHMgKHRyZWUgbmFtZSwKIAkJCQkJIGhhc2hfc2V0PGJhc2ljX2Jsb2Nr PiAqdmlzaXRlZF9iYnMsCiAJCQkJCSB2ZWM8YmFzaWNfYmxvY2ssIHZhX2dj PiAqJnBhdGgsCiAJCQkJCSBib29sIHNlZW5fbG9vcF9waGkpCiB7Ci0gIGdp bXBsZSAqZGVmX3N0bXQgPSBTU0FfTkFNRV9ERUZfU1RNVCAoZXhwcik7Cisg IGdpbXBsZSAqZGVmX3N0bXQgPSBTU0FfTkFNRV9ERUZfU1RNVCAobmFtZSk7 CiAgIGJhc2ljX2Jsb2NrIHZhcl9iYiA9IGdpbXBsZV9iYiAoZGVmX3N0bXQp OwogCiAgIGlmICh2YXJfYmIgPT0gTlVMTCkKQEAgLTI4NCw2ICszMDAsMjAg QEAgZnNtX2ZpbmRfY29udHJvbF9zdGF0ZW1lbnRfdGhyZWFkX3BhdGhzICh0 cmVlIGV4cHIsCiAJICBqdW1wX3RocmVhZF9wYXRoLT5zYWZlX3B1c2ggKHgp OwogCX0KIAorICAgICAgZ2ltcGxlICpzdG10ID0gZ2V0X2dpbXBsZV9jb250 cm9sX3N0bXQgKCgqcGF0aClbMF0pOworICAgICAgZ2NjX2Fzc2VydCAoc3Rt dCk7CisgICAgICAvKiBXZSBoYXZlIGZvdW5kIGEgY29uc3RhbnQgdmFsdWUg Zm9yIEFSRy4gIEZvciBHSU1QTEVfU1dJVENICisJIGFuZCBHSU1QTEVfR09U Tywgd2UgdXNlIGl0IGFzLWlzLiAgSG93ZXZlciwgZm9yIGEgR0lNUExFX0NP TkQKKwkgd2UgbmVlZCB0byBzdWJzdGl0dXRlLCBmb2xkIGFuZCBzaW1wbGlm eS4gICovCisgICAgICBpZiAoZ2ltcGxlX2NvZGUgKHN0bXQpID09IEdJTVBM RV9DT05EKQorCXsKKwkgIGVudW0gdHJlZV9jb2RlIGNvbmRfY29kZSA9IGdp bXBsZV9jb25kX2NvZGUgKHN0bXQpOworCisJICAvKiBXZSBrbm93IHRoZSB1 bmRlcnlsaW5nIGZvcm1hdCBvZiB0aGUgY29uZGl0aW9uLiAgKi8KKwkgIGFy ZyA9IGZvbGRfYmluYXJ5IChjb25kX2NvZGUsIGJvb2xlYW5fdHlwZV9ub2Rl LAorCQkJICAgICBhcmcsIGdpbXBsZV9jb25kX3JocyAoc3RtdCkpOworCX0K KwogICAgICAgLyogQWRkIHRoZSBlZGdlIHRha2VuIHdoZW4gdGhlIGNvbnRy b2wgdmFyaWFibGUgaGFzIHZhbHVlIEFSRy4gICovCiAgICAgICBlZGdlIHRh a2VuX2VkZ2UgPSBmaW5kX3Rha2VuX2VkZ2UgKCgqcGF0aClbMF0sIGFyZyk7 CiAgICAgICBqdW1wX3RocmVhZF9lZGdlICp4CmRpZmYgLS1naXQgYS9nY2Mv dHJlZS1zc2EtdGhyZWFkZWRnZS5jIGIvZ2NjL3RyZWUtc3NhLXRocmVhZGVk Z2UuYwppbmRleCA1Y2E5NDU4Li5kYTJmYjFmIDEwMDY0NAotLS0gYS9nY2Mv dHJlZS1zc2EtdGhyZWFkZWRnZS5jCisrKyBiL2djYy90cmVlLXNzYS10aHJl YWRlZGdlLmMKQEAgLTU1MSwxMSArNTUxLDEzIEBAIHNpbXBsaWZ5X2NvbnRy b2xfc3RtdF9jb25kaXRpb24gKGVkZ2UgZSwKICAgICAgICAgICB8fCAhaXNf Z2ltcGxlX21pbl9pbnZhcmlhbnQgKGNhY2hlZF9saHMpKQogICAgICAgICBj YWNoZWRfbGhzID0gKCpzaW1wbGlmeSkgKGR1bW15X2NvbmQsIHN0bXQsIGF2 YWlsX2V4cHJzX3N0YWNrKTsKIAotICAgICAgLyogSWYgd2Ugd2VyZSBqdXN0 IHRlc3RpbmcgdGhhdCBhbiBpbnRlZ3JhbCB0eXBlIHdhcyAhPSAwLCBhbmQg dGhhdAotCSBmYWlsZWQsIGp1c3QgcmV0dXJuIHRoZSBmaXJzdCBvcGVyYW5k LiAgVGhpcyBnaXZlcyB0aGUgRlNNIGNvZGUgYQotCSBjaGFuY2UgdG8gb3B0 aW1pemUgdGhlIHBhdGguICAqLwotICAgICAgaWYgKGNhY2hlZF9saHMgPT0g TlVMTAotCSAgJiYgY29uZF9jb2RlID09IE5FX0VYUFIpCisgICAgICAvKiBJ ZiB3ZSB3ZXJlIHRlc3RpbmcgYW4gaW50ZWdlci9wb2ludGVyIGFnYWluc3Qg YSBjb25zdGFudCwgdGhlbgorCSB3ZSBjYW4gdXNlIHRoZSBGU00gY29kZSB0 byB0cmFjZSB0aGUgdmFsdWUgb2YgdGhlIFNTQV9OQU1FLiAgSWYKKwkgYSB2 YWx1ZSBpcyBmb3VuZCwgdGhlbiB0aGUgY29uZGl0aW9uIHdpbGwgY29sbGFw c2UgdG8gYSBjb25zdGFudC4KKworCSBSZXR1cm4gdGhlIFNTQV9OQU1FIHdl IHdhbnQgdG8gdHJhY2UgYmFjayByYXRoZXIgdGhhbiB0aGUgZnVsbAorCSBl eHByZXNzaW9uIGFuZCBnaXZlIHRoZSBGU00gdGhyZWFkZXIgYSBjaGFuY2Ug dG8gZmluZCBpdHMgdmFsdWUuICAqLworICAgICAgaWYgKGNhY2hlZF9saHMg PT0gTlVMTCkKIAl7CiAJICAvKiBSZWNvdmVyIHRoZSBvcmlnaW5hbCBvcGVy YW5kcy4gIFRoZXkgbWF5IGhhdmUgYmVlbiBzaW1wbGlmaWVkCiAJICAgICB1 c2luZyBjb250ZXh0IHNlbnNpdGl2ZSBlcXVpdmFsZW5jZXMuICBUaG9zZSBj b250ZXh0IHNlbnNpdGl2ZQpAQCAtNTYzLDkgKzU2NSwxMCBAQCBzaW1wbGlm eV9jb250cm9sX3N0bXRfY29uZGl0aW9uIChlZGdlIGUsCiAJICB0cmVlIG9w MCA9IGdpbXBsZV9jb25kX2xocyAoc3RtdCk7CiAJICB0cmVlIG9wMSA9IGdp bXBsZV9jb25kX3JocyAoc3RtdCk7CiAKLQkgIGlmIChJTlRFR1JBTF9UWVBF X1AgKFRSRUVfVFlQRSAob3AwKSkKKwkgIGlmICgoSU5URUdSQUxfVFlQRV9Q IChUUkVFX1RZUEUgKG9wMCkpCisJICAgICAgIHx8IFBPSU5URVJfVFlQRV9Q IChUUkVFX1RZUEUgKG9wMCkpKQogCSAgICAgICYmIFRSRUVfQ09ERSAob3Aw KSA9PSBTU0FfTkFNRQotCSAgICAgICYmIGludGVnZXJfemVyb3AgKG9wMSkp CisJICAgICAgJiYgVFJFRV9DT0RFIChvcDEpID09IElOVEVHRVJfQ1NUKQog CSAgICByZXR1cm4gb3AwOwogCX0KIApAQCAtMTA0NiwxMSArMTA0OSwxOSBA QCB0aHJlYWRfdGhyb3VnaF9ub3JtYWxfYmxvY2sgKGVkZ2UgZSwKIAogICAg ICAgaWYgKCFmbGFnX2V4cGVuc2l2ZV9vcHRpbWl6YXRpb25zCiAJICB8fCBv cHRpbWl6ZV9mdW5jdGlvbl9mb3Jfc2l6ZV9wIChjZnVuKQotCSAgfHwgVFJF RV9DT0RFIChjb25kKSAhPSBTU0FfTkFNRQorCSAgfHwgIShUUkVFX0NPREUg KGNvbmQpID09IFNTQV9OQU1FCisJICAgICAgIHx8IChUUkVFX0NPREVfQ0xB U1MgKFRSRUVfQ09ERSAoY29uZCkpID09IHRjY19jb21wYXJpc29uCisJCSAg ICYmIFRSRUVfQ09ERSAoVFJFRV9PUEVSQU5EIChjb25kLCAwKSkgPT0gU1NB X05BTUUKKwkJICAgJiYgVFJFRV9DT0RFIChUUkVFX09QRVJBTkQgKGNvbmQs IDEpKSA9PSBJTlRFR0VSX0NTVCkpCiAJICB8fCBlLT5kZXN0LT5sb29wX2Zh dGhlciAhPSBlLT5zcmMtPmxvb3BfZmF0aGVyCiAJICB8fCBsb29wX2RlcHRo IChlLT5kZXN0LT5sb29wX2ZhdGhlcikgPT0gMCkKIAlyZXR1cm4gMDsKIAor ICAgICAgLyogRXh0cmFjdCB0aGUgU1NBX05BTUUgd2Ugd2FudCB0byB0cmFj ZSBiYWNrd2FyZHMgaWYgQ09ORCBpcyBub3QKKwkgYWxyZWFkeSBhIGJhcmUg U1NBX05BTUUuICAqLworICAgICAgaWYgKFRSRUVfQ09ERSAoY29uZCkgIT0g U1NBX05BTUUpCisJY29uZCA9IFRSRUVfT1BFUkFORCAoY29uZCwgMCk7CisK ICAgICAgIC8qIFdoZW4gQ09ORCBjYW5ub3QgYmUgc2ltcGxpZmllZCwgdHJ5 IHRvIGZpbmQgcGF0aHMgZnJvbSBhIGNvbnRyb2wKIAkgc3RhdGVtZW50IGJh Y2sgdGhyb3VnaCB0aGUgUEhJIG5vZGVzIHdoaWNoIHdvdWxkIGFmZmVjdCB0 aGF0IGNvbnRyb2wKIAkgc3RhdGVtZW50LiAgKi8K --------------000004030400000209040101--