From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 14958 invoked by alias); 10 Nov 2012 01:33:10 -0000 Received: (qmail 14950 invoked by uid 22791); 10 Nov 2012 01:33:10 -0000 X-SWARE-Spam-Status: No, hits=-5.5 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,KHOP_RCVD_TRUST,KHOP_THREADED,RCVD_IN_DNSWL_LOW,RCVD_IN_HOSTKARMA_YE,RP_MATCHES_RCVD,TW_VF X-Spam-Check-By: sourceware.org Received: from mail-ob0-f175.google.com (HELO mail-ob0-f175.google.com) (209.85.214.175) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Sat, 10 Nov 2012 01:33:05 +0000 Received: by mail-ob0-f175.google.com with SMTP id vb8so3142491obc.20 for ; Fri, 09 Nov 2012 17:33:04 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type:x-gm-message-state; bh=ew04saD7+Jhzo0vyh9IXhRJSomSYjzZJSdqt+1CiC4E=; b=kVFRYOSINbee+wyzobGnoqx3rUA9FNMEdsefZun0Zzo5s1vXO06ZGJYcbjuhMZiC7X GaTZ5RcHsuBnalj6tXN55+CW8uHugNVRWG73uuLcoAWTwIZ/EdBxAvK/ITpJ9ePyzy+d JK3XtQKFI9ZoYOkSjI+/u1LdcL/LAWbcobpV80xYw35kOR9os9H8IYhmE/E9Xx+4Aijc dIsk8Ryi+p8qjG6aUxYRj2XUUyfMIYLvgPl6+53aRLviDlZyMGkxCZeWPokvs658APbu WGpBlN/h3K27fxerDLnFN6LFQ7U1uROA5nRKS18AhJANejJheVCg8TvymmUxyNZOhYpq 09Wg== MIME-Version: 1.0 Received: by 10.182.212.35 with SMTP id nh3mr1442721obc.10.1352511184874; Fri, 09 Nov 2012 17:33:04 -0800 (PST) Received: by 10.182.176.106 with HTTP; Fri, 9 Nov 2012 17:33:04 -0800 (PST) In-Reply-To: <50993222.3010609@redhat.com> References: <5008708E.1030109@redhat.com> <506F27AF.3070805@redhat.com> <50816D63.3020908@google.com> <20121026155447.GA4348@atrey.karlin.mff.cuni.cz> <50902624.3020705@redhat.com> <50912F66.3030707@redhat.com> <50993222.3010609@redhat.com> Date: Sat, 10 Nov 2012 01:33:00 -0000 Message-ID: Subject: Re: User directed Function Multiversioning via Function Overloading (issue5752064) From: Sriraman Tallam To: Jason Merrill Cc: David Li , "H.J. Lu" , gcc-patches List , Jan Hubicka , Diego Novillo Content-Type: multipart/mixed; boundary=e89a8f5039dcbaac0f04ce1a0cb6 X-Gm-Message-State: ALoCoQlWQMvcB3pgxmi0MxqpKhW81CR43S5vnFK4yiG9xEWNQNnSOGLBM9Abi6RjP/0Tt1t8JO0i2D+ufzfDketfBeGRBYIR+aEDPPHVnPefV4qOqn57JkXAR2YIW+eYvDSUwU/pTnu8UoBoNwA2fAlsWlLXZOWw8HLvq6X6e7EfuLsjAnrjuoJROWnudUTO9TnYPJvSmI0T X-IsSubscribed: yes 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 X-SW-Source: 2012-11/txt/msg00794.txt.bz2 --e89a8f5039dcbaac0f04ce1a0cb6 Content-Type: text/plain; charset=ISO-8859-1 Content-length: 2376 Hi Jason, Made all the changes and attached patch. Ok to commit? Thanks, -Sri. On Tue, Nov 6, 2012 at 7:52 AM, Jason Merrill wrote: > On 11/05/2012 09:38 PM, Sriraman Tallam wrote: >> >> + /* For multi-versioned functions, more than one match is just fine. >> >> + Call decls_match to make sure they are different because they are >> + versioned. */ >> + if (DECL_FUNCTION_VERSIONED (fn)) >> + { >> + for (match = TREE_CHAIN (matches); match; match = TREE_CHAIN >> (match)) >> + if (!DECL_FUNCTION_VERSIONED (TREE_PURPOSE (match)) >> + || decls_match (fn, TREE_PURPOSE (match))) >> + break; >> + } > > > I still don't understand what this code is supposed to be doing. Please > remove it and instead modify the other loop to allow mismatches that are > versions of the same function. > >> + /* If the olddecl is a version, so is the newdecl. */ >> + if (TREE_CODE (newdecl) == FUNCTION_DECL >> + && DECL_FUNCTION_VERSIONED (olddecl)) >> + { >> + DECL_FUNCTION_VERSIONED (newdecl) = 1; >> + /* newdecl will be purged and is no longer a version. */ >> + delete_function_version (newdecl); >> + } > > > Please make the comment clearer that the reason we're setting the flag on > the newdecl is so that it'll be copied back into the olddecl; otherwise it > seems odd to say it's a version and then it isn't a version. > >> + /* If a pointer to a function that is multi-versioned is requested, the >> + pointer to the dispatcher function is returned instead. This works >> + well because indirectly calling the function will dispatch the right >> + function version at run-time. */ >> >> + if (DECL_FUNCTION_VERSIONED (fn)) >> + { >> + tree dispatcher_decl = NULL; >> + gcc_assert (targetm.get_function_versions_dispatcher); >> + dispatcher_decl = targetm.get_function_versions_dispatcher (fn); >> + if (!dispatcher_decl) >> + { >> + error_at (input_location, "Pointer to a multiversioned function" >> + " without a default is not allowed"); >> + return error_mark_node; >> + } >> + retrofit_lang_decl (dispatcher_decl); >> + fn = dispatcher_decl; > > > This code should use the get_function_version_dispatcher function in > cp/call.c. > > Jason > --e89a8f5039dcbaac0f04ce1a0cb6 Content-Type: text/plain; charset=US-ASCII; name="mv_patch.txt" Content-Disposition: attachment; filename="mv_patch.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_h9c28bi70 Content-length: 11107 CgkqIGNncmFwaC5jIChpbnNlcnRfbmV3X2NncmFwaF9ub2RlX3ZlcnNpb24p OiBVc2UgY2dyYXBoX2dldF9ub2RlCglpbnN0ZWFkIG9mIGNncmFwaF9nZXRf Y3JlYXRlX25vZGUuCgkqIGNwL2NsYXNzLmMgKG1hcmtfdmVyc2lvbnNfdXNl ZCk6IFJlbW92ZS4KCShyZXNvbHZlX2FkZHJlc3Nfb2Zfb3ZlcmxvYWRlZF9m dW5jdGlvbik6IERvIG5vdCBjYWxsIGRlY2xzX21hdGNoCglmb3IgdmVyc2lv bmVkIGZ1bmN0aW9ucy4gQ2FsbCBnZXRfZnVuY3Rpb25fdmVyc2lvbnNfZGlz cGF0Y2hlci4KCSogY3AvZGVjbC5jIChkdXBsaWNhdGVfZGVjbHMpOiBBZGQg Y29tbWVudHMuCgkqIGNwL2NhbGwuYyAoZ2V0X2Z1bmN0aW9uX3ZlcnNpb25f ZGlzcGF0Y2hlcik6IEV4cG9zZSBmdW5jdGlvbi4KCShtYXJrX3ZlcnNpb25z X3VzZWQpOiBFeHBvc2UgZnVuY3Rpb24uCgkqIGNwL2NwLXRyZWUuaCAobWFy a192ZXJzaW9uc191c2VkKTogTmV3IGRlY2xhcmF0aW9uLgoJKGdldF9mdW5j dGlvbl92ZXJzaW9uX2Rpc3BhdGNoZXIpOiBEaXR0by4KCSogdGVzdHN1aXRl L2crKy5kZy9tdjQuQzogQWRkIHJlcXVpcmUgaWZ1bmMuIENoYW5nZSBlcnJv ciBtZXNzYWdlLgoJKiB0ZXN0c3VpdGUvZysrLmRnL212NS5DOiBBZGQgcmVx dWlyZSBpZnVuYy4KCSogdGVzdHN1aXRlL2crKy5kZy9tdjYuQzogQWRkIHJl cXVpcmUgaWZ1bmMuCgpJbmRleDogY2dyYXBoLmMKPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQotLS0gY2dyYXBoLmMJKHJldmlzaW9uIDE5MzM4NSkKKysrIGNn cmFwaC5jCSh3b3JraW5nIGNvcHkpCkBAIC0yMDYsNyArMjA2LDcgQEAgaW5z ZXJ0X25ld19jZ3JhcGhfbm9kZV92ZXJzaW9uIChzdHJ1Y3QgY2dyYXBoX25v ZGUKIHZvaWQKIGRlbGV0ZV9mdW5jdGlvbl92ZXJzaW9uICh0cmVlIGRlY2wp CiB7Ci0gIHN0cnVjdCBjZ3JhcGhfbm9kZSAqZGVjbF9ub2RlID0gY2dyYXBo X2dldF9jcmVhdGVfbm9kZSAoZGVjbCk7CisgIHN0cnVjdCBjZ3JhcGhfbm9k ZSAqZGVjbF9ub2RlID0gY2dyYXBoX2dldF9ub2RlIChkZWNsKTsKICAgc3Ry dWN0IGNncmFwaF9mdW5jdGlvbl92ZXJzaW9uX2luZm8gKmRlY2xfdiA9IE5V TEw7CiAKICAgaWYgKGRlY2xfbm9kZSA9PSBOVUxMKQpJbmRleDogdGVzdHN1 aXRlL2crKy5kZy9tdjQuQwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSB0 ZXN0c3VpdGUvZysrLmRnL212NC5DCShyZXZpc2lvbiAxOTMzODUpCisrKyB0 ZXN0c3VpdGUvZysrLmRnL212NC5DCSh3b3JraW5nIGNvcHkpCkBAIC0zLDYg KzMsNyBAQAogICAgYW5kIGl0cyBwb2ludGVyIGlzIHRha2VuLiAgKi8KIAog LyogeyBkZy1kbyBjb21waWxlIHsgdGFyZ2V0IGk/ODYtKi0qIHg4Nl82NC0q LSogfSB9ICovCisvKiB7IGRnLXJlcXVpcmUtaWZ1bmMgIiIgfSAgKi8KIC8q IHsgZGctb3B0aW9ucyAiLU8yIC1tbm8tc3NlIC1tbm8tcG9wY250IiB9ICov CiAKIGludCBfX2F0dHJpYnV0ZV9fICgodGFyZ2V0ICgic3NlIikpKQpAQCAt MTgsNiArMTksNiBAQCBmb28gKCkKIAogaW50IG1haW4gKCkKIHsKLSAgaW50 ICgqcCkoKSA9ICZmb287IC8qIHsgZGctZXJyb3IgIlBvaW50ZXIgdG8gYSBt dWx0aXZlcnNpb25lZCBmdW5jdGlvbiB3aXRob3V0IGEgZGVmYXVsdCBpcyBu b3QgYWxsb3dlZCIge30gfSAqLworICBpbnQgKCpwKSgpID0gJmZvbzsgLyog eyBkZy1lcnJvciAiUG9pbnRlci9DYWxsIHRvIG11bHRpdmVyc2lvbmVkIGZ1 bmN0aW9uIHdpdGhvdXQgYSBkZWZhdWx0IGlzIG5vdCBhbGxvd2VkIiB7fSB9 ICovCiAgIHJldHVybiAoKnApKCk7CiB9CkluZGV4OiB0ZXN0c3VpdGUvZysr LmRnL212Ni5DCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHRlc3RzdWl0 ZS9nKysuZGcvbXY2LkMJKHJldmlzaW9uIDE5MzM4NSkKKysrIHRlc3RzdWl0 ZS9nKysuZGcvbXY2LkMJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw3IEBA CiAvKiBUZXN0IHRvIGNoZWNrIGlmIG1lbWJlciB2ZXJzaW9uIG11bHRpdmVy c2lvbmluZyB3b3JrcyBjb3JyZWN0bHkuICAqLwogCiAvKiB7IGRnLWRvIHJ1 biB7IHRhcmdldCBpPzg2LSotKiB4ODZfNjQtKi0qIH0gfSAqLworLyogeyBk Zy1yZXF1aXJlLWlmdW5jICIiIH0gICovCiAKIGNsYXNzIEZvbwogewpJbmRl eDogdGVzdHN1aXRlL2crKy5kZy9tdjUuQwo9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09Ci0tLSB0ZXN0c3VpdGUvZysrLmRnL212NS5DCShyZXZpc2lvbiAxOTMz ODUpCisrKyB0ZXN0c3VpdGUvZysrLmRnL212NS5DCSh3b3JraW5nIGNvcHkp CkBAIC0yLDYgKzIsNyBAQAogICAgbWFya2VkIGNvbWRhdCB3aXRoIGlubGlu ZSBrZXl3b3JkLiAgKi8KIAogLyogeyBkZy1kbyBydW4geyB0YXJnZXQgaT84 Ni0qLSogeDg2XzY0LSotKiB9IH0gKi8KKy8qIHsgZGctcmVxdWlyZS1pZnVu YyAiIiB9ICAqLwogLyogeyBkZy1vcHRpb25zICItTzIgIC1tbm8tcG9wY250 IiB9ICovCiAKIApJbmRleDogY3AvY2xhc3MuYwo9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09Ci0tLSBjcC9jbGFzcy5jCShyZXZpc2lvbiAxOTMzODUpCisrKyBj cC9jbGFzcy5jCSh3b3JraW5nIGNvcHkpCkBAIC03MDY4LDM4ICs3MDY4LDYg QEAgcG9wX2xhbmdfY29udGV4dCAodm9pZCkKIHsKICAgY3VycmVudF9sYW5n X25hbWUgPSBWRUNfcG9wICh0cmVlLCBjdXJyZW50X2xhbmdfYmFzZSk7CiB9 Ci0KLS8qIGZuIGlzIGEgZnVuY3Rpb24gdmVyc2lvbiBkaXNwYXRjaGVyIHRo YXQgaXMgbWFya2VkIHVzZWQuIE1hcmsgYWxsIHRoZSAKLSAgIHNlbWFudGlj YWxseSBpZGVudGljYWwgZnVuY3Rpb24gdmVyc2lvbnMgaXQgd2lsbCBkaXNw YXRjaCBhcyB1c2VkLiAgKi8KLQotc3RhdGljIHZvaWQKLW1hcmtfdmVyc2lv bnNfdXNlZCAodHJlZSBmbikKLXsKLSAgc3RydWN0IGNncmFwaF9ub2RlICpu b2RlOwotICBzdHJ1Y3QgY2dyYXBoX2Z1bmN0aW9uX3ZlcnNpb25faW5mbyAq bm9kZV92OwotICBzdHJ1Y3QgY2dyYXBoX2Z1bmN0aW9uX3ZlcnNpb25faW5m byAqaXRfdjsKLQotICBnY2NfYXNzZXJ0IChUUkVFX0NPREUgKGZuKSA9PSBG VU5DVElPTl9ERUNMKTsKLQotICBub2RlID0gY2dyYXBoX2dldF9ub2RlIChm bik7Ci0gIGlmIChub2RlID09IE5VTEwpCi0gICAgcmV0dXJuOwotCi0gIGdj Y19hc3NlcnQgKG5vZGUtPmRpc3BhdGNoZXJfZnVuY3Rpb24pOwotCi0gIG5v ZGVfdiA9IGdldF9jZ3JhcGhfbm9kZV92ZXJzaW9uIChub2RlKTsKLSAgaWYg KG5vZGVfdiA9PSBOVUxMKQotICAgIHJldHVybjsKLQotICAvKiBBbGwgc2Vt YW50aWNhbGx5IGlkZW50aWNhbCB2ZXJzaW9ucyBhcmUgY2hhaW5lZC4gIFRy YXZlcnNlIGFuZCBtYXJrIGVhY2gKLSAgICAgb25lIG9mIHRoZW0gYXMgdXNl ZC4gICovCi0gIGl0X3YgPSBub2RlX3YtPm5leHQ7Ci0gIHdoaWxlIChpdF92 ICE9IE5VTEwpCi0gICAgewotICAgICAgbWFya191c2VkIChpdF92LT50aGlz X25vZGUtPnN5bWJvbC5kZWNsKTsKLSAgICAgIGl0X3YgPSBpdF92LT5uZXh0 OwotICAgIH0KLX0KIAwKIC8qIFR5cGUgaW5zdGFudGlhdGlvbiByb3V0aW5l cy4gICovCiAKQEAgLTczMTUsMjIgKzcyODMsMTcgQEAgcmVzb2x2ZV9hZGRy ZXNzX29mX292ZXJsb2FkZWRfZnVuY3Rpb24gKHRyZWUgdGFyZ2UKIAogICAg ICAgZm4gPSBUUkVFX1BVUlBPU0UgKG1hdGNoZXMpOwogCi0gICAgICAvKiBG b3IgbXVsdGktdmVyc2lvbmVkIGZ1bmN0aW9ucywgbW9yZSB0aGFuIG9uZSBt YXRjaCBpcyBqdXN0IGZpbmUuCi0JIENhbGwgZGVjbHNfbWF0Y2ggdG8gbWFr ZSBzdXJlIHRoZXkgYXJlIGRpZmZlcmVudCBiZWNhdXNlIHRoZXkgYXJlCi0J IHZlcnNpb25lZC4gICovCi0gICAgICBpZiAoREVDTF9GVU5DVElPTl9WRVJT SU9ORUQgKGZuKSkKKyAgICAgIC8qIEZvciBtdWx0aS12ZXJzaW9uZWQgZnVu Y3Rpb25zLCBtb3JlIHRoYW4gb25lIG1hdGNoIGlzIGp1c3QgZmluZSBhbmQK KwkgZGVjbHNfbWF0Y2ggd2lsbCByZXR1cm4gZmFsc2UgYXMgdGhleSBhcmUg ZGlmZmVyZW50LiAgKi8KKyAgICAgIGZvciAobWF0Y2ggPSBUUkVFX0NIQUlO IChtYXRjaGVzKTsgbWF0Y2g7IG1hdGNoID0gVFJFRV9DSEFJTiAobWF0Y2gp KQogCXsKLSAgICAgICAgICBmb3IgKG1hdGNoID0gVFJFRV9DSEFJTiAobWF0 Y2hlcyk7IG1hdGNoOyBtYXRjaCA9IFRSRUVfQ0hBSU4gKG1hdGNoKSkKLSAg CSAgICBpZiAoIURFQ0xfRlVOQ1RJT05fVkVSU0lPTkVEIChUUkVFX1BVUlBP U0UgKG1hdGNoKSkKLQkgICAgICAgIHx8IGRlY2xzX21hdGNoIChmbiwgVFJF RV9QVVJQT1NFIChtYXRjaCkpKQotCSAgICAgIGJyZWFrOworCSAgLyogU2tp cCBjYWxsaW5nIGRlY2xzX21hdGNoIGZvciB2ZXJzaW9uZWQgZnVuY3Rpb25z LiAgKi8KKyAgICAgICAgICBpZiAoREVDTF9GVU5DVElPTl9WRVJTSU9ORUQg KGZuKQorCSAgICAgICYmIERFQ0xfRlVOQ1RJT05fVkVSU0lPTkVEIChUUkVF X1BVUlBPU0UgKG1hdGNoKSkpCisJICAgIGNvbnRpbnVlOworCSAgaWYgKCFk ZWNsc19tYXRjaCAoZm4sIFRSRUVfUFVSUE9TRSAobWF0Y2gpKSkKKyAgICAg ICAgICAgIGJyZWFrOwogCX0KLSAgICAgIGVsc2UKLQl7Ci0gICAgICAgICAg Zm9yIChtYXRjaCA9IFRSRUVfQ0hBSU4gKG1hdGNoZXMpOyBtYXRjaDsgbWF0 Y2ggPSBUUkVFX0NIQUlOIChtYXRjaCkpCi0gIAkgICAgaWYgKCFkZWNsc19t YXRjaCAoZm4sIFRSRUVfUFVSUE9TRSAobWF0Y2gpKSkKLQkgICAgICBicmVh azsKLQl9CiAKICAgICAgIGlmIChtYXRjaCkKIAl7CkBAIC03Mzc3LDE3ICs3 MzQwLDkgQEAgcmVzb2x2ZV9hZGRyZXNzX29mX292ZXJsb2FkZWRfZnVuY3Rp b24gKHRyZWUgdGFyZ2UKICAgICAgZnVuY3Rpb24gdmVyc2lvbiBhdCBydW4t dGltZS4gICovCiAgIGlmIChERUNMX0ZVTkNUSU9OX1ZFUlNJT05FRCAoZm4p KQogICAgIHsKLSAgICAgIHRyZWUgZGlzcGF0Y2hlcl9kZWNsID0gTlVMTDsK LSAgICAgIGdjY19hc3NlcnQgKHRhcmdldG0uZ2V0X2Z1bmN0aW9uX3ZlcnNp b25zX2Rpc3BhdGNoZXIpOwotICAgICAgZGlzcGF0Y2hlcl9kZWNsID0gdGFy Z2V0bS5nZXRfZnVuY3Rpb25fdmVyc2lvbnNfZGlzcGF0Y2hlciAoZm4pOwot ICAgICAgaWYgKCFkaXNwYXRjaGVyX2RlY2wpCi0JewotCSAgZXJyb3JfYXQg KGlucHV0X2xvY2F0aW9uLCAiUG9pbnRlciB0byBhIG11bHRpdmVyc2lvbmVk IGZ1bmN0aW9uIgotCQkgICAgIiB3aXRob3V0IGEgZGVmYXVsdCBpcyBub3Qg YWxsb3dlZCIpOwotCSAgcmV0dXJuIGVycm9yX21hcmtfbm9kZTsKLQl9Ci0g ICAgICByZXRyb2ZpdF9sYW5nX2RlY2wgKGRpc3BhdGNoZXJfZGVjbCk7Ci0g ICAgICBmbiA9IGRpc3BhdGNoZXJfZGVjbDsKKyAgICAgIGZuID0gZ2V0X2Z1 bmN0aW9uX3ZlcnNpb25fZGlzcGF0Y2hlciAoZm4pOworICAgICAgaWYgKGZu ID09IE5VTEwpCisJcmV0dXJuIGVycm9yX21hcmtfbm9kZTsKICAgICAgIC8q IE1hcmsgYWxsIHRoZSB2ZXJzaW9ucyBjb3JyZXNwb25kaW5nIHRvIHRoZSBk aXNwYXRjaGVyIGFzIHVzZWQuICAqLwogICAgICAgaWYgKCEoZmxhZ3MgJiB0 Zl9jb252KSkKIAltYXJrX3ZlcnNpb25zX3VzZWQgKGZuKTsKSW5kZXg6IGNw L2RlY2wuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBjcC9kZWNsLmMJ KHJldmlzaW9uIDE5MzM4NSkKKysrIGNwL2RlY2wuYwkod29ya2luZyBjb3B5 KQpAQCAtMjMwNywxMiArMjMwNywxNSBAQCBkdXBsaWNhdGVfZGVjbHMgKHRy ZWUgbmV3ZGVjbCwgdHJlZSBvbGRkZWNsLCBib29sCiAgIGVsc2UgaWYgKERF Q0xfUFJFU0VSVkVfUCAobmV3ZGVjbCkpCiAgICAgREVDTF9QUkVTRVJWRV9Q IChvbGRkZWNsKSA9IDE7CiAKLSAgLyogSWYgdGhlIG9sZGRlY2wgaXMgYSB2 ZXJzaW9uLCBzbyBpcyB0aGUgbmV3ZGVjbC4gICovCisgIC8qIE1lcmdlIHRo ZSBERUNMX0ZVTkNUSU9OX1ZFUlNJT05FRCBpbmZvcm1hdGlvbi4gIG5ld2Rl Y2wgd2lsbCBiZSBjb3BpZWQKKyAgICAgdG8gb2xkZGVjbCBhbmQgZGVsZXRl ZC4gICovCiAgIGlmIChUUkVFX0NPREUgKG5ld2RlY2wpID09IEZVTkNUSU9O X0RFQ0wKICAgICAgICYmIERFQ0xfRlVOQ1RJT05fVkVSU0lPTkVEIChvbGRk ZWNsKSkKICAgICB7CisgICAgICAvKiBTZXQgdGhlIGZsYWcgZm9yIG5ld2Rl Y2wgc28gdGhhdCBpdCBnZXRzIGNvcGllZCB0byBvbGRkZWNsLiAgKi8KICAg ICAgIERFQ0xfRlVOQ1RJT05fVkVSU0lPTkVEIChuZXdkZWNsKSA9IDE7Ci0g ICAgICAvKiBuZXdkZWNsIHdpbGwgYmUgcHVyZ2VkIGFuZCBpcyBubyBsb25n ZXIgYSB2ZXJzaW9uLiAgKi8KKyAgICAgIC8qIG5ld2RlY2wgd2lsbCBiZSBw dXJnZWQgYWZ0ZXIgY29weWluZyB0byBvbGRkZWNsIGFuZCBpcyBubyBsb25n ZXIKKyAgICAgICAgIGEgdmVyc2lvbi4gICovCiAgICAgICBkZWxldGVfZnVu Y3Rpb25fdmVyc2lvbiAobmV3ZGVjbCk7CiAgICAgfQogCkluZGV4OiBjcC9j YWxsLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gY3AvY2FsbC5jCShy ZXZpc2lvbiAxOTMzODUpCisrKyBjcC9jYWxsLmMJKHdvcmtpbmcgY29weSkK QEAgLTY1MTcsNyArNjUxNyw3IEBAIG1hZ2ljX3ZhcmFyZ3NfcCAodHJlZSBm bikKIAogLyogUmV0dXJucyB0aGUgZGVjbCBvZiB0aGUgZGlzcGF0Y2hlciBm dW5jdGlvbiBpZiBGTiBpcyBhIGZ1bmN0aW9uIHZlcnNpb24uICAqLwogCi1z dGF0aWMgdHJlZQordHJlZQogZ2V0X2Z1bmN0aW9uX3ZlcnNpb25fZGlzcGF0 Y2hlciAodHJlZSBmbikKIHsKICAgdHJlZSBkaXNwYXRjaGVyX2RlY2wgPSBO VUxMOwpAQCAtNjUzMCw4ICs2NTMwLDggQEAgZ2V0X2Z1bmN0aW9uX3ZlcnNp b25fZGlzcGF0Y2hlciAodHJlZSBmbikKIAogICBpZiAoZGlzcGF0Y2hlcl9k ZWNsID09IE5VTEwpCiAgICAgewotICAgICAgZXJyb3JfYXQgKGlucHV0X2xv Y2F0aW9uLCAiQ2FsbCB0byBtdWx0aXZlcnNpb25lZCBmdW5jdGlvbiIKLSAg ICAgICAgICAgICAgICAiIHdpdGhvdXQgYSBkZWZhdWx0IGlzIG5vdCBhbGxv d2VkIik7CisgICAgICBlcnJvcl9hdCAoaW5wdXRfbG9jYXRpb24sICJDYWxs L1BvaW50ZXIgdG8gbXVsdGl2ZXJzaW9uZWQgZnVuY3Rpb24iCisgICAgICAg ICAgICAgICAgIiB3aXRob3V0IGEgZGVmYXVsdCBjYW5ub3QgYmUgZGlzcGF0 Y2hlZCIpOwogICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCkBAIC02NTQz LDcgKzY1NDMsNyBAQCBnZXRfZnVuY3Rpb25fdmVyc2lvbl9kaXNwYXRjaGVy ICh0cmVlIGZuKQogLyogZm4gaXMgYSBmdW5jdGlvbiB2ZXJzaW9uIGRpc3Bh dGNoZXIgdGhhdCBpcyBtYXJrZWQgdXNlZC4gTWFyayBhbGwgdGhlIAogICAg c2VtYW50aWNhbGx5IGlkZW50aWNhbCBmdW5jdGlvbiB2ZXJzaW9ucyBpdCB3 aWxsIGRpc3BhdGNoIGFzIHVzZWQuICAqLwogCi1zdGF0aWMgdm9pZAordm9p ZAogbWFya192ZXJzaW9uc191c2VkICh0cmVlIGZuKQogewogICBzdHJ1Y3Qg Y2dyYXBoX25vZGUgKm5vZGU7CkluZGV4OiBjcC9jcC10cmVlLmgKPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQotLS0gY3AvY3AtdHJlZS5oCShyZXZpc2lvbiAx OTMzODUpCisrKyBjcC9jcC10cmVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5 NzEsNiArNDk3MSw4IEBAIGV4dGVybiBib29sIGlzX2xpc3RfY3RvcgkJCSh0 cmVlKTsKICNpZmRlZiBFTkFCTEVfQ0hFQ0tJTkcKIGV4dGVybiB2b2lkIHZh bGlkYXRlX2NvbnZlcnNpb25fb2JzdGFjawkJKHZvaWQpOwogI2VuZGlmIC8q IEVOQUJMRV9DSEVDS0lORyAqLworZXh0ZXJuIHZvaWQgbWFya192ZXJzaW9u c191c2VkCQkJKHRyZWUpOworZXh0ZXJuIHRyZWUgZ2V0X2Z1bmN0aW9uX3Zl cnNpb25fZGlzcGF0Y2hlcgkodHJlZSk7CiAKIC8qIGluIGNsYXNzLmMgKi8K IGV4dGVybiB0cmVlIGJ1aWxkX3ZmaWVsZF9yZWYJCQkodHJlZSwgdHJlZSk7 Cg== --e89a8f5039dcbaac0f04ce1a0cb6--