From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 17975 invoked by alias); 27 Aug 2002 10:59:33 -0000 Mailing-List: contact gdb-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-owner@sources.redhat.com Received: (qmail 17966 invoked from network); 27 Aug 2002 10:59:31 -0000 Received: from unknown (HELO devserv.devel.redhat.com) (66.187.233.200) by sources.redhat.com with SMTP; 27 Aug 2002 10:59:31 -0000 Received: from localhost (alexl@localhost) by devserv.devel.redhat.com (8.11.6/8.11.0) with ESMTP id g7RAxUr28341; Tue, 27 Aug 2002 06:59:30 -0400 X-Authentication-Warning: devserv.devel.redhat.com: alexl owned process doing -bs Date: Tue, 27 Aug 2002 03:59:00 -0000 From: Alexander Larsson X-X-Sender: alexl@devserv.devel.redhat.com To: Jim Blandy cc: gdb@sources.redhat.com Subject: Re: External debug symbols In-Reply-To: Message-ID: MIME-Version: 1.0 Content-Type: MULTIPART/MIXED; BOUNDARY="279707962-2122298906-1030445970=:26451" X-SW-Source: 2002-08/txt/msg00353.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. Send mail to mime@docserver.cac.washington.edu for more info. --279707962-2122298906-1030445970=:26451 Content-Type: TEXT/PLAIN; charset=US-ASCII Content-length: 1455 On 21 Aug 2002, Jim Blandy wrote: > Wow, that's a lot less work than I expected it to be. It doesn't look > especially wrong to me. Basically, the presence of a .debuglink > section tells GDB that, whenever it loads one objfile, it should also > load the other. When the stripped objfile is freed, the other one is > freed, too. Ok. Here is a new, more "productized" patch. It is slightly larger, since it does a bit more. New in this patch is: * Some more memory handling code to handle the cases Jim mentioned. * Verify the crc32 checksum of the debug symbol file * look for separate debug files in several places: 1 - In the same directory as the original file 2 - In a .debug subdirectory 3 - In a gloal directory, with the full pathname appended. So if the global path is /usr/lib/debug it would look for debug info for /usr/bin/ls in /usr/lib/debug/usr/bin/ls. (global directory is settable in gdb, defaults to $libdir/debug) The last place is what we want to use for the Red Hat distribution. It makes it very nice from a packaging standpoint. -- =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= Alexander Larsson Red Hat, Inc alexl@redhat.com alla@lysator.liu.se He's a sword-wielding crooked astronaut haunted by memories of 'Nam. She's an elegant winged vampire with only herself to blame. They fight crime! --279707962-2122298906-1030445970=:26451 Content-Type: TEXT/PLAIN; charset=US-ASCII; name="gdb-5.2.1-separate-debug3.patch" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename="gdb-5.2.1-separate-debug3.patch" Content-length: 19342 ZGlmZiAtLWV4Y2x1ZGUgJyp+JyAtLWV4Y2x1ZGUgJyoub3JpZycgLS1leGNs dWRlICcqLnJlaicgLS1leGNsdWRlICcuIyonIC0tZXhjbHVkZSAnKi5vJyAt LWV4Y2x1ZGUgQ1ZTIC0tZXhjbHVkZSBTQ0NTIC0tZXhjbHVkZSBSQ1MgLS1l eGNsdWRlICcuKi5mbGFncycgLS1leGNsdWRlIC5jdnNpZ25vcmUgLS1leGNs dWRlIC5kZXBlbmQgLXVyIGdkYi01LjIuMS9nZGIvYWNjb25maWcuaCBnZGIt NS4yLjEuc2VwYXJhdGVfZGVidWdfc3ltYm9scy9nZGIvYWNjb25maWcuaA0K LS0tIGdkYi01LjIuMS9nZGIvYWNjb25maWcuaAlTYXQgSmFuICA1IDE5OjM2 OjMyIDIwMDINCisrKyBnZGItNS4yLjEuc2VwYXJhdGVfZGVidWdfc3ltYm9s cy9nZGIvYWNjb25maWcuaAlNb24gQXVnIDI2IDE2OjQ0OjE0IDIwMDINCkBA IC0xNzMsMyArMTczLDcgQEANCiANCiAvKiBuYXRpdmVmaWxlICovDQogI3Vu ZGVmIEdEQl9OTV9GSUxFDQorDQorLyogbGliZGlyICovDQorI3VuZGVmIERF QlVHRElSDQorDQpkaWZmIC0tZXhjbHVkZSAnKn4nIC0tZXhjbHVkZSAnKi5v cmlnJyAtLWV4Y2x1ZGUgJyoucmVqJyAtLWV4Y2x1ZGUgJy4jKicgLS1leGNs dWRlICcqLm8nIC0tZXhjbHVkZSBDVlMgLS1leGNsdWRlIFNDQ1MgLS1leGNs dWRlIFJDUyAtLWV4Y2x1ZGUgJy4qLmZsYWdzJyAtLWV4Y2x1ZGUgLmN2c2ln bm9yZSAtLWV4Y2x1ZGUgLmRlcGVuZCAtdXIgZ2RiLTUuMi4xL2dkYi9hY2lu Y2x1ZGUubTQgZ2RiLTUuMi4xLnNlcGFyYXRlX2RlYnVnX3N5bWJvbHMvZ2Ri L2FjaW5jbHVkZS5tNA0KLS0tIGdkYi01LjIuMS9nZGIvYWNpbmNsdWRlLm00 CU1vbiBBcHIgMTUgMDY6Mjg6NDkgMjAwMg0KKysrIGdkYi01LjIuMS5zZXBh cmF0ZV9kZWJ1Z19zeW1ib2xzL2dkYi9hY2luY2x1ZGUubTQJTW9uIEF1ZyAy NiAxMToxNjo0MCAyMDAyDQpAQCAtOTc2LDMgKzk3NiwxOCBAQA0KICAgKikg Q0M9IiRDQyAkYW1fY3ZfcHJvZ19jY19zdGRjIiA7Ow0KIGVzYWMNCiBdKQ0K Kw0KK2RubCB3cml0dGVuIGJ5IEd1aWRvIERyYWhlaW0gPGd1aWRvZEBnbXgu ZGU+LCBvcmlnaW5hbCBieSBBbGV4YW5kcmUgT2xpdmEgDQorZG5sIFZlcnNp b24gMS4zICgyMDAxLzAzLzAyKQ0KK2RubCBzb3VyY2UgaHR0cDovL3d3dy5n bnUub3JnL3NvZnR3YXJlL2FjLWFyY2hpdmUvTWlzY2VsbGFuZW91cy9hY19k ZWZpbmVfZGlyLmh0bWwNCisNCitBQ19ERUZVTihbQUNfREVGSU5FX0RJUl0s IFsNCisgIHRlc3QgIngkcHJlZml4IiA9IHhOT05FICYmIHByZWZpeD0iJGFj X2RlZmF1bHRfcHJlZml4Ig0KKyAgdGVzdCAieCRleGVjX3ByZWZpeCIgPSB4 Tk9ORSAmJiBleGVjX3ByZWZpeD0nJHtwcmVmaXh9Jw0KKyAgYWNfZGVmaW5l X2Rpcj1gZXZhbCBlY2hvIFskXSQyYA0KKyAgYWNfZGVmaW5lX2Rpcj1gZXZh bCBlY2hvIFskXWFjX2RlZmluZV9kaXJgDQorICBpZmVsc2UoJDMsICwNCisg ICAgQUNfREVGSU5FX1VOUVVPVEVEKCQxLCAiJGFjX2RlZmluZV9kaXIiKSwN CisgICAgQUNfREVGSU5FX1VOUVVPVEVEKCQxLCAiJGFjX2RlZmluZV9kaXIi LCAkMykpDQorXSkNCisNCmRpZmYgLS1leGNsdWRlICcqficgLS1leGNsdWRl ICcqLm9yaWcnIC0tZXhjbHVkZSAnKi5yZWonIC0tZXhjbHVkZSAnLiMqJyAt LWV4Y2x1ZGUgJyoubycgLS1leGNsdWRlIENWUyAtLWV4Y2x1ZGUgU0NDUyAt LWV4Y2x1ZGUgUkNTIC0tZXhjbHVkZSAnLiouZmxhZ3MnIC0tZXhjbHVkZSAu Y3ZzaWdub3JlIC0tZXhjbHVkZSAuZGVwZW5kIC11ciBnZGItNS4yLjEvZ2Ri L2NvbmZpZ3VyZS5pbiBnZGItNS4yLjEuc2VwYXJhdGVfZGVidWdfc3ltYm9s cy9nZGIvY29uZmlndXJlLmluDQotLS0gZ2RiLTUuMi4xL2dkYi9jb25maWd1 cmUuaW4JVGh1IE1hciAyOCAwNToyODowMCAyMDAyDQorKysgZ2RiLTUuMi4x LnNlcGFyYXRlX2RlYnVnX3N5bWJvbHMvZ2RiL2NvbmZpZ3VyZS5pbglNb24g QXVnIDI2IDE3OjAyOjQ4IDIwMDINCkBAIC0yMzQsNiArMjM0LDE0IEBADQog QUNfQ0hFQ0tfTElCKHNvY2tldCwgc29ja2V0cGFpcikNCiBBQ19DSEVDS19G VU5DUyhzb2NrZXRwYWlyKQ0KIA0KK2RlYnVnZGlyPSR7bGliZGlyfS9kZWJ1 Zw0KKwkgDQorQUNfQVJHX1dJVEgoc2VwYXJhdGUtZGVidWctZGlyLA0KK1sg IC0td2l0aC1zZXBhcmF0ZS1kZWJ1Zy1kaXI9cGF0aCAgIExvb2sgZm9yIGds b2JhbCBzZXBhcmF0ZSBkZWJ1ZyBpbmZvIGluIHRoaXMgcGF0aCBbTElCRElS L2RlYnVnXV0sDQorW2RlYnVnZGlyPSIke3dpdGh2YWx9Il0pDQorCQ0KK0FD X0RFRklORV9ESVIoREVCVUdESVIsIGRlYnVnZGlyKQ0KKyNBQ19ERUZJTkVf VU5RVU9URUQoREVCVUdESVIsICIkZGVidWdkaXIiKSwNCiANCiBCRkRfTkVF RF9ERUNMQVJBVElPTihtYWxsb2MpDQogQkZEX05FRURfREVDTEFSQVRJT04o cmVhbGxvYykNCmRpZmYgLS1leGNsdWRlICcqficgLS1leGNsdWRlICcqLm9y aWcnIC0tZXhjbHVkZSAnKi5yZWonIC0tZXhjbHVkZSAnLiMqJyAtLWV4Y2x1 ZGUgJyoubycgLS1leGNsdWRlIENWUyAtLWV4Y2x1ZGUgU0NDUyAtLWV4Y2x1 ZGUgUkNTIC0tZXhjbHVkZSAnLiouZmxhZ3MnIC0tZXhjbHVkZSAuY3ZzaWdu b3JlIC0tZXhjbHVkZSAuZGVwZW5kIC11ciBnZGItNS4yLjEvZ2RiL29iamZp bGVzLmMgZ2RiLTUuMi4xLnNlcGFyYXRlX2RlYnVnX3N5bWJvbHMvZ2RiL29i amZpbGVzLmMNCi0tLSBnZGItNS4yLjEvZ2RiL29iamZpbGVzLmMJVGh1IERl YyAgNiAyMTo1OToxMSAyMDAxDQorKysgZ2RiLTUuMi4xLnNlcGFyYXRlX2Rl YnVnX3N5bWJvbHMvZ2RiL29iamZpbGVzLmMJTW9uIEF1ZyAyNiAxMDoyMTox MiAyMDAyDQpAQCAtMzI1LDYgKzMyNSwyNyBAQA0KICAgcmV0dXJuIChvYmpm aWxlKTsNCiB9DQogDQordm9pZA0KK3B1dF9vYmpmaWxlX2JlZm9yZSAoc3Ry dWN0IG9iamZpbGUgKm9iamZpbGUsIHN0cnVjdCBvYmpmaWxlICpiZWZvcmVf dGhpcykNCit7DQorICBzdHJ1Y3Qgb2JqZmlsZSAqKm9ianA7DQorDQorICB1 bmxpbmtfb2JqZmlsZSAob2JqZmlsZSk7DQorICANCisgIGZvciAob2JqcCA9 ICZvYmplY3RfZmlsZXM7ICpvYmpwICE9IE5VTEw7IG9ianAgPSAmKCgqb2Jq cCktPm5leHQpKQ0KKyAgICB7DQorICAgICAgaWYgKCpvYmpwID09IGJlZm9y ZV90aGlzKQ0KKwl7DQorCSAgb2JqZmlsZS0+bmV4dCA9ICpvYmpwOw0KKwkg ICpvYmpwID0gb2JqZmlsZTsNCisJICByZXR1cm47DQorCX0NCisgICAgfQ0K KyAgDQorICBpbnRlcm5hbF9lcnJvciAoX19GSUxFX18sIF9fTElORV9fLA0K KwkJICAicHV0X29iamZpbGVfYmVmb3JlOiBiZWZvcmUgb2JqZmlsZSBub3Qg aW4gbGlzdCIpOw0KK30NCisNCiAvKiBQdXQgT0JKRklMRSBhdCB0aGUgZnJv bnQgb2YgdGhlIGxpc3QuICAqLw0KIA0KIHZvaWQNCkBAIC0zOTcsNiArNDE4 LDE4IEBADQogdm9pZA0KIGZyZWVfb2JqZmlsZSAoc3RydWN0IG9iamZpbGUg Km9iamZpbGUpDQogew0KKyAgaWYgKG9iamZpbGUtPnNlcGFyYXRlX2RlYnVn X29iamZpbGUpDQorICAgIHsNCisgICAgICBmcmVlX29iamZpbGUgKG9iamZp bGUtPnNlcGFyYXRlX2RlYnVnX29iamZpbGUpOw0KKyAgICB9DQorICANCisg IGlmIChvYmpmaWxlLT5zZXBhcmF0ZV9kZWJ1Z19vYmpmaWxlX2JhY2tsaW5r KQ0KKyAgICB7DQorICAgICAgLyogV2UgZnJlZWQgdGhlIHNlcGFyYXRlIGRl YnVnIGZpbGUsIG1ha2Ugc3VyZSB0aGUgYmFzZSBvYmpmaWxlDQorCSBkb2Vz bid0IHJlZmVyZW5jZSBpdC4gICovDQorICAgICAgb2JqZmlsZS0+c2VwYXJh dGVfZGVidWdfb2JqZmlsZV9iYWNrbGluay0+c2VwYXJhdGVfZGVidWdfb2Jq ZmlsZSA9IE5VTEw7DQorICAgIH0NCisgIA0KICAgLyogRmlyc3QgZG8gYW55 IHN5bWJvbCBmaWxlIHNwZWNpZmljIGFjdGlvbnMgcmVxdWlyZWQgd2hlbiB3 ZSBhcmUNCiAgICAgIGZpbmlzaGVkIHdpdGggYSBwYXJ0aWN1bGFyIHN5bWJv bCBmaWxlLiAgTm90ZSB0aGF0IGlmIHRoZSBvYmpmaWxlDQogICAgICBpcyB1 c2luZyByZXVzYWJsZSBzeW1ib2wgaW5mb3JtYXRpb24gKHZpYSBtbWFsbG9j KSB0aGVuIGVhY2ggb2YNCmRpZmYgLS1leGNsdWRlICcqficgLS1leGNsdWRl ICcqLm9yaWcnIC0tZXhjbHVkZSAnKi5yZWonIC0tZXhjbHVkZSAnLiMqJyAt LWV4Y2x1ZGUgJyoubycgLS1leGNsdWRlIENWUyAtLWV4Y2x1ZGUgU0NDUyAt LWV4Y2x1ZGUgUkNTIC0tZXhjbHVkZSAnLiouZmxhZ3MnIC0tZXhjbHVkZSAu Y3ZzaWdub3JlIC0tZXhjbHVkZSAuZGVwZW5kIC11ciBnZGItNS4yLjEvZ2Ri L29iamZpbGVzLmggZ2RiLTUuMi4xLnNlcGFyYXRlX2RlYnVnX3N5bWJvbHMv Z2RiL29iamZpbGVzLmgNCi0tLSBnZGItNS4yLjEvZ2RiL29iamZpbGVzLmgJ U2F0IEp1biAyOSAwMDowNTo0NyAyMDAyDQorKysgZ2RiLTUuMi4xLnNlcGFy YXRlX2RlYnVnX3N5bWJvbHMvZ2RiL29iamZpbGVzLmgJTW9uIEF1ZyAyNiAx NDo1NzoxNSAyMDAyDQpAQCAtNDA5LDYgKzQwOSw5IEBADQogICAgIEV4cG9y dEVudHJ5ICpleHBvcnRfbGlzdDsNCiAgICAgaW50IGV4cG9ydF9saXN0X3Np emU7DQogDQorICAgIHN0cnVjdCBvYmpmaWxlICpzZXBhcmF0ZV9kZWJ1Z19v YmpmaWxlOw0KKyAgICBzdHJ1Y3Qgb2JqZmlsZSAqc2VwYXJhdGVfZGVidWdf b2JqZmlsZV9iYWNrbGluazsNCisgICAgDQogICAgIC8qIFBsYWNlIHRvIHN0 YXNoIHZhcmlvdXMgc3RhdGlzdGljcyBhYm91dCB0aGlzIG9iamZpbGUgKi8N CiAgICAgICBPQkpTVEFUUzsNCiAgIH07DQpAQCAtNTAwLDYgKzUwMyw4IEBA DQogDQogZXh0ZXJuIGludCBidWlsZF9vYmpmaWxlX3NlY3Rpb25fdGFibGUg KHN0cnVjdCBvYmpmaWxlICopOw0KIA0KK2V4dGVybiB2b2lkIHB1dF9vYmpm aWxlX2JlZm9yZSAoc3RydWN0IG9iamZpbGUgKiwgc3RydWN0IG9iamZpbGUg Kik7DQorDQogZXh0ZXJuIHZvaWQgb2JqZmlsZV90b19mcm9udCAoc3RydWN0 IG9iamZpbGUgKik7DQogDQogZXh0ZXJuIHZvaWQgdW5saW5rX29iamZpbGUg KHN0cnVjdCBvYmpmaWxlICopOw0KZGlmZiAtLWV4Y2x1ZGUgJyp+JyAtLWV4 Y2x1ZGUgJyoub3JpZycgLS1leGNsdWRlICcqLnJlaicgLS1leGNsdWRlICcu IyonIC0tZXhjbHVkZSAnKi5vJyAtLWV4Y2x1ZGUgQ1ZTIC0tZXhjbHVkZSBT Q0NTIC0tZXhjbHVkZSBSQ1MgLS1leGNsdWRlICcuKi5mbGFncycgLS1leGNs dWRlIC5jdnNpZ25vcmUgLS1leGNsdWRlIC5kZXBlbmQgLXVyIGdkYi01LjIu MS9nZGIvc3ltZmlsZS5jIGdkYi01LjIuMS5zZXBhcmF0ZV9kZWJ1Z19zeW1i b2xzL2dkYi9zeW1maWxlLmMNCi0tLSBnZGItNS4yLjEvZ2RiL3N5bWZpbGUu YwlTYXQgSnVuIDIyIDE4OjQ5OjMzIDIwMDINCisrKyBnZGItNS4yLjEuc2Vw YXJhdGVfZGVidWdfc3ltYm9scy9nZGIvc3ltZmlsZS5jCU1vbiBBdWcgMjYg MTc6MTY6NDAgMjAwMg0KQEAgLTE2MCw2ICsxNjAsOCBAQA0KIA0KIHN0YXRp YyB2b2lkIGluZm9fZXh0X2xhbmdfY29tbWFuZCAoY2hhciAqYXJncywgaW50 IGZyb21fdHR5KTsNCiANCitzdGF0aWMgY2hhciAqZmluZF9zZXBhcmF0ZV9k ZWJ1Z19maWxlIChzdHJ1Y3Qgb2JqZmlsZSAqb2JqZmlsZSwgY29uc3QgY2hh ciAqbmFtZSk7DQorDQogc3RhdGljIHZvaWQgaW5pdF9maWxlbmFtZV9sYW5n dWFnZV90YWJsZSAodm9pZCk7DQogDQogdm9pZCBfaW5pdGlhbGl6ZV9zeW1m aWxlICh2b2lkKTsNCkBAIC04MzYsNyArODM5LDEyIEBADQogew0KICAgc3Ry dWN0IG9iamZpbGUgKm9iamZpbGU7DQogICBzdHJ1Y3QgcGFydGlhbF9zeW10 YWIgKnBzeW10YWI7DQorICBjaGFyICpkZWJ1Z2ZpbGU7DQogICBiZmQgKmFi ZmQ7DQorICBzdHJ1Y3Qgc2VjdGlvbl9hZGRyX2luZm8gb3JpZ19hZGRyczsN CisgIA0KKyAgaWYgKGFkZHJzKQ0KKyAgICBvcmlnX2FkZHJzID0gKmFkZHJz Ow0KIA0KICAgLyogT3BlbiBhIGJmZCBmb3IgdGhlIGZpbGUsIGFuZCBnaXZl IHVzZXIgYSBjaGFuY2UgdG8gYnVycCBpZiB3ZSdkIGJlDQogICAgICBpbnRl cmFjdGl2ZWx5IHdpcGluZyBvdXQgYW55IGV4aXN0aW5nIHN5bWJvbHMuICAq Lw0KQEAgLTkyNiw2ICs5MzQsMjAgQEANCiAgIGlmICh0YXJnZXRfbmV3X29i amZpbGVfaG9vaykNCiAgICAgdGFyZ2V0X25ld19vYmpmaWxlX2hvb2sgKG9i amZpbGUpOw0KIA0KKyAgZGVidWdmaWxlID0gZmluZF9zZXBhcmF0ZV9kZWJ1 Z19maWxlIChvYmpmaWxlLCBuYW1lKTsNCisgIGlmIChkZWJ1Z2ZpbGUpDQor ICAgIHsNCisgICAgICBwcmludGZfZmlsdGVyZWQgKCJsb2FkaW5nIHNlcGFy YXRlIGRlYnVnIGluZm8gZnJvbSAnJXMnXG4iLCBkZWJ1Z2ZpbGUpOw0KKw0K KyAgICAgIG9iamZpbGUtPnNlcGFyYXRlX2RlYnVnX29iamZpbGUgPSBzeW1i b2xfZmlsZV9hZGQgKGRlYnVnZmlsZSwgZnJvbV90dHksIChhZGRycyAhPSBO VUxMKSA/ICZvcmlnX2FkZHJzIDogTlVMTCwgMCwgZmxhZ3MpOw0KKw0KKyAg ICAgIC8qIFB1dCB0aGUgc2VwYXJhdGUgZGVidWcgb2JqZWN0IGJlZm9yZSB0 aGUgbm9ybWFsIG9uZSwgdGhpcyBpcyBzbyB0aGF0DQorICAgICAgICAgdXNh Z2Ugb2YgdGhlIEFMTF9PQkpGSUxFU19TQUZFIG1hY3JvIHdpbGwgc3RheSBz YWZlLiAqLw0KKyAgICAgIHB1dF9vYmpmaWxlX2JlZm9yZSAob2JqZmlsZS0+ c2VwYXJhdGVfZGVidWdfb2JqZmlsZSwgb2JqZmlsZSk7DQorICAgICAgDQor ICAgICAgeGZyZWUgKGRlYnVnZmlsZSk7DQorICAgIH0NCisgIA0KICAgcmV0 dXJuIChvYmpmaWxlKTsNCiB9DQogDQpAQCAtOTg1LDYgKzEwMDcsMTg4IEBA DQogI2VuZGlmDQogfQ0KIA0KK3N0YXRpYyB1bnNpZ25lZCBsb25nIGNyYzMy ICh1bnNpZ25lZCBsb25nIGNyYywgdW5zaWduZWQgY2hhciAqYnVmLCBzaXpl X3QgbGVuKQ0KK3sNCisgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBsb25nIGNy YzMyX3RhYmxlWzI1Nl0gPQ0KKyAgICB7DQorICAgICAgMHgwMDAwMDAwMCwg MHg3NzA3MzA5NiwgMHhlZTBlNjEyYywgMHg5OTA5NTFiYSwgMHgwNzZkYzQx OSwNCisgICAgICAweDcwNmFmNDhmLCAweGU5NjNhNTM1LCAweDllNjQ5NWEz LCAweDBlZGI4ODMyLCAweDc5ZGNiOGE0LA0KKyAgICAgIDB4ZTBkNWU5MWUs IDB4OTdkMmQ5ODgsIDB4MDliNjRjMmIsIDB4N2ViMTdjYmQsIDB4ZTdiODJk MDcsDQorICAgICAgMHg5MGJmMWQ5MSwgMHgxZGI3MTA2NCwgMHg2YWIwMjBm MiwgMHhmM2I5NzE0OCwgMHg4NGJlNDFkZSwNCisgICAgICAweDFhZGFkNDdk LCAweDZkZGRlNGViLCAweGY0ZDRiNTUxLCAweDgzZDM4NWM3LCAweDEzNmM5 ODU2LA0KKyAgICAgIDB4NjQ2YmE4YzAsIDB4ZmQ2MmY5N2EsIDB4OGE2NWM5 ZWMsIDB4MTQwMTVjNGYsIDB4NjMwNjZjZDksDQorICAgICAgMHhmYTBmM2Q2 MywgMHg4ZDA4MGRmNSwgMHgzYjZlMjBjOCwgMHg0YzY5MTA1ZSwgMHhkNTYw NDFlNCwNCisgICAgICAweGEyNjc3MTcyLCAweDNjMDNlNGQxLCAweDRiMDRk NDQ3LCAweGQyMGQ4NWZkLCAweGE1MGFiNTZiLA0KKyAgICAgIDB4MzViNWE4 ZmEsIDB4NDJiMjk4NmMsIDB4ZGJiYmM5ZDYsIDB4YWNiY2Y5NDAsIDB4MzJk ODZjZTMsDQorICAgICAgMHg0NWRmNWM3NSwgMHhkY2Q2MGRjZiwgMHhhYmQx M2Q1OSwgMHgyNmQ5MzBhYywgMHg1MWRlMDAzYSwNCisgICAgICAweGM4ZDc1 MTgwLCAweGJmZDA2MTE2LCAweDIxYjRmNGI1LCAweDU2YjNjNDIzLCAweGNm YmE5NTk5LA0KKyAgICAgIDB4YjhiZGE1MGYsIDB4MjgwMmI4OWUsIDB4NWYw NTg4MDgsIDB4YzYwY2Q5YjIsIDB4YjEwYmU5MjQsDQorICAgICAgMHgyZjZm N2M4NywgMHg1ODY4NGMxMSwgMHhjMTYxMWRhYiwgMHhiNjY2MmQzZCwgMHg3 NmRjNDE5MCwNCisgICAgICAweDAxZGI3MTA2LCAweDk4ZDIyMGJjLCAweGVm ZDUxMDJhLCAweDcxYjE4NTg5LCAweDA2YjZiNTFmLA0KKyAgICAgIDB4OWZi ZmU0YTUsIDB4ZThiOGQ0MzMsIDB4NzgwN2M5YTIsIDB4MGYwMGY5MzQsIDB4 OTYwOWE4OGUsDQorICAgICAgMHhlMTBlOTgxOCwgMHg3ZjZhMGRiYiwgMHgw ODZkM2QyZCwgMHg5MTY0NmM5NywgMHhlNjYzNWMwMSwNCisgICAgICAweDZi NmI1MWY0LCAweDFjNmM2MTYyLCAweDg1NjUzMGQ4LCAweGYyNjIwMDRlLCAw eDZjMDY5NWVkLA0KKyAgICAgIDB4MWIwMWE1N2IsIDB4ODIwOGY0YzEsIDB4 ZjUwZmM0NTcsIDB4NjViMGQ5YzYsIDB4MTJiN2U5NTAsDQorICAgICAgMHg4 YmJlYjhlYSwgMHhmY2I5ODg3YywgMHg2MmRkMWRkZiwgMHgxNWRhMmQ0OSwg MHg4Y2QzN2NmMywNCisgICAgICAweGZiZDQ0YzY1LCAweDRkYjI2MTU4LCAw eDNhYjU1MWNlLCAweGEzYmMwMDc0LCAweGQ0YmIzMGUyLA0KKyAgICAgIDB4 NGFkZmE1NDEsIDB4M2RkODk1ZDcsIDB4YTRkMWM0NmQsIDB4ZDNkNmY0ZmIs IDB4NDM2OWU5NmEsDQorICAgICAgMHgzNDZlZDlmYywgMHhhZDY3ODg0Niwg MHhkYTYwYjhkMCwgMHg0NDA0MmQ3MywgMHgzMzAzMWRlNSwNCisgICAgICAw eGFhMGE0YzVmLCAweGRkMGQ3Y2M5LCAweDUwMDU3MTNjLCAweDI3MDI0MWFh LCAweGJlMGIxMDEwLA0KKyAgICAgIDB4YzkwYzIwODYsIDB4NTc2OGI1MjUs IDB4MjA2Zjg1YjMsIDB4Yjk2NmQ0MDksIDB4Y2U2MWU0OWYsDQorICAgICAg MHg1ZWRlZjkwZSwgMHgyOWQ5Yzk5OCwgMHhiMGQwOTgyMiwgMHhjN2Q3YThi NCwgMHg1OWIzM2QxNywNCisgICAgICAweDJlYjQwZDgxLCAweGI3YmQ1YzNi LCAweGMwYmE2Y2FkLCAweGVkYjg4MzIwLCAweDlhYmZiM2I2LA0KKyAgICAg IDB4MDNiNmUyMGMsIDB4NzRiMWQyOWEsIDB4ZWFkNTQ3MzksIDB4OWRkMjc3 YWYsIDB4MDRkYjI2MTUsDQorICAgICAgMHg3M2RjMTY4MywgMHhlMzYzMGIx MiwgMHg5NDY0M2I4NCwgMHgwZDZkNmEzZSwgMHg3YTZhNWFhOCwNCisgICAg ICAweGU0MGVjZjBiLCAweDkzMDlmZjlkLCAweDBhMDBhZTI3LCAweDdkMDc5 ZWIxLCAweGYwMGY5MzQ0LA0KKyAgICAgIDB4ODcwOGEzZDIsIDB4MWUwMWYy NjgsIDB4NjkwNmMyZmUsIDB4Zjc2MjU3NWQsIDB4ODA2NTY3Y2IsDQorICAg ICAgMHgxOTZjMzY3MSwgMHg2ZTZiMDZlNywgMHhmZWQ0MWI3NiwgMHg4OWQz MmJlMCwgMHgxMGRhN2E1YSwNCisgICAgICAweDY3ZGQ0YWNjLCAweGY5Yjlk ZjZmLCAweDhlYmVlZmY5LCAweDE3YjdiZTQzLCAweDYwYjA4ZWQ1LA0KKyAg ICAgIDB4ZDZkNmEzZTgsIDB4YTFkMTkzN2UsIDB4MzhkOGMyYzQsIDB4NGZk ZmYyNTIsIDB4ZDFiYjY3ZjEsDQorICAgICAgMHhhNmJjNTc2NywgMHgzZmI1 MDZkZCwgMHg0OGIyMzY0YiwgMHhkODBkMmJkYSwgMHhhZjBhMWI0YywNCisg ICAgICAweDM2MDM0YWY2LCAweDQxMDQ3YTYwLCAweGRmNjBlZmMzLCAweGE4 NjdkZjU1LCAweDMxNmU4ZWVmLA0KKyAgICAgIDB4NDY2OWJlNzksIDB4Y2I2 MWIzOGMsIDB4YmM2NjgzMWEsIDB4MjU2ZmQyYTAsIDB4NTI2OGUyMzYsDQor ICAgICAgMHhjYzBjNzc5NSwgMHhiYjBiNDcwMywgMHgyMjAyMTZiOSwgMHg1 NTA1MjYyZiwgMHhjNWJhM2JiZSwNCisgICAgICAweGIyYmQwYjI4LCAweDJi YjQ1YTkyLCAweDVjYjM2YTA0LCAweGMyZDdmZmE3LCAweGI1ZDBjZjMxLA0K KyAgICAgIDB4MmNkOTllOGIsIDB4NWJkZWFlMWQsIDB4OWI2NGMyYjAsIDB4 ZWM2M2YyMjYsIDB4NzU2YWEzOWMsDQorICAgICAgMHgwMjZkOTMwYSwgMHg5 YzA5MDZhOSwgMHhlYjBlMzYzZiwgMHg3MjA3Njc4NSwgMHgwNTAwNTcxMywN CisgICAgICAweDk1YmY0YTgyLCAweGUyYjg3YTE0LCAweDdiYjEyYmFlLCAw eDBjYjYxYjM4LCAweDkyZDI4ZTliLA0KKyAgICAgIDB4ZTVkNWJlMGQsIDB4 N2NkY2VmYjcsIDB4MGJkYmRmMjEsIDB4ODZkM2QyZDQsIDB4ZjFkNGUyNDIs DQorICAgICAgMHg2OGRkYjNmOCwgMHgxZmRhODM2ZSwgMHg4MWJlMTZjZCwg MHhmNmI5MjY1YiwgMHg2ZmIwNzdlMSwNCisgICAgICAweDE4Yjc0Nzc3LCAw eDg4MDg1YWU2LCAweGZmMGY2YTcwLCAweDY2MDYzYmNhLCAweDExMDEwYjVj LA0KKyAgICAgIDB4OGY2NTllZmYsIDB4Zjg2MmFlNjksIDB4NjE2YmZmZDMs IDB4MTY2Y2NmNDUsIDB4YTAwYWUyNzgsDQorICAgICAgMHhkNzBkZDJlZSwg MHg0ZTA0ODM1NCwgMHgzOTAzYjNjMiwgMHhhNzY3MjY2MSwgMHhkMDYwMTZm NywNCisgICAgICAweDQ5Njk0NzRkLCAweDNlNmU3N2RiLCAweGFlZDE2YTRh LCAweGQ5ZDY1YWRjLCAweDQwZGYwYjY2LA0KKyAgICAgIDB4MzdkODNiZjAs IDB4YTliY2FlNTMsIDB4ZGViYjllYzUsIDB4NDdiMmNmN2YsIDB4MzBiNWZm ZTksDQorICAgICAgMHhiZGJkZjIxYywgMHhjYWJhYzI4YSwgMHg1M2IzOTMz MCwgMHgyNGI0YTNhNiwgMHhiYWQwMzYwNSwNCisgICAgICAweGNkZDcwNjkz LCAweDU0ZGU1NzI5LCAweDIzZDk2N2JmLCAweGIzNjY3YTJlLCAweGM0NjE0 YWI4LA0KKyAgICAgIDB4NWQ2ODFiMDIsIDB4MmE2ZjJiOTQsIDB4YjQwYmJl MzcsIDB4YzMwYzhlYTEsIDB4NWEwNWRmMWIsDQorICAgICAgMHgyZDAyZWY4 ZA0KKyAgICB9Ow0KKyAgdW5zaWduZWQgY2hhciAqZW5kOw0KKw0KKyAgY3Jj ID0gfmNyYyAmIDB4ZmZmZmZmZmY7DQorICBmb3IgKGVuZCA9IGJ1ZiArIGxl bjsgYnVmIDwgZW5kOyArK2J1ZikNCisgICAgY3JjID0gY3JjMzJfdGFibGVb KGNyYyBeICpidWYpICYgMHhmZl0gXiAoY3JjID4+IDgpOw0KKyAgcmV0dXJu IH5jcmMgJiAweGZmZmZmZmZmOzsNCit9DQorDQoraW50DQorc2VwYXJhdGVf ZGVidWdfZmlsZV9leGlzdHMgKGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVk IGxvbmcgY3JjKQ0KK3sNCisgIHVuc2lnbmVkIGxvbmcgZmlsZV9jcmMgPSAw Ow0KKyAgaW50IGZkOw0KKyAgY2hhciBidWZmZXJbOCoxMDI0XTsNCisgIGlu dCBjb3VudDsNCisNCisgIGZkID0gb3BlbiAobmFtZSwgT19SRE9OTFkpOw0K KyAgaWYgKGZkIDwgMCkNCisgICAgcmV0dXJuIDA7DQorDQorICB3aGlsZSAo KGNvdW50ID0gcmVhZCAoZmQsIGJ1ZmZlciwgc2l6ZW9mIChidWZmZXIpKSkg PiAwKQ0KKyAgICBmaWxlX2NyYyA9IGNyYzMyIChmaWxlX2NyYywgYnVmZmVy LCBjb3VudCk7DQorDQorICBjbG9zZSAoZmQpOw0KKw0KKyAgcmV0dXJuIGNy YyA9PSBmaWxlX2NyYzsNCit9DQorDQorc3RhdGljIGNoYXIgKmRlYnVnX2Zp bGVfc2VhcmNoX3BhdGggPSBOVUxMOw0KKw0KK3N0YXRpYyBjaGFyICoNCitm aW5kX3NlcGFyYXRlX2RlYnVnX2ZpbGUgKHN0cnVjdCBvYmpmaWxlICpvYmpm aWxlLCBjb25zdCBjaGFyICpuYW1lKQ0KK3sNCisgIGFzZWN0aW9uICpzZWN0 Ow0KKyAgY2hhciAqYmFzZW5hbWU7DQorICBjaGFyICpkaXI7DQorICBjaGFy ICpkZWJ1Z2ZpbGU7DQorICBjaGFyICpuYW1lX2NvcHk7DQorICBiZmRfc2l6 ZV90eXBlIGRlYnVnbGlua19zaXplOw0KKyAgdW5zaWduZWQgbG9uZyBjcmMz MjsNCisgIGludCBjcmNfb2Zmc2V0Ow0KKyAgdW5zaWduZWQgY2hhciAqY3Jj X2RhdGE7DQorICB1bnNpZ25lZCBjaGFyICpwOw0KKw0KKyAgc2VjdCA9IGJm ZF9nZXRfc2VjdGlvbl9ieV9uYW1lIChvYmpmaWxlLT5vYmZkLCAiLmdudV9k ZWJ1Z2xpbmsiKTsNCisNCisgIGlmIChzZWN0ID09IE5VTEwpDQorICAgIHJl dHVybiBOVUxMOw0KKw0KKyAgZGVidWdsaW5rX3NpemUgPSBiZmRfc2VjdGlv bl9zaXplIChvYmpmaWxlLT5vYmZkLCBzZWN0KTsNCisgIA0KKyAgYmFzZW5h bWUgPSBhbGxvY2EgKGRlYnVnbGlua19zaXplKTsNCisgIGJmZF9nZXRfc2Vj dGlvbl9jb250ZW50cyAob2JqZmlsZS0+b2JmZCwgc2VjdCwgYmFzZW5hbWUs DQorCQkJICAgIChmaWxlX3B0cikwLCAoYmZkX3NpemVfdHlwZSlkZWJ1Z2xp bmtfc2l6ZSk7DQorDQorICAvKiBDcmMgdmFsdWUgaXMgc3RvcmVkIGFmdGVy IHRoZSBmaWxlbmFtZSwgYWxpZ25lZCB1cCB0byA0IGJ5dGVzLiAqLw0KKyAg Y3JjX29mZnNldCA9IHN0cmxlbiAoYmFzZW5hbWUpICsgMTsNCisgIGlmIChj cmNfb2Zmc2V0ICYgMykNCisgICAgY3JjX29mZnNldCArPSA0IC0gKGNyY19v ZmZzZXQgJiAzKTsNCisgIGNyY19kYXRhID0gYmFzZW5hbWUgKyBjcmNfb2Zm c2V0Ow0KKw0KKyAgY3JjMzIgPSAwOw0KKyAgaWYgKFRBUkdFVF9CWVRFX09S REVSID09IEJGRF9FTkRJQU5fQklHKQ0KKyAgICB7DQorICAgICAgZm9yIChw ID0gY3JjX2RhdGE7IHAgPCBjcmNfZGF0YSArIDQ7ICsrcCkNCisJY3JjMzIg PSAoY3JjMzIgPDwgOCkgfCAqcDsNCisgICAgfQ0KKyAgZWxzZQ0KKyAgICB7 DQorICAgICAgZm9yIChwID0gY3JjX2RhdGEgKyA0IC0gMTsgcCA+PSBjcmNf ZGF0YTsgLS1wKQ0KKwljcmMzMiA9IChjcmMzMiA8PCA4KSB8ICpwOw0KKyAg ICB9DQorICANCisgIGRpciA9IHhzdHJkdXAgKG5hbWUpOw0KKyAgcCA9IHN0 cnJjaHIgKGRpciwgJy8nKTsNCisgIGlmIChwICE9IE5VTEwpDQorICAgIHsN CisgICAgICAqKHArMSkgPSAwOw0KKyAgICB9DQorICBlbHNlDQorICAgIHsN CisgICAgICAqZGlyID0gMDsNCisgICAgfQ0KKw0KKyAgZGVidWdmaWxlID0g YWxsb2NhIChzdHJsZW4gKGRlYnVnX2ZpbGVfc2VhcmNoX3BhdGgpICsgMSAr DQorCQkgICAgICBzdHJsZW4gKGRpcikgKyBzdHJsZW4gKCIuZGVidWcvIikg KyBzdHJsZW4gKGJhc2VuYW1lKSArIDEpOw0KKw0KKyAgLyogRmlyc3QgdHJ5 IGluIHRoZSBzYW1lIGRpcmVjdG9yeSBhcyB0aGUgb3JpZ2luYWwgZmlsZTog Ki8NCisgIHN0cmNweSAoZGVidWdmaWxlLCBkaXIpOw0KKyAgc3RyY2F0IChk ZWJ1Z2ZpbGUsIGJhc2VuYW1lKTsNCisNCisgIGlmIChzZXBhcmF0ZV9kZWJ1 Z19maWxlX2V4aXN0cyAoZGVidWdmaWxlLCBjcmMzMikpDQorICAgIHsNCisg ICAgICB4ZnJlZSAoZGlyKTsNCisgICAgICByZXR1cm4geHN0cmR1cCAoZGVi dWdmaWxlKTsNCisgICAgfQ0KKyAgDQorICAvKiBUaGVuIHRyeSBpbiBhIHN1 YmRpcmVjdG9yeSBjYWxsZWQgLmRlYnVnICovDQorICBzdHJjcHkgKGRlYnVn ZmlsZSwgZGlyKTsNCisgIHN0cmNhdCAoZGVidWdmaWxlLCAiLmRlYnVnLyIp Ow0KKyAgc3RyY2F0IChkZWJ1Z2ZpbGUsIGJhc2VuYW1lKTsNCisNCisgIGlm IChzZXBhcmF0ZV9kZWJ1Z19maWxlX2V4aXN0cyAoZGVidWdmaWxlLCBjcmMz MikpDQorICAgIHsNCisgICAgICB4ZnJlZSAoZGlyKTsNCisgICAgICByZXR1 cm4geHN0cmR1cCAoZGVidWdmaWxlKTsNCisgICAgfQ0KKyAgDQorICAvKiBU aGVuIHRyeSBpbiB0aGUgZ2xvYmFsIGRlYnVnZmlsZSBkaXJlY3RvcnkgKi8N CisgIHN0cmNweSAoZGVidWdmaWxlLCBkZWJ1Z19maWxlX3NlYXJjaF9wYXRo KTsNCisgIHN0cmNhdCAoZGVidWdmaWxlLCAiLyIpOw0KKyAgc3RyY2F0IChk ZWJ1Z2ZpbGUsIGRpcik7DQorICBzdHJjYXQgKGRlYnVnZmlsZSwgIi8iKTsN CisgIHN0cmNhdCAoZGVidWdmaWxlLCBiYXNlbmFtZSk7DQorDQorICBpZiAo c2VwYXJhdGVfZGVidWdfZmlsZV9leGlzdHMgKGRlYnVnZmlsZSwgY3JjMzIp KQ0KKyAgICB7DQorICAgICAgeGZyZWUgKGRpcik7DQorICAgICAgcmV0dXJu IHhzdHJkdXAgKGRlYnVnZmlsZSk7DQorICAgIH0NCisgIA0KKyAgcmV0dXJu IE5VTEw7DQorfQ0KKw0KKw0KIC8qIFRoaXMgaXMgdGhlIHN5bWJvbC1maWxl IGNvbW1hbmQuICBSZWFkIHRoZSBmaWxlLCBhbmFseXplIGl0cw0KICAgIHN5 bWJvbHMsIGFuZCBhZGQgYSBzdHJ1Y3Qgc3ltdGFiIHRvIGEgc3ltdGFiIGxp c3QuICBUaGUgc3ludGF4IG9mDQogICAgdGhlIGNvbW1hbmQgaXMgcmF0aGVy IGJpemFycmUtLSgxKSBidWlsZGFyZ3YgaW1wbGVtZW50cyB2YXJpb3VzDQpA QCAtMzMzNiw0ICszNTQwLDE3IEBADQogCQkgICJjYWNoZS5cbiIsDQogCQkg ICZzZXRsaXN0KSwNCiAgICAgICZzaG93bGlzdCk7DQorDQorICBkZWJ1Z19m aWxlX3NlYXJjaF9wYXRoID0geHN0cmR1cCAoREVCVUdESVIpOw0KKyAgYyA9 IGFkZF9zZXRfY21kICgiZGVidWctZmlsZS1zZWFyY2gtcGF0aCIsIGNsYXNz X3N1cHBvcnQsIHZhcl9zdHJpbmcsDQorCQkgICAoY2hhciAqKSAmZGVidWdf ZmlsZV9zZWFyY2hfcGF0aCwNCisJCSAgICJTZXQgdGhlIHNlYXJjaCBwYXRo IGZvciBsb2FkaW5nIHNlcGFyYXRlIGRlYnVnIHN5bWJvbHMuXG4iDQorCQkg ICAiU2VwYXJhdGUgZGVidWcgc3ltYm9scyBhcmUgZmlyc3Qgc2VhcmNoZWQg Zm9yIGluIHRoZSBzYW1lXG4iDQorCQkgICAiZGlyZWN0b3J5IGFzIHRoZSBi aW5hcnksIHRoZW4gaW4gdGhlIC5kZWJ1ZyBzdWJkaXJlY3RvcnksXG4iDQor CQkgICAiYW5kIGxhc3RseSBhdCB0aGUgcGF0aCBvZiB0aGUgZGlyZWN0b3J5 IG9mIHRoZSBiaW5hcnkgd2l0aFxuIg0KKwkJICAgInRoZSBnbG9iYWwgZGVi dWctZmlsZSBzZWFyY2ggcGF0aCBwcmVwZW5kZWRcbiIsDQorCQkgICAmc2V0 bGlzdCk7DQorICBhZGRfc2hvd19mcm9tX3NldCAoYywgJnNob3dsaXN0KTsN CisgIGMtPmNvbXBsZXRlciA9IGZpbGVuYW1lX2NvbXBsZXRlcjsNCisNCiB9 DQo= --279707962-2122298906-1030445970=:26451--