From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 6955 invoked by alias); 29 Nov 2006 02:47:39 -0000 Received: (qmail 6942 invoked by uid 22791); 29 Nov 2006 02:47:38 -0000 X-Spam-Check-By: sourceware.org Received: from pas38-1-82-67-71-117.fbx.proxad.net (HELO siegfried.gbfo.org) (82.67.71.117) by sourceware.org (qpsmtpd/0.31) with ESMTP; Wed, 29 Nov 2006 02:47:32 +0000 Received: from erda.mds (localhost [127.0.0.1]) by siegfried.gbfo.org (8.13.6/8.13.6) with ESMTP id kAT2lPff014091 for ; Wed, 29 Nov 2006 03:47:25 +0100 Received: from localhost (saffroy@localhost) by erda.mds (8.13.6/8.13.6/Submit) with ESMTP id kAT2lO3s014088 for ; Wed, 29 Nov 2006 03:47:25 +0100 Date: Wed, 29 Nov 2006 02:47:00 -0000 From: Jean-Marc Saffroy To: gdb@sourceware.org Subject: Re: gdb script performance In-Reply-To: <20061005153704.GA1864@nevyn.them.org> Message-ID: References: <1160053117.13420.17.camel@crx549.cro.st.com> <20061005133228.GA30276@nevyn.them.org> <20061005153704.GA1864@nevyn.them.org> MIME-Version: 1.0 Content-Type: MULTIPART/MIXED; BOUNDARY="8323329-112657740-1164768444=:4927" X-IsSubscribed: yes Mailing-List: contact gdb-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-owner@sourceware.org X-SW-Source: 2006-11/txt/msg00207.txt.bz2 This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. --8323329-112657740-1164768444=:4927 Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed Content-length: 2810 Hello, I'm resurrecting this old thread on gdb performance since I took some time to look into the problem recently. On Thu, 5 Oct 2006, Daniel Jacobowitz wrote: > On Thu, Oct 05, 2006 at 05:29:30PM +0200, Jean-Marc Saffroy wrote: >> On Thu, 5 Oct 2006, Daniel Jacobowitz wrote: >> >> Please find attached gprof output (this is with gdb 6.5 + >> gdb-lookup-internal-first-3.patch running the lsmaps script I posted >> earlier). >> >> Thanks for helping! > > 26.14 381.31 381.31 141867 2.69 3.50 find_pc_sect_psymtab > 18.54 651.82 270.51 331876 0.82 0.82 find_pc_sect_section > 17.88 912.69 260.87 144847060 0.00 0.00 lookup_partial_symbol > 11.01 1073.33 160.64 1254595136 0.00 0.00 strcmp_iw > 4.98 1145.97 72.64 34010 2.14 16.50 lookup_symbol_aux_psymtabs > 4.78 1215.73 69.75 9584 7.28 8.12 fixup_section > 4.46 1280.79 65.06 lbasename > 3.42 1330.64 49.85 12183 4.09 4.09 lookup_partial_symtab > 1.83 1357.34 26.70 33844664 0.00 0.00 strcmp_iw_ordered > 1.68 1381.82 24.48 1288426966 0.00 0.00 symbol_natural_name > 1.09 1397.71 15.89 1288426966 0.00 0.00 symbol_search_name > > Well then. Observations: > - We're looking up partial symbols way too often. > - It's taking way too long. > - And oh my lord is that a lot of calls to the (fairly inefficient) > strcmp_iw. > > It looks like only about three calls to find_pc_sect_psymtab per > expression evaluation, which is bad but not too bad - sounds like > a last-searched-item cache may be useful. Some interesting facts: - readelf reports no less than 7871 section headers in the vmlinux I'm analyzing (this is 2.6.18): any attempt to traverse the list of sections costs a *lot* - even with the patch lookup-internal-first-3, it seems lookup_symbol_aux is sometimes called for gdb script vars Anyway, I followed your advice and added caching to find_pc_sect_symtab and lookup_symbol_aux, which together divided execution time by 6 on my benchmark. :-) See gprof output here (baseline is gdb 6.5 with gdb-lookup-internal-first-3.patch): http://siegfried.dnsalias.net/~saffroy/gdb-baseline.html http://siegfried.dnsalias.net/~saffroy/gdb-symcache.html http://siegfried.dnsalias.net/~saffroy/gdb-symcache-pc_cache.html Obviously there is still room for improvement with lbasename. For completeness I have to mention that gprof reports a completely wrong count of seconds on my system (x86-64 box), but it seems there is only a bad multiplier somewhere. Incomplete patches are attached: they lack proper cache invalidation (eg. on loading of a new object), but let's discuss the approach first. Cheers, -- saffroy@gmail.com --8323329-112657740-1164768444=:4927 Content-Type: TEXT/PLAIN; charset=US-ASCII; name=gdb-pc_cache.patch Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename=gdb-pc_cache.patch Content-length: 1774 SW5kZXg6IGdkYi02LjUtcHJvZi9nZGIvc3ltdGFiLmMNCj09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0NCi0tLSBnZGItNi41LXByb2Yub3JpZy9nZGIvc3ltdGFi LmMJMjAwNi0xMS0yOSAwMzoyNzoxOC4wMDAwMDAwMDAgKzAxMDANCisrKyBn ZGItNi41LXByb2YvZ2RiL3N5bXRhYi5jCTIwMDYtMTEtMjkgMDM6Mjc6MjAu MDAwMDAwMDAwICswMTAwDQpAQCAtMjAyMiw4ICsyMDIyLDggQEANCiAvKiBG aW5kIHRoZSBzeW10YWIgYXNzb2NpYXRlZCB3aXRoIFBDIGFuZCBTRUNUSU9O LiAgTG9vayB0aHJvdWdoIHRoZQ0KICAgIHBzeW10YWJzIGFuZCByZWFkIGlu IGFub3RoZXIgc3ltdGFiIGlmIG5lY2Vzc2FyeS4gKi8NCiANCi1zdHJ1Y3Qg c3ltdGFiICoNCi1maW5kX3BjX3NlY3Rfc3ltdGFiIChDT1JFX0FERFIgcGMs IGFzZWN0aW9uICpzZWN0aW9uKQ0KK3N0YXRpYyBzdHJ1Y3Qgc3ltdGFiICoN CitmaW5kX3BjX3NlY3Rfc3ltdGFiX3VuY2FjaGVkIChDT1JFX0FERFIgcGMs IGFzZWN0aW9uICpzZWN0aW9uKQ0KIHsNCiAgIHN0cnVjdCBibG9jayAqYjsN CiAgIHN0cnVjdCBibG9ja3ZlY3RvciAqYnY7DQpAQCAtMjEyMyw2ICsyMTIz LDI0IEBADQogICByZXR1cm4gKHMpOw0KIH0NCiANCitzdHJ1Y3Qgc3ltdGFi ICoNCitmaW5kX3BjX3NlY3Rfc3ltdGFiIChDT1JFX0FERFIgcGMsIGFzZWN0 aW9uICpzZWN0aW9uKQ0KK3sNCisgIHN0YXRpYyBDT1JFX0FERFIgY2FjaGVk X3BjOw0KKyAgc3RhdGljIGFzZWN0aW9uICpjYWNoZWRfc2VjdGlvbjsNCisg IHN0YXRpYyBzdHJ1Y3Qgc3ltdGFiICpjYWNoZWRfc3ltdGFiOw0KKyAgc3Rh dGljIGludCB0cnlfY2FjaGUgPSAwOw0KKw0KKyAgaWYgKHRyeV9jYWNoZSAm JiAoY2FjaGVkX3BjID09IHBjKSAmJiAoY2FjaGVkX3NlY3Rpb24gPT0gc2Vj dGlvbikpDQorICAgIHJldHVybiBjYWNoZWRfc3ltdGFiOw0KKw0KKyAgdHJ5 X2NhY2hlID0gMTsNCisgIGNhY2hlZF9wYyA9IHBjOw0KKyAgY2FjaGVkX3Nl Y3Rpb24gPSBzZWN0aW9uOw0KKyAgY2FjaGVkX3N5bXRhYiA9IGZpbmRfcGNf c2VjdF9zeW10YWJfdW5jYWNoZWQgKHBjLCBzZWN0aW9uKTsNCisgIHJldHVy biBjYWNoZWRfc3ltdGFiOw0KK30NCisNCiAvKiBGaW5kIHRoZSBzeW10YWIg YXNzb2NpYXRlZCB3aXRoIFBDLiAgTG9vayB0aHJvdWdoIHRoZSBwc3ltdGFi cyBhbmQNCiAgICByZWFkIGluIGFub3RoZXIgc3ltdGFiIGlmIG5lY2Vzc2Fy eS4gIEJhY2t3YXJkIGNvbXBhdGliaWxpdHksIG5vIHNlY3Rpb24gKi8NCiAN Cg== --8323329-112657740-1164768444=:4927 Content-Type: TEXT/PLAIN; charset=US-ASCII; name=gdb-symcache.patch Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename=gdb-symcache.patch Content-length: 8642 SW5kZXg6IGdkYi02LjUtcHJvZi9nZGIvc3ltdGFiLmMNCj09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0NCi0tLSBnZGItNi41LXByb2Yub3JpZy9nZGIvc3ltdGFi LmMJMjAwNi0xMS0yNyAwMzowMToyMi4wMDAwMDAwMDAgKzAxMDANCisrKyBn ZGItNi41LXByb2YvZ2RiL3N5bXRhYi5jCTIwMDYtMTEtMjggMDE6MjE6Mjgu MDAwMDAwMDAwICswMTAwDQpAQCAtOTQsNiArOTQsMjAgQEANCiAJCQkJCXN0 cnVjdCBzeW10YWIgKipzeW10YWIpOw0KIA0KIHN0YXRpYw0KK2ludCBzeW1j YWNoZV9sb29rdXAgKGNvbnN0IGNoYXIgKm5hbWUsDQorCQkgICAgIGNvbnN0 IGNoYXIgKmxpbmthZ2VfbmFtZSwNCisJCSAgICAgY29uc3QgZG9tYWluX2Vu dW0gZG9tYWluLA0KKwkJICAgICBzdHJ1Y3Qgc3ltYm9sICoqc3ltLA0KKwkJ ICAgICBzdHJ1Y3Qgc3ltdGFiICoqc3ltdGFiKTsNCisNCitzdGF0aWMNCit2 b2lkIHN5bWNhY2hlX2FkZCAoc3RydWN0IHN5bWJvbCAqc3ltLA0KKwkJICAg Y29uc3QgY2hhciAqbmFtZSwNCisJCSAgIGNvbnN0IGNoYXIgKmxpbmthZ2Vf bmFtZSwNCisJCSAgIGNvbnN0IGRvbWFpbl9lbnVtIGRvbWFpbiwNCisJCSAg IHN0cnVjdCBzeW10YWIgKipzeW10YWIpOw0KKw0KK3N0YXRpYw0KIHN0cnVj dCBzeW1ib2wgKmxvb2t1cF9zeW1ib2xfYXV4X3N5bXRhYnMgKGludCBibG9j a19pbmRleCwNCiAJCQkJCSAgY29uc3QgY2hhciAqbmFtZSwNCiAJCQkJCSAg Y29uc3QgY2hhciAqbGlua2FnZV9uYW1lLA0KQEAgLTExMTMsNiArMTEyNyw5 IEBADQogCX0NCiAgICAgfQ0KIA0KKyAgaWYgKHN5bWNhY2hlX2xvb2t1cCAo bmFtZSwgbGlua2FnZV9uYW1lLCBkb21haW4sICZzeW0sIHN5bXRhYikpDQor ICAgIHJldHVybiBzeW07DQorDQogICAvKiBOb3cgZG8gd2hhdGV2ZXIgaXMg YXBwcm9wcmlhdGUgZm9yIHRoZSBjdXJyZW50IGxhbmd1YWdlIHRvIGxvb2sN CiAgICAgIHVwIHN0YXRpYyBhbmQgZ2xvYmFsIHZhcmlhYmxlcy4gICovDQog DQpAQCAtMTEyMCw3ICsxMTM3LDcgQEANCiAJCQkJCQkgICAgIGJsb2NrLCBk b21haW4sDQogCQkJCQkJICAgICBzeW10YWIpOw0KICAgaWYgKHN5bSAhPSBO VUxMKQ0KLSAgICByZXR1cm4gc3ltOw0KKyAgICBnb3RvIG91dDsNCiANCiAg IC8qIE5vdyBzZWFyY2ggYWxsIHN0YXRpYyBmaWxlLWxldmVsIHN5bWJvbHMu ICBOb3Qgc3RyaWN0bHkgY29ycmVjdCwNCiAgICAgIGJ1dCBtb3JlIHVzZWZ1 bCB0aGFuIGFuIGVycm9yLiAgRG8gdGhlIHN5bXRhYnMgZmlyc3QsIHRoZW4g Y2hlY2sNCkBAIC0xMTMxLDE2ICsxMTQ4LDE5IEBADQogICBzeW0gPSBsb29r dXBfc3ltYm9sX2F1eF9zeW10YWJzIChTVEFUSUNfQkxPQ0ssIG5hbWUsIGxp bmthZ2VfbmFtZSwNCiAJCQkJICAgZG9tYWluLCBzeW10YWIpOw0KICAgaWYg KHN5bSAhPSBOVUxMKQ0KLSAgICByZXR1cm4gc3ltOw0KLSAgDQorICAgIGdv dG8gb3V0Ow0KKw0KICAgc3ltID0gbG9va3VwX3N5bWJvbF9hdXhfcHN5bXRh YnMgKFNUQVRJQ19CTE9DSywgbmFtZSwgbGlua2FnZV9uYW1lLA0KIAkJCQkg ICAgZG9tYWluLCBzeW10YWIpOw0KICAgaWYgKHN5bSAhPSBOVUxMKQ0KLSAg ICByZXR1cm4gc3ltOw0KKyAgICBnb3RvIG91dDsNCiANCiAgIGlmIChzeW10 YWIgIT0gTlVMTCkNCiAgICAgKnN5bXRhYiA9IE5VTEw7DQotICByZXR1cm4g TlVMTDsNCisNCisgb3V0Og0KKyAgc3ltY2FjaGVfYWRkIChzeW0sIG5hbWUs IGxpbmthZ2VfbmFtZSwgZG9tYWluLCBzeW10YWIpOw0KKyAgcmV0dXJuIHN5 bTsNCiB9DQogDQogLyogQ2hlY2sgdG8gc2VlIGlmIHRoZSBzeW1ib2wgaXMg ZGVmaW5lZCBpbiBCTE9DSyBvciBpdHMgc3VwZXJpb3JzLg0KQEAgLTEyMTUs NiArMTIzNSwxNzcgQEANCiAgIHJldHVybiBOVUxMOw0KIH0NCiANCisvKiBD aGVjayBmb3IgYSBjYWNoZWQgc3ltYm9sIGxvb2t1cC4NCisgKi8NCisNCitz dHJ1Y3Qgc3ltY2FjaGVfZW50cnkgew0KKyAgY29uc3QgY2hhciAqbmFtZTsN CisgIGNvbnN0IGNoYXIgKmxpbmthZ2VfbmFtZTsNCisgIGRvbWFpbl9lbnVt IGRvbWFpbjsNCisgIHN0cnVjdCBzeW1ib2wgKnN5bTsNCisgIHN0cnVjdCBz eW10YWIgKnN5bXRhYjsNCisgIHN0cnVjdCBzeW1jYWNoZV9lbnRyeSAqbmV4 dCwgKnByZXY7IC8qIG1ydSBsaXN0ICovDQorfTsNCisNCisvKiBtYXggbnVt YmVyIG9mIGVudHJpZXMgaW4gc3ltY2FjaGUgKi8NCisjZGVmaW5lIFNZTUNB Q0hFX1NJWkUgMjU2DQorDQorLyogZml4ZWQtc2l6ZSBoYXNoIHRhYmxlIG9m IHN5bWNhY2hlIGVudHJpZXMgKi8NCitzdGF0aWMgaHRhYl90IHN5bWNhY2hl X2hhc2h0YWI7DQorDQorLyogbW9zdCByZWNlbnRseSBhY2Nlc3NlZCBzeW1j YWNoZSBlbnRyeSAqLw0KK3N0YXRpYyBzdHJ1Y3Qgc3ltY2FjaGVfZW50cnkg KnN5bWNhY2hlX25ld2VzdDsNCisNCitzdGF0aWMgaGFzaHZhbF90DQorc3lt Y2FjaGVfaGFzaChjb25zdCB2b2lkICplKQ0KK3sNCisgIHN0cnVjdCBzeW1j YWNoZV9lbnRyeSAqZW50cnkgPSAoc3RydWN0IHN5bWNhY2hlX2VudHJ5ICop ZTsNCisNCisgIHJldHVybiBodGFiX2hhc2hfc3RyaW5nIChlbnRyeS0+bmFt ZSkgKyBlbnRyeS0+ZG9tYWluOw0KK30NCisNCitzdGF0aWMgaW50DQorc3lt Y2FjaGVfZXEoY29uc3Qgdm9pZCAqZSwgY29uc3Qgdm9pZCAqZikNCit7DQor ICBzdHJ1Y3Qgc3ltY2FjaGVfZW50cnkgKmEgPSAoc3RydWN0IHN5bWNhY2hl X2VudHJ5ICopZTsNCisgIHN0cnVjdCBzeW1jYWNoZV9lbnRyeSAqYiA9IChz dHJ1Y3Qgc3ltY2FjaGVfZW50cnkgKilmOw0KKw0KKyAgcmV0dXJuICEgc3Ry Y21wIChhLT5uYW1lLCBiLT5uYW1lKQ0KKwkgIC8vIEZJWE1FICYmICFzdHJj bXAoYS0+bGlua2FnZV9uYW1lLCBiLT5saW5rYWdlX25hbWUpDQorCSAgJiYg KGEtPmRvbWFpbiA9PSBiLT5kb21haW4pOw0KK30NCisNCitzdGF0aWMgdm9p ZA0KK3N5bWNhY2hlX2xpc3RfYWRkKHN0cnVjdCBzeW1jYWNoZV9lbnRyeSAq ZW50cnkpDQorew0KKyAgaWYgKHN5bWNhY2hlX25ld2VzdCA9PSBOVUxMKQ0K KyAgICB7DQorICAgICAgLyogaW5pdCBtcnUgKi8NCisgICAgICBlbnRyeS0+ cHJldiA9IGVudHJ5Ow0KKyAgICAgIGVudHJ5LT5uZXh0ID0gZW50cnk7DQor ICAgICAgc3ltY2FjaGVfbmV3ZXN0ID0gZW50cnk7DQorICAgIH0NCisgIGVs c2UNCisgICAgew0KKyAgICAgIC8qIGFkZCBlbnRyeSBhdCBoZWFkIG9mIG1y dSAqLw0KKyAgICAgIGVudHJ5LT5uZXh0ID0gc3ltY2FjaGVfbmV3ZXN0Ow0K KyAgICAgIGVudHJ5LT5wcmV2ID0gc3ltY2FjaGVfbmV3ZXN0LT5wcmV2Ow0K KyAgICAgIGVudHJ5LT5wcmV2LT5uZXh0ID0gZW50cnk7DQorICAgICAgZW50 cnktPm5leHQtPnByZXYgPSBlbnRyeTsNCisgICAgICBzeW1jYWNoZV9uZXdl c3QgPSBlbnRyeTsNCisgICAgfQ0KK30NCisNCitzdGF0aWMgdm9pZA0KK3N5 bWNhY2hlX2xpc3RfZGVsKHN0cnVjdCBzeW1jYWNoZV9lbnRyeSAqZW50cnkp DQorew0KKyAgLyogcmVtb3ZlIGVudHJ5IGZyb20gbXJ1ICovDQorICBlbnRy eS0+cHJldi0+bmV4dCA9IGVudHJ5LT5uZXh0Ow0KKyAgZW50cnktPm5leHQt PnByZXYgPSBlbnRyeS0+cHJldjsNCit9DQorDQorc3RhdGljIHZvaWQNCitz eW1jYWNoZV9kZWwodm9pZCAqZSkNCit7DQorICBzdHJ1Y3Qgc3ltY2FjaGVf ZW50cnkgKmVudHJ5ID0gKHN0cnVjdCBzeW1jYWNoZV9lbnRyeSAqKWU7DQor DQorICBzeW1jYWNoZV9saXN0X2RlbCAoZW50cnkpOw0KKyAgZnJlZSAoZW50 cnktPm5hbWUpOw0KKyAgZnJlZSAoZW50cnktPmxpbmthZ2VfbmFtZSk7DQor ICBmcmVlIChlbnRyeSk7DQorfQ0KKw0KK3N0YXRpYyB2b2lkDQorc3ltY2Fj aGVfYWRkIChzdHJ1Y3Qgc3ltYm9sICpzeW0sDQorCQkgICBjb25zdCBjaGFy ICpuYW1lLA0KKwkJICAgY29uc3QgY2hhciAqbGlua2FnZV9uYW1lLA0KKwkJ ICAgY29uc3QgZG9tYWluX2VudW0gZG9tYWluLA0KKwkJICAgc3RydWN0IHN5 bXRhYiAqKnN5bXRhYikNCit7DQorICBzdHJ1Y3Qgc3ltY2FjaGVfZW50cnkg cmVxdWVzdCwgKmVudHJ5LCAqKnNsb3Q7DQorDQorICAvKiBpbml0aWFsaXpl IG9uIGZpcnN0IHVzZSAqLw0KKyAgaWYgKCFzeW1jYWNoZV9oYXNodGFiKQ0K KyAgICBzeW1jYWNoZV9oYXNodGFiID0gaHRhYl9jcmVhdGVfYWxsb2MgKFNZ TUNBQ0hFX1NJWkUsDQorCQkJCQkgIHN5bWNhY2hlX2hhc2gsDQorCQkJCQkg IHN5bWNhY2hlX2VxLA0KKwkJCQkJICBzeW1jYWNoZV9kZWwsDQorCQkJCQkg IHhjYWxsb2MsDQorCQkJCQkgIGZyZWUpOw0KKw0KKyAgLyogc3ltIGNhbiBi ZSBrbm93biwgYnV0IHdpdGggdW5rbm93biBzeW10YWI6IGFkZCBpdCBpZiBw b3NzaWJsZSAqLw0KKyAgcmVxdWVzdC5uYW1lID0gbmFtZTsNCisgIHJlcXVl c3QubGlua2FnZV9uYW1lID0gbGlua2FnZV9uYW1lOw0KKyAgcmVxdWVzdC5k b21haW4gPSBkb21haW47DQorICBlbnRyeSA9IGh0YWJfZmluZCAoc3ltY2Fj aGVfaGFzaHRhYiwgJnJlcXVlc3QpOw0KKyAgaWYgKGVudHJ5ICE9IEhUQUJf RU1QVFlfRU5UUlkpDQorICAgIHsNCisgICAgICBpZiAoc3ltdGFiICE9IE5V TEwpDQorCWVudHJ5LT5zeW10YWIgPSAqc3ltdGFiOw0KKyAgICAgIHJldHVy bjsNCisgICAgfQ0KKw0KKyAgLyogd2hlbiBjYWNoZSBpcyBmdWxsLCByZW1v dmUgb2xkZXN0IGVsZW1lbnQgKi8NCisgIGlmIChodGFiX2VsZW1lbnRzIChz eW1jYWNoZV9oYXNodGFiKSA9PSBTWU1DQUNIRV9TSVpFKQ0KKyAgICB7DQor ICAgICAgc3RydWN0IHN5bWNhY2hlX2VudHJ5ICpvbGRlc3Q7DQorDQorICAg ICAgb2xkZXN0ID0gc3ltY2FjaGVfbmV3ZXN0LT5wcmV2Ow0KKyAgICAgIGh0 YWJfcmVtb3ZlX2VsdCAoc3ltY2FjaGVfaGFzaHRhYiwgb2xkZXN0KTsNCisg ICAgfQ0KKw0KKyAgLyogdGhpcyBpcyByZWFsbHkgYSBuZXcgZW50cnkgKi8N CisgIGVudHJ5ID0geGNhbGxvYyAoMSwgc2l6ZW9mKCplbnRyeSkpOw0KKyAg ZW50cnktPm5hbWUgPSBzdHJkdXAgKG5hbWUpOw0KKyAgZW50cnktPmxpbmth Z2VfbmFtZSA9IGxpbmthZ2VfbmFtZSA/IHN0cmR1cCAobGlua2FnZV9uYW1l KSA6IE5VTEw7DQorICBlbnRyeS0+ZG9tYWluID0gZG9tYWluOw0KKyAgZW50 cnktPnN5bSA9IHN5bTsNCisgIGlmIChzeW10YWIgIT0gTlVMTCkNCisgICAg ZW50cnktPnN5bXRhYiA9ICpzeW10YWI7DQorICBzeW1jYWNoZV9saXN0X2Fk ZCAoZW50cnkpOw0KKw0KKyAgc2xvdCA9IGh0YWJfZmluZF9zbG90IChzeW1j YWNoZV9oYXNodGFiLCBlbnRyeSwgSU5TRVJUKTsNCisgICpzbG90ID0gZW50 cnk7DQorfQ0KKw0KK3N0YXRpYyBpbnQNCitzeW1jYWNoZV9sb29rdXAgKGNv bnN0IGNoYXIgKm5hbWUsDQorCQkJCWNvbnN0IGNoYXIgKmxpbmthZ2VfbmFt ZSwNCisJCQkJY29uc3QgZG9tYWluX2VudW0gZG9tYWluLA0KKwkJCQlzdHJ1 Y3Qgc3ltYm9sICoqc3ltLA0KKwkJCQlzdHJ1Y3Qgc3ltdGFiICoqc3ltdGFi KQ0KK3sNCisgIHN0cnVjdCBzeW1jYWNoZV9lbnRyeSByZXF1ZXN0LCAqZW50 cnk7DQorDQorICBpZiAoIXN5bWNhY2hlX2hhc2h0YWIpDQorICAgIHJldHVy biAwOw0KKw0KKyAgcmVxdWVzdC5uYW1lID0gbmFtZTsNCisgIHJlcXVlc3Qu bGlua2FnZV9uYW1lID0gbGlua2FnZV9uYW1lOw0KKyAgcmVxdWVzdC5kb21h aW4gPSBkb21haW47DQorICBlbnRyeSA9IGh0YWJfZmluZCAoc3ltY2FjaGVf aGFzaHRhYiwgJnJlcXVlc3QpOw0KKyAgaWYgKGVudHJ5ID09IEhUQUJfRU1Q VFlfRU5UUlkpDQorICAgIHJldHVybiAwOw0KKw0KKyAgaWYgKHN5bXRhYiAh PSBOVUxMKQ0KKyAgICB7DQorICAgICAgaWYgKGVudHJ5LT5zeW10YWIgPT0g TlVMTCkNCisJLyogc3ltdGFiIGlzIHJlcXVlc3RlZCwgYnV0IGNhY2hlZCBl bnRyeSBkb2VzIG5vdCBoYXZlIGl0ICovDQorCXJldHVybiAwOw0KKyAgICAg ICpzeW10YWIgPSBlbnRyeS0+c3ltdGFiOw0KKyAgICB9DQorICAqc3ltID0g ZW50cnktPnN5bTsNCisNCisgIC8qIGtlZXAgbXJ1IGxpc3Qgc29ydGVkICov DQorICBpZiAoZW50cnkgIT0gc3ltY2FjaGVfbmV3ZXN0KQ0KKyAgICB7DQor ICAgICAgc3ltY2FjaGVfbGlzdF9kZWwgKGVudHJ5KTsNCisgICAgICBzeW1j YWNoZV9saXN0X2FkZCAoZW50cnkpOw0KKyAgICB9DQorDQorICByZXR1cm4g MTsNCit9DQorDQogLyogQ2hlY2sgdG8gc2VlIGlmIHRoZSBzeW1ib2wgaXMg ZGVmaW5lZCBpbiBvbmUgb2YgdGhlIHN5bXRhYnMuDQogICAgQkxPQ0tfSU5E RVggc2hvdWxkIGJlIGVpdGhlciBHTE9CQUxfQkxPQ0sgb3IgU1RBVElDX0JM T0NLLA0KICAgIGRlcGVuZGluZyBvbiB3aGV0aGVyIG9yIG5vdCB3ZSB3YW50 IHRvIHNlYXJjaCBnbG9iYWwgc3ltYm9scyBvcg0K --8323329-112657740-1164768444=:4927--