From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 20963 invoked by alias); 17 Jul 2010 06:52:02 -0000 Received: (qmail 20950 invoked by uid 22791); 17 Jul 2010 06:52:01 -0000 X-SWARE-Spam-Status: No, hits=-0.9 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,FREEMAIL_ENVFROM_END_DIGIT,FREEMAIL_FROM,RCVD_IN_DNSWL_NONE,TW_EB X-Spam-Check-By: sourceware.org Received: from mail-bw0-f47.google.com (HELO mail-bw0-f47.google.com) (209.85.214.47) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Sat, 17 Jul 2010 06:51:56 +0000 Received: by bwz10 with SMTP id 10so2130067bwz.20 for ; Fri, 16 Jul 2010 23:51:53 -0700 (PDT) MIME-Version: 1.0 Received: by 10.204.162.203 with SMTP id w11mr1708946bkx.41.1279349513266; Fri, 16 Jul 2010 23:51:53 -0700 (PDT) Received: by 10.204.57.197 with HTTP; Fri, 16 Jul 2010 23:51:53 -0700 (PDT) In-Reply-To: <4C409173.8000303@redhat.com> References: <4C3C942D.3010101@redhat.com> <87630is1gi.fsf@basil.nowhere.org> <4C409173.8000303@redhat.com> Date: Sat, 17 Jul 2010 06:52:00 -0000 Message-ID: Subject: Re: [patch i386]: Add for win32 targets pre-prologue profiling feature From: Kai Tietz To: Richard Henderson Cc: Andi Kleen , GCC Patches Content-Type: multipart/mixed; boundary=000325559f2e482697048b8fc5d8 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: 2010-07/txt/msg01401.txt.bz2 --000325559f2e482697048b8fc5d8 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-length: 3046 Hello Richard, thanks for the review. 2010/7/16 Richard Henderson : > On 07/15/2010 11:08 AM, Kai Tietz wrote: >> =A0 =A0 =A0 (override_options): Add special handling for -mfentry. >> =A0 =A0 =A0 (ix86_function_regparm): Likewise. >> =A0 =A0 =A0 (ix86_function_sseregparm): Likewise. > > Why are you adding the special-casing to the two regparm functions? > You do realize that suddenly your mcount_top function may have zero > free registers with which to do its job. =A0I think that's a bad idea. Well, as the mcount before prologue call has to be transparent (saving and restoring all modified registers) I don't see here, that no registers are a problem. >> =A0 =A0 =A0 (ix86_save_reg): >> =A0 =A0 =A0 (ix86_expand_prologue): >> =A0 =A0 =A0 (x86_function_profiler): > > No changes? =A0;-) Well, missed the Likewise :} > x86_function_profiler is broken for -m32 -fentry -fpic. =A0It uses > %ebx which has not been set up. =A0I think perhaps this combination > cannot really be supported, and this should be diagnosed back in > override_options. Yeah, add it to my update patch. >> +@hook TARGET_PROFILE_BEFORE_PROLOGUE >> +It returns true if target wants profile code emitted before >> +prologue. >> + >> +The default version of this hook use the target macro >> +@code{PROFILE_BEFORE_PROLOGUE}. >> +@end deftypefn > > The text should go in target.def, in the ""; only the @hook line goes her= e. Ok, moved into target.def (btw I think it is one of the first hooks using this feature). So by discussion on IRC some changes to checks about fpic are superflous, as they can't be reached in fact. So I removed the additional checks here about flag_fentry. The option -fpic for x86 is indeed not possible for profiling and -mfentry. So I added a sorry and default back to profiling after prologue, which setups ebx correctly. ChangeLog * config/i386/cygming.h (MCOUNT_NAME): New. (MCOUNT_NAME_BEFORE_PROLOGUE): New. * config/i386/i386.c (ix86_profile_before_prologue): New. (override_options): Add special handling for -mfentry. (ix86_function_regparm): Likewise. (ix86_function_sseregparm): Likewise. (ix86_frame_pointer_required): Likewise. (ix86_expand_prologue): Check for ms_hook_prologue. (x86_function_profiler): Adjust mcount output. (TARGET_PROFILE_BEFORE_PROLOGUE): Define hook. * config/i386/i386.opt (mfentry): New. * doc/invoke.texi (mfentry): Add documentation. * doc/tm.texi: Regenerated.. * doc/tm.texi.in (TARGET_PROFILE_BEFORE_PROLOGUE): New. * final.c (final_start_function): Replace macro PROFILE_BEFORE_PROLOGUE by target hook. * function.c (thread_prologue_and_epilogue_insns): Likewise. * target.def (profile_before_prologue): New hook. * targhooks.c (default_profile_before_prologue): New. * targhooks.h (default_profile_before_prologue): New. Retested for x86_64-pc-mingw32, i686-pc-cygwin, and i686-pc-linux-gnu. Ok for apply? Regards, Kai --=20 |=A0 (\_/) This is Bunny. Copy and paste | (=3D'.'=3D) Bunny into your signature to help | (")_(") him gain world domination --000325559f2e482697048b8fc5d8 Content-Type: application/octet-stream; name="profileb.diff" Content-Disposition: attachment; filename="profileb.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gbq3nvgp0 Content-length: 17263 SW5kZXg6IGdjYy9nY2MvY29uZmlnL2kzODYvY3lnbWluZy5oCj09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KLS0tIGdjYy5vcmlnL2djYy9jb25maWcvaTM4Ni9j eWdtaW5nLmgJMjAxMC0wNy0xNSAxOToxNTo1MS42NTEzNDkxMDAgKzAyMDAK KysrIGdjYy9nY2MvY29uZmlnL2kzODYvY3lnbWluZy5oCTIwMTAtMDctMTUg MTk6NDk6MTguMTAwMTExNDAwICswMjAwCkBAIC0zOSw2ICszOSwxMyBAQAog I3VuZGVmIERFRkFVTFRfQUJJCiAjZGVmaW5lIERFRkFVTFRfQUJJIChUQVJH RVRfNjRCSVQgPyBNU19BQkkgOiBTWVNWX0FCSSkKIAorLyogQ2hvb3NlIHRo ZSBjb3JyZWN0IHByb2ZpbGVyIG1jb3VudCBuYW1lLiAgKi8KKyN1bmRlZiBN Q09VTlRfTkFNRQorI2RlZmluZSBNQ09VTlRfTkFNRSAiX21jb3VudCIKKwor I3VuZGVmIE1DT1VOVF9OQU1FX0JFRk9SRV9QUk9MT0dVRQorI2RlZmluZSBN Q09VTlRfTkFNRV9CRUZPUkVfUFJPTE9HVUUgIl9tY291bnRfdG9wIgorCiAj aWYgISBkZWZpbmVkIChVU0VfTUlOR1c2NF9MRUFESU5HX1VOREVSU0NPUkVT KQogI3VuZGVmIFVTRVJfTEFCRUxfUFJFRklYCiAjZGVmaW5lIFVTRVJfTEFC RUxfUFJFRklYIChUQVJHRVRfNjRCSVQgPyAiIiA6ICJfIikKSW5kZXg6IGdj Yy9nY2MvY29uZmlnL2kzODYvaTM4Ni5jCj09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KLS0tIGdjYy5vcmlnL2djYy9jb25maWcvaTM4Ni9pMzg2LmMJMjAxMC0w Ny0xNSAxOToxNTo1MS42NTMzNDkxMDAgKzAyMDAKKysrIGdjYy9nY2MvY29u ZmlnL2kzODYvaTM4Ni5jCTIwMTAtMDctMTcgMDc6NTQ6MjQuMjcwMjQxOTAw ICswMjAwCkBAIC0yNzY4LDYgKzI3NjgsMTUgQEAKICAgICB9CiB9CiAKKy8q IFJldHVybiB0cnVlLCBpZiBwcm9maWxpbmcgY29kZSBzaG91bGQgYmUgZW1p dHRlZCBiZWZvcmUKKyAgIHByb2xvZ3VlLiBPdGhlcndpc2UgaXQgcmV0dXJu cyBmYWxzZS4KKyAgIE5vdGU6IEZvciB4ODYgd2l0aCAiaG90Zml4IiBpdCBp cyBzb3JyaWVkLiAgKi8KK3N0YXRpYyBib29sCitpeDg2X3Byb2ZpbGVfYmVm b3JlX3Byb2xvZ3VlICh2b2lkKQoreworICByZXR1cm4gZmxhZ19mZW50cnkg IT0gMDsKK30KKwogLyogRnVuY3Rpb24gdGhhdCBpcyBjYWxsYWJsZSBmcm9t IHRoZSBkZWJ1Z2dlciB0byBwcmludCB0aGUgY3VycmVudAogICAgb3B0aW9u cy4gICovCiB2b2lkCkBAIC0zNjcxLDYgKzM2ODAsMzQgQEAKICAgICB0YXJn ZXRfZmxhZ3MgfD0gTUFTS19DTEQgJiB+dGFyZ2V0X2ZsYWdzX2V4cGxpY2l0 OwogI2VuZGlmCiAKKyAgeworICAgIGludCBkZWZhdWx0X3Byb2ZpbGVfdG9w X2ZsYWcgPSAwOworICAgIGludCBvbmx5X2RlZmF1bHQgPSAxOworICAgIGJv b2wgZm9yY2VfZGVmYXVsdF9wcm9maWxlX3RvcF9mbGFnID0gKCFUQVJHRVRf NjRCSVQgJiYgZmxhZ19waWMpOworCisjaWYgZGVmaW5lZChQUk9GSUxFX0JF Rk9SRV9QUk9MT0dVRSkKKyAgICBkZWZhdWx0X3Byb2ZpbGVfdG9wX2ZsYWcg PSAoZm9yY2VfZGVmYXVsdF9wcm9maWxlX3RvcF9mbGFnID8gMCA6IDEpOwor I2VuZGlmCisjaWYgZGVmaW5lZChNQ09VTlRfTkFNRSkgJiYgZGVmaW5lZChN Q09VTlRfTkFNRV9CRUZPUkVfUFJPTE9HVUUpCisgICAgb25seV9kZWZhdWx0 ID0gMDsKKyNlbmRpZgorCisgICAgaWYgKGZsYWdfZmVudHJ5ID09IC0xKQor ICAgICAgZmxhZ19mZW50cnkgPSBkZWZhdWx0X3Byb2ZpbGVfdG9wX2ZsYWc7 CisgICAgaWYgKGZsYWdfZmVudHJ5ICE9IDAgJiYgZm9yY2VfZGVmYXVsdF9w cm9maWxlX3RvcF9mbGFnKQorICAgICAgeworCXNvcnJ5ICgiLW1mZW50cnkg aXNuJ3Qgc3VwcG9ydCBmb3IgeDg2IGluIGNvbWJpbmF0aW9uIHdpdGggLWZw aWMiKTsKKwlmbGFnX2ZlbnRyeSA9IDA7CisgICAgICB9CisgICAgZWxzZSBp ZiAoZmxhZ19mZW50cnkgIT0gZGVmYXVsdF9wcm9maWxlX3RvcF9mbGFnICYm IG9ubHlfZGVmYXVsdCkKKyAgICAgIHsKKyAgICAgICAgaWYgKCFkZWZhdWx0 X3Byb2ZpbGVfdG9wX2ZsYWcpCisgICAgICAgICAgc29ycnkgKCItbWZlbnRy eSBpc24ndCBzdXBwb3J0ZWQgZm9yIHRoaXMgdGFyZ2V0Iik7CisgICAgICAg IGVsc2UKKyAgICAgICAgICBzb3JyeSAoIi1tbm8tZmVudHJ5IGlzbid0IHN1 cHBvcnRlZCBmb3IgdGhpcyB0YXJnZXQiKTsKKwlmbGFnX2ZlbnRyeSA9IGRl ZmF1bHRfcHJvZmlsZV90b3BfZmxhZzsKKyAgICAgIH0KKyAgfQogICAvKiBT YXZlIHRoZSBpbml0aWFsIG9wdGlvbnMgaW4gY2FzZSB0aGUgdXNlciBkb2Vz IGZ1bmN0aW9uIHNwZWNpZmljIG9wdGlvbnMgKi8KICAgaWYgKG1haW5fYXJn c19wKQogICAgIHRhcmdldF9vcHRpb25fZGVmYXVsdF9ub2RlID0gdGFyZ2V0 X29wdGlvbl9jdXJyZW50X25vZGUKQEAgLTQ4NDEsNyArNDg3OCw3IEBACiAg IGlmIChkZWNsCiAgICAgICAmJiBUUkVFX0NPREUgKGRlY2wpID09IEZVTkNU SU9OX0RFQ0wKICAgICAgICYmIG9wdGltaXplCi0gICAgICAmJiAhcHJvZmls ZV9mbGFnKQorICAgICAgJiYgIShwcm9maWxlX2ZsYWcgJiYgIWZsYWdfZmVu dHJ5KSkKICAgICB7CiAgICAgICAvKiBGSVhNRTogcmVtb3ZlIHRoaXMgQ09O U1RfQ0FTVCB3aGVuIGNncmFwaC5bY2hdIGlzIGNvbnN0aWZpZWQuICAqLwog ICAgICAgc3RydWN0IGNncmFwaF9sb2NhbF9pbmZvICppID0gY2dyYXBoX2xv Y2FsX2luZm8gKENPTlNUX0NBU1RfVFJFRSAoZGVjbCkpOwpAQCAtNDkxMyw3 ICs0OTUwLDggQEAKIAogICAvKiBGb3IgbG9jYWwgZnVuY3Rpb25zLCBwYXNz IHVwIHRvIFNTRV9SRUdQQVJNX01BWCBTRm1vZGUKICAgICAgKGFuZCBERm1v ZGUgZm9yIFNTRTIpIGFyZ3VtZW50cyBpbiBTU0UgcmVnaXN0ZXJzLiAgKi8K LSAgaWYgKGRlY2wgJiYgVEFSR0VUX1NTRV9NQVRIICYmIG9wdGltaXplICYm ICFwcm9maWxlX2ZsYWcpCisgIGlmIChkZWNsICYmIFRBUkdFVF9TU0VfTUFU SCAmJiBvcHRpbWl6ZQorICAgICAgJiYgIShwcm9maWxlX2ZsYWcgJiYgIWZs YWdfZmVudHJ5KSkKICAgICB7CiAgICAgICAvKiBGSVhNRTogcmVtb3ZlIHRo aXMgQ09OU1RfQ0FTVCB3aGVuIGNncmFwaC5bY2hdIGlzIGNvbnN0aWZpZWQu ICAqLwogICAgICAgc3RydWN0IGNncmFwaF9sb2NhbF9pbmZvICppID0gY2dy YXBoX2xvY2FsX2luZm8gKENPTlNUX0NBU1RfVFJFRShkZWNsKSk7CkBAIC03 ODc1LDcgKzc5MTMsNyBAQAogCSAgfHwgaXg4Nl9jdXJyZW50X2Z1bmN0aW9u X2NhbGxzX3Rsc19kZXNjcmlwdG9yKSkKICAgICByZXR1cm4gdHJ1ZTsKIAot ICBpZiAoY3J0bC0+cHJvZmlsZSkKKyAgaWYgKGNydGwtPnByb2ZpbGUgJiYg IWZsYWdfZmVudHJ5KQogICAgIHJldHVybiB0cnVlOwogCiAgIHJldHVybiBm YWxzZTsKQEAgLTgxNDMsNyArODE4MSw4IEBACiBzdGF0aWMgdW5zaWduZWQg aW50CiBpeDg2X3NlbGVjdF9hbHRfcGljX3JlZ251bSAodm9pZCkKIHsKLSAg aWYgKGN1cnJlbnRfZnVuY3Rpb25faXNfbGVhZiAmJiAhY3J0bC0+cHJvZmls ZQorICBpZiAoY3VycmVudF9mdW5jdGlvbl9pc19sZWFmCisgICAgICAmJiAh Y3J0bC0+cHJvZmlsZQogICAgICAgJiYgIWl4ODZfY3VycmVudF9mdW5jdGlv bl9jYWxsc190bHNfZGVzY3JpcHRvcikKICAgICB7CiAgICAgICBpbnQgaSwg ZHJhcDsKQEAgLTkxOTEsNiArOTIzMCwxMSBAQAogICAgIHsKICAgICAgIHJ0 eCBwdXNoLCBtb3Y7CiAKKyAgICAgIC8qIENoZWNrIGlmIHByb2ZpbGluZyBp cyBhY3RpdmUgYW5kIHdlIHNoYWxsIHVzZSBwcm9maWxpbmcgYmVmb3JlCisg ICAgICAgICBwcm9sb2d1ZSB2YXJpYW50LiBJZiBzbyBzb3JyeS4gICovCisg ICAgICBpZiAoY3J0bC0+cHJvZmlsZSAmJiBmbGFnX2ZlbnRyeSAhPSAwKQor ICAgICAgICBzb3JyeSAoIm1zX2hvb2tfcHJvbG9ndWUgYXR0cmlidXRlIGlz bid0IGNvbXBhdGlibGUgd2l0aCAtbWZlbnRyeSBmb3IgMzItYml0Iik7CisK ICAgICAgIC8qIE1ha2Ugc3VyZSB0aGUgZnVuY3Rpb24gc3RhcnRzIHdpdGgK IAkgOGIgZmYgICAgIG1vdmwucyAlZWRpLCVlZGkgKGVtaXRlZCBieSBpeDg2 X2FzbV9vdXRwdXRfZnVuY3Rpb25fbGFiZWwpCiAJIDU1ICAgICAgICBwdXNo ICAgJWVicApAQCAtOTQ4MCw3ICs5NTI0LDcgQEAKICAgICAgd2hlbiBtY291 bnQgbmVlZHMgaXQuICBCbG9ja2FnZSB0byBhdm9pZCBjYWxsIG1vdmVtZW50 IGFjcm9zcyBtY291bnQKICAgICAgY2FsbCBpcyBlbWl0dGVkIGluIGdlbmVy aWMgY29kZSBhZnRlciB0aGUgTk9URV9JTlNOX1BST0xPR1VFX0VORAogICAg ICBub3RlLiAgKi8KLSAgaWYgKGNydGwtPnByb2ZpbGUgJiYgcGljX3JlZ191 c2VkKQorICBpZiAoY3J0bC0+cHJvZmlsZSAmJiAhZmxhZ19mZW50cnkgJiYg cGljX3JlZ191c2VkKQogICAgIGVtaXRfaW5zbiAoZ2VuX3Byb2xvZ3VlX3Vz ZSAocGljX29mZnNldF90YWJsZV9ydHgpKTsKIAogICBpZiAoY3J0bC0+ZHJh cF9yZWcgJiYgIWNydGwtPnN0YWNrX3JlYWxpZ25fbmVlZGVkKQpAQCAtMjcy ODIsMTEgKzI3MzI2LDI2IEBACiAgIHJldHVybiBjb21wdXRlZDsKIH0KIAor I2lmICFkZWZpbmVkKE1DT1VOVF9OQU1FKSAmJiAhZGVmaW5lZChNQ09VTlRf TkFNRV9CRUZPUkVfUFJPTE9HVUUpCisjZXJyb3IgTUNPVU5UX05BTUUgLGFu ZC9vciBNQ09VTlRfTkFNRV9CRUZPUkVfUFJPTE9HVUUgaGF2ZSB0byBiZSBk ZWZpbmUKKyNlbmRpZgorCisvKiBNYWtlIHN1cmUgYm90aCBhcmUgZ2V0dGlu ZyBkZWZpbmVkLiAgKi8KKyNpZm5kZWYgTUNPVU5UX05BTUUKKyNkZWZpbmUg TUNPVU5UX05BTUUgTUNPVU5UX05BTUVfQkVGT1JFX1BST0xPR1VFCisjZW5k aWYKKyNpZm5kZWYgTUNPVU5UX05BTUVfQkVGT1JFX1BST0xPR1VFCisjZGVm aW5lIE1DT1VOVF9OQU1FX0JFRk9SRV9QUk9MT0dVRSBNQ09VTlRfTkFNRQor I2VuZGlmCisKIC8qIE91dHB1dCBhc3NlbWJsZXIgY29kZSB0byBGSUxFIHRv IGluY3JlbWVudCBwcm9maWxlciBsYWJlbCAjIExBQkVMTk8KICAgIGZvciBw cm9maWxpbmcgYSBmdW5jdGlvbiBlbnRyeS4gICovCiB2b2lkCiB4ODZfZnVu Y3Rpb25fcHJvZmlsZXIgKEZJTEUgKmZpbGUsIGludCBsYWJlbG5vIEFUVFJJ QlVURV9VTlVTRUQpCiB7CisgIGNvbnN0IGNoYXIgKm1jb3VudF9uYW1lID0g KGZsYWdfZmVudHJ5ID8gTUNPVU5UX05BTUVfQkVGT1JFX1BST0xPR1VFCisJ CQkJCSA6IE1DT1VOVF9OQU1FKTsKKwogICBpZiAoVEFSR0VUXzY0QklUKQog ICAgIHsKICNpZm5kZWYgTk9fUFJPRklMRV9DT1VOVEVSUwpAQCAtMjcyOTQs OSArMjczNTMsOSBAQAogI2VuZGlmCiAKICAgICAgIGlmIChERUZBVUxUX0FC SSA9PSBTWVNWX0FCSSAmJiBmbGFnX3BpYykKLQlmcHV0cyAoIlx0Y2FsbFx0 KiIgTUNPVU5UX05BTUUgIkBHT1RQQ1JFTCglcmlwKVxuIiwgZmlsZSk7CisJ ZnByaW50ZiAoZmlsZSwgIlx0Y2FsbFx0KiVzQEdPVFBDUkVMKCUlcmlwKVxu IiwgbWNvdW50X25hbWUpOwogICAgICAgZWxzZQotCWZwdXRzICgiXHRjYWxs XHQiIE1DT1VOVF9OQU1FICJcbiIsIGZpbGUpOworCWZwcmludGYgKGZpbGUs ICJcdGNhbGxcdCVzXG4iLCBtY291bnRfbmFtZSk7CiAgICAgfQogICBlbHNl IGlmIChmbGFnX3BpYykKICAgICB7CkBAIC0yNzMwNCw3ICsyNzM2Myw3IEBA CiAgICAgICBmcHJpbnRmIChmaWxlLCAiXHRsZWFsXHQlc1AlZEBHT1RPRkYo JSVlYngpLCUlIiBQUk9GSUxFX0NPVU5UX1JFR0lTVEVSICJcbiIsCiAJICAg ICAgIExQUkVGSVgsIGxhYmVsbm8pOwogI2VuZGlmCi0gICAgICBmcHV0cyAo Ilx0Y2FsbFx0KiIgTUNPVU5UX05BTUUgIkBHT1QoJWVieClcbiIsIGZpbGUp OworICAgICAgZnByaW50ZiAoZmlsZSwgIlx0Y2FsbFx0KiVzQEdPVCglJWVi eClcbiIsIG1jb3VudF9uYW1lKTsKICAgICB9CiAgIGVsc2UKICAgICB7CkBA IC0yNzMxMiw3ICsyNzM3MSw3IEBACiAgICAgICBmcHJpbnRmIChmaWxlLCAi XHRtb3ZsXHQkJXNQJWQsJSUiIFBST0ZJTEVfQ09VTlRfUkVHSVNURVIgIlxu IiwKIAkgICAgICAgTFBSRUZJWCwgbGFiZWxubyk7CiAjZW5kaWYKLSAgICAg IGZwdXRzICgiXHRjYWxsXHQiIE1DT1VOVF9OQU1FICJcbiIsIGZpbGUpOwor ICAgICAgZnByaW50ZiAoZmlsZSwgIlx0Y2FsbFx0JXNcbiIsIG1jb3VudF9u YW1lKTsKICAgICB9CiB9CiAKQEAgLTMxMzYwLDYgKzMxNDE5LDkgQEAKICNk ZWZpbmUgVEFSR0VUX0FTTV9BTElHTkVEX0RJX09QIEFTTV9RVUFECiAjZW5k aWYKIAorI3VuZGVmIFRBUkdFVF9QUk9GSUxFX0JFRk9SRV9QUk9MT0dVRQor I2RlZmluZSBUQVJHRVRfUFJPRklMRV9CRUZPUkVfUFJPTE9HVUUgaXg4Nl9w cm9maWxlX2JlZm9yZV9wcm9sb2d1ZQorCiAjdW5kZWYgVEFSR0VUX0FTTV9V TkFMSUdORURfSElfT1AKICNkZWZpbmUgVEFSR0VUX0FTTV9VTkFMSUdORURf SElfT1AgVEFSR0VUX0FTTV9BTElHTkVEX0hJX09QCiAjdW5kZWYgVEFSR0VU X0FTTV9VTkFMSUdORURfU0lfT1AKSW5kZXg6IGdjYy9nY2MvY29uZmlnL2kz ODYvaTM4Ni5vcHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZ2NjLm9y aWcvZ2NjL2NvbmZpZy9pMzg2L2kzODYub3B0CTIwMTAtMDctMTUgMTk6MTU6 NTEuNjY1MzQ5MTAwICswMjAwCisrKyBnY2MvZ2NjL2NvbmZpZy9pMzg2L2kz ODYub3B0CTIwMTAtMDctMTUgMTk6MTk6MTAuMzc2NzE1NTAwICswMjAwCkBA IC0zNzUsMyArMzc1LDcgQEAKIG1mMTZjCiBUYXJnZXQgUmVwb3J0IE1hc2so SVNBX0YxNkMpIFZhcihpeDg2X2lzYV9mbGFncykgVmFyRXhpc3RzIFNhdmUK IFN1cHBvcnQgRjE2QyBidWlsdC1pbiBmdW5jdGlvbnMgYW5kIGNvZGUgZ2Vu ZXJhdGlvbgorCittZmVudHJ5CitUYXJnZXQgUmVwb3J0IFZhcihmbGFnX2Zl bnRyeSkgSW5pdCgtMSkKK0VtaXQgcHJvZmlsaW5nIGNvdW50ZXIgY2FsbCBh dCBmdW5jdGlvbiBlbnRyeSBiZWZvcmUgcHJvbG9ndWUuCkluZGV4OiBnY2Mv Z2NjL2RvYy9pbnZva2UudGV4aQo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t LSBnY2Mub3JpZy9nY2MvZG9jL2ludm9rZS50ZXhpCTIwMTAtMDctMTUgMTk6 MTU6NTEuNjY2MzQ5MTAwICswMjAwCisrKyBnY2MvZ2NjL2RvYy9pbnZva2Uu dGV4aQkyMDEwLTA3LTE1IDE5OjE5OjEwLjM4NTcxNjAwMCArMDIwMApAQCAt NjAxLDcgKzYwMSw3IEBACiAtbW9taXQtbGVhZi1mcmFtZS1wb2ludGVyICAt bW5vLXJlZC16b25lIC1tbm8tdGxzLWRpcmVjdC1zZWctcmVmcyBAZ29sCiAt bWNtb2RlbD1AdmFye2NvZGUtbW9kZWx9IC1tYWJpPUB2YXJ7bmFtZX0gQGdv bAogLW0zMiAgLW02NCAtbWxhcmdlLWRhdGEtdGhyZXNob2xkPUB2YXJ7bnVt fSBAZ29sCi0tbXNzZTJhdnh9CistbXNzZTJhdnggLW1mZW50cnl9CiAKIEBl bXBoe0lBLTY0IE9wdGlvbnN9CiBAZ2Njb3B0bGlzdHstbWJpZy1lbmRpYW4g IC1tbGl0dGxlLWVuZGlhbiAgLW1nbnUtYXMgIC1tZ251LWxkICAtbW5vLXBp YyBAZ29sCkBAIC0xMjQ2Niw2ICsxMjQ2NiwxNCBAQAogQG9waW5kZXggbXNz ZTJhdngKIFNwZWNpZnkgdGhhdCB0aGUgYXNzZW1ibGVyIHNob3VsZCBlbmNv ZGUgU1NFIGluc3RydWN0aW9ucyB3aXRoIFZFWAogcHJlZml4LiAgVGhlIG9w dGlvbiBAb3B0aW9uey1tYXZ4fSB0dXJucyB0aGlzIG9uIGJ5IGRlZmF1bHQu CisKK0BpdGVtIC1tZmVudHJ5CitAaXRlbXggLW1uby1mZW50cnkKK0BvcGlu ZGV4IG1mZW50cnkKK0lmIHByb2ZpbGluZyBpcyBhY3RpdmUgQG9wdGlvbnst cGd9IHB1dCB0aGUgcHJvZmlsaW5nCitjb3VudGVyIGNhbGwgYmVmb3JlIHBy b2xvZ3VlLgorTm90ZTogT24geDg2IGFyY2hpdGVjdHVyZXMgdGhlIGF0dHJp YnV0ZSBAY29kZXttc19ob29rX3Byb2xvZ3VlfQoraXNuJ3QgcG9zc2libGUg YXQgdGhlIG1vbWVudCBmb3IgQG9wdGlvbnstbWZlbnRyeX0gYW5kIEBvcHRp b257LXBnfS4KIEBlbmQgdGFibGUKIAogVGhlc2UgQHNhbXB7LW19IHN3aXRj aGVzIGFyZSBzdXBwb3J0ZWQgaW4gYWRkaXRpb24gdG8gdGhlIGFib3ZlCklu ZGV4OiBnY2MvZ2NjL2RvYy90bS50ZXhpCj09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KLS0tIGdjYy5vcmlnL2djYy9kb2MvdG0udGV4aQkyMDEwLTA3LTE1IDE5 OjE1OjUxLjY2ODM0OTEwMCArMDIwMAorKysgZ2NjL2djYy9kb2MvdG0udGV4 aQkyMDEwLTA3LTE3IDA4OjQxOjM0LjIzMTEwNjQwMCArMDIwMApAQCAtNzEw MSw2ICs3MTAxLDEzIEBACiBgYHNtYWxsIGRhdGEnJyBpbnRvIGEgc2VwYXJh dGUgc2VjdGlvbi4gIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGZhbHNlLgogQGVu ZCBkZWZ0eXBldnIKIAorQGRlZnR5cGVmbiB7VGFyZ2V0IEhvb2t9IGJvb2wg VEFSR0VUX1BST0ZJTEVfQkVGT1JFX1BST0xPR1VFICh2b2lkKQorSXQgcmV0 dXJucyB0cnVlIGlmIHRhcmdldCB3YW50cyBwcm9maWxlIGNvZGUgZW1pdHRl ZCBiZWZvcmUgcHJvbG9ndWUuCisKK1RoZSBkZWZhdWx0IHZlcnNpb24gb2Yg dGhpcyBob29rIHVzZSB0aGUgdGFyZ2V0IG1hY3JvCitAY29kZXtQUk9GSUxF X0JFRk9SRV9QUk9MT0dVRX0uCitAZW5kIGRlZnR5cGVmbgorCiBAZGVmdHlw ZWZuIHtUYXJnZXQgSG9va30gYm9vbCBUQVJHRVRfQklORFNfTE9DQUxfUCAo Y29uc3RfdHJlZSBAdmFye2V4cH0pCiBSZXR1cm5zIHRydWUgaWYgQHZhcntl eHB9IG5hbWVzIGFuIG9iamVjdCBmb3Igd2hpY2ggbmFtZSByZXNvbHV0aW9u CiBydWxlcyBtdXN0IHJlc29sdmUgdG8gdGhlIGN1cnJlbnQgYGBtb2R1bGUn JyAoZHluYW1pYyBzaGFyZWQgbGlicmFyeQpJbmRleDogZ2NjL2djYy9kb2Mv dG0udGV4aS5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBnY2Mub3Jp Zy9nY2MvZG9jL3RtLnRleGkuaW4JMjAxMC0wNy0xNSAxOToxNTo1MS42NzMz NDkxMDAgKzAyMDAKKysrIGdjYy9nY2MvZG9jL3RtLnRleGkuaW4JMjAxMC0w Ny0xNyAwODowNDozOS41MjM0MzI0MDAgKzAyMDAKQEAgLTcxMDEsNiArNzEw MSw4IEBACiBgYHNtYWxsIGRhdGEnJyBpbnRvIGEgc2VwYXJhdGUgc2VjdGlv bi4gIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGZhbHNlLgogQGVuZCBkZWZ0eXBl dnIKIAorQGhvb2sgVEFSR0VUX1BST0ZJTEVfQkVGT1JFX1BST0xPR1VFCisK IEBob29rIFRBUkdFVF9CSU5EU19MT0NBTF9QCiBSZXR1cm5zIHRydWUgaWYg QHZhcntleHB9IG5hbWVzIGFuIG9iamVjdCBmb3Igd2hpY2ggbmFtZSByZXNv bHV0aW9uCiBydWxlcyBtdXN0IHJlc29sdmUgdG8gdGhlIGN1cnJlbnQgYGBt b2R1bGUnJyAoZHluYW1pYyBzaGFyZWQgbGlicmFyeQpJbmRleDogZ2NjL2dj Yy9maW5hbC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGdjYy5vcmln L2djYy9maW5hbC5jCTIwMTAtMDctMTUgMTk6MTU6NTEuNjc0MzQ5MTAwICsw MjAwCisrKyBnY2MvZ2NjL2ZpbmFsLmMJMjAxMC0wNy0xNSAxOToxOToxMC40 MDM3MTcwMDAgKzAyMDAKQEAgLTE1NDYsMTAgKzE1NDYsOCBAQAogCiAgIC8q IFRoZSBTdW4zODZpIGFuZCBwZXJoYXBzIG90aGVyIG1hY2hpbmVzIGRvbid0 IHdvcmsgcmlnaHQKICAgICAgaWYgdGhlIHByb2ZpbGluZyBjb2RlIGNvbWVz IGFmdGVyIHRoZSBwcm9sb2d1ZS4gICovCi0jaWZkZWYgUFJPRklMRV9CRUZP UkVfUFJPTE9HVUUKLSAgaWYgKGNydGwtPnByb2ZpbGUpCisgIGlmICh0YXJn ZXRtLnByb2ZpbGVfYmVmb3JlX3Byb2xvZ3VlICgpICYmIGNydGwtPnByb2Zp bGUpCiAgICAgcHJvZmlsZV9mdW5jdGlvbiAoZmlsZSk7Ci0jZW5kaWYgLyog UFJPRklMRV9CRUZPUkVfUFJPTE9HVUUgKi8KIAogI2lmIGRlZmluZWQgKERX QVJGMl9VTldJTkRfSU5GTykgJiYgZGVmaW5lZCAoSEFWRV9wcm9sb2d1ZSkK ICAgaWYgKGR3YXJmMm91dF9kb19mcmFtZSAoKSkKQEAgLTE1OTEsMTAgKzE1 ODksOCBAQAogc3RhdGljIHZvaWQKIHByb2ZpbGVfYWZ0ZXJfcHJvbG9ndWUg KEZJTEUgKmZpbGUgQVRUUklCVVRFX1VOVVNFRCkKIHsKLSNpZm5kZWYgUFJP RklMRV9CRUZPUkVfUFJPTE9HVUUKLSAgaWYgKGNydGwtPnByb2ZpbGUpCisg IGlmICghdGFyZ2V0bS5wcm9maWxlX2JlZm9yZV9wcm9sb2d1ZSAoKSAmJiBj cnRsLT5wcm9maWxlKQogICAgIHByb2ZpbGVfZnVuY3Rpb24gKGZpbGUpOwot I2VuZGlmIC8qIG5vdCBQUk9GSUxFX0JFRk9SRV9QUk9MT0dVRSAqLwogfQog CiBzdGF0aWMgdm9pZApJbmRleDogZ2NjL2djYy9mdW5jdGlvbi5jCj09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KLS0tIGdjYy5vcmlnL2djYy9mdW5jdGlvbi5j CTIwMTAtMDctMTUgMTk6MTU6NTEuNjc1MzQ5MTAwICswMjAwCisrKyBnY2Mv Z2NjL2Z1bmN0aW9uLmMJMjAxMC0wNy0xNSAxOToxOToxMC40MDg3MTczMDAg KzAyMDAKQEAgLTUxMDAsMTMgKzUxMDAsMTEgQEAKICAgICAgIHJlY29yZF9p bnNucyAoc2VxLCBOVUxMLCAmcHJvbG9ndWVfaW5zbl9oYXNoKTsKICAgICAg IGVtaXRfbm90ZSAoTk9URV9JTlNOX1BST0xPR1VFX0VORCk7CiAKLSNpZm5k ZWYgUFJPRklMRV9CRUZPUkVfUFJPTE9HVUUKICAgICAgIC8qIEVuc3VyZSB0 aGF0IGluc3RydWN0aW9ucyBhcmUgbm90IG1vdmVkIGludG8gdGhlIHByb2xv Z3VlIHdoZW4KIAkgcHJvZmlsaW5nIGlzIG9uLiAgVGhlIGNhbGwgdG8gdGhl IHByb2ZpbGluZyByb3V0aW5lIGNhbiBiZQogCSBlbWl0dGVkIHdpdGhpbiB0 aGUgbGl2ZSByYW5nZSBvZiBhIGNhbGwtY2xvYmJlcmVkIHJlZ2lzdGVyLiAg Ki8KLSAgICAgIGlmIChjcnRsLT5wcm9maWxlKQorICAgICAgaWYgKCF0YXJn ZXRtLnByb2ZpbGVfYmVmb3JlX3Byb2xvZ3VlICgpICYmIGNydGwtPnByb2Zp bGUpCiAgICAgICAgIGVtaXRfaW5zbiAoZ2VuX2Jsb2NrYWdlICgpKTsKLSNl bmRpZgogCiAgICAgICBzZXEgPSBnZXRfaW5zbnMgKCk7CiAgICAgICBlbmRf c2VxdWVuY2UgKCk7CkluZGV4OiBnY2MvZ2NjL3RhcmdldC5kZWYKPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQotLS0gZ2NjLm9yaWcvZ2NjL3RhcmdldC5kZWYJ MjAxMC0wNy0xNSAxOToxNTo1MS42NzYzNDkxMDAgKzAyMDAKKysrIGdjYy9n Y2MvdGFyZ2V0LmRlZgkyMDEwLTA3LTE3IDA4OjM4OjM4LjQyMzA1MDgwMCAr MDIwMApAQCAtMTIxOCw2ICsxMjE4LDE1IEBACiAgYm9vbCwgKGNvbnN0X3Ry ZWUgZXhwKSwKICBkZWZhdWx0X2JpbmRzX2xvY2FsX3ApCiAKKy8qIENoZWNr IGlmIHByb2ZpbGluZyBjb2RlIGlzIGJlZm9yZSBvciBhZnRlciBwcm9sb2d1 ZS4gICovCitERUZIT09LCisocHJvZmlsZV9iZWZvcmVfcHJvbG9ndWUsCisg Ikl0IHJldHVybnMgdHJ1ZSBpZiB0YXJnZXQgd2FudHMgcHJvZmlsZSBjb2Rl IGVtaXR0ZWQgYmVmb3JlIHByb2xvZ3VlLlxuXG5cCitUaGUgZGVmYXVsdCB2 ZXJzaW9uIG9mIHRoaXMgaG9vayB1c2UgdGhlIHRhcmdldCBtYWNyb1xuXAor QGNvZGV7UFJPRklMRV9CRUZPUkVfUFJPTE9HVUV9LiIsCisgYm9vbCwgKHZv aWQpLAorIGRlZmF1bHRfcHJvZmlsZV9iZWZvcmVfcHJvbG9ndWUpCisKIC8q IE1vZGlmeSBhbmQgcmV0dXJuIHRoZSBpZGVudGlmaWVyIG9mIGEgREVDTCdz IGV4dGVybmFsIG5hbWUsCiAgICBvcmlnaW5hbGx5IGlkZW50aWZpZWQgYnkg SUQsIGFzIHJlcXVpcmVkIGJ5IHRoZSB0YXJnZXQsCiAgICAoZWcsIGFwcGVu ZCBAbm4gdG8gd2luZG93czMyIHN0ZGNhbGwgZnVuY3Rpb24gbmFtZXMpLgpJ bmRleDogZ2NjL2djYy90YXJnaG9va3MuYwo9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09Ci0tLSBnY2Mub3JpZy9nY2MvdGFyZ2hvb2tzLmMJMjAxMC0wNy0xNSAx OToxNTo1MS42NzgzNDkxMDAgKzAyMDAKKysrIGdjYy9nY2MvdGFyZ2hvb2tz LmMJMjAxMC0wNy0xNSAxOToxOToxMC40MTM3MTc2MDAgKzAyMDAKQEAgLTEx OTcsNCArMTE5NywxNCBAQAogI2VuZGlmCiB9CiAKK2Jvb2wKK2RlZmF1bHRf cHJvZmlsZV9iZWZvcmVfcHJvbG9ndWUgKHZvaWQpCit7CisjaWZuZGVmIFBS T0ZJTEVfQkVGT1JFX1BST0xPR1VFCisgIHJldHVybiBmYWxzZTsKKyNlbHNl CisgIHJldHVybiB0cnVlOworI2VuZGlmCit9CisKICNpbmNsdWRlICJndC10 YXJnaG9va3MuaCIKSW5kZXg6IGdjYy9nY2MvdGFyZ2hvb2tzLmgKPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQotLS0gZ2NjLm9yaWcvZ2NjL3Rhcmdob29rcy5o CTIwMTAtMDctMTUgMTk6MTU6NTEuNjg3MzQ5MTAwICswMjAwCisrKyBnY2Mv Z2NjL3Rhcmdob29rcy5oCTIwMTAtMDctMTUgMTk6MTk6MTAuNDE2NzE3ODAw ICswMjAwCkBAIC0xNTAsMyArMTUwLDQgQEAKIGV4dGVybiBpbnQgZGVmYXVs dF9yZWdpc3Rlcl9tb3ZlX2Nvc3QgKGVudW0gbWFjaGluZV9tb2RlLCByZWdf Y2xhc3NfdCwKIAkJCQkgICAgICAgcmVnX2NsYXNzX3QpOwogCitleHRlcm4g Ym9vbCBkZWZhdWx0X3Byb2ZpbGVfYmVmb3JlX3Byb2xvZ3VlICh2b2lkKTsK --000325559f2e482697048b8fc5d8--