From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by sourceware.org (Postfix) with ESMTPS id AFA543858439 for ; Wed, 20 Dec 2023 02:56:55 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org AFA543858439 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=redhat.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org AFA543858439 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=170.10.129.124 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1703041018; cv=none; b=pFxN3MhqRUDe6WK0Aw34Jbe4+LUTwZ6AjZu9vswuojuJTd+uIuIfvpXrL901/o28K9k1Qc9nIKVyHLcfvM8fCG7kdzS2mCtKBsL/VGpyygoHYBLc7FXSMD9IU6KvRXTb2u1U1p1H6bT/ASi/4QkbmU6szJ3djAGP4TAadogp6fc= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1703041018; c=relaxed/simple; bh=Y2GVafrByQmoOnTk/0SCuv9Dy3V3Jj3zUdW4z6T+ctA=; h=DKIM-Signature:MIME-Version:From:Date:Message-ID:Subject:To; b=XZZMeznYm+KvWWP5qti5pvO7lcnFyK8cBKR44U7/Izt0YXICpM57WvW01mDYg46HOBaoqhoOWWg/yWLYMknJNpdT0Ssh/e2SJp+9IA6qzsnXJKdq+PXlcjKGouIs0guQcDv3G5yUK78JifP6ZmL6qJPmWYTAd2Yirzuf2oVCR40= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1703041015; h=from:from:reply-to:subject:subject: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=XI4fchDOdJAEnjK/jkAT+rkWd8S7pO5iLtoNPRRwvFw=; b=RfM+m2Vx4LmtG8IvGVwa8EkzZ42OCSibROog1gzo6fGAahF6d6vdOEAHAR9X26mVnhNhus e9UrIYtPjG6sI+SfutgZCjxwLd7ABnIWfHsDLuv4tHkTfLoZuY5vMhAZaRGYSP4i6EglUA WFDn9Fsv+0X9uBb6XtpMIoe+cYmcZ6g= Received: from mail-lf1-f70.google.com (mail-lf1-f70.google.com [209.85.167.70]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-627-TcFMS3k8PLyKab2g3kuDpA-1; Tue, 19 Dec 2023 21:56:52 -0500 X-MC-Unique: TcFMS3k8PLyKab2g3kuDpA-1 Received: by mail-lf1-f70.google.com with SMTP id 2adb3069b0e04-50e2a3a1706so2997774e87.1 for ; Tue, 19 Dec 2023 18:56:51 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1703041010; x=1703645810; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=YY0oKI9+VHs1og91gFFZjHjECNl1lL03PS+KFxonOjQ=; b=PRpjWqSKyILonxt/z6swWEqcBtFzXMEInDnJc2vQDq5vBRkSXFJLKNeDHfObT8RCZH PiiCdAgDXy5tONp8/OIR9oV8F+qWA7Lnh4s6v5w1/6+TtOSGeWb72GTXEG3zv6hJSl/U Z+HgfrP455jweqvFqmilv6ZTYe4QGh55TZf/xYmYg77apRpra55+E/dsFlnd5yrFQS5n s9cIJfaX+NB43kdT+Mh95BelOUKK0RfEpp6SKJtwNQ559yncuq/vMm3XV9xWHKvy2WdU fPoKToFvEZdz3/JSqSJKLGUOanHFD4UHQrmuWZyrqTBTGeK71pzlYuTc3gPNwZl9djRI PcPQ== X-Gm-Message-State: AOJu0Yxt5BB+P/TkcLl+wpSNhuFywQ1lYPD8bzenkkNydZX67G9OlkHn vXvokmcZiOBCLzcvcRmv64fGTC+wad2mqCrkaP5cJpCDlaee6iEL49xte7fDMpJ4xX2iVjEDEPn VLUuPQKWLLFhBw4zIEaEJyK+IWKbcQxZTubOKjbD0pw/qoklIEPw= X-Received: by 2002:a05:6512:3b9a:b0:50e:30a8:4c8e with SMTP id g26-20020a0565123b9a00b0050e30a84c8emr3767991lfv.43.1703041010390; Tue, 19 Dec 2023 18:56:50 -0800 (PST) X-Google-Smtp-Source: AGHT+IEzA1m8Pxl69Q8F2XizyLW8Xq6G8Mb6gZDCmL2FSoLXVOCmWeFIJ9NFaHc0xJ7tIrgQaiYo60i535Vv/CQ1gVc= X-Received: by 2002:a05:6512:3b9a:b0:50e:30a8:4c8e with SMTP id g26-20020a0565123b9a00b0050e30a84c8emr3767987lfv.43.1703041010036; Tue, 19 Dec 2023 18:56:50 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: From: Di Chen Date: Wed, 20 Dec 2023 10:56:38 +0800 Message-ID: Subject: Re: [PATCH] PR29997: Fix the symbol aliases search failure when symbol version is missing To: Aaron Merey Cc: systemtap@sourceware.org X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: multipart/mixed; boundary="000000000000711c09060ce82240" X-Spam-Status: No, score=-12.5 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,HTML_MESSAGE,KAM_LOTSOFHASH,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H4,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,SPF_NONE,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 List-Id: --000000000000711c09060ce82240 Content-Type: multipart/alternative; boundary="000000000000711c08060ce8223e" --000000000000711c08060ce8223e Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hey Aaron, I have added the wildcard handling for the PR29997. =46rom 0c95ce19272d6e13abf6f41c4ae29b6aa925ca20 Mon Sep 17 00:00:00 2001 From: Di Chen Date: Sun, 5 Nov 2023 11:23:50 +0800 Subject: [PATCH] PR29997: Fix the symbol aliases search failure when symbol version is missing After calling module_info::update_symtab, function aliases will be populated. Then the updated symtab will be used for symbol searching. For the _IO_new_fopen familty with the aliases: $ eu-readelf -s /lib64/libc.so.6 | grep 0000000000077440 247: 0000000000077440 14 FUNC WEAK DEFAULT 16 fopen64@ @GLIBC_2.2.5 1014: 0000000000077440 14 FUNC GLOBAL DEFAULT 16 fopen@ @GLIBC_2.2.5 1028: 0000000000077440 14 FUNC GLOBAL DEFAULT 16 _IO_fopen@ @GLIBC_2.2.5 1556: 0000000000077440 14 FUNC LOCAL DEFAULT 16 _IO_fopen64 3471: 0000000000077440 14 FUNC LOCAL DEFAULT 16 __new_fopen 4765: 0000000000077440 14 FUNC LOCAL DEFAULT 16 _IO_new_fopen 5110: 0000000000077440 14 FUNC WEAK DEFAULT 16 fopen64 7198: 0000000000077440 14 FUNC GLOBAL DEFAULT 16 fopen@ @GLIBC_2.2.5 7433: 0000000000077440 14 FUNC GLOBAL DEFAULT 16 _IO_fopen@ @GLIBC_2.2.5 a) fopen@@GLIBC_2.2.5 exists in the updated symtab b) fopen does not exist in the updated symtab This PR is to add a version info padding when symbol cannot be found in the updated symtab. Signed-off-by: Di Chen --- dwflpp.cxx | 44 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 43 insertions(+), 1 deletion(-) diff --git a/dwflpp.cxx b/dwflpp.cxx index 9fccca0a9..044b0ca97 100644 --- a/dwflpp.cxx +++ b/dwflpp.cxx @@ -1055,6 +1055,15 @@ dwflpp::iterate_over_functions(int (*callback)(Dwarf_Die*, void*), } auto range =3D v->equal_range(function); + // version padding if the symbol is not found + if (range.first =3D=3D range.second) + { + std::string function_with_ver =3D function + "@"; + for (auto it =3D v->begin(); it !=3D v->end(); ++it) + if (it->first.find(function_with_ver) =3D=3D 0) + function_with_ver =3D it->first; + range =3D v->equal_range(function_with_ver); + } if (range.first !=3D range.second) { for (auto it =3D range.first; it !=3D range.second; ++it) @@ -1098,7 +1107,10 @@ dwflpp::iterate_over_functions(int (*callback)(Dwarf_Die*, void*), if (pending_interrupts) return DWARF_CB_ABORT; const string& func_name =3D it->first; Dwarf_Die& die =3D it->second; - if (function_name_matches_pattern (func_name, function)) + + // version padding if the pattern is not matched + if ((function_name_matches_pattern (func_name, function)) || + (function_name_matches_pattern (func_name, function + "@*"))) { if (sess.verbose > 4) clog << _F("function cache %s:%s match %s vs %s", module_name.c_str(), @@ -1141,6 +1153,15 @@ dwflpp::iterate_single_function(int (*callback)(Dwarf_Die*, void*), } auto range =3D v->equal_range(function); + // version padding if the symbol is not found + if (range.first =3D=3D range.second) + { + std::string function_with_ver =3D function + "@"; + for (auto it =3D v->begin(); it !=3D v->end(); ++it) + if (it->first.find(function_with_ver) =3D=3D 0) + function_with_ver =3D it->first; + range =3D v->equal_range(function_with_ver); + } if (range.first !=3D range.second) { for (auto it =3D range.first; it !=3D range.second; ++it) @@ -1158,6 +1179,27 @@ dwflpp::iterate_single_function(int (*callback)(Dwarf_Die*, void*), if (rc !=3D DWARF_CB_OK) break; } } + else if (name_has_wildcard (function)) + { + for (auto it =3D v->begin(); it !=3D v->end(); ++it) + { + if (pending_interrupts) return DWARF_CB_ABORT; + const string& func_name =3D it->first; + Dwarf_Die& die =3D it->second; + + // version padding if the pattern is not matched + if ((function_name_matches_pattern (func_name, function)) || + (function_name_matches_pattern (func_name, function + "@*"))) + { + if (sess.verbose > 4) + clog << _F("function cache %s:%s match %s vs %s", module_name.c_str(), + cu_name().c_str(), func_name.c_str(), function.c_str()) << endl; + + rc =3D (*callback)(& die, data); + if (rc !=3D DWARF_CB_OK) break; + } + } + } // undo the focus_on_cu this->cu =3D NULL; --=20 2.41.0 On Tue, Nov 21, 2023 at 12:05=E2=80=AFAM Aaron Merey wr= ote: > Hi Di, > > Thanks for working on this. > > On Sun, Nov 5, 2023 at 12:00=E2=80=AFAM Di Chen via Systemtap > wrote: > > > > From 9273dc95658b109f048e4ec9b0fcde96e34f3419 Mon Sep 17 00:00:00 2001 > > From: Di Chen > > Date: Sun, 5 Nov 2023 11:23:50 +0800 > > Subject: [PATCH] PR29997: Fix the symbol aliases search failure when > symbol > > version is missing > > > > After calling module_info::update_symtab, function aliases will be > > populated. Then the updated symtab will be used for symbol searching. > > > > For the _IO_new_fopen familty with the aliases: > > > > $ eu-readelf -s /lib64/libc.so.6 | grep 0000000000077440 > > 247: 0000000000077440 14 FUNC WEAK DEFAULT 16 fopen6= 4@ > > @GLIBC_2.2.5 > > 1014: 0000000000077440 14 FUNC GLOBAL DEFAULT 16 fopen@ > > @GLIBC_2.2.5 > > 1028: 0000000000077440 14 FUNC GLOBAL DEFAULT 16 > _IO_fopen@ > > @GLIBC_2.2.5 > > 1556: 0000000000077440 14 FUNC LOCAL DEFAULT 16 > _IO_fopen64 > > 3471: 0000000000077440 14 FUNC LOCAL DEFAULT 16 > __new_fopen > > 4765: 0000000000077440 14 FUNC LOCAL DEFAULT 16 > > _IO_new_fopen > > 5110: 0000000000077440 14 FUNC WEAK DEFAULT 16 fopen64 > > 7198: 0000000000077440 14 FUNC GLOBAL DEFAULT 16 fopen@ > > @GLIBC_2.2.5 > > 7433: 0000000000077440 14 FUNC GLOBAL DEFAULT 16 > _IO_fopen@ > > @GLIBC_2.2.5 > > > > a) fopen@@GLIBC_2.2.5 exists in the updated symtab > > b) fopen does not exist in the updated symtab > > > > This PR is to add a version info padding when symbol cannot be found in > > the updated symtab. > > > > Signed-off-by: Di Chen > > --- > > dwflpp.cxx | 18 ++++++++++++++++++ > > 1 file changed, 18 insertions(+) > > > > diff --git a/dwflpp.cxx b/dwflpp.cxx > > index a4f66440f..22e1479c9 100644 > > --- a/dwflpp.cxx > > +++ b/dwflpp.cxx > > @@ -1052,6 +1052,15 @@ dwflpp::iterate_over_functions(int > > (*callback)(Dwarf_Die*, void*), > > } > > > > auto range =3D v->equal_range(function); > > + // version info padding if the symbol is not found > > + if (range.first =3D=3D range.second) > > + { > > + std::string function_with_ver =3D function + "@"; > > + for (auto it =3D v->begin(); it !=3D v->end(); ++it) > > + if (it->first.find(function_with_ver) =3D=3D 0) > > + function_with_ver =3D it->first; > > + range =3D v->equal_range(function_with_ver); > > + } > > This fixes the bug for function names without wildcards. However > the bug can still be reproduced using function names with wildcards. > For example the following command incorrectly returns no results: > > $ stap -L 'process("/lib64/libc.so.6").function("fo*en")' > > We'll need additional '@' handling in the section of > dwflpp::iterate_over_functions that matches wildcards. > > > if (range.first !=3D range.second) > > { > > for (auto it =3D range.first; it !=3D range.second; ++it) > > @@ -1138,6 +1147,15 @@ dwflpp::iterate_single_function(int > > (*callback)(Dwarf_Die*, void*), > > } > > > > auto range =3D v->equal_range(function); > > + // version info padding if the symbol is not found > > + if (range.first =3D=3D range.second) > > + { > > + std::string function_with_ver =3D function + "@"; > > + for (auto it =3D v->begin(); it !=3D v->end(); ++it) > > + if (it->first.find(function_with_ver) =3D=3D 0) > > + function_with_ver =3D it->first; > > + range =3D v->equal_range(function_with_ver); > > + } > > if (range.first !=3D range.second) > > { > > for (auto it =3D range.first; it !=3D range.second; ++it) > > -- > > 2.41.0 > > Aaron > > --000000000000711c08060ce8223e-- --000000000000711c09060ce82240 Content-Type: text/x-patch; charset="US-ASCII"; name="0001-PR29997-Fix-the-symbol-aliases-search-failure-when-s.patch" Content-Disposition: attachment; filename="0001-PR29997-Fix-the-symbol-aliases-search-failure-when-s.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lqd6lp250 RnJvbSAwYzk1Y2UxOTI3MmQ2ZTEzYWJmNmY0MWM0YWUyOWI2YWE5MjVjYTIw IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBEaSBDaGVuIDxkaWNo ZW5AcmVkaGF0LmNvbT4KRGF0ZTogU3VuLCA1IE5vdiAyMDIzIDExOjIzOjUw ICswODAwClN1YmplY3Q6IFtQQVRDSF0gUFIyOTk5NzogRml4IHRoZSBzeW1i b2wgYWxpYXNlcyBzZWFyY2ggZmFpbHVyZSB3aGVuIHN5bWJvbAogdmVyc2lv biBpcyBtaXNzaW5nCgpBZnRlciBjYWxsaW5nIG1vZHVsZV9pbmZvOjp1cGRh dGVfc3ltdGFiLCBmdW5jdGlvbiBhbGlhc2VzIHdpbGwgYmUKcG9wdWxhdGVk LiBUaGVuIHRoZSB1cGRhdGVkIHN5bXRhYiB3aWxsIGJlIHVzZWQgZm9yIHN5 bWJvbCBzZWFyY2hpbmcuCgpGb3IgdGhlIF9JT19uZXdfZm9wZW4gZmFtaWx0 eSB3aXRoIHRoZSBhbGlhc2VzOgoKICAkIGV1LXJlYWRlbGYgLXMgL2xpYjY0 L2xpYmMuc28uNiAgfCBncmVwIDAwMDAwMDAwMDAwNzc0NDAKICAgIDI0Nzog MDAwMDAwMDAwMDA3NzQ0MCAgICAgMTQgRlVOQyAgICBXRUFLICAgREVGQVVM VCAgICAgICAxNiBmb3BlbjY0QEBHTElCQ18yLjIuNQogICAxMDE0OiAwMDAw MDAwMDAwMDc3NDQwICAgICAxNCBGVU5DICAgIEdMT0JBTCBERUZBVUxUICAg ICAgIDE2IGZvcGVuQEBHTElCQ18yLjIuNQogICAxMDI4OiAwMDAwMDAwMDAw MDc3NDQwICAgICAxNCBGVU5DICAgIEdMT0JBTCBERUZBVUxUICAgICAgIDE2 IF9JT19mb3BlbkBAR0xJQkNfMi4yLjUKICAgMTU1NjogMDAwMDAwMDAwMDA3 NzQ0MCAgICAgMTQgRlVOQyAgICBMT0NBTCAgREVGQVVMVCAgICAgICAxNiBf SU9fZm9wZW42NAogICAzNDcxOiAwMDAwMDAwMDAwMDc3NDQwICAgICAxNCBG VU5DICAgIExPQ0FMICBERUZBVUxUICAgICAgIDE2IF9fbmV3X2ZvcGVuCiAg IDQ3NjU6IDAwMDAwMDAwMDAwNzc0NDAgICAgIDE0IEZVTkMgICAgTE9DQUwg IERFRkFVTFQgICAgICAgMTYgX0lPX25ld19mb3BlbgogICA1MTEwOiAwMDAw MDAwMDAwMDc3NDQwICAgICAxNCBGVU5DICAgIFdFQUsgICBERUZBVUxUICAg ICAgIDE2IGZvcGVuNjQKICAgNzE5ODogMDAwMDAwMDAwMDA3NzQ0MCAgICAg MTQgRlVOQyAgICBHTE9CQUwgREVGQVVMVCAgICAgICAxNiBmb3BlbkBAR0xJ QkNfMi4yLjUKICAgNzQzMzogMDAwMDAwMDAwMDA3NzQ0MCAgICAgMTQgRlVO QyAgICBHTE9CQUwgREVGQVVMVCAgICAgICAxNiBfSU9fZm9wZW5AQEdMSUJD XzIuMi41CgogIGEpIGZvcGVuQEBHTElCQ18yLjIuNSBleGlzdHMgaW4gdGhl IHVwZGF0ZWQgc3ltdGFiCiAgYikgZm9wZW4gZG9lcyBub3QgZXhpc3QgaW4g dGhlIHVwZGF0ZWQgc3ltdGFiCgpUaGlzIFBSIGlzIHRvIGFkZCBhIHZlcnNp b24gaW5mbyBwYWRkaW5nIHdoZW4gc3ltYm9sIGNhbm5vdCBiZSBmb3VuZCBp bgp0aGUgdXBkYXRlZCBzeW10YWIuCgpTaWduZWQtb2ZmLWJ5OiBEaSBDaGVu IDxkaWNoZW5AcmVkaGF0LmNvbT4KLS0tCiBkd2ZscHAuY3h4IHwgNDQgKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0KIDEg ZmlsZSBjaGFuZ2VkLCA0MyBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0p CgpkaWZmIC0tZ2l0IGEvZHdmbHBwLmN4eCBiL2R3ZmxwcC5jeHgKaW5kZXgg OWZjY2NhMGE5Li4wNDRiMGNhOTcgMTAwNjQ0Ci0tLSBhL2R3ZmxwcC5jeHgK KysrIGIvZHdmbHBwLmN4eApAQCAtMTA1NSw2ICsxMDU1LDE1IEBAIGR3Zmxw cDo6aXRlcmF0ZV9vdmVyX2Z1bmN0aW9uczx2b2lkPihpbnQgKCpjYWxsYmFj aykoRHdhcmZfRGllKiwgdm9pZCopLAogICAgIH0KIAogICBhdXRvIHJhbmdl ID0gdi0+ZXF1YWxfcmFuZ2UoZnVuY3Rpb24pOworICAvLyB2ZXJzaW9uIHBh ZGRpbmcgaWYgdGhlIHN5bWJvbCBpcyBub3QgZm91bmQKKyAgaWYgKHJhbmdl LmZpcnN0ID09IHJhbmdlLnNlY29uZCkKKyAgICB7CisgICAgc3RkOjpzdHJp bmcgZnVuY3Rpb25fd2l0aF92ZXIgPSBmdW5jdGlvbiArICJAIjsKKyAgICBm b3IgKGF1dG8gaXQgPSB2LT5iZWdpbigpOyBpdCAhPSB2LT5lbmQoKTsgKytp dCkKKyAgICAgIGlmIChpdC0+Zmlyc3QuZmluZChmdW5jdGlvbl93aXRoX3Zl cikgPT0gMCkKKyAgICAgICAgZnVuY3Rpb25fd2l0aF92ZXIgPSBpdC0+Zmly c3Q7CisgICAgcmFuZ2UgPSB2LT5lcXVhbF9yYW5nZShmdW5jdGlvbl93aXRo X3Zlcik7CisgICAgfQogICBpZiAocmFuZ2UuZmlyc3QgIT0gcmFuZ2Uuc2Vj b25kKQogICAgIHsKICAgICAgIGZvciAoYXV0byBpdCA9IHJhbmdlLmZpcnN0 OyBpdCAhPSByYW5nZS5zZWNvbmQ7ICsraXQpCkBAIC0xMDk4LDcgKzExMDcs MTAgQEAgZHdmbHBwOjppdGVyYXRlX292ZXJfZnVuY3Rpb25zPHZvaWQ+KGlu dCAoKmNhbGxiYWNrKShEd2FyZl9EaWUqLCB2b2lkKiksCiAgICAgICAgICAg aWYgKHBlbmRpbmdfaW50ZXJydXB0cykgcmV0dXJuIERXQVJGX0NCX0FCT1JU OwogICAgICAgICAgIGNvbnN0IHN0cmluZyYgZnVuY19uYW1lID0gaXQtPmZp cnN0OwogICAgICAgICAgIER3YXJmX0RpZSYgZGllID0gaXQtPnNlY29uZDsK LSAgICAgICAgICBpZiAoZnVuY3Rpb25fbmFtZV9tYXRjaGVzX3BhdHRlcm4g KGZ1bmNfbmFtZSwgZnVuY3Rpb24pKQorCisgICAgICAgICAgLy8gdmVyc2lv biBwYWRkaW5nIGlmIHRoZSBwYXR0ZXJuIGlzIG5vdCBtYXRjaGVkCisgICAg ICAgICAgaWYgKChmdW5jdGlvbl9uYW1lX21hdGNoZXNfcGF0dGVybiAoZnVu Y19uYW1lLCBmdW5jdGlvbikpIHx8CisgICAgICAgICAgICAgIChmdW5jdGlv bl9uYW1lX21hdGNoZXNfcGF0dGVybiAoZnVuY19uYW1lLCBmdW5jdGlvbiAr ICJAKiIpKSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgaWYgKHNl c3MudmVyYm9zZSA+IDQpCiAgICAgICAgICAgICAgICAgY2xvZyA8PCBfRigi ZnVuY3Rpb24gY2FjaGUgJXM6JXMgbWF0Y2ggJXMgdnMgJXMiLCBtb2R1bGVf bmFtZS5jX3N0cigpLApAQCAtMTE0MSw2ICsxMTUzLDE1IEBAIGR3ZmxwcDo6 aXRlcmF0ZV9zaW5nbGVfZnVuY3Rpb248dm9pZD4oaW50ICgqY2FsbGJhY2sp KER3YXJmX0RpZSosIHZvaWQqKSwKICAgICB9CiAKICAgYXV0byByYW5nZSA9 IHYtPmVxdWFsX3JhbmdlKGZ1bmN0aW9uKTsKKyAgLy8gdmVyc2lvbiBwYWRk aW5nIGlmIHRoZSBzeW1ib2wgaXMgbm90IGZvdW5kCisgIGlmIChyYW5nZS5m aXJzdCA9PSByYW5nZS5zZWNvbmQpCisgICAgeworICAgIHN0ZDo6c3RyaW5n IGZ1bmN0aW9uX3dpdGhfdmVyID0gZnVuY3Rpb24gKyAiQCI7CisgICAgZm9y IChhdXRvIGl0ID0gdi0+YmVnaW4oKTsgaXQgIT0gdi0+ZW5kKCk7ICsraXQp CisgICAgICBpZiAoaXQtPmZpcnN0LmZpbmQoZnVuY3Rpb25fd2l0aF92ZXIp ID09IDApCisgICAgICAgIGZ1bmN0aW9uX3dpdGhfdmVyID0gaXQtPmZpcnN0 OworICAgIHJhbmdlID0gdi0+ZXF1YWxfcmFuZ2UoZnVuY3Rpb25fd2l0aF92 ZXIpOworICAgIH0KICAgaWYgKHJhbmdlLmZpcnN0ICE9IHJhbmdlLnNlY29u ZCkKICAgICB7CiAgICAgICBmb3IgKGF1dG8gaXQgPSByYW5nZS5maXJzdDsg aXQgIT0gcmFuZ2Uuc2Vjb25kOyArK2l0KQpAQCAtMTE1OCw2ICsxMTc5LDI3 IEBAIGR3ZmxwcDo6aXRlcmF0ZV9zaW5nbGVfZnVuY3Rpb248dm9pZD4oaW50 ICgqY2FsbGJhY2spKER3YXJmX0RpZSosIHZvaWQqKSwKICAgICAgICAgICBp ZiAocmMgIT0gRFdBUkZfQ0JfT0spIGJyZWFrOwogICAgICAgICB9CiAgICAg fQorICBlbHNlIGlmIChuYW1lX2hhc193aWxkY2FyZCAoZnVuY3Rpb24pKQor ICAgIHsKKyAgICAgIGZvciAoYXV0byBpdCA9IHYtPmJlZ2luKCk7IGl0ICE9 IHYtPmVuZCgpOyArK2l0KQorICAgICAgICB7CisgICAgICAgICAgaWYgKHBl bmRpbmdfaW50ZXJydXB0cykgcmV0dXJuIERXQVJGX0NCX0FCT1JUOworICAg ICAgICAgIGNvbnN0IHN0cmluZyYgZnVuY19uYW1lID0gaXQtPmZpcnN0Owor ICAgICAgICAgIER3YXJmX0RpZSYgZGllID0gaXQtPnNlY29uZDsKKworICAg ICAgICAgIC8vIHZlcnNpb24gcGFkZGluZyBpZiB0aGUgcGF0dGVybiBpcyBu b3QgbWF0Y2hlZAorICAgICAgICAgIGlmICgoZnVuY3Rpb25fbmFtZV9tYXRj aGVzX3BhdHRlcm4gKGZ1bmNfbmFtZSwgZnVuY3Rpb24pKSB8fAorICAgICAg ICAgICAgICAoZnVuY3Rpb25fbmFtZV9tYXRjaGVzX3BhdHRlcm4gKGZ1bmNf bmFtZSwgZnVuY3Rpb24gKyAiQCoiKSkpCisgICAgICAgICAgICB7CisgICAg ICAgICAgICAgIGlmIChzZXNzLnZlcmJvc2UgPiA0KQorICAgICAgICAgICAg ICAgIGNsb2cgPDwgX0YoImZ1bmN0aW9uIGNhY2hlICVzOiVzIG1hdGNoICVz IHZzICVzIiwgbW9kdWxlX25hbWUuY19zdHIoKSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgIGN1X25hbWUoKS5jX3N0cigpLCBmdW5jX25hbWUuY19z dHIoKSwgZnVuY3Rpb24uY19zdHIoKSkgPDwgZW5kbDsKKworICAgICAgICAg ICAgICByYyA9ICgqY2FsbGJhY2spKCYgZGllLCBkYXRhKTsKKyAgICAgICAg ICAgICAgaWYgKHJjICE9IERXQVJGX0NCX09LKSBicmVhazsKKyAgICAgICAg ICAgIH0KKyAgICAgICAgfQorICAgIH0KIAogICAvLyB1bmRvIHRoZSBmb2N1 c19vbl9jdQogICB0aGlzLT5jdSA9IE5VTEw7Ci0tIAoyLjQxLjAKCg== --000000000000711c09060ce82240--