From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-ed1-x534.google.com (mail-ed1-x534.google.com [IPv6:2a00:1450:4864:20::534]) by sourceware.org (Postfix) with ESMTPS id F12593856089 for ; Tue, 12 Jul 2022 13:35:56 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org F12593856089 Received: by mail-ed1-x534.google.com with SMTP id r6so10115943edd.7 for ; Tue, 12 Jul 2022 06:35:56 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:date:from:to:message-id:subject:mime-version; bh=QBYoS5eTswOG3Sq1MYfpF1WfM0xCKJIIQhfGSQqEdwg=; b=Hf58BLq7Ybf2fI8ibCY4n4cirmgv6CbI9z641F5moDf/CsvBKpH+W/RQHyeF6uSffi vZarHmdsEZUx1xqb+VMmQ0w1vzo2DPO1VFSPYVSketf6wXcizOOVotCiwvH+O0/PHU8T PsWAS9kIoqJ0gzX3jsMuqqAQzBBJhP5J7u9VKX5m0noS9Mpqwm/q57LhLdoxvijLdaXG 87Dg69mUpLQcDme8HIFcw/a0HhsKD8mcnu054I9E/Evi6phFLMPXr4XcKzpzMejxnFUQ vLiUi2y+z0tOIdel5FeAH3tyGL9cBDweSbdolsg5XHgEZn5Z3Phx4NRlETpPRGDhRzpQ sivQ== X-Gm-Message-State: AJIora+80Hlk9BXW1QDzyOdTt1lSDRpZ29RhN8DylsdBphgjGlJJfCKz G2OFl4zuOXgpA+5ojt4TdGsaOasMtVLiug== X-Google-Smtp-Source: AGRyM1vKkjsvsYh7bkBOmB9pgFyDmMkPTEDipsnBmlyaJwy5H/qIinqkAR6d1aUsEMryWAM5w6vsKQ== X-Received: by 2002:aa7:c98b:0:b0:43a:944f:5db6 with SMTP id c11-20020aa7c98b000000b0043a944f5db6mr31931181edt.34.1657632955586; Tue, 12 Jul 2022 06:35:55 -0700 (PDT) Received: from miso-desktop (ip-94-112-230-129.bb.vodafone.cz. [94.112.230.129]) by smtp.gmail.com with ESMTPSA id gw23-20020a170906f15700b00722dcb4629bsm3848105ejb.14.2022.07.12.06.35.54 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Tue, 12 Jul 2022 06:35:54 -0700 (PDT) Date: Tue, 12 Jul 2022 15:35:53 +0200 From: =?utf-8?Q?Michal_Jankovi=C4=8D?= To: "=?utf-8?Q?gcc-patches=40gcc.gnu.org?=" Message-ID: Subject: [PATCH] c++: coroutines - Overlap variables in frame [PR105989] X-Mailer: Mailspring MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="62cd78b9_418b132f_825" X-Spam-Status: No, score=2.1 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM, RCVD_IN_BARRACUDACENTRAL, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=no autolearn_force=no version=3.4.6 X-Spam-Level: ** X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 12 Jul 2022 13:35:58 -0000 --62cd78b9_418b132f_825 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Content-Disposition: inline Currently, coroutine frames store all variables of a coroutine separately, even if their lifetime does not overlap (they are in distinct scopes). This patch implements overlapping distinct variable scopes in the coroutine frame, by storing the frame fields in nested unions of structs. This lowers the size of the frame for larger coroutines significantly, and makes them more usable on systems with limited memory. Bootstrapped and regression tested on x86_64-pc-linux-gnu; new test fails before the patch and succeeds after with no regressions. PR c++/105989 gcc/cp/ChangeLog: * coroutines.cc (struct local_var_info): Add field_access_path. (build_local_var_frame_access_expr): New. (transform_local_var_uses): Use build_local_var_frame_access_expr. (coro_make_frame_entry_id): New. (coro_make_frame_entry): Delegate to coro_make_frame_entry_id. (struct local_vars_frame_data): Add orig, field_access_path. (register_local_var_uses): Generate new frame layout. Create access paths to vars. (morph_fn_to_coro): Set new fields in local_vars_frame_data. gcc/testsuite/ChangeLog: * g++.dg/coroutines/pr105989.C: New test. --62cd78b9_418b132f_825 Content-Type: application/octet-stream Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="pr105989.patch" ZGlmZiAtLWdpdCBhL2djYy9jcC9jb3JvdXRpbmVzLmNjIGIvZ2NjL2NwL2Nvcm91dGluZXMuY2MK aW5kZXggZWRiM2I3MDZkZGMuLmVkMWFjNGRlY2FmIDEwMDY0NAotLS0gYS9nY2MvY3AvY29yb3V0 aW5lcy5jYworKysgYi9nY2MvY3AvY29yb3V0aW5lcy5jYwpAQCAtMTk5Nyw2ICsxOTk3LDcgQEAg c3RydWN0IGxvY2FsX3Zhcl9pbmZvCiAgIGJvb2wgaXNfc3RhdGljOwogICBib29sIGhhc192YWx1 ZV9leHByX3A7CiAgIGxvY2F0aW9uX3QgZGVmX2xvYzsKKyAgdmVjPHRyZWUsIHZhX2djPiAqZmll bGRfYWNjZXNzX3BhdGg7CiB9OwogCiAvKiBGb3IgZmlndXJpbmcgb3V0IHdoYXQgbG9jYWwgdmFy aWFibGUgdXNhZ2Ugd2UgaGF2ZS4gICovCkBAIC0yMDA5LDYgKzIwMTAsMjYgQEAgc3RydWN0IGxv Y2FsX3ZhcnNfdHJhbnNmb3JtCiAgIGhhc2hfbWFwPHRyZWUsIGxvY2FsX3Zhcl9pbmZvPiAqbG9j YWxfdmFyX3VzZXM7CiB9OwogCisvKiBCdWlsZCBhIENPTVBPTkVOVF9SRUYgY2hhaW4gZm9yIGFj Y2Vzc2luZyBhIG5lc3RlZCB2YXJpYWJsZSBpbiB0aGUgY29yb3V0aW5lCisgICBmcmFtZS4gICov CitzdGF0aWMgdHJlZQorYnVpbGRfbG9jYWxfdmFyX2ZyYW1lX2FjY2Vzc19leHByIChsb2NhbF92 YXJzX3RyYW5zZm9ybSAqbHZ0LAorCQkJCSAgIGxvY2FsX3Zhcl9pbmZvICpsb2NhbF92YXIpCit7 CisgIHRyZWUgYWNjZXNzX2V4cHIgPSBsdnQtPmFjdG9yX2ZyYW1lOworCisgIGZvciAodHJlZSBw YXRoX2VsZW1faWQgOiAqbG9jYWxfdmFyLT5maWVsZF9hY2Nlc3NfcGF0aCkKKyAgICB7CisgICAg ICB0cmVlIHBhdGhfZWxlbV9tZW1iZXIgPSBsb29rdXBfbWVtYmVyICgKKwlUUkVFX1RZUEUgKGFj Y2Vzc19leHByKSwgcGF0aF9lbGVtX2lkLCAxLCAwLCB0Zl93YXJuaW5nX29yX2Vycm9yKTsKKyAg ICAgIGFjY2Vzc19leHByID0gYnVpbGQzX2xvYyAoCisJbHZ0LT5sb2MsIENPTVBPTkVOVF9SRUYs IFRSRUVfVFlQRSAocGF0aF9lbGVtX21lbWJlciksCisJYWNjZXNzX2V4cHIsIHBhdGhfZWxlbV9t ZW1iZXIsIE5VTExfVFJFRSk7CisgICAgfQorCisgIHJldHVybiBhY2Nlc3NfZXhwcjsKK30KKwog c3RhdGljIHRyZWUKIHRyYW5zZm9ybV9sb2NhbF92YXJfdXNlcyAodHJlZSAqc3RtdCwgaW50ICpk b19zdWJ0cmVlLCB2b2lkICpkKQogewpAQCAtMjA0MCwxMiArMjA2MSw3IEBAIHRyYW5zZm9ybV9s b2NhbF92YXJfdXNlcyAodHJlZSAqc3RtdCwgaW50ICpkb19zdWJ0cmVlLCB2b2lkICpkKQogCSAg aWYgKGxvY2FsX3Zhci5maWVsZF9pZCA9PSBOVUxMX1RSRUUpCiAJICAgIGNvbnRpbnVlOyAvKiBX YXNuJ3QgdXNlZC4gICovCiAKLQkgIHRyZWUgZmxkX3JlZgotCSAgICA9IGxvb2t1cF9tZW1iZXIg KGx2ZC0+Y29yb19mcmFtZV90eXBlLCBsb2NhbF92YXIuZmllbGRfaWQsCi0JCQkgICAgIC8qcHJv dGVjdD0qLzEsIC8qd2FudF90eXBlPSovMCwKLQkJCSAgICAgdGZfd2FybmluZ19vcl9lcnJvcik7 Ci0JICB0cmVlIGZsZF9pZHggPSBidWlsZDNfbG9jIChsdmQtPmxvYywgQ09NUE9ORU5UX1JFRiwg VFJFRV9UWVBFIChsdmFyKSwKLQkJCQkgICAgIGx2ZC0+YWN0b3JfZnJhbWUsIGZsZF9yZWYsIE5V TExfVFJFRSk7CisJICB0cmVlIGZsZF9pZHggPSBidWlsZF9sb2NhbF92YXJfZnJhbWVfYWNjZXNz X2V4cHIgKGx2ZCwgJmxvY2FsX3Zhcik7CiAJICBsb2NhbF92YXIuZmllbGRfaWR4ID0gZmxkX2lk eDsKIAkgIFNFVF9ERUNMX1ZBTFVFX0VYUFIgKGx2YXIsIGZsZF9pZHgpOwogCSAgREVDTF9IQVNf VkFMVUVfRVhQUl9QIChsdmFyKSA9IHRydWU7CkBAIC0zODczLDE0ICszODg5LDI0IEBAIGFuYWx5 emVfZm5fcGFybXMgKHRyZWUgb3JpZykKIC8qIFNtYWxsIGhlbHBlciBmb3IgdGhlIHJlcGV0aXRp dmUgdGFzayBvZiBhZGRpbmcgYSBuZXcgZmllbGQgdG8gdGhlIGNvcm8KICAgIGZyYW1lIHR5cGUu ICAqLwogCitzdGF0aWMgdm9pZAorY29yb19tYWtlX2ZyYW1lX2VudHJ5X2lkICh0cmVlICpmaWVs ZF9saXN0LCB0cmVlIGlkLCB0cmVlIGZsZF90eXBlLAorCQkJICBsb2NhdGlvbl90IGxvYykKK3sK KyAgdHJlZSBkZWNsID0gYnVpbGRfZGVjbCAobG9jLCBGSUVMRF9ERUNMLCBpZCwgZmxkX3R5cGUp OworICBERUNMX0NIQUlOIChkZWNsKSA9ICpmaWVsZF9saXN0OworICAqZmllbGRfbGlzdCA9IGRl Y2w7Cit9CisKKy8qIFNhbWUgYXMgY29yb19tYWtlX2ZyYW1lX2VudHJ5X2lkLCBidXQgY3JlYXRl cyBhbiBpZGVudGlmaWVyIGZyb20gc3RyaW5nLiAgKi8KKwogc3RhdGljIHRyZWUKIGNvcm9fbWFr ZV9mcmFtZV9lbnRyeSAodHJlZSAqZmllbGRfbGlzdCwgY29uc3QgY2hhciAqbmFtZSwgdHJlZSBm bGRfdHlwZSwKIAkJICAgICAgIGxvY2F0aW9uX3QgbG9jKQogewogICB0cmVlIGlkID0gZ2V0X2lk ZW50aWZpZXIgKG5hbWUpOwotICB0cmVlIGRlY2wgPSBidWlsZF9kZWNsIChsb2MsIEZJRUxEX0RF Q0wsIGlkLCBmbGRfdHlwZSk7Ci0gIERFQ0xfQ0hBSU4gKGRlY2wpID0gKmZpZWxkX2xpc3Q7Ci0g ICpmaWVsZF9saXN0ID0gZGVjbDsKKyAgY29yb19tYWtlX2ZyYW1lX2VudHJ5X2lkIChmaWVsZF9s aXN0LCBpZCwgZmxkX3R5cGUsIGxvYyk7CisKICAgcmV0dXJuIGlkOwogfQogCkBAIC0zODk0LDYg KzM5MjAsOCBAQCBzdHJ1Y3QgbG9jYWxfdmFyc19mcmFtZV9kYXRhCiAgIGxvY2F0aW9uX3QgbG9j OwogICBib29sIHNhd19jYXB0dXJlOwogICBib29sIGxvY2FsX3Zhcl9zZWVuOworICB0cmVlIG9y aWc7CisgIHZlYzx0cmVlLCB2YV9nYz4gKmZpZWxkX2FjY2Vzc19wYXRoOwogfTsKIAogLyogQSB0 cmVlLXdhbGsgY2FsbGJhY2sgdGhhdCBwcm9jZXNzZXMgb25lIGJpbmQgZXhwcmVzc2lvbiBub3Rp bmcgbG9jYWwKQEAgLTM5MTIsNiArMzk0MCwyMSBAQCByZWdpc3Rlcl9sb2NhbF92YXJfdXNlcyAo dHJlZSAqc3RtdCwgaW50ICpkb19zdWJ0cmVlLCB2b2lkICpkKQogCiAgIGlmIChUUkVFX0NPREUg KCpzdG10KSA9PSBCSU5EX0VYUFIpCiAgICAgeworICAgICAgdHJlZSBzY29wZV9maWVsZF9pZCA9 IE5VTExfVFJFRTsKKyAgICAgIGlmIChsdmQtPm5lc3RfZGVwdGggIT0gMCkKKwl7CisJICAvKiBD cmVhdGUgaWRlbnRpZmllciB1bmRlciB3aGljaCBmaWVsZHMgZm9yIHRoaXMgYmluZC1leHByZXNz aW9uIHdpbGwKKwkgICAgIGJlIGFjY2Vzc2VkLiAgKi8KKwkgIGNoYXIgKnNjb3BlX2ZpZWxkX25h bWUKKwkgICAgPSB4YXNwcmludGYgKCJfU2NvcGUldV8ldSIsIGx2ZC0+bmVzdF9kZXB0aCwgbHZk LT5iaW5kX2luZHgpOworCSAgc2NvcGVfZmllbGRfaWQgPSBnZXRfaWRlbnRpZmllciAoc2NvcGVf ZmllbGRfbmFtZSk7CisJICBmcmVlIChzY29wZV9maWVsZF9uYW1lKTsKKworCSAgdmVjX3NhZmVf cHVzaCAobHZkLT5maWVsZF9hY2Nlc3NfcGF0aCwgc2NvcGVfZmllbGRfaWQpOworCX0KKworICAg ICAgdHJlZSBzY29wZV92YXJpYWJsZXMgPSBOVUxMX1RSRUU7CisKICAgICAgIHRyZWUgbHZhcjsK ICAgICAgIHVuc2lnbmVkIHNlcmlhbCA9IDA7CiAgICAgICBmb3IgKGx2YXIgPSBCSU5EX0VYUFJf VkFSUyAoKnN0bXQpOyBsdmFyICE9IE5VTEw7CkBAIC0zOTgwLDE3ICs0MDIzLDk5IEBAIHJlZ2lz dGVyX2xvY2FsX3Zhcl91c2VzICh0cmVlICpzdG10LCBpbnQgKmRvX3N1YnRyZWUsIHZvaWQgKmQp CiAKIAkgIC8qIFRPRE86IEZpZ3VyZSBvdXQgaWYgd2Ugc2hvdWxkIGJ1aWxkIGEgbG9jYWwgdHlw ZSB0aGF0IGhhcyBhbnkKIAkgICAgIGV4Y2VzcyBhbGlnbm1lbnQgb3Igc2l6ZSBmcm9tIHRoZSBv cmlnaW5hbCBkZWNsLiAgKi8KLQkgIGxvY2FsX3Zhci5maWVsZF9pZCA9IGNvcm9fbWFrZV9mcmFt ZV9lbnRyeSAobHZkLT5maWVsZF9saXN0LCBidWYsCisKKwkgIGxvY2FsX3Zhci5maWVsZF9pZCA9 IGNvcm9fbWFrZV9mcmFtZV9lbnRyeSAoJnNjb3BlX3ZhcmlhYmxlcywgYnVmLAogCQkJCQkJICAg ICAgbHZ0eXBlLCBsdmQtPmxvYyk7CiAJICBmcmVlIChidWYpOwogCSAgLyogV2UgZG9uJ3Qgd2Fs ayBhbnkgb2YgdGhlIGxvY2FsIHZhciBzdWItdHJlZXMsIHRoZXkgd29uJ3QgY29udGFpbgogCSAg ICAgYW55IGJpbmQgZXhwcnMuICAqLworCisJICBsb2NhbF92YXIuZmllbGRfYWNjZXNzX3BhdGgg PSBtYWtlX3RyZWVfdmVjdG9yX2NvcHkgKAorCSAgICBsdmQtPmZpZWxkX2FjY2Vzc19wYXRoKTsK KwkgIHZlY19zYWZlX3B1c2ggKGxvY2FsX3Zhci5maWVsZF9hY2Nlc3NfcGF0aCwgbG9jYWxfdmFy LmZpZWxkX2lkKTsKIAl9CisKKyAgICAgIHVuc2lnbmVkIGJpbmRfaW5keCA9IGx2ZC0+YmluZF9p bmR4OworICAgICAgdHJlZSogcGFyZW50X2ZpZWxkX2xpc3QgPSBsdmQtPmZpZWxkX2xpc3Q7CisK KyAgICAgIC8qIENvbGxlY3QgdGhlIHNjb3BlIHN0cnVjdHMgb2YgY2hpbGQgYmluZC1leHByZXNz aW9ucyB3aGVuIHJlY3Vyc2luZy4gICovCisgICAgICB0cmVlIGNoaWxkX3Njb3BlcyA9IE5VTExf VFJFRTsKKyAgICAgIGx2ZC0+ZmllbGRfbGlzdCA9ICZjaGlsZF9zY29wZXM7CisKKyAgICAgIC8q IENyZWF0ZSBpZGVudGlmaWVyIHVuZGVyIHdoaWNoIGZpZWxkcyBmb3IgY2hpbGQgYmluZC1leHBy ZXNzaW9ucyB3aWxsIGJlCisJIGFjY2Vzc2VkLiAgKi8KKyAgICAgIGNoYXIgKmNoaWxkX3Njb3Bl c19maWVsZF9uYW1lCisJPSB4YXNwcmludGYgKCJfU2NvcGVfbGlzdCV1XyV1IiwgbHZkLT5uZXN0 X2RlcHRoLCBiaW5kX2luZHgpOworICAgICAgdHJlZSBjaGlsZF9zY29wZXNfZmllbGRfaWQgPSBn ZXRfaWRlbnRpZmllciAoY2hpbGRfc2NvcGVzX2ZpZWxkX25hbWUpOworICAgICAgZnJlZSAoY2hp bGRfc2NvcGVzX2ZpZWxkX25hbWUpOworCisgICAgICAvKiBSZWN1cnNlIHRvIGNoaWxkIGJpbmQg ZXhwcmVzc2lvbnMuICAqLwogICAgICAgbHZkLT5iaW5kX2luZHgrKzsKICAgICAgIGx2ZC0+bmVz dF9kZXB0aCsrOworICAgICAgdmVjX3NhZmVfcHVzaCAobHZkLT5maWVsZF9hY2Nlc3NfcGF0aCwg Y2hpbGRfc2NvcGVzX2ZpZWxkX2lkKTsKICAgICAgIGNwX3dhbGtfdHJlZSAoJkJJTkRfRVhQUl9C T0RZICgqc3RtdCksIHJlZ2lzdGVyX2xvY2FsX3Zhcl91c2VzLCBkLCBOVUxMKTsKICAgICAgICpk b19zdWJ0cmVlID0gMDsgLyogV2UndmUgZG9uZSB0aGlzLiAgKi8KKyAgICAgIGx2ZC0+ZmllbGRf YWNjZXNzX3BhdGgtPnBvcCAoKTsKICAgICAgIGx2ZC0+bmVzdF9kZXB0aC0tOworCisgICAgICAv KiBSZXN0b3JlIHRoZSBwYXJlbnQgZmllbGQgbGlzdC4gICovCisgICAgICBsdmQtPmZpZWxkX2xp c3QgPSBwYXJlbnRfZmllbGRfbGlzdDsKKworICAgICAgaWYgKGNoaWxkX3Njb3BlcyAhPSBOVUxM X1RSRUUpCisJeworCSAgLyogQ3JlYXRlIGEgdW5pb24gdG8gaG91c2UgdGhlIGNoaWxkIHNjb3Bl cywgc28gdGhhdCB0aGV5IGFyZQorCSAgICAgb3ZlcmxhcHBlZCBpbiB0aGUgY29yb3V0aW5lIGZy YW1lLiAgKi8KKwkgIGNoYXIgKmNoaWxkX3Njb3Blc191bmlvbl9uYW1lX3N1ZmZpeAorCSAgICA9 IHhhc3ByaW50ZiAoIkZyYW1lX3Njb3BlX2xpc3QldV8ldSIsIGx2ZC0+bmVzdF9kZXB0aCwgYmlu ZF9pbmR4KTsKKwkgIHRyZWUgY2hpbGRfc2NvcGVzX3VuaW9uX25hbWUgPSBnZXRfZm5fbG9jYWxf aWRlbnRpZmllciAoCisJICAgIGx2ZC0+b3JpZywgY2hpbGRfc2NvcGVzX3VuaW9uX25hbWVfc3Vm Zml4KTsKKwkgIGZyZWUgKGNoaWxkX3Njb3Blc191bmlvbl9uYW1lX3N1ZmZpeCk7CisJICB0cmVl IGNoaWxkX3Njb3Blc191bmlvbgorCSAgICA9IHhyZWZfdGFnICh1bmlvbl90eXBlLCBjaGlsZF9z Y29wZXNfdW5pb25fbmFtZSk7CisJICBERUNMX0NPTlRFWFQgKFRZUEVfTkFNRSAoY2hpbGRfc2Nv cGVzX3VuaW9uKSkgPSBjdXJyZW50X3Njb3BlICgpOworCSAgY2hpbGRfc2NvcGVzX3VuaW9uID0g YmVnaW5fY2xhc3NfZGVmaW5pdGlvbiAoY2hpbGRfc2NvcGVzX3VuaW9uKTsKKwkgIFRZUEVfRklF TERTIChjaGlsZF9zY29wZXNfdW5pb24pID0gY2hpbGRfc2NvcGVzOworCSAgVFlQRV9CSU5GTyAo Y2hpbGRfc2NvcGVzX3VuaW9uKSA9IG1ha2VfdHJlZV9iaW5mbyAoMCk7CisJICBCSU5GT19PRkZT RVQgKFRZUEVfQklORk8gKGNoaWxkX3Njb3Blc191bmlvbikpID0gc2l6ZV96ZXJvX25vZGU7CisJ ICBCSU5GT19UWVBFIChUWVBFX0JJTkZPIChjaGlsZF9zY29wZXNfdW5pb24pKSA9IGNoaWxkX3Nj b3Blc191bmlvbjsKKwkgIGNoaWxkX3Njb3Blc191bmlvbiA9IGZpbmlzaF9zdHJ1Y3QgKGNoaWxk X3Njb3Blc191bmlvbiwgTlVMTF9UUkVFKTsKKworCSAgLyogQWRkIGl0IHRvIHRoZSBjdXJyZW50 IHNjb3BlIGZpZWxkcy4gICovCisJICBjb3JvX21ha2VfZnJhbWVfZW50cnlfaWQgKAorCSAgICAm c2NvcGVfdmFyaWFibGVzLCBjaGlsZF9zY29wZXNfZmllbGRfaWQsCisJICAgIGNoaWxkX3Njb3Bl c191bmlvbiwgbHZkLT5sb2MpOworCX0KKworICAgICAgaWYgKGx2ZC0+bmVzdF9kZXB0aCA9PSAw KQorCXsKKwkgIC8qIFRoZSBvdXRlcm1vc3Qgc2NvcGUgY29udGFpbnMgc3BlY2lhbCB2YXJpYWJs ZXMsIGVtYmVkIHRoZW0gZGlyZWN0bHkKKwkgICAgIGluIHRoZSBjb3JvdXRpbmUgZnJhbWUgd2l0 aG91dCBuZXN0aW5nLiAgKi8KKwkgICpsdmQtPmZpZWxkX2xpc3QgPSBzY29wZV92YXJpYWJsZXM7 CisJfSBlbHNlCisJeworCSAgLyogQ3JlYXRlIGEgc3RydWN0IGZvciBob3VzaW5nIHRoZSB2YXJz IG9mIHRoaXMgYmluZC1leHByCisJICAgICBpbiB0aGUgY29yb3V0aW5lIGZyYW1lLiAgKi8KKwkg IGNoYXIgKnNjb3BlX3N0cnVjdF9uYW1lX3N1ZmZpeAorCSAgICA9IHhhc3ByaW50ZiAoIkZyYW1l X3Njb3BlJXVfJXUiLCBsdmQtPm5lc3RfZGVwdGgsIGJpbmRfaW5keCk7CisJICB0cmVlIHNjb3Bl X3N0cnVjdF9uYW1lCisJICAgID0gZ2V0X2ZuX2xvY2FsX2lkZW50aWZpZXIgKGx2ZC0+b3JpZywg c2NvcGVfc3RydWN0X25hbWVfc3VmZml4KTsKKwkgIGZyZWUgKHNjb3BlX3N0cnVjdF9uYW1lX3N1 ZmZpeCk7CisJICB0cmVlIHNjb3BlX3N0cnVjdCA9IHhyZWZfdGFnIChyZWNvcmRfdHlwZSwgc2Nv cGVfc3RydWN0X25hbWUpOworCSAgREVDTF9DT05URVhUIChUWVBFX05BTUUgKHNjb3BlX3N0cnVj dCkpID0gY3VycmVudF9zY29wZSAoKTsKKwkgIHNjb3BlX3N0cnVjdCA9IGJlZ2luX2NsYXNzX2Rl ZmluaXRpb24gKHNjb3BlX3N0cnVjdCk7CisJICBUWVBFX0ZJRUxEUyAoc2NvcGVfc3RydWN0KSA9 IHNjb3BlX3ZhcmlhYmxlczsKKwkgIFRZUEVfQklORk8gKHNjb3BlX3N0cnVjdCkgPSBtYWtlX3Ry ZWVfYmluZm8gKDApOworCSAgQklORk9fT0ZGU0VUIChUWVBFX0JJTkZPIChzY29wZV9zdHJ1Y3Qp KSA9IHNpemVfemVyb19ub2RlOworCSAgQklORk9fVFlQRSAoVFlQRV9CSU5GTyAoc2NvcGVfc3Ry dWN0KSkgPSBzY29wZV9zdHJ1Y3Q7CisJICBzY29wZV9zdHJ1Y3QgPSBmaW5pc2hfc3RydWN0IChz Y29wZV9zdHJ1Y3QsIE5VTExfVFJFRSk7CisKKwkgIC8qIEFkZCB0aGUgc2NvcGUgc3RydWN0IHRv IHRoZSBwYXJlbnQgZmllbGQgbGlzdC4gICovCisJICBjb3JvX21ha2VfZnJhbWVfZW50cnlfaWQg KHBhcmVudF9maWVsZF9saXN0LCBzY29wZV9maWVsZF9pZCwKKwkJCQkgICAgc2NvcGVfc3RydWN0 LAorCQkJCSAgICBsdmQtPmxvYyk7CisKKwkgIGx2ZC0+ZmllbGRfYWNjZXNzX3BhdGgtPnBvcCAo KTsKKwl9CiAgICAgfQogICByZXR1cm4gTlVMTF9UUkVFOwogfQpAQCAtNDQ4Nyw3ICs0NjEyLDgg QEAgbW9ycGhfZm5fdG9fY29ybyAodHJlZSBvcmlnLCB0cmVlICpyZXN1bWVyLCB0cmVlICpkZXN0 cm95ZXIpCiAgICAgIHdvdWxkIGV4cGVjdCB0byBkZWxldGUgdW51c2VkIGVudHJpZXMgbGF0ZXIu ICAqLwogICBoYXNoX21hcDx0cmVlLCBsb2NhbF92YXJfaW5mbz4gbG9jYWxfdmFyX3VzZXM7CiAg IGxvY2FsX3ZhcnNfZnJhbWVfZGF0YSBsb2NhbF92YXJzX2RhdGEKLSAgICA9IHsmZmllbGRfbGlz dCwgJmxvY2FsX3Zhcl91c2VzLCAwLCAwLCBmbl9zdGFydCwgZmFsc2UsIGZhbHNlfTsKKyAgICA9 IHsmZmllbGRfbGlzdCwgJmxvY2FsX3Zhcl91c2VzLCAwLCAwLCBmbl9zdGFydCwgZmFsc2UsIGZh bHNlLCBvcmlnLAorICAgICAgIG1ha2VfdHJlZV92ZWN0b3IgKCl9OwogICBjcF93YWxrX3RyZWUg KCZmbmJvZHksIHJlZ2lzdGVyX2xvY2FsX3Zhcl91c2VzLCAmbG9jYWxfdmFyc19kYXRhLCBOVUxM KTsKIAogICAvKiBUaWUgb2ZmIHRoZSBzdHJ1Y3QgZm9yIG5vdywgc28gdGhhdCB3ZSBjYW4gYnVp bGQgb2Zmc2V0cyB0byB0aGUKZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZysrLmRnL2Nvcm91 dGluZXMvcHIxMDU5ODkuQyBiL2djYy90ZXN0c3VpdGUvZysrLmRnL2Nvcm91dGluZXMvcHIxMDU5 ODkuQwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYzhiOWJlNjM0YWEK LS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2crKy5kZy9jb3JvdXRpbmVzL3ByMTA1 OTg5LkMKQEAgLTAsMCArMSwxMjQgQEAKKy8vICB7IGRnLWRvIHJ1biB9CisKKyNpbmNsdWRlIDxj c3RkZGVmPgorCisjaW5jbHVkZSAiY29yby5oIgorCitzdHJ1Y3QgcHJvbWlzZTsKKworc3RydWN0 IHRhc2sKK3sKKyAgY29ybzo6Y29yb3V0aW5lX2hhbmRsZTxwcm9taXNlPiBoYW5kbGU7CisKKyAg fnRhc2sgKCkKKyAgeworICAgIGlmIChoYW5kbGUpCisgICAgICB7CisJaGFuZGxlLmRlc3Ryb3kg KCk7CisgICAgICB9CisgIH0KK307CisKK3N0ZDo6c2l6ZV90IGZyYW1lX3NpemUgPSAwdTsKKwor c3RydWN0IHByb21pc2UKK3sKKyAgY29ybzo6Y29yb3V0aW5lX2hhbmRsZTw+IGNvbnRpbnVhdGlv biA9IGNvcm86Om5vb3BfY29yb3V0aW5lICgpOworCisgIGF1dG8gZ2V0X3JldHVybl9vYmplY3Qg KCkgbm9leGNlcHQKKyAgeworICAgIHJldHVybiB0YXNre2Nvcm86OmNvcm91dGluZV9oYW5kbGU8 cHJvbWlzZT46OmZyb21fcHJvbWlzZSAoKnRoaXMpfTsKKyAgfQorCisgIHZvaWQgdW5oYW5kbGVk X2V4Y2VwdGlvbiAoKSBub2V4Y2VwdCB7fQorCisgIHZvaWQgcmV0dXJuX3ZvaWQgKCkge30KKwor ICBhdXRvIGluaXRpYWxfc3VzcGVuZCAoKSBub2V4Y2VwdCB7IHJldHVybiBjb3JvOjpzdXNwZW5k X2Fsd2F5c3t9OyB9CisKKyAgYXV0byBmaW5hbF9zdXNwZW5kICgpIG5vZXhjZXB0CisgIHsKKyAg ICBzdHJ1Y3QgYXdhaXRlcl90eXBlIDogY29ybzo6c3VzcGVuZF9hbHdheXMKKyAgICB7CisgICAg ICBhdXRvIGF3YWl0X3N1c3BlbmQgKGNvcm86OmNvcm91dGluZV9oYW5kbGUgPHByb21pc2U+IGhh bmRsZSkgbm9leGNlcHQKKyAgICAgIHsKKwlyZXR1cm4gaGFuZGxlLnByb21pc2UgKCkuY29udGlu dWF0aW9uOworICAgICAgfQorICAgIH07CisKKyAgICByZXR1cm4gYXdhaXRlcl90eXBle307Cisg IH0KKworICB2b2lkICogb3BlcmF0b3IgbmV3IChzdGQ6OnNpemVfdCBzaXplKQorICB7CisgICAg ZnJhbWVfc2l6ZSA9IHNpemU7CisgICAgcmV0dXJuIG5ldyBzdGQ6OmJ5dGVbc2l6ZV07CisgIH0K KworICB2b2lkIG9wZXJhdG9yIGRlbGV0ZSAodm9pZCAqcHRyLCBzdGQ6OnNpemVfdCBzaXplKQor ICB7CisgICAgcmV0dXJuIGRlbGV0ZVtdIHN0YXRpY19jYXN0PHN0ZDo6Ynl0ZSAqPihwdHIpOwor ICB9Cit9OworCithdXRvIG9wZXJhdG9yIGNvX2F3YWl0ICh0YXNrICYmdCkKK3sKKyAgc3RydWN0 IGF3YWl0ZXJfdHlwZSA6IGNvcm86OnN1c3BlbmRfYWx3YXlzCisgIHsKKyAgICBjb3JvOjpjb3Jv dXRpbmVfaGFuZGxlPHByb21pc2U+IGhhbmRsZTsKKworICAgIGF1dG8gYXdhaXRfc3VzcGVuZCAo Y29ybzo6Y29yb3V0aW5lX2hhbmRsZTxwcm9taXNlPiBjb250aW51YXRpb24pCisgICAgeworICAg ICAgaGFuZGxlLnByb21pc2UgKCkuY29udGludWF0aW9uID0gY29udGludWF0aW9uOworICAgICAg cmV0dXJuIGhhbmRsZTsKKyAgICB9CisgIH07CisKKyAgcmV0dXJuIGF3YWl0ZXJfdHlwZXt7fSwg dC5oYW5kbGV9OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmdzPgorc3RydWN0IGNvcm86 OmNvcm91dGluZV90cmFpdHM8dGFzaywgQXJncy4uLj4KK3sKKyAgdXNpbmcgcHJvbWlzZV90eXBl ID0gcHJvbWlzZTsKK307CisKK2F1dG8gY29yb18zICgpIC0+IHRhc2sKK3sKKyAgY29fcmV0dXJu OworfQorCitzdGQ6OmJ5dGUgKmFycl9wdHIgPSBudWxscHRyOworCit0YXNrIGNvcm9fMiAoKQor eworICB7CisgICAgc3RkOjpieXRlIGFyclsyNTZdOworICAgIGNvX2F3YWl0IGNvcm9fMyAoKTsK KyAgICBhcnJfcHRyID0gYXJyOworICB9CisgIHsKKyAgICBzdGQ6OmJ5dGUgYXJyWzI1Nl07Cisg ICAgY29fYXdhaXQgY29yb18zICgpOworICAgIGFycl9wdHIgPSBhcnI7CisgIH0KK30KKwordGFz ayBjb3JvXzEgKCkKK3sKKyAgc3RkOjpieXRlIGFyclsyNTZdOworICBjb19hd2FpdCBjb3JvXzMg KCk7CisgIGFycl9wdHIgPSBhcnI7Cit9CisKK2ludCBtYWluICgpCit7CisgIGNvcm9fMSAoKTsK KyAgYXV0byBmaXJzdF9mcmFtZV9zaXplID0gZnJhbWVfc2l6ZTsKKyAgY29yb18yICgpOworICBh dXRvIHNlY29uZF9mcmFtZV9zaXplID0gZnJhbWVfc2l6ZTsKKworICAvKiBjb3JvXzEgZnJhbWUg c2hvdWxkIGJlIHRoZSBzYW1lIHNpemUgYXMgY29yb18yIGZyYW1lLiAgKi8KKworICByZXR1cm4g Zmlyc3RfZnJhbWVfc2l6ZSA9PSBzZWNvbmRfZnJhbWVfc2l6ZSA/IDAgOiAxOworfQo= --62cd78b9_418b132f_825--