From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smtp-out2.suse.de (smtp-out2.suse.de [195.135.220.29]) by sourceware.org (Postfix) with ESMTPS id 7A93438582B2 for ; Tue, 21 Jun 2022 08:43:22 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 7A93438582B2 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=suse.cz Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=suse.cz Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by smtp-out2.suse.de (Postfix) with ESMTPS id 49D561FAFD; Tue, 21 Jun 2022 08:43:21 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.cz; s=susede2_rsa; t=1655801001; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=QCyooTngpqUqxaZ50XqV7z2ZkW3OVUBC9CbBlg8t84w=; b=SJ7nHGf5RdrhAozZGtIE+ADifBW/uNuYnmsTn1hvd8Jo/HxgZhk7Pzo6NGW61pAN9YFxRs 03IQLtjK8mXDXkbwT2/G9MGmCpSkYry+6KUanwThXzyR8KifdalvnW6nvIg8oqqhHR/Syc 2t6ZBc8oWIRf7yVeBeI/9ayOkmI+ZWY= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.cz; s=susede2_ed25519; t=1655801001; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=QCyooTngpqUqxaZ50XqV7z2ZkW3OVUBC9CbBlg8t84w=; b=LFyUEyMWBnwROG1NSLBLr1A5syi4Bezn5aAy7IRw9exdIVtvHyiDhWytErg/tLuZKvIpwD E0OQGBVf4djPnvDA== Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by imap2.suse-dmz.suse.de (Postfix) with ESMTPS id 2573613A88; Tue, 21 Jun 2022 08:43:21 +0000 (UTC) Received: from dovecot-director2.suse.de ([192.168.254.65]) by imap2.suse-dmz.suse.de with ESMTPSA id pE8MCKmEsWLaDgAAMHmgww (envelope-from ); Tue, 21 Jun 2022 08:43:21 +0000 Content-Type: multipart/mixed; boundary="------------C1xZ06fQiDzKZonxcH99M3do" Message-ID: Date: Tue, 21 Jun 2022 10:43:20 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.10.0 Subject: Re: [PATCH 2/3] lto-plugin: make claim_file_handler thread-safe Content-Language: en-US To: Richard Biener , Rainer Orth , "Joseph S. Myers" Cc: Jakub Jelinek , GCC Patches References: <803a0290-3909-b9c5-2461-b1740a00c63a@suse.cz> From: =?UTF-8?Q?Martin_Li=c5=a1ka?= In-Reply-To: X-Spam-Status: No, score=-11.9 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, NICE_REPLY_A, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) 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: Tue, 21 Jun 2022 08:43:27 -0000 This is a multi-part message in MIME format. --------------C1xZ06fQiDzKZonxcH99M3do Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit On 6/21/22 09:56, Richard Biener wrote: > On Mon, Jun 20, 2022 at 12:20 PM Martin Liška wrote: >> >> On 6/20/22 11:32, Richard Biener wrote: >>> On Thu, Jun 16, 2022 at 9:01 AM Martin Liška wrote: >>>> >>>> lto-plugin/ChangeLog: >>>> >>>> * lto-plugin.c (plugin_lock): New lock. >>>> (claim_file_handler): Use mutex for critical section. >>>> (onload): Initialize mutex. >>>> --- >>>> lto-plugin/lto-plugin.c | 16 +++++++++++++++- >>>> 1 file changed, 15 insertions(+), 1 deletion(-) >>>> >>>> diff --git a/lto-plugin/lto-plugin.c b/lto-plugin/lto-plugin.c >>>> index 00b760636dc..13118c4983c 100644 >>>> --- a/lto-plugin/lto-plugin.c >>>> +++ b/lto-plugin/lto-plugin.c >>>> @@ -55,6 +55,7 @@ along with this program; see the file COPYING3. If not see >>>> #include >>>> #include >>>> #include >>>> +#include >>> >>> Not sure if we support any non-pthread target for building the LTO >>> plugin, but it >>> seems we have >>> >>> # Among non-ELF, only Windows platforms support the lto-plugin so far. >>> # Build it unless LTO was explicitly disabled. >>> case $target in >>> *-cygwin* | *-mingw*) build_lto_plugin=$enable_lto ;; >>> >>> which suggests that at least build validating the above with --enable-lto >> >> Verified that it's fine. >> >>> >>> IIRC we have gthr-*.h in libgcc/, not sure if that's usable in a >>> host linker plugin. >>> >>>> #ifdef HAVE_SYS_WAIT_H >>>> #include >>>> #endif >>>> @@ -157,6 +158,9 @@ enum symbol_style >>>> ss_uscore, /* Underscore prefix all symbols. */ >>>> }; >>>> >>>> +/* Plug-in mutex. */ >>>> +static pthread_mutex_t plugin_lock; >>>> + >>>> static char *arguments_file_name; >>>> static ld_plugin_register_claim_file register_claim_file; >>>> static ld_plugin_register_all_symbols_read register_all_symbols_read; >>>> @@ -1262,15 +1266,18 @@ claim_file_handler (const struct ld_plugin_input_file *file, int *claimed) >>>> lto_file.symtab.syms); >>>> check (status == LDPS_OK, LDPL_FATAL, "could not add symbols"); >>>> >>>> + pthread_mutex_lock (&plugin_lock); >>>> num_claimed_files++; >>>> claimed_files = >>>> xrealloc (claimed_files, >>>> num_claimed_files * sizeof (struct plugin_file_info)); >>>> claimed_files[num_claimed_files - 1] = lto_file; >>>> + pthread_mutex_unlock (&plugin_lock); >>>> >>>> *claimed = 1; >>>> } >>>> >>>> + pthread_mutex_lock (&plugin_lock); >>>> if (offload_files == NULL) >>>> { >>>> /* Add dummy item to the start of the list. */ >>>> @@ -1333,11 +1340,12 @@ claim_file_handler (const struct ld_plugin_input_file *file, int *claimed) >>>> offload_files_last_lto = ofld; >>>> num_offload_files++; >>>> } >>>> + pthread_mutex_unlock (&plugin_lock); >>>> >>>> goto cleanup; >>>> >>>> err: >>>> - non_claimed_files++; >>>> + __atomic_fetch_add (&non_claimed_files, 1, __ATOMIC_RELAXED); >>> >>> is it worth "optimizing" this with yet another need for target specific support >>> (just use pthread_mutex here as well?) >> >> Sure. >> >> May I install the patch with the change? > > Can you at least add a configure check for pthread.h and maybe disable > locking when not found or erroring out? I figure we have GCC_AC_THREAD_HEADER All right, let's error out then. > for the gthr.h stuff using $target_thread_file (aka --enable-threads=XYZ), > but as said that's for the target and I don't see any host uses. We might also > add an explicit list of hosts (*-linux*?) where we enable thread support for > lto-plugin, providing opt-in (so you'd have to wrap the mutex taking or > if-def it out). > > I think you also need to link lto-plugin with -pthread, no? Yep. Please see the updated patch. > On linux > it might work omitting that but I'm not sure other libc have serial pthread > stubs in their libc. BFD ld definitely doesn't link against pthread so > dlopening lto-plugin will fail (also not all libc might like > initializing threads > from a dlopen _init). What initializing threads do you mean? Martin > > Richard. > >> Cheers, >> Martin >> >>> >>>> free (lto_file.name); >>>> >>>> cleanup: >>>> @@ -1415,6 +1423,12 @@ onload (struct ld_plugin_tv *tv) >>>> struct ld_plugin_tv *p; >>>> enum ld_plugin_status status; >>>> >>>> + if (pthread_mutex_init (&plugin_lock, NULL) != 0) >>>> + { >>>> + fprintf (stderr, "mutex init failed\n"); >>>> + abort (); >>>> + } >>>> + >>>> p = tv; >>>> while (p->tv_tag) >>>> { >>>> -- >>>> 2.36.1 >>>> >>>> --------------C1xZ06fQiDzKZonxcH99M3do Content-Type: text/x-patch; charset=UTF-8; name="0001-lto-plugin-make-claim_file_handler-thread-safe.patch" Content-Disposition: attachment; filename*0="0001-lto-plugin-make-claim_file_handler-thread-safe.patch" Content-Transfer-Encoding: base64 RnJvbSBmMWUyZjg0ZGJmZGFjNWM3YWVlNzAzNmU3ODg0MWNiMzNjM2JhZDUwIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJ0aW4gTGlza2EgPG1saXNrYUBzdXNlLmN6PgpE YXRlOiBNb24sIDE2IE1heSAyMDIyIDE0OjE4OjQxICswMjAwClN1YmplY3Q6IFtQQVRDSF0g bHRvLXBsdWdpbjogbWFrZSBjbGFpbV9maWxlX2hhbmRsZXIgdGhyZWFkLXNhZmUKCmx0by1w bHVnaW4vQ2hhbmdlTG9nOgoKCSogbHRvLXBsdWdpbi5jIChwbHVnaW5fbG9jayk6IE5ldyBs b2NrLgoJKGNsYWltX2ZpbGVfaGFuZGxlcik6IFVzZSBtdXRleCBmb3IgY3JpdGljYWwgc2Vj dGlvbi4KCShvbmxvYWQpOiBJbml0aWFsaXplIG11dGV4LgotLS0KIGx0by1wbHVnaW4vY29u ZmlnLmguaW4gIHwgIDMgKysrCiBsdG8tcGx1Z2luL2NvbmZpZ3VyZSAgICB8IDE3ICsrKysr KysrKysrKysrKy0tCiBsdG8tcGx1Z2luL2NvbmZpZ3VyZS5hYyB8ICA3ICsrKysrKysKIGx0 by1wbHVnaW4vbHRvLXBsdWdpbi5jIHwgMjAgKysrKysrKysrKysrKysrKysrKysKIDQgZmls ZXMgY2hhbmdlZCwgNDUgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKCmRpZmYgLS1n aXQgYS9sdG8tcGx1Z2luL2NvbmZpZy5oLmluIGIvbHRvLXBsdWdpbi9jb25maWcuaC5pbgpp bmRleCBkZGJkZTc2MTlkNS4uMDI5ZTc4MmYxZWUgMTAwNjQ0Ci0tLSBhL2x0by1wbHVnaW4v Y29uZmlnLmguaW4KKysrIGIvbHRvLXBsdWdpbi9jb25maWcuaC5pbgpAQCAtOSw2ICs5LDkg QEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bWVtb3J5Lmg+IGhlYWRlciBm aWxlLiAqLwogI3VuZGVmIEhBVkVfTUVNT1JZX0gKIAorLyogRGVmaW5lIHRvIDEgaWYgcHRo cmVhZC5oIGlzIHByZXNlbnQuICovCisjdW5kZWYgSEFWRV9QVEhSRUFEX0gKKwogLyogRGVm aW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdGRpbnQuaD4gaGVhZGVyIGZpbGUuICovCiAj dW5kZWYgSEFWRV9TVERJTlRfSAogCmRpZmYgLS1naXQgYS9sdG8tcGx1Z2luL2NvbmZpZ3Vy ZSBiL2x0by1wbHVnaW4vY29uZmlndXJlCmluZGV4IGI4MjBhY2NmZDY1Li42ZDQ1MjA2M2Nm YiAxMDA3NTUKLS0tIGEvbHRvLXBsdWdpbi9jb25maWd1cmUKKysrIGIvbHRvLXBsdWdpbi9j b25maWd1cmUKQEAgLTU2NDMsNiArNTY0Myw5IEBAIGFjX2NvbXBpbGVyX2dudT0kYWNfY3Zf Y19jb21waWxlcl9nbnUKIAogCiAKKyMgVGhlIHBsdWctaW4gZGVwZW5kcyBvbiBwdGhyZWFk cworTERGTEFHUz0iLWxwdGhyZWFkIgorCiAjIENoZWNrIHdoZXRoZXIgLXN0YXRpYy1saWJn Y2MgaXMgc3VwcG9ydGVkLgogc2F2ZWRfTERGTEFHUz0iJExERkxBR1MiCiBMREZMQUdTPSIk TERGTEFHUyAtc3RhdGljLWxpYmdjYyIKQEAgLTYwMTAsNiArNjAxMywxNiBAQCBlbHNlCiBm aQogCiAKKyMgQ2hlY2sgZm9yIHRocmVhZCBoZWFkZXJzLgorYWNfZm5fY19jaGVja19oZWFk ZXJfbW9uZ3JlbCAiJExJTkVOTyIgInB0aHJlYWQuaCIgImFjX2N2X2hlYWRlcl9wdGhyZWFk X2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX3B0 aHJlYWRfaCIgPSB4eWVzOyB0aGVuIDoKKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9QVEhS RUFEX0ggMSIgPj5jb25mZGVmcy5oCisKK2ZpCisKKworCiBjYXNlIGBwd2RgIGluCiAgICpc ICogfCAqXAkqKQogICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5P fTogV0FSTklORzogTGlidG9vbCBkb2VzIG5vdCBjb3BlIHdlbGwgd2l0aCB3aGl0ZXNwYWNl IGluIFxgcHdkXGAiID4mNQpAQCAtMTIwODEsNyArMTIwOTQsNyBAQCBlbHNlCiAgIGx0X2Rs dW5rbm93bj0wOyBsdF9kbG5vX3VzY29yZT0xOyBsdF9kbG5lZWRfdXNjb3JlPTIKICAgbHRf c3RhdHVzPSRsdF9kbHVua25vd24KICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9F T0YKLSNsaW5lIDEyMDg0ICJjb25maWd1cmUiCisjbGluZSAxMjA5NyAiY29uZmlndXJlIgog I2luY2x1ZGUgImNvbmZkZWZzLmgiCiAKICNpZiBIQVZFX0RMRkNOX0gKQEAgLTEyMTg3LDcg KzEyMjAwLDcgQEAgZWxzZQogICBsdF9kbHVua25vd249MDsgbHRfZGxub191c2NvcmU9MTsg bHRfZGxuZWVkX3VzY29yZT0yCiAgIGx0X3N0YXR1cz0kbHRfZGx1bmtub3duCiAgIGNhdCA+ IGNvbmZ0ZXN0LiRhY19leHQgPDxfTFRfRU9GCi0jbGluZSAxMjE5MCAiY29uZmlndXJlIgor I2xpbmUgMTIyMDMgImNvbmZpZ3VyZSIKICNpbmNsdWRlICJjb25mZGVmcy5oIgogCiAjaWYg SEFWRV9ETEZDTl9ICmRpZmYgLS1naXQgYS9sdG8tcGx1Z2luL2NvbmZpZ3VyZS5hYyBiL2x0 by1wbHVnaW4vY29uZmlndXJlLmFjCmluZGV4IGJjNWI2MThhNDk1Li5hYWZhYmQ0ZmE3YiAx MDA2NDQKLS0tIGEvbHRvLXBsdWdpbi9jb25maWd1cmUuYWMKKysrIGIvbHRvLXBsdWdpbi9j b25maWd1cmUuYWMKQEAgLTEzLDYgKzEzLDkgQEAgQUNfUFJPR19DQwogQUNfU1lTX0xBUkdF RklMRQogQUNYX1BST0dfQ0NfV0FSTklOR19PUFRTKFstV2FsbF0sIFthY19sdG9fcGx1Z2lu X3dhcm5fY2ZsYWdzXSkKIAorIyBUaGUgcGx1Zy1pbiBkZXBlbmRzIG9uIHB0aHJlYWRzCitM REZMQUdTPSItbHB0aHJlYWQiCisKICMgQ2hlY2sgd2hldGhlciAtc3RhdGljLWxpYmdjYyBp cyBzdXBwb3J0ZWQuCiBzYXZlZF9MREZMQUdTPSIkTERGTEFHUyIKIExERkxBR1M9IiRMREZM QUdTIC1zdGF0aWMtbGliZ2NjIgpAQCAtODcsNiArOTAsMTAgQEAgQU1fQ09ORElUSU9OQUwo TFRPX1BMVUdJTl9VU0VfU1lNVkVSLCBbdGVzdCAieCRsdG9fcGx1Z2luX3VzZV9zeW12ZXIi ICE9IHhub10pCiBBTV9DT05ESVRJT05BTChMVE9fUExVR0lOX1VTRV9TWU1WRVJfR05VLCBb dGVzdCAieCRsdG9fcGx1Z2luX3VzZV9zeW12ZXIiID0geGdudV0pCiBBTV9DT05ESVRJT05B TChMVE9fUExVR0lOX1VTRV9TWU1WRVJfU1VOLCBbdGVzdCAieCRsdG9fcGx1Z2luX3VzZV9z eW12ZXIiID0geHN1bl0pCiAKKyMgQ2hlY2sgZm9yIHRocmVhZCBoZWFkZXJzLgorQUNfQ0hF Q0tfSEVBREVSKHB0aHJlYWQuaCwKKyAgW0FDX0RFRklORShIQVZFX1BUSFJFQURfSCwgMSwg W0RlZmluZSB0byAxIGlmIHB0aHJlYWQuaCBpcyBwcmVzZW50Ll0pXSkKKwogQU1fUFJPR19M SUJUT09MCiBBQ1hfTFRfSE9TVF9GTEFHUwogQUNfU1VCU1QodGFyZ2V0X25vbmNhbm9uaWNh bCkKZGlmZiAtLWdpdCBhL2x0by1wbHVnaW4vbHRvLXBsdWdpbi5jIGIvbHRvLXBsdWdpbi9s dG8tcGx1Z2luLmMKaW5kZXggMDBiNzYwNjM2ZGMuLjYzNWUxMjY5NDZiIDEwMDY0NAotLS0g YS9sdG8tcGx1Z2luL2x0by1wbHVnaW4uYworKysgYi9sdG8tcGx1Z2luL2x0by1wbHVnaW4u YwpAQCAtNDAsNyArNDAsMTEgQEAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUg ZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKIAogI2lmZGVmIEhBVkVfQ09ORklHX0gKICNp bmNsdWRlICJjb25maWcuaCIKKyNpZiAhSEFWRV9QVEhSRUFEX0gKKyNlcnJvciBQT1NJWCB0 aHJlYWRzIGFyZSBtYW5kYXRvcnkgZGVwZW5kZW5jeQogI2VuZGlmCisjZW5kaWYKKwogI2lm IEhBVkVfU1RESU5UX0gKICNpbmNsdWRlIDxzdGRpbnQuaD4KICNlbmRpZgpAQCAtNTUsNiAr NTksNyBAQCBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcz LiAgSWYgbm90IHNlZQogI2luY2x1ZGUgPHVuaXN0ZC5oPgogI2luY2x1ZGUgPGZjbnRsLmg+ CiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8cHRocmVhZC5oPgogI2lmZGVm IEhBVkVfU1lTX1dBSVRfSAogI2luY2x1ZGUgPHN5cy93YWl0Lmg+CiAjZW5kaWYKQEAgLTE1 Nyw2ICsxNjIsOSBAQCBlbnVtIHN5bWJvbF9zdHlsZQogICBzc191c2NvcmUsCS8qIFVuZGVy c2NvcmUgcHJlZml4IGFsbCBzeW1ib2xzLiAgKi8KIH07CiAKKy8qIFBsdWctaW4gbXV0ZXgu ICAqLworc3RhdGljIHB0aHJlYWRfbXV0ZXhfdCBwbHVnaW5fbG9jazsKKwogc3RhdGljIGNo YXIgKmFyZ3VtZW50c19maWxlX25hbWU7CiBzdGF0aWMgbGRfcGx1Z2luX3JlZ2lzdGVyX2Ns YWltX2ZpbGUgcmVnaXN0ZXJfY2xhaW1fZmlsZTsKIHN0YXRpYyBsZF9wbHVnaW5fcmVnaXN0 ZXJfYWxsX3N5bWJvbHNfcmVhZCByZWdpc3Rlcl9hbGxfc3ltYm9sc19yZWFkOwpAQCAtMTI2 MiwxNSArMTI3MCwxOCBAQCBjbGFpbV9maWxlX2hhbmRsZXIgKGNvbnN0IHN0cnVjdCBsZF9w bHVnaW5faW5wdXRfZmlsZSAqZmlsZSwgaW50ICpjbGFpbWVkKQogCQkJICAgICAgbHRvX2Zp bGUuc3ltdGFiLnN5bXMpOwogICAgICAgY2hlY2sgKHN0YXR1cyA9PSBMRFBTX09LLCBMRFBM X0ZBVEFMLCAiY291bGQgbm90IGFkZCBzeW1ib2xzIik7CiAKKyAgICAgIHB0aHJlYWRfbXV0 ZXhfbG9jayAoJnBsdWdpbl9sb2NrKTsKICAgICAgIG51bV9jbGFpbWVkX2ZpbGVzKys7CiAg ICAgICBjbGFpbWVkX2ZpbGVzID0KIAl4cmVhbGxvYyAoY2xhaW1lZF9maWxlcywKIAkJICBu dW1fY2xhaW1lZF9maWxlcyAqIHNpemVvZiAoc3RydWN0IHBsdWdpbl9maWxlX2luZm8pKTsK ICAgICAgIGNsYWltZWRfZmlsZXNbbnVtX2NsYWltZWRfZmlsZXMgLSAxXSA9IGx0b19maWxl OworICAgICAgcHRocmVhZF9tdXRleF91bmxvY2sgKCZwbHVnaW5fbG9jayk7CiAKICAgICAg ICpjbGFpbWVkID0gMTsKICAgICB9CiAKKyAgcHRocmVhZF9tdXRleF9sb2NrICgmcGx1Z2lu X2xvY2spOwogICBpZiAob2ZmbG9hZF9maWxlcyA9PSBOVUxMKQogICAgIHsKICAgICAgIC8q IEFkZCBkdW1teSBpdGVtIHRvIHRoZSBzdGFydCBvZiB0aGUgbGlzdC4gICovCkBAIC0xMzMz LDExICsxMzQ0LDE0IEBAIGNsYWltX2ZpbGVfaGFuZGxlciAoY29uc3Qgc3RydWN0IGxkX3Bs dWdpbl9pbnB1dF9maWxlICpmaWxlLCBpbnQgKmNsYWltZWQpCiAJb2ZmbG9hZF9maWxlc19s YXN0X2x0byA9IG9mbGQ7CiAgICAgICBudW1fb2ZmbG9hZF9maWxlcysrOwogICAgIH0KKyAg cHRocmVhZF9tdXRleF91bmxvY2sgKCZwbHVnaW5fbG9jayk7CiAKICAgZ290byBjbGVhbnVw OwogCiAgZXJyOgorICBwdGhyZWFkX211dGV4X2xvY2sgKCZwbHVnaW5fbG9jayk7CiAgIG5v bl9jbGFpbWVkX2ZpbGVzKys7CisgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrICgmcGx1Z2luX2xv Y2spOwogICBmcmVlIChsdG9fZmlsZS5uYW1lKTsKIAogIGNsZWFudXA6CkBAIC0xNDE1LDYg KzE0MjksMTIgQEAgb25sb2FkIChzdHJ1Y3QgbGRfcGx1Z2luX3R2ICp0dikKICAgc3RydWN0 IGxkX3BsdWdpbl90diAqcDsKICAgZW51bSBsZF9wbHVnaW5fc3RhdHVzIHN0YXR1czsKIAor ICBpZiAocHRocmVhZF9tdXRleF9pbml0ICgmcGx1Z2luX2xvY2ssIE5VTEwpICE9IDApCisg ICAgeworICAgICAgZnByaW50ZiAoc3RkZXJyLCAibXV0ZXggaW5pdCBmYWlsZWRcbiIpOwor ICAgICAgYWJvcnQgKCk7CisgICAgfQorCiAgIHAgPSB0djsKICAgd2hpbGUgKHAtPnR2X3Rh ZykKICAgICB7Ci0tIAoyLjM2LjEKCg== --------------C1xZ06fQiDzKZonxcH99M3do--