From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 21144 invoked by alias); 16 Oct 2009 20:12:19 -0000 Received: (qmail 20818 invoked by uid 22791); 16 Oct 2009 20:12:15 -0000 X-SWARE-Spam-Status: No, hits=-1.8 required=5.0 tests=AWL,BAYES_00,SARE_MSGID_LONG40,SPF_PASS X-Spam-Check-By: sourceware.org Received: from mail-ew0-f221.google.com (HELO mail-ew0-f221.google.com) (209.85.219.221) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Fri, 16 Oct 2009 20:12:08 +0000 Received: by ewy21 with SMTP id 21so1016667ewy.8 for ; Fri, 16 Oct 2009 13:12:06 -0700 (PDT) MIME-Version: 1.0 Received: by 10.216.93.81 with SMTP id k59mr734757wef.169.1255723925895; Fri, 16 Oct 2009 13:12:05 -0700 (PDT) In-Reply-To: <4AD76CBA.7030204@gmail.com> References: <20090806214216.GA14439@lucon.org> <20091015154823.GA15787@lucon.org> <4AD76CBA.7030204@gmail.com> Date: Fri, 16 Oct 2009 20:27:00 -0000 Message-ID: <6dc9ffc80910161312o30a8b899vd5828fb8d029c94e@mail.gmail.com> Subject: Re: PATCH: PR target/40838: gcc shouldn't assume that the stack is aligned From: "H.J. Lu" To: Uros Bizjak Cc: gcc-patches@gcc.gnu.org, Jakub Jelinek Content-Type: multipart/mixed; boundary=0016e6d7ef1689fcf20476130223 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: 2009-10/txt/msg01073.txt.bz2 --0016e6d7ef1689fcf20476130223 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-length: 3400 On Thu, Oct 15, 2009 at 11:40 AM, Uros Bizjak wrote: > On 10/15/2009 05:48 PM, H.J. Lu wrote: >> >> On Thu, Aug 06, 2009 at 02:42:16PM -0700, H.J. Lu wrote: >> >>> >>> Hi, >>> >>> In 32bit, the incoming stack may not be 16 byte aligned. =A0This patch >>> assumes the incoming stack is 4 byte aligned and realigns stack if any >>> SSE variable is put on stack. Any comments? >>> >>> >> >> For i386, gcc, up to gcc 3.4, had been generating 4byte stack alignment. >> 4byte stack alignment is a problem unless SSE registers are used, which >> may be generated by vectorizer or intrinsics. This patch accommodates >> the binaries generated by previous versions of gcc if SSE registers are >> generated by vectorizer or intrinsics. The performance impact on SPEC >> CPU 2006 is minimum: >> >> http://gcc.gnu.org/bugzilla/show_bug.cgi?id=3D41156#c7 >> >> OK for trunk? >> > > Comments bellow. > > > OTOH, I think that this whole stuff should depend on -mstackrealing someh= ow, > according to the comment: > > /* 1 if -mstackrealign should be turned on by default. =A0It will > =A0 generate an alternate prologue and epilogue that realigns the > =A0 runtime stack if nessary. =A0This supports mixing codes that keep a > =A0 4-byte aligned stack, as specified by i386 psABI, with codes that > =A0 need a 16-byte aligned stack, as required by SSE instructions. =A0If > =A0 STACK_REALIGN_DEFAULT is 1 and PREFERRED_STACK_BOUNDARY_DEFAULT is > =A0 128, stacks for all functions may be realigned. =A0*/ > #define STACK_REALIGN_DEFAULT 0 > > As far as I understand from many comments from the PR40838 trail (especia= lly > comment #51), -mstackrealing is not effective in some cases involving > automatic SSE variables on the stack. I think that -mstackrealign should = be > fixed in the way your patch outlines, so old/broken sources that assume > 4byte alignment can be compiled using this option without penalizing > new/fixed code that assumes 16byte alignment. > > Also, Jakub has its opinion here, I have also CC'd him. > Uros. > Here is the patch to make -mstackrealing only align stack when SSE registers are used. People who care about mixing binaries compiled by the older gcc can use it without aligning stack for every function. OK for trunk if regression passes? Thanks. --=20 H.J. --- gcc/ 2009-10-16 H.J. Lu PR target/40838 * function.c (allocate_struct_function): Initialize hard_stack_alignment. * function.h (function): Add hard_stack_alignment. * tree-vect-data-refs.c (vect_verify_datarefs_alignment): Update hard_stack_alignment. * config/i386/i386.c (verride_options): Don't check ix86_force_align_arg_pointer here. (ix86_update_stack_boundary): In 32bit, use MIN_STACK_BOUNDARY for incoming stack boundary if -mstackrealign is used and hard stack alignment is 128bit. (ix86_minimum_alignment): In 32bit, update hard_stack_alignment if alignment is 128bit. gcc/testsuite/ 2009-10-16 H.J. Lu PR target/40838 * gcc.target/i386/incoming-6.c: New. * gcc.target/i386/incoming-7.c: Likewise. * gcc.target/i386/incoming-8.c: Likewise. * gcc.target/i386/incoming-9.c: Likewise. * gcc.target/i386/incoming-10.c: Likewise. * gcc.target/i386/incoming-11.c: Likewise. * gcc.target/i386/incoming-12.c: Likewise. * gcc.target/i386/incoming-13.c: Likewise. * gcc.target/i386/incoming-14.c: Likewise. --0016e6d7ef1689fcf20476130223 Content-Type: text/plain; charset=US-ASCII; name="gcc-pr40838-6.patch" Content-Disposition: attachment; filename="gcc-pr40838-6.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_g0vdgd880 Content-length: 16039 Z2NjLwoKMjAwOS0xMC0xNiAgSC5KLiBMdSAgPGhvbmdqaXUubHVAaW50ZWwu Y29tPgoKCVBSIHRhcmdldC80MDgzOAoJKiBmdW5jdGlvbi5jIChhbGxvY2F0 ZV9zdHJ1Y3RfZnVuY3Rpb24pOiBJbml0aWFsaXplCgloYXJkX3N0YWNrX2Fs aWdubWVudC4KCgkqIGZ1bmN0aW9uLmggKGZ1bmN0aW9uKTogQWRkIGhhcmRf c3RhY2tfYWxpZ25tZW50LgoKCSogdHJlZS12ZWN0LWRhdGEtcmVmcy5jICh2 ZWN0X3ZlcmlmeV9kYXRhcmVmc19hbGlnbm1lbnQpOiBVcGRhdGUKCWhhcmRf c3RhY2tfYWxpZ25tZW50LgoKCSogY29uZmlnL2kzODYvaTM4Ni5jICh2ZXJy aWRlX29wdGlvbnMpOiBEb24ndCBjaGVjawoJaXg4Nl9mb3JjZV9hbGlnbl9h cmdfcG9pbnRlciBoZXJlLgoJKGl4ODZfdXBkYXRlX3N0YWNrX2JvdW5kYXJ5 KTogSW4gMzJiaXQsIHVzZSBNSU5fU1RBQ0tfQk9VTkRBUlkKCWZvciBpbmNv bWluZyBzdGFjayBib3VuZGFyeSBpZiAtbXN0YWNrcmVhbGlnbiBpcyB1c2Vk IGFuZCBoYXJkCglzdGFjayBhbGlnbm1lbnQgaXMgMTI4Yml0LgoJKGl4ODZf bWluaW11bV9hbGlnbm1lbnQpOiBJbiAzMmJpdCwgdXBkYXRlIGhhcmRfc3Rh Y2tfYWxpZ25tZW50CglpZiBhbGlnbm1lbnQgaXMgMTI4Yml0LgoKZ2NjL3Rl c3RzdWl0ZS8KCjIwMDktMTAtMTYgIEguSi4gTHUgIDxob25naml1Lmx1QGlu dGVsLmNvbT4KCglQUiB0YXJnZXQvNDA4MzgKCSogZ2NjLnRhcmdldC9pMzg2 L2luY29taW5nLTYuYzogTmV3LgoJKiBnY2MudGFyZ2V0L2kzODYvaW5jb21p bmctNy5jOiBMaWtld2lzZS4KCSogZ2NjLnRhcmdldC9pMzg2L2luY29taW5n LTguYzogTGlrZXdpc2UuCgkqIGdjYy50YXJnZXQvaTM4Ni9pbmNvbWluZy05 LmM6IExpa2V3aXNlLgoJKiBnY2MudGFyZ2V0L2kzODYvaW5jb21pbmctMTAu YzogTGlrZXdpc2UuCgkqIGdjYy50YXJnZXQvaTM4Ni9pbmNvbWluZy0xMS5j OiBMaWtld2lzZS4KCSogZ2NjLnRhcmdldC9pMzg2L2luY29taW5nLTEyLmM6 IExpa2V3aXNlLgoJKiBnY2MudGFyZ2V0L2kzODYvaW5jb21pbmctMTMuYzog TGlrZXdpc2UuCgkqIGdjYy50YXJnZXQvaTM4Ni9pbmNvbWluZy0xNC5jOiBM aWtld2lzZS4KCmRpZmYgLS1naXQgYS9nY2MvY29uZmlnL2kzODYvaTM4Ni5j IGIvZ2NjL2NvbmZpZy9pMzg2L2kzODYuYwppbmRleCA3MzkxM2I4Li5hYzlk MmFkIDEwMDY0NAotLS0gYS9nY2MvY29uZmlnL2kzODYvaTM4Ni5jCisrKyBi L2djYy9jb25maWcvaTM4Ni9pMzg2LmMKQEAgLTMyMzksMTIgKzMyMzksMTAg QEAgb3ZlcnJpZGVfb3B0aW9ucyAoYm9vbCBtYWluX2FyZ3NfcCkKICAgaWYg KGl4ODZfZm9yY2VfYWxpZ25fYXJnX3BvaW50ZXIgPT0gLTEpCiAgICAgaXg4 Nl9mb3JjZV9hbGlnbl9hcmdfcG9pbnRlciA9IFNUQUNLX1JFQUxJR05fREVG QVVMVDsKIAorICBpeDg2X2RlZmF1bHRfaW5jb21pbmdfc3RhY2tfYm91bmRh cnkgPSBQUkVGRVJSRURfU1RBQ0tfQk9VTkRBUlk7CisKICAgLyogVmFsaWRh dGUgLW1pbmNvbWluZy1zdGFjay1ib3VuZGFyeT0gdmFsdWUgb3IgZGVmYXVs dCBpdCB0bwogICAgICBNSU5fU1RBQ0tfQk9VTkRBUlkvUFJFRkVSUkVEX1NU QUNLX0JPVU5EQVJZLiAgKi8KLSAgaWYgKGl4ODZfZm9yY2VfYWxpZ25fYXJn X3BvaW50ZXIpCi0gICAgaXg4Nl9kZWZhdWx0X2luY29taW5nX3N0YWNrX2Jv dW5kYXJ5ID0gTUlOX1NUQUNLX0JPVU5EQVJZOwotICBlbHNlCi0gICAgaXg4 Nl9kZWZhdWx0X2luY29taW5nX3N0YWNrX2JvdW5kYXJ5ID0gUFJFRkVSUkVE X1NUQUNLX0JPVU5EQVJZOwogICBpeDg2X2luY29taW5nX3N0YWNrX2JvdW5k YXJ5ID0gaXg4Nl9kZWZhdWx0X2luY29taW5nX3N0YWNrX2JvdW5kYXJ5Owog ICBpZiAoaXg4Nl9pbmNvbWluZ19zdGFja19ib3VuZGFyeV9zdHJpbmcpCiAg ICAgewpAQCAtODIwMSwxMSArODE5OSwyMyBAQCBmaW5kX2RyYXBfcmVnICh2 b2lkKQogc3RhdGljIHZvaWQKIGl4ODZfdXBkYXRlX3N0YWNrX2JvdW5kYXJ5 ICh2b2lkKQogeworICAvKiBTaG91bGQgd2UgdXNlIE1JTl9TVEFDS19CT1VO REFSWSBmb3IgaW5jb21pbmcgc3RhY2sgYm91bmRhcnk/ICAqLworICB1bnNp Z25lZCBpbnQgaW5jb21pbmdfc3RhY2tfYm91bmRhcnk7CisKKyAgLyogSW4g MzJiaXQsIHVzZSBNSU5fU1RBQ0tfQk9VTkRBUlkgZm9yIGluY29taW5nIHN0 YWNrIGJvdW5kYXJ5IGlmCisgICAgIC1tc3RhY2tyZWFsaWduIGlzIHVzZWQg YW5kIGhhcmQgc3RhY2sgYWxpZ25tZW50IGlzIDEyOGJpdC4gICovCisgIGlm ICghVEFSR0VUXzY0QklUCisgICAgICAmJiBpeDg2X2ZvcmNlX2FsaWduX2Fy Z19wb2ludGVyCisgICAgICAmJiBjZnVuLT5oYXJkX3N0YWNrX2FsaWdubWVu dCA9PSAxMjgpCisgICAgaW5jb21pbmdfc3RhY2tfYm91bmRhcnkgPSBNSU5f U1RBQ0tfQk9VTkRBUlk7CisgIGVsc2UKKyAgICBpbmNvbWluZ19zdGFja19i b3VuZGFyeSA9IGl4ODZfZGVmYXVsdF9pbmNvbWluZ19zdGFja19ib3VuZGFy eTsKKwogICAvKiBQcmVmZXIgdGhlIG9uZSBzcGVjaWZpZWQgYXQgY29tbWFu ZCBsaW5lLiAqLwogICBpeDg2X2luY29taW5nX3N0YWNrX2JvdW5kYXJ5IAog ICAgID0gKGl4ODZfdXNlcl9pbmNvbWluZ19zdGFja19ib3VuZGFyeQogICAg ICAgID8gaXg4Nl91c2VyX2luY29taW5nX3N0YWNrX2JvdW5kYXJ5Ci0gICAg ICAgOiBpeDg2X2RlZmF1bHRfaW5jb21pbmdfc3RhY2tfYm91bmRhcnkpOwor ICAgICAgIDogaW5jb21pbmdfc3RhY2tfYm91bmRhcnkpOwogCiAgIC8qIElu Y29taW5nIHN0YWNrIGFsaWdubWVudCBjYW4gYmUgY2hhbmdlZCBvbiBpbmRp dmlkdWFsIGZ1bmN0aW9ucwogICAgICB2aWEgZm9yY2VfYWxpZ25fYXJnX3Bv aW50ZXIgYXR0cmlidXRlLiAgV2UgdXNlIHRoZSBzbWFsbGVzdApAQCAtMTk4 NjMsNyArMTk4NzMsMTQgQEAgaXg4Nl9taW5pbXVtX2FsaWdubWVudCAodHJl ZSBleHAsIGVudW0gbWFjaGluZV9tb2RlIG1vZGUsCiB7CiAgIHRyZWUgdHlw ZSwgZGVjbDsKIAotICBpZiAoVEFSR0VUXzY0QklUIHx8IGFsaWduICE9IDY0 IHx8IGl4ODZfcHJlZmVycmVkX3N0YWNrX2JvdW5kYXJ5ID49IDY0KQorICBp ZiAoVEFSR0VUXzY0QklUKQorICAgIHJldHVybiBhbGlnbjsKKworICAvKiBJ biAzMmJpdCwgdXBkYXRlIGhhcmRfc3RhY2tfbW9kZSBpZiBBTElHTiBpcyAx MjguICAqLworICBpZiAoYWxpZ24gPT0gMTI4ICYmIGNmdW4tPmhhcmRfc3Rh Y2tfYWxpZ25tZW50IDwgMTI4KQorICAgIGNmdW4tPmhhcmRfc3RhY2tfYWxp Z25tZW50ID0gYWxpZ247CisKKyAgaWYgKGFsaWduICE9IDY0IHx8IGl4ODZf cHJlZmVycmVkX3N0YWNrX2JvdW5kYXJ5ID49IDY0KQogICAgIHJldHVybiBh bGlnbjsKIAogICBpZiAoZXhwICYmIERFQ0xfUCAoZXhwKSkKZGlmZiAtLWdp dCBhL2djYy9mdW5jdGlvbi5jIGIvZ2NjL2Z1bmN0aW9uLmMKaW5kZXggMzVj MGNmZC4uMTA3MTE4MyAxMDA2NDQKLS0tIGEvZ2NjL2Z1bmN0aW9uLmMKKysr IGIvZ2NjL2Z1bmN0aW9uLmMKQEAgLTQxMzksNiArNDEzOSw4IEBAIGFsbG9j YXRlX3N0cnVjdF9mdW5jdGlvbiAodHJlZSBmbmRlY2wsIGJvb2wgYWJzdHJh Y3RfcCkKICAgICAgIC8qIEFzc3VtZSBhbGwgcmVnaXN0ZXJzIGluIHN0ZGFy ZyBmdW5jdGlvbnMgbmVlZCB0byBiZSBzYXZlZC4gICovCiAgICAgICBjZnVu LT52YV9saXN0X2dwcl9zaXplID0gVkFfTElTVF9NQVhfR1BSX1NJWkU7CiAg ICAgICBjZnVuLT52YV9saXN0X2Zwcl9zaXplID0gVkFfTElTVF9NQVhfRlBS X1NJWkU7CisKKyAgICAgIGNmdW4tPmhhcmRfc3RhY2tfYWxpZ25tZW50ID0g MDsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL2djYy9mdW5jdGlvbi5oIGIv Z2NjL2Z1bmN0aW9uLmgKaW5kZXggNDgyNWQxNi4uNDU3ZDVkMSAxMDA2NDQK LS0tIGEvZ2NjL2Z1bmN0aW9uLmgKKysrIGIvZ2NjL2Z1bmN0aW9uLmgKQEAg LTUzMiw2ICs1MzIsOSBAQCBzdHJ1Y3QgR1RZKCgpKSBmdW5jdGlvbiB7CiAg ICAgIGEgc3RyaW5nIGRlc2NyaWJpbmcgdGhlIHJlYXNvbiBmb3IgZmFpbHVy ZS4gICovCiAgIGNvbnN0IGNoYXIgKiBHVFkoKHNraXApKSBjYW5ub3RfYmVf Y29waWVkX3JlYXNvbjsKIAorICAvKiBUaGUgbGFyZ2VzdCBoYXJkIGFsaWdu bWVudCBvbiB0aGUgc3RhY2suICAqLworICB1bnNpZ25lZCBpbnQgaGFyZF9z dGFja19hbGlnbm1lbnQ7CisKICAgLyogQ29sbGVjdGVkIGJpdCBmbGFncy4g ICovCiAKICAgLyogTnVtYmVyIG9mIHVuaXRzIG9mIGdlbmVyYWwgcmVnaXN0 ZXJzIHRoYXQgbmVlZCBzYXZpbmcgaW4gc3RkYXJnCmRpZmYgLS1naXQgYS9n Y2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9pbmNvbWluZy0xMC5jIGIv Z2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvaW5jb21pbmctMTAuYwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMWQ5ZTYxCi0t LSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kz ODYvaW5jb21pbmctMTAuYwpAQCAtMCwwICsxLDE5IEBACisvKiBQUiB0YXJn ZXQvNDA4MzggKi8KKy8qIHsgZGctZG8gY29tcGlsZSB7IHRhcmdldCB7IHsg ISAqLSotZGFyd2luKiB9ICYmIGlscDMyIH0gfSB9ICovCisvKiB7IGRnLW9w dGlvbnMgIi13IC1tc3RhY2tyZWFsaWduIC1mb21pdC1mcmFtZS1wb2ludGVy IC1PMyAtbWFyY2g9YmFyY2Vsb25hIC1tcHJlZmVycmVkLXN0YWNrLWJvdW5k YXJ5PTQiIH0gKi8KKworc3RydWN0IHMgeworCWludCB4WzhdOworfTsKKwor dm9pZCBnKHN0cnVjdCBzICopOworCit2b2lkIGYoKQoreworCWludCBpOwor CXN0cnVjdCBzIHM7CisJZm9yIChpID0gMDsgaSA8IHNpemVvZihzLngpIC8g c2l6ZW9mKCpzLngpOyBpKyspIHMueFtpXSA9IDA7CisJZygmcyk7Cit9CisK Ky8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlciAiYW5kbFxbXFx0IFxd KlxcJC0xNixcW1xcdCBcXSolZXNwIiB9IH0gKi8KZGlmZiAtLWdpdCBhL2dj Yy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2luY29taW5nLTExLmMgYi9n Y2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9pbmNvbWluZy0xMS5jCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1Nzg3YWYKLS0t IC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4 Ni9pbmNvbWluZy0xMS5jCkBAIC0wLDAgKzEsMTggQEAKKy8qIFBSIHRhcmdl dC80MDgzOCAqLworLyogeyBkZy1kbyBjb21waWxlIHsgdGFyZ2V0IHsgeyAh ICotKi1kYXJ3aW4qIH0gJiYgaWxwMzIgfSB9IH0gKi8KKy8qIHsgZGctb3B0 aW9ucyAiLXcgLW1zdGFja3JlYWxpZ24gLWZvbWl0LWZyYW1lLXBvaW50ZXIg LU8zIC1tYXJjaD1iYXJjZWxvbmEgLW1wcmVmZXJyZWQtc3RhY2stYm91bmRh cnk9NCIgfSAqLworCit2b2lkIGcoKTsKKworaW50IHBbMTAwXTsKK2ludCBx WzEwMF07CisKK3ZvaWQgZigpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsg aSA8IDEwMDsgaSsrKSBwW2ldID0gMDsKKwlnKCk7CisJZm9yIChpID0gMDsg aSA8IDEwMDsgaSsrKSBxW2ldID0gMDsKK30KKworLyogeyBkZy1maW5hbCB7 IHNjYW4tYXNzZW1ibGVyICJhbmRsXFtcXHQgXF0qXFwkLTE2LFxbXFx0IFxd KiVlc3AiIH0gfSAqLwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2Mu dGFyZ2V0L2kzODYvaW5jb21pbmctMTIuYyBiL2djYy90ZXN0c3VpdGUvZ2Nj LnRhcmdldC9pMzg2L2luY29taW5nLTEyLmMKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMC4uZDdlZjEwMwotLS0gL2Rldi9udWxsCisrKyBi L2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2luY29taW5nLTEyLmMK QEAgLTAsMCArMSwyMCBAQAorLyogUFIgdGFyZ2V0LzQwODM4ICovCisvKiB7 IGRnLWRvIGNvbXBpbGUgeyB0YXJnZXQgeyB7ICEgKi0qLWRhcndpbiogfSAm JiBpbHAzMiB9IH0gfSAqLworLyogeyBkZy1vcHRpb25zICItdyAtbXN0YWNr cmVhbGlnbiAtTzIgLW1zc2UyIC1tcHJlZmVycmVkLXN0YWNrLWJvdW5kYXJ5 PTQiIH0gKi8KKwordHlwZWRlZiBpbnQgdjRzaSBfX2F0dHJpYnV0ZV9fICgo dmVjdG9yX3NpemUgKDE2KSkpOworCitzdHJ1Y3QgeCB7CisgICAgICAgdjRz aSB2OworICAgICAgIHY0c2kgdzsKK307CisKK3ZvaWQgeSh2b2lkICopOwor Cit2NHNpIHgodm9pZCkKK3sKKyAgICAgICBzdHJ1Y3QgeCB4OworICAgICAg IHkoJngpOworfQorCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIg ImFuZGxcW1xcdCBcXSpcXCQtMTYsXFtcXHQgXF0qJWVzcCIgfSB9ICovCmRp ZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9pbmNv bWluZy0xMy5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvaW5j b21pbmctMTMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw Li5iYmM4OTkzCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9n Y2MudGFyZ2V0L2kzODYvaW5jb21pbmctMTMuYwpAQCAtMCwwICsxLDE1IEBA CisvKiBQUiB0YXJnZXQvNDA4MzggKi8KKy8qIHsgZGctZG8gY29tcGlsZSB7 IHRhcmdldCB7IHsgISAqLSotZGFyd2luKiB9ICYmIGlscDMyIH0gfSB9ICov CisvKiB7IGRnLW9wdGlvbnMgIi13IC1tc3RhY2tyZWFsaWduIC1PMiAtbXBy ZWZlcnJlZC1zdGFjay1ib3VuZGFyeT00IiB9ICovCisKK2V4dGVybiBkb3Vi bGUgeShkb3VibGUgKnMzKTsKKworZXh0ZXJuIGRvdWJsZSBzMSwgczI7CisK K2RvdWJsZSB4KHZvaWQpCit7CisgIGRvdWJsZSBzMyA9IHMxICsgczI7Cisg IHJldHVybiB5KCZzMyk7Cit9CisKKy8qIHsgZGctZmluYWwgeyBzY2FuLWFz c2VtYmxlci1ub3QgImFuZGxcW1xcdCBcXSpcXCQtMTYsXFtcXHQgXF0qJWVz cCIgfSB9ICovCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy50YXJn ZXQvaTM4Ni9pbmNvbWluZy0xNC5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFy Z2V0L2kzODYvaW5jb21pbmctMTQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwLi5kMjcxNzlkCi0tLSAvZGV2L251bGwKKysrIGIvZ2Nj L3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvaW5jb21pbmctMTQuYwpAQCAt MCwwICsxLDE1IEBACisvKiBQUiB0YXJnZXQvNDA4MzggKi8KKy8qIHsgZGct ZG8gY29tcGlsZSB7IHRhcmdldCB7IHsgISAqLSotZGFyd2luKiB9ICYmIGls cDMyIH0gfSB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi13IC1tc3RhY2tyZWFs aWduIC1PMiAtbXByZWZlcnJlZC1zdGFjay1ib3VuZGFyeT00IiB9ICovCisK K2V4dGVybiBpbnQgeShpbnQgKnMzKTsKKworZXh0ZXJuIGludCBzMSwgczI7 CisKK2ludCB4KHZvaWQpCit7CisgIGludCBzMyA9IHMxICsgczI7CisgIHJl dHVybiB5KCZzMyk7Cit9CisKKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2Vt Ymxlci1ub3QgImFuZGxcW1xcdCBcXSpcXCQtMTYsXFtcXHQgXF0qJWVzcCIg fSB9ICovCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQv aTM4Ni9pbmNvbWluZy0xNS5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0 L2kzODYvaW5jb21pbmctMTUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwLi5lNmExNzQ5Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rl c3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvaW5jb21pbmctMTUuYwpAQCAtMCww ICsxLDE1IEBACisvKiBQUiB0YXJnZXQvNDA4MzggKi8KKy8qIHsgZGctZG8g Y29tcGlsZSB7IHRhcmdldCB7IHsgISAqLSotZGFyd2luKiB9ICYmIGlscDMy IH0gfSB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi13IC1tc3RhY2tyZWFsaWdu IC1PMiAtbXByZWZlcnJlZC1zdGFjay1ib3VuZGFyeT00IiB9ICovCisKK2V4 dGVybiBsb25nIGxvbmcgeShsb25nIGxvbmcgKnMzKTsKKworZXh0ZXJuIGxv bmcgbG9uZyBzMSwgczI7CisKK2xvbmcgbG9uZyB4KHZvaWQpCit7CisgIGxv bmcgbG9uZyBzMyA9IHMxICsgczI7CisgIHJldHVybiB5KCZzMyk7Cit9CisK Ky8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci1ub3QgImFuZGxcW1xc dCBcXSpcXCQtMTYsXFtcXHQgXF0qJWVzcCIgfSB9ICovCmRpZmYgLS1naXQg YS9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9pbmNvbWluZy02LmMg Yi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9pbmNvbWluZy02LmMK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWNjNGFiMwot LS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9p Mzg2L2luY29taW5nLTYuYwpAQCAtMCwwICsxLDE3IEBACisvKiBQUiB0YXJn ZXQvNDA4MzggKi8KKy8qIHsgZGctZG8gY29tcGlsZSB7IHRhcmdldCB7IHsg ISAqLSotZGFyd2luKiB9ICYmIGlscDMyIH0gfSB9ICovCisvKiB7IGRnLW9w dGlvbnMgIi13IC1tc3RhY2tyZWFsaWduIC1PMiAtbXNzZTIgLW1wcmVmZXJy ZWQtc3RhY2stYm91bmRhcnk9NCIgfSAqLworCit0eXBlZGVmIGludCB2NHNp IF9fYXR0cmlidXRlX18gKCh2ZWN0b3Jfc2l6ZSAoMTYpKSk7CisKK2V4dGVy biB2NHNpIHkodjRzaSAqczMpOworCitleHRlcm4gdjRzaSBzMSwgczI7CisK K3Y0c2kgeCh2b2lkKQoreworICB2NHNpIHMzID0gczEgKyBzMjsKKyAgcmV0 dXJuIHkoJnMzKTsKK30KKworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1i bGVyICJhbmRsXFtcXHQgXF0qXFwkLTE2LFxbXFx0IFxdKiVlc3AiIH0gfSAq LwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYv aW5jb21pbmctNy5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYv aW5jb21pbmctNy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAuLmNkZDYwMzcKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRl L2djYy50YXJnZXQvaTM4Ni9pbmNvbWluZy03LmMKQEAgLTAsMCArMSwxNiBA QAorLyogUFIgdGFyZ2V0LzQwODM4ICovCisvKiB7IGRnLWRvIGNvbXBpbGUg eyB0YXJnZXQgeyB7ICEgKi0qLWRhcndpbiogfSAmJiBpbHAzMiB9IH0gfSAq LworLyogeyBkZy1vcHRpb25zICItdyAtbXN0YWNrcmVhbGlnbiAtTzIgLW1z c2UyIC1tcHJlZmVycmVkLXN0YWNrLWJvdW5kYXJ5PTQiIH0gKi8KKwordHlw ZWRlZiBpbnQgdjRzaSBfX2F0dHJpYnV0ZV9fICgodmVjdG9yX3NpemUgKDE2 KSkpOworCitleHRlcm4gdjRzaSB5KHY0c2ksIHY0c2ksIHY0c2ksIHY0c2ks IHY0c2kpOworCitleHRlcm4gdjRzaSBzMSwgczI7CisKK3Y0c2kgeCh2b2lk KQoreworICByZXR1cm4geShzMSwgczIsIHMxLCBzMiwgczIpOworfQorCisv KiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIgImFuZGxcW1xcdCBcXSpc XCQtMTYsXFtcXHQgXF0qJWVzcCIgfSB9ICovCmRpZmYgLS1naXQgYS9nY2Mv dGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9pbmNvbWluZy04LmMgYi9nY2Mv dGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9pbmNvbWluZy04LmMKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmRkODgwMAotLS0gL2Rl di9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2lu Y29taW5nLTguYwpAQCAtMCwwICsxLDE4IEBACisvKiBQUiB0YXJnZXQvNDA4 MzggKi8KKy8qIHsgZGctZG8gY29tcGlsZSB7IHRhcmdldCB7IHsgISAqLSot ZGFyd2luKiB9ICYmIGlscDMyIH0gfSB9ICovCisvKiB7IGRnLW9wdGlvbnMg Ii13IC1tc3RhY2tyZWFsaWduIC1PMyAtbXNzZTIgLW1wcmVmZXJyZWQtc3Rh Y2stYm91bmRhcnk9NCIgfSAqLworCitmbG9hdAorZm9vIChmbG9hdCBmKQor eworICBmbG9hdCBhcnJheVsxMjhdOworICBmbG9hdCB4OworICBpbnQgaTsK KyAgZm9yIChpID0gMDsgaSA8IHNpemVvZihhcnJheSkgLyBzaXplb2YoKmFy cmF5KTsgaSsrKQorICAgIGFycmF5W2ldID0gZjsKKyAgZm9yIChpID0gMDsg aSA8IHNpemVvZihhcnJheSkgLyBzaXplb2YoKmFycmF5KTsgaSsrKQorICAg IHggKz0gYXJyYXlbaV07CisgIHJldHVybiB4OworfQorCisvKiB7IGRnLWZp bmFsIHsgc2Nhbi1hc3NlbWJsZXIgImFuZGxcW1xcdCBcXSpcXCQtMTYsXFtc XHQgXF0qJWVzcCIgfSB9ICovCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRl L2djYy50YXJnZXQvaTM4Ni9pbmNvbWluZy05LmMgYi9nY2MvdGVzdHN1aXRl L2djYy50YXJnZXQvaTM4Ni9pbmNvbWluZy05LmMKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMC4uZTQzY2JkNgotLS0gL2Rldi9udWxsCisr KyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2luY29taW5nLTku YwpAQCAtMCwwICsxLDE4IEBACisvKiBQUiB0YXJnZXQvNDA4MzggKi8KKy8q IHsgZGctZG8gY29tcGlsZSB7IHRhcmdldCB7IHsgISAqLSotZGFyd2luKiB9 ICYmIGlscDMyIH0gfSB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi13IC1tc3Rh Y2tyZWFsaWduIC1PMyAtbW5vLXNzZSAtbXByZWZlcnJlZC1zdGFjay1ib3Vu ZGFyeT00IiB9ICovCisKK2Zsb2F0Citmb28gKGZsb2F0IGYpCit7CisgIGZs b2F0IGFycmF5WzEyOF07CisgIGZsb2F0IHg7CisgIGludCBpOworICBmb3Ig KGkgPSAwOyBpIDwgc2l6ZW9mKGFycmF5KSAvIHNpemVvZigqYXJyYXkpOyBp KyspCisgICAgYXJyYXlbaV0gPSBmOworICBmb3IgKGkgPSAwOyBpIDwgc2l6 ZW9mKGFycmF5KSAvIHNpemVvZigqYXJyYXkpOyBpKyspCisgICAgeCArPSBh cnJheVtpXTsKKyAgcmV0dXJuIHg7Cit9CisKKy8qIHsgZGctZmluYWwgeyBz Y2FuLWFzc2VtYmxlci1ub3QgImFuZGxcW1xcdCBcXSpcXCQtMTYsXFtcXHQg XF0qJWVzcCIgfSB9ICovCmRpZmYgLS1naXQgYS9nY2MvdHJlZS12ZWN0LWRh dGEtcmVmcy5jIGIvZ2NjL3RyZWUtdmVjdC1kYXRhLXJlZnMuYwppbmRleCBj MzU3MGQzLi4wZGFhYTcwIDEwMDY0NAotLS0gYS9nY2MvdHJlZS12ZWN0LWRh dGEtcmVmcy5jCisrKyBiL2djYy90cmVlLXZlY3QtZGF0YS1yZWZzLmMKQEAg LTkyNyw2ICs5MjcsOCBAQCB2ZWN0X3ZlcmlmeV9kYXRhcmVmc19hbGlnbm1l bnQgKGxvb3BfdmVjX2luZm8gbG9vcF92aW5mbywgYmJfdmVjX2luZm8gYmJf dmluZm8pCiAgICAgewogICAgICAgZ2ltcGxlIHN0bXQgPSBEUl9TVE1UIChk cik7CiAgICAgICBzdG10X3ZlY19pbmZvIHN0bXRfaW5mbyA9IHZpbmZvX2Zv cl9zdG10IChzdG10KTsKKyAgICAgIGVudW0gbWFjaGluZV9tb2RlIG1vZGU7 CisgICAgICB1bnNpZ25lZCBpbnQgYWxpZ247CiAKICAgICAgIC8qIEZvciBp bnRlcmxlYXZpbmcsIG9ubHkgdGhlIGFsaWdubWVudCBvZiB0aGUgZmlyc3Qg YWNjZXNzIG1hdHRlcnMuICAqLwogICAgICAgaWYgKFNUTVRfVklORk9fU1RS SURFRF9BQ0NFU1MgKHN0bXRfaW5mbykKQEAgLTk0Nyw2ICs5NDksMTIgQEAg dmVjdF92ZXJpZnlfZGF0YXJlZnNfYWxpZ25tZW50IChsb29wX3ZlY19pbmZv IGxvb3BfdmluZm8sIGJiX3ZlY19pbmZvIGJiX3ZpbmZvKQogICAgICAgICAg ICAgfQogICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQorCisg ICAgICBtb2RlID0gVFlQRV9NT0RFIChTVE1UX1ZJTkZPX1ZFQ1RZUEUgKHN0 bXRfaW5mbykpOworICAgICAgYWxpZ24gPSBHRVRfTU9ERV9BTElHTk1FTlQg KG1vZGUpOworICAgICAgaWYgKGNmdW4tPmhhcmRfc3RhY2tfYWxpZ25tZW50 IDwgYWxpZ24pCisJY2Z1bi0+aGFyZF9zdGFja19hbGlnbm1lbnQgPSBhbGln bjsKKwogICAgICAgaWYgKHN1cHBvcnRhYmxlX2RyX2FsaWdubWVudCAhPSBk cl9hbGlnbmVkCiAgICAgICAgICAgJiYgdmVjdF9wcmludF9kdW1wX2luZm8g KFJFUE9SVF9BTElHTk1FTlQpKQogICAgICAgICBmcHJpbnRmICh2ZWN0X2R1 bXAsICJWZWN0b3JpemluZyBhbiB1bmFsaWduZWQgYWNjZXNzLiIpOwo= --0016e6d7ef1689fcf20476130223--