From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 99527 invoked by alias); 27 Oct 2016 09:55:34 -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 99517 invoked by uid 89); 27 Oct 2016 09:55:33 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-3.1 required=5.0 tests=BAYES_00,KAM_LOTSOFHASH,RP_MATCHES_RCVD,SPF_PASS autolearn=ham version=3.3.2 spammy=sk:TARGET, dgskipif, dg-skip-if, sk:!TARGET X-HELO: foss.arm.com Received: from foss.arm.com (HELO foss.arm.com) (217.140.101.70) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Thu, 27 Oct 2016 09:55:22 +0000 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.72.51.249]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id A70AC6D; Thu, 27 Oct 2016 02:55:21 -0700 (PDT) Received: from [10.2.206.246] (e107157-lin.cambridge.arm.com [10.2.206.246]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 372753F218; Thu, 27 Oct 2016 02:55:21 -0700 (PDT) Subject: Re: [PATCH 3/7, GCC, ARM, V8M] ARMv8-M Security Extension's cmse_nonsecure_entry: __acle_se label and bxns return To: Kyrill Tkachov , gcc-patches@gcc.gnu.org References: <5796116C.6010100@arm.com> <579612B8.7030401@arm.com> <580F8849.80001@arm.com> <58107F7B.3060507@foss.arm.com> From: "Andre Vieira (lists)" Message-ID: <5811CF07.8000501@arm.com> Date: Thu, 27 Oct 2016 09:55:00 -0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.2.0 MIME-Version: 1.0 In-Reply-To: <58107F7B.3060507@foss.arm.com> Content-Type: multipart/mixed; boundary="------------000301090102090206030303" X-IsSubscribed: yes X-SW-Source: 2016-10/txt/msg02210.txt.bz2 This is a multi-part message in MIME format. --------------000301090102090206030303 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Content-length: 3823 On 26/10/16 11:03, Kyrill Tkachov wrote: > Hi Andre, > > On 25/10/16 17:28, Andre Vieira (lists) wrote: >> On 25/07/16 14:23, Andre Vieira (lists) wrote: >>> This patch extends support for the ARMv8-M Security Extensions >>> 'cmse_nonsecure_entry' attribute in two ways: >>> >>> 1) Generate two labels for the function, the regular function name and >>> one with the function's name appended to '__acle_se_', this will trigger >>> the linker to create a secure gateway veneer for this entry function. >>> 2) Return from cmse_nonsecure_entry marked functions using bxns. >>> >>> See Section 5.4 of ARM®v8-M Security Extensions >>> (http://infocenter.arm.com/help/topic/com.arm.doc.ecm0359818/index.html). >>> >>> >>> >>> *** gcc/ChangeLog *** >>> 2016-07-25 Andre Vieira >>> Thomas Preud'homme >>> >>> * config/arm/arm.c (use_return_insn): Change to return with >>> bxns >>> when cmse_nonsecure_entry. >>> (output_return_instruction): Likewise. >>> (arm_output_function_prologue): Likewise. >>> (thumb_pop): Likewise. >>> (thumb_exit): Likewise. >>> (arm_function_ok_for_sibcall): Disable sibcall for entry >>> functions. >>> (arm_asm_declare_function_name): New. >>> * config/arm/arm-protos.h (arm_asm_declare_function_name): New. >>> * config/arm/elf.h (ASM_DECLARE_FUNCTION_NAME): Redefine to >>> use arm_asm_declare_function_name. >>> >>> *** gcc/testsuite/ChangeLog *** >>> 2016-07-25 Andre Vieira >>> Thomas Preud'homme >>> >>> * gcc.target/arm/cmse/cmse-2.c: New. >>> * gcc.target/arm/cmse/cmse-4.c: New. >>> >> Hi, >> >> Rebased previous patch on top of trunk as requested. No changes to >> ChangeLog. >> >> Cheers, >> Andre > > @@ -19919,6 +19932,42 @@ output_return_instruction (rtx operand, bool > really_return, bool reverse, > return ""; > } > > +/* Output in FILE asm statements needed to declare the NAME of the > function > + defined by its DECL node. */ > + > +void > +arm_asm_declare_function_name (FILE *file, const char *name, tree decl) > +{ > + size_t cmse_name_len; > + char *cmse_name = 0; > + char cmse_prefix[] = "__acle_se_"; > + > + if (use_cmse && lookup_attribute ("cmse_nonsecure_entry", > + DECL_ATTRIBUTES (decl))) > + { > + cmse_name_len = sizeof (cmse_prefix) + strlen (name); > + cmse_name = XALLOCAVEC (char, cmse_name_len); > + snprintf (cmse_name, cmse_name_len, "%s%s", cmse_prefix, name); > + targetm.asm_out.globalize_label (file, cmse_name); > + } > + > > I think this definitely warrants a quick comment explaining why you're > adding > __acle_se_ to the function label > > > /* Scan INSN just before assembler is output for it. > @@ -25247,6 +25301,12 @@ thumb2_expand_return (bool simple_return) > > if (!simple_return && saved_regs_mask) > { > + /* TODO: Verify that this path is never taken for > cmse_nonsecure_entry > + functions or adapt code to handle according to ACLE. This path > should > + not be reachable for cmse_nonsecure_entry functions though we prefer > + to guard it for now to ensure that future code changes do not > silently > + change this behavior. */ > > I think you mean s/guard/assert/ > > + gcc_assert (!IS_CMSE_ENTRY (arm_current_func_type ())); > if (num_regs == 1) > { > rtx par = gen_rtx_PARALLEL (VOIDmode, rtvec_alloc (2)); > > This is ok with those changes. > Thanks, > Kyrill > Hi, Reworked comments. Also got rid of a redundant 'if (cmse_name)' in 'arm_asm_declare_function_name'. No change to ChangeLogs. Cheers, Andre --------------000301090102090206030303 Content-Type: text/plain; charset=UTF-8; name="diff3" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="diff3" Content-length: 14889 ZGlmZiAtLWdpdCBhL2djYy9jb25maWcvYXJtL2FybS1wcm90b3MuaCBiL2dj Yy9jb25maWcvYXJtL2FybS1wcm90b3MuaAppbmRleCBlN2Q5ZjgyNDU5NmE2 MmY1Yzk5MDAwOTQwZjYxOTBhYjZhZWU5MjU1Li5hOWI4MzI2YzI3NzBjMWY5 YTk3ODc3NDNjYjVmYWE1NDllNmI3ZDAyIDEwMDY0NAotLS0gYS9nY2MvY29u ZmlnL2FybS9hcm0tcHJvdG9zLmgKKysrIGIvZ2NjL2NvbmZpZy9hcm0vYXJt LXByb3Rvcy5oCkBAIC0zMSw2ICszMSw3IEBAIGV4dGVybiBpbnQgYXJtX3Zv bGF0aWxlX2Z1bmMgKHZvaWQpOwogZXh0ZXJuIHZvaWQgYXJtX2V4cGFuZF9w cm9sb2d1ZSAodm9pZCk7CiBleHRlcm4gdm9pZCBhcm1fZXhwYW5kX2VwaWxv Z3VlIChib29sKTsKIGV4dGVybiB2b2lkIGFybV9kZWNsYXJlX2Z1bmN0aW9u X25hbWUgKEZJTEUgKiwgY29uc3QgY2hhciAqLCB0cmVlKTsKK2V4dGVybiB2 b2lkIGFybV9hc21fZGVjbGFyZV9mdW5jdGlvbl9uYW1lIChGSUxFICosIGNv bnN0IGNoYXIgKiwgdHJlZSk7CiBleHRlcm4gdm9pZCB0aHVtYjJfZXhwYW5k X3JldHVybiAoYm9vbCk7CiBleHRlcm4gY29uc3QgY2hhciAqYXJtX3N0cmlw X25hbWVfZW5jb2RpbmcgKGNvbnN0IGNoYXIgKik7CiBleHRlcm4gdm9pZCBh cm1fYXNtX291dHB1dF9sYWJlbHJlZiAoRklMRSAqLCBjb25zdCBjaGFyICop OwpkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9hcm0vYXJtLmMgYi9nY2MvY29u ZmlnL2FybS9hcm0uYwppbmRleCA0MGVkZDNjN2ZiOTU2N2ZhZGZkZGMzNmJl Nzc3ZmJmNTNjYmI4ZTlmLi5mZGJkZDQyMzIzNmU3Mzg4ODAyYmM0YmQ1Njhm MjYwZDk1NDg1YmJlIDEwMDY0NAotLS0gYS9nY2MvY29uZmlnL2FybS9hcm0u YworKysgYi9nY2MvY29uZmlnL2FybS9hcm0uYwpAQCAtMzg5NSw2ICszODk1 LDExIEBAIHVzZV9yZXR1cm5faW5zbiAoaW50IGlzY29uZCwgcnR4IHNpYmxp bmcpCiAJcmV0dXJuIDA7CiAgICAgfQogCisgIC8qIEFSTXY4LU0gbm9uc2Vj dXJlIGVudHJ5IGZ1bmN0aW9uIG5lZWQgdG8gdXNlIGJ4bnMgdG8gcmV0dXJu IGFuZCB0aHVzIG5lZWQKKyAgICAgc2V2ZXJhbCBpbnN0cnVjdGlvbnMgaWYg YW55dGhpbmcgbmVlZHMgdG8gYmUgcG9wcGVkLiAgKi8KKyAgaWYgKHNhdmVk X2ludF9yZWdzICYmIElTX0NNU0VfRU5UUlkgKGZ1bmNfdHlwZSkpCisgICAg cmV0dXJuIDA7CisKICAgLyogSWYgdGhlcmUgYXJlIHNhdmVkIHJlZ2lzdGVy cyBidXQgdGhlIExSIGlzbid0IHNhdmVkLCB0aGVuIHdlIG5lZWQKICAgICAg dHdvIGluc3RydWN0aW9ucyBmb3IgdGhlIHJldHVybi4gICovCiAgIGlmIChz YXZlZF9pbnRfcmVncyAmJiAhKHNhdmVkX2ludF9yZWdzICYgKDEgPDwgTFJf UkVHTlVNKSkpCkBAIC02OTMzLDYgKzY5MzgsMTEgQEAgYXJtX2Z1bmN0aW9u X29rX2Zvcl9zaWJjYWxsICh0cmVlIGRlY2wsIHRyZWUgZXhwKQogICBpZiAo SVNfSU5URVJSVVBUIChmdW5jX3R5cGUpKQogICAgIHJldHVybiBmYWxzZTsK IAorICAvKiBBUk12OC1NIG5vbi1zZWN1cmUgZW50cnkgZnVuY3Rpb25zIG5l ZWQgdG8gcmV0dXJuIHdpdGggYnhucyB3aGljaCBpcyBvbmx5CisgICAgIGdl bmVyYXRlZCBmb3IgZW50cnkgZnVuY3Rpb25zIHRoZW1zZWx2ZXMuICAqLwor ICBpZiAoSVNfQ01TRV9FTlRSWSAoYXJtX2N1cnJlbnRfZnVuY190eXBlICgp KSkKKyAgICByZXR1cm4gZmFsc2U7CisKICAgaWYgKCFWT0lEX1RZUEVfUCAo VFJFRV9UWVBFIChERUNMX1JFU1VMVCAoY2Z1bi0+ZGVjbCkpKSkKICAgICB7 CiAgICAgICAvKiBDaGVjayB0aGF0IHRoZSByZXR1cm4gdmFsdWUgbG9jYXRp b25zIGFyZSB0aGUgc2FtZS4gIEZvcgpAQCAtMTk3NjgsNiArMTk3NzgsNyBA QCBvdXRwdXRfcmV0dXJuX2luc3RydWN0aW9uIChydHggb3BlcmFuZCwgYm9v bCByZWFsbHlfcmV0dXJuLCBib29sIHJldmVyc2UsCiAJIChlLmcuIGludGVy d29ya2luZykgdGhlbiB3ZSBjYW4gbG9hZCB0aGUgcmV0dXJuIGFkZHJlc3MK IAkgZGlyZWN0bHkgaW50byB0aGUgUEMuICBPdGhlcndpc2Ugd2UgbXVzdCBs b2FkIGl0IGludG8gTFIuICAqLwogICAgICAgaWYgKHJlYWxseV9yZXR1cm4K KwkgICYmICFJU19DTVNFX0VOVFJZIChmdW5jX3R5cGUpCiAJICAmJiAoSVNf SU5URVJSVVBUIChmdW5jX3R5cGUpIHx8ICFUQVJHRVRfSU5URVJXT1JLKSkK IAlyZXR1cm5fcmVnID0gcmVnX25hbWVzW1BDX1JFR05VTV07CiAgICAgICBl bHNlCkBAIC0xOTkwOCw4ICsxOTkxOSwxMCBAQCBvdXRwdXRfcmV0dXJuX2lu c3RydWN0aW9uIChydHggb3BlcmFuZCwgYm9vbCByZWFsbHlfcmV0dXJuLCBi b29sIHJldmVyc2UsCiAJICBicmVhazsKIAogCWRlZmF1bHQ6CisJICBpZiAo SVNfQ01TRV9FTlRSWSAoZnVuY190eXBlKSkKKwkgICAgc25wcmludGYgKGlu c3RyLCBzaXplb2YgKGluc3RyKSwgImJ4bnMlc1x0JSV8bHIiLCBjb25kaXRp b25hbCk7CiAJICAvKiBVc2UgYnggaWYgaXQncyBhdmFpbGFibGUuICAqLwot CSAgaWYgKGFybV9hcmNoNSB8fCBhcm1fYXJjaDR0KQorCSAgZWxzZSBpZiAo YXJtX2FyY2g1IHx8IGFybV9hcmNoNHQpCiAJICAgIHNwcmludGYgKGluc3Ry LCAiYnglc1x0JSV8bHIiLCBjb25kaXRpb25hbCk7CiAJICBlbHNlCiAJICAg IHNwcmludGYgKGluc3RyLCAibW92JXNcdCUlfHBjLCAlJXxsciIsIGNvbmRp dGlvbmFsKTsKQEAgLTE5OTIyLDYgKzE5OTM1LDQ0IEBAIG91dHB1dF9yZXR1 cm5faW5zdHJ1Y3Rpb24gKHJ0eCBvcGVyYW5kLCBib29sIHJlYWxseV9yZXR1 cm4sIGJvb2wgcmV2ZXJzZSwKICAgcmV0dXJuICIiOwogfQogCisvKiBPdXRw dXQgaW4gRklMRSBhc20gc3RhdGVtZW50cyBuZWVkZWQgdG8gZGVjbGFyZSB0 aGUgTkFNRSBvZiB0aGUgZnVuY3Rpb24KKyAgIGRlZmluZWQgYnkgaXRzIERF Q0wgbm9kZS4gICovCisKK3ZvaWQKK2FybV9hc21fZGVjbGFyZV9mdW5jdGlv bl9uYW1lIChGSUxFICpmaWxlLCBjb25zdCBjaGFyICpuYW1lLCB0cmVlIGRl Y2wpCit7CisgIHNpemVfdCBjbXNlX25hbWVfbGVuOworICBjaGFyICpjbXNl X25hbWUgPSAwOworICBjaGFyIGNtc2VfcHJlZml4W10gPSAiX19hY2xlX3Nl XyI7CisKKyAgLyogV2hlbiBjb21waWxpbmcgd2l0aCBBUk12OC1NIFNlY3Vy aXR5IEV4dGVuc2lvbnMgZW5hYmxlZCwgd2Ugc2hvdWxkIHByaW50IGFuCisg ICAgIGV4dHJhIGZ1bmN0aW9uIGxhYmVsIGZvciBlYWNoIGZ1bmN0aW9uIHdp dGggdGhlICdjbXNlX25vbnNlY3VyZV9lbnRyeScKKyAgICAgYXR0cmlidXRl LiAgVGhpcyBleHRyYSBmdW5jdGlvbiBsYWJlbCBzaG91bGQgYmUgcHJlcGVu ZGVkIHdpdGgKKyAgICAgJ19fYWNsZV9zZV8nLCB0ZWxsaW5nIHRoZSBsaW5r ZXIgdGhhdCBpdCBuZWVkcyB0byBjcmVhdGUgc2VjdXJlIGdhdGV3YXkKKyAg ICAgdmVuZWVycyBmb3IgdGhpcyBmdW5jdGlvbi4gICovCisgIGlmICh1c2Vf Y21zZSAmJiBsb29rdXBfYXR0cmlidXRlICgiY21zZV9ub25zZWN1cmVfZW50 cnkiLAorCQkJCSAgICBERUNMX0FUVFJJQlVURVMgKGRlY2wpKSkKKyAgICB7 CisgICAgICBjbXNlX25hbWVfbGVuID0gc2l6ZW9mIChjbXNlX3ByZWZpeCkg KyBzdHJsZW4gKG5hbWUpOworICAgICAgY21zZV9uYW1lID0gWEFMTE9DQVZF QyAoY2hhciwgY21zZV9uYW1lX2xlbik7CisgICAgICBzbnByaW50ZiAoY21z ZV9uYW1lLCBjbXNlX25hbWVfbGVuLCAiJXMlcyIsIGNtc2VfcHJlZml4LCBu YW1lKTsKKyAgICAgIHRhcmdldG0uYXNtX291dC5nbG9iYWxpemVfbGFiZWwg KGZpbGUsIGNtc2VfbmFtZSk7CisKKyAgICAgIEFSTV9ERUNMQVJFX0ZVTkNU SU9OX05BTUUgKGZpbGUsIGNtc2VfbmFtZSwgZGVjbCk7CisgICAgICBBU01f T1VUUFVUX1RZUEVfRElSRUNUSVZFIChmaWxlLCBjbXNlX25hbWUsICJmdW5j dGlvbiIpOworICAgIH0KKworICBBUk1fREVDTEFSRV9GVU5DVElPTl9OQU1F IChmaWxlLCBuYW1lLCBkZWNsKTsKKyAgQVNNX09VVFBVVF9UWVBFX0RJUkVD VElWRSAoZmlsZSwgbmFtZSwgImZ1bmN0aW9uIik7CisgIEFTTV9ERUNMQVJF X1JFU1VMVCAoZmlsZSwgREVDTF9SRVNVTFQgKGRlY2wpKTsKKyAgQVNNX09V VFBVVF9MQUJFTCAoZmlsZSwgbmFtZSk7CisKKyAgaWYgKGNtc2VfbmFtZSkK KyAgICBBU01fT1VUUFVUX0xBQkVMIChmaWxlLCBjbXNlX25hbWUpOworCisg IEFSTV9PVVRQVVRfRk5fVU5XSU5EIChmaWxlLCBUUlVFKTsKK30KKwogLyog V3JpdGUgdGhlIGZ1bmN0aW9uIG5hbWUgaW50byB0aGUgY29kZSBzZWN0aW9u LCBkaXJlY3RseSBwcmVjZWRpbmcKICAgIHRoZSBmdW5jdGlvbiBwcm9sb2d1 ZS4KIApAQCAtMTk5NzEsMTAgKzIwMDIyLDYgQEAgYXJtX291dHB1dF9mdW5j dGlvbl9wcm9sb2d1ZSAoRklMRSAqZiwgSE9TVF9XSURFX0lOVCBmcmFtZV9z aXplKQogewogICB1bnNpZ25lZCBsb25nIGZ1bmNfdHlwZTsKIAotICAvKiA/ Pz8gRG8gd2Ugd2FudCB0byBwcmludCBzb21lIG9mIHRoZSBiZWxvdyBhbnl3 YXk/ICAqLwotICBpZiAoVEFSR0VUX1RIVU1CMSkKLSAgICByZXR1cm47Ci0K ICAgLyogU2FuaXR5IGNoZWNrLiAgKi8KICAgZ2NjX2Fzc2VydCAoIWFybV9j Y2ZzbV9zdGF0ZSAmJiAhYXJtX3RhcmdldF9pbnNuKTsKIApAQCAtMjAwMDks NiArMjAwNTYsOCBAQCBhcm1fb3V0cHV0X2Z1bmN0aW9uX3Byb2xvZ3VlIChG SUxFICpmLCBIT1NUX1dJREVfSU5UIGZyYW1lX3NpemUpCiAgICAgYXNtX2Zw cmludGYgKGYsICJcdCVAIE5lc3RlZDogZnVuY3Rpb24gZGVjbGFyZWQgaW5z aWRlIGFub3RoZXIgZnVuY3Rpb24uXG4iKTsKICAgaWYgKElTX1NUQUNLQUxJ R04gKGZ1bmNfdHlwZSkpCiAgICAgYXNtX2ZwcmludGYgKGYsICJcdCVAIFN0 YWNrIEFsaWduOiBNYXkgYmUgY2FsbGVkIHdpdGggbWlzLWFsaWduZWQgU1Au XG4iKTsKKyAgaWYgKElTX0NNU0VfRU5UUlkgKGZ1bmNfdHlwZSkpCisgICAg YXNtX2ZwcmludGYgKGYsICJcdCVAIE5vbi1zZWN1cmUgZW50cnkgZnVuY3Rp b246IGNhbGxlZCBmcm9tIG5vbi1zZWN1cmUgY29kZS5cbiIpOwogCiAgIGFz bV9mcHJpbnRmIChmLCAiXHQlQCBhcmdzID0gJWQsIHByZXRlbmQgPSAlZCwg ZnJhbWUgPSAld2RcbiIsCiAJICAgICAgIGNydGwtPmFyZ3Muc2l6ZSwKQEAg LTI0MDc1LDggKzI0MTI0LDggQEAgdGh1bWJfcG9wIChGSUxFICpmLCB1bnNp Z25lZCBsb25nIG1hc2spCiAgIGlmIChtYXNrICYgKDEgPDwgUENfUkVHTlVN KSkKICAgICB7CiAgICAgICAvKiBDYXRjaCBwb3BwaW5nIHRoZSBQQy4gICov Ci0gICAgICBpZiAoVEFSR0VUX0lOVEVSV09SSyB8fCBUQVJHRVRfQkFDS1RS QUNFCi0JICB8fCBjcnRsLT5jYWxsc19laF9yZXR1cm4pCisgICAgICBpZiAo VEFSR0VUX0lOVEVSV09SSyB8fCBUQVJHRVRfQkFDS1RSQUNFIHx8IGNydGwt PmNhbGxzX2VoX3JldHVybgorCSAgfHwgSVNfQ01TRV9FTlRSWSAoYXJtX2N1 cnJlbnRfZnVuY190eXBlICgpKSkKIAl7CiAJICAvKiBUaGUgUEMgaXMgbmV2 ZXIgcG9wZWQgZGlyZWN0bHksIGluc3RlYWQKIAkgICAgIGl0IGlzIHBvcHBl ZCBpbnRvIHIzIGFuZCB0aGVuIEJYIGlzIHVzZWQuICAqLwpAQCAtMjQxMzcs NyArMjQxODYsMTAgQEAgdGh1bWJfZXhpdCAoRklMRSAqZiwgaW50IHJlZ19j b250YWluaW5nX3JldHVybl9hZGRyKQogICAgICAgaWYgKGNydGwtPmNhbGxz X2VoX3JldHVybikKIAlhc21fZnByaW50ZiAoZiwgIlx0YWRkXHQlciwgJXJc biIsIFNQX1JFR05VTSwgQVJNX0VIX1NUQUNLQURKX1JFR05VTSk7CiAKLSAg ICAgIGFzbV9mcHJpbnRmIChmLCAiXHRieFx0JXJcbiIsIHJlZ19jb250YWlu aW5nX3JldHVybl9hZGRyKTsKKyAgICAgIGlmIChJU19DTVNFX0VOVFJZIChh cm1fY3VycmVudF9mdW5jX3R5cGUgKCkpKQorCWFzbV9mcHJpbnRmIChmLCAi XHRieG5zXHQlclxuIiwgcmVnX2NvbnRhaW5pbmdfcmV0dXJuX2FkZHIpOwor ICAgICAgZWxzZQorCWFzbV9mcHJpbnRmIChmLCAiXHRieFx0JXJcbiIsIHJl Z19jb250YWluaW5nX3JldHVybl9hZGRyKTsKICAgICAgIHJldHVybjsKICAg ICB9CiAgIC8qIE90aGVyd2lzZSBpZiB3ZSBhcmUgbm90IHN1cHBvcnRpbmcg aW50ZXJ3b3JraW5nIGFuZCB3ZSBoYXZlIG5vdCBjcmVhdGVkCkBAIC0yNDE0 Niw3ICsyNDE5OCw4IEBAIHRodW1iX2V4aXQgKEZJTEUgKmYsIGludCByZWdf Y29udGFpbmluZ19yZXR1cm5fYWRkcikKICAgZWxzZSBpZiAoIVRBUkdFVF9J TlRFUldPUksKIAkgICAmJiAhVEFSR0VUX0JBQ0tUUkFDRQogCSAgICYmICFp c19jYWxsZWRfaW5fQVJNX21vZGUgKGN1cnJlbnRfZnVuY3Rpb25fZGVjbCkK LQkgICAmJiAhY3J0bC0+Y2FsbHNfZWhfcmV0dXJuKQorCSAgICYmICFjcnRs LT5jYWxsc19laF9yZXR1cm4KKwkgICAmJiAhSVNfQ01TRV9FTlRSWSAoYXJt X2N1cnJlbnRfZnVuY190eXBlICgpKSkKICAgICB7CiAgICAgICBhc21fZnBy aW50ZiAoZiwgIlx0cG9wXHR7JXJ9XG4iLCBQQ19SRUdOVU0pOwogICAgICAg cmV0dXJuOwpAQCAtMjQzNjksNyArMjQ0MjIsMTAgQEAgdGh1bWJfZXhpdCAo RklMRSAqZiwgaW50IHJlZ19jb250YWluaW5nX3JldHVybl9hZGRyKQogICAg IGFzbV9mcHJpbnRmIChmLCAiXHRhZGRcdCVyLCAlclxuIiwgU1BfUkVHTlVN LCBBUk1fRUhfU1RBQ0tBREpfUkVHTlVNKTsKIAogICAvKiBSZXR1cm4gdG8g Y2FsbGVyLiAgKi8KLSAgYXNtX2ZwcmludGYgKGYsICJcdGJ4XHQlclxuIiwg cmVnX2NvbnRhaW5pbmdfcmV0dXJuX2FkZHIpOworICBpZiAoSVNfQ01TRV9F TlRSWSAoYXJtX2N1cnJlbnRfZnVuY190eXBlICgpKSkKKyAgICBhc21fZnBy aW50ZiAoZiwgIlx0Ynhuc1x0JXJcbiIsIHJlZ19jb250YWluaW5nX3JldHVy bl9hZGRyKTsKKyAgZWxzZQorICAgIGFzbV9mcHJpbnRmIChmLCAiXHRieFx0 JXJcbiIsIHJlZ19jb250YWluaW5nX3JldHVybl9hZGRyKTsKIH0KIAwKIC8q IFNjYW4gSU5TTiBqdXN0IGJlZm9yZSBhc3NlbWJsZXIgaXMgb3V0cHV0IGZv ciBpdC4KQEAgLTI1MjUwLDYgKzI1MzA2LDEyIEBAIHRodW1iMl9leHBhbmRf cmV0dXJuIChib29sIHNpbXBsZV9yZXR1cm4pCiAKICAgaWYgKCFzaW1wbGVf cmV0dXJuICYmIHNhdmVkX3JlZ3NfbWFzaykKICAgICB7CisgICAgICAvKiBU T0RPOiBWZXJpZnkgdGhhdCB0aGlzIHBhdGggaXMgbmV2ZXIgdGFrZW4gZm9y IGNtc2Vfbm9uc2VjdXJlX2VudHJ5CisJIGZ1bmN0aW9ucyBvciBhZGFwdCBj b2RlIHRvIGhhbmRsZSBhY2NvcmRpbmcgdG8gQUNMRS4gIFRoaXMgcGF0aCBz aG91bGQKKwkgbm90IGJlIHJlYWNoYWJsZSBmb3IgY21zZV9ub25zZWN1cmVf ZW50cnkgZnVuY3Rpb25zIHRob3VnaCB3ZSBwcmVmZXIKKwkgdG8gYXNzZXJ0 IGl0IGZvciBub3cgdG8gZW5zdXJlIHRoYXQgZnV0dXJlIGNvZGUgY2hhbmdl cyBkbyBub3Qgc2lsZW50bHkKKwkgY2hhbmdlIHRoaXMgYmVoYXZpb3IuICAq LworICAgICAgZ2NjX2Fzc2VydCAoIUlTX0NNU0VfRU5UUlkgKGFybV9jdXJy ZW50X2Z1bmNfdHlwZSAoKSkpOwogICAgICAgaWYgKG51bV9yZWdzID09IDEp CiAgICAgICAgIHsKICAgICAgICAgICBydHggcGFyID0gZ2VuX3J0eF9QQVJB TExFTCAoVk9JRG1vZGUsIHJ0dmVjX2FsbG9jICgyKSk7CkBAIC0yNTY2Nyw2 ICsyNTcyOSw3IEBAIGFybV9leHBhbmRfZXBpbG9ndWUgKGJvb2wgcmVhbGx5 X3JldHVybikKIAogICAgICAgaWYgKEFSTV9GVU5DX1RZUEUgKGZ1bmNfdHlw ZSkgIT0gQVJNX0ZUX0lOVEVSV09SS0VECiAgICAgICAgICAgJiYgKFRBUkdF VF9BUk0gfHwgQVJNX0ZVTkNfVFlQRSAoZnVuY190eXBlKSA9PSBBUk1fRlRf Tk9STUFMKQorCSAgJiYgIUlTX0NNU0VfRU5UUlkgKGZ1bmNfdHlwZSkKICAg ICAgICAgICAmJiAhSVNfU1RBQ0tBTElHTiAoZnVuY190eXBlKQogICAgICAg ICAgICYmIHJlYWxseV9yZXR1cm4KICAgICAgICAgICAmJiBjcnRsLT5hcmdz LnByZXRlbmRfYXJnc19zaXplID09IDAKZGlmZiAtLWdpdCBhL2djYy9jb25m aWcvYXJtL2VsZi5oIGIvZ2NjL2NvbmZpZy9hcm0vZWxmLmgKaW5kZXggYmM0 ZWI4NmYxZGE1YmVhYmYzMjY0NzYzN2ViODdhM2ZjMTdhNmM2YS4uMDM5MzFl ZWU3MzkwYWI0ZDA5NTIyZTdkOGJlYTEwNDQ5NzE5ZGRiYSAxMDA2NDQKLS0t IGEvZ2NjL2NvbmZpZy9hcm0vZWxmLmgKKysrIGIvZ2NjL2NvbmZpZy9hcm0v ZWxmLmgKQEAgLTc1LDE2ICs3NSw3IEBACiAKIC8qIFdlIG1pZ2h0IG5lZWQg YSBBUk0gc3BlY2lmaWMgaGVhZGVyIHRvIGZ1bmN0aW9uIGRlY2xhcmF0aW9u cy4gICovCiAjdW5kZWYgIEFTTV9ERUNMQVJFX0ZVTkNUSU9OX05BTUUKLSNk ZWZpbmUgQVNNX0RFQ0xBUkVfRlVOQ1RJT05fTkFNRShGSUxFLCBOQU1FLCBE RUNMKQkJXAotICBkbwkJCQkJCQkJXAotICAgIHsJCQkJCQkJCVwKLSAgICAg IEFSTV9ERUNMQVJFX0ZVTkNUSU9OX05BTUUgKEZJTEUsIE5BTUUsIERFQ0wp OwkJXAotICAgICAgQVNNX09VVFBVVF9UWVBFX0RJUkVDVElWRSAoRklMRSwg TkFNRSwgImZ1bmN0aW9uIik7CVwKLSAgICAgIEFTTV9ERUNMQVJFX1JFU1VM VCAoRklMRSwgREVDTF9SRVNVTFQgKERFQ0wpKTsJCVwKLSAgICAgIEFTTV9P VVRQVVRfTEFCRUwoRklMRSwgTkFNRSk7CQkJCVwKLSAgICAgIEFSTV9PVVRQ VVRfRk5fVU5XSU5EIChGSUxFLCBUUlVFKTsJCQlcCi0gICAgfQkJCQkJCQkJ XAotICB3aGlsZSAoMCkKKyNkZWZpbmUgQVNNX0RFQ0xBUkVfRlVOQ1RJT05f TkFNRSBhcm1fYXNtX2RlY2xhcmVfZnVuY3Rpb25fbmFtZQogCiAvKiBXZSBt aWdodCBuZWVkIGFuIEFSTSBzcGVjaWZpYyB0cmFpbGVyIGZvciBmdW5jdGlv biBkZWNsYXJhdGlvbnMuICAqLwogI3VuZGVmICBBU01fREVDTEFSRV9GVU5D VElPTl9TSVpFCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy50YXJn ZXQvYXJtL2Ntc2UvY21zZS0xMC5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFy Z2V0L2FybS9jbXNlL2Ntc2UtMTAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw Li4xYTkxYWMzOWVlMzdlZjIwNDk1ZTA0N2I0MDJkM2Y1ZWRjNjBhNjEzCi0t LSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2Fy bS9jbXNlL2Ntc2UtMTAuYwpAQCAtMCwwICsxLDkgQEAKKy8qIHsgZGctZG8g Y29tcGlsZSB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1tY21zZSIgfSAgKi8K Kwordm9pZAorZm9vICh2b2lkKSB7fQorCisvKiB7IGRnLWZpbmFsIHsgc2Nh bi1hc3NlbWJsZXItbm90ICJieG5zIiB9IH0gKi8KKy8qIHsgZGctZmluYWwg eyBzY2FuLWFzc2VtYmxlciAiZm9vOiIgfSB9ICovCisvKiB7IGRnLWZpbmFs IHsgc2Nhbi1hc3NlbWJsZXItbm90ICJfX2FjbGVfc2VfZm9vOiIgfSB9ICov CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYXJtL2Nt c2UvY21zZS00LmMgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYXJtL2Nt c2UvY21zZS00LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmY5MzBhYjA0 YTEwOTdjNjQwOTdhNGUwMDMyOTZiYmU4NTczMzMxOQotLS0gL2Rldi9udWxs CisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hcm0vY21zZS9jbXNl LTQuYwpAQCAtMCwwICsxLDI3IEBACisvKiB7IGRnLWRvIGNvbXBpbGUgfSAq LworLyogeyBkZy1vcHRpb25zICItbWNtc2UiIH0gICovCisKK3N0cnVjdCBz cGFuIHsKKyAgaW50IGEsIGI7Cit9OworCitleHRlcm4gaW50IHF1eCAodm9p ZCk7CisKK3ZvaWQgX19hdHRyaWJ1dGVfXyAoKGNtc2Vfbm9uc2VjdXJlX2Vu dHJ5KSkKK2ZvbyAodm9pZCkge30KKworc3RhdGljIHZvaWQgX19hdHRyaWJ1 dGVfXyAoKGNtc2Vfbm9uc2VjdXJlX2VudHJ5KSkKK2JhciAodm9pZCkge30g LyogeyBkZy13YXJuaW5nICJoYXMgbm8gZWZmZWN0IG9uIGZ1bmN0aW9ucyB3 aXRoIHN0YXRpYyBsaW5rYWdlIiB9ICovCisKK2ludCBfX2F0dHJpYnV0ZV9f ICgoY21zZV9ub25zZWN1cmVfZW50cnkpKQorYmF6ICh2b2lkKQoreworICBy ZXR1cm4gcXV4ICgpOworfQorCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3Nl bWJsZXItdGltZXMgImJ4bnMiIDIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsg c2Nhbi1hc3NlbWJsZXIgImZvbzoiIH0gfSAqLworLyogeyBkZy1maW5hbCB7 IHNjYW4tYXNzZW1ibGVyICJfX2FjbGVfc2VfZm9vOiIgfSB9ICovCisvKiB7 IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItbm90ICJfX2FjbGVfc2VfYmFy OiIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIgImJh ejoiIH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyICJf X2FjbGVfc2VfYmF6OiIgfSB9ICovCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1 aXRlL2djYy50YXJnZXQvYXJtL2Ntc2UvY21zZS05LmMgYi9nY2MvdGVzdHN1 aXRlL2djYy50YXJnZXQvYXJtL2Ntc2UvY21zZS05LmMKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMC4uMWQ5N2YwZTFhMzcyMDliZDEyOWZmZTk2Y2U5MmE4NmJj MmUwZDVkMQotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2Nj LnRhcmdldC9hcm0vY21zZS9jbXNlLTkuYwpAQCAtMCwwICsxLDEyIEBACisv KiB7IGRnLWRvIGNvbXBpbGUgfSAqLworLyogeyBkZy1za2lwLWlmICJUZXN0 aW5nIGV4Y2x1c2lvbiBvZiAtbWNtc2UiIHsgYXJtLSotKiB9IHsgIi1tY21z ZSIgfSB7ICIiIH0gfSAgKi8KKworCitpbnQgX19hdHRyaWJ1dGVfXyAoKGNt c2Vfbm9uc2VjdXJlX2VudHJ5KSkKK2ZvbyAoaW50IGEpCit7IC8qIHsgZGct d2FybmluZyAiYXR0cmlidXRlIGlnbm9yZWQgd2l0aG91dCAtbWNtc2Ugb3B0 aW9uIiB9ICovCisgIHJldHVybiBhICsgMTsKK30KKworLyogeyBkZy1maW5h bCB7IHNjYW4tYXNzZW1ibGVyICJmb286IiB9IH0gKi8KKy8qIHsgZGctZmlu YWwgeyBzY2FuLWFzc2VtYmxlci1ub3QgIl9fYWNsZV9zZV9mb286IiB9IH0g Ki8K --------------000301090102090206030303--