From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from esa1.mentor.iphmx.com (esa1.mentor.iphmx.com [68.232.129.153]) by sourceware.org (Postfix) with ESMTPS id 02A123858C39 for ; Thu, 9 Dec 2021 11:41:51 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 02A123858C39 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=codesourcery.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=mentor.com IronPort-SDR: 0yklvINFRdu5K+ho3nzVHluf94g34DNUhO0Io/xiZjXatWlh5jA83m5O9yaYtuxkypD1qX5n7Y IgAaGaHkL8Yslp+4wWdH5y6BDDJaPsie88MgbMdblYtLK2I3EcK+FheO7WQtiaXkC7aEaj6O8X xERLL3y7tBwJ9BwpXqQ0pV5hVSYSPyO6xlmOvlWcK+BEPF5TWfqIt9Rr8racsxOSgZJtiZ0Cvw wO99fsQIrjZcfLhPpsIjb0cByF63vS2FJlEypjX9mVn9o9soI1sVL8JZ2w9PZG4XOmAUkV7Hxo HeRKhW1pwUeeJMQUq/hYy8W3 X-IronPort-AV: E=Sophos;i="5.88,192,1635235200"; d="scan'208";a="71999935" Received: from orw-gwy-01-in.mentorg.com ([192.94.38.165]) by esa1.mentor.iphmx.com with ESMTP; 09 Dec 2021 03:41:51 -0800 IronPort-SDR: 684LSJKHma3BY4oj21HImRIWM/4Sg7olt/sfNZS0NKS5EroMdL0BxxbQ2fMnEYeMkRSvkM/ddj H0G6sq4k0EKwzu7QvxR1iOIxcJAlNdAe/t2EBJmFXUdcI7l/4to8l8ADOUGWioZHj52Efz4LWe eeIgCKiU8Tx3U8VcviTjT8seLX0yEqHNhifZGBauAfKNmbI1+wkrneEY3Jn6UqdyKtLGG2/t+7 DALJOd0Jns+AyH/K0OkUDuI8ndVXT04GmJo/gvSGoqfDpooUMusAU0oZH8ioRahKtW5ncEwV6B 9CQ= Content-Type: multipart/mixed; boundary="------------uwR26Cr2E3ExZW1w9rqnCm0N" Message-ID: <3cdb7713-3e1d-85e9-f923-2e771d75a3cb@codesourcery.com> Date: Thu, 9 Dec 2021 11:41:46 +0000 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.3.2 From: Andrew Stubbs Subject: Re: [PATCH] OpenMP: Ensure that offloaded variables are public To: Jakub Jelinek CC: "gcc-patches@gcc.gnu.org" References: <6843a549-0d4d-0ca7-ae34-929a15e0fa98@codesourcery.com> <20211130162449.GP2646553@tucnak> <20211130165459.GQ2646553@tucnak> <20211202125858.GG2646553@tucnak> <03912ac5-e368-21b1-beb0-aa4fb456ff0b@codesourcery.com> <862dbe15-4dac-c027-6c4e-e1fa2c9e334a@codesourcery.com> <20211202164347.GK2646553@tucnak> Content-Language: en-GB In-Reply-To: <20211202164347.GK2646553@tucnak> X-Originating-IP: [137.202.0.90] X-ClientProxiedBy: svr-ies-mbx-13.mgc.mentorg.com (139.181.222.13) To svr-ies-mbx-01.mgc.mentorg.com (139.181.222.1) X-Spam-Status: No, score=-12.2 required=5.0 tests=BAYES_00, GIT_PATCH_0, HEADER_FROM_DIFFERENT_DOMAINS, KAM_DMARC_STATUS, KAM_STOCKGEN, NICE_REPLY_A, SPF_HELO_PASS, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 09 Dec 2021 11:41:54 -0000 --------------uwR26Cr2E3ExZW1w9rqnCm0N Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: 8bit On 02/12/2021 16:43, Jakub Jelinek wrote: > On Thu, Dec 02, 2021 at 04:31:36PM +0000, Andrew Stubbs wrote: >> On 02/12/2021 16:05, Andrew Stubbs wrote: >>> On 02/12/2021 12:58, Jakub Jelinek wrote: >>>>> I've tried modifying offload_handle_link_vars but that spot >>>>> doesn't catch >>>>> the omp_data_sizes variables emitted by >>>>> libgomp.c-c++-common/target_42.c, >>>>> which was one of the motivating examples. >>>> >>>> Why doesn't catch it?  Is the variable created only post-IPA? >>>> I'd think that it should have been created before IPA, streamed and >>>> therefore I don't understand why you don't see it after streaming LTO in. >>> >>> On closer inspection it does, in fact, catch it as you'd expect, but >>> then the variable is no longer marked public when it gets to >>> pass_omp_target_link::execute, so something somewhere is resetting it. >>> More investigation is needed.... >> >> The "whole-program" pass is removing the public flag. That's probably >> working as intended, and I assume it is run for offload code on purpose? > > So you'd stick it somewhere into e.g. symbol_table::compile > after ipa_passes call, guarded with #ifdef ACCEL_COMPILER ? I've given up on this approach, and switched to loading the symbol addresses from the table directly. The relocation issues that I had with older assemblers/linkers do not seem to be a problem any more. This patch requires only a single symbol to be forced global, and since that's one that I create in mkoffload there is no issue with previous definitions. I think I can approve this myself, but if you have any observations I'm happy to hear them. Andrew --------------uwR26Cr2E3ExZW1w9rqnCm0N Content-Type: text/plain; charset="UTF-8"; name="211208-offload-var-table.patch" Content-Disposition: attachment; filename="211208-offload-var-table.patch" Content-Transfer-Encoding: base64 YW1kZ2NuOiBDaGFuZ2Ugb2ZmbG9hZCB2YXJpYWJsZSB0YWJsZSBkaXNjb3ZlcnkKClVwIHRv IG5vdyB0aGUgbGliZ29tcCBHQ04gcGx1Z2luIGhhcyBiZWVuIGZpbmRpbmcgdGhlIG9mZmxv YWQgdmFyaWFibGVzCmJ5IHVzaW5nIGEgc3ltYm9sIGxvb2t1cCwgYnV0IHRoZSBBTUQgcnVu dGltZSByZXF1aXJlcyB0aGF0IHRoZSBzeW1ib2xzIGFyZQpnbG9iYWwgZm9yIHRoYXQgdG8g d29yay4gVGhpcyB3YXMgZW5zdXJlZCBieSBta29mZmxvYWQgYXMgYSBwb3N0LXByb2Nzc2lu ZwpzdGVwLCBidXQgdGhlIExMVk0gMTMgYXNzZW1ibGVyIG5vIGxvbmdlciBhY2NlcHRzIHRo aXMgaW4gdGhlIGNhc2Ugd2hlcmUgdGhlCnZhcmlhYmxlIHdhcyBwcmV2aW91c2x5IGRlY2xh cmVkIGRpZmZlcmVudGx5LgoKVGhpcyBwYXRjaCBzd2l0Y2hlcyB0byBsb2NhdGluZyB0aGUg c3ltYm9scyBkaXJlY3RseSBmcm9tIHRoZQpvZmZsb2FkX3Zhcl90YWJsZSwgd2hpY2ggbWVh bnMgdGhhdCBvbmx5IG9uZSBzeW1ib2wgbmVlZHMgdG8gYmUgZm9yY2VkCmdsb2JhbC4KClRo aXMgY2hhbmdlcyBicmVha3MgdGhlIGxpYmdvbXAgaW1hZ2UgY29tcGF0aWJpbGl0eSBzbyBH T01QX1ZFUlNJT05fR0NOIGhhcwphbHNvIGJlZW4gYnVtcGVkLgoKZ2NjL0NoYW5nZUxvZzoK CgkqIGNvbmZpZy9nY24vbWtvZmZsb2FkLmMgKHByb2Nlc3NfYXNtKTogUHJvY2VzcyB0aGUg dmFyaWFibGUgdGFibGUKCWNvbXBsZXRlbHkgZGlmZmVyZW50bHkuCgkocHJvY2Vzc19vYmop OiBFbmNvZGUgdGhlIHZhcmFpYmxlIGRhdGEgZGlmZmVyZW50bHkuCgppbmNsdWRlL0NoYW5n ZUxvZzoKCgkqIGdvbXAtY29uc3RhbnRzLmggKEdPTVBfVkVSU0lPTl9HQ04pOiBCdW1wLgoK bGliZ29tcC9DaGFuZ2VMb2c6CgoJKiBwbHVnaW4vcGx1Z2luLWdjbi5jIChzdHJ1Y3QgZ2Nu X2ltYWdlX2Rlc2MpOiBSZW1vdmUgZ2xvYmFsX3ZhcmlhYmxlcy4KCShHT01QX09GRkxPQURf bG9hZF9pbWFnZSk6IExvY2F0ZSB0aGUgb2ZmbG9hZCB2YXJpYWJsZXMgdmlhIHRoZQoJdGFi bGUsIG5vdCBpbmRpdmlkdWFsIHN5bWJvbHMuCgpkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9n Y24vbWtvZmZsb2FkLmMgYi9nY2MvY29uZmlnL2djbi9ta29mZmxvYWQuYwppbmRleCBiMmU3 MWVhNWFhMC4uZDYwOWI3YTZmOWMgMTAwNjQ0Ci0tLSBhL2djYy9jb25maWcvZ2NuL21rb2Zm bG9hZC5jCisrKyBiL2djYy9jb25maWcvZ2NuL21rb2ZmbG9hZC5jCkBAIC00OTUsMTAgKzQ5 NSw4IEBAIHN0YXRpYyB2b2lkCiBwcm9jZXNzX2FzbSAoRklMRSAqaW4sIEZJTEUgKm91dCwg RklMRSAqY2ZpbGUpCiB7CiAgIGludCBmbl9jb3VudCA9IDAsIHZhcl9jb3VudCA9IDAsIGRp bXNfY291bnQgPSAwLCByZWdjb3VudF9jb3VudCA9IDA7Ci0gIHN0cnVjdCBvYnN0YWNrIGZu c19vcywgdmFyc19vcywgdmFyc2l6ZXNfb3MsIGRpbXNfb3MsIHJlZ2NvdW50c19vczsKKyAg c3RydWN0IG9ic3RhY2sgZm5zX29zLCBkaW1zX29zLCByZWdjb3VudHNfb3M7CiAgIG9ic3Rh Y2tfaW5pdCAoJmZuc19vcyk7Ci0gIG9ic3RhY2tfaW5pdCAoJnZhcnNfb3MpOwotICBvYnN0 YWNrX2luaXQgKCZ2YXJzaXplc19vcyk7CiAgIG9ic3RhY2tfaW5pdCAoJmRpbXNfb3MpOwog ICBvYnN0YWNrX2luaXQgKCZyZWdjb3VudHNfb3MpOwogCkBAIC01NjcsMTYgKzU2NSwxMSBA QCBwcm9jZXNzX2FzbSAoRklMRSAqaW4sIEZJTEUgKm91dCwgRklMRSAqY2ZpbGUpCiAJICAg IHVuc2lnbmVkIHZhcnNpemU7CiAJICAgIGlmIChzc2NhbmYgKGJ1ZiwgIiAuOGJ5dGUgJW1z XG4iLCAmdmFybmFtZSkpCiAJICAgICAgewotCQlvYnN0YWNrX3B0cl9ncm93ICgmdmFyc19v cywgdmFybmFtZSk7CisJCWZwdXRzIChidWYsIG91dCk7CiAJCWZnZXRzIChidWYsIHNpemVv ZiAoYnVmKSwgaW4pOwogCQlpZiAoIXNzY2FuZiAoYnVmLCAiIC44Ynl0ZSAldVxuIiwgJnZh cnNpemUpKQogCQkgIGFib3J0ICgpOwotCQlvYnN0YWNrX2ludF9ncm93ICgmdmFyc2l6ZXNf b3MsIHZhcnNpemUpOwogCQl2YXJfY291bnQrKzsKLQotCQkvKiBUaGUgSFNBIFJ1bnRpbWUg Y2Fubm90IGxvY2F0ZSB0aGUgc3ltYm9sIGlmIGl0IGlzIG5vdAotCQkgICBleHBvcnRlZCBm cm9tIHRoZSBrZXJuZWwuICAqLwotCQlmcHJpbnRmIChvdXQsICJcdC5nbG9iYWwgJXNcbiIs IHZhcm5hbWUpOwogCSAgICAgIH0KIAkgICAgYnJlYWs7CiAJICB9CkBAIC01OTUsNyArNTg4 LDE5IEBAIHByb2Nlc3NfYXNtIChGSUxFICppbiwgRklMRSAqb3V0LCBGSUxFICpjZmlsZSkK IAogICAgICAgY2hhciBkdW1teTsKICAgICAgIGlmIChzc2NhbmYgKGJ1ZiwgIiAuc2VjdGlv biAuZ251Lm9mZmxvYWRfdmFycyVjIiwgJmR1bW15KSA+IDApCi0Jc3RhdGUgPSBJTl9WQVJT OworCXsKKwkgIHN0YXRlID0gSU5fVkFSUzsKKworCSAgLyogQWRkIGEgZ2xvYmFsIHN5bWJv bCB0byBhbGxvdyBwbHVnaW4tZ2NuLmMgdG8gbG9jYXRlIHRoZSB0YWJsZQorCSAgICAgYXQg cnVudGltZS4gIEl0IGNhbid0IHVzZSB0aGUgIm9mZmxvYWRfdmFyX3RhYmxlLk4iIGVtaXR0 ZWQgYnkKKwkgICAgIHRoZSBjb21waWxlciBiZWNhdXNlIGEpIHRoZXkncmUgbm90IGdsb2Jh bCwgYW5kIGIpIHRoZXJlJ3Mgb25lCisJICAgICBmb3IgZWFjaCBpbnB1dCBmaWxlIGNvbWJp bmVkIGludG8gdGhlIGJpbmFyeS4gICovCisJICBmcHV0cyAoYnVmLCBvdXQpOworCSAgZnB1 dHMgKCJcdC5nbG9iYWwgLm9mZmxvYWRfdmFyX3RhYmxlXG4iCisJCSAiXHQudHlwZSAub2Zm bG9hZF92YXJfdGFibGUsIEBvYmplY3RcbiIKKwkJICIub2ZmbG9hZF92YXJfdGFibGU6XG4i LAorCQkgb3V0KTsKKwl9CiAgICAgICBlbHNlIGlmIChzc2NhbmYgKGJ1ZiwgIiAuc2VjdGlv biAuZ251Lm9mZmxvYWRfZnVuY3MlYyIsICZkdW1teSkgPiAwKQogCXN0YXRlID0gSU5fRlVO Q1M7CiAgICAgICBlbHNlIGlmIChzc2NhbmYgKGJ1ZiwgIiAuYW1kZ3B1X21ldGFkYXRhJWMi LCAmZHVtbXkpID4gMCkKQEAgLTYyMiw3ICs2MjcsNyBAQCBwcm9jZXNzX2FzbSAoRklMRSAq aW4sIEZJTEUgKm91dCwgRklMRSAqY2ZpbGUpCiAJICByZWdjb3VudC5zZ3ByX2NvdW50ID0g cmVnY291bnQudmdwcl9jb3VudCA9IC0xOwogCX0KIAotICAgICAgaWYgKHN0YXRlID09IElO X0NPREUgfHwgc3RhdGUgPT0gSU5fTUVUQURBVEEpCisgICAgICBpZiAoc3RhdGUgPT0gSU5f Q09ERSB8fCBzdGF0ZSA9PSBJTl9NRVRBREFUQSB8fCBzdGF0ZSA9PSBJTl9WQVJTKQogCWZw dXRzIChidWYsIG91dCk7CiAgICAgfQogCkBAIC02MzMsMjQgKzYzOCw3IEBAIHByb2Nlc3Nf YXNtIChGSUxFICppbiwgRklMRSAqb3V0LCBGSUxFICpjZmlsZSkKICAgZnByaW50ZiAoY2Zp bGUsICIjaW5jbHVkZSA8c3RkbGliLmg+XG4iKTsKICAgZnByaW50ZiAoY2ZpbGUsICIjaW5j bHVkZSA8c3RkYm9vbC5oPlxuXG4iKTsKIAotICBjaGFyICoqdmFycyA9IFhPQkZJTklTSCAo JnZhcnNfb3MsIGNoYXIgKiopOwotICB1bnNpZ25lZCAqdmFyc2l6ZXMgPSBYT0JGSU5JU0gg KCZ2YXJzaXplc19vcywgdW5zaWduZWQgKik7Ci0gIGZwcmludGYgKGNmaWxlLAotCSAgICJz dGF0aWMgY29uc3Qgc3RydWN0IGdsb2JhbF92YXJfaW5mbyB7XG4iCi0JICAgIiAgY29uc3Qg Y2hhciAqbmFtZTtcbiIKLQkgICAiICB2b2lkICphZGRyZXNzO1xuIgotCSAgICJ9IHZhcnNb XSA9IHtcbiIpOwotICBpbnQgaTsKLSAgZm9yIChpID0gMDsgaSA8IHZhcl9jb3VudDsgKytp KQotICAgIHsKLSAgICAgIGNvbnN0IGNoYXIgKnNlcCA9IGkgPCB2YXJfY291bnQgLSAxID8g IiwiIDogIiAiOwotICAgICAgZnByaW50ZiAoY2ZpbGUsICIgIHsgXCIlc1wiLCBOVUxMIH0l cyAvKiBzaXplOiAldSAqL1xuIiwgdmFyc1tpXSwgc2VwLAotCSAgICAgICB2YXJzaXplc1tp XSk7Ci0gICAgfQotICBmcHJpbnRmIChjZmlsZSwgIn07XG5cbiIpOwotCi0gIG9ic3RhY2tf ZnJlZSAoJnZhcnNfb3MsIE5VTEwpOwotICBvYnN0YWNrX2ZyZWUgKCZ2YXJzaXplc19vcywg TlVMTCk7CisgIGZwcmludGYgKGNmaWxlLCAic3RhdGljIGNvbnN0IGludCBnY25fbnVtX3Zh cnMgPSAlZDtcblxuIiwgdmFyX2NvdW50KTsKIAogICAvKiBEdW1wIG91dCBmdW5jdGlvbiBp ZGVudHMuICAqLwogICBmcHJpbnRmIChjZmlsZSwgInN0YXRpYyBjb25zdCBzdHJ1Y3QgaHNh X2tlcm5lbF9kZXNjcmlwdGlvbiB7XG4iCkBAIC02NjEsNiArNjQ5LDcgQEAgcHJvY2Vzc19h c20gKEZJTEUgKmluLCBGSUxFICpvdXQsIEZJTEUgKmNmaWxlKQogCSAgICJ9IGdjbl9rZXJu ZWxzW10gPSB7XG4gICIpOwogICBkaW0uZFswXSA9IGRpbS5kWzFdID0gZGltLmRbMl0gPSAw OwogICBjb25zdCBjaGFyICpjb21tYTsKKyAgaW50IGk7CiAgIGZvciAoY29tbWEgPSAiIiwg aSA9IDA7IGkgPCBmbl9jb3VudDsgY29tbWEgPSAiLFxuICAiLCBpKyspCiAgICAgewogICAg ICAgLyogRmluZCBpZiB3ZSByZWNvcmRlZCBkaW1lbnNpb25zIGZvciB0aGlzIGZ1bmN0aW9u LiAgKi8KQEAgLTczMiwxMyArNzIxLDExIEBAIHByb2Nlc3Nfb2JqIChGSUxFICppbiwgRklM RSAqY2ZpbGUpCiAJICAgIiAgdW5zaWduZWQga2VybmVsX2NvdW50O1xuIgogCSAgICIgIGNv bnN0IHN0cnVjdCBoc2Ffa2VybmVsX2Rlc2NyaXB0aW9uICprZXJuZWxfaW5mb3M7XG4iCiAJ ICAgIiAgdW5zaWduZWQgZ2xvYmFsX3ZhcmlhYmxlX2NvdW50O1xuIgotCSAgICIgIGNvbnN0 IHN0cnVjdCBnbG9iYWxfdmFyX2luZm8gKmdsb2JhbF92YXJpYWJsZXM7XG4iCiAJICAgIn0g dGFyZ2V0X2RhdGEgPSB7XG4iCiAJICAgIiAgJmdjbl9pbWFnZSxcbiIKIAkgICAiICBzaXpl b2YgKGdjbl9rZXJuZWxzKSAvIHNpemVvZiAoZ2NuX2tlcm5lbHNbMF0pLFxuIgogCSAgICIg IGdjbl9rZXJuZWxzLFxuIgotCSAgICIgIHNpemVvZiAodmFycykgLyBzaXplb2YgKHZhcnNb MF0pLFxuIgotCSAgICIgIHZhcnNcbiIKKwkgICAiICBnY25fbnVtX3ZhcnNcbiIKIAkgICAi fTtcblxuIik7CiAKICAgZnByaW50ZiAoY2ZpbGUsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2dv bXAtY29uc3RhbnRzLmggYi9pbmNsdWRlL2dvbXAtY29uc3RhbnRzLmgKaW5kZXggM2U0MmQ3 MTIzYWUuLjBmNzIxMGI2ZjdkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2dvbXAtY29uc3RhbnRz LmgKKysrIGIvaW5jbHVkZS9nb21wLWNvbnN0YW50cy5oCkBAIC0yNjIsNyArMjYyLDcgQEAg ZW51bSBnb21wX21hcF9raW5kCiAjZGVmaW5lIEdPTVBfVkVSU0lPTgkxCiAjZGVmaW5lIEdP TVBfVkVSU0lPTl9OVklESUFfUFRYIDEKICNkZWZpbmUgR09NUF9WRVJTSU9OX0lOVEVMX01J QyAwCi0jZGVmaW5lIEdPTVBfVkVSU0lPTl9HQ04gMQorI2RlZmluZSBHT01QX1ZFUlNJT05f R0NOIDIKIAogI2RlZmluZSBHT01QX1ZFUlNJT05fUEFDSyhMSUIsIERFVikgKCgoTElCKSA8 PCAxNikgfCAoREVWKSkKICNkZWZpbmUgR09NUF9WRVJTSU9OX0xJQihQQUNLKSAoKChQQUNL KSA+PiAxNikgJiAweGZmZmYpCmRpZmYgLS1naXQgYS9saWJnb21wL3BsdWdpbi9wbHVnaW4t Z2NuLmMgYi9saWJnb21wL3BsdWdpbi9wbHVnaW4tZ2NuLmMKaW5kZXggOWU3Mzc3YzkxZjku LjY5NDg2MmI5N2Y0IDEwMDY0NAotLS0gYS9saWJnb21wL3BsdWdpbi9wbHVnaW4tZ2NuLmMK KysrIGIvbGliZ29tcC9wbHVnaW4vcGx1Z2luLWdjbi5jCkBAIC0zOTIsNyArMzkyLDYgQEAg c3RydWN0IGdjbl9pbWFnZV9kZXNjCiAgIGNvbnN0IHVuc2lnbmVkIGtlcm5lbF9jb3VudDsK ICAgc3RydWN0IGhzYV9rZXJuZWxfZGVzY3JpcHRpb24gKmtlcm5lbF9pbmZvczsKICAgY29u c3QgdW5zaWduZWQgZ2xvYmFsX3ZhcmlhYmxlX2NvdW50OwotICBzdHJ1Y3QgZ2xvYmFsX3Zh cl9pbmZvICpnbG9iYWxfdmFyaWFibGVzOwogfTsKIAogLyogVGhpcyBlbnVtIG1pcnJvcnMg dGhlIGNvcnJlc3BvbmRpbmcgTExWTSBlbnVtJ3MgdmFsdWVzIGZvciBhbGwgSVNBcyB0aGF0 IHdlCkBAIC0zMzY1LDM3ICszMzY0LDQxIEBAIEdPTVBfT0ZGTE9BRF9sb2FkX2ltYWdlIChp bnQgb3JkLCB1bnNpZ25lZCB2ZXJzaW9uLCBjb25zdCB2b2lkICp0YXJnZXRfZGF0YSwKICAg aWYgKCFjcmVhdGVfYW5kX2ZpbmFsaXplX2hzYV9wcm9ncmFtIChhZ2VudCkpCiAgICAgcmV0 dXJuIC0xOwogCi0gIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2YXJfY291bnQ7IGkrKykK KyAgaWYgKHZhcl9jb3VudCA+IDApCiAgICAgewotICAgICAgc3RydWN0IGdsb2JhbF92YXJf aW5mbyAqdiA9ICZpbWFnZV9kZXNjLT5nbG9iYWxfdmFyaWFibGVzW2ldOwotICAgICAgR0NO X0RFQlVHICgiTG9va2luZyBmb3IgdmFyaWFibGUgJXNcbiIsIHYtPm5hbWUpOwotCiAgICAg ICBoc2Ffc3RhdHVzX3Qgc3RhdHVzOwogICAgICAgaHNhX2V4ZWN1dGFibGVfc3ltYm9sX3Qg dmFyX3N5bWJvbDsKICAgICAgIHN0YXR1cyA9IGhzYV9mbnMuaHNhX2V4ZWN1dGFibGVfZ2V0 X3N5bWJvbF9mbiAoYWdlbnQtPmV4ZWN1dGFibGUsIE5VTEwsCi0JCQkJCQkgICAgIHYtPm5h bWUsIGFnZW50LT5pZCwKKwkJCQkJCSAgICAgIi5vZmZsb2FkX3Zhcl90YWJsZSIsCisJCQkJ CQkgICAgIGFnZW50LT5pZCwKIAkJCQkJCSAgICAgMCwgJnZhcl9zeW1ib2wpOwogCiAgICAg ICBpZiAoc3RhdHVzICE9IEhTQV9TVEFUVVNfU1VDQ0VTUykKIAloc2FfZmF0YWwgKCJDb3Vs ZCBub3QgZmluZCBzeW1ib2wgZm9yIHZhcmlhYmxlIGluIHRoZSBjb2RlIG9iamVjdCIsCiAJ CSAgIHN0YXR1cyk7CiAKLSAgICAgIHVpbnQ2NF90IHZhcl9hZGRyOwotICAgICAgdWludDMy X3QgdmFyX3NpemU7CisgICAgICB1aW50NjRfdCB2YXJfdGFibGVfYWRkcjsKICAgICAgIHN0 YXR1cyA9IGhzYV9mbnMuaHNhX2V4ZWN1dGFibGVfc3ltYm9sX2dldF9pbmZvX2ZuCi0JKHZh cl9zeW1ib2wsIEhTQV9FWEVDVVRBQkxFX1NZTUJPTF9JTkZPX1ZBUklBQkxFX0FERFJFU1Ms ICZ2YXJfYWRkcik7CisJKHZhcl9zeW1ib2wsIEhTQV9FWEVDVVRBQkxFX1NZTUJPTF9JTkZP X1ZBUklBQkxFX0FERFJFU1MsCisJICZ2YXJfdGFibGVfYWRkcik7CiAgICAgICBpZiAoc3Rh dHVzICE9IEhTQV9TVEFUVVNfU1VDQ0VTUykKIAloc2FfZmF0YWwgKCJDb3VsZCBub3QgZXh0 cmFjdCBhIHZhcmlhYmxlIGZyb20gaXRzIHN5bWJvbCIsIHN0YXR1cyk7Ci0gICAgICBzdGF0 dXMgPSBoc2FfZm5zLmhzYV9leGVjdXRhYmxlX3N5bWJvbF9nZXRfaW5mb19mbgotCSh2YXJf c3ltYm9sLCBIU0FfRVhFQ1VUQUJMRV9TWU1CT0xfSU5GT19WQVJJQUJMRV9TSVpFLCAmdmFy X3NpemUpOwotICAgICAgaWYgKHN0YXR1cyAhPSBIU0FfU1RBVFVTX1NVQ0NFU1MpCi0JaHNh X2ZhdGFsICgiQ291bGQgbm90IGV4dHJhY3QgYSB2YXJpYWJsZSBzaXplIGZyb20gaXRzIHN5 bWJvbCIsIHN0YXR1cyk7CiAKLSAgICAgIHBhaXItPnN0YXJ0ID0gdmFyX2FkZHI7Ci0gICAg ICBwYWlyLT5lbmQgPSB2YXJfYWRkciArIHZhcl9zaXplOwotICAgICAgR0NOX0RFQlVHICgi Rm91bmQgdmFyaWFibGUgJXMgYXQgJXAgd2l0aCBzaXplICV1XG4iLCB2LT5uYW1lLAotCQkg KHZvaWQgKil2YXJfYWRkciwgdmFyX3NpemUpOwotICAgICAgcGFpcisrOworICAgICAgc3Ry dWN0IHsKKwl1aW50NjRfdCBhZGRyOworCXVpbnQ2NF90IHNpemU7CisgICAgICB9IHZhcl90 YWJsZVt2YXJfY291bnRdOworICAgICAgR09NUF9PRkZMT0FEX2RldjJob3N0IChhZ2VudC0+ ZGV2aWNlX2lkLCB2YXJfdGFibGUsCisJCQkgICAgICh2b2lkKil2YXJfdGFibGVfYWRkciwg c2l6ZW9mICh2YXJfdGFibGUpKTsKKworICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8 IHZhcl9jb3VudDsgaSsrKQorCXsKKwkgIHBhaXItPnN0YXJ0ID0gdmFyX3RhYmxlW2ldLmFk ZHI7CisJICBwYWlyLT5lbmQgPSB2YXJfdGFibGVbaV0uYWRkciArIHZhcl90YWJsZVtpXS5z aXplOworCSAgR0NOX0RFQlVHICgiRm91bmQgdmFyaWFibGUgYXQgJXAgd2l0aCBzaXplICVs dVxuIiwKKwkJICAgICAodm9pZCAqKXZhcl90YWJsZVtpXS5hZGRyLCB2YXJfdGFibGVbaV0u c2l6ZSk7CisJICBwYWlyKys7CisJfQogICAgIH0KIAogICBHQ05fREVCVUcgKCJMb29raW5n IGZvciB2YXJpYWJsZSAlc1xuIiwgU1RSSU5HWCAoR09NUF9ERVZJQ0VfTlVNX1ZBUikpOwo= --------------uwR26Cr2E3ExZW1w9rqnCm0N--