From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 53819 invoked by alias); 5 Dec 2016 11:34:05 -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 53810 invoked by uid 89); 5 Dec 2016 11:34:04 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-4.5 required=5.0 tests=BAYES_00,KAM_LOTSOFHASH,RP_MATCHES_RCVD,SPF_PASS autolearn=ham version=3.3.2 spammy=Sanity, 5.4, trailer, dg-warning 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; Mon, 05 Dec 2016 11:33:54 +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 91EEE15A1; Mon, 5 Dec 2016 03:33:52 -0800 (PST) Received: from [10.2.206.251] (e107157-lin.cambridge.arm.com [10.2.206.251]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 4267D3F483 for ; Mon, 5 Dec 2016 03:33:52 -0800 (PST) Subject: [arm-embedded][committed][PATCH 3/7] ARMv8-M Security Extension's cmse_nonsecure_entry: __acle_se label and bxns return To: gcc-patches@gcc.gnu.org References: <5796116C.6010100@arm.com> <579612B8.7030401@arm.com> <580F8849.80001@arm.com> <58107F7B.3060507@foss.arm.com> <5811CF07.8000501@arm.com> From: "Andre Vieira (lists)" Message-ID: <5845509E.3010209@arm.com> Date: Mon, 05 Dec 2016 11:34: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: <5811CF07.8000501@arm.com> Content-Type: multipart/mixed; boundary="------------070401090407020006080908" X-IsSubscribed: yes X-SW-Source: 2016-12/txt/msg00324.txt.bz2 This is a multi-part message in MIME format. --------------070401090407020006080908 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Content-length: 5263 On 27/10/16 10:55, Andre Vieira (lists) wrote: > 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 > Hi, Backported this to the embedded-6-branch in revision r. Cheers, Andre gcc/ChangeLog.arm: 2016-12-05 Andre Vieira Backport from mainline 2016-12-02 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. (thumb2_expand_return): Assert that entry functions always have simple returns. (arm_expand_epilogue): Handle entry functions. (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.arm: 2016-12-05 Andre Vieira Backport from mainline 2016-12-02 Andre Vieira Thomas Preud'homme * gcc.target/arm/cmse/cmse-4.c: New. * gcc.target/arm/cmse/cmse-9.c: New. * gcc.target/arm/cmse/cmse-10.c: New. --------------070401090407020006080908 Content-Type: text/plain; charset=UTF-8; name="diff3" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="diff3" Content-length: 17796 ZGlmZiAtLWdpdCBhL2djYy9DaGFuZ2VMb2cuYXJtIGIvZ2NjL0NoYW5nZUxv Zy5hcm0KaW5kZXggYzkzMDA3YTZiODE0MzIwZjNhM2ZiMjgzODczZTIxMzQ3 YjRjZDMzMy4uYjQ0M2JkOWE3OTZiMDVhNWFiMjZiMGI3MmE2YWQxYzUyYjZj ZjhiOCAxMDA2NDQKLS0tIGEvZ2NjL0NoYW5nZUxvZy5hcm0KKysrIGIvZ2Nj L0NoYW5nZUxvZy5hcm0KQEAgLTQsNiArNCwyNyBAQAogCTIwMTYtMTItMDIg IEFuZHJlIFZpZWlyYSAgPGFuZHJlLnNpbW9lc2RpYXN2aWVpcmFAYXJtLmNv bT4KIAkJICAgIFRob21hcyBQcmV1ZCdob21tZQk8dGhvbWFzLnByZXVkaG9t bWVAYXJtLmNvbT4KIAorCSogY29uZmlnL2FybS9hcm0uYyAodXNlX3JldHVy bl9pbnNuKTogQ2hhbmdlIHRvIHJldHVybiB3aXRoICBieG5zCisJd2hlbiBj bXNlX25vbnNlY3VyZV9lbnRyeS4KKwkob3V0cHV0X3JldHVybl9pbnN0cnVj dGlvbik6IExpa2V3aXNlLgorCShhcm1fb3V0cHV0X2Z1bmN0aW9uX3Byb2xv Z3VlKTogTGlrZXdpc2UuCisJKHRodW1iX3BvcCk6IExpa2V3aXNlLgorCSh0 aHVtYl9leGl0KTogTGlrZXdpc2UuCisJKHRodW1iMl9leHBhbmRfcmV0dXJu KTogQXNzZXJ0IHRoYXQgZW50cnkgZnVuY3Rpb25zIGFsd2F5cyBoYXZlIHNp bXBsZQorCXJldHVybnMuCisJKGFybV9leHBhbmRfZXBpbG9ndWUpOiBIYW5k bGUgZW50cnkgZnVuY3Rpb25zLgorCShhcm1fZnVuY3Rpb25fb2tfZm9yX3Np YmNhbGwpOiBEaXNhYmxlIHNpYmNhbGwgZm9yIGVudHJ5IGZ1bmN0aW9ucy4K KwkoYXJtX2FzbV9kZWNsYXJlX2Z1bmN0aW9uX25hbWUpOiBOZXcuCisJKiBj b25maWcvYXJtL2FybS1wcm90b3MuaCAoYXJtX2FzbV9kZWNsYXJlX2Z1bmN0 aW9uX25hbWUpOiBOZXcuCisJKiBjb25maWcvYXJtL2VsZi5oIChBU01fREVD TEFSRV9GVU5DVElPTl9OQU1FKTogUmVkZWZpbmUgdG8KKwl1c2UgYXJtX2Fz bV9kZWNsYXJlX2Z1bmN0aW9uX25hbWUuCisKKzIwMTYtMTItMDUgIEFuZHJl IFZpZWlyYSAgICAgICAgPGFuZHJlLnNpbW9lc2RpYXN2aWVpcmFAYXJtLmNv bT4KKworCUJhY2twb3J0IGZyb20gbWFpbmxpbmUKKwkyMDE2LTEyLTAyICBB bmRyZSBWaWVpcmEgIDxhbmRyZS5zaW1vZXNkaWFzdmllaXJhQGFybS5jb20+ CisJCSAgICBUaG9tYXMgUHJldWQnaG9tbWUJPHRob21hcy5wcmV1ZGhvbW1l QGFybS5jb20+CisKIAkqIGNvbmZpZy9hcm0vYXJtLmMgKGFybV9oYW5kbGVf Y21zZV9ub25zZWN1cmVfZW50cnkpOiBOZXcuCiAJKGFybV9hdHRyaWJ1dGVf dGFibGUpOiBBZGRlZCBjbXNlX25vbnNlY3VyZV9lbnRyeQogCShhcm1fY29t cHV0ZV9mdW5jX3R5cGUpOiBIYW5kbGUgY21zZV9ub25zZWN1cmVfZW50cnku CmRpZmYgLS1naXQgYS9nY2MvY29uZmlnL2FybS9hcm0tcHJvdG9zLmggYi9n Y2MvY29uZmlnL2FybS9hcm0tcHJvdG9zLmgKaW5kZXggODIzMmIyNmEyZTE0 N2E2ZWEyMGEzOWRlZmFlNWFjNzE4MGFkZmM1OC4uZmI5ZTZmNGM3ZjU0ZjNm NDkxMzgxYmE4ZTQ4YWIxNDk3OWJkMGRjMyAxMDA2NDQKLS0tIGEvZ2NjL2Nv bmZpZy9hcm0vYXJtLXByb3Rvcy5oCisrKyBiL2djYy9jb25maWcvYXJtL2Fy bS1wcm90b3MuaApAQCAtMzMsNiArMzMsNyBAQCBleHRlcm4gaW50IGFybV92 b2xhdGlsZV9mdW5jICh2b2lkKTsKIGV4dGVybiB2b2lkIGFybV9leHBhbmRf cHJvbG9ndWUgKHZvaWQpOwogZXh0ZXJuIHZvaWQgYXJtX2V4cGFuZF9lcGls b2d1ZSAoYm9vbCk7CiBleHRlcm4gdm9pZCBhcm1fZGVjbGFyZV9mdW5jdGlv bl9uYW1lIChGSUxFICosIGNvbnN0IGNoYXIgKiwgdHJlZSk7CitleHRlcm4g dm9pZCBhcm1fYXNtX2RlY2xhcmVfZnVuY3Rpb25fbmFtZSAoRklMRSAqLCBj b25zdCBjaGFyICosIHRyZWUpOwogZXh0ZXJuIHZvaWQgdGh1bWIyX2V4cGFu ZF9yZXR1cm4gKGJvb2wpOwogZXh0ZXJuIGNvbnN0IGNoYXIgKmFybV9zdHJp cF9uYW1lX2VuY29kaW5nIChjb25zdCBjaGFyICopOwogZXh0ZXJuIHZvaWQg YXJtX2FzbV9vdXRwdXRfbGFiZWxyZWYgKEZJTEUgKiwgY29uc3QgY2hhciAq KTsKZGlmZiAtLWdpdCBhL2djYy9jb25maWcvYXJtL2FybS5jIGIvZ2NjL2Nv bmZpZy9hcm0vYXJtLmMKaW5kZXggNmVhZmJhNzc0NTQyZmI0YjIwZjdiNzJm ZDM1MzYyMWE1NGNhNWJjNi4uOTc1MDJjNzQ1ODg0Mzk5NjBjNWRmZjM5MTY4 MDIwZTAyZjg0NDRmMiAxMDA2NDQKLS0tIGEvZ2NjL2NvbmZpZy9hcm0vYXJt LmMKKysrIGIvZ2NjL2NvbmZpZy9hcm0vYXJtLmMKQEAgLTM4MzQsNiArMzgz NCwxMSBAQCB1c2VfcmV0dXJuX2luc24gKGludCBpc2NvbmQsIHJ0eCBzaWJs aW5nKQogCXJldHVybiAwOwogICAgIH0KIAorICAvKiBBUk12OC1NIG5vbnNl Y3VyZSBlbnRyeSBmdW5jdGlvbiBuZWVkIHRvIHVzZSBieG5zIHRvIHJldHVy biBhbmQgdGh1cyBuZWVkCisgICAgIHNldmVyYWwgaW5zdHJ1Y3Rpb25zIGlm IGFueXRoaW5nIG5lZWRzIHRvIGJlIHBvcHBlZC4gICovCisgIGlmIChzYXZl ZF9pbnRfcmVncyAmJiBJU19DTVNFX0VOVFJZIChmdW5jX3R5cGUpKQorICAg IHJldHVybiAwOworCiAgIC8qIElmIHRoZXJlIGFyZSBzYXZlZCByZWdpc3Rl cnMgYnV0IHRoZSBMUiBpc24ndCBzYXZlZCwgdGhlbiB3ZSBuZWVkCiAgICAg IHR3byBpbnN0cnVjdGlvbnMgZm9yIHRoZSByZXR1cm4uICAqLwogICBpZiAo c2F2ZWRfaW50X3JlZ3MgJiYgIShzYXZlZF9pbnRfcmVncyAmICgxIDw8IExS X1JFR05VTSkpKQpAQCAtNjg2Niw2ICs2ODcxLDExIEBAIGFybV9mdW5jdGlv bl9va19mb3Jfc2liY2FsbCAodHJlZSBkZWNsLCB0cmVlIGV4cCkKICAgaWYg KElTX0lOVEVSUlVQVCAoZnVuY190eXBlKSkKICAgICByZXR1cm4gZmFsc2U7 CiAKKyAgLyogQVJNdjgtTSBub24tc2VjdXJlIGVudHJ5IGZ1bmN0aW9ucyBu ZWVkIHRvIHJldHVybiB3aXRoIGJ4bnMgd2hpY2ggaXMgb25seQorICAgICBn ZW5lcmF0ZWQgZm9yIGVudHJ5IGZ1bmN0aW9ucyB0aGVtc2VsdmVzLiAgKi8K KyAgaWYgKElTX0NNU0VfRU5UUlkgKGFybV9jdXJyZW50X2Z1bmNfdHlwZSAo KSkpCisgICAgcmV0dXJuIGZhbHNlOworCiAgIGlmICghVk9JRF9UWVBFX1Ag KFRSRUVfVFlQRSAoREVDTF9SRVNVTFQgKGNmdW4tPmRlY2wpKSkpCiAgICAg ewogICAgICAgLyogQ2hlY2sgdGhhdCB0aGUgcmV0dXJuIHZhbHVlIGxvY2F0 aW9ucyBhcmUgdGhlIHNhbWUuICBGb3IKQEAgLTE5NzE1LDYgKzE5NzI1LDcg QEAgb3V0cHV0X3JldHVybl9pbnN0cnVjdGlvbiAocnR4IG9wZXJhbmQsIGJv b2wgcmVhbGx5X3JldHVybiwgYm9vbCByZXZlcnNlLAogCSAoZS5nLiBpbnRl cndvcmtpbmcpIHRoZW4gd2UgY2FuIGxvYWQgdGhlIHJldHVybiBhZGRyZXNz CiAJIGRpcmVjdGx5IGludG8gdGhlIFBDLiAgT3RoZXJ3aXNlIHdlIG11c3Qg bG9hZCBpdCBpbnRvIExSLiAgKi8KICAgICAgIGlmIChyZWFsbHlfcmV0dXJu CisJICAmJiAhSVNfQ01TRV9FTlRSWSAoZnVuY190eXBlKQogCSAgJiYgKElT X0lOVEVSUlVQVCAoZnVuY190eXBlKSB8fCAhVEFSR0VUX0lOVEVSV09SSykp CiAJcmV0dXJuX3JlZyA9IHJlZ19uYW1lc1tQQ19SRUdOVU1dOwogICAgICAg ZWxzZQpAQCAtMTk4NTUsOCArMTk4NjYsMTAgQEAgb3V0cHV0X3JldHVybl9p bnN0cnVjdGlvbiAocnR4IG9wZXJhbmQsIGJvb2wgcmVhbGx5X3JldHVybiwg Ym9vbCByZXZlcnNlLAogCSAgYnJlYWs7CiAKIAlkZWZhdWx0OgorCSAgaWYg KElTX0NNU0VfRU5UUlkgKGZ1bmNfdHlwZSkpCisJICAgIHNucHJpbnRmIChp bnN0ciwgc2l6ZW9mIChpbnN0ciksICJieG5zJXNcdCUlfGxyIiwgY29uZGl0 aW9uYWwpOwogCSAgLyogVXNlIGJ4IGlmIGl0J3MgYXZhaWxhYmxlLiAgKi8K LQkgIGlmIChhcm1fYXJjaDUgfHwgYXJtX2FyY2g0dCkKKwkgIGVsc2UgaWYg KGFybV9hcmNoNSB8fCBhcm1fYXJjaDR0KQogCSAgICBzcHJpbnRmIChpbnN0 ciwgImJ4JXNcdCUlfGxyIiwgY29uZGl0aW9uYWwpOwogCSAgZWxzZQogCSAg ICBzcHJpbnRmIChpbnN0ciwgIm1vdiVzXHQlJXxwYywgJSV8bHIiLCBjb25k aXRpb25hbCk7CkBAIC0xOTg2OSw2ICsxOTg4Miw0NCBAQCBvdXRwdXRfcmV0 dXJuX2luc3RydWN0aW9uIChydHggb3BlcmFuZCwgYm9vbCByZWFsbHlfcmV0 dXJuLCBib29sIHJldmVyc2UsCiAgIHJldHVybiAiIjsKIH0KIAorLyogT3V0 cHV0IGluIEZJTEUgYXNtIHN0YXRlbWVudHMgbmVlZGVkIHRvIGRlY2xhcmUg dGhlIE5BTUUgb2YgdGhlIGZ1bmN0aW9uCisgICBkZWZpbmVkIGJ5IGl0cyBE RUNMIG5vZGUuICAqLworCit2b2lkCithcm1fYXNtX2RlY2xhcmVfZnVuY3Rp b25fbmFtZSAoRklMRSAqZmlsZSwgY29uc3QgY2hhciAqbmFtZSwgdHJlZSBk ZWNsKQoreworICBzaXplX3QgY21zZV9uYW1lX2xlbjsKKyAgY2hhciAqY21z ZV9uYW1lID0gMDsKKyAgY2hhciBjbXNlX3ByZWZpeFtdID0gIl9fYWNsZV9z ZV8iOworCisgIC8qIFdoZW4gY29tcGlsaW5nIHdpdGggQVJNdjgtTSBTZWN1 cml0eSBFeHRlbnNpb25zIGVuYWJsZWQsIHdlIHNob3VsZCBwcmludCBhbgor ICAgICBleHRyYSBmdW5jdGlvbiBsYWJlbCBmb3IgZWFjaCBmdW5jdGlvbiB3 aXRoIHRoZSAnY21zZV9ub25zZWN1cmVfZW50cnknCisgICAgIGF0dHJpYnV0 ZS4gIFRoaXMgZXh0cmEgZnVuY3Rpb24gbGFiZWwgc2hvdWxkIGJlIHByZXBl bmRlZCB3aXRoCisgICAgICdfX2FjbGVfc2VfJywgdGVsbGluZyB0aGUgbGlu a2VyIHRoYXQgaXQgbmVlZHMgdG8gY3JlYXRlIHNlY3VyZSBnYXRld2F5Cisg ICAgIHZlbmVlcnMgZm9yIHRoaXMgZnVuY3Rpb24uICAqLworICBpZiAodXNl X2Ntc2UgJiYgbG9va3VwX2F0dHJpYnV0ZSAoImNtc2Vfbm9uc2VjdXJlX2Vu dHJ5IiwKKwkJCQkgICAgREVDTF9BVFRSSUJVVEVTIChkZWNsKSkpCisgICAg eworICAgICAgY21zZV9uYW1lX2xlbiA9IHNpemVvZiAoY21zZV9wcmVmaXgp ICsgc3RybGVuIChuYW1lKTsKKyAgICAgIGNtc2VfbmFtZSA9IFhBTExPQ0FW RUMgKGNoYXIsIGNtc2VfbmFtZV9sZW4pOworICAgICAgc25wcmludGYgKGNt c2VfbmFtZSwgY21zZV9uYW1lX2xlbiwgIiVzJXMiLCBjbXNlX3ByZWZpeCwg bmFtZSk7CisgICAgICB0YXJnZXRtLmFzbV9vdXQuZ2xvYmFsaXplX2xhYmVs IChmaWxlLCBjbXNlX25hbWUpOworCisgICAgICBBUk1fREVDTEFSRV9GVU5D VElPTl9OQU1FIChmaWxlLCBjbXNlX25hbWUsIGRlY2wpOworICAgICAgQVNN X09VVFBVVF9UWVBFX0RJUkVDVElWRSAoZmlsZSwgY21zZV9uYW1lLCAiZnVu Y3Rpb24iKTsKKyAgICB9CisKKyAgQVJNX0RFQ0xBUkVfRlVOQ1RJT05fTkFN RSAoZmlsZSwgbmFtZSwgZGVjbCk7CisgIEFTTV9PVVRQVVRfVFlQRV9ESVJF Q1RJVkUgKGZpbGUsIG5hbWUsICJmdW5jdGlvbiIpOworICBBU01fREVDTEFS RV9SRVNVTFQgKGZpbGUsIERFQ0xfUkVTVUxUIChkZWNsKSk7CisgIEFTTV9P VVRQVVRfTEFCRUwgKGZpbGUsIG5hbWUpOworCisgIGlmIChjbXNlX25hbWUp CisgICAgQVNNX09VVFBVVF9MQUJFTCAoZmlsZSwgY21zZV9uYW1lKTsKKwor ICBBUk1fT1VUUFVUX0ZOX1VOV0lORCAoZmlsZSwgVFJVRSk7Cit9CisKIC8q IFdyaXRlIHRoZSBmdW5jdGlvbiBuYW1lIGludG8gdGhlIGNvZGUgc2VjdGlv biwgZGlyZWN0bHkgcHJlY2VkaW5nCiAgICB0aGUgZnVuY3Rpb24gcHJvbG9n dWUuCiAKQEAgLTE5OTE4LDEwICsxOTk2OSw2IEBAIGFybV9vdXRwdXRfZnVu Y3Rpb25fcHJvbG9ndWUgKEZJTEUgKmYsIEhPU1RfV0lERV9JTlQgZnJhbWVf c2l6ZSkKIHsKICAgdW5zaWduZWQgbG9uZyBmdW5jX3R5cGU7CiAKLSAgLyog Pz8/IERvIHdlIHdhbnQgdG8gcHJpbnQgc29tZSBvZiB0aGUgYmVsb3cgYW55 d2F5PyAgKi8KLSAgaWYgKFRBUkdFVF9USFVNQjEpCi0gICAgcmV0dXJuOwot CiAgIC8qIFNhbml0eSBjaGVjay4gICovCiAgIGdjY19hc3NlcnQgKCFhcm1f Y2Nmc21fc3RhdGUgJiYgIWFybV90YXJnZXRfaW5zbik7CiAKQEAgLTE5OTU2 LDYgKzIwMDAzLDggQEAgYXJtX291dHB1dF9mdW5jdGlvbl9wcm9sb2d1ZSAo RklMRSAqZiwgSE9TVF9XSURFX0lOVCBmcmFtZV9zaXplKQogICAgIGFzbV9m cHJpbnRmIChmLCAiXHQlQCBOZXN0ZWQ6IGZ1bmN0aW9uIGRlY2xhcmVkIGlu c2lkZSBhbm90aGVyIGZ1bmN0aW9uLlxuIik7CiAgIGlmIChJU19TVEFDS0FM SUdOIChmdW5jX3R5cGUpKQogICAgIGFzbV9mcHJpbnRmIChmLCAiXHQlQCBT dGFjayBBbGlnbjogTWF5IGJlIGNhbGxlZCB3aXRoIG1pcy1hbGlnbmVkIFNQ LlxuIik7CisgIGlmIChJU19DTVNFX0VOVFJZIChmdW5jX3R5cGUpKQorICAg IGFzbV9mcHJpbnRmIChmLCAiXHQlQCBOb24tc2VjdXJlIGVudHJ5IGZ1bmN0 aW9uOiBjYWxsZWQgZnJvbSBub24tc2VjdXJlIGNvZGUuXG4iKTsKIAogICBh c21fZnByaW50ZiAoZiwgIlx0JUAgYXJncyA9ICVkLCBwcmV0ZW5kID0gJWQs IGZyYW1lID0gJXdkXG4iLAogCSAgICAgICBjcnRsLT5hcmdzLnNpemUsCkBA IC0yNDAzMSw4ICsyNDA4MCw4IEBAIHRodW1iX3BvcCAoRklMRSAqZiwgdW5z aWduZWQgbG9uZyBtYXNrKQogICBpZiAobWFzayAmICgxIDw8IFBDX1JFR05V TSkpCiAgICAgewogICAgICAgLyogQ2F0Y2ggcG9wcGluZyB0aGUgUEMuICAq LwotICAgICAgaWYgKFRBUkdFVF9JTlRFUldPUksgfHwgVEFSR0VUX0JBQ0tU UkFDRQotCSAgfHwgY3J0bC0+Y2FsbHNfZWhfcmV0dXJuKQorICAgICAgaWYg KFRBUkdFVF9JTlRFUldPUksgfHwgVEFSR0VUX0JBQ0tUUkFDRSB8fCBjcnRs LT5jYWxsc19laF9yZXR1cm4KKwkgIHx8IElTX0NNU0VfRU5UUlkgKGFybV9j dXJyZW50X2Z1bmNfdHlwZSAoKSkpCiAJewogCSAgLyogVGhlIFBDIGlzIG5l dmVyIHBvcGVkIGRpcmVjdGx5LCBpbnN0ZWFkCiAJICAgICBpdCBpcyBwb3Bw ZWQgaW50byByMyBhbmQgdGhlbiBCWCBpcyB1c2VkLiAgKi8KQEAgLTI0MDkz LDcgKzI0MTQyLDEwIEBAIHRodW1iX2V4aXQgKEZJTEUgKmYsIGludCByZWdf Y29udGFpbmluZ19yZXR1cm5fYWRkcikKICAgICAgIGlmIChjcnRsLT5jYWxs c19laF9yZXR1cm4pCiAJYXNtX2ZwcmludGYgKGYsICJcdGFkZFx0JXIsICVy XG4iLCBTUF9SRUdOVU0sIEFSTV9FSF9TVEFDS0FESl9SRUdOVU0pOwogCi0g ICAgICBhc21fZnByaW50ZiAoZiwgIlx0YnhcdCVyXG4iLCByZWdfY29udGFp bmluZ19yZXR1cm5fYWRkcik7CisgICAgICBpZiAoSVNfQ01TRV9FTlRSWSAo YXJtX2N1cnJlbnRfZnVuY190eXBlICgpKSkKKwlhc21fZnByaW50ZiAoZiwg Ilx0Ynhuc1x0JXJcbiIsIHJlZ19jb250YWluaW5nX3JldHVybl9hZGRyKTsK KyAgICAgIGVsc2UKKwlhc21fZnByaW50ZiAoZiwgIlx0YnhcdCVyXG4iLCBy ZWdfY29udGFpbmluZ19yZXR1cm5fYWRkcik7CiAgICAgICByZXR1cm47CiAg ICAgfQogICAvKiBPdGhlcndpc2UgaWYgd2UgYXJlIG5vdCBzdXBwb3J0aW5n IGludGVyd29ya2luZyBhbmQgd2UgaGF2ZSBub3QgY3JlYXRlZApAQCAtMjQx MDIsNyArMjQxNTQsOCBAQCB0aHVtYl9leGl0IChGSUxFICpmLCBpbnQgcmVn X2NvbnRhaW5pbmdfcmV0dXJuX2FkZHIpCiAgIGVsc2UgaWYgKCFUQVJHRVRf SU5URVJXT1JLCiAJICAgJiYgIVRBUkdFVF9CQUNLVFJBQ0UKIAkgICAmJiAh aXNfY2FsbGVkX2luX0FSTV9tb2RlIChjdXJyZW50X2Z1bmN0aW9uX2RlY2wp Ci0JICAgJiYgIWNydGwtPmNhbGxzX2VoX3JldHVybikKKwkgICAmJiAhY3J0 bC0+Y2FsbHNfZWhfcmV0dXJuCisJICAgJiYgIUlTX0NNU0VfRU5UUlkgKGFy bV9jdXJyZW50X2Z1bmNfdHlwZSAoKSkpCiAgICAgewogICAgICAgYXNtX2Zw cmludGYgKGYsICJcdHBvcFx0eyVyfVxuIiwgUENfUkVHTlVNKTsKICAgICAg IHJldHVybjsKQEAgLTI0MzI1LDcgKzI0Mzc4LDEwIEBAIHRodW1iX2V4aXQg KEZJTEUgKmYsIGludCByZWdfY29udGFpbmluZ19yZXR1cm5fYWRkcikKICAg ICBhc21fZnByaW50ZiAoZiwgIlx0YWRkXHQlciwgJXJcbiIsIFNQX1JFR05V TSwgQVJNX0VIX1NUQUNLQURKX1JFR05VTSk7CiAKICAgLyogUmV0dXJuIHRv IGNhbGxlci4gICovCi0gIGFzbV9mcHJpbnRmIChmLCAiXHRieFx0JXJcbiIs IHJlZ19jb250YWluaW5nX3JldHVybl9hZGRyKTsKKyAgaWYgKElTX0NNU0Vf RU5UUlkgKGFybV9jdXJyZW50X2Z1bmNfdHlwZSAoKSkpCisgICAgYXNtX2Zw cmludGYgKGYsICJcdGJ4bnNcdCVyXG4iLCByZWdfY29udGFpbmluZ19yZXR1 cm5fYWRkcik7CisgIGVsc2UKKyAgICBhc21fZnByaW50ZiAoZiwgIlx0Ynhc dCVyXG4iLCByZWdfY29udGFpbmluZ19yZXR1cm5fYWRkcik7CiB9CiAMCiAv KiBTY2FuIElOU04ganVzdCBiZWZvcmUgYXNzZW1ibGVyIGlzIG91dHB1dCBm b3IgaXQuCkBAIC0yNTIxMSw2ICsyNTI2NywxMiBAQCB0aHVtYjJfZXhwYW5k X3JldHVybiAoYm9vbCBzaW1wbGVfcmV0dXJuKQogCiAgIGlmICghc2ltcGxl X3JldHVybiAmJiBzYXZlZF9yZWdzX21hc2spCiAgICAgeworICAgICAgLyog VE9ETzogVmVyaWZ5IHRoYXQgdGhpcyBwYXRoIGlzIG5ldmVyIHRha2VuIGZv ciBjbXNlX25vbnNlY3VyZV9lbnRyeQorCSBmdW5jdGlvbnMgb3IgYWRhcHQg Y29kZSB0byBoYW5kbGUgYWNjb3JkaW5nIHRvIEFDTEUuICBUaGlzIHBhdGgg c2hvdWxkCisJIG5vdCBiZSByZWFjaGFibGUgZm9yIGNtc2Vfbm9uc2VjdXJl X2VudHJ5IGZ1bmN0aW9ucyB0aG91Z2ggd2UgcHJlZmVyCisJIHRvIGFzc2Vy dCBpdCBmb3Igbm93IHRvIGVuc3VyZSB0aGF0IGZ1dHVyZSBjb2RlIGNoYW5n ZXMgZG8gbm90IHNpbGVudGx5CisJIGNoYW5nZSB0aGlzIGJlaGF2aW9yLiAg Ki8KKyAgICAgIGdjY19hc3NlcnQgKCFJU19DTVNFX0VOVFJZIChhcm1fY3Vy cmVudF9mdW5jX3R5cGUgKCkpKTsKICAgICAgIGlmIChudW1fcmVncyA9PSAx KQogICAgICAgICB7CiAgICAgICAgICAgcnR4IHBhciA9IGdlbl9ydHhfUEFS QUxMRUwgKFZPSURtb2RlLCBydHZlY19hbGxvYyAoMikpOwpAQCAtMjU2Mjgs NiArMjU2OTAsNyBAQCBhcm1fZXhwYW5kX2VwaWxvZ3VlIChib29sIHJlYWxs eV9yZXR1cm4pCiAKICAgICAgIGlmIChBUk1fRlVOQ19UWVBFIChmdW5jX3R5 cGUpICE9IEFSTV9GVF9JTlRFUldPUktFRAogICAgICAgICAgICYmIChUQVJH RVRfQVJNIHx8IEFSTV9GVU5DX1RZUEUgKGZ1bmNfdHlwZSkgPT0gQVJNX0ZU X05PUk1BTCkKKwkgICYmICFJU19DTVNFX0VOVFJZIChmdW5jX3R5cGUpCiAg ICAgICAgICAgJiYgIUlTX1NUQUNLQUxJR04gKGZ1bmNfdHlwZSkKICAgICAg ICAgICAmJiByZWFsbHlfcmV0dXJuCiAgICAgICAgICAgJiYgY3J0bC0+YXJn cy5wcmV0ZW5kX2FyZ3Nfc2l6ZSA9PSAwCmRpZmYgLS1naXQgYS9nY2MvY29u ZmlnL2FybS9lbGYuaCBiL2djYy9jb25maWcvYXJtL2VsZi5oCmluZGV4IGJj NGViODZmMWRhNWJlYWJmMzI2NDc2MzdlYjg3YTNmYzE3YTZjNmEuLjAzOTMx ZWVlNzM5MGFiNGQwOTUyMmU3ZDhiZWExMDQ0OTcxOWRkYmEgMTAwNjQ0Ci0t LSBhL2djYy9jb25maWcvYXJtL2VsZi5oCisrKyBiL2djYy9jb25maWcvYXJt L2VsZi5oCkBAIC03NSwxNiArNzUsNyBAQAogCiAvKiBXZSBtaWdodCBuZWVk IGEgQVJNIHNwZWNpZmljIGhlYWRlciB0byBmdW5jdGlvbiBkZWNsYXJhdGlv bnMuICAqLwogI3VuZGVmICBBU01fREVDTEFSRV9GVU5DVElPTl9OQU1FCi0j ZGVmaW5lIEFTTV9ERUNMQVJFX0ZVTkNUSU9OX05BTUUoRklMRSwgTkFNRSwg REVDTCkJCVwKLSAgZG8JCQkJCQkJCVwKLSAgICB7CQkJCQkJCQlcCi0gICAg ICBBUk1fREVDTEFSRV9GVU5DVElPTl9OQU1FIChGSUxFLCBOQU1FLCBERUNM KTsJCVwKLSAgICAgIEFTTV9PVVRQVVRfVFlQRV9ESVJFQ1RJVkUgKEZJTEUs IE5BTUUsICJmdW5jdGlvbiIpOwlcCi0gICAgICBBU01fREVDTEFSRV9SRVNV TFQgKEZJTEUsIERFQ0xfUkVTVUxUIChERUNMKSk7CQlcCi0gICAgICBBU01f T1VUUFVUX0xBQkVMKEZJTEUsIE5BTUUpOwkJCQlcCi0gICAgICBBUk1fT1VU UFVUX0ZOX1VOV0lORCAoRklMRSwgVFJVRSk7CQkJXAotICAgIH0JCQkJCQkJ CVwKLSAgd2hpbGUgKDApCisjZGVmaW5lIEFTTV9ERUNMQVJFX0ZVTkNUSU9O X05BTUUgYXJtX2FzbV9kZWNsYXJlX2Z1bmN0aW9uX25hbWUKIAogLyogV2Ug bWlnaHQgbmVlZCBhbiBBUk0gc3BlY2lmaWMgdHJhaWxlciBmb3IgZnVuY3Rp b24gZGVjbGFyYXRpb25zLiAgKi8KICN1bmRlZiAgQVNNX0RFQ0xBUkVfRlVO Q1RJT05fU0laRQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9DaGFuZ2VM b2cuYXJtIGIvZ2NjL3Rlc3RzdWl0ZS9DaGFuZ2VMb2cuYXJtCmluZGV4IDMw YWZkNGIwZmE5YjZmMjg1OWEzZjBjODQ0ODViNDA0ODdmNjAyZTkuLjMzOGFj MmQwZmJkNjc1MmNlNWNhNTk1NTdjZWExMmU0OTk2ZDYwN2YgMTAwNjQ0Ci0t LSBhL2djYy90ZXN0c3VpdGUvQ2hhbmdlTG9nLmFybQorKysgYi9nY2MvdGVz dHN1aXRlL0NoYW5nZUxvZy5hcm0KQEAgLTQsNiArNCwxNiBAQAogCTIwMTYt MTItMDIgIEFuZHJlIFZpZWlyYSAgPGFuZHJlLnNpbW9lc2RpYXN2aWVpcmFA YXJtLmNvbT4KIAkJICAgIFRob21hcyBQcmV1ZCdob21tZQk8dGhvbWFzLnBy ZXVkaG9tbWVAYXJtLmNvbT4KIAorCSogZ2NjLnRhcmdldC9hcm0vY21zZS9j bXNlLTQuYzogTmV3LgorCSogZ2NjLnRhcmdldC9hcm0vY21zZS9jbXNlLTku YzogTmV3LgorCSogZ2NjLnRhcmdldC9hcm0vY21zZS9jbXNlLTEwLmM6IE5l dy4KKworMjAxNi0xMi0wNSAgQW5kcmUgVmllaXJhICA8YW5kcmUuc2ltb2Vz ZGlhc3ZpZWlyYUBhcm0uY29tPgorCisJQmFja3BvcnQgZnJvbSBtYWlubGlu ZQorCTIwMTYtMTItMDIgIEFuZHJlIFZpZWlyYSAgPGFuZHJlLnNpbW9lc2Rp YXN2aWVpcmFAYXJtLmNvbT4KKwkJICAgIFRob21hcyBQcmV1ZCdob21tZQk8 dGhvbWFzLnByZXVkaG9tbWVAYXJtLmNvbT4KKwogCSogZ2NjLnRhcmdldC9h cm0vY21zZS9jbXNlLTMuYzogTmV3LgogCiAyMDE2LTEyLTA1ICBBbmRyZSBW aWVpcmEgIDxhbmRyZS5zaW1vZXNkaWFzdmllaXJhQGFybS5jb20+CmRpZmYg LS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYXJtL2Ntc2UvY21z ZS0xMC5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FybS9jbXNlL2Nt c2UtMTAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xYTkxYWMzOWVlMzdl ZjIwNDk1ZTA0N2I0MDJkM2Y1ZWRjNjBhNjEzCi0tLSAvZGV2L251bGwKKysr IGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FybS9jbXNlL2Ntc2UtMTAu YwpAQCAtMCwwICsxLDkgQEAKKy8qIHsgZGctZG8gY29tcGlsZSB9ICovCisv KiB7IGRnLW9wdGlvbnMgIi1tY21zZSIgfSAgKi8KKwordm9pZAorZm9vICh2 b2lkKSB7fQorCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItbm90 ICJieG5zIiB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxl ciAiZm9vOiIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJs ZXItbm90ICJfX2FjbGVfc2VfZm9vOiIgfSB9ICovCmRpZmYgLS1naXQgYS9n Y2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYXJtL2Ntc2UvY21zZS00LmMgYi9n Y2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYXJtL2Ntc2UvY21zZS00LmMKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMC4uNmY5MzBhYjA0YTEwOTdjNjQwOTdhNGUw MDMyOTZiYmU4NTczMzMxOQotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0 c3VpdGUvZ2NjLnRhcmdldC9hcm0vY21zZS9jbXNlLTQuYwpAQCAtMCwwICsx LDI3IEBACisvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLworLyogeyBkZy1vcHRp b25zICItbWNtc2UiIH0gICovCisKK3N0cnVjdCBzcGFuIHsKKyAgaW50IGEs IGI7Cit9OworCitleHRlcm4gaW50IHF1eCAodm9pZCk7CisKK3ZvaWQgX19h dHRyaWJ1dGVfXyAoKGNtc2Vfbm9uc2VjdXJlX2VudHJ5KSkKK2ZvbyAodm9p ZCkge30KKworc3RhdGljIHZvaWQgX19hdHRyaWJ1dGVfXyAoKGNtc2Vfbm9u c2VjdXJlX2VudHJ5KSkKK2JhciAodm9pZCkge30gLyogeyBkZy13YXJuaW5n ICJoYXMgbm8gZWZmZWN0IG9uIGZ1bmN0aW9ucyB3aXRoIHN0YXRpYyBsaW5r YWdlIiB9ICovCisKK2ludCBfX2F0dHJpYnV0ZV9fICgoY21zZV9ub25zZWN1 cmVfZW50cnkpKQorYmF6ICh2b2lkKQoreworICByZXR1cm4gcXV4ICgpOwor fQorCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMgImJ4 bnMiIDIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIg ImZvbzoiIH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVy ICJfX2FjbGVfc2VfZm9vOiIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nh bi1hc3NlbWJsZXItbm90ICJfX2FjbGVfc2VfYmFyOiIgfSB9ICovCisvKiB7 IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIgImJhejoiIH0gfSAqLworLyog eyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyICJfX2FjbGVfc2VfYmF6OiIg fSB9ICovCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQv YXJtL2Ntc2UvY21zZS05LmMgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQv YXJtL2Ntc2UvY21zZS05LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWQ5 N2YwZTFhMzcyMDliZDEyOWZmZTk2Y2U5MmE4NmJjMmUwZDVkMQotLS0gL2Rl di9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hcm0vY21z ZS9jbXNlLTkuYwpAQCAtMCwwICsxLDEyIEBACisvKiB7IGRnLWRvIGNvbXBp bGUgfSAqLworLyogeyBkZy1za2lwLWlmICJUZXN0aW5nIGV4Y2x1c2lvbiBv ZiAtbWNtc2UiIHsgYXJtLSotKiB9IHsgIi1tY21zZSIgfSB7ICIiIH0gfSAg Ki8KKworCitpbnQgX19hdHRyaWJ1dGVfXyAoKGNtc2Vfbm9uc2VjdXJlX2Vu dHJ5KSkKK2ZvbyAoaW50IGEpCit7IC8qIHsgZGctd2FybmluZyAiYXR0cmli dXRlIGlnbm9yZWQgd2l0aG91dCAtbWNtc2Ugb3B0aW9uIiB9ICovCisgIHJl dHVybiBhICsgMTsKK30KKworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1i bGVyICJmb286IiB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2Vt Ymxlci1ub3QgIl9fYWNsZV9zZV9mb286IiB9IH0gKi8K --------------070401090407020006080908--