From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 127786 invoked by alias); 11 Jul 2017 21:20:02 -0000 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 Received: (qmail 127762 invoked by uid 89); 11 Jul 2017 21:20:01 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-26.9 required=5.0 tests=BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,RP_MATCHES_RCVD,SPF_HELO_PASS autolearn=ham version=3.3.2 spammy=recommendations, attacks, torn X-HELO: mx1.redhat.com Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Tue, 11 Jul 2017 21:19:59 +0000 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id E63404E357 for ; Tue, 11 Jul 2017 21:19:57 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com E63404E357 Authentication-Results: ext-mx09.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx09.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=law@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com E63404E357 Received: from localhost.localdomain (ovpn-116-33.phx2.redhat.com [10.3.116.33]) by smtp.corp.redhat.com (Postfix) with ESMTP id 83BA9729CB for ; Tue, 11 Jul 2017 21:19:57 +0000 (UTC) From: Jeff Law Subject: [PATCH][RFA/RFC] Stack clash mitigation patch 01/08 To: "gcc-patches@gcc.gnu.org >> gcc-patches" Message-ID: <93ce7fc1-e41e-282f-a574-234a83d57d7d@redhat.com> Date: Tue, 11 Jul 2017 21:20:00 -0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.1.0 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="------------38EAE3F1F1246AC3573163BF" X-IsSubscribed: yes X-SW-Source: 2017-07/txt/msg00557.txt.bz2 This is a multi-part message in MIME format. --------------38EAE3F1F1246AC3573163BF Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Content-length: 1561 This is the first patch in the stack-clash mitigation patches. It introduces a new style of stack probing -fstack-check=clash, including documentation of the new option, how it differs from -fstack-check=specific, etc. FWIW -fstack-check=specific is dreadfully named. I haven't tried to address that. It also introduces some dejagnu bits that are later used in tests. The idea was to introduce dejagnu functions which describe aspects of the target and have the tests adjust their expectations based on those dejagnu functions rather than on a target name. Finally, this patch introduces one new test of note. Some targets have call instructions that store a return pointer into the stack and we take advantage of that ISA feature to avoid some explicit probes. This optimization is restricted to cases where the caller does not have a frame of its own (because there's no reasonable way to tear that frame down on the return path). However, a sufficiently smart compiler could realize that a call to a noreturn function could be converted into a jump, even if the caller has a frame because that frame need not be torn down. Thus it would be possible for a function calling a noreturn function to advance the stack into the guard without actually touching the guard page, which breaks the assumption that the call instruction would touch the guard triggering a fault for that case. GCC doesn't currently optimize that case for various reasons, but it seemed prudent to go ahead and explicitly verify that with a test. Thoughts? Ok for the trunk? --------------38EAE3F1F1246AC3573163BF Content-Type: text/plain; charset=UTF-8; name="P1" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="P1" Content-length: 14201 CgkqIGNvbW1vbi5vcHQgKC1mc3RhY2stY2hlY2s9Y2xhc2gpOiBOZXcgb3B0 aW9uLgoJKiBmbGFnLXR5cGVzLmggKGVudW0gc3RhY2tfY2hlY2tfdHlwZSk6 IEltcHJvdmUgY29tbWVudHMuCgkoU1RBQ0tfQ0xBU0hfQlVJTFRJTl9TVEFD S19DSEVDSyk6IE5ldyBzdGFja19jaGVja190eXBlLgoJKiBvcHRzLmMgKGNv bW1vbl9oYW5kbGVfb3B0aW9uKTogSGFuZGxlIC1mc3RhY2stY2hlY2s9Y2xh c2guCgkqIGRvYy9pbnZva2UudGV4aSAoLWZzdGFjay1jaGVjaz1jbGFzaCk6 IERvY3VtZW50IG5ldyBvcHRpb24uCgkoLWZzdGFjay1jaGVjayk6IE5vdGUg YWRkaXRpb25hbCBwcm9ibGVtIHdpdGggLWZzdGFjay1jaGVjaz1nZW5lcmlj LgoJTm90ZSBkaWZmZXJlbmNlcyBiZXR3ZWVuICJjbGFzaCIgYW5kICJzcGVj aWZpYyIsIGZhbGxiYWNrcwoJYW5kIHJlY29tbWVuZGF0aW9ucyBiYXNlZCBv biBleHBlY3RlZCB1c2UuCgp0ZXN0c3VpdGUvCgoJKiBnY2MuZGcvc3RhY2st Y2hlY2stMi5jOiBOZXcgdGVzdC4KCSogbGliL3RhcmdldC1zdXBwb3J0cy5l eHAKCShjaGVja19lZmZlY3RpdmVfdGFyZ2V0X3N0YWNrX2NsYXNoX3Byb3Rl Y3RlZCk6IE5ldyBmdW5jdGlvbi4KCShjaGVja19lZmZlY3RpdmVfdGFyZ2V0 X2ZyYW1lX3BvaW50ZXJfZm9yX25vbl9sZWFmKTogTGlrZXdpc2UuCgkoY2hl Y2tfZWZmZWN0aXZlX3RhcmdldF9jYWxsZXJfaW1wbGljaXRfcHJvYmVzKTog TGlrZXdpc2UuCgoKCmNvbW1pdCAwMThmZmZiNTY5NTEyZWNjZDZiNzc0MTBl MjhjYWExNTkwMDlkZjVkCkF1dGhvcjogSmVmZiBMYXcgPGxhd0B0b3JzaW9u LnVzZXJzeXMucmVkaGF0LmNvbT4KRGF0ZTogICBUaHUgSnVuIDI5IDE2OjM2 OjIxIDIwMTcgLTA0MDAKCiAgICBSZWNvbmdpemUgbmV3IG9wdGlvbiArIHRl c3Qgb2Ygbm9yZXR1cm4gZnVuY3Rpb25zCiAgICBEZWphZ251IHByaW1pdGl2 aWVzIGZvciBzdGFjayBwcm9iZSBjaGVja2luZwoKZGlmZiAtLWdpdCBhL2dj Yy9jb21tb24ub3B0IGIvZ2NjL2NvbW1vbi5vcHQKaW5kZXggZTgxMTY1Yy4u OGVlYzI5ZiAxMDA2NDQKLS0tIGEvZ2NjL2NvbW1vbi5vcHQKKysrIGIvZ2Nj L2NvbW1vbi5vcHQKQEAgLTIzMDAsNyArMjMwMCw3IEBAIEFwcGx5IHZhcmlh YmxlIGV4cGFuc2lvbiB3aGVuIGxvb3BzIGFyZSB1bnJvbGxlZC4KIAogZnN0 YWNrLWNoZWNrPQogQ29tbW9uIFJlcG9ydCBSZWplY3ROZWdhdGl2ZSBKb2lu ZWQKLS1mc3RhY2stY2hlY2s9W25vfGdlbmVyaWN8c3BlY2lmaWNdCUluc2Vy dCBzdGFjayBjaGVja2luZyBjb2RlIGludG8gdGhlIHByb2dyYW0uCistZnN0 YWNrLWNoZWNrPVtub3xnZW5lcmljfGNsYXNofHNwZWNpZmljXQlJbnNlcnQg c3RhY2sgY2hlY2tpbmcgY29kZSBpbnRvIHRoZSBwcm9ncmFtLgogCiBmc3Rh Y2stY2hlY2sKIENvbW1vbiBBbGlhcyhmc3RhY2stY2hlY2s9LCBzcGVjaWZp Yywgbm8pCmRpZmYgLS1naXQgYS9nY2MvZG9jL2ludm9rZS50ZXhpIGIvZ2Nj L2RvYy9pbnZva2UudGV4aQppbmRleCAzZTVjZWU4Li5lNzJmM2U5IDEwMDY0 NAotLS0gYS9nY2MvZG9jL2ludm9rZS50ZXhpCisrKyBiL2djYy9kb2MvaW52 b2tlLnRleGkKQEAgLTExMzI0LDggKzExMzI0LDkgQEAgZ2VuZXJhdGlvbiBv ZiBjb2RlIHRvIGVuc3VyZSB0aGF0IHRoZXkgc2VlIHRoZSBzdGFjayBiZWlu ZyBleHRlbmRlZC4KIAogWW91IGNhbiBhZGRpdGlvbmFsbHkgc3BlY2lmeSBh IHN0cmluZyBwYXJhbWV0ZXI6IEBzYW1we25vfSBtZWFucyBubwogY2hlY2tp bmcsIEBzYW1we2dlbmVyaWN9IG1lYW5zIGZvcmNlIHRoZSB1c2Ugb2Ygb2xk LXN0eWxlIGNoZWNraW5nLAotQHNhbXB7c3BlY2lmaWN9IG1lYW5zIHVzZSB0 aGUgYmVzdCBjaGVja2luZyBtZXRob2QgYW5kIGlzIGVxdWl2YWxlbnQKLXRv IGJhcmUgQG9wdGlvbnstZnN0YWNrLWNoZWNrfS4KK0BzYW1we2NsYXNofSBt ZWFucyB1c2UgYSBjaGVja2luZyBtZXRob2QgZGVzaWduZWQgdG8gcHJldmVu dCBzdGFjayBjbGFzaAorc3R5bGUgYXR0YWNrcywgQHNhbXB7c3BlY2lmaWN9 IG1lYW5zIHVzZSB0YXJnZXQgc3BlY2lmaWMKK2NoZWNraW5nIG1ldGhvZHMg YW5kIGlzIGVxdWl2YWxlbnQgdG8gYmFyZSBAb3B0aW9uey1mc3RhY2stY2hl Y2t9LgogCiBPbGQtc3R5bGUgY2hlY2tpbmcgaXMgYSBnZW5lcmljIG1lY2hh bmlzbSB0aGF0IHJlcXVpcmVzIG5vIHNwZWNpZmljCiB0YXJnZXQgc3VwcG9y dCBpbiB0aGUgY29tcGlsZXIgYnV0IGNvbWVzIHdpdGggdGhlIGZvbGxvd2lu ZyBkcmF3YmFja3M6CkBAIC0xMTMzMyw3ICsxMTMzNCw4IEBAIHRhcmdldCBz dXBwb3J0IGluIHRoZSBjb21waWxlciBidXQgY29tZXMgd2l0aCB0aGUgZm9s bG93aW5nIGRyYXdiYWNrczoKIEBlbnVtZXJhdGUKIEBpdGVtCiBNb2RpZmll ZCBhbGxvY2F0aW9uIHN0cmF0ZWd5IGZvciBsYXJnZSBvYmplY3RzOiB0aGV5 IGFyZSBhbHdheXMKLWFsbG9jYXRlZCBkeW5hbWljYWxseSBpZiB0aGVpciBz aXplIGV4Y2VlZHMgYSBmaXhlZCB0aHJlc2hvbGQuCithbGxvY2F0ZWQgZHlu YW1pY2FsbHkgaWYgdGhlaXIgc2l6ZSBleGNlZWRzIGEgZml4ZWQgdGhyZXNo b2xkLiAgTm90ZSB0aGlzCittYXkgY2hhbmdlIHRoZSBzZW1hbnRpY3Mgb2Yg c29tZSBjb2RlLgogCiBAaXRlbQogRml4ZWQgbGltaXQgb24gdGhlIHNpemUg b2YgdGhlIHN0YXRpYyBmcmFtZSBvZiBmdW5jdGlvbnM6IHdoZW4gaXQgaXMK QEAgLTExMzQ1LDggKzExMzQ3LDI1IEBAIEluZWZmaWNpZW5jeTogYmVjYXVz ZSBvZiBib3RoIHRoZSBtb2RpZmllZCBhbGxvY2F0aW9uIHN0cmF0ZWd5IGFu ZCB0aGUKIGdlbmVyaWMgaW1wbGVtZW50YXRpb24sIGNvZGUgcGVyZm9ybWFu Y2UgaXMgaGFtcGVyZWQuCiBAZW5kIGVudW1lcmF0ZQogCi1Ob3RlIHRoYXQg b2xkLXN0eWxlIHN0YWNrIGNoZWNraW5nIGlzIGFsc28gdGhlIGZhbGxiYWNr IG1ldGhvZCBmb3IKLUBzYW1we3NwZWNpZmljfSBpZiBubyB0YXJnZXQgc3Vw cG9ydCBoYXMgYmVlbiBhZGRlZCBpbiB0aGUgY29tcGlsZXIuCitOb3RlIHRo YXQgb2xkLXN0eWxlIHN0YWNrIGNoZWNraW5nIGlzIHRoZSBmYWxsYmFjayBt ZXRob2QgZm9yIEBzYW1we2NsYXNofQorYW5kIEBzYW1we3NwZWNpZmljfSBp ZiBubyB0YXJnZXQgc3VwcG9ydCBmb3IgZWl0aGVyIG9mIHRob3NlIGhhcyBi ZWVuIGFkZGVkCitpbiB0aGUgY29tcGlsZXIuCisKK0Fsc28gbm90ZSB0aGF0 IEBzYW1we2NsYXNofSByZXF1aXJlcyB0YXJnZXQgZGVwZW5kZW50IHByb2xv Z3VlIHNlcXVlbmNlcyB0aGF0CithcmUgZGlmZmVyZW50IHRoYW4gQHNhbXB7 c3BlY2lmaWN9LiAgSG93ZXZlciwgc29tZSB0YXJnZXRzIG1heSB1c2UKK0Bz YW1we3NwZWNpZmljfSBzdHlsZSBwcm9sb2d1ZXMgaWYgdGhleSBoYXZlIG5v dCBkZWZpbmVkIEBzYW1we2NsYXNofSBzdHlsZQorcHJvbG9ndWVzIGF0IHRo ZSBsb3NzIG9mIHNvbWUgZnVuY3Rpb25hbGl0eSAoc3VjaCBhcyBAY29tbWFu ZHt2YWxncmluZH0pIGFuZAorcHJvdGVjdGlvbiBpbiBjZXJ0YWluIGRpZmZp Y3VsdCB0byB0cmlnZ2VyIGNvcm5lciBjYXNlcy4KKworQHNhbXB7c3BlY2lm aWN9IHN0eWxlIGNoZWNraW5nIGlzIGRlc2lnbmVkIGZvciBBZGEncyBuZWVk cyB0byBkZXRlY3QKK2luZmluaXRlIHJlY3Vyc2lvbiBhbmQgc3RhY2sgb3Zl cmZsb3dzLiAgQHNhbXB7c3BlY2lmaWN9IGlzIGFuIGV4Y2VsbGVudAorY2hv aWNlIHdoZW4gY29tcGlsaW5nIEFkYSBjb2RlLiAgSXQgaXMgbm90IGdlbmVy YWxseSBzdWZmaWNpZW50IHRvIHByb3RlY3QKK2FnYWluc3QgYXR0YWNrcyB0 aGF0IGp1bXAgdGhlIHN0YWNrIGd1YXJkIHBhZ2UuCisKK0BzYW1we2NsYXNo fSBpcyBkZXNpZ25lZCB0byBwcmV2ZW50IGp1bXBpbmcgdGhlIHN0YWNrIGd1 YXJkIHBhZ2UgYXMgc2VlbiBpbgorc3RhY2sgY2xhc2ggc3R5bGUgYXR0YWNr cy4gIEhvd2V2ZXIsIGl0IGRvZXMgbm90IGd1YXJhbnRlZSBzdWZmaWNpZW50 IHN0YWNrCitzcGFjZSB0byBoYW5kbGUgYSBzaWduYWwgaW4gdGhlIGV2ZW50 IHRoYXQgdGhlIHByb2dyYW0gaGl0cyB0aGUgc3RhY2sgZ3VhcmQKK2FuZCBp cyB0aHVzIGluY29tcGF0aWJsZSB3aXRoIEFkYSdzIG5lZWRzLgogCiBAaXRl bSAtZnN0YWNrLWxpbWl0LXJlZ2lzdGVyPUB2YXJ7cmVnfQogQGl0ZW14IC1m c3RhY2stbGltaXQtc3ltYm9sPUB2YXJ7c3ltfQpkaWZmIC0tZ2l0IGEvZ2Nj L2ZsYWctdHlwZXMuaCBiL2djYy9mbGFnLXR5cGVzLmgKaW5kZXggNWZhYWRl NS4uOWZhZDgyMiAxMDA2NDQKLS0tIGEvZ2NjL2ZsYWctdHlwZXMuaAorKysg Yi9nY2MvZmxhZy10eXBlcy5oCkBAIC0xNzgsMTEgKzE3OCwyNyBAQCBlbnVt IHN0YWNrX2NoZWNrX3R5cGUKIAogICAvKiBDaGVjayB0aGUgc3RhY2sgYW5k IHJlbHkgb24gdGhlIHRhcmdldCBjb25maWd1cmF0aW9uIGZpbGVzIHRvCiAg ICAgIGNoZWNrIHRoZSBzdGF0aWMgZnJhbWUgb2YgZnVuY3Rpb25zLCBpLmUu IHVzZSB0aGUgZ2VuZXJpYwotICAgICBtZWNoYW5pc20gb25seSBmb3IgZHlu YW1pYyBzdGFjayBhbGxvY2F0aW9ucy4gICovCisgICAgIG1lY2hhbmlzbSBv bmx5IGZvciBkeW5hbWljIHN0YWNrIGFsbG9jYXRpb25zLgorCisgICAgIFRo aXMgYXBwcm9hY2ggYXR0ZW1wdHMgdG8gZ3VhcmFudGVlIGVub3VnaCBzdGFj ayBzcGFjZSBpcyBhbHdheXMKKyAgICAgYXZhaWxhYmxlIHRvIGhhbmRsZSBh IHNpZ25hbCBhbmQgYXNzdW1lcyB0aGUgZW50aXJlIHByb2dyYW0gaXMKKyAg ICAgY29tcGlsZWQgd2l0aCBzdGFjayBjaGVja2luZy4gICovCiAgIFNUQVRJ Q19CVUlMVElOX1NUQUNLX0NIRUNLLAogCisgIC8qIENoZWNrIHRoZSBzdGFj ayBhbmQgcmVseSBvbiB0aGUgdGFyZ2V0IGNvbmZpZ3VyYXRpb24gZmlsZXMg dG8KKyAgICAgY2hlY2sgdGhlIHN0YXRpYyBmcmFtZSBvZiBmdW5jdGlvbnMs IGkuZS4gdXNlIHRoZSBnZW5lcmljCisgICAgIG1lY2hhbmlzbSBvbmx5IGZv ciBkeW5hbWljIHN0YWNrIGFsbG9jYXRpb25zLgorCisgICAgIFRoaXMgYXBw cm9hY2ggYXR0ZW1wdHMgdG8gbWFrZSBjb2RlIGltbXVuZSB0byBhdHRhY2tz IHdoaWNoIGp1bXAKKyAgICAgdGhlIHN0YWNrIGd1YXJkIHBhZ2UgYW5kIHN0 YWNrIGNsYXNoIHN0eWxlIGF0dGFja3MuICBJdCB3b3JrcworICAgICBpcyBt aXhlZCBjb2RlLCBidXQgZG9lcyBub3QgZ3VhcmFudGVlIHRoZSBhYmlsaXR5 IHRvIGhhbmRsZSBhCisgICAgIHNpZ25hbC4gICovCisgIFNUQUNLX0NMQVNI X0JVSUxUSU5fU1RBQ0tfQ0hFQ0ssCisKICAgLyogQ2hlY2sgdGhlIHN0YWNr IGFuZCBlbnRpcmVseSByZWx5IG9uIHRoZSB0YXJnZXQgY29uZmlndXJhdGlv bgotICAgICBmaWxlcywgaS5lLiBkbyBub3QgdXNlIHRoZSBnZW5lcmljIG1l Y2hhbmlzbSBhdCBhbGwuICAqLworICAgICBmaWxlcywgaS5lLiBkbyBub3Qg dXNlIHRoZSBnZW5lcmljIG1lY2hhbmlzbSBhdCBhbGwuICBUaGlzCisgICAg IGRvZXMgbm90IHByZXZlbnQgc3RhY2sgZ3VhcmQganVtcGluZyBhbmQgc3Rh Y2sgY2xhc2ggc3R5bGUKKyAgICAgYXR0YWNrcy4gICovCiAgIEZVTExfQlVJ TFRJTl9TVEFDS19DSEVDSwogfTsKIApkaWZmIC0tZ2l0IGEvZ2NjL29wdHMu YyBiL2djYy9vcHRzLmMKaW5kZXggNzQ2MGMyYi4uNjFmNWJiMCAxMDA2NDQK LS0tIGEvZ2NjL29wdHMuYworKysgYi9nY2Mvb3B0cy5jCkBAIC0yMjQzLDYg KzIyNDMsMTkgQEAgY29tbW9uX2hhbmRsZV9vcHRpb24gKHN0cnVjdCBnY2Nf b3B0aW9ucyAqb3B0cywKIAlvcHRzLT54X2ZsYWdfc3RhY2tfY2hlY2sgPSBT VEFDS19DSEVDS19CVUlMVElOCiAJCQkgICA/IEZVTExfQlVJTFRJTl9TVEFD S19DSEVDSwogCQkJICAgOiBHRU5FUklDX1NUQUNLX0NIRUNLOworICAgICAg ZWxzZSBpZiAoIXN0cmNtcCAoYXJnLCAiY2xhc2giKSkKKwl7CisJICAvKiBU aGlzIGlzIHRoZSBzdGFjayBjaGVja2luZyBtZXRob2QsIGRlc2lnbmVkIHRv IHByZXZlbnQKKwkgICAgIHN0YWNrLWNsYXNoIGF0dGFja3MuICAqLworCSAg aWYgKCFTVEFDS19HUk9XU19ET1dOV0FSRCkKKwkgICAgc29ycnkgKCItZnN0 YWNrLWNoZWNrPWNsYXNoIG5vdCBpbXBsZW1lbnRlZCBvbiB0aGlzIHRhcmdl dCIpOworCSAgZWxzZQorCSAgICBvcHRzLT54X2ZsYWdfc3RhY2tfY2hlY2sg PSAoU1RBQ0tfQ0hFQ0tfQlVJTFRJTgorCQkJCSAgICAgICAgPyBGVUxMX0JV SUxUSU5fU1RBQ0tfQ0hFQ0sKKwkJCQkJOiAoU1RBQ0tfQ0hFQ0tfU1RBVElD X0JVSUxUSU4KKwkJCQkJICAgPyBTVEFDS19DTEFTSF9CVUlMVElOX1NUQUNL X0NIRUNLCisJCQkJCSAgIDogR0VORVJJQ19TVEFDS19DSEVDSykpOworCX0K ICAgICAgIGVsc2UgaWYgKCFzdHJjbXAgKGFyZywgInNwZWNpZmljIikpCiAJ LyogVGhpcyBpcyB0aGUgbmV3IHN0YWNrIGNoZWNraW5nIG1ldGhvZC4gICov CiAJb3B0cy0+eF9mbGFnX3N0YWNrX2NoZWNrID0gU1RBQ0tfQ0hFQ0tfQlVJ TFRJTgpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvc3RhY2st Y2hlY2stMi5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvc3RhY2stY2hlY2st Mi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiZTdk ZWUKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy9z dGFjay1jaGVjay0yLmMKQEAgLTAsMCArMSw2NiBAQAorLyogVGhlIGdvYWwg aGVyZSBpcyB0byBlbnN1cmUgdGhhdCB3ZSBuZXZlciBjb25zaWRlciBhIGNh bGwgdG8gYSBub3JldHVybgorICAgZnVuY3Rpb24gYXMgYSBwb3RlbnRpYWwg dGFpbCBjYWxsLgorCisgICBSaWdodCBub3cgR0NDIGRpc2NvdmVycyBwb3Rl bnRpYWwgdGFpbCBjYWxscyBieSBsb29raW5nIGF0IHRoZQorICAgcHJlZGVj ZXNzb3JzIG9mIHRoZSBleGl0IGJsb2NrLiAgQSBjYWxsIHRvIGEgbm9uLXJl dHVybiBmdW5jdGlvbgorICAgaGFzIG5vIHN1Y2Nlc3NvcnMgYW5kIHRodXMg Y2FuIG5ldmVyIG1hdGNoIHRoYXQgZmlyc3QgZmlsdGVyLgorCisgICBCdXQg dGhhdCBjb3VsZCBjaGFuZ2Ugb25lIGRheSBhbmQgd2Ugd2FudCB0byBjYXRj aCBpdC4gIFRoZSBwcm9ibGVtCisgICBpcyB0aGUgY29tcGlsZXIgY291bGQg cG90ZW50aWFsbHkgb3B0aW1pemUgYSB0YWlsIGNhbGwgdG8gYSBub25yZXR1 cm4KKyAgIGZ1bmN0aW9uLCBldmVuIGlmIHRoZSBjYWxsZXIgaGFzIGEgZnJh bWUuICBUaGF0IGJyZWFrcyB0aGUgYXNzdW1wdGlvbgorICAgdGhhdCBjYWxs cyBwcm9iZSAqc3Agd2hlbiBzYXZpbmcgdGhlIHJldHVybiBhZGRyZXNzIHRo YXQgc29tZSB0YXJnZXRzCisgICBkZXBlbmQgb24gdG8gZWxpZGUgc3RhY2sg cHJvYmVzLiAgKi8KKworLyogeyBkZy1kbyBjb21waWxlIH0gKi8KKy8qIHsg ZGctb3B0aW9ucyAiLU8yIC1mc3RhY2stY2hlY2s9Y2xhc2ggLWZkdW1wLXRy ZWUtdGFpbGMgLWZkdW1wLXRyZWUtb3B0aW1pemVkIiB9ICovCisvKiB7IGRn LXJlcXVpcmUtZWZmZWN0aXZlLXRhcmdldCBzdGFja19jbGFzaF9wcm90ZWN0 ZWQgfSAqLworCitleHRlcm4gdm9pZCBmb28gKHZvaWQpIF9fYXR0cmlidXRl X18gKChfX25vcmV0dXJuX18pKTsKKworCit2b2lkCit0ZXN0X2RpcmVjdF8x ICh2b2lkKQoreworICBmb28gKCk7Cit9CisKK3ZvaWQKK3Rlc3RfZGlyZWN0 XzIgKHZvaWQpCit7CisgIHJldHVybiBmb28gKCk7Cit9CisKK3ZvaWQgKCpp bmRpcmVjdCkodm9pZClfX2F0dHJpYnV0ZV9fICgobm9yZXR1cm4pKTsKKwor Cit2b2lkCit0ZXN0X2luZGlyZWN0XzEgKCkKK3sKKyAgKCppbmRpcmVjdCko KTsKK30KKwordm9pZAordGVzdF9pbmRpcmVjdF8yICh2b2lkKQoreworICBy ZXR1cm4gKCppbmRpcmVjdCkoKTs7Cit9CisKKwordHlwZWRlZiB2b2lkICgq cHZmbikoKSBfX2F0dHJpYnV0ZV9fICgobm9yZXR1cm4pKTsKKwordm9pZCAo KmluZGlyZWN0X2Nhc3RlZCkodm9pZCk7CisKK3ZvaWQKK3Rlc3RfaW5kaXJl Y3RfY2FzdGVkXzEgKCkKK3sKKyAgKCoocHZmbilpbmRpcmVjdF9jYXN0ZWQp KCk7Cit9CisKK3ZvaWQKK3Rlc3RfaW5kaXJlY3RfY2FzdGVkXzIgKHZvaWQp Cit7CisgIHJldHVybiAoKihwdmZuKWluZGlyZWN0X2Nhc3RlZCkoKTsKK30K Ky8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC1ub3QgInRhaWwgY2Fs bCIgInRhaWxjIiB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUt ZHVtcC1ub3QgInRhaWwgY2FsbCIgIm9wdGltaXplZCIgfSB9ICovCisKZGlm ZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvbGliL3RhcmdldC1zdXBwb3J0cy5l eHAgYi9nY2MvdGVzdHN1aXRlL2xpYi90YXJnZXQtc3VwcG9ydHMuZXhwCmlu ZGV4IGZlNWU3NzcuLjYxZmZiNjggMTAwNjQ0Ci0tLSBhL2djYy90ZXN0c3Vp dGUvbGliL3RhcmdldC1zdXBwb3J0cy5leHAKKysrIGIvZ2NjL3Rlc3RzdWl0 ZS9saWIvdGFyZ2V0LXN1cHBvcnRzLmV4cApAQCAtODQ2OCwzICs4NDY4LDYx IEBAIHByb2MgY2hlY2tfZWZmZWN0aXZlX3RhcmdldF9hcm1fY29wcm9jNF9v ayB7IH0gewogICAgIHJldHVybiBbY2hlY2tfY2FjaGVkX2VmZmVjdGl2ZV90 YXJnZXQgYXJtX2NvcHJvYzRfb2sgXAogCQljaGVja19lZmZlY3RpdmVfdGFy Z2V0X2FybV9jb3Byb2M0X29rX25vY2FjaGVdCiB9CisKKyMgUmV0dXJuIDEg aWYgdGhlIHRhcmdldCBoYXMgc3VwcG9ydCBmb3Igc3RhY2sgcHJvYmluZyBk ZXNpZ25lZAorIyB0byBhdm9pZCBzdGFjay1jbGFzaCBzdHlsZSBhdHRhY2tz CisjCisjIFRoaXMgaXMgdXNlZCB0byByZXN0cmljdCB0aGUgc3RhY2stY2xh c2ggbWl0aWdhdGlvbiB0ZXN0cyB0bworIyBqdXN0IHRob3NlIHRhcmdldHMg dGhhdCBoYXZlIGJlZW4gZXhwbGljaXRseSBzdXBwb3J0ZWQKKyMgCisjIElu IGFkZGl0aW9uIHRvIHRoZSBwcm9sb2d1ZSB3b3JrIG9uIHRob3NlIHRhcmdl dHMsIGVhY2ggdGFyZ2V0J3MKKyMgcHJvcGVydGllcyBzaG91bGQgYmUgZGVz Y3JpYmVkIGluIHRoZSBmdW5jdGlvbnMgYmVsb3cgc28gdGhhdAorIyB0ZXN0 cyBkbyBub3QgYmVjb21lIGEgbWVzcyBvZiB1bnJlYWRhYmxlIHRhcmdldCBj b25kaXRpb25zLgorIyAKK3Byb2MgY2hlY2tfZWZmZWN0aXZlX3RhcmdldF9z dGFja19jbGFzaF9wcm90ZWN0ZWQgeyB9IHsKKyAgaWYgeyBbaXN0YXJnZXQg YWFyY2gqLSotKl0gfHwgW2lzdGFyZ2V0IHg4Nl82NC0qLSpdCisgICAgICAg fHwgW2lzdGFyZ2V0IGk/ODYtKi0qXSB8fCBbaXN0YXJnZXQgczM5MCotKi0q XQorICAgICAgIHx8IFtpc3RhcmdldCBwb3dlcnBjKi0qLSpdIHx8IFtpc3Rh cmdldCByczYwMDAqLSotKl0gfSB7CisJcmV0dXJuIDEKKyAgfQorICByZXR1 cm4gMAorfQorCisjIFJldHVybiAxIGlmIHRoZSB0YXJnZXQgY3JlYXRlcyBh IGZyYW1lIHBvaW50ZXIgZm9yIG5vbi1sZWFmIGZ1bmN0aW9ucworIyBOb3Rl IHdlIGlnbm9yZSBjYXNlcyB3aGVyZSB3ZSBhcHBseSB0YWlsIGNhbGwgb3B0 aW1pemF0aW9uIGhlcmUuCitwcm9jIGNoZWNrX2VmZmVjdGl2ZV90YXJnZXRf ZnJhbWVfcG9pbnRlcl9mb3Jfbm9uX2xlYWYgeyB9IHsKKyAgaWYgeyBbaXN0 YXJnZXQgYWFyY2gqLSotKl0gfSB7CisJcmV0dXJuIDEKKyAgfQorICByZXR1 cm4gMAorfQorCisjIFJldHVybiAxIGlmIHRoZSB0YXJnZXQncyBjYWxsaW5n IHNlcXVlbmNlIG9yIGl0cyBBQkkKKyMgY3JlYXRlIGltcGxpY2l0IHN0YWNr IHByb2JlcyBhdCAqc3AgYXQgZnVuY3Rpb24KKyMgZW50cnkuCitwcm9jIGNo ZWNrX2VmZmVjdGl2ZV90YXJnZXRfY2FsbGVyX2ltcGxpY2l0X3Byb2JlcyB7 IH0geworICBpZiB7IFtpc3RhcmdldCB4ODZfNjQtKi0qXSB8fCBbaXN0YXJn ZXQgaT84Ni0qLSpdCisgICAgICAgfHwgW2lzdGFyZ2V0IHBvd2VycGMqLSot Kl0gfHwgW2lzdGFyZ2V0IHJzNjAwMCotKi0qXSB9IHsKKwlyZXR1cm4gMQor ICB9CisKKyAgIyBzMzkwJ3MgQUJJIGhhcyBhIHJlZ2lzdGVyIHNhdmUgYXJl YSBhbGxvY2F0ZWQgYnkgdGhlCisgICMgY2FsbGVyIGZvciB1c2UgYnkgdGhl IGNhbGxlZS4gIFRoZSBtZXJlIGV4aXN0ZW5jZSBkb2VzCisgICMgbm90IGNv bnN0aXR1dGUgYSBwcm9iZSBieSB0aGUgY2FsbGVyLCBidXQgd2hlbiB0aGUg c2xvdHMKKyAgIyB1c2VkIGJ5IHRoZSBjYWxsZWUgdGhvc2Ugc3RvcmVzIGFy ZSBpbXBsaWNpdCBwcm9iZXMKKyAgaWYgeyBbaXN0YXJnZXQgczM5MCotKi0q XSB9IHsKKwlyZXR1cm4gMQorICB9CisKKyAgcmV0dXJuIDAKK30KKworIyBU aGUgc3RhY2sgcmVhbGlnbm1lbnQgb2Z0ZW4gY2F1c2VzIHJlc2lkdWFsIHN0 YWNrIGFsbG9jYXRpb25zIGFuZAorIyBjYW4gYWxzbyBtYWtlIGl0IGRpZmZp Y3VsdCB0byBlbGlkZSBsb29wcyBvciByZXNpZHVhbCBhbGxvY2F0aW9ucwor IyBmb3IgZHluYW1pYyBhbGxvY2F0aW9ucworcHJvYyBjaGVja19lZmZlY3Rp dmVfdGFyZ2V0X2NhbGxlZV9yZWFsaWduc19zdGFjayB7IH0geworICBpZiB7 IFtpc3RhcmdldCB4ODZfNjQtKi0qXSB8fCBbaXN0YXJnZXQgaT84Ni0qLSpd IH0geworCXJldHVybiAxCisgIH0KKyAgcmV0dXJuIDAKK30K --------------38EAE3F1F1246AC3573163BF--