From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 127074 invoked by alias); 14 Jul 2015 09:05:00 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Received: (qmail 127061 invoked by uid 89); 14 Jul 2015 09:04:59 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-0.0 required=5.0 tests=AWL,BAYES_50,FREEMAIL_FROM,KAM_STOCKGEN,RCVD_IN_DNSWL_LOW,SPF_PASS autolearn=no version=3.3.2 X-HELO: mail-wi0-f171.google.com Received: from mail-wi0-f171.google.com (HELO mail-wi0-f171.google.com) (209.85.212.171) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-GCM-SHA256 encrypted) ESMTPS; Tue, 14 Jul 2015 09:04:55 +0000 Received: by wiga1 with SMTP id a1so92969568wig.0 for ; Tue, 14 Jul 2015 02:04:52 -0700 (PDT) MIME-Version: 1.0 X-Received: by 10.181.27.131 with SMTP id jg3mr29875382wid.89.1436864692117; Tue, 14 Jul 2015 02:04:52 -0700 (PDT) Received: by 10.27.81.138 with HTTP; Tue, 14 Jul 2015 02:04:51 -0700 (PDT) Date: Tue, 14 Jul 2015 09:05:00 -0000 Message-ID: Subject: [PATCH] D: Support looking up symbols in the current and imported modules From: Iain Buclaw To: gdb-patches@sourceware.org Content-Type: multipart/mixed; boundary=001a1134804e909ae9051ad221d1 X-IsSubscribed: yes X-SW-Source: 2015-07/txt/msg00390.txt.bz2 --001a1134804e909ae9051ad221d1 Content-Type: text/plain; charset=UTF-8 Content-length: 1318 Hi, D has the notion of importing modules, whether it is public, private, or static; basic, selective, or renamed. This adds support for looking up symbols in both the current and imported modules so that it is not a necessity to use the qualified name every time. Example: module A; import B; // Basic import import R = C; // Renamed import import D : funD; // Selective import import E : funR = funE; // Renamed selective import void funA() { // <- Breakpoint here } >From the given breakpoint, the following should work in: - All symbols in module 'A' (our current module) can be looked up by name. - All symbols in module 'B' can be looked up by name. - All symbols in module 'C' can be looked up through it's alias R.name. - Only 'funD' in module 'D' can be looked up by name. - Only 'funE' in module 'E' can be looked up through it's alias 'funR'. - All fully qualified symbol names can be looked up. The implementation of this itself is mostly borrowed from cp-namespace.c, but differs in the follow ways: - The separator for modules is a single dot '.' - Renamed selective imports need special handling for D. This has a dependency on dwarf2read.c being able to handle language_d when reading/parsing module/imported declaration symbols, which has been raised as a separate patch. Regards Iain --001a1134804e909ae9051ad221d1 Content-Type: text/x-diff; charset=US-ASCII; name="dlang-namespace.patch" Content-Disposition: attachment; filename="dlang-namespace.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_ic343eeo0 Content-length: 27011 LS0tCjIwMTUtMDctMTQgIElhaW4gQnVjbGF3ICA8aWJ1Y2xhd0BnZGNwcm9q ZWN0Lm9yZz4KCgkqIE1ha2VmaWxlLmluIChTRklMRVMpOiBBZGQgZC1uYW1l c3BhY2UuYy4KCShDT01NT05fT0JTKTogQWRkIGQtbmFtZXNwYWNlLm8uCgkq IGQtbGFuZy5jIChkX2xhbmd1YWdlX2RlZm4pOiBVc2UgZF9sb29rdXBfc3lt Ym9sX25vbmxvY2FsIGFzIHRoZQoJbGFfbG9va3VwX3N5bWJvbF9ub25sb2Nh bCBjYWxsYmFjayBmdW5jdGlvbiBwb2ludGVyLgoJKiBkLWxhbmcuaCAoZF9s b29rdXBfc3ltYm9sX25vbmxvY2FsKTogTmV3IGRlY2xhcmF0aW9uLgoJKGRf bG9va3VwX25lc3RlZF9zeW1ib2wpOiBOZXcgZGVjbGFyYXRpb24uCgkqIGQt bmFtZXNwYWNlLmM6IE5ldyBmaWxlLgoKLS0tIGEvZ2RiL01ha2VmaWxlLmlu CisrKyBiL2dkYi9NYWtlZmlsZS5pbgpAQCAtODM1LDcgKzgzNSw3IEBAIFNG SUxFUyA9IGFkYS1leHAueSBhZGEtbGFuZy5jIGFkYS10eXBlcHJpbnQuYyBh ZGEtdmFscHJpbnQuYyBhZGEtdGFza3MuYyBcCiAJY2hhcnNldC5jIGNvbW1v bi9jbGVhbnVwcy5jIGNsaS1vdXQuYyBjb2ZmcmVhZC5jIGNvZmYtcGUtcmVh ZC5jIFwKIAljb21wbGFpbnRzLmMgY29tcGxldGVyLmMgY29udGludWF0aW9u cy5jIGNvcmVmaWxlLmMgY29yZWxvdy5jIFwKIAljcC1hYmkuYyBjcC1zdXBw b3J0LmMgY3AtbmFtZXNwYWNlLmMgY3AtdmFscHJpbnQuYyBcCi0JZC1leHAu eSBkLWxhbmcuYyBkLXZhbHByaW50LmMgXAorCWQtZXhwLnkgZC1sYW5nLmMg ZC1uYW1lc3BhY2UuYyBkLXZhbHByaW50LmMgXAogCWNwLW5hbWUtcGFyc2Vy LnkgXAogCWRieHJlYWQuYyBkZW1hbmdsZS5jIGRpY3Rpb25hcnkuYyBkaXNh c20uYyBkb3VibGVzdC5jIFwKIAlkdHJhY2UtcHJvYmUuYyBkdW1teS1mcmFt ZS5jIFwKQEAgLTEwNzAsNyArMTA3MCw3IEBAIENPTU1PTl9PQlMgPSAkKERF UEZJTEVTKSAkKENPTkZJR19PQlMpICQoWVlPQkopIFwKIAlmcmFtZS1iYXNl Lm8gXAogCWlubGluZS1mcmFtZS5vIFwKIAlnbnUtdjItYWJpLm8gZ251LXYz LWFiaS5vIGNwLWFiaS5vIGNwLXN1cHBvcnQubyBcCi0JY3AtbmFtZXNwYWNl Lm8gXAorCWNwLW5hbWVzcGFjZS5vIGQtbmFtZXNwYWNlLm8gXAogCXJlZ2dy b3Vwcy5vIFwKIAl0cmFkLWZyYW1lLm8gXAogCXRyYW1wLWZyYW1lLm8gXAot LS0gYS9nZGIvZC1sYW5nLmMKKysrIGIvZ2RiL2QtbGFuZy5jCkBAIC0yMTQs NyArMjE0LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBsYW5ndWFnZV9kZWZu IGRfbGFuZ3VhZ2VfZGVmbiA9CiAgIGRlZmF1bHRfcmVhZF92YXJfdmFsdWUs CS8qIGxhX3JlYWRfdmFyX3ZhbHVlICovCiAgIE5VTEwsCQkJCS8qIExhbmd1 YWdlIHNwZWNpZmljIHNraXBfdHJhbXBvbGluZS4gICovCiAgICJ0aGlzIiwK LSAgYmFzaWNfbG9va3VwX3N5bWJvbF9ub25sb2NhbCwgCisgIGRfbG9va3Vw X3N5bWJvbF9ub25sb2NhbCwKICAgYmFzaWNfbG9va3VwX3RyYW5zcGFyZW50 X3R5cGUsCiAgIGRfZGVtYW5nbGUsCQkJLyogTGFuZ3VhZ2Ugc3BlY2lmaWMg c3ltYm9sIGRlbWFuZ2xlci4gICovCiAgIE5VTEwsCQkJCS8qIExhbmd1YWdl IHNwZWNpZmljCi0tLSBhL2dkYi9kLWxhbmcuaAorKysgYi9nZGIvZC1sYW5n LmgKQEAgLTY4LDYgKzY4LDE2IEBAIGV4dGVybiBjaGFyICpkX2RlbWFuZ2xl IChjb25zdCBjaGFyICptYW5nbGVkLCBpbnQgb3B0aW9ucyk7CiAKIGV4dGVy biBjb25zdCBzdHJ1Y3QgYnVpbHRpbl9kX3R5cGUgKmJ1aWx0aW5fZF90eXBl IChzdHJ1Y3QgZ2RiYXJjaCAqKTsKIAorLyogRGVmaW5lZCBpbiBkLW5hbWVz cGFjZS5jICAqLworCitleHRlcm4gc3RydWN0IHN5bWJvbCAqZF9sb29rdXBf c3ltYm9sX25vbmxvY2FsIChjb25zdCBzdHJ1Y3QgbGFuZ3VhZ2VfZGVmbiAq LAorCQkJCQkJY29uc3QgY2hhciAqLAorCQkJCQkJY29uc3Qgc3RydWN0IGJs b2NrICosCisJCQkJCQljb25zdCBkb21haW5fZW51bSk7CisKK2V4dGVybiBz dHJ1Y3Qgc3ltYm9sICpkX2xvb2t1cF9uZXN0ZWRfc3ltYm9sIChzdHJ1Y3Qg dHlwZSAqLCBjb25zdCBjaGFyICosCisJCQkJCSAgICAgIGNvbnN0IHN0cnVj dCBibG9jayAqKTsKKwogLyogRGVmaW5lZCBpbiBkLXZhbHByaW50LmMgICov CiAKIGV4dGVybiB2b2lkIGRfdmFsX3ByaW50IChzdHJ1Y3QgdHlwZSAqdHlw ZSwgY29uc3QgZ2RiX2J5dGUgKnZhbGFkZHIsCi0tLSAvZGV2L251bGwKKysr IGIvZ2RiL2QtbmFtZXNwYWNlLmMKQEAgLTAsMCArMSw1NzQgQEAKKy8qIEhl bHBlciByb3V0aW5lcyBmb3IgRCBzdXBwb3J0IGluIEdEQi4KKworICAgQ29w eXJpZ2h0IChDKSAyMDE0LTIwMTUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u LCBJbmMuCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdEQi4KKworICAg VGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0 cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJt cyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlz aGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo ZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIg b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFt IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1 c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklM SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl IHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg ZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w eSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25n IHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cu Z251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2luY2x1ZGUgImRlZnMuaCIK KyNpbmNsdWRlICJzeW10YWIuaCIKKyNpbmNsdWRlICJibG9jay5oIgorI2lu Y2x1ZGUgImxhbmd1YWdlLmgiCisjaW5jbHVkZSAiZC1sYW5nLmgiCisjaW5j bHVkZSAiY3Atc3VwcG9ydC5oIgorI2luY2x1ZGUgImdkYl9vYnN0YWNrLmgi CisKK3N0YXRpYyBzdHJ1Y3Qgc3ltYm9sICpsb29rdXBfbW9kdWxlX3Njb3Bl IChjb25zdCBjaGFyICosCisJCQkJCSAgIGNvbnN0IHN0cnVjdCBibG9jayAq LAorCQkJCQkgICBjb25zdCBkb21haW5fZW51bSwKKwkJCQkJICAgY29uc3Qg Y2hhciAqLCBpbnQpOworCitzdGF0aWMgc3RydWN0IHN5bWJvbCAqbG9va3Vw X3N5bWJvbF9maWxlIChjb25zdCBjaGFyICosCisJCQkJCSAgY29uc3Qgc3Ry dWN0IGJsb2NrICosCisJCQkJCSAgY29uc3QgZG9tYWluX2VudW0sIGludCk7 CisKKworLyogVGhpcyByZXR1cm5zIHRoZSBsZW5ndGggb2YgZmlyc3QgY29t cG9uZW50IG9mIE5BTUUsIHdoaWNoIHNob3VsZCBiZQorICAgdGhlIGRlbWFu Z2xlZCBuYW1lIG9mIGEgRCB2YXJpYWJsZS9mdW5jdGlvbi9tZXRob2QvZXRj LgorICAgU3BlY2lmaWNhbGx5LCBpdCByZXR1cm5zIHRoZSBpbmRleCBvZiB0 aGUgZmlyc3QgZG90IGZvcm1pbmcgdGhlCisgICBib3VuZGFyeSBvZiB0aGUg Zmlyc3QgY29tcG9uZW50OiBzbywgZ2l2ZW4gJ0EuZm9vJyBvciAnQS5CLmZv bycKKyAgIGl0IHJldHVybnMgdGhlIDEsIGFuZCBnaXZlbiAnZm9vJywgaXQg cmV0dXJucyAwLiAgKi8KKworLyogVGhlIGNoYXJhY3RlciBpbiBOQU1FIGlu ZGV4ZWQgYnkgdGhlIHJldHVybiB2YWx1ZSBpcyBndWFyYW50ZWVkIHRvCisg ICBhbHdheXMgYmUgZWl0aGVyICcuJyBvciAnXDAnLiAgKi8KKworc3RhdGlj IHVuc2lnbmVkIGludAorZF9maW5kX2ZpcnN0X2NvbXBvbmVudCAoY29uc3Qg Y2hhciAqbmFtZSkKK3sKKyAgdW5zaWduZWQgaW50IGluZGV4ID0gMDsKKwor ICBmb3IgKDs7ICsraW5kZXgpCisgICAgeworICAgICAgaWYgKG5hbWVbaW5k ZXhdID09ICcuJyB8fCBuYW1lW2luZGV4XSA9PSAnXDAnKQorCXJldHVybiBp bmRleDsKKyAgICB9Cit9CisKKy8qIExvb2sgdXAgTkFNRSBpbiB0aGUgRCBt b2R1bGUgTU9EVUxFLiAgT3RoZXIgYXJndW1lbnRzIGFyZSBhcyBpbgorICAg ZF9sb29rdXBfc3ltYm9sX25vbmxvY2FsLiAgSWYgU0VBUkNIIGlzIG5vbi16 ZXJvLCBzZWFyY2ggdGhyb3VnaAorICAgYmFzZSBjbGFzc2VzIGZvciBhIG1h dGNoaW5nIHN5bWJvbC4gICovCisKK3N0YXRpYyBzdHJ1Y3Qgc3ltYm9sICoK K2RfbG9va3VwX3N5bWJvbF9pbl9tb2R1bGUgKGNvbnN0IGNoYXIgKm1vZHVs ZSwgY29uc3QgY2hhciAqbmFtZSwKKwkJCSAgIGNvbnN0IHN0cnVjdCBibG9j ayAqYmxvY2ssCisJCQkgICBjb25zdCBkb21haW5fZW51bSBkb21haW4sIGlu dCBzZWFyY2gpCit7CisgIGlmIChtb2R1bGVbMF0gPT0gJ1wwJykKKyAgICB7 CisgICAgICByZXR1cm4gbG9va3VwX3N5bWJvbF9maWxlIChuYW1lLCBibG9j aywgZG9tYWluLCBzZWFyY2gpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAg ICAgIGNoYXIgKmNvbmNhdGVuYXRlZF9uYW1lID0gYWxsb2NhIChzdHJsZW4g KG1vZHVsZSkKKwkJCQkJKyBzdHJsZW4gKG5hbWUpICsgMik7CisKKyAgICAg IHN0cmNweSAoY29uY2F0ZW5hdGVkX25hbWUsIG1vZHVsZSk7CisgICAgICBz dHJjYXQgKGNvbmNhdGVuYXRlZF9uYW1lLCAiLiIpOworICAgICAgc3RyY2F0 IChjb25jYXRlbmF0ZWRfbmFtZSwgbmFtZSk7CisgICAgICByZXR1cm4gbG9v a3VwX3N5bWJvbF9maWxlIChjb25jYXRlbmF0ZWRfbmFtZSwgYmxvY2ssCisJ CQkJIGRvbWFpbiwgc2VhcmNoKTsKKyAgICB9Cit9CisKKy8qIExvb2t1cCBO QU1FIGF0IG1vZHVsZSBzY29wZS4gIFNDT1BFIGlzIHRoZSBtb2R1bGUgdGhh dCB0aGUgY3VycmVudAorICAgZnVuY3Rpb24gaXMgZGVmaW5lZCB3aXRoaW47 IG9ubHkgY29uc2lkZXIgbW9kdWxlcyB3aG9zZSBsZW5ndGggaXMgYXQKKyAg IGxlYXN0IFNDT1BFX0xFTi4gIE90aGVyIGFyZ3VtZW50cyBhcmUgYXMgaW4g ZF9sb29rdXBfc3ltYm9sX25vbmxvY2FsLgorCisgICBGb3IgZXhhbXBsZSwg aWYgd2UncmUgd2l0aGluIGEgZnVuY3Rpb24gQS5CLmYgYW5kIGxvb2tpbmcg Zm9yIGEKKyAgIHN5bWJvbCB4LCB0aGlzIHdpbGwgZ2V0IGNhbGxlZCB3aXRo IE5BTUUgPSAieCIsIFNDT1BFID0gIkEuQiIsIGFuZAorICAgU0NPUEVfTEVO ID0gMC4gIEl0IHRoZW4gY2FsbHMgaXRzZWxmIHdpdGggTkFNRSBhbmQgU0NP UEUgdGhlIHNhbWUsCisgICBidXQgd2l0aCBTQ09QRV9MRU4gPSAxLiAgQW5k IHRoZW4gaXQgY2FsbHMgaXRzZWxmIHdpdGggTkFNRSBhbmQKKyAgIFNDT1BF IHRoZSBzYW1lLCBidXQgd2l0aCBTQ09QRV9MRU4gPSA0LiAgVGhpcyB0aGly ZCBjYWxsIGxvb2tzIGZvcgorICAgIkEuQi54IjsgaWYgaXQgZG9lc24ndCBm aW5kIGl0LCB0aGVuIHRoZSBzZWNvbmQgY2FsbCBsb29rcyBmb3IgIkEueCIs CisgICBhbmQgaWYgdGhhdCBjYWxsIGZhaWxzLCB0aGVuIHRoZSBmaXJzdCBj YWxsIGxvb2tzIGZvciAieCIuICAqLworCitzdGF0aWMgc3RydWN0IHN5bWJv bCAqCitsb29rdXBfbW9kdWxlX3Njb3BlIChjb25zdCBjaGFyICpuYW1lLCBj b25zdCBzdHJ1Y3QgYmxvY2sgKmJsb2NrLAorCQkgICAgIGNvbnN0IGRvbWFp bl9lbnVtIGRvbWFpbiwgY29uc3QgY2hhciAqc2NvcGUsCisJCSAgICAgaW50 IHNjb3BlX2xlbikKK3sKKyAgY2hhciAqbW9kdWxlOworCisgIGlmIChzY29w ZVtzY29wZV9sZW5dICE9ICdcMCcpCisgICAgeworICAgICAgLyogUmVjdXJz aXZlbHkgc2VhcmNoIGZvciBuYW1lcyBpbiBjaGlsZCBtb2R1bGVzIGZpcnN0 LiAgKi8KKworICAgICAgc3RydWN0IHN5bWJvbCAqc3ltOworICAgICAgaW50 IG5ld19zY29wZV9sZW4gPSBzY29wZV9sZW47CisKKyAgICAgIC8qIElmIHRo ZSBjdXJyZW50IHNjb3BlIGlzIGZvbGxvd2VkIGJ5ICIuIiwgc2tpcCBwYXN0 IHRoYXQuICAqLworICAgICAgaWYgKG5ld19zY29wZV9sZW4gIT0gMCkKKwl7 CisJICBnZGJfYXNzZXJ0IChzY29wZVtuZXdfc2NvcGVfbGVuXSA9PSAnLicp OworCSAgbmV3X3Njb3BlX2xlbisrOworCX0KKyAgICAgIG5ld19zY29wZV9s ZW4gKz0gZF9maW5kX2ZpcnN0X2NvbXBvbmVudCAoc2NvcGUgKyBuZXdfc2Nv cGVfbGVuKTsKKyAgICAgIHN5bSA9IGxvb2t1cF9tb2R1bGVfc2NvcGUgKG5h bWUsIGJsb2NrLCBkb21haW4sCisJCQkJIHNjb3BlLCBuZXdfc2NvcGVfbGVu KTsKKyAgICAgIGlmIChzeW0gIT0gTlVMTCkKKwlyZXR1cm4gc3ltOworICAg IH0KKworICAvKiBPa2F5LCB3ZSBkaWRuJ3QgZmluZCBhIG1hdGNoIGluIG91 ciBjaGlsZHJlbiwgc28gbG9vayBmb3IgdGhlCisgICAgIG5hbWUgaW4gdGhl IGN1cnJlbnQgbW9kdWxlLiAgKi8KKworICBtb2R1bGUgPSBhbGxvY2EgKHNj b3BlX2xlbiArIDEpOworICBzdHJuY3B5IChtb2R1bGUsIHNjb3BlLCBzY29w ZV9sZW4pOworICBtb2R1bGVbc2NvcGVfbGVuXSA9ICdcMCc7CisgIHJldHVy biBkX2xvb2t1cF9zeW1ib2xfaW5fbW9kdWxlIChtb2R1bGUsIG5hbWUsCisJ CQkJICAgIGJsb2NrLCBkb21haW4sIDEpOworfQorCisvKiBJZiBOQU1FIGlz IHRoZSBmdWxseS1xdWFsaWZpZWQgbmFtZSBvZiBhIEQgZnVuY3Rpb24vdmFy aWFibGUvbWV0aG9kLAorICAgdGhpcyByZXR1cm5zIHRoZSBsZW5ndGggb2Yg aXRzIGVudGlyZSBwcmVmaXg6IGFsbCBvZiB0aGUgbW9kdWxlcyBhbmQKKyAg IGNsYXNzZXMgdGhhdCBtYWtlIHVwIGl0cyBuYW1lLiAgR2l2ZW4gJ0EuZm9v JywgaXQgcmV0dXJucyAxLCBnaXZlbgorICAgJ0EuQi5mb28nLCBpdCByZXR1 cm5zIDQsIGdpdmVuICdmb28nLCBpdCByZXR1cm5zIDAuICAqLworCitzdGF0 aWMgdW5zaWduZWQgaW50CitkX2VudGlyZV9wcmVmaXhfbGVuIChjb25zdCBj aGFyICpuYW1lKQoreworICB1bnNpZ25lZCBpbnQgY3VycmVudF9sZW4gPSBk X2ZpbmRfZmlyc3RfY29tcG9uZW50IChuYW1lKTsKKyAgdW5zaWduZWQgaW50 IHByZXZpb3VzX2xlbiA9IDA7CisKKyAgd2hpbGUgKG5hbWVbY3VycmVudF9s ZW5dICE9ICdcMCcpCisgICAgeworICAgICAgZ2RiX2Fzc2VydCAobmFtZVtj dXJyZW50X2xlbl0gPT0gJy4nKTsKKyAgICAgIHByZXZpb3VzX2xlbiA9IGN1 cnJlbnRfbGVuOworICAgICAgLyogU2tpcCB0aGUgJy4nICAqLworICAgICAg Y3VycmVudF9sZW4rKzsKKyAgICAgIGN1cnJlbnRfbGVuICs9IGRfZmluZF9m aXJzdF9jb21wb25lbnQgKG5hbWUgKyBjdXJyZW50X2xlbik7CisgICAgfQor CisgIHJldHVybiBwcmV2aW91c19sZW47Cit9CisKKy8qIFNlYXJjaCB0aHJv dWdoIHRoZSBiYXNlIGNsYXNzZXMgb2YgUEFSRU5UX1RZUEUgZm9yIGEgc3lt Ym9sIG5hbWVkCisgICBOQU1FIGluIGJsb2NrIEJMT0NLLiAgKi8KKworc3Rh dGljIHN0cnVjdCBzeW1ib2wgKgorZmluZF9zeW1ib2xfaW5fYmFzZWNsYXNz IChzdHJ1Y3QgdHlwZSAqcGFyZW50X3R5cGUsIGNvbnN0IGNoYXIgKm5hbWUs CisJCQkgIGNvbnN0IHN0cnVjdCBibG9jayAqYmxvY2spCit7CisgIGludCBp OworICBzdHJ1Y3Qgc3ltYm9sICpzeW07CisgIHN0cnVjdCBjbGVhbnVwICpj bGVhbnVwOworICBjaGFyICpjb25jYXRlbmF0ZWRfbmFtZTsKKworICBzeW0g PSBOVUxMOworICBjb25jYXRlbmF0ZWRfbmFtZSA9IE5VTEw7CisgIGNsZWFu dXAgPSBtYWtlX2NsZWFudXAgKGZyZWVfY3VycmVudF9jb250ZW50cywgJmNv bmNhdGVuYXRlZF9uYW1lKTsKKyAgZm9yIChpID0gMDsgaSA8IFRZUEVfTl9C QVNFQ0xBU1NFUyAocGFyZW50X3R5cGUpOyArK2kpCisgICAgeworICAgICAg c2l6ZV90IGxlbjsKKyAgICAgIHN0cnVjdCB0eXBlICpiYXNlX3R5cGUgPSBU WVBFX0JBU0VDTEFTUyAocGFyZW50X3R5cGUsIGkpOworICAgICAgY29uc3Qg Y2hhciAqYmFzZV9uYW1lID0gVFlQRV9CQVNFQ0xBU1NfTkFNRSAocGFyZW50 X3R5cGUsIGkpOworCisgICAgICBpZiAoYmFzZV9uYW1lID09IE5VTEwpCisJ Y29udGludWU7CisKKyAgICAgIC8qIFNlYXJjaCB0aGlzIHBhcnRpY3VsYXIg YmFzZSBjbGFzcy4gICovCisgICAgICBzeW0gPSBkX2xvb2t1cF9zeW1ib2xf aW5fbW9kdWxlIChiYXNlX25hbWUsIG5hbWUsIGJsb2NrLAorCQkJCSAgICAg ICBWQVJfRE9NQUlOLCAwKTsKKyAgICAgIGlmIChzeW0gIT0gTlVMTCkKKwli cmVhazsKKworICAgICAgLyogTm93IHNlYXJjaCBhbGwgc3RhdGljIGZpbGUt bGV2ZWwgc3ltYm9scy4gIFdlIGhhdmUgdG8gZG8gdGhpcyBmb3IKKwkgdGhp bmdzIGxpa2UgdHlwZWRlZnMgaW4gdGhlIGNsYXNzLiAgRmlyc3Qgc2VhcmNo IGluIHRoaXMgc3ltdGFiLAorCSB3aGF0IHdlIHdhbnQgaXMgcG9zc2libHkg dGhlcmUuICAqLworICAgICAgbGVuID0gc3RybGVuIChiYXNlX25hbWUpICsg c3RybGVuIChuYW1lKSArIDI7CisgICAgICBjb25jYXRlbmF0ZWRfbmFtZSA9 IHhyZWFsbG9jIChjb25jYXRlbmF0ZWRfbmFtZSwgbGVuKTsKKyAgICAgIHhz bnByaW50ZiAoY29uY2F0ZW5hdGVkX25hbWUsIGxlbiwgIiVzLiVzIiwgYmFz ZV9uYW1lLCBuYW1lKTsKKyAgICAgIHN5bSA9IGxvb2t1cF9zeW1ib2xfaW5f c3RhdGljX2Jsb2NrIChjb25jYXRlbmF0ZWRfbmFtZSwgYmxvY2ssCisJCQkJ CSAgIFZBUl9ET01BSU4pOworICAgICAgaWYgKHN5bSAhPSBOVUxMKQorCWJy ZWFrOworCisgICAgICAvKiBOb3BlLiAgV2Ugbm93IGhhdmUgdG8gc2VhcmNo IGFsbCBzdGF0aWMgYmxvY2tzIGluIGFsbCBvYmpmaWxlcywKKwkgZXZlbiBp ZiBibG9jayAhPSBOVUxMLCBiZWNhdXNlIHRoZXJlJ3Mgbm8gZ3VhcmFudGVl cyBhcyB0byB3aGljaAorCSBzeW10YWIgdGhlIHN5bWJvbCB3ZSB3YW50IGlz IGluLiAgKi8KKyAgICAgIHN5bSA9IGxvb2t1cF9zdGF0aWNfc3ltYm9sIChj b25jYXRlbmF0ZWRfbmFtZSwgVkFSX0RPTUFJTik7CisgICAgICBpZiAoc3lt ICE9IE5VTEwpCisJYnJlYWs7CisKKyAgICAgIC8qIElmIHRoaXMgY2xhc3Mg aGFzIGJhc2UgY2xhc3Nlcywgc2VhcmNoIHRoZW0gbmV4dC4gICovCisgICAg ICBiYXNlX3R5cGUgPSBjaGVja190eXBlZGVmIChiYXNlX3R5cGUpOworICAg ICAgaWYgKFRZUEVfTl9CQVNFQ0xBU1NFUyAoYmFzZV90eXBlKSA+IDApCisJ eworCSAgc3ltID0gZmluZF9zeW1ib2xfaW5fYmFzZWNsYXNzIChiYXNlX3R5 cGUsIG5hbWUsIGJsb2NrKTsKKwkgIGlmIChzeW0gIT0gTlVMTCkKKwkgICAg YnJlYWs7CisJfQorICAgIH0KKworICBkb19jbGVhbnVwcyAoY2xlYW51cCk7 CisgIHJldHVybiBzeW07Cit9CisKKy8qIExvb2sgdXAgYSBzeW1ib2wgbmFt ZWQgTkVTVEVEX05BTUUgdGhhdCBpcyBuZXN0ZWQgaW5zaWRlIHRoZSBECisg ICBjbGFzcyBvciBtb2R1bGUgZ2l2ZW4gYnkgUEFSRU5UX1RZUEUsIGZyb20g d2l0aGluIHRoZSBjb250ZXh0CisgICBnaXZlbiBieSBCTE9DSy4gIFJldHVy biBOVUxMIGlmIHRoZXJlIGlzIG5vIHN1Y2ggbmVzdGVkIHR5cGUuICAqLwor CitzdHJ1Y3Qgc3ltYm9sICoKK2RfbG9va3VwX25lc3RlZF9zeW1ib2wgKHN0 cnVjdCB0eXBlICpwYXJlbnRfdHlwZSwKKwkJCWNvbnN0IGNoYXIgKm5lc3Rl ZF9uYW1lLAorCQkJY29uc3Qgc3RydWN0IGJsb2NrICpibG9jaykKK3sKKyAg LyogdHlwZV9uYW1lX25vX3RhZ19yZXF1aXJlZCBwcm92aWRlcyBiZXR0ZXIg ZXJyb3IgcmVwb3J0aW5nIHVzaW5nIHRoZQorICAgICBvcmlnaW5hbCB0eXBl LiAgKi8KKyAgc3RydWN0IHR5cGUgKnNhdmVkX3BhcmVudF90eXBlID0gcGFy ZW50X3R5cGU7CisKKyAgcGFyZW50X3R5cGUgPSBjaGVja190eXBlZGVmIChw YXJlbnRfdHlwZSk7CisKKyAgc3dpdGNoIChUWVBFX0NPREUgKHBhcmVudF90 eXBlKSkKKyAgICB7CisgICAgY2FzZSBUWVBFX0NPREVfU1RSVUNUOgorICAg IGNhc2UgVFlQRV9DT0RFX1VOSU9OOgorICAgIGNhc2UgVFlQRV9DT0RFX01P RFVMRToKKwl7CisJICBpbnQgc2l6ZTsKKwkgIGNvbnN0IGNoYXIgKnBhcmVu dF9uYW1lID0gdHlwZV9uYW1lX25vX3RhZ19vcl9lcnJvciAoc2F2ZWRfcGFy ZW50X3R5cGUpOworCSAgc3RydWN0IHN5bWJvbCAqc3ltCisJICAgID0gZF9s b29rdXBfc3ltYm9sX2luX21vZHVsZSAocGFyZW50X25hbWUsIG5lc3RlZF9u YW1lLAorCQkJCQkgYmxvY2ssIFZBUl9ET01BSU4sIDApOworCSAgY2hhciAq Y29uY2F0ZW5hdGVkX25hbWU7CisKKwkgIGlmIChzeW0gIT0gTlVMTCkKKwkg ICAgcmV0dXJuIHN5bTsKKworCSAgLyogTm93IHNlYXJjaCBhbGwgc3RhdGlj IGZpbGUtbGV2ZWwgc3ltYm9scy4gIFdlIGhhdmUgdG8gZG8gdGhpcworCSAg ICAgZm9yIHRoaW5ncyBsaWtlIHR5cGVkZWZzIGluIHRoZSBjbGFzcy4gIFdl IGRvIG5vdCB0cnkgdG8KKwkgICAgIGd1ZXNzIGFueSBpbXBvcnRlZCBtb2R1 bGUgYXMgZXZlbiB0aGUgZnVsbHkgc3BlY2lmaWVkCisJICAgICBtb2R1bGUg c2VhcmNoIGlzIGFscmVhZHkgbm90IEQgY29tcGxpYW50IGFuZCBtb3JlIGFz c3VtcHRpb25zCisJICAgICBjb3VsZCBtYWtlIGl0IHRvbyBtYWdpYy4gICov CisJICBzaXplID0gc3RybGVuIChwYXJlbnRfbmFtZSkgKyBzdHJsZW4gKG5l c3RlZF9uYW1lKSArIDI7CisJICBjb25jYXRlbmF0ZWRfbmFtZSA9IGFsbG9j YSAoc2l6ZSk7CisKKwkgIHhzbnByaW50ZiAoY29uY2F0ZW5hdGVkX25hbWUs IHNpemUsICIlcy4lcyIsCisJCSAgICAgcGFyZW50X25hbWUsIG5lc3RlZF9u YW1lKTsKKworCSAgc3ltID0gbG9va3VwX3N0YXRpY19zeW1ib2wgKGNvbmNh dGVuYXRlZF9uYW1lLCBWQVJfRE9NQUlOKTsKKwkgIGlmIChzeW0gIT0gTlVM TCkKKwkgICAgcmV0dXJuIHN5bTsKKworCSAgLyogSWYgbm8gbWF0Y2hpbmcg c3ltYm9scyB3ZXJlIGZvdW5kLCB0cnkgc2VhcmNoaW5nIGFueQorCSAgICAg YmFzZSBjbGFzc2VzLiAgKi8KKwkgIHJldHVybiBmaW5kX3N5bWJvbF9pbl9i YXNlY2xhc3MgKHBhcmVudF90eXBlLCBuZXN0ZWRfbmFtZSwgYmxvY2spOwor CX0KKworICAgIGNhc2UgVFlQRV9DT0RFX0ZVTkM6CisgICAgY2FzZSBUWVBF X0NPREVfTUVUSE9EOgorICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBkZWZh dWx0OgorICAgICAgaW50ZXJuYWxfZXJyb3IgKF9fRklMRV9fLCBfX0xJTkVf XywKKwkJICAgICAgXygiZF9sb29rdXBfbmVzdGVkX3N5bWJvbCBjYWxsZWQg IgorCQkJIm9uIGEgbm9uLWFnZ3JlZ2F0ZSB0eXBlLiIpKTsKKyAgICB9Cit9 CisKKy8qIExvb2sgdXAgTkFNRSBpbiBCTE9DSydzIHN0YXRpYyBibG9jayBh bmQgaW4gZ2xvYmFsIGJsb2Nrcy4KKyAgIElmIFNFQVJDSCBpcyBub24temVy bywgc2VhcmNoIHRocm91Z2ggYmFzZSBjbGFzc2VzIGZvciBhIG1hdGNoaW5n CisgICBzeW1ib2wuICBPdGhlciBhcmd1bWVudHMgYXJlIGFzIGluIGRfbG9v a3VwX3N5bWJvbF9ub25sb2NhbC4gICovCisKK3N0YXRpYyBzdHJ1Y3Qgc3lt Ym9sICoKK2xvb2t1cF9zeW1ib2xfZmlsZSAoY29uc3QgY2hhciAqbmFtZSwg Y29uc3Qgc3RydWN0IGJsb2NrICpibG9jaywKKwkJICAgIGNvbnN0IGRvbWFp bl9lbnVtIGRvbWFpbiwgaW50IHNlYXJjaCkKK3sKKyAgc3RydWN0IHN5bWJv bCAqc3ltID0gTlVMTDsKKworICBzeW0gPSBsb29rdXBfc3ltYm9sX2luX3N0 YXRpY19ibG9jayAobmFtZSwgYmxvY2ssIGRvbWFpbik7CisgIGlmIChzeW0g IT0gTlVMTCkKKyAgICByZXR1cm4gc3ltOworCisgIHN5bSA9IGxvb2t1cF9n bG9iYWxfc3ltYm9sIChuYW1lLCBibG9jaywgZG9tYWluKTsKKworICBpZiAo c3ltICE9IE5VTEwpCisgICAgcmV0dXJuIHN5bTsKKworICBpZiAoc2VhcmNo KQorICAgIHsKKyAgICAgIGNoYXIgKmNsYXNzbmFtZSwgKm5lc3RlZDsKKyAg ICAgIHVuc2lnbmVkIGludCBwcmVmaXhfbGVuOworICAgICAgc3RydWN0IGNs ZWFudXAgKmNsZWFudXA7CisgICAgICBzdHJ1Y3Qgc3ltYm9sICpjbGFzc19z eW07CisKKyAgICAgIC8qIEEgc2ltcGxlIGxvb2t1cCBmYWlsZWQuICBDaGVj ayBpZiB0aGUgc3ltYm9sIHdhcyBkZWZpbmVkIGluCisJIGEgYmFzZSBjbGFz cy4gICovCisKKyAgICAgIGNsZWFudXAgPSBtYWtlX2NsZWFudXAgKG51bGxf Y2xlYW51cCwgTlVMTCk7CisKKyAgICAgIC8qIEZpbmQgdGhlIG5hbWUgb2Yg dGhlIGNsYXNzIGFuZCB0aGUgbmFtZSBvZiB0aGUgbWV0aG9kLAorCSB2YXJp YWJsZSwgZXRjLiAgKi8KKyAgICAgIHByZWZpeF9sZW4gPSBkX2VudGlyZV9w cmVmaXhfbGVuIChuYW1lKTsKKworICAgICAgLyogSWYgbm8gcHJlZml4IHdh cyBmb3VuZCwgc2VhcmNoICJ0aGlzIi4gICovCisgICAgICBpZiAocHJlZml4 X2xlbiA9PSAwKQorCXsKKwkgIHN0cnVjdCB0eXBlICp0eXBlOworCSAgc3Ry dWN0IHN5bWJvbCAqdGhpczsKKworCSAgdGhpcyA9IGxvb2t1cF9sYW5ndWFn ZV90aGlzIChsYW5ndWFnZV9kZWYgKGxhbmd1YWdlX2QpLCBibG9jayk7CisJ ICBpZiAodGhpcyA9PSBOVUxMKQorCSAgICB7CisJICAgICAgZG9fY2xlYW51 cHMgKGNsZWFudXApOworCSAgICAgIHJldHVybiBOVUxMOworCSAgICB9CisK KwkgIHR5cGUgPSBjaGVja190eXBlZGVmIChUWVBFX1RBUkdFVF9UWVBFIChT WU1CT0xfVFlQRSAodGhpcykpKTsKKwkgIGNsYXNzbmFtZSA9IHhzdHJkdXAg KFRZUEVfTkFNRSAodHlwZSkpOworCSAgbmVzdGVkID0geHN0cmR1cCAobmFt ZSk7CisJfQorICAgICAgZWxzZQorCXsKKwkgIC8qIFRoZSBjbGFzcyBuYW1l IGlzIGV2ZXJ5dGhpbmcgdXAgdG8gYW5kIGluY2x1ZGluZyBQUkVGSVhfTEVO LiAgKi8KKwkgIGNsYXNzbmFtZSA9IHNhdmVzdHJpbmcgKG5hbWUsIHByZWZp eF9sZW4pOworCisJICAvKiBUaGUgcmVzdCBvZiB0aGUgbmFtZSBpcyBldmVy eXRoaW5nIGVsc2UgcGFzdCB0aGUgaW5pdGlhbCBzY29wZQorCSAgICAgb3Bl cmF0b3IuICAqLworCSAgbmVzdGVkID0geHN0cmR1cCAobmFtZSArIHByZWZp eF9sZW4gKyAxKTsKKwl9CisKKyAgICAgIC8qIEFkZCBjbGVhbnVwcyB0byBm cmVlIG1lbW9yeSBmb3IgdGhlc2Ugc3RyaW5ncy4gICovCisgICAgICBtYWtl X2NsZWFudXAgKHhmcmVlLCBjbGFzc25hbWUpOworICAgICAgbWFrZV9jbGVh bnVwICh4ZnJlZSwgbmVzdGVkKTsKKworICAgICAgLyogTG9va3VwIGEgY2xh c3MgbmFtZWQgQ0xBU1NOQU1FLiAgSWYgbm9uZSBpcyBmb3VuZCwgdGhlcmUg aXMgbm90aGluZworCSBtb3JlIHRoYXQgY2FuIGJlIGRvbmUuICAqLworICAg ICAgY2xhc3Nfc3ltID0gbG9va3VwX2dsb2JhbF9zeW1ib2wgKGNsYXNzbmFt ZSwgYmxvY2ssIGRvbWFpbik7CisgICAgICBpZiAoY2xhc3Nfc3ltID09IE5V TEwpCisJeworCSAgZG9fY2xlYW51cHMgKGNsZWFudXApOworCSAgcmV0dXJu IE5VTEw7CisJfQorCisgICAgICAvKiBMb29rIGZvciBhIHN5bWJvbCBuYW1l ZCBORVNURUQgaW4gdGhpcyBjbGFzcy4gICovCisgICAgICBzeW0gPSBkX2xv b2t1cF9uZXN0ZWRfc3ltYm9sIChTWU1CT0xfVFlQRSAoY2xhc3Nfc3ltKSwg bmVzdGVkLCBibG9jayk7CisgICAgICBkb19jbGVhbnVwcyAoY2xlYW51cCk7 CisgICAgfQorCisgIHJldHVybiBzeW07Cit9CisKKy8qIFVzZWQgZm9yIGNs ZWFudXBzIHRvIHJlc2V0IHRoZSAic2VhcmNoZWQiIGZsYWcgaW5jYXNlCisg ICBvZiBhbiBlcnJvci4gICovCisKK3N0YXRpYyB2b2lkCityZXNldF9kaXJl Y3RpdmVfc2VhcmNoZWQgKHZvaWQgKmRhdGEpCit7CisgIHN0cnVjdCB1c2lu Z19kaXJlY3QgKmRpcmVjdCA9IGRhdGE7CisgIGRpcmVjdC0+c2VhcmNoZWQg PSAwOworfQorCisvKiBTZWFyY2ggZm9yIE5BTUUgYnkgYXBwbHlpbmcgYWxs IGltcG9ydCBzdGF0ZW1lbnRzIGJlbG9uZ2luZyB0bworICAgQkxPQ0sgd2hp Y2ggYXJlIGFwcGxpY2FibGUgaW4gU0NPUEUuCisKKyAgIElmIFNFQVJDSF9Q QVJFTlRTIHRoZSBzZWFyY2ggd2lsbCBpbmNsdWRlIGltcG9ydHMgd2hpY2gg YXJlCisgICBhcHBsaWNhYmxlIGluIHBhcmVudHMgb2YgU0NPUEUuCisgICBF eGFtcGxlOgorCisgICAgIG1vZHVsZSBBOworICAgICBpbXBvcnQgWDsKKyAg ICAgdm9pZCBCKCkgeworICAgICAgIGltcG9ydCBZOworICAgICB9CisKKyAg IElmIFNDT1BFIGlzICJBLkIiIGFuZCBTRUFSQ0hfUEFSRU5UUyBpcyB0cnVl LCB0aGUgaW1wb3J0cyBvZgorICAgbW9kdWxlcyBYIGFuZCBZIHdpbGwgYmUg Y29uc2lkZXJlZC4gIElmIFNFQVJDSF9QQVJFTlRTIGlzIGZhbHNlCisgICBv bmx5IHRoZSBpbXBvcnQgb2YgWSBpcyBjb25zaWRlcmVkLiAgKi8KKworc3Rh dGljIHN0cnVjdCBzeW1ib2wgKgorZF9sb29rdXBfc3ltYm9sX2ltcG9ydHMg KGNvbnN0IGNoYXIgKnNjb3BlLCBjb25zdCBjaGFyICpuYW1lLAorCQkJIGNv bnN0IHN0cnVjdCBibG9jayAqYmxvY2ssCisJCQkgY29uc3QgZG9tYWluX2Vu dW0gZG9tYWluLAorCQkJIGNvbnN0IGludCBzZWFyY2hfcGFyZW50cykKK3sK KyAgc3RydWN0IHVzaW5nX2RpcmVjdCAqY3VycmVudDsKKyAgc3RydWN0IHN5 bWJvbCAqc3ltID0gTlVMTDsKKyAgaW50IGRpcmVjdGl2ZV9tYXRjaDsKKyAg c3RydWN0IGNsZWFudXAgKnNlYXJjaGVkX2NsZWFudXA7CisKKyAgLyogRmly c3QsIHRyeSB0byBmaW5kIHRoZSBzeW1ib2wgaW4gdGhlIGdpdmVuIG1vZHVs ZS4gICovCisgIHN5bSA9IGRfbG9va3VwX3N5bWJvbF9pbl9tb2R1bGUgKHNj b3BlLCBuYW1lLCBibG9jaywgZG9tYWluLCAxKTsKKworICBpZiAoc3ltICE9 IE5VTEwpCisgICAgcmV0dXJuIHN5bTsKKworICAvKiBHbyB0aHJvdWdoIHRo ZSB1c2luZyBkaXJlY3RpdmVzLiAgSWYgYW55IG9mIHRoZW0gYWRkIG5ldyBu YW1lcyB0bworICAgICB0aGUgbW9kdWxlIHdlJ3JlIHNlYXJjaGluZyBpbiwg c2VlIGlmIHdlIGNhbiBmaW5kIGEgbWF0Y2ggYnkKKyAgICAgYXBwbHlpbmcg dGhlbS4gICovCisKKyAgZm9yIChjdXJyZW50ID0gYmxvY2tfdXNpbmcgKGJs b2NrKTsKKyAgICAgICBjdXJyZW50ICE9IE5VTEw7CisgICAgICAgY3VycmVu dCA9IGN1cnJlbnQtPm5leHQpCisgICAgeworICAgICAgY29uc3QgY2hhciAq KmV4Y2x1ZGVwOworICAgICAgaW50IGxlbiA9IHN0cmxlbiAoY3VycmVudC0+ aW1wb3J0X2Rlc3QpOworCisgICAgICBkaXJlY3RpdmVfbWF0Y2ggPSAoc2Vh cmNoX3BhcmVudHMKKwkJCSA/IChzdHJuY21wIChzY29wZSwgY3VycmVudC0+ aW1wb3J0X2Rlc3QsIGxlbikgPT0gMAorCQkJICAgICYmIChsZW4gPT0gMAor CQkJCXx8IHNjb3BlW2xlbl0gPT0gJy4nCisJCQkJfHwgc2NvcGVbbGVuXSA9 PSAnXDAnKSkKKwkJCSA6IHN0cmNtcCAoc2NvcGUsIGN1cnJlbnQtPmltcG9y dF9kZXN0KSA9PSAwKTsKKworICAgICAgLyogSWYgdGhlIGltcG9ydCBkZXN0 aW5hdGlvbiBpcyB0aGUgY3VycmVudCBzY29wZSBvciBvbmUgb2YgaXRzCisJ IGFuY2VzdG9ycyB0aGVuIGl0IGlzIGFwcGxpY2FibGUuICAqLworICAgICAg aWYgKGRpcmVjdGl2ZV9tYXRjaCAmJiAhY3VycmVudC0+c2VhcmNoZWQpCisJ eworCSAgLyogTWFyayB0aGlzIGltcG9ydCBhcyBzZWFyY2hlZCBzbyB0aGF0 IHRoZSByZWN1cnNpdmUgY2FsbAorCSAgICAgZG9lcyBub3Qgc2VhcmNoIGl0 IGFnYWluLiAgKi8KKwkgIGN1cnJlbnQtPnNlYXJjaGVkID0gMTsKKwkgIHNl YXJjaGVkX2NsZWFudXAgPSBtYWtlX2NsZWFudXAgKHJlc2V0X2RpcmVjdGl2 ZV9zZWFyY2hlZCwKKwkJCQkJICAgY3VycmVudCk7CisKKwkgIC8qIElmIHRo ZXJlIGlzIGFuIGltcG9ydCBvZiBhIHNpbmdsZSBkZWNsYXJhdGlvbiwgY29t cGFyZSB0aGUKKwkgICAgIGltcG9ydGVkIGRlY2xhcmF0aW9uIChhZnRlciBv cHRpb25hbCByZW5hbWluZyBieSBpdHMgYWxpYXMpCisJICAgICB3aXRoIHRo ZSBzb3VnaHQgb3V0IG5hbWUuICBJZiB0aGVyZSBpcyBhIG1hdGNoIHBhc3MK KwkgICAgIGN1cnJlbnQtPmltcG9ydF9zcmMgYXMgTU9EVUxFIHRvIGRpcmVj dCB0aGUgc2VhcmNoIHRvd2FyZHMKKwkgICAgIHRoZSBpbXBvcnRlZCBtb2R1 bGUuICAqLworCSAgaWYgKGN1cnJlbnQtPmRlY2xhcmF0aW9uCisJICAgICAg JiYgc3RyY21wIChuYW1lLCBjdXJyZW50LT5hbGlhcworCQkJID8gY3VycmVu dC0+YWxpYXMgOiBjdXJyZW50LT5kZWNsYXJhdGlvbikgPT0gMCkKKwkgICAg c3ltID0gZF9sb29rdXBfc3ltYm9sX2luX21vZHVsZSAoY3VycmVudC0+aW1w b3J0X3NyYywKKwkJCQkJICAgICBjdXJyZW50LT5kZWNsYXJhdGlvbiwKKwkJ CQkJICAgICBibG9jaywgZG9tYWluLCAxKTsKKworCSAgLyogSWYgYSBzeW1i b2wgd2FzIGZvdW5kIG9yIHRoaXMgaW1wb3J0IHN0YXRlbWVudCB3YXMgYW4g aW1wb3J0CisJICAgICBkZWNsYXJhdGlvbiwgdGhlIHNlYXJjaCBvZiB0aGlz IGltcG9ydCBpcyBjb21wbGV0ZS4gICovCisJICBpZiAoc3ltICE9IE5VTEwg fHwgY3VycmVudC0+ZGVjbGFyYXRpb24pCisJICAgIHsKKwkgICAgICBjdXJy ZW50LT5zZWFyY2hlZCA9IDA7CisJICAgICAgZGlzY2FyZF9jbGVhbnVwcyAo c2VhcmNoZWRfY2xlYW51cCk7CisKKwkgICAgICBpZiAoc3ltICE9IE5VTEwp CisJCXJldHVybiBzeW07CisKKwkgICAgICBjb250aW51ZTsKKwkgICAgfQor CisJICAvKiBEbyBub3QgZm9sbG93IENVUlJFTlQgaWYgTkFNRSBtYXRjaGVz IGl0cyBFWENMVURFUy4gICovCisJICBmb3IgKGV4Y2x1ZGVwID0gY3VycmVu dC0+ZXhjbHVkZXM7ICpleGNsdWRlcDsgZXhjbHVkZXArKykKKwkgICAgaWYg KHN0cmNtcCAobmFtZSwgKmV4Y2x1ZGVwKSA9PSAwKQorCSAgICAgIGJyZWFr OworCSAgaWYgKCpleGNsdWRlcCkKKwkgICAgeworCSAgICAgIGRpc2NhcmRf Y2xlYW51cHMgKHNlYXJjaGVkX2NsZWFudXApOworCSAgICAgIGNvbnRpbnVl OworCSAgICB9CisKKwkgIC8qIElmIHRoZSBpbXBvcnQgc3RhdGVtZW50IGlz IGNyZWF0aW5nIGFuIGFsaWFzLiAgKi8KKwkgIGlmIChjdXJyZW50LT5hbGlh cyAhPSBOVUxMKQorCSAgICB7CisJICAgICAgaWYgKHN0cmNtcCAobmFtZSwg Y3VycmVudC0+YWxpYXMpID09IDApCisJCXsKKwkJICAvKiBJZiB0aGUgYWxp YXMgbWF0Y2hlcyB0aGUgc291Z2h0IG5hbWUuICBQYXNzCisJCSAgICAgY3Vy cmVudC0+aW1wb3J0X3NyYyBhcyB0aGUgTkFNRSB0byBkaXJlY3QgdGhlCisJ CSAgICAgc2VhcmNoIHRvd2FyZHMgdGhlIGFsaWFzZWQgbW9kdWxlLiAgKi8K KwkJICBzeW0gPSBsb29rdXBfbW9kdWxlX3Njb3BlIChjdXJyZW50LT5pbXBv cnRfc3JjLCBibG9jaywKKwkJCQkJICAgICBkb21haW4sIHNjb3BlLCAwKTsK KwkJfQorCSAgICAgIGVsc2UKKwkJeworCQkgIC8qIElmIHRoZSBhbGlhcyBt YXRjaGVzIHRoZSBmaXJzdCBjb21wb25lbnQgb2YgdGhlCisJCSAgICAgc291 Z2h0IG5hbWUsIHBhc3MgY3VycmVudC0+aW1wb3J0X3NyYyBhcyBNT0RVTEUK KwkJICAgICB0byBkaXJlY3QgdGhlIHNlYXJjaCwgc2tpcHBpbmcgb3ZlciB0 aGUgYWxpYXNlZAorCQkgICAgIGNvbXBvbmVudCBpbiBOQU1FLiAgKi8KKwkJ ICBpbnQgbmFtZV9zY29wZSA9IGRfZmluZF9maXJzdF9jb21wb25lbnQgKG5h bWUpOworCisJCSAgaWYgKG5hbWVbbmFtZV9zY29wZV0gIT0gJ1wwJworCQkg ICAgICAmJiBzdHJuY21wIChuYW1lLCBjdXJyZW50LT5hbGlhcywgbmFtZV9z Y29wZSkgPT0gMCkKKwkJICAgIHsKKwkJICAgICAgLyogU2tpcCB0aGUgJy4n ICAqLworCQkgICAgICBuYW1lX3Njb3BlKys7CisJCSAgICAgIHN5bSA9IGRf bG9va3VwX3N5bWJvbF9pbXBvcnRzIChjdXJyZW50LT5pbXBvcnRfc3JjLAor CQkJCQkJICAgICBuYW1lICsgbmFtZV9zY29wZSwKKwkJCQkJCSAgICAgYmxv Y2ssIGRvbWFpbiwgMCk7CisJCSAgICB9CisJCX0KKwkgICAgfQorCSAgZWxz ZQorCSAgICB7CisJICAgICAgLyogSWYgdGhpcyBpbXBvcnQgc3RhdGVtZW50 IGNyZWF0ZXMgbm8gYWxpYXMsIHBhc3MKKwkJIGN1cnJlbnQtPmltcG9ydF9z cmMgYXMgTU9EVUxFIHRvIGRpcmVjdCB0aGUgc2VhcmNoCisJCSB0b3dhcmRz IHRoZSBpbXBvcnRlZCBtb2R1bGUuICAqLworCSAgICAgIHN5bSA9IGRfbG9v a3VwX3N5bWJvbF9pbXBvcnRzIChjdXJyZW50LT5pbXBvcnRfc3JjLAorCQkJ CQkgICAgIG5hbWUsIGJsb2NrLCBkb21haW4sIDApOworCSAgICB9CisJICBj dXJyZW50LT5zZWFyY2hlZCA9IDA7CisJICBkaXNjYXJkX2NsZWFudXBzIChz ZWFyY2hlZF9jbGVhbnVwKTsKKworCSAgaWYgKHN5bSAhPSBOVUxMKQorCSAg ICByZXR1cm4gc3ltOworCX0KKyAgICB9CisKKyAgcmV0dXJuIE5VTEw7Cit9 CisKKy8qIFNlYXJjaGVzIGZvciBOQU1FIGluIHRoZSBjdXJyZW50IG1vZHVs ZSwgYW5kIGJ5IGFwcGx5aW5nIHJlbGV2YW50CisgICBpbXBvcnQgc3RhdGVt ZW50cyBiZWxvbmdpbmcgdG8gQkxPQ0sgYW5kIGl0cyBwYXJlbnRzLiAgU0NP UEUgaXMgdGhlCisgICBtb2R1bGUgc2NvcGUgb2YgdGhlIGNvbnRleHQgaW4g d2hpY2ggdGhlIHNlYXJjaCBpcyBiZWluZyBldmFsdWF0ZWQuICAqLworCitz dGF0aWMgc3RydWN0IHN5bWJvbCoKK2RfbG9va3VwX3N5bWJvbF9tb2R1bGUg KGNvbnN0IGNoYXIgKnNjb3BlLCBjb25zdCBjaGFyICpuYW1lLAorCQkJY29u c3Qgc3RydWN0IGJsb2NrICpibG9jaywKKwkJCWNvbnN0IGRvbWFpbl9lbnVt IGRvbWFpbikKK3sKKyAgc3RydWN0IHN5bWJvbCAqc3ltOworCisgIC8qIEZp cnN0LCB0cnkgdG8gZmluZCB0aGUgc3ltYm9sIGluIHRoZSBnaXZlbiBtb2R1 bGUuICAqLworICBzeW0gPSBkX2xvb2t1cF9zeW1ib2xfaW5fbW9kdWxlIChz Y29wZSwgbmFtZSwKKwkJCQkgICBibG9jaywgZG9tYWluLCAxKTsKKyAgaWYg KHN5bSAhPSBOVUxMKQorICAgIHJldHVybiBzeW07CisKKyAgLyogU2VhcmNo IGZvciBuYW1lIGluIG1vZHVsZXMgaW1wb3J0ZWQgdG8gdGhpcyBhbmQgcGFy ZW50CisgICAgIGJsb2Nrcy4gICovCisgIHdoaWxlIChibG9jayAhPSBOVUxM KQorICAgIHsKKyAgICAgIHN5bSA9IGRfbG9va3VwX3N5bWJvbF9pbXBvcnRz IChzY29wZSwgbmFtZSwgYmxvY2ssIGRvbWFpbiwgMSk7CisKKyAgICAgIGlm IChzeW0pCisJcmV0dXJuIHN5bTsKKworICAgICAgYmxvY2sgPSBCTE9DS19T VVBFUkJMT0NLIChibG9jayk7CisgICAgfQorCisgIHJldHVybiBOVUxMOwor fQorCisvKiBUaGUgRC1zcGVjaWZpYyB2ZXJzaW9uIG9mIG5hbWUgbG9va3Vw IGZvciBzdGF0aWMgYW5kIGdsb2JhbCBuYW1lcworICAgVGhpcyBtYWtlcyBz dXJlIHRoYXQgbmFtZXMgZ2V0IGxvb2tlZCBmb3IgaW4gYWxsIG1vZHVsZXMg dGhhdCBhcmUKKyAgIGluIHNjb3BlLiAgTkFNRSBpcyB0aGUgbmF0dXJhbCBu YW1lIG9mIHRoZSBzeW1ib2wgdGhhdCB3ZSdyZSBsb29raW5nCisgICBsb29r aW5nIGZvciwgQkxPQ0sgaXMgdGhlIGJsb2NrIHRoYXQgd2UncmUgc2VhcmNo aW5nIHdpdGhpbiwgRE9NQUlOCisgICBzYXlzIHdoYXQga2luZCBvZiBzeW1i b2xzIHdlJ3JlIGxvb2tpbmcgZm9yLCBhbmQgaWYgU1lNVEFCIGlzIG5vbi1O VUxMLAorICAgd2Ugc2hvdWxkIHN0b3JlIHRoZSBzeW10YWIgd2hlcmUgd2Ug Zm91bmQgdGhlIHN5bWJvbCBpbiBpdC4gICovCisKK3N0cnVjdCBzeW1ib2wg KgorZF9sb29rdXBfc3ltYm9sX25vbmxvY2FsIChjb25zdCBzdHJ1Y3QgbGFu Z3VhZ2VfZGVmbiAqbGFuZ2RlZiwKKwkJCSAgY29uc3QgY2hhciAqbmFtZSwK KwkJCSAgY29uc3Qgc3RydWN0IGJsb2NrICpibG9jaywKKwkJCSAgY29uc3Qg ZG9tYWluX2VudW0gZG9tYWluKQoreworICBzdHJ1Y3Qgc3ltYm9sICpzeW07 CisgIGNvbnN0IGNoYXIgKnNjb3BlID0gYmxvY2tfc2NvcGUgKGJsb2NrKTsK KworICBzeW0gPSBsb29rdXBfbW9kdWxlX3Njb3BlIChuYW1lLCBibG9jaywg ZG9tYWluLCBzY29wZSwgMCk7CisgIGlmIChzeW0gIT0gTlVMTCkKKyAgICBy ZXR1cm4gc3ltOworCisgIHJldHVybiBkX2xvb2t1cF9zeW1ib2xfbW9kdWxl IChzY29wZSwgbmFtZSwgYmxvY2ssIGRvbWFpbik7Cit9CisK --001a1134804e909ae9051ad221d1--