From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 9036 invoked by alias); 14 Jul 2010 10:20:13 -0000 Received: (qmail 9026 invoked by uid 22791); 14 Jul 2010 10:20:12 -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_XC 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; Wed, 14 Jul 2010 10:20:04 +0000 Received: by bwz10 with SMTP id 10so4817916bwz.20 for ; Wed, 14 Jul 2010 03:20:01 -0700 (PDT) MIME-Version: 1.0 Received: by 10.204.130.84 with SMTP id r20mr1951248bks.90.1279102801669; Wed, 14 Jul 2010 03:20:01 -0700 (PDT) Received: by 10.204.57.197 with HTTP; Wed, 14 Jul 2010 03:20:01 -0700 (PDT) In-Reply-To: <4C3C942D.3010101@redhat.com> References: <4C3C942D.3010101@redhat.com> Date: Wed, 14 Jul 2010 10:20:00 -0000 Message-ID: Subject: Re: [patch i386]: Add for win32 targets pre-prologue profiling feature From: Kai Tietz To: Richard Henderson Cc: GCC Patches Content-Type: multipart/mixed; boundary=001517447eea1ff136048b5654a6 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/msg01136.txt.bz2 --001517447eea1ff136048b5654a6 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-length: 3492 Hello, 2010/7/13 Richard Henderson : > On 07/13/2010 05:47 AM, Kai Tietz wrote: >> Hello, >> >> This patch adds for i386/x86_64 win32 targets the feature of >> pre-prologue profiling call. It additional takes care that for enabled >> top-profiler call, the frame-pointer gets omitted, if possible. >> One side-note here about "hotfix" and profiling. The top-profiler call >> gets emitted in the ix86_asm_output_function_label. This is caused by >> the fact, that for ix86 the call needs to be placed before the >> code-pattern, and for x86_64 it can be placed after. Otherwise the x86 >> pattern for patchable region would be corrupted, as this pattern >> contains frame-register setup. So I think that the use of the macro >> PROFILE_BEFORE_PROLOGUE isn't usable here. > > Huh? =A0This is exactly the opposite of what we discussed yesterday on IR= C. > > For hotfix we have > > =A0 =A0 =A0 =A0.rept 16 > =A0 =A0 =A0 =A0.byte 0xcc > =A0 =A0 =A0 =A0.endr > function: > =A0 =A0 =A0 =A0mov.s =A0 edi, edi > =A0 =A0 =A0 =A0push =A0 =A0ebp > =A0 =A0 =A0 =A0mov.s =A0 esp, ebp > > If *any* of the above is not exactly so, then the runtime pattern match > fails and the hotfix fails. =A0If we were to write the profiler first, > then we might as well not bother with the hotfix pieces, because they > will never match. > > ... of course it doesn't help that we emit the last two insns above > within the prologue, so if we simply place the profile before the > prologue, we'll *still* be splitting the hotfix sequence for 32-bit. > > I think the best thing to do is to diagnose hotfix+profile and generate > an error. =A0I don't think there's anything reasonable we can do. > > In the end I don't think there's anything your AT_TOP macro does that > PROFILE_BEFORE_PROLOGUE doesn't do just as well. > > > r~ > This patch implements it by new hook TARGET_PROFILE_BEFORE_PROLOGUE. This feature is for now just active for win32 i386 targets and is controlled by internal target macro PROFILE_SUPPORT_BEFORE_PROLOGUE. 2010-07-14 Kai Tietz * config/i386/cygming.h (PROFILE_SUPPORT_BEFORE_PROLOGUE): New. (MCOUNT_NAME): Win32 specific version. * config/i386/cygming.opt (mprofile-top): New option. * config/i386/i386.c (ix86_profile_before_prologue): New hook. (ix86_function_regparm): Handle profiling before prologue case. (ix86_function_sseregparm): Likewise. (ix86_cfun_abi): Likewise. (ix86_frame_pointer_required): Likewise. (ix86_select_alt_pic_regnum): Likewise. (ix86_save_reg): Likewise. (ix86_expand_prologue): Likewise. Additionally sorry for 32-bit "hotfix" and profile code before prologue. (x86_function_profiler): Use fprintf instead of fputs for assembly output. (TARGET_PROFILE_BEFORE_PROLOGUE): Define target hook. * doc/invoke.texi (mprofile-top): Document option. * doc/tm.texi.in (TARGET_PROFILE_BEFOR_PROLOGUE): Add documentation. * doc/tm.texi: Regenerated. * final.c (final_start_function): Replace PROFILE_BEFORE_PROLOGUE guard by target hook. (profile_after_prologue): Likewise. * function.c (thread_prologue_and_epilogue_insns): Likewise. * target.def (profile_before_prologue): New hook. * targhook.c (default_profile_before_prologue): New. * targhook.h (default_profile_before_prologue): New. Tested for i686-pc-linux-gnu, i686-pc-mingw32, and x86_64-pc-mingw32. Ok for apply? Regads, Kai --=20 |=A0 (\_/) This is Bunny. Copy and paste | (=3D'.'=3D) Bunny into your signature to help | (")_(") him gain world domination --001517447eea1ff136048b5654a6 Content-Type: application/octet-stream; name="profile.top.diff" Content-Disposition: attachment; filename="profile.top.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gbm0rwr40 Content-length: 18813 SW5kZXg6IGdjYy9nY2MvY29uZmlnL2kzODYvY3lnbWluZy5oCj09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KLS0tIGdjYy5vcmlnL2djYy9jb25maWcvaTM4Ni9j eWdtaW5nLmgJMjAxMC0wNy0xMyAxNzowMDo1MS4wMDAwMDAwMDAgKzAyMDAK KysrIGdjYy9nY2MvY29uZmlnL2kzODYvY3lnbWluZy5oCTIwMTAtMDctMTQg MTA6MTU6MjUuNDY3ODY3ODAwICswMjAwCkBAIC0zOSw2ICszOSwxNCBAQCBh bG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgCiAjdW5k ZWYgREVGQVVMVF9BQkkKICNkZWZpbmUgREVGQVVMVF9BQkkgKFRBUkdFVF82 NEJJVCA/IE1TX0FCSSA6IFNZU1ZfQUJJKQogCisjdW5kZWYgUFJPRklMRV9T VVBQT1JUX0JFRk9SRV9QUk9MT0dVRQorI2RlZmluZSBQUk9GSUxFX1NVUFBP UlRfQkVGT1JFX1BST0xPR1VFIGZsYWdfcHJvZmlsZV90b3AKKworLyogQ2hv b3NlIHRoZSBjb3JyZWN0IHByb2ZpbGVyIG1jb3VudCBuYW1lLiBGb3IgY2hl Y2tpbmcgd2UgYXJlIHVzaW5nIHRoZQorICAgaXg4Nl9wcm9maWxlX2JlZm9y ZV9wcm9sb2d1ZSBmdW5jdGlvbiBhcyBmbGFnX3Byb2ZpbGVfdG9wIGlzIHRy aS1zdGF0ZS4gICovCisjdW5kZWYgTUNPVU5UX05BTUUKKyNkZWZpbmUgTUNP VU5UX05BTUUgKGl4ODZfcHJvZmlsZV9iZWZvcmVfcHJvbG9ndWUgKCkgPyAi X21jb3VudF90b3AiIDogIl9tY291bnQiKQorCiAjaWYgISBkZWZpbmVkIChV U0VfTUlOR1c2NF9MRUFESU5HX1VOREVSU0NPUkVTKQogI3VuZGVmIFVTRVJf TEFCRUxfUFJFRklYCiAjZGVmaW5lIFVTRVJfTEFCRUxfUFJFRklYIChUQVJH RVRfNjRCSVQgPyAiIiA6ICJfIikKSW5kZXg6IGdjYy9nY2MvY29uZmlnL2kz ODYvY3lnbWluZy5vcHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZ2Nj Lm9yaWcvZ2NjL2NvbmZpZy9pMzg2L2N5Z21pbmcub3B0CTIwMTAtMDctMTMg MTc6MDA6NTEuMDAwMDAwMDAwICswMjAwCisrKyBnY2MvZ2NjL2NvbmZpZy9p Mzg2L2N5Z21pbmcub3B0CTIwMTAtMDctMTQgMDk6NDk6MzMuODY5MTAyMDAw ICswMjAwCkBAIC01MywzICs1Myw3IEBAIFVzZSB0aGUgR05VIGV4dGVuc2lv biB0byB0aGUgUEUgZm9ybWF0IGYKIG11c2UtbGlic3RkYy13cmFwcGVycwog VGFyZ2V0IENvbmRpdGlvbih7ZGVmaW5lZCAoVVNFX0NZR1dJTl9MSUJTVERD WFhfV1JBUFBFUlMpfSkKIENvbXBpbGUgY29kZSB0aGF0IHJlbGllcyBvbiBD eWd3aW4gRExMIHdyYXBwZXJzIHRvIHN1cHBvcnQgQysrIG9wZXJhdG9yIG5l dy9kZWxldGUgcmVwbGFjZW1lbnQKKworbXByb2ZpbGUtdG9wCitUYXJnZXQg UmVwb3J0IFZhcihmbGFnX3Byb2ZpbGVfdG9wKSBJbml0KC0xKQorRW1pdCBw cm9maWxpbmcgY29kZSBiZWZvcmUgcHJvbG9ndWUuCkluZGV4OiBnY2MvZ2Nj L2NvbmZpZy9pMzg2L2kzODYuYwo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t LSBnY2Mub3JpZy9nY2MvY29uZmlnL2kzODYvaTM4Ni5jCTIwMTAtMDctMTMg MTc6MDA6NTEuMDAwMDAwMDAwICswMjAwCisrKyBnY2MvZ2NjL2NvbmZpZy9p Mzg2L2kzODYuYwkyMDEwLTA3LTE0IDEwOjA1OjU0Ljk2NjYxMDkwMCArMDIw MApAQCAtNDc3MCw2ICs0NzcwLDMwIEBAIGl4ODZfaGFuZGxlX2Njb252X2F0 dHJpYnV0ZSAodHJlZSAqbm9kZSwKICAgcmV0dXJuIE5VTExfVFJFRTsKIH0K IAorLyogUmV0dXJuIHRydWUsIGlmIHByb2ZpbGluZyBjb2RlIHNob3VsZCBi ZSBlbWl0dGVkIGJlZm9yZQorICAgcHJvbG9ndWUuIE90aGVyd2lzZSBpdCBy ZXR1cm5zIGZhbHNlLgorICAgTm90ZTogRm9yIHg4NiB3aXRoICJob3RmaXgi IGl0IGlzIHNvcnJpZWQuICAqLworc3RhdGljIGJvb2wKK2l4ODZfcHJvZmls ZV9iZWZvcmVfcHJvbG9ndWUgKHZvaWQpCit7CisjaWZkZWYgUFJPRklMRV9T VVBQT1JUX0JFRk9SRV9QUk9MT0dVRQorICBzdGF0aWMgaW50IGZsYWdfdmFs dWUgPSAtMTsKKyAgaWYgKGZsYWdfdmFsdWUgPT0gLTEpCisgICAgeworICAg ICAgZmxhZ192YWx1ZSA9IFBST0ZJTEVfU1VQUE9SVF9CRUZPUkVfUFJPTE9H VUU7CisgICAgICBpZiAoZmxhZ192YWx1ZSA9PSAtMSkKKwl7CisJICAvKiBT ZXQgaXQgdG8gZGVmYXVsdCAwLiAgV2UgbmVlZCB0aGlzIHRyaS1zdGF0ZSBm b3IgbGF0ZXIKKwkgICAgIGNoZWNraW5nIG9mIGNvbXBhdGlibGl0eSBhbmQg dGFyZ2V0IHByZWZlcmVuY2VzLiAgKi8KKwkgIGZsYWdfdmFsdWUgPSAwOwor CX0KKyAgICB9CisgIHJldHVybiBmbGFnX3ZhbHVlICE9IDA7CisjZWxzZQor ICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKwogLyogUmV0dXJuIDAgaWYg dGhlIGF0dHJpYnV0ZXMgZm9yIHR3byB0eXBlcyBhcmUgaW5jb21wYXRpYmxl LCAxIGlmIHRoZXkKICAgIGFyZSBjb21wYXRpYmxlLCBhbmQgMiBpZiB0aGV5 IGFyZSBuZWFybHkgY29tcGF0aWJsZSAod2hpY2ggY2F1c2VzIGEKICAgIHdh cm5pbmcgdG8gYmUgZ2VuZXJhdGVkKS4gICovCkBAIC00ODQxLDcgKzQ4NjUs NyBAQCBpeDg2X2Z1bmN0aW9uX3JlZ3Bhcm0gKGNvbnN0X3RyZWUgdHlwZSwg CiAgIGlmIChkZWNsCiAgICAgICAmJiBUUkVFX0NPREUgKGRlY2wpID09IEZV TkNUSU9OX0RFQ0wKICAgICAgICYmIG9wdGltaXplCi0gICAgICAmJiAhcHJv ZmlsZV9mbGFnKQorICAgICAgJiYgIShwcm9maWxlX2ZsYWcgJiYgIWl4ODZf cHJvZmlsZV9iZWZvcmVfcHJvbG9ndWUgKCkpKQogICAgIHsKICAgICAgIC8q IEZJWE1FOiByZW1vdmUgdGhpcyBDT05TVF9DQVNUIHdoZW4gY2dyYXBoLltj aF0gaXMgY29uc3RpZmllZC4gICovCiAgICAgICBzdHJ1Y3QgY2dyYXBoX2xv Y2FsX2luZm8gKmkgPSBjZ3JhcGhfbG9jYWxfaW5mbyAoQ09OU1RfQ0FTVF9U UkVFIChkZWNsKSk7CkBAIC00OTEzLDcgKzQ5MzcsOCBAQCBpeDg2X2Z1bmN0 aW9uX3NzZXJlZ3Bhcm0gKGNvbnN0X3RyZWUgdHlwCiAKICAgLyogRm9yIGxv Y2FsIGZ1bmN0aW9ucywgcGFzcyB1cCB0byBTU0VfUkVHUEFSTV9NQVggU0Zt b2RlCiAgICAgIChhbmQgREZtb2RlIGZvciBTU0UyKSBhcmd1bWVudHMgaW4g U1NFIHJlZ2lzdGVycy4gICovCi0gIGlmIChkZWNsICYmIFRBUkdFVF9TU0Vf TUFUSCAmJiBvcHRpbWl6ZSAmJiAhcHJvZmlsZV9mbGFnKQorICBpZiAoZGVj bCAmJiBUQVJHRVRfU1NFX01BVEggJiYgb3B0aW1pemUKKyAgICAgICYmICEo cHJvZmlsZV9mbGFnICYmICFpeDg2X3Byb2ZpbGVfYmVmb3JlX3Byb2xvZ3Vl ICgpKSkKICAgICB7CiAgICAgICAvKiBGSVhNRTogcmVtb3ZlIHRoaXMgQ09O U1RfQ0FTVCB3aGVuIGNncmFwaC5bY2hdIGlzIGNvbnN0aWZpZWQuICAqLwog ICAgICAgc3RydWN0IGNncmFwaF9sb2NhbF9pbmZvICppID0gY2dyYXBoX2xv Y2FsX2luZm8gKENPTlNUX0NBU1RfVFJFRShkZWNsKSk7CkBAIC01MTMyLDcg KzUxNTcsOSBAQCBpeDg2X2NmdW5fYWJpICh2b2lkKQogICByZXR1cm4gY2Z1 bi0+bWFjaGluZS0+Y2FsbF9hYmk7CiB9CiAKLS8qIFdyaXRlIHRoZSBleHRy YSBhc3NlbWJsZXIgY29kZSBuZWVkZWQgdG8gZGVjbGFyZSBhIGZ1bmN0aW9u IHByb3Blcmx5LiAgKi8KKy8qIFdyaXRlIHRoZSBleHRyYSBhc3NlbWJsZXIg Y29kZSBuZWVkZWQgdG8gZGVjbGFyZSBhIGZ1bmN0aW9uIHByb3Blcmx5Lgor ICAgT3V0cHV0IGNhbGwgdG8gcHJvZmlsZXIgaWYgcHJvZmlsaW5nIGlzIGVu YWJsZWQgYW5kIGl0IHNob3VsZCBiZSBlbWl0dGVkCisgICBiZWZvcmUgcHJv bG9ndWUsICAqLwogCiB2b2lkCiBpeDg2X2FzbV9vdXRwdXRfZnVuY3Rpb25f bGFiZWwgKEZJTEUgKmFzbV9vdXRfZmlsZSwgY29uc3QgY2hhciAqZm5hbWUs CkBAIC03ODc1LDcgKzc5MDIsNyBAQCBpeDg2X2ZyYW1lX3BvaW50ZXJfcmVx dWlyZWQgKHZvaWQpCiAJICB8fCBpeDg2X2N1cnJlbnRfZnVuY3Rpb25fY2Fs bHNfdGxzX2Rlc2NyaXB0b3IpKQogICAgIHJldHVybiB0cnVlOwogCi0gIGlm IChjcnRsLT5wcm9maWxlKQorICBpZiAoY3J0bC0+cHJvZmlsZSAmJiAhaXg4 Nl9wcm9maWxlX2JlZm9yZV9wcm9sb2d1ZSAoKSkKICAgICByZXR1cm4gdHJ1 ZTsKIAogICByZXR1cm4gZmFsc2U7CkBAIC04MTQzLDcgKzgxNzAsOCBAQCBn ZW5fcHVzaCAocnR4IGFyZykKIHN0YXRpYyB1bnNpZ25lZCBpbnQKIGl4ODZf c2VsZWN0X2FsdF9waWNfcmVnbnVtICh2b2lkKQogewotICBpZiAoY3VycmVu dF9mdW5jdGlvbl9pc19sZWFmICYmICFjcnRsLT5wcm9maWxlCisgIGlmIChj dXJyZW50X2Z1bmN0aW9uX2lzX2xlYWYKKyAgICAgICYmICEoY3J0bC0+cHJv ZmlsZSAmJiAhaXg4Nl9wcm9maWxlX2JlZm9yZV9wcm9sb2d1ZSAoKSkKICAg ICAgICYmICFpeDg2X2N1cnJlbnRfZnVuY3Rpb25fY2FsbHNfdGxzX2Rlc2Ny aXB0b3IpCiAgICAgewogICAgICAgaW50IGksIGRyYXA7CkBAIC04MTY3LDcg KzgxOTUsNyBAQCBpeDg2X3NhdmVfcmVnICh1bnNpZ25lZCBpbnQgcmVnbm8s IGludCBtCiAgIGlmIChwaWNfb2Zmc2V0X3RhYmxlX3J0eAogICAgICAgJiYg cmVnbm8gPT0gUkVBTF9QSUNfT0ZGU0VUX1RBQkxFX1JFR05VTQogICAgICAg JiYgKGRmX3JlZ3NfZXZlcl9saXZlX3AgKFJFQUxfUElDX09GRlNFVF9UQUJM RV9SRUdOVU0pCi0JICB8fCBjcnRsLT5wcm9maWxlCisJICB8fCAoY3J0bC0+ cHJvZmlsZSAmJiAhaXg4Nl9wcm9maWxlX2JlZm9yZV9wcm9sb2d1ZSAoKSkK IAkgIHx8IGNydGwtPmNhbGxzX2VoX3JldHVybgogCSAgfHwgY3J0bC0+dXNl c19jb25zdF9wb29sKSkKICAgICB7CkBAIC05MTkxLDYgKzkyMTksMTEgQEAg aXg4Nl9leHBhbmRfcHJvbG9ndWUgKHZvaWQpCiAgICAgewogICAgICAgcnR4 IHB1c2gsIG1vdjsKIAorICAgICAgLyogQ2hlY2sgaWYgcHJvZmlsaW5nIGlz IGFjdGl2ZSBhbmQgd2Ugc2hhbGwgdXNlIHByb2ZpbGluZyBiZWZvcmUKKyAg ICAgICAgIHByb2xvZ3VlIHZhcmlhbnQuIElmIHNvIHNvcnJ5LiAgKi8KKyAg ICAgIGlmIChjcnRsLT5wcm9maWxlICYmIGl4ODZfcHJvZmlsZV9iZWZvcmVf cHJvbG9ndWUgKCkgIT0gMCkKKyAgICAgICAgc29ycnkgKCJtc19ob29rX3By b2xvZ3VlIGF0dHJpYnV0ZSBpc24ndCBjb21wYXRpYmxlIHdpdGggLW1wcm9m aWxlLXRvcCBmb3IgMzItYml0Iik7CisKICAgICAgIC8qIE1ha2Ugc3VyZSB0 aGUgZnVuY3Rpb24gc3RhcnRzIHdpdGgKIAkgOGIgZmYgICAgIG1vdmwucyAl ZWRpLCVlZGkgKGVtaXRlZCBieSBpeDg2X2FzbV9vdXRwdXRfZnVuY3Rpb25f bGFiZWwpCiAJIDU1ICAgICAgICBwdXNoICAgJWVicApAQCAtOTQ0Myw3ICs5 NDc2LDcgQEAgaXg4Nl9leHBhbmRfcHJvbG9ndWUgKHZvaWQpCiAgIHBpY19y ZWdfdXNlZCA9IGZhbHNlOwogICBpZiAocGljX29mZnNldF90YWJsZV9ydHgK ICAgICAgICYmIChkZl9yZWdzX2V2ZXJfbGl2ZV9wIChSRUFMX1BJQ19PRkZT RVRfVEFCTEVfUkVHTlVNKQotCSAgfHwgY3J0bC0+cHJvZmlsZSkpCisJICB8 fCAoY3J0bC0+cHJvZmlsZSAmJiAhaXg4Nl9wcm9maWxlX2JlZm9yZV9wcm9s b2d1ZSAoKSkpKQogICAgIHsKICAgICAgIHVuc2lnbmVkIGludCBhbHRfcGlj X3JlZ191c2VkID0gaXg4Nl9zZWxlY3RfYWx0X3BpY19yZWdudW0gKCk7CiAK QEAgLTk0ODAsNyArOTUxMyw3IEBAIGl4ODZfZXhwYW5kX3Byb2xvZ3VlICh2 b2lkKQogICAgICB3aGVuIG1jb3VudCBuZWVkcyBpdC4gIEJsb2NrYWdlIHRv IGF2b2lkIGNhbGwgbW92ZW1lbnQgYWNyb3NzIG1jb3VudAogICAgICBjYWxs IGlzIGVtaXR0ZWQgaW4gZ2VuZXJpYyBjb2RlIGFmdGVyIHRoZSBOT1RFX0lO U05fUFJPTE9HVUVfRU5ECiAgICAgIG5vdGUuICAqLwotICBpZiAoY3J0bC0+ cHJvZmlsZSAmJiBwaWNfcmVnX3VzZWQpCisgIGlmIChjcnRsLT5wcm9maWxl ICYmICFpeDg2X3Byb2ZpbGVfYmVmb3JlX3Byb2xvZ3VlICgpICYmIHBpY19y ZWdfdXNlZCkKICAgICBlbWl0X2luc24gKGdlbl9wcm9sb2d1ZV91c2UgKHBp Y19vZmZzZXRfdGFibGVfcnR4KSk7CiAKICAgaWYgKGNydGwtPmRyYXBfcmVn ICYmICFjcnRsLT5zdGFja19yZWFsaWduX25lZWRlZCkKQEAgLTI3Mjg1LDcg KzI3MzE4LDcgQEAgeDg2X2ZpZWxkX2FsaWdubWVudCAodHJlZSBmaWVsZCwg aW50IGNvbQogLyogT3V0cHV0IGFzc2VtYmxlciBjb2RlIHRvIEZJTEUgdG8g aW5jcmVtZW50IHByb2ZpbGVyIGxhYmVsICMgTEFCRUxOTwogICAgZm9yIHBy b2ZpbGluZyBhIGZ1bmN0aW9uIGVudHJ5LiAgKi8KIHZvaWQKLXg4Nl9mdW5j dGlvbl9wcm9maWxlciAoRklMRSAqZmlsZSwgaW50IGxhYmVsbm8gQVRUUklC VVRFX1VOVVNFRCkKK3g4Nl9mdW5jdGlvbl9wcm9maWxlciAoRklMRSAqZmls ZSBBVFRSSUJVVEVfVU5VU0VELCBpbnQgbGFiZWxubyBBVFRSSUJVVEVfVU5V U0VEKQogewogICBpZiAoVEFSR0VUXzY0QklUKQogICAgIHsKQEAgLTI3Mjk0 LDkgKzI3MzI3LDkgQEAgeDg2X2Z1bmN0aW9uX3Byb2ZpbGVyIChGSUxFICpm aWxlLCBpbnQgbAogI2VuZGlmCiAKICAgICAgIGlmIChERUZBVUxUX0FCSSA9 PSBTWVNWX0FCSSAmJiBmbGFnX3BpYykKLQlmcHV0cyAoIlx0Y2FsbFx0KiIg TUNPVU5UX05BTUUgIkBHT1RQQ1JFTCglcmlwKVxuIiwgZmlsZSk7CisJZnBy aW50ZiAoZmlsZSwgIlx0Y2FsbFx0KiVzQEdPVFBDUkVMKCUlcmlwKVxuIiwg TUNPVU5UX05BTUUpOwogICAgICAgZWxzZQotCWZwdXRzICgiXHRjYWxsXHQi IE1DT1VOVF9OQU1FICJcbiIsIGZpbGUpOworCWZwcmludGYgKGZpbGUsICJc dGNhbGxcdCVzXG4iLCBNQ09VTlRfTkFNRSk7CiAgICAgfQogICBlbHNlIGlm IChmbGFnX3BpYykKICAgICB7CkBAIC0yNzMwNCw3ICsyNzMzNyw3IEBAIHg4 Nl9mdW5jdGlvbl9wcm9maWxlciAoRklMRSAqZmlsZSwgaW50IGwKICAgICAg IGZwcmludGYgKGZpbGUsICJcdGxlYWxcdCVzUCVkQEdPVE9GRiglJWVieCks JSUiIFBST0ZJTEVfQ09VTlRfUkVHSVNURVIgIlxuIiwKIAkgICAgICAgTFBS RUZJWCwgbGFiZWxubyk7CiAjZW5kaWYKLSAgICAgIGZwdXRzICgiXHRjYWxs XHQqIiBNQ09VTlRfTkFNRSAiQEdPVCglZWJ4KVxuIiwgZmlsZSk7CisgICAg ICBmcHJpbnRmIChmaWxlLCAiXHRjYWxsXHQqJXNAR09UKCUlZWJ4KVxuIiwg TUNPVU5UX05BTUUpOwogICAgIH0KICAgZWxzZQogICAgIHsKQEAgLTI3MzEy LDcgKzI3MzQ1LDcgQEAgeDg2X2Z1bmN0aW9uX3Byb2ZpbGVyIChGSUxFICpm aWxlLCBpbnQgbAogICAgICAgZnByaW50ZiAoZmlsZSwgIlx0bW92bFx0JCVz UCVkLCUlIiBQUk9GSUxFX0NPVU5UX1JFR0lTVEVSICJcbiIsCiAJICAgICAg IExQUkVGSVgsIGxhYmVsbm8pOwogI2VuZGlmCi0gICAgICBmcHV0cyAoIlx0 Y2FsbFx0IiBNQ09VTlRfTkFNRSAiXG4iLCBmaWxlKTsKKyAgICAgIGZwcmlu dGYgKGZpbGUsICJcdGNhbGxcdCVzXG4iLCBNQ09VTlRfTkFNRSk7CiAgICAg fQogfQogCkBAIC0zMTM2MCw2ICszMTM5Myw5IEBAIGl4ODZfZW51bV92YV9s aXN0IChpbnQgaWR4LCBjb25zdCBjaGFyICoKICNkZWZpbmUgVEFSR0VUX0FT TV9BTElHTkVEX0RJX09QIEFTTV9RVUFECiAjZW5kaWYKIAorI3VuZGVmIFRB UkdFVF9QUk9GSUxFX0JFRk9SRV9QUk9MT0dVRQorI2RlZmluZSBUQVJHRVRf UFJPRklMRV9CRUZPUkVfUFJPTE9HVUUgaXg4Nl9wcm9maWxlX2JlZm9yZV9w cm9sb2d1ZQorCiAjdW5kZWYgVEFSR0VUX0FTTV9VTkFMSUdORURfSElfT1AK ICNkZWZpbmUgVEFSR0VUX0FTTV9VTkFMSUdORURfSElfT1AgVEFSR0VUX0FT TV9BTElHTkVEX0hJX09QCiAjdW5kZWYgVEFSR0VUX0FTTV9VTkFMSUdORURf U0lfT1AKSW5kZXg6IGdjYy9nY2MvZG9jL2ludm9rZS50ZXhpCj09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KLS0tIGdjYy5vcmlnL2djYy9kb2MvaW52b2tlLnRl eGkJMjAxMC0wNy0xMyAxNzowMDo1MS4wMDAwMDAwMDAgKzAyMDAKKysrIGdj Yy9nY2MvZG9jL2ludm9rZS50ZXhpCTIwMTAtMDctMTQgMTA6MTA6MTEuNjU1 MzY3ODAwICswMjAwCkBAIC04ODQsNyArODg0LDcgQEAgU2VlIGkzODYgYW5k IHg4Ni02NCBPcHRpb25zLgogQGVtcGh7aTM4NiBhbmQgeDg2LTY0IFdpbmRv d3MgT3B0aW9uc30KIEBnY2NvcHRsaXN0ey1tY29uc29sZSAtbWN5Z3dpbiAt bW5vLWN5Z3dpbiAtbWRsbAogLW1ub3AtZnVuLWRsbGltcG9ydCAtbXRocmVh ZCAtbXVuaWNvZGUgLW13aW4zMiAtbXdpbmRvd3MKLS1mbm8tc2V0LXN0YWNr LWV4ZWN1dGFibGV9CistbXByb2ZpbGUtdG9wIC1mbm8tc2V0LXN0YWNrLWV4 ZWN1dGFibGV9CiAKIEBlbXBoe1hzdG9ybXkxNiBPcHRpb25zfQogQGdjY29w dGxpc3R7LW1zaW19CkBAIC0xNzEwMCw2ICsxNzEwMCwxMyBAQCBzcGVjaWZp ZXMgdGhhdCBhIEdVSSBhcHBsaWNhdGlvbiBpcyB0byBiCiBpbnN0cnVjdGlu ZyB0aGUgbGlua2VyIHRvIHNldCB0aGUgUEUgaGVhZGVyIHN1YnN5c3RlbSB0 eXBlCiBhcHByb3ByaWF0ZWx5LgogCitAaXRlbSAtbXByb2ZpbGUtdG9wCitA b3BpbmRleCBtcHJvZmlsZS10b3AKK1RoaXMgb3B0aW9uIGlzIGF2YWlsYWJs ZSBmb3IgQ3lnd2luIGFuZCBNaW5HVyB0YXJnZXRzLiBJdAorc3BlY2lmaWVz IHRoYXQgZm9yIHByb2ZpbGluZyB0aGUgY2FsbCB0byBwcm9maWxlciBzaG91 bGQgYmUKK2RvbmUgYmVmb3JlIHByb2xvZ3VlLiAgRGVmYXVsdCBiZWhhdmlv ciBpcyB0aGF0IHByb2ZpbGVyLWNhbGwKK2lzIGRvbmUgYWZ0ZXIgdGhlIHBy b2xvZ3VlIGlzIGVzdGFibGlzaGVkLgorCiBAaXRlbSAtZm5vLXNldC1zdGFj ay1leGVjdXRhYmxlCiBAb3BpbmRleCBmbm8tc2V0LXN0YWNrLWV4ZWN1dGFi bGUKIFRoaXMgb3B0aW9uIGlzIGF2YWlsYWJsZSBmb3IgTWluR1cgdGFyZ2V0 cy4gSXQgc3BlY2lmaWVzIHRoYXQKSW5kZXg6IGdjYy9nY2MvZG9jL3RtLnRl eGkuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZ2NjLm9yaWcvZ2Nj L2RvYy90bS50ZXhpLmluCTIwMTAtMDctMTMgMTI6MDM6MzAuMDAwMDAwMDAw ICswMjAwCisrKyBnY2MvZ2NjL2RvYy90bS50ZXhpLmluCTIwMTAtMDctMTQg MDk6NDc6MDYuNDg1OTIwMDAwICswMjAwCkBAIC03MTAxLDYgKzcxMDEsMTQg QEAgQ29udGFpbnMgdGhlIHZhbHVlIHRydWUgaWYgdGhlIHRhcmdldCBwbAog YGBzbWFsbCBkYXRhJycgaW50byBhIHNlcGFyYXRlIHNlY3Rpb24uICBUaGUg ZGVmYXVsdCB2YWx1ZSBpcyBmYWxzZS4KIEBlbmQgZGVmdHlwZXZyCiAKK0Bo b29rIFRBUkdFVF9QUk9GSUxFX0JFRk9SRV9QUk9MT0dVRQorSXQgcmV0dXJu cyB0cnVlIGlmIHRhcmdldCB3YW50cyBwcm9maWxlIGNvZGUgZW1pdHRlZCBi ZWZvcmUKK3Byb2xvZ3VlLgorCitUaGUgZGVmYXVsdCB2ZXJzaW9uIG9mIHRo aXMgaG9vayB1c2UgdGhlIHRhcmdldCBtYWNybworQGNvZGV7UFJPRklMRV9C RUZPUkVfUFJPTE9HVUV9LgorQGVuZCBkZWZ0eXBlZm4KKwogQGhvb2sgVEFS R0VUX0JJTkRTX0xPQ0FMX1AKIFJldHVybnMgdHJ1ZSBpZiBAdmFye2V4cH0g bmFtZXMgYW4gb2JqZWN0IGZvciB3aGljaCBuYW1lIHJlc29sdXRpb24KIHJ1 bGVzIG11c3QgcmVzb2x2ZSB0byB0aGUgY3VycmVudCBgYG1vZHVsZScnIChk eW5hbWljIHNoYXJlZCBsaWJyYXJ5CkluZGV4OiBnY2MvZ2NjL2ZpbmFsLmMK PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQotLS0gZ2NjLm9yaWcvZ2NjL2ZpbmFs LmMJMjAxMC0wNy0wOSAxMToyNDo0Ny4wMDAwMDAwMDAgKzAyMDAKKysrIGdj Yy9nY2MvZmluYWwuYwkyMDEwLTA3LTE0IDA5OjQ3OjA2LjM3NjQ5NjAwMCAr MDIwMApAQCAtMTU0NiwxMCArMTU0Niw4IEBAIGZpbmFsX3N0YXJ0X2Z1bmN0 aW9uIChydHggZmlyc3QgQVRUUklCVVQKIAogICAvKiBUaGUgU3VuMzg2aSBh bmQgcGVyaGFwcyBvdGhlciBtYWNoaW5lcyBkb24ndCB3b3JrIHJpZ2h0CiAg ICAgIGlmIHRoZSBwcm9maWxpbmcgY29kZSBjb21lcyBhZnRlciB0aGUgcHJv bG9ndWUuICAqLwotI2lmZGVmIFBST0ZJTEVfQkVGT1JFX1BST0xPR1VFCi0g IGlmIChjcnRsLT5wcm9maWxlKQorICBpZiAodGFyZ2V0bS5wcm9maWxlX2Jl Zm9yZV9wcm9sb2d1ZSAoKSAmJiBjcnRsLT5wcm9maWxlKQogICAgIHByb2Zp bGVfZnVuY3Rpb24gKGZpbGUpOwotI2VuZGlmIC8qIFBST0ZJTEVfQkVGT1JF X1BST0xPR1VFICovCiAKICNpZiBkZWZpbmVkIChEV0FSRjJfVU5XSU5EX0lO Rk8pICYmIGRlZmluZWQgKEhBVkVfcHJvbG9ndWUpCiAgIGlmIChkd2FyZjJv dXRfZG9fZnJhbWUgKCkpCkBAIC0xNTkxLDEwICsxNTg5LDggQEAgZmluYWxf c3RhcnRfZnVuY3Rpb24gKHJ0eCBmaXJzdCBBVFRSSUJVVAogc3RhdGljIHZv aWQKIHByb2ZpbGVfYWZ0ZXJfcHJvbG9ndWUgKEZJTEUgKmZpbGUgQVRUUklC VVRFX1VOVVNFRCkKIHsKLSNpZm5kZWYgUFJPRklMRV9CRUZPUkVfUFJPTE9H VUUKLSAgaWYgKGNydGwtPnByb2ZpbGUpCisgIGlmICghdGFyZ2V0bS5wcm9m aWxlX2JlZm9yZV9wcm9sb2d1ZSAoKSAmJiBjcnRsLT5wcm9maWxlKQogICAg IHByb2ZpbGVfZnVuY3Rpb24gKGZpbGUpOwotI2VuZGlmIC8qIG5vdCBQUk9G SUxFX0JFRk9SRV9QUk9MT0dVRSAqLwogfQogCiBzdGF0aWMgdm9pZApJbmRl eDogZ2NjL2djYy9mdW5jdGlvbi5jCj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K LS0tIGdjYy5vcmlnL2djYy9mdW5jdGlvbi5jCTIwMTAtMDctMDYgMTM6MTU6 MzguMDAwMDAwMDAwICswMjAwCisrKyBnY2MvZ2NjL2Z1bmN0aW9uLmMJMjAx MC0wNy0xNCAwOTo0NzowNi4zOTIxMjgwMDAgKzAyMDAKQEAgLTUxMDAsMTMg KzUxMDAsMTEgQEAgdGhyZWFkX3Byb2xvZ3VlX2FuZF9lcGlsb2d1ZV9pbnNu cyAodm9pZAogICAgICAgcmVjb3JkX2luc25zIChzZXEsIE5VTEwsICZwcm9s b2d1ZV9pbnNuX2hhc2gpOwogICAgICAgZW1pdF9ub3RlIChOT1RFX0lOU05f UFJPTE9HVUVfRU5EKTsKIAotI2lmbmRlZiBQUk9GSUxFX0JFRk9SRV9QUk9M T0dVRQogICAgICAgLyogRW5zdXJlIHRoYXQgaW5zdHJ1Y3Rpb25zIGFyZSBu b3QgbW92ZWQgaW50byB0aGUgcHJvbG9ndWUgd2hlbgogCSBwcm9maWxpbmcg aXMgb24uICBUaGUgY2FsbCB0byB0aGUgcHJvZmlsaW5nIHJvdXRpbmUgY2Fu IGJlCiAJIGVtaXR0ZWQgd2l0aGluIHRoZSBsaXZlIHJhbmdlIG9mIGEgY2Fs bC1jbG9iYmVyZWQgcmVnaXN0ZXIuICAqLwotICAgICAgaWYgKGNydGwtPnBy b2ZpbGUpCisgICAgICBpZiAoIXRhcmdldG0ucHJvZmlsZV9iZWZvcmVfcHJv bG9ndWUgKCkgJiYgY3J0bC0+cHJvZmlsZSkKICAgICAgICAgZW1pdF9pbnNu IChnZW5fYmxvY2thZ2UgKCkpOwotI2VuZGlmCiAKICAgICAgIHNlcSA9IGdl dF9pbnNucyAoKTsKICAgICAgIGVuZF9zZXF1ZW5jZSAoKTsKSW5kZXg6IGdj Yy9nY2MvdGFyZ2V0LmRlZgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBn Y2Mub3JpZy9nY2MvdGFyZ2V0LmRlZgkyMDEwLTA3LTA5IDExOjI0OjQ3LjAw MDAwMDAwMCArMDIwMAorKysgZ2NjL2djYy90YXJnZXQuZGVmCTIwMTAtMDct MTQgMDk6NDc6MDYuMzkyMTI4MDAwICswMjAwCkBAIC0xMjE4LDYgKzEyMTgs MTMgQEAgREVGSE9PSwogIGJvb2wsIChjb25zdF90cmVlIGV4cCksCiAgZGVm YXVsdF9iaW5kc19sb2NhbF9wKQogCisvKiBDaGVjayBpZiBwcm9maWxpbmcg Y29kZSBpcyBiZWZvcmUgb3IgYWZ0ZXIgcHJvbG9ndWUuICAqLworREVGSE9P SworKHByb2ZpbGVfYmVmb3JlX3Byb2xvZ3VlLAorICIiLAorIGJvb2wsICh2 b2lkKSwKKyBkZWZhdWx0X3Byb2ZpbGVfYmVmb3JlX3Byb2xvZ3VlKQorCiAv KiBNb2RpZnkgYW5kIHJldHVybiB0aGUgaWRlbnRpZmllciBvZiBhIERFQ0wn cyBleHRlcm5hbCBuYW1lLAogICAgb3JpZ2luYWxseSBpZGVudGlmaWVkIGJ5 IElELCBhcyByZXF1aXJlZCBieSB0aGUgdGFyZ2V0LAogICAgKGVnLCBhcHBl bmQgQG5uIHRvIHdpbmRvd3MzMiBzdGRjYWxsIGZ1bmN0aW9uIG5hbWVzKS4K SW5kZXg6IGdjYy9nY2MvdGFyZ2hvb2tzLmMKPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQotLS0gZ2NjLm9yaWcvZ2NjL3Rhcmdob29rcy5jCTIwMTAtMDctMDkg MTE6MjQ6NDcuMDAwMDAwMDAwICswMjAwCisrKyBnY2MvZ2NjL3Rhcmdob29r cy5jCTIwMTAtMDctMTQgMDk6NDc6MDYuMzkyMTI4MDAwICswMjAwCkBAIC0x MTk3LDQgKzExOTcsMTQgQEAgZGVmYXVsdF9yZWdpc3Rlcl9tb3ZlX2Nvc3Qg KGVudW0gbWFjaGluZQogI2VuZGlmCiB9CiAKK2Jvb2wKK2RlZmF1bHRfcHJv ZmlsZV9iZWZvcmVfcHJvbG9ndWUgKHZvaWQpCit7CisjaWZuZGVmIFBST0ZJ TEVfQkVGT1JFX1BST0xPR1VFCisgIHJldHVybiBmYWxzZTsKKyNlbHNlCisg IHJldHVybiB0cnVlOworI2VuZGlmCit9CisKICNpbmNsdWRlICJndC10YXJn aG9va3MuaCIKSW5kZXg6IGdjYy9nY2MvdGFyZ2hvb2tzLmgKPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQotLS0gZ2NjLm9yaWcvZ2NjL3Rhcmdob29rcy5oCTIw MTAtMDctMDkgMTE6MjQ6NDcuMDAwMDAwMDAwICswMjAwCisrKyBnY2MvZ2Nj L3Rhcmdob29rcy5oCTIwMTAtMDctMTQgMDk6NDc6MDYuMzkyMTI4MDAwICsw MjAwCkBAIC0xNTAsMyArMTUwLDQgQEAgZXh0ZXJuIGludCBkZWZhdWx0X21l bW9yeV9tb3ZlX2Nvc3QgKGVudQogZXh0ZXJuIGludCBkZWZhdWx0X3JlZ2lz dGVyX21vdmVfY29zdCAoZW51bSBtYWNoaW5lX21vZGUsIHJlZ19jbGFzc190 LAogCQkJCSAgICAgICByZWdfY2xhc3NfdCk7CiAKK2V4dGVybiBib29sIGRl ZmF1bHRfcHJvZmlsZV9iZWZvcmVfcHJvbG9ndWUgKHZvaWQpOwpJbmRleDog Z2NjL2djYy9kb2MvdG0udGV4aQo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t LSBnY2Mub3JpZy9nY2MvZG9jL3RtLnRleGkJMjAxMC0wNy0xMyAxMjowMzoz MC4wMDAwMDAwMDAgKzAyMDAKKysrIGdjYy9nY2MvZG9jL3RtLnRleGkJMjAx MC0wNy0xNCAxMDozNDo0NC4yMTkyNTc0MDAgKzAyMDAKQEAgLTcxMDEsNiAr NzEwMSwxNCBAQCBDb250YWlucyB0aGUgdmFsdWUgdHJ1ZSBpZiB0aGUgdGFy Z2V0IHBsCiBgYHNtYWxsIGRhdGEnJyBpbnRvIGEgc2VwYXJhdGUgc2VjdGlv bi4gIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGZhbHNlLgogQGVuZCBkZWZ0eXBl dnIKIAorQGRlZnR5cGVmbiB7VGFyZ2V0IEhvb2t9IGJvb2wgVEFSR0VUX1BS T0ZJTEVfQkVGT1JFX1BST0xPR1VFICh2b2lkKQorSXQgcmV0dXJucyB0cnVl IGlmIHRhcmdldCB3YW50cyBwcm9maWxlIGNvZGUgZW1pdHRlZCBiZWZvcmUK K3Byb2xvZ3VlLgorCitUaGUgZGVmYXVsdCB2ZXJzaW9uIG9mIHRoaXMgaG9v ayB1c2UgdGhlIHRhcmdldCBtYWNybworQGNvZGV7UFJPRklMRV9CRUZPUkVf UFJPTE9HVUV9LgorQGVuZCBkZWZ0eXBlZm4KKwogQGRlZnR5cGVmbiB7VGFy Z2V0IEhvb2t9IGJvb2wgVEFSR0VUX0JJTkRTX0xPQ0FMX1AgKGNvbnN0X3Ry ZWUgQHZhcntleHB9KQogUmV0dXJucyB0cnVlIGlmIEB2YXJ7ZXhwfSBuYW1l cyBhbiBvYmplY3QgZm9yIHdoaWNoIG5hbWUgcmVzb2x1dGlvbgogcnVsZXMg bXVzdCByZXNvbHZlIHRvIHRoZSBjdXJyZW50IGBgbW9kdWxlJycgKGR5bmFt aWMgc2hhcmVkIGxpYnJhcnkK --001517447eea1ff136048b5654a6--