From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 59871 invoked by alias); 10 Feb 2020 21:31:58 -0000 Mailing-List: contact binutils-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: binutils-owner@sourceware.org Received: (qmail 59861 invoked by uid 89); 10 Feb 2020 21:31:57 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-14.9 required=5.0 tests=AWL,BAYES_00,FREEMAIL_FROM,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,RCVD_IN_DNSWL_NONE,SPF_PASS autolearn=ham version=3.3.1 spammy= X-HELO: mail-oi1-f194.google.com Received: from mail-oi1-f194.google.com (HELO mail-oi1-f194.google.com) (209.85.167.194) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Mon, 10 Feb 2020 21:31:54 +0000 Received: by mail-oi1-f194.google.com with SMTP id v19so10682693oic.12 for ; Mon, 10 Feb 2020 13:31:54 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to; bh=jL0ftU+RfbbQ5NdAVhuFTZvluh+wLPmsACcksoA/I1Y=; b=oP27a6+0Z1sUKnKpGzCFrgR4VmCOcxLgP6qJHpRYnOOJEUzWHIGEr4C71PAZTzRNNG RgjxXEOByA8Og8poXMmwm4I+UfvFgsMicdLgGzlPp+LvscNCUI/Tw0ACkIzgr5CNAbBP wz6I1+DowOXF+faJ0UbW4wV1ZL0WK0w9hHvC/3Xjw6x3ewxbtn34sowdbWaKmjeAPhVc 3ck2Z7kPonnlDqPbgl4JvebzC2UXWquxZQSAa9jYdKuRjVpqDmNxx3Dvfbbr9r9lAR+e zC8LXWlur3YVP1W5brV9k2e2M0yiMExqAfHZBKTdnAkYqm/r5z/nUaVgcPs/Xy0n+/8p MHag== MIME-Version: 1.0 References: <20200210142435.397899-1-hjl.tools@gmail.com> In-Reply-To: <20200210142435.397899-1-hjl.tools@gmail.com> From: "H.J. Lu" Date: Mon, 10 Feb 2020 21:31:00 -0000 Message-ID: Subject: Re: [PATCH] Use GCC LTO wrapper to get real symbols from LTO IR objects To: Binutils Content-Type: multipart/mixed; boundary="000000000000bf1d20059e3f770e" X-IsSubscribed: yes X-SW-Source: 2020-02/txt/msg00158.txt.bz2 --000000000000bf1d20059e3f770e Content-Type: text/plain; charset="UTF-8" Content-length: 2173 On Mon, Feb 10, 2020 at 6:24 AM H.J. Lu wrote: > > GCC LTO wrapper is needed to extract real symbols from LTO IR objects. > This patch does the following: > > 1. Set up GCC LTO wrapper for each LTO IR object. > 2. Run GCC LTO wrapper to get the real object. > 3. Extract symbol info from the real object. > 4. Cleanup afterwards. > > bfd/ > > PR binutils/25355 > * plugin.c (bfd_plugin_close_and_cleanup): Removed. > (plugin_list_entry): Add all_symbols_read, cleanup_handler, > gcc, lto_wrapper, resolution_file, resolution_option, gcc_env, > real_bfd, real_nsyms, real_syms, lto_nsyms and lto_syms. > (get_lto_wrapper): New. > (setup_lto_wrapper_env): Likewise. > (current_plugin): Likewise. > (register_all_symbols_read): Likewise. > (register_cleanup): Likewise. > (get_symbols): Likewise. > (add_input_file): Likewise. > (bfd_plugin_close_and_cleanup): Likewise. > (claim_file): Removed. > (register_claim_file): Set current_plugin->claim_file. > (add_symbols): Make a copy of LTO symbols. Set lto_nsyms and > lto_syms in current_plugin. > (try_claim): Use current_plugin->claim_file. Call LTO plugin > all_symbols_read handler. Copy real symbols to plugin_data. > Call LTO plugin cleanup handler. Clean up for LTO wrapper. > (try_load_plugin): Don't reuse the previous plugin for LTO > wrapper. Set up GCC LTO wrapper if possible. Don't set > plugin_list_iter->claim_file. > (bfd_plugin_canonicalize_symtab): Use real LTO symbols if > possible. > * plugin.h (plugin_data_struct): Add real_bfd, real_nsyms and > real_syms. > > ld/ > > PR binutils/25355 > * testsuite/ld-plugin/lto.exp: Run PR binutils/25355 test. > * testsuite/ld-plugin/pr25355.c: New file. > * testsuite/ld-plugin/pr25355.d: Likewise. > * testsuite/lib/ld-lib.exp (run_cc_link_tests): Support > compile only dump. Here is the updated patch to avoid mallocing plugin_list_iter for each IR object. -- H.J. --000000000000bf1d20059e3f770e Content-Type: text/x-patch; charset="US-ASCII"; name="0001-Use-GCC-LTO-wrapper-to-get-real-symbols-from-LTO-IR-.patch" Content-Disposition: attachment; filename="0001-Use-GCC-LTO-wrapper-to-get-real-symbols-from-LTO-IR-.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_k6gyzjrc0 Content-length: 26430 RnJvbSA4YzQ3MDE4ZjFiYTVmNzgzZDI0MjMwNTUwZDQ2OTE5YjNmMGExNTY0 IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiAiSC5KLiBMdSIgPGhq bC50b29sc0BnbWFpbC5jb20+CkRhdGU6IFN1biwgOSBGZWIgMjAyMCAxMzoz NToxMCAtMDgwMApTdWJqZWN0OiBbUEFUQ0hdIFVzZSBHQ0MgTFRPIHdyYXBw ZXIgdG8gZ2V0IHJlYWwgc3ltYm9scyBmcm9tIExUTyBJUiBvYmplY3RzCgpH Q0MgTFRPIHdyYXBwZXIgaXMgbmVlZGVkIHRvIGV4dHJhY3QgcmVhbCBzeW1i b2xzIGZyb20gTFRPIElSIG9iamVjdHMuClRoaXMgcGF0Y2ggZG9lcyB0aGUg Zm9sbG93aW5nOgoKMS4gU2V0IHVwIEdDQyBMVE8gd3JhcHBlciBmb3IgZWFj aCBMVE8gSVIgb2JqZWN0LgoyLiBSdW4gR0NDIExUTyB3cmFwcGVyIHRvIGdl dCB0aGUgcmVhbCBvYmplY3QuCjMuIEV4dHJhY3Qgc3ltYm9sIGluZm8gZnJv bSB0aGUgcmVhbCBvYmplY3QuCjQuIENsZWFudXAgYWZ0ZXJ3YXJkcy4KCmJm ZC8KCglQUiBiaW51dGlscy8yNTM1NQoJKiBwbHVnaW4uYyAoYmZkX3BsdWdp bl9jbG9zZV9hbmRfY2xlYW51cCk6IFJlbW92ZWQuCgkocGx1Z2luX2xpc3Rf ZW50cnkpOiBBZGQgYWxsX3N5bWJvbHNfcmVhZCwgY2xlYW51cF9oYW5kbGVy LAoJZ2NjLCBsdG9fd3JhcHBlciwgcmVzb2x1dGlvbl9maWxlLCByZXNvbHV0 aW9uX29wdGlvbiwgZ2NjX2VudiwKCXJlYWxfYmZkLCByZWFsX25zeW1zLCBy ZWFsX3N5bXMsIGx0b19uc3ltcyBhbmQgbHRvX3N5bXMuCgkoZ2V0X2x0b193 cmFwcGVyKTogTmV3LgoJKHNldHVwX2x0b193cmFwcGVyX2Vudik6IExpa2V3 aXNlLgoJKGN1cnJlbnRfcGx1Z2luKTogTGlrZXdpc2UuCgkocmVnaXN0ZXJf YWxsX3N5bWJvbHNfcmVhZCk6IExpa2V3aXNlLgoJKHJlZ2lzdGVyX2NsZWFu dXApOiBMaWtld2lzZS4KCShnZXRfc3ltYm9scyk6IExpa2V3aXNlLgoJKGFk ZF9pbnB1dF9maWxlKTogTGlrZXdpc2UuCgkoYmZkX3BsdWdpbl9jbG9zZV9h bmRfY2xlYW51cCk6IExpa2V3aXNlLgoJKGNsYWltX2ZpbGUpOiBSZW1vdmVk LgoJKHJlZ2lzdGVyX2NsYWltX2ZpbGUpOiBTZXQgY3VycmVudF9wbHVnaW4t PmNsYWltX2ZpbGUuCgkoYWRkX3N5bWJvbHMpOiBNYWtlIGEgY29weSBvZiBM VE8gc3ltYm9scy4gIFNldCBsdG9fbnN5bXMgYW5kCglsdG9fc3ltcyBpbiBj dXJyZW50X3BsdWdpbi4KCSh0cnlfY2xhaW0pOiBVc2UgY3VycmVudF9wbHVn aW4tPmNsYWltX2ZpbGUuICBDYWxsIExUTyBwbHVnaW4KCWFsbF9zeW1ib2xz X3JlYWQgaGFuZGxlci4gIENvcHkgcmVhbCBzeW1ib2xzIHRvIHBsdWdpbl9k YXRhLgoJQ2FsbCBMVE8gcGx1Z2luIGNsZWFudXAgaGFuZGxlci4gIENsZWFu IHVwIGZvciBMVE8gd3JhcHBlci4KCSh0cnlfbG9hZF9wbHVnaW4pOiBEb24n dCByZXVzZSB0aGUgcHJldmlvdXMgcGx1Z2luIGZvciBMVE8KCXdyYXBwZXIu ICBTZXQgdXAgR0NDIExUTyB3cmFwcGVyIGlmIHBvc3NpYmxlLiAgRG9uJ3Qg c2V0CglwbHVnaW5fbGlzdF9pdGVyLT5jbGFpbV9maWxlLgoJKGJmZF9wbHVn aW5fY2Fub25pY2FsaXplX3N5bXRhYik6IFVzZSByZWFsIExUTyBzeW1ib2xz IGlmCglwb3NzaWJsZS4KCSogcGx1Z2luLmggKHBsdWdpbl9kYXRhX3N0cnVj dCk6IEFkZCByZWFsX2JmZCwgcmVhbF9uc3ltcyBhbmQKCXJlYWxfc3ltcy4K CmxkLwoKCVBSIGJpbnV0aWxzLzI1MzU1CgkqIHRlc3RzdWl0ZS9sZC1wbHVn aW4vbHRvLmV4cDogUnVuIFBSIGJpbnV0aWxzLzI1MzU1IHRlc3QuCgkqIHRl c3RzdWl0ZS9sZC1wbHVnaW4vcHIyNTM1NS5jOiBOZXcgZmlsZS4KCSogdGVz dHN1aXRlL2xkLXBsdWdpbi9wcjI1MzU1LmQ6IExpa2V3aXNlLgoJKiB0ZXN0 c3VpdGUvbGliL2xkLWxpYi5leHAgKHJ1bl9jY19saW5rX3Rlc3RzKTogU3Vw cG9ydCBjb21waWxlCglvbmx5IGR1bXAuCi0tLQogYmZkL3BsdWdpbi5jICAg ICAgICAgICAgICAgICAgICAgfCA0NTYgKysrKysrKysrKysrKysrKysrKysr KysrKysrKystLQogYmZkL3BsdWdpbi5oICAgICAgICAgICAgICAgICAgICAg fCAgIDMgKwogbGQvdGVzdHN1aXRlL2xkLXBsdWdpbi9sdG8uZXhwICAgfCAg IDUgKwogbGQvdGVzdHN1aXRlL2xkLXBsdWdpbi9wcjI1MzU1LmMgfCAgIDIg KwogbGQvdGVzdHN1aXRlL2xkLXBsdWdpbi9wcjI1MzU1LmQgfCAgIDQgKwog bGQvdGVzdHN1aXRlL2xpYi9sZC1saWIuZXhwICAgICAgfCAgIDEgKwogNiBm aWxlcyBjaGFuZ2VkLCA0NTAgaW5zZXJ0aW9ucygrKSwgMjEgZGVsZXRpb25z KC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGQvdGVzdHN1aXRlL2xkLXBsdWdp bi9wcjI1MzU1LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsZC90ZXN0c3VpdGUv bGQtcGx1Z2luL3ByMjUzNTUuZAoKZGlmZiAtLWdpdCBhL2JmZC9wbHVnaW4u YyBiL2JmZC9wbHVnaW4uYwppbmRleCA1MzdhYjYwMzExLi5mZjk1NTU4MjUy IDEwMDY0NAotLS0gYS9iZmQvcGx1Z2luLmMKKysrIGIvYmZkL3BsdWdpbi5j CkBAIC02OSw3ICs2OSw2IEBAIGRsZXJyb3IgKHZvaWQpCiAKICNlbmRpZiAv KiAhZGVmaW5lZCAoSEFWRV9ETEZDTl9IKSAmJiBkZWZpbmVkIChIQVZFX1dJ TkRPV1NfSCkgICovCiAKLSNkZWZpbmUgYmZkX3BsdWdpbl9jbG9zZV9hbmRf Y2xlYW51cAkJICAgICAgX2JmZF9nZW5lcmljX2Nsb3NlX2FuZF9jbGVhbnVw CiAjZGVmaW5lIGJmZF9wbHVnaW5fYmZkX2ZyZWVfY2FjaGVkX2luZm8JCSAg ICAgIF9iZmRfZ2VuZXJpY19iZmRfZnJlZV9jYWNoZWRfaW5mbwogI2RlZmlu ZSBiZmRfcGx1Z2luX25ld19zZWN0aW9uX2hvb2sJCSAgICAgIF9iZmRfZ2Vu ZXJpY19uZXdfc2VjdGlvbl9ob29rCiAjZGVmaW5lIGJmZF9wbHVnaW5fZ2V0 X3NlY3Rpb25fY29udGVudHMJCSAgICAgIF9iZmRfZ2VuZXJpY19nZXRfc2Vj dGlvbl9jb250ZW50cwpAQCAtMTI0LDEzICsxMjMsMjkwIEBAIG1lc3NhZ2Ug KGludCBsZXZlbCBBVFRSSUJVVEVfVU5VU0VELAogICByZXR1cm4gTERQU19P SzsKIH0KIAorc3RydWN0IHBsdWdpbl9saXN0X2VudHJ5Cit7CisgIC8qIFRo ZXNlIG11c3QgYmUgaW5pdGlhbGl6ZWQgZm9yIGVhY2ggSVIgb2JqZWN0IHdp dGggTFRPIHdyYXBwZXIuICAqLworICB2b2lkICpoYW5kbGU7CisgIGxkX3Bs dWdpbl9jbGFpbV9maWxlX2hhbmRsZXIgY2xhaW1fZmlsZTsKKyAgbGRfcGx1 Z2luX2FsbF9zeW1ib2xzX3JlYWRfaGFuZGxlciBhbGxfc3ltYm9sc19yZWFk OworICBsZF9wbHVnaW5fYWxsX3N5bWJvbHNfcmVhZF9oYW5kbGVyIGNsZWFu dXBfaGFuZGxlcjsKKyAgY2hhciAqcmVzb2x1dGlvbl9maWxlOworICBjaGFy ICpyZXNvbHV0aW9uX29wdGlvbjsKKyAgYmZkICpyZWFsX2JmZDsKKyAgbG9u ZyByZWFsX25zeW1zOworICBhc3ltYm9sICoqcmVhbF9zeW1zOworICBpbnQg bHRvX25zeW1zOworICBjb25zdCBzdHJ1Y3QgbGRfcGx1Z2luX3N5bWJvbCAq bHRvX3N5bXM7CisKKyAgc3RydWN0IHBsdWdpbl9saXN0X2VudHJ5ICpuZXh0 OworCisgIC8qIFRoZXNlIGNhbiBiZSByZXVzZWQgZm9yIGFsbCBJUiBvYmpl Y3RzLiAgKi8KKyAgY29uc3QgY2hhciAqcGx1Z2luX25hbWU7CisgIGNoYXIg KmdjYzsKKyAgY2hhciAqbHRvX3dyYXBwZXI7CisgIGNoYXIgKmdjY19lbnY7 CisgIGJmZF9ib29sZWFuIGluaXRpYWxpemVkOworfTsKKworLyogVXNlIEdD QyBMVE8gd3JhcHBlciB0byBjb3ZlcnQgTFRPIElSIG9iamVjdCB0byB0aGUg cmVhbCBvYmplY3QuICAqLworCitzdGF0aWMgYmZkX2Jvb2xlYW4KK2dldF9s dG9fd3JhcHBlciAoc3RydWN0IHBsdWdpbl9saXN0X2VudHJ5ICpwbHVnaW4p Cit7CisgIHN0cnVjdCBzdGF0IHN0OworICBjb25zdCBjaGFyICpyZWFsX25h bWU7CisgIGNvbnN0IGNoYXIgKmJhc2VfbmFtZTsKKyAgc2l6ZV90IGxlbmd0 aDsKKyAgY29uc3QgY2hhciAqdGFyZ2V0X3N0YXJ0ID0gTlVMTDsKKyAgY29u c3QgY2hhciAqdGFyZ2V0X2VuZCA9IE5VTEw7CisgIHNpemVfdCB0YXJnZXRf bGVuZ3RoID0gMDsKKyAgY2hhciAqZ2NjX25hbWU7CisgIGNoYXIgKndyYXBw ZXJfbmFtZTsKKyAgY2hhciAqcDsKKyAgY2hhciBkaXJfc2VwZXJhdG9yID0g J1wwJzsKKyAgY2hhciAqcmVzb2x1dGlvbl9maWxlOworCisgIGlmIChwbHVn aW4tPmluaXRpYWxpemVkKQorICAgIHsKKyAgICAgIGlmIChwbHVnaW4tPmx0 b193cmFwcGVyKQorCXsKKwkgIHJlc29sdXRpb25fZmlsZSA9IG1ha2VfdGVt cF9maWxlICgiLnJlcyIpOworCSAgaWYgKHJlc29sdXRpb25fZmlsZSkKKwkg ICAgeworCSAgICAgIHBsdWdpbi0+cmVzb2x1dGlvbl9maWxlID0gcmVzb2x1 dGlvbl9maWxlOworCSAgICAgIHBsdWdpbi0+cmVzb2x1dGlvbl9vcHRpb24g PSBjb25jYXQgKCItZnJlc29sdXRpb249IiwKKwkJCQkJCSAgcmVzb2x1dGlv bl9maWxlLCBOVUxMKTsKKwkgICAgICByZXR1cm4gVFJVRTsKKwkgICAgfQor CSAgZWxzZQorCSAgICB7CisJICAgICAgLyogU29tZXRoaW5nIGlzIHdyb25n LiAgR2l2ZSB1cC4gICovCisJICAgICAgZnJlZSAocGx1Z2luLT5nY2MpOwor CSAgICAgIGZyZWUgKHBsdWdpbi0+bHRvX3dyYXBwZXIpOworCSAgICAgIGZy ZWUgKHBsdWdpbi0+Z2NjX2Vudik7CisJICAgICAgcGx1Z2luLT5nY2MgPSBO VUxMOworCSAgICAgIHBsdWdpbi0+Z2NjX2VudiA9IE5VTEw7CisJICAgICAg cGx1Z2luLT5sdG9fd3JhcHBlciA9IE5VTEw7CisJICAgIH0KKwl9CisKKyAg ICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisKKyAgcGx1Z2luLT5pbml0aWFs aXplZCA9IFRSVUU7CisKKyAgLyogQ2hlY2sgZm9yIFBSRUZJWC9saWJleGVj L2djYy9UQVJHRVQvVkVSU0lPTi9saWJsdG9fcGx1Z2luLnNvLiAgKi8KKyAg cmVhbF9uYW1lID0gbHJlYWxwYXRoIChwbHVnaW4tPnBsdWdpbl9uYW1lKTsK KyAgYmFzZV9uYW1lID0gbGJhc2VuYW1lIChyZWFsX25hbWUpOworCisgIC8q IFRoZSBkaXJlY3RvcnkgbGVuZ3RoIGluIHBsdWdpbiBwYXRobmFtZS4gICov CisgIGxlbmd0aCA9IGJhc2VfbmFtZSAtIHJlYWxfbmFtZTsKKworICAvKiBT a2lwIGlmIHRoZXJlIGlzIG5vIFBSRUZJWC4gICovCisgIGlmICghbGVuZ3Ro KQorICAgIHJldHVybiBGQUxTRTsKKworICBwID0gKGNoYXIgKikgcmVhbF9u YW1lICsgbGVuZ3RoIC0gMTsKKyAgaWYgKElTX0RJUl9TRVBBUkFUT1IgKCpw KSkKKyAgICB7CisgICAgICBpbnQgbGV2ZWwgPSAwOworICAgICAgZm9yICg7 IHAgIT0gcmVhbF9uYW1lOyBwLS0pCisJaWYgKElTX0RJUl9TRVBBUkFUT1Ig KCpwKSkKKwkgIHsKKwkgICAgbGV2ZWwrKzsKKwkgICAgaWYgKGxldmVsID09 IDIpCisJICAgICAgdGFyZ2V0X2VuZCA9IHA7CisJICAgIGVsc2UgaWYgKGxl dmVsID09IDMpCisJICAgICAgeworCQl0YXJnZXRfc3RhcnQgPSBwICsgMTsK KwkJdGFyZ2V0X2xlbmd0aCA9IHRhcmdldF9lbmQgLSB0YXJnZXRfc3RhcnQ7 CisJICAgICAgfQorCSAgICBlbHNlIGlmIChsZXZlbCA9PSA1KQorCSAgICAg IHsKKwkJZGlyX3NlcGVyYXRvciA9ICpwOworCQlicmVhazsKKwkgICAgICB9 CisJICB9CisgICAgfQorCisgIC8qIFNraXAgaWYgdGhlcmUgaXMgbm8gVEFS R0VUIG5vciBQUkVGSVguICAqLworICBpZiAoIXRhcmdldF9sZW5ndGggfHwg IWRpcl9zZXBlcmF0b3IpCisgICAgcmV0dXJuIEZBTFNFOworCisgIGdjY19u YW1lID0gYmZkX21hbGxvYyAobGVuZ3RoICsgdGFyZ2V0X2xlbmd0aCArIHNp emVvZiAoImdjYyIpKTsKKyAgbWVtY3B5IChnY2NfbmFtZSwgcmVhbF9uYW1l LCBsZW5ndGgpOworCisgIC8qIEdldCBQUkVGSVgvYmluLy4gICovCisgIHAg Kz0gZ2NjX25hbWUgLSByZWFsX25hbWU7CisgIG1lbWNweSAocCArIDEsICJi aW4iLCAzKTsKKyAgcFs0XSA9IGRpcl9zZXBlcmF0b3I7CisKKyAgLyogVHJ5 IFBSRUZJWC9iaW4vVEFSR0VULWdjYyBmaXJzdC4gICovCisgIG1lbWNweSAo cCArIDUsIHRhcmdldF9zdGFydCwgdGFyZ2V0X2xlbmd0aCk7CisgIHBbNSAr IHRhcmdldF9sZW5ndGhdID0gJy0nOworICBtZW1jcHkgKHAgKyA1ICsgdGFy Z2V0X2xlbmd0aCArIDEsICJnY2MiLCBzaXplb2YgKCJnY2MiKSk7CisgIGlm IChzdGF0IChnY2NfbmFtZSwgJnN0KSAhPSAwIHx8ICFTX0lTUkVHIChzdC5z dF9tb2RlKSkKKyAgICB7CisgICAgICAvKiBUaGVuIHRyeSBQUkVGSVgvYmlu L2djYy4gICovCisgICAgICBtZW1jcHkgKHAgKyA1LCAiZ2NjIiwgc2l6ZW9m ICgiZ2NjIikpOworICAgICAgaWYgKHN0YXQgKGdjY19uYW1lLCAmc3QpICE9 IDAgfHwgIVNfSVNSRUcgKHN0LnN0X21vZGUpKQorCXsKKwkgIGZyZWUgKGdj Y19uYW1lKTsKKwkgIHJldHVybiBGQUxTRTsKKwl9CisgICAgfQorCisgIC8q IGx0by13cmFwcGVyIHNob3VsZCBiZSBpbiB0aGUgc2FtZSBkaXJlY3Rvcnkg d2l0aCBMVE8gcGx1Z2luLiAgKi8KKyAgd3JhcHBlcl9uYW1lID0gYmZkX21h bGxvYyAobGVuZ3RoICsgc2l6ZW9mICgibHRvLXdyYXBwZXIiKSk7CisgIG1l bWNweSAod3JhcHBlcl9uYW1lLCByZWFsX25hbWUsIGxlbmd0aCk7CisgIG1l bWNweSAod3JhcHBlcl9uYW1lICsgbGVuZ3RoLCAibHRvLXdyYXBwZXIiLCBz aXplb2YgKCJsdG8td3JhcHBlciIpKTsKKyAgaWYgKHN0YXQgKHdyYXBwZXJf bmFtZSwgJnN0KSA9PSAwICYmIFNfSVNSRUcgKHN0LnN0X21vZGUpKQorICAg IHsKKyAgICAgIHJlc29sdXRpb25fZmlsZSA9IG1ha2VfdGVtcF9maWxlICgi LnJlcyIpOworICAgICAgaWYgKHJlc29sdXRpb25fZmlsZSkKKwl7CisJICBw bHVnaW4tPmdjYyA9IGdjY19uYW1lOworCSAgcGx1Z2luLT5sdG9fd3JhcHBl ciA9IHdyYXBwZXJfbmFtZTsKKwkgIHBsdWdpbi0+Z2NjX2VudiA9IGNvbmNh dCAoIkNPTExFQ1RfR0NDPSIsIGdjY19uYW1lLCBOVUxMKTsKKwkgIHBsdWdp bi0+cmVzb2x1dGlvbl9maWxlID0gcmVzb2x1dGlvbl9maWxlOworCSAgcGx1 Z2luLT5yZXNvbHV0aW9uX29wdGlvbiA9IGNvbmNhdCAoIi1mcmVzb2x1dGlv bj0iLAorCQkJCQkgICAgICByZXNvbHV0aW9uX2ZpbGUsIE5VTEwpOworCSAg cmV0dXJuIFRSVUU7CisJfQorICAgIH0KKworICBmcmVlIChnY2NfbmFtZSk7 CisgIGZyZWUgKHdyYXBwZXJfbmFtZSk7CisgIHJldHVybiBGQUxTRTsKK30K KworLyogU2V0IGVudmlyb25tZW50IHZhcmlhYmxlcyBmb3IgR0NDIExUTyB3 cmFwcGVyIHRvIGNvdmVydCBMVE8gSVIKKyAgIG9iamVjdCB0byB0aGUgcmVh bCBvYmplY3QuICAqLworCitzdGF0aWMgaW50CitzZXR1cF9sdG9fd3JhcHBl cl9lbnYgKHN0cnVjdCBwbHVnaW5fbGlzdF9lbnRyeSAqcGx1Z2luKQorewor ICByZXR1cm4gKHB1dGVudiAocGx1Z2luLT5nY2NfZW52KQorCSAgfHwgcHV0 ZW52ICgiQ09MTEVDVF9HQ0NfT1BUSU9OUz0iKSk7Cit9CisKK3N0YXRpYyBz dHJ1Y3QgcGx1Z2luX2xpc3RfZW50cnkgKnBsdWdpbl9saXN0ID0gTlVMTDsK K3N0YXRpYyBzdHJ1Y3QgcGx1Z2luX2xpc3RfZW50cnkgKmN1cnJlbnRfcGx1 Z2luID0gTlVMTDsKKwogLyogUmVnaXN0ZXIgYSBjbGFpbS1maWxlIGhhbmRs ZXIuICovCi1zdGF0aWMgbGRfcGx1Z2luX2NsYWltX2ZpbGVfaGFuZGxlciBj bGFpbV9maWxlID0gTlVMTDsKIAogc3RhdGljIGVudW0gbGRfcGx1Z2luX3N0 YXR1cwogcmVnaXN0ZXJfY2xhaW1fZmlsZSAobGRfcGx1Z2luX2NsYWltX2Zp bGVfaGFuZGxlciBoYW5kbGVyKQogewotICBjbGFpbV9maWxlID0gaGFuZGxl cjsKKyAgY3VycmVudF9wbHVnaW4tPmNsYWltX2ZpbGUgPSBoYW5kbGVyOwor ICByZXR1cm4gTERQU19PSzsKK30KKworLyogUmVnaXN0ZXIgYW4gYWxsLXN5 bWJvbHMtcmVhZCBoYW5kbGVyLiAgKi8KKworc3RhdGljIGVudW0gbGRfcGx1 Z2luX3N0YXR1cworcmVnaXN0ZXJfYWxsX3N5bWJvbHNfcmVhZCAobGRfcGx1 Z2luX2FsbF9zeW1ib2xzX3JlYWRfaGFuZGxlciBoYW5kbGVyKQoreworICBj dXJyZW50X3BsdWdpbi0+YWxsX3N5bWJvbHNfcmVhZCA9IGhhbmRsZXI7Cisg IHJldHVybiBMRFBTX09LOworfQorCisvKiBSZWdpc3RlciBhIGNsZWFudXAg aGFuZGxlci4gICovCisKK3N0YXRpYyBlbnVtIGxkX3BsdWdpbl9zdGF0dXMK K3JlZ2lzdGVyX2NsZWFudXAgKGxkX3BsdWdpbl9hbGxfc3ltYm9sc19yZWFk X2hhbmRsZXIgaGFuZGxlcikKK3sKKyAgY3VycmVudF9wbHVnaW4tPmNsZWFu dXBfaGFuZGxlciA9IGhhbmRsZXI7CisgIHJldHVybiBMRFBTX09LOworfQor CisvKiBHZXQgdGhlIHN5bWJvbCByZXNvbHV0aW9uIGluZm8gZm9yIGEgcGx1 Z2luLWNsYWltZWQgaW5wdXQgZmlsZS4gICovCisKK3N0YXRpYyBlbnVtIGxk X3BsdWdpbl9zdGF0dXMKK2dldF9zeW1ib2xzIChjb25zdCB2b2lkICpoYW5k bGUgQVRUUklCVVRFX1VOVVNFRCwgaW50IG5zeW1zLAorCSAgICAgc3RydWN0 IGxkX3BsdWdpbl9zeW1ib2wgKnN5bXMpCit7CisgIGlmIChzeW1zKQorICAg IHsKKyAgICAgIGludCBuOworICAgICAgZm9yIChuID0gMDsgbiA8IG5zeW1z OyBuKyspCisJeworCSAgc3dpdGNoIChzeW1zW25dLmRlZikKKwkgICAgewor CSAgICBkZWZhdWx0OgorCSAgICAgIEJGRF9BU1NFUlQgKDApOworCSAgICAg IGJyZWFrOworCSAgICBjYXNlIExEUEtfVU5ERUY6CisJICAgIGNhc2UgTERQ S19XRUFLVU5ERUY6CisJICAgICAgc3ltc1tuXS5yZXNvbHV0aW9uID0gTERQ Ul9VTkRFRjsKKwkgICAgICBicmVhazsKKwkgICAgY2FzZSBMRFBLX0RFRjoK KwkgICAgY2FzZSBMRFBLX1dFQUtERUY6CisJICAgIGNhc2UgTERQS19DT01N T046CisJICAgICAgLyogVGVsbCBwbHVnaW4gdGhhdCBMVE8gc3ltYm9sIGhh cyByZWZlcmVuY2VzIGZyb20gcmVndWxhcgorCQkgb2JqZWN0IGNvZGUuICov CisJICAgICAgc3ltc1tuXS5yZXNvbHV0aW9uICA9IExEUFJfUFJFVkFJTElO R19ERUY7CisJICAgICAgYnJlYWs7CisJICAgIH0KKyAgICAgIH0KKyAgICB9 CisKKyAgcmV0dXJuIExEUFNfT0s7Cit9CisKKy8qIEFkZCBhIG5ldyAocmVh bCkgaW5wdXQgZmlsZSBnZW5lcmF0ZWQgYnkgYSBwbHVnaW4uICAqLworCitz dGF0aWMgZW51bSBsZF9wbHVnaW5fc3RhdHVzCithZGRfaW5wdXRfZmlsZSAo Y29uc3QgY2hhciAqcGF0aG5hbWUpCit7CisgIC8qIEdldCBzeW1ib2xzIGZy b20gdGhlIHJlYWwgTFRPIG9iamVjdC4gICovCisgIGNoYXIgKiptYXRjaGlu ZzsKKyAgbG9uZyByZWFsX3N5bXNpemU7CisgIGxvbmcgcmVhbF9uc3ltczsK KyAgYXN5bWJvbCAqKnJlYWxfc3ltczsKKyAgaW50IGx0b19uc3ltczsKKyAg YmZkX2Jvb2xlYW4gbHRvX3N5bWJvbF9mb3VuZDsKKyAgY29uc3Qgc3RydWN0 IGxkX3BsdWdpbl9zeW1ib2wgKmx0b19zeW1zOworICBiZmQgKnJiZmQ7Cisg IGludCBpLCBqOworCisgIHJiZmQgPSBiZmRfb3BlbnIgKHBhdGhuYW1lLCBO VUxMKTsKKyAgaWYgKCFiZmRfY2hlY2tfZm9ybWF0X21hdGNoZXMgKHJiZmQs IGJmZF9vYmplY3QsICZtYXRjaGluZykpCisgICAgQkZEX0FTU0VSVCAoMCk7 CisKKyAgcmVhbF9zeW1zaXplID0gYmZkX2dldF9zeW10YWJfdXBwZXJfYm91 bmQgKHJiZmQpOworICBpZiAocmVhbF9zeW1zaXplIDwgMCkKKyAgICBCRkRf QVNTRVJUICgwKTsKKworICByZWFsX3N5bXMgPSAoYXN5bWJvbCAqKikgeG1h bGxvYyAocmVhbF9zeW1zaXplKTsKKyAgcmVhbF9uc3ltcyA9IGJmZF9jYW5v bmljYWxpemVfc3ltdGFiIChyYmZkLCByZWFsX3N5bXMpOworICBpZiAocmVh bF9uc3ltcyA8IDApCisgICAgQkZEX0FTU0VSVCAoMCk7CisKKyAgLyogTkI6 IExUTyBwbHVnaW4gbWF5IGdlbmVyYXRlIG1vcmUgdGhhbiBvbmUgcmVhbCBv YmplY3QgZnJvbSBvbmUKKyAgICAgTFRPIElSIG9iamVjdC4gIFdlIHVzZSB0 aGUgb25lIHdoaWNoIGNvbnRhaW5zIExUTyBzeW1ib2xzLiAgKi8KKyAgbHRv X3N5bXMgPSBjdXJyZW50X3BsdWdpbi0+bHRvX3N5bXM7CisgIGx0b19uc3lt cyA9IGN1cnJlbnRfcGx1Z2luLT5sdG9fbnN5bXM7CisgIGx0b19zeW1ib2xf Zm91bmQgPSBGQUxTRTsKKyAgZm9yIChpID0gMDsgaSA8IGx0b19uc3ltczsg aSsrKQorICAgIGZvciAoaiA9IDA7IGogPCByZWFsX25zeW1zOyBqKyspCisg ICAgICBpZiAocmVhbF9zeW1zW2pdLT5uYW1lCisJICAmJiBzdHJjbXAgKGx0 b19zeW1zW2ldLm5hbWUsIHJlYWxfc3ltc1tqXS0+bmFtZSkgPT0gMCkKKwl7 CisJICBsdG9fc3ltYm9sX2ZvdW5kID0gVFJVRTsKKwkgIGJyZWFrOworCX0K KworICBpZiAobHRvX3N5bWJvbF9mb3VuZCkKKyAgICB7CisgICAgICBjdXJy ZW50X3BsdWdpbi0+cmVhbF9uc3ltcyA9IHJlYWxfbnN5bXM7CisgICAgICBj dXJyZW50X3BsdWdpbi0+cmVhbF9zeW1zID0gcmVhbF9zeW1zOworICAgICAg LyogTkI6IFdlIGNhbid0IGNsb3NlIFJCRkQgd2hpY2ggb3duIHRoZSByZWFs IHN5bWJvbCBpbmZvLiAgKi8KKyAgICAgIGN1cnJlbnRfcGx1Z2luLT5yZWFs X2JmZCA9IHJiZmQ7CisgICAgfQorICBlbHNlCisgICAgYmZkX2Nsb3NlIChy YmZkKTsKKwogICByZXR1cm4gTERQU19PSzsKIH0KIApAQCAtMTQwLDExICs0 MTYsMjMgQEAgYWRkX3N5bWJvbHMgKHZvaWQgKiBoYW5kbGUsCiAJICAgICBj b25zdCBzdHJ1Y3QgbGRfcGx1Z2luX3N5bWJvbCAqIHN5bXMpCiB7CiAgIGJm ZCAqYWJmZCA9IGhhbmRsZTsKKyAgc3RydWN0IGxkX3BsdWdpbl9zeW1ib2wg KmNvcHlfb2Zfc3ltczsKICAgc3RydWN0IHBsdWdpbl9kYXRhX3N0cnVjdCAq cGx1Z2luX2RhdGEgPQogICAgIGJmZF9hbGxvYyAoYWJmZCwgc2l6ZW9mIChw bHVnaW5fZGF0YV9zdHJ1Y3QpKTsKKyAgaW50IGk7CisKKyAgLyogTkI6IExU TyBzeW1ib2xzIGFyZSBvd25lZCBieSBMVE8gcGx1Z2luLiAgQ3JlYXRlIGEg Y29weSBzbyB0aGF0IHdlCisgICAgIGNhbiB1c2UgaXQgaW4gYmZkX3BsdWdp bl9jYW5vbmljYWxpemVfc3ltdGFiLiAgKi8KKyAgY29weV9vZl9zeW1zID0g YmZkX2FsbG9jIChhYmZkLCBuc3ltcyAqIHNpemVvZiAoKnN5bXMpKTsKKyAg bWVtY3B5IChjb3B5X29mX3N5bXMsIHN5bXMsIG5zeW1zICogc2l6ZW9mICgq c3ltcykpOworICBmb3IgKGkgPSAwOyBpIDwgbnN5bXM7IGkrKykKKyAgICBj b3B5X29mX3N5bXNbaV0ubmFtZSA9IHhzdHJkdXAgKHN5bXNbaV0ubmFtZSk7 CiAKICAgcGx1Z2luX2RhdGEtPm5zeW1zID0gbnN5bXM7Ci0gIHBsdWdpbl9k YXRhLT5zeW1zID0gc3ltczsKKyAgcGx1Z2luX2RhdGEtPnN5bXMgPSBjb3B5 X29mX3N5bXM7CisKKyAgY3VycmVudF9wbHVnaW4tPmx0b19uc3ltcyA9IG5z eW1zOworICBjdXJyZW50X3BsdWdpbi0+bHRvX3N5bXMgPSBjb3B5X29mX3N5 bXM7CiAKICAgaWYgKG5zeW1zICE9IDApCiAgICAgYWJmZC0+ZmxhZ3MgfD0g SEFTX1NZTVM7CkBAIC0yMTQsMjYgKzUwMiw0OSBAQCB0cnlfY2xhaW0gKGJm ZCAqYWJmZCkKICAgZmlsZS5oYW5kbGUgPSBhYmZkOwogICBpZiAoIWJmZF9w bHVnaW5fb3Blbl9pbnB1dCAoYWJmZCwgJmZpbGUpKQogICAgIHJldHVybiAw OwotICBpZiAoY2xhaW1fZmlsZSkKLSAgICBjbGFpbV9maWxlICgmZmlsZSwg JmNsYWltZWQpOworICBpZiAoY3VycmVudF9wbHVnaW4tPmNsYWltX2ZpbGUp CisgICAgeworICAgICAgY3VycmVudF9wbHVnaW4tPmNsYWltX2ZpbGUgKCZm aWxlLCAmY2xhaW1lZCk7CisgICAgICBpZiAoY2xhaW1lZCkKKwl7CisJICBp ZiAoY3VycmVudF9wbHVnaW4tPmFsbF9zeW1ib2xzX3JlYWQpCisJICAgIHsK KwkgICAgICBzdHJ1Y3QgcGx1Z2luX2RhdGFfc3RydWN0ICpwbHVnaW5fZGF0 YQorCQk9IGFiZmQtPnRkYXRhLnBsdWdpbl9kYXRhOworCisJICAgICAgLyog R2V0IHJlYWwgc3ltYm9scyBmcm9tIExUTyB3cmFwcGVyLiAgKi8KKwkgICAg ICBjdXJyZW50X3BsdWdpbi0+YWxsX3N5bWJvbHNfcmVhZCAoKTsKKworCSAg ICAgIC8qIENvcHkgcmVhbCBzeW1ib2xzIHRvIHBsdWdpbl9kYXRhLiAgKi8K KwkgICAgICBpZiAocGx1Z2luX2RhdGEpCisJCXsKKwkJICBwbHVnaW5fZGF0 YS0+cmVhbF9iZmQgPSBjdXJyZW50X3BsdWdpbi0+cmVhbF9iZmQ7CisJCSAg cGx1Z2luX2RhdGEtPnJlYWxfbnN5bXMgPSBjdXJyZW50X3BsdWdpbi0+cmVh bF9uc3ltczsKKwkJICBwbHVnaW5fZGF0YS0+cmVhbF9zeW1zID0gY3VycmVu dF9wbHVnaW4tPnJlYWxfc3ltczsKKwkJfQorCisJICAgICAgLyogQ2xlYW4g dXAgTFRPIHBsdWdpbi4gICovCisJICAgICAgaWYgKGN1cnJlbnRfcGx1Z2lu LT5jbGVhbnVwX2hhbmRsZXIpCisJCWN1cnJlbnRfcGx1Z2luLT5jbGVhbnVw X2hhbmRsZXIgKCk7CisJICAgIH0KKwl9CisKKyAgICAgIGlmIChjdXJyZW50 X3BsdWdpbi0+bHRvX3dyYXBwZXIpCisJeworCSAgLyogQ2xlYW4gdXAgZm9y IExUTyB3cmFwcGVyLiAgKi8KKwkgIHVubGluayAoY3VycmVudF9wbHVnaW4t PnJlc29sdXRpb25fZmlsZSk7CisJICBmcmVlIChjdXJyZW50X3BsdWdpbi0+ cmVzb2x1dGlvbl9vcHRpb24pOworCX0KKyAgICB9CiAgIGNsb3NlIChmaWxl LmZkKTsKICAgcmV0dXJuIGNsYWltZWQ7CiB9CiAKLXN0cnVjdCBwbHVnaW5f bGlzdF9lbnRyeQotewotICB2b2lkICogICAgICAgICAgICAgICAgICAgICAg ICBoYW5kbGU7Ci0gIGxkX3BsdWdpbl9jbGFpbV9maWxlX2hhbmRsZXIgIGNs YWltX2ZpbGU7Ci0gIHN0cnVjdCBwbHVnaW5fbGlzdF9lbnRyeSAqICAgIG5l eHQ7Ci19OwotCi1zdGF0aWMgc3RydWN0IHBsdWdpbl9saXN0X2VudHJ5ICog cGx1Z2luX2xpc3QgPSBOVUxMOwotCiBzdGF0aWMgaW50CiB0cnlfbG9hZF9w bHVnaW4gKGNvbnN0IGNoYXIgKnBuYW1lLCBiZmQgKmFiZmQsIGludCAqaGFz X3BsdWdpbl9wKQogewogICB2b2lkICpwbHVnaW5faGFuZGxlID0gTlVMTDsK LSAgc3RydWN0IGxkX3BsdWdpbl90diB0dls0XTsKKyAgc3RydWN0IGxkX3Bs dWdpbl90diB0dlsxMl07CiAgIGludCBpOwogICBsZF9wbHVnaW5fb25sb2Fk IG9ubG9hZDsKICAgZW51bSBsZF9wbHVnaW5fc3RhdHVzIHN0YXR1czsKQEAg LTI0MSw2ICs1NTIsMTggQEAgdHJ5X2xvYWRfcGx1Z2luIChjb25zdCBjaGFy ICpwbmFtZSwgYmZkICphYmZkLCBpbnQgKmhhc19wbHVnaW5fcCkKIAogICAq aGFzX3BsdWdpbl9wID0gMDsKIAorICAvKiBOQjogRWFjaCBvYmplY3QgaXMg aW5kZGVwZW5kZW50LiAgUmV1c2UgdGhlIHByZXZpb3VzIHBsdWdpbiBmcm9t CisgICAgIHRoZSBsYXN0IExUTyB3cmFwcGVyIHJ1biB3aWxsIGxlYWQgdG8g d3JvbmcgTFRPIGRhdGEuICAqLworICBpZiAoY3VycmVudF9wbHVnaW4KKyAg ICAgICYmIGN1cnJlbnRfcGx1Z2luLT5oYW5kbGUKKyAgICAgICYmIGN1cnJl bnRfcGx1Z2luLT5sdG9fd3JhcHBlcgorICAgICAgJiYgc3RyY21wIChjdXJy ZW50X3BsdWdpbi0+cGx1Z2luX25hbWUsIHBuYW1lKSA9PSAwKQorICAgIHsK KyAgICAgIGRsY2xvc2UgKGN1cnJlbnRfcGx1Z2luLT5oYW5kbGUpOworICAg ICAgbWVtc2V0IChjdXJyZW50X3BsdWdpbiwgMCwKKwkgICAgICBvZmZzZXRv ZiAoc3RydWN0IHBsdWdpbl9saXN0X2VudHJ5LCBuZXh0KSk7CisgICAgfQor CiAgIHBsdWdpbl9oYW5kbGUgPSBkbG9wZW4gKHBuYW1lLCBSVExEX05PVyk7 CiAgIGlmICghcGx1Z2luX2hhbmRsZSkKICAgICB7CkBAIC0yNTksMTggKzU4 MiwyNCBAQCB0cnlfbG9hZF9wbHVnaW4gKGNvbnN0IGNoYXIgKnBuYW1lLCBi ZmQgKmFiZmQsIGludCAqaGFzX3BsdWdpbl9wKQogCSAgICByZXR1cm4gMDsK IAogCSAgcmVnaXN0ZXJfY2xhaW1fZmlsZSAocGx1Z2luX2xpc3RfaXRlci0+ Y2xhaW1fZmlsZSk7CisJICBjdXJyZW50X3BsdWdpbiA9IHBsdWdpbl9saXN0 X2l0ZXI7CiAJICBnb3RvIGhhdmVfY2xhaW1fZmlsZTsKIAl9CisgICAgICBl bHNlIGlmIChzdHJjbXAgKHBsdWdpbl9saXN0X2l0ZXItPnBsdWdpbl9uYW1l LCBwbmFtZSkgPT0gMCkKKwlnb3RvIGhhdmVfbHRvX3dyYXBwZXI7CiAgICAg fQogCiAgIHBsdWdpbl9saXN0X2l0ZXIgPSBiZmRfbWFsbG9jIChzaXplb2Yg KnBsdWdpbl9saXN0X2l0ZXIpOwogICBpZiAocGx1Z2luX2xpc3RfaXRlciA9 PSBOVUxMKQogICAgIHJldHVybiAwOwotICBwbHVnaW5fbGlzdF9pdGVyLT5o YW5kbGUgPSBwbHVnaW5faGFuZGxlOwotICBwbHVnaW5fbGlzdF9pdGVyLT5j bGFpbV9maWxlID0gTlVMTDsKKyAgbWVtc2V0IChwbHVnaW5fbGlzdF9pdGVy LCAwLCBzaXplb2YgKCpwbHVnaW5fbGlzdF9pdGVyKSk7CisgIHBsdWdpbl9s aXN0X2l0ZXItPnBsdWdpbl9uYW1lID0gcG5hbWU7CiAgIHBsdWdpbl9saXN0 X2l0ZXItPm5leHQgPSBwbHVnaW5fbGlzdDsKICAgcGx1Z2luX2xpc3QgPSBw bHVnaW5fbGlzdF9pdGVyOwogCitoYXZlX2x0b193cmFwcGVyOgorICBwbHVn aW5fbGlzdF9pdGVyLT5oYW5kbGUgPSBwbHVnaW5faGFuZGxlOworCiAgIG9u bG9hZCA9IGRsc3ltIChwbHVnaW5faGFuZGxlLCAib25sb2FkIik7CiAgIGlm ICghb25sb2FkKQogICAgIHJldHVybiAwOwpAQCAtMjg3LDIzICs2MTYsNjMg QEAgdHJ5X2xvYWRfcGx1Z2luIChjb25zdCBjaGFyICpwbmFtZSwgYmZkICph YmZkLCBpbnQgKmhhc19wbHVnaW5fcCkKICAgdHZbaV0udHZfdGFnID0gTERQ VF9BRERfU1lNQk9MUzsKICAgdHZbaV0udHZfdS50dl9hZGRfc3ltYm9scyA9 IGFkZF9zeW1ib2xzOwogCisgIGlmIChnZXRfbHRvX3dyYXBwZXIgKHBsdWdp bl9saXN0X2l0ZXIpKQorICAgIHsKKyAgICAgICsraTsKKyAgICAgIHR2W2ld LnR2X3RhZyA9IExEUFRfUkVHSVNURVJfQUxMX1NZTUJPTFNfUkVBRF9IT09L OworICAgICAgdHZbaV0udHZfdS50dl9yZWdpc3Rlcl9hbGxfc3ltYm9sc19y ZWFkID0gcmVnaXN0ZXJfYWxsX3N5bWJvbHNfcmVhZDsKKworICAgICAgKytp OworICAgICAgdHZbaV0udHZfdGFnID0gTERQVF9SRUdJU1RFUl9DTEVBTlVQ X0hPT0s7CisgICAgICB0dltpXS50dl91LnR2X3JlZ2lzdGVyX2NsZWFudXAg PSByZWdpc3Rlcl9jbGVhbnVwOworCisgICAgICArK2k7CisgICAgICB0dltp XS50dl90YWcgPSBMRFBUX0dFVF9TWU1CT0xTOworICAgICAgdHZbaV0udHZf dS50dl9nZXRfc3ltYm9scyA9IGdldF9zeW1ib2xzOworCisgICAgICArK2k7 CisgICAgICB0dltpXS50dl90YWcgPSBMRFBUX0dFVF9TWU1CT0xTX1YyOwor ICAgICAgdHZbaV0udHZfdS50dl9nZXRfc3ltYm9scyA9IGdldF9zeW1ib2xz OworCisgICAgICArK2k7CisgICAgICB0dltpXS50dl90YWcgPSBMRFBUX09Q VElPTjsKKyAgICAgIHR2W2ldLnR2X3UudHZfc3RyaW5nID0gcGx1Z2luX2xp c3RfaXRlci0+bHRvX3dyYXBwZXI7CisKKyAgICAgICsraTsKKyAgICAgIHR2 W2ldLnR2X3RhZyA9IExEUFRfT1BUSU9OOworICAgICAgdHZbaV0udHZfdS50 dl9zdHJpbmcgPSBwbHVnaW5fbGlzdF9pdGVyLT5yZXNvbHV0aW9uX29wdGlv bjsKKworICAgICAgKytpOworICAgICAgdHZbaV0udHZfdGFnID0gTERQVF9M SU5LRVJfT1VUUFVUOworICAgICAgdHZbaV0udHZfdS50dl92YWwgPSBMRFBP X0VYRUM7CisKKyAgICAgICsraTsKKyAgICAgIHR2W2ldLnR2X3RhZyA9IExE UFRfQUREX0lOUFVUX0ZJTEU7CisgICAgICB0dltpXS50dl91LnR2X2FkZF9p bnB1dF9maWxlID0gYWRkX2lucHV0X2ZpbGU7CisgICAgfQorCiAgICsraTsK ICAgdHZbaV0udHZfdGFnID0gTERQVF9OVUxMOwogICB0dltpXS50dl91LnR2 X3ZhbCA9IDA7CiAKKyAgY3VycmVudF9wbHVnaW4gPSBwbHVnaW5fbGlzdF9p dGVyOworCisgIC8qIExUTyBwbHVnaW4gd2lsbCBjYWxsIGhhbmRsZXIgaG9v a3MgdG8gc2V0IHVwIHBsdWdpbiBoYW5kbGVycy4gICovCiAgIHN0YXR1cyA9 ICgqb25sb2FkKSh0dik7CiAKICAgaWYgKHN0YXR1cyAhPSBMRFBTX09LKQog ICAgIHJldHVybiAwOwogCi0gIHBsdWdpbl9saXN0X2l0ZXItPmNsYWltX2Zp bGUgPSBjbGFpbV9maWxlOworICBpZiAoY3VycmVudF9wbHVnaW4tPmx0b193 cmFwcGVyCisgICAgICAmJiBzZXR1cF9sdG9fd3JhcHBlcl9lbnYgKGN1cnJl bnRfcGx1Z2luKSkKKyAgICByZXR1cm4gMDsKIAogaGF2ZV9jbGFpbV9maWxl OgogICAqaGFzX3BsdWdpbl9wID0gMTsKIAogICBhYmZkLT5wbHVnaW5fZm9y bWF0ID0gYmZkX3BsdWdpbl9ubzsKIAotICBpZiAoIWNsYWltX2ZpbGUpCisg IGlmICghY3VycmVudF9wbHVnaW4tPmNsYWltX2ZpbGUpCiAgICAgcmV0dXJu IDA7CiAKICAgaWYgKCF0cnlfY2xhaW0gKGFiZmQpKQpAQCAtNTYyLDcgKzkz MSwxNSBAQCBiZmRfcGx1Z2luX2Nhbm9uaWNhbGl6ZV9zeW10YWIgKGJmZCAq YWJmZCwKIAkJCVNFQ19BTExPQyB8IFNFQ19MT0FEIHwgU0VDX0NPREUgfCBT RUNfSEFTX0NPTlRFTlRTKTsKICAgc3RhdGljIGFzZWN0aW9uIGZha2VfY29t bW9uX3NlY3Rpb24KICAgICA9IEJGRF9GQUtFX1NFQ1RJT04gKGZha2VfY29t bW9uX3NlY3Rpb24sIE5VTEwsICJwbHVnIiwgMCwgU0VDX0lTX0NPTU1PTik7 Ci0gIGludCBpOworICBpbnQgaSwgajsKKyAgbG9uZyByZWFsX25zeW1zOwor ICBhc3ltYm9sICoqcmVhbF9zeW1zOworCisgIHJlYWxfc3ltcyA9IHBsdWdp bl9kYXRhLT5yZWFsX3N5bXM7CisgIGlmIChyZWFsX3N5bXMpCisgICAgcmVh bF9uc3ltcyA9IHBsdWdpbl9kYXRhLT5yZWFsX25zeW1zOworICBlbHNlCisg ICAgcmVhbF9uc3ltcyA9IDA7CiAKICAgZm9yIChpID0gMDsgaSA8IG5zeW1z OyBpKyspCiAgICAgewpAQCAtNTg3LDYgKzk2NCwxNSBAQCBiZmRfcGx1Z2lu X2Nhbm9uaWNhbGl6ZV9zeW10YWIgKGJmZCAqYWJmZCwKIAljYXNlIExEUEtf REVGOgogCWNhc2UgTERQS19XRUFLREVGOgogCSAgcy0+c2VjdGlvbiA9ICZm YWtlX3NlY3Rpb247CisJICBpZiAocmVhbF9uc3ltcykKKwkgICAgLyogVXNl IHJlYWwgTFRPIHN5bWJvbHMgaWYgcG9zc2libGUuICAqLworCSAgICBmb3Ig KGogPSAwOyBqIDwgcmVhbF9uc3ltczsgaisrKQorCSAgICAgIGlmIChyZWFs X3N5bXNbal0tPm5hbWUKKwkJICAmJiBzdHJjbXAgKHN5bXNbaV0ubmFtZSwg cmVhbF9zeW1zW2pdLT5uYW1lKSA9PSAwKQorCQl7CisJCSAgcy0+c2VjdGlv biA9IHJlYWxfc3ltc1tqXS0+c2VjdGlvbjsKKwkJICBicmVhazsKKwkJfQog CSAgYnJlYWs7CiAJZGVmYXVsdDoKIAkgIEJGRF9BU1NFUlQgKDApOwpAQCAt NjM1LDYgKzEwMjEsMzQgQEAgYmZkX3BsdWdpbl9zaXplb2ZfaGVhZGVycyAo YmZkICphIEFUVFJJQlVURV9VTlVTRUQsCiAgIHJldHVybiAwOwogfQogCitz dGF0aWMgYmZkX2Jvb2xlYW4KK2JmZF9wbHVnaW5fY2xvc2VfYW5kX2NsZWFu dXAgKGJmZCAqYWJmZCkKK3sKKyAgc3RydWN0IHBsdWdpbl9kYXRhX3N0cnVj dCAqcGx1Z2luX2RhdGE7CisKKyAgaWYgKGFiZmQtPmZvcm1hdCAhPSBiZmRf YXJjaGl2ZQorICAgICAgJiYgKHBsdWdpbl9kYXRhID0gYWJmZC0+dGRhdGEu cGx1Z2luX2RhdGEpKQorICAgIHsKKyAgICAgIGNvbnN0IHN0cnVjdCBsZF9w bHVnaW5fc3ltYm9sICpzeW1zID0gcGx1Z2luX2RhdGEtPnN5bXM7CisKKyAg ICAgIGlmIChwbHVnaW5fZGF0YS0+cmVhbF9iZmQpCisJYmZkX2Nsb3NlIChw bHVnaW5fZGF0YS0+cmVhbF9iZmQpOworCisgICAgICBpZiAocGx1Z2luX2Rh dGEtPnJlYWxfc3ltcykKKwlmcmVlIChwbHVnaW5fZGF0YS0+cmVhbF9zeW1z KTsKKworICAgICAgaWYgKHN5bXMpCisJeworCSAgbG9uZyBuc3ltcyA9IHBs dWdpbl9kYXRhLT5uc3ltczsKKwkgIGludCBpOworCSAgZm9yIChpID0gMDsg aSA8IG5zeW1zOyBpKyspCisJICAgIGZyZWUgKHN5bXNbaV0ubmFtZSk7CisJ fQorICAgIH0KKworICByZXR1cm4gX2JmZF9nZW5lcmljX2Nsb3NlX2FuZF9j bGVhbnVwIChhYmZkKTsKK30KKwogY29uc3QgYmZkX3RhcmdldCBwbHVnaW5f dmVjID0KIHsKICAgInBsdWdpbiIsCQkJLyogTmFtZS4gICovCmRpZmYgLS1n aXQgYS9iZmQvcGx1Z2luLmggYi9iZmQvcGx1Z2luLmgKaW5kZXggMDk4YmYw ODQ1NS4uMDVjMzU3MzkzMyAxMDA2NDQKLS0tIGEvYmZkL3BsdWdpbi5oCisr KyBiL2JmZC9wbHVnaW4uaApAQCAtMzMsNiArMzMsOSBAQCB0eXBlZGVmIHN0 cnVjdCBwbHVnaW5fZGF0YV9zdHJ1Y3QKIHsKICAgaW50IG5zeW1zOwogICBj b25zdCBzdHJ1Y3QgbGRfcGx1Z2luX3N5bWJvbCAqc3ltczsKKyAgYmZkICpy ZWFsX2JmZDsKKyAgbG9uZyByZWFsX25zeW1zOworICBhc3ltYm9sICoqcmVh bF9zeW1zOwogfQogcGx1Z2luX2RhdGFfc3RydWN0OwogCmRpZmYgLS1naXQg YS9sZC90ZXN0c3VpdGUvbGQtcGx1Z2luL2x0by5leHAgYi9sZC90ZXN0c3Vp dGUvbGQtcGx1Z2luL2x0by5leHAKaW5kZXggOWIwM2I3YjM5Ny4uMWI0NGIw ZGEzZiAxMDA2NDQKLS0tIGEvbGQvdGVzdHN1aXRlL2xkLXBsdWdpbi9sdG8u ZXhwCisrKyBiL2xkL3Rlc3RzdWl0ZS9sZC1wbHVnaW4vbHRvLmV4cApAQCAt MjM0LDYgKzIzNCwxMSBAQCBzZXQgbHRvX2xpbmtfdGVzdHMgW2xpc3QgXAog ICBbbGlzdCAiQnVpbGQgcHIyNDQwNi0yYi5vIiBcCiAgICAiIiAiLU8yIC1m bm8tbHRvIiBcCiAgICB7cHIyNDQwNi0yYi5jfV0gXAorICBbbGlzdCAicHIy NTM1NS5vIiBcCisgICAiIiBcCisgICAiLWZsdG8gLWZuby1jb21tb24gJGx0 b19ub19mYXQiIFwKKyAgIHtwcjI1MzU1LmN9IFwKKyAgIFtsaXN0IFtsaXN0 ICJubSIgIiRwbHVnX29wdCIgInByMjUzNTUuZCJdXV0gXAogXQogCiBpZiB7 IFthdF9sZWFzdF9nY2NfdmVyc2lvbiA0IDddIH0gewpkaWZmIC0tZ2l0IGEv bGQvdGVzdHN1aXRlL2xkLXBsdWdpbi9wcjI1MzU1LmMgYi9sZC90ZXN0c3Vp dGUvbGQtcGx1Z2luL3ByMjUzNTUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwLi45OWYwMWZiNWM4Ci0tLSAvZGV2L251bGwKKysr IGIvbGQvdGVzdHN1aXRlL2xkLXBsdWdpbi9wcjI1MzU1LmMKQEAgLTAsMCAr MSwyIEBACitpbnQgbm1fdGVzdF92YXI7CitpbnQgbm1fdGVzdF92YXIyID0g MTIzNDsKZGlmZiAtLWdpdCBhL2xkL3Rlc3RzdWl0ZS9sZC1wbHVnaW4vcHIy NTM1NS5kIGIvbGQvdGVzdHN1aXRlL2xkLXBsdWdpbi9wcjI1MzU1LmQKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uOThkMTBhYmEx YwotLS0gL2Rldi9udWxsCisrKyBiL2xkL3Rlc3RzdWl0ZS9sZC1wbHVnaW4v cHIyNTM1NS5kCkBAIC0wLDAgKzEsNCBAQAorIy4uLgorWzAtOWEtZl0rIEIg Xz9ubV90ZXN0X3ZhcgorWzAtOWEtZl0rIEQgXz9ubV90ZXN0X3ZhcjIKKyNw YXNzCmRpZmYgLS1naXQgYS9sZC90ZXN0c3VpdGUvbGliL2xkLWxpYi5leHAg Yi9sZC90ZXN0c3VpdGUvbGliL2xkLWxpYi5leHAKaW5kZXggMDhlMmQ2OTc4 YS4uMDE1ZWRhNmViOSAxMDA2NDQKLS0tIGEvbGQvdGVzdHN1aXRlL2xpYi9s ZC1saWIuZXhwCisrKyBiL2xkL3Rlc3RzdWl0ZS9saWIvbGQtbGliLmV4cApA QCAtOTI4LDYgKzkyOCw3IEBAIHByb2MgcnVuX2NjX2xpbmtfdGVzdHMgeyBs ZHRlc3RzIH0gewogCiAJaWYgeyAkYmluZmlsZSBlcSAidG1wZGlyLyIgfSB7 CiAJICAgICMgY29tcGlsZSBvbmx5CisJICAgIHNldCBiaW5maWxlICRvYmpm aWxlCiAJfSBlbHNlaWYgeyBbcmVnZXhwICIuKlxcLmEkIiAkYmluZmlsZV0g fSB7CiAJICAgIGlmIHsgIVthcl9zaW1wbGVfY3JlYXRlICRhciAkbGRmbGFn cyAkYmluZmlsZSAiJG9iamZpbGVzIl0gfSB7CiAJCXNldCBmYWlsZWQgMQot LSAKMi4yNC4xCgo= --000000000000bf1d20059e3f770e--