From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 12291 invoked by alias); 4 Jan 2013 00:42:32 -0000 Received: (qmail 12280 invoked by uid 22791); 4 Jan 2013 00:42:31 -0000 X-SWARE-Spam-Status: No, hits=-5.2 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,T_RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from mail-qa0-f43.google.com (HELO mail-qa0-f43.google.com) (209.85.216.43) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Fri, 04 Jan 2013 00:42:21 +0000 Received: by mail-qa0-f43.google.com with SMTP id cr7so12895395qab.2 for ; Thu, 03 Jan 2013 16:42:18 -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=DS5An7UOa55cBT/iGsKnjPDxr+E1SdZ5ifztVGv2y4E=; b=J9wHyOTXaWylpZF0TA2YMGJM26DkxWDxbyKg3Mk0E5qp0sT5ah2TvSMLGL0fF4Su+f 1/XjBHipip41okXE74V6vOfLKOGS0SYWvhgpY8JFnmeH1yhmzdHxYo4DSN5RzrSAnJ9u m8BEE9R2WV2t79wq5cKFnEZ5Pvnm5Q7tfREWB3CQ8KyfRq+l5Zlnz2TxdbdPQa2v6SwN 8Dts1fUqwMTngzYflL/N8krqH3MaFsAqb+9XUK0O1npTQvlUOeew8dfRa6QO6FlyS0ci ZdwTtesOsd82vnaRLCSbCO58FkPvC1z9paw7JqF/yAMG6hCpaWGuBGNQyZx1zo/axRuc hxIw== MIME-Version: 1.0 Received: by 10.224.191.131 with SMTP id dm3mr30756231qab.27.1357260138361; Thu, 03 Jan 2013 16:42:18 -0800 (PST) Received: by 10.229.89.193 with HTTP; Thu, 3 Jan 2013 16:42:18 -0800 (PST) In-Reply-To: References: <20121221064539.0E1A7100704@rong.mtv.corp.google.com> <20121221092532.GA7055@kam.mff.cuni.cz> Date: Fri, 04 Jan 2013 00:42:00 -0000 Message-ID: Subject: Re: atomic update of profile counters (issue7000044) From: Rong Xu To: Richard Biener Cc: Andrew Pinski , Xinliang David Li , Jan Hubicka , GCC Patches , reply@codereview.appspotmail.com Content-Type: multipart/mixed; boundary=20cf300fb0cb6a323b04d26bc054 X-Gm-Message-State: ALoCoQm46bz2eLPCOP5Gemoa1pNZlQdjYyvKjYLf2+tDUx/LlxGDa/3mjDc9SQSPJeeSaorXa0HnXOEZanPNoGP+CozIowNroj5iPkU7mihGnaxnv8gDTj0uFJduyzbc8NZzcqSU9zBPRXIv4eLUftHoQYamhnnnef7pbjIKUGx2WA/Q9JReWi3Fk26MAuH37pS/A3goa84+ 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: 2013-01/txt/msg00151.txt.bz2 --20cf300fb0cb6a323b04d26bc054 Content-Type: text/plain; charset=ISO-8859-1 Content-length: 4480 Here is the new patch. It links libatomic when -fprofile-gen-atomic is specified for FDO instrumentation build. Here I assume libatomic is always installed. Andrew: do you think if this is reasonable? It also disables the functionality if target does not support weak (ie. TARGET_SUPPORTS_WEAK == 0). Thanks, -Rong On Thu, Jan 3, 2013 at 1:05 AM, Richard Biener wrote: > On Thu, Jan 3, 2013 at 2:25 AM, Andrew Pinski wrote: >> On Wed, Jan 2, 2013 at 5:15 PM, Rong Xu wrote: >>> Hi, >>> >>> Here is a new patch. The only difference is to declare >>> __atomic_fetch_add as weak. This is >>> needed for targets without sync/atomic builtin support. The patch >>> contains a call to the builtin regardless of the new options >>> -fprofile-gen-atomic. This results in a unsat in these targets even >>> for regular profile-gen built. >>> >>> With this new patch, if the user uses -fprofile-gen-atomic in these >>> target, the generated code will seg fault. >>> >>> We think a better solution is to emit the builtin call only in these >>> targets with the support, and give warning for non-supported target. >>> But I did not find any target hook for this. Does anyone know how to >>> do this? >> >> Why not use libatomic for those targets? > > Also note that not all targets support 'weak' linkage. How about check the flag TARGET_SUPPORTS_WEAK, and only enable the code when the flag is true. > > Richard. > >> Thanks, >> Andrew Pinski >> >> >> >>> >>> Thanks, >>> >>> -Rong >>> >>> >>> On Fri, Dec 28, 2012 at 11:35 AM, Xinliang David Li wrote: >>>> It would be great if this can make into gcc4.8. The patch has close to >>>> 0 impact on code stability. >>>> >>>> David >>>> >>>> On Fri, Dec 28, 2012 at 11:32 AM, Rong Xu wrote: >>>>> Hi Honza, >>>>> >>>>> In the other thread of discussion (similar patch in google-4_7 >>>>> branch), you said you were thinking if to let this patch into trunk in >>>>> stage 3. Can you give some update? >>>>> >>>>> Thanks, >>>>> >>>>> -Rong >>>>> >>>>> On Fri, Dec 21, 2012 at 10:37 AM, Rong Xu wrote: >>>>>> On Fri, Dec 21, 2012 at 1:25 AM, Jan Hubicka wrote: >>>>>>>> Hi, >>>>>>>> >>>>>>>> This patch adds support of atomic update of profiles counters. The goal is to improve >>>>>>>> the poor counter values for highly thread programs. >>>>>>>> >>>>>>>> The atomic update is under a new option -fprofile-gen-atomic= >>>>>>>> N=0: default, no atomic update >>>>>>>> N=1: atomic update edge counters. >>>>>>>> N=2: atomic update some of value profile counters (currently indirect-call and one value profile). >>>>>>>> N=3: both edge counter and the above value profile counters. >>>>>>>> Other value: fall back to the default. >>>>>>>> >>>>>>>> This patch is a simple porting of the version in google-4_7 branch. It uses __atomic_fetch_add >>>>>>>> based on Andrew Pinski's suggestion. Note I did not apply to all the value profiles as >>>>>>>> the indirect-call profile is the most relevant one here. >>>>>>>> >>>>>>>> Test with bootstrap. >>>>>>>> >>>>>>>> Comments and suggestions are welcomed. >>>>>>>> >>>>>>>> Thanks, >>>>>>>> >>>>>>>> -Rong >>>>>>>> >>>>>>>> >>>>>>>> 2012-12-20 Rong Xu >>>>>>>> >>>>>>>> * libgcc/libgcov.c (__gcov_one_value_profiler_body_atomic): New >>>>>>>> function. Atomic update profile counters. >>>>>>>> (__gcov_one_value_profiler_atomic): Ditto. >>>>>>>> (__gcov_indirect_call_profiler_atomic): Ditto. >>>>>>>> * gcc/gcov-io.h: Macros for atomic update. >>>>>>>> * gcc/common.opt: New option. >>>>>>>> * gcc/tree-profile.c (gimple_init_edge_profiler): Atomic >>>>>>>> update profile counters. >>>>>>>> (gimple_gen_edge_profiler): Ditto. >>>>>>> >>>>>>> The patch looks resonable. Eventually we probably should provide rest of the value counters >>>>>>> in thread safe manner. What happens on targets not having atomic operations? >>>>>> >>>>>> From http://gcc.gnu.org/onlinedocs/gcc/_005f_005fsync-Builtins.html#_005f_005fsync-Builtins, >>>>>> it says: >>>>>> "If a particular operation cannot be implemented on the target >>>>>> processor, a warning is generated and a call an external function is >>>>>> generated. " >>>>>> >>>>>> So I think there will be a warning and eventually a link error of unsat. >>>>>> >>>>>> Thanks, >>>>>> >>>>>> -Rong >>>>>> >>>>>> >>>>>>> >>>>>>> Honza --20cf300fb0cb6a323b04d26bc054 Content-Type: application/octet-stream; name="patch3.diff" Content-Disposition: attachment; filename="patch3.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_hbilksl40 Content-length: 11184 MjAxMy0wMS0wMyAgUm9uZyBYdSAgPHh1ckBnb29nbGUuY29tPgoKICAgICAg ICAqIGxpYmdjYy9saWJnY292LmMgKF9fZ2Nvdl9vbmVfdmFsdWVfcHJvZmls ZXJfYm9keV9hdG9taWMpOiBOZXcgCiAgICAgICAgZnVuY3Rpb24uIEF0b21p YyB1cGRhdGUgcHJvZmlsZSBjb3VudGVycy4KICAgICAgICAoX19nY292X29u ZV92YWx1ZV9wcm9maWxlcl9hdG9taWMpOiBEaXR0by4KICAgICAgICAoX19n Y292X2luZGlyZWN0X2NhbGxfcHJvZmlsZXJfYXRvbWljKTogRGl0dG8uCiAg ICAgICAgKiBnY2MvZ2Nvdi1pby5oOiBNYWNyb3MgZm9yIGF0b21pYyB1cGRh dGUuCiAgICAgICAgKiBnY2MvY29tbW9uLm9wdDogTmV3IG9wdGlvbi4KCSog Z2NjL2djYy5jOiBMaW5rIGxpYmF0b21pYyB3aGVuIGZwcm9maWxlLWdlbi1h dG9taWM9IHNwZWNpZmllZC4KICAgICAgICAqIGdjYy90cmVlLXByb2ZpbGUu YyAoZ2ltcGxlX2luaXRfZWRnZV9wcm9maWxlcik6IEF0b21pYwogICAgICAg IHVwZGF0ZSBwcm9maWxlIGNvdW50ZXJzLgogICAgICAgIChnaW1wbGVfZ2Vu X2VkZ2VfcHJvZmlsZXIpOiBEaXR0by4KCkluZGV4OiBnY2MvZ2Nvdi1pby5o Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGdjYy9nY292LWlvLmgJKHJl dmlzaW9uIDE5NDY1MikKKysrIGdjYy9nY292LWlvLmgJKHdvcmtpbmcgY29w eSkKQEAgLTIwMiw3ICsyMDIsMjEgQEAgdHlwZWRlZiB1bnNpZ25lZCBnY292 X3R5cGVfdW5zaWduZWQgX19hdHRyaWJ1dGVfXwogI2VuZGlmCiAjZW5kaWYK IAorI2lmIExPTkdfTE9OR19UWVBFX1NJWkUgPiAzMgorI2RlZmluZSBHQ09W X1RZUEVfQVRPTUlDX0ZFVENIX0FERF9GTiBfX2F0b21pY19mZXRjaF9hZGRf OAorI2RlZmluZSBHQ09WX1RZUEVfQVRPTUlDX0ZFVENIX0FERCBCVUlMVF9J Tl9BVE9NSUNfRkVUQ0hfQUREXzgKKyNlbHNlCisjZGVmaW5lIEdDT1ZfVFlQ RV9BVE9NSUNfRkVUQ0hfQUREX0ZOIF9fYXRvbWljX2ZldGNoX2FkZF80Cisj ZGVmaW5lIEdDT1ZfVFlQRV9BVE9NSUNfRkVUQ0hfQUREIEJVSUxUX0lOX0FU T01JQ19GRVRDSF9BRERfNAorI2VuZGlmCisjaWYgVEFSR0VUX1NVUFBPUlRT X1dFQUsKKy8qIE1ha2UgdGhlIGF0b21pYyBidWlsdGluIHdlYWsuIE90aGVy d2lzZSB3ZSBnZXQgbGluayB1bnNhdCAKKyAgIGlmIHRoZSBidWlsdGluIGlz IG5vdCBhdmFpbGFibGUuICAqLworZXh0ZXJuIGdjb3ZfdHlwZSBHQ09WX1RZ UEVfQVRPTUlDX0ZFVENIX0FERF9GTgorICAoZ2Nvdl90eXBlKiwgZ2Nvdl90 eXBlLCBpbnQpIF9fYXR0cmlidXRlX18gKCh3ZWFrKSk7CisjZW5kaWYgLyog VEFSR0VUX1NVUFBPUlRTX1dFQUsgKi8KIAorCiAjaWYgZGVmaW5lZCAoVEFS R0VUX1BPU0lYX0lPKQogI2RlZmluZSBHQ09WX0xPQ0tFRCAxCiAjZWxzZQpA QCAtMjEyLDYgKzIyNiwyMCBAQCB0eXBlZGVmIHVuc2lnbmVkIGdjb3ZfdHlw ZV91bnNpZ25lZCBfX2F0dHJpYnV0ZV9fCiAjZWxzZSAvKiAhSU5fTElCR0NP ViAqLwogLyogQWJvdXQgdGhlIGhvc3QgKi8KIAorI2lmIExPTkdfTE9OR19U WVBFX1NJWkUgPiAzMgorI2RlZmluZSBHQ09WX1RZUEVfQVRPTUlDX0ZFVENI X0FERF9GTiBfX2F0b21pY19mZXRjaF9hZGRfOAorI2RlZmluZSBHQ09WX1RZ UEVfQVRPTUlDX0ZFVENIX0FERCBCVUlMVF9JTl9BVE9NSUNfRkVUQ0hfQURE XzgKKyNlbHNlCisjZGVmaW5lIEdDT1ZfVFlQRV9BVE9NSUNfRkVUQ0hfQURE X0ZOIF9fYXRvbWljX2ZldGNoX2FkZF80CisjZGVmaW5lIEdDT1ZfVFlQRV9B VE9NSUNfRkVUQ0hfQUREIEJVSUxUX0lOX0FUT01JQ19GRVRDSF9BRERfNAor I2VuZGlmCisjaWYgVEFSR0VUX1NVUFBPUlRTX1dFQUsKKyNkZWZpbmUgUFJP RklMRV9HRU5fRURHRV9BVE9NSUMgKGZsYWdfcHJvZmlsZV9nZW5fYXRvbWlj ID09IDEgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ZmxhZ19wcm9maWxlX2dlbl9hdG9taWMgPT0gMykKKyNkZWZpbmUgUFJPRklM RV9HRU5fVkFMVUVfQVRPTUlDIChmbGFnX3Byb2ZpbGVfZ2VuX2F0b21pYyA9 PSAyIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm bGFnX3Byb2ZpbGVfZ2VuX2F0b21pYyA9PSAzKQorI2VuZGlmIC8qIFRBUkdF VF9TVVBQT1JUU19XRUFLICovCisKIHR5cGVkZWYgdW5zaWduZWQgZ2Nvdl91 bnNpZ25lZF90OwogdHlwZWRlZiB1bnNpZ25lZCBnY292X3Bvc2l0aW9uX3Q7 CiAvKiBnY292X3R5cGUgaXMgdHlwZWRlZidkIGVsc2V3aGVyZSBmb3IgdGhl IGNvbXBpbGVyICovCkluZGV4OiBnY2MvZ2NjLmMKPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQotLS0gZ2NjL2djYy5jCShyZXZpc2lvbiAxOTQ2NTIpCisrKyBn Y2MvZ2NjLmMJKHdvcmtpbmcgY29weSkKQEAgLTcxMSw3ICs3MTEsOCBAQCBw cm9wZXIgcG9zaXRpb24gYW1vbmcgdGhlIG90aGVyIG91dHB1dCBmaWxlcy4g ICovCiAgICAgJXtmb3Blbm1wfGZ0cmVlLXBhcmFsbGVsaXplLWxvb3BzPSo6 JTppbmNsdWRlKGxpYmdvbXAuc3BlYyklKGxpbmtfZ29tcCl9XAogICAgICV7 ZmdudS10bTolOmluY2x1ZGUobGliaXRtLnNwZWMpJShsaW5rX2l0bSl9XAog ICAgICUobWZsaWIpICIgU1RBQ0tfU1BMSVRfU1BFQyAiXAotICAgICV7ZnBy b2ZpbGUtYXJjc3xmcHJvZmlsZS1nZW5lcmF0ZSp8Y292ZXJhZ2U6LWxnY292 fVwKKyAgICAle2Zwcm9maWxlLWFyY3N8ZnByb2ZpbGUtZ2VuZXJhdGUqfGNv dmVyYWdlOi1sZ2NvdlwKKyAgICAgICV7ZnByb2ZpbGUtZ2VuLWF0b21pYz0q Oi1sYXRvbWljfX1cCiAgICAgJXtmc2FuaXRpemU9YWRkcmVzczoiIExJQkFT QU5fU1BFQyAiJXtzdGF0aWM6JWVjYW5ub3Qgc3BlY2lmeSAtc3RhdGljIHdp dGggLWZzYW5pdGl6ZT1hZGRyZXNzfX1cCiAgICAgJXtmc2FuaXRpemU9dGhy ZWFkOiIgTElCVFNBTl9TUEVDICJ9XAogICAgICV7IW5vc3RkbGliOiV7IW5v ZGVmYXVsdGxpYnM6JShsaW5rX3NzcCkgJShsaW5rX2djY19jX3NlcXVlbmNl KX19XApJbmRleDogZ2NjL3RyZWUtcHJvZmlsZS5jCj09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KLS0tIGdjYy90cmVlLXByb2ZpbGUuYwkocmV2aXNpb24gMTk0 NjUyKQorKysgZ2NjL3RyZWUtcHJvZmlsZS5jCSh3b3JraW5nIGNvcHkpCkBA IC0xNDcsNyArMTQ3LDEyIEBAIGdpbXBsZV9pbml0X2VkZ2VfcHJvZmlsZXIg KHZvaWQpCiAJICAgICAgPSBidWlsZF9mdW5jdGlvbl90eXBlX2xpc3QgKHZv aWRfdHlwZV9ub2RlLAogCQkJCQkgIGdjb3ZfdHlwZV9wdHIsIGdjb3ZfdHlw ZV9ub2RlLAogCQkJCQkgIE5VTExfVFJFRSk7Ci0gICAgICB0cmVlX29uZV92 YWx1ZV9wcm9maWxlcl9mbgorICAgICAgaWYgKFBST0ZJTEVfR0VOX1ZBTFVF X0FUT01JQykKKyAgICAgICAgdHJlZV9vbmVfdmFsdWVfcHJvZmlsZXJfZm4K KwkgICAgICA9IGJ1aWxkX2ZuX2RlY2wgKCJfX2djb3Zfb25lX3ZhbHVlX3By b2ZpbGVyX2F0b21pYyIsCisJCQkJICAgICBvbmVfdmFsdWVfcHJvZmlsZXJf Zm5fdHlwZSk7CisgICAgICBlbHNlCisgICAgICAgIHRyZWVfb25lX3ZhbHVl X3Byb2ZpbGVyX2ZuCiAJICAgICAgPSBidWlsZF9mbl9kZWNsICgiX19nY292 X29uZV92YWx1ZV9wcm9maWxlciIsCiAJCQkJICAgICBvbmVfdmFsdWVfcHJv ZmlsZXJfZm5fdHlwZSk7CiAgICAgICBUUkVFX05PVEhST1cgKHRyZWVfb25l X3ZhbHVlX3Byb2ZpbGVyX2ZuKSA9IDE7CkBAIC0xNjMsOSArMTY4LDE0IEBA IGdpbXBsZV9pbml0X2VkZ2VfcHJvZmlsZXIgKHZvaWQpCiAJCQkJCSAgZ2Nv dl90eXBlX3B0ciwgZ2Nvdl90eXBlX25vZGUsCiAJCQkJCSAgcHRyX3ZvaWQs CiAJCQkJCSAgcHRyX3ZvaWQsIE5VTExfVFJFRSk7Ci0gICAgICB0cmVlX2lu ZGlyZWN0X2NhbGxfcHJvZmlsZXJfZm4KLQkgICAgICA9IGJ1aWxkX2ZuX2Rl Y2wgKCJfX2djb3ZfaW5kaXJlY3RfY2FsbF9wcm9maWxlciIsCi0JCQkJICAg ICBpY19wcm9maWxlcl9mbl90eXBlKTsKKyAgICAgIGlmIChQUk9GSUxFX0dF Tl9WQUxVRV9BVE9NSUMpCisgICAgICAgIHRyZWVfaW5kaXJlY3RfY2FsbF9w cm9maWxlcl9mbgorICAgICAgICAgID0gYnVpbGRfZm5fZGVjbCAoIl9fZ2Nv dl9pbmRpcmVjdF9jYWxsX3Byb2ZpbGVyX2F0b21pYyIsCisJCQkgICBpY19w cm9maWxlcl9mbl90eXBlKTsKKyAgICAgIGVsc2UKKyAgICAgICAgdHJlZV9p bmRpcmVjdF9jYWxsX3Byb2ZpbGVyX2ZuCisgICAgICAgICAgPSBidWlsZF9m bl9kZWNsICgiX19nY292X2luZGlyZWN0X2NhbGxfcHJvZmlsZXIiLAorCQkJ ICAgaWNfcHJvZmlsZXJfZm5fdHlwZSk7CiAgICAgICBUUkVFX05PVEhST1cg KHRyZWVfaW5kaXJlY3RfY2FsbF9wcm9maWxlcl9mbikgPSAxOwogICAgICAg REVDTF9BVFRSSUJVVEVTICh0cmVlX2luZGlyZWN0X2NhbGxfcHJvZmlsZXJf Zm4pCiAJPSB0cmVlX2NvbnMgKGdldF9pZGVudGlmaWVyICgibGVhZiIpLCBO VUxMLApAQCAtMjExLDggKzIyMSwyMSBAQCBnaW1wbGVfZ2VuX2VkZ2VfcHJv ZmlsZXIgKGludCBlZGdlbm8sIGVkZ2UgZSkKICAgdHJlZSByZWYsIG9uZSwg Z2Nvdl90eXBlX3RtcF92YXI7CiAgIGdpbXBsZSBzdG10MSwgc3RtdDIsIHN0 bXQzOwogCisgIG9uZSA9IGJ1aWxkX2ludF9jc3QgKGdjb3ZfdHlwZV9ub2Rl LCAxKTsKKyAgaWYgKFBST0ZJTEVfR0VOX0VER0VfQVRPTUlDKQorICAgIHsK KyAgICAgIHJlZiA9IHRyZWVfY292ZXJhZ2VfY291bnRlcl9hZGRyIChHQ09W X0NPVU5URVJfQVJDUywgZWRnZW5vKTsKKyAgICAgIC8qIF9fYXRvbWljX2Zl dGNoX2FkZCAoJmNvdW50ZXIsIDEsIE1FTU1PREVMX1JFTEFYRUQpOyAqLwor ICAgICAgc3RtdDEgPSBnaW1wbGVfYnVpbGRfY2FsbCAoYnVpbHRpbl9kZWNs X2V4cGxpY2l0ICgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgR0NPVl9UWVBFX0FUT01JQ19GRVRDSF9BREQpLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgMywgcmVmLCBvbmUsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBidWlsZF9pbnRfY3N0IChpbnRlZ2Vy X3R5cGVfbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgTUVNTU9ERUxfUkVMQVhFRCkpOworICAgICBnc2lfaW5zZXJ0X29uX2Vk Z2UgKGUsIHN0bXQxKTsKKyAgICAgcmV0dXJuOworICAgIH0KKwogICByZWYg PSB0cmVlX2NvdmVyYWdlX2NvdW50ZXJfcmVmIChHQ09WX0NPVU5URVJfQVJD UywgZWRnZW5vKTsKLSAgb25lID0gYnVpbGRfaW50X2NzdCAoZ2Nvdl90eXBl X25vZGUsIDEpOwogICBnY292X3R5cGVfdG1wX3ZhciA9IG1ha2VfdGVtcF9z c2FfbmFtZSAoZ2Nvdl90eXBlX25vZGUsCiAJCQkJCSAgTlVMTCwgIlBST0Zf ZWRnZV9jb3VudGVyIik7CiAgIHN0bXQxID0gZ2ltcGxlX2J1aWxkX2Fzc2ln biAoZ2Nvdl90eXBlX3RtcF92YXIsIHJlZik7CkluZGV4OiBnY2MvY29tbW9u Lm9wdAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBnY2MvY29tbW9uLm9w dAkocmV2aXNpb24gMTk0NjUyKQorKysgZ2NjL2NvbW1vbi5vcHQJKHdvcmtp bmcgY29weSkKQEAgLTE2MzUsNiArMTYzNSwxNSBAQCBmcHJvZmlsZS1jb3Jy ZWN0aW9uCiBDb21tb24gUmVwb3J0IFZhcihmbGFnX3Byb2ZpbGVfY29ycmVj dGlvbikKIEVuYWJsZSBjb3JyZWN0aW9uIG9mIGZsb3cgaW5jb25zaXN0ZW50 IHByb2ZpbGUgZGF0YSBpbnB1dAogCis7IGZwcm9maWxlLWdlbi1hdG9taWM9 MDogZGlzYWJsZSBhb3RpbWljYWxseSB1cGRhdGUuCis7IGZwcm9maWxlLWdl bi1hdG9taWM9MTogYW90aW1pY2FsbHkgdXBkYXRlIGVkZ2UgcHJvZmlsZSBj b3VudGVycy4KKzsgZnByb2ZpbGUtZ2VuLWF0b21pYz0yOiBhb3RpbWljYWxs eSB1cGRhdGUgdmFsdWUgcHJvZmlsZSBjb3VudGVycy4KKzsgZnByb2ZpbGUt Z2VuLWF0b21pYz0zOiBhb3RpbWljYWxseSB1cGRhdGUgZWRnZSBhbmQgdmFs dWUgcHJvZmlsZSBjb3VudGVycy4KKzsgb3RoZXIgdmFsdWVzIHdpbGwgYmUg aWdub3JlZCAoZmFsbCBiYWNrIHRvIHRoZSBkZWZhdWx0IG9mIDApLgorZnBy b2ZpbGUtZ2VuLWF0b21pYz0KK0NvbW1vbiBKb2luZWQgVUludGVnZXIgUmVw b3J0IFZhcihmbGFnX3Byb2ZpbGVfZ2VuX2F0b21pYykgSW5pdCgwKSBPcHRp bWl6YXRpb24KK2Zwcm9maWxlLWdlbi1hdG9taWM9WzAuLjNdIEF0b21pY2Fs bHkgaW5jcmVtZW50cyBmb3IgcHJvZmlsZSBjb3VudGVycy4KKwogZnByb2Zp bGUtZ2VuZXJhdGUKIENvbW1vbgogRW5hYmxlIGNvbW1vbiBvcHRpb25zIGZv ciBnZW5lcmF0aW5nIHByb2ZpbGUgaW5mbyBmb3IgcHJvZmlsZSBmZWVkYmFj ayBkaXJlY3RlZCBvcHRpbWl6YXRpb25zCkluZGV4OiBsaWJnY2MvbGliZ2Nv di5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGxpYmdjYy9saWJnY292 LmMJKHJldmlzaW9uIDE5NDY1MikKKysrIGxpYmdjYy9saWJnY292LmMJKHdv cmtpbmcgY29weSkKQEAgLTExMTMsMTIgKzExMTMsMzUgQEAgX19nY292X29u ZV92YWx1ZV9wcm9maWxlcl9ib2R5IChnY292X3R5cGUgKmNvdW50ZXIKICAg Y291bnRlcnNbMl0rKzsKIH0KIAorLyogQXRvbWljIHVwZGF0ZSB2ZXJzaW9u IG9mIF9fZ2Nvdl9vbmVfdmFsdWVfcHJvZmlsZV9ib2R5KCkuICAqLworc3Rh dGljIGlubGluZSB2b2lkIAorX19nY292X29uZV92YWx1ZV9wcm9maWxlcl9i b2R5X2F0b21pYyAoZ2Nvdl90eXBlICpjb3VudGVycywgZ2Nvdl90eXBlIHZh bHVlKQoreworICBpZiAodmFsdWUgPT0gY291bnRlcnNbMF0pCisgICAgR0NP Vl9UWVBFX0FUT01JQ19GRVRDSF9BRERfRk4gKCZjb3VudGVyc1sxXSwgMSwg TUVNTU9ERUxfUkVMQVhFRCk7CisgIGVsc2UgaWYgKGNvdW50ZXJzWzFdID09 IDApCisgICAgeyAgICAKKyAgICAgIGNvdW50ZXJzWzFdID0gMTsgCisgICAg ICBjb3VudGVyc1swXSA9IHZhbHVlOworICAgIH0gICAgCisgIGVsc2UgCisg ICAgR0NPVl9UWVBFX0FUT01JQ19GRVRDSF9BRERfRk4gKCZjb3VudGVyc1sx XSwgLTEsIE1FTU1PREVMX1JFTEFYRUQpOworICBHQ09WX1RZUEVfQVRPTUlD X0ZFVENIX0FERF9GTiAoJmNvdW50ZXJzWzJdLCAxLCBNRU1NT0RFTF9SRUxB WEVEKTsKK30KKwogI2lmZGVmIExfZ2Nvdl9vbmVfdmFsdWVfcHJvZmlsZXIK IHZvaWQKIF9fZ2Nvdl9vbmVfdmFsdWVfcHJvZmlsZXIgKGdjb3ZfdHlwZSAq Y291bnRlcnMsIGdjb3ZfdHlwZSB2YWx1ZSkKIHsKICAgX19nY292X29uZV92 YWx1ZV9wcm9maWxlcl9ib2R5IChjb3VudGVycywgdmFsdWUpOwogfQorCit2 b2lkCitfX2djb3Zfb25lX3ZhbHVlX3Byb2ZpbGVyX2F0b21pYyAoZ2Nvdl90 eXBlICpjb3VudGVycywgZ2Nvdl90eXBlIHZhbHVlKQoreworICBfX2djb3Zf b25lX3ZhbHVlX3Byb2ZpbGVyX2JvZHlfYXRvbWljIChjb3VudGVycywgdmFs dWUpOworfQorCiAjZW5kaWYKIAogI2lmZGVmIExfZ2Nvdl9pbmRpcmVjdF9j YWxsX3Byb2ZpbGVyCkBAIC0xMTUzLDYgKzExNzYsMTcgQEAgX19nY292X2lu ZGlyZWN0X2NhbGxfcHJvZmlsZXIgKGdjb3ZfdHlwZSogY291bnRlciwKIAkg ICYmICoodm9pZCAqKikgY3VyX2Z1bmMgPT0gKih2b2lkICoqKSBjYWxsZWVf ZnVuYykpCiAgICAgX19nY292X29uZV92YWx1ZV9wcm9maWxlcl9ib2R5IChj b3VudGVyLCB2YWx1ZSk7CiB9CisKKy8qIEF0b21pYyB1cGRhdGUgdmVyc2lv biBvZiBfX2djb3ZfaW5kaXJlY3RfY2FsbF9wcm9maWxlcigpLiAgKi8KK3Zv aWQKK19fZ2Nvdl9pbmRpcmVjdF9jYWxsX3Byb2ZpbGVyX2F0b21pYyAoZ2Nv dl90eXBlKiBjb3VudGVyLCBnY292X3R5cGUgdmFsdWUsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIGN1cl9mdW5jLCB2 b2lkKiBjYWxsZWVfZnVuYykKK3sKKyAgaWYgKGN1cl9mdW5jID09IGNhbGxl ZV9mdW5jCisgICAgICB8fCAoVlRBQkxFX1VTRVNfREVTQ1JJUFRPUlMgJiYg Y2FsbGVlX2Z1bmMKKyAgICAgICAgICAmJiAqKHZvaWQgKiopIGN1cl9mdW5j ID09ICoodm9pZCAqKikgY2FsbGVlX2Z1bmMpKQorICAgIF9fZ2Nvdl9vbmVf dmFsdWVfcHJvZmlsZXJfYm9keV9hdG9taWMgKGNvdW50ZXIsIHZhbHVlKTsK K30KICNlbmRpZgogCiAK --20cf300fb0cb6a323b04d26bc054--