From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 20368 invoked by alias); 4 Mar 2009 19:26:40 -0000 Received: (qmail 20315 invoked by uid 22791); 4 Mar 2009 19:26:37 -0000 X-SWARE-Spam-Status: No, hits=-0.2 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_22,J_CHICKENPOX_35,J_CHICKENPOX_41,KAM_STOCKGEN,SARE_MSGID_LONG40,SPF_PASS X-Spam-Check-By: sourceware.org Received: from smtp-out.google.com (HELO smtp-out.google.com) (216.239.45.13) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Wed, 04 Mar 2009 19:26:32 +0000 Received: from zps75.corp.google.com (zps75.corp.google.com [172.25.146.75]) by smtp-out.google.com with ESMTP id n24JP0wN015450 for ; Wed, 4 Mar 2009 11:25:00 -0800 Received: from gxk21 (gxk21.prod.google.com [10.202.11.21]) by zps75.corp.google.com with ESMTP id n24JOfDa010062 for ; Wed, 4 Mar 2009 11:24:58 -0800 Received: by gxk21 with SMTP id 21so7916840gxk.6 for ; Wed, 04 Mar 2009 11:24:58 -0800 (PST) MIME-Version: 1.0 Received: by 10.142.162.9 with SMTP id k9mr79790wfe.159.1236194698335; Wed, 04 Mar 2009 11:24:58 -0800 (PST) In-Reply-To: References: <20090205030257.8A6073A6B7A@localhost> <8ac60eac0902061837p5885b812j8a26669e799702e1@mail.gmail.com> <8ac60eac0902181458g39dfbce9k63c3329528b0aad5@mail.gmail.com> <20090223010759.GA30997@adacore.com> <8ac60eac0902231012lb42bcb1q8b8cf19ad2ac192@mail.gmail.com> <8ac60eac0903021830w363783ear7d4c8fc1177d6448@mail.gmail.com> Date: Wed, 04 Mar 2009 19:26:00 -0000 Message-ID: <8ac60eac0903041124s1aafb562u225f268c4d1511dd@mail.gmail.com> Subject: Re: [patch] Fix a crash when displaying variables from shared library. From: Paul Pluzhnikov To: tromey@redhat.com Cc: Joel Brobecker , Pedro Alves , gdb-patches@sourceware.org Content-Type: multipart/mixed; boundary=000e0cd150b6de17d804645001a0 X-System-Of-Record: true X-IsSubscribed: yes 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 X-SW-Source: 2009-03/txt/msg00055.txt.bz2 --000e0cd150b6de17d804645001a0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-length: 1568 On Tue, Mar 3, 2009 at 4:48 PM, Tom Tromey wrote: > Paul> Is it ok to move observer notification to before > Paul> objfile_purge_solibs, or should I add a new notification? > > IMO it is ok to move this notification if you audit the existing users > to make sure they don't break. I ended up just swapping the order of clear_solib and objfile_purge_solibs in no_shared_libraries. AFAICT, objfile_purge_solibs is "lower level" and doesn't need anything from the solib list. Regtested on Linux/x86_64 with no regressions. > However, it seems to me that you could also do this another way, by > noting at parse time which objfiles are referenced by a given display, > and then arranging to require a re-parse when an objfile is destroyed. > I think the existing objfile_data machinery could be used for this. Thanks for the pointer. I tried that, but it ended up being very tangled and inefficient mess, and I abandoned this approach. Thanks, -- Paul Pluzhnikov ChangeLog: 2009-03-04 Paul Pluzhnikov * printcmd.c (do_one_display): Reparse exp_string. (display_uses_solib_p): New function. (clear_dangling_display_expressions): New function. (_initialize_printcmd): Add observer. * solib.c (no_shared_libraries): Swap order of calls to clear_solib and objfile_purge_solibs. testsuite/ChangeLog: 2009-02-04 Paul Pluzhnikov * solib-display.exp: New file. * solib-display-main.c: New file. * solib-display-lib.c: New file. --000e0cd150b6de17d804645001a0 Content-Type: text/plain; charset=US-ASCII; name="gdb-display-crash-20090304-1.txt" Content-Disposition: attachment; filename="gdb-display-crash-20090304-1.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_frwe7fnl0 Content-length: 15027 SW5kZXg6IHByaW50Y21kLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg ZmlsZTogL2N2cy9zcmMvc3JjL2dkYi9wcmludGNtZC5jLHYKcmV0cmlldmlu ZyByZXZpc2lvbiAxLjE0NApkaWZmIC11IC1wIC11IC1yMS4xNDQgcHJpbnRj bWQuYwotLS0gcHJpbnRjbWQuYwkyNSBGZWIgMjAwOSAxODoyNjo1MyAtMDAw MAkxLjE0NAorKysgcHJpbnRjbWQuYwk0IE1hciAyMDA5IDE5OjE3OjU2IC0w MDAwCkBAIC00Myw2ICs0MywxMSBAQAogI2luY2x1ZGUgImRpc2FzbS5oIgog I2luY2x1ZGUgImRmcC5oIgogI2luY2x1ZGUgInZhbHByaW50LmgiCisjaW5j bHVkZSAiZXhjZXB0aW9ucy5oIgorI2luY2x1ZGUgIm9ic2VydmVyLmgiCisj aW5jbHVkZSAic29saXN0LmgiCisjaW5jbHVkZSAic29saWIuaCIKKyNpbmNs dWRlICJwYXJzZXItZGVmcy5oIgogCiAjaWZkZWYgVFVJCiAjaW5jbHVkZSAi dHVpL3R1aS5oIgkJLyogRm9yIHR1aV9hY3RpdmUgZXQuYWwuICAgKi8KQEAg LTEzOTUsNyArMTQwMCw3IEBAIGRpc3BsYXlfY29tbWFuZCAoY2hhciAqZXhw LCBpbnQgZnJvbV90dHkKIAkgIGZtdC5jb3VudCA9IDA7CiAJfQogCi0gICAg ICBpbm5lcm1vc3RfYmxvY2sgPSAwOworICAgICAgaW5uZXJtb3N0X2Jsb2Nr ID0gTlVMTDsKICAgICAgIGV4cHIgPSBwYXJzZV9leHByZXNzaW9uIChleHAp OwogCiAgICAgICBuZXcgPSAoc3RydWN0IGRpc3BsYXkgKikgeG1hbGxvYyAo c2l6ZW9mIChzdHJ1Y3QgZGlzcGxheSkpOwpAQCAtMTUxOSw2ICsxNTI0LDI1 IEBAIGRvX29uZV9kaXNwbGF5IChzdHJ1Y3QgZGlzcGxheSAqZCkKICAgaWYg KGQtPmVuYWJsZWRfcCA9PSAwKQogICAgIHJldHVybjsKIAorICBpZiAoZC0+ ZXhwID09IE5VTEwpCisgICAgeworICAgICAgdm9sYXRpbGUgc3RydWN0IGdk Yl9leGNlcHRpb24gZXg7CisgICAgICBUUllfQ0FUQ0ggKGV4LCBSRVRVUk5f TUFTS19BTEwpCisJeworCSAgaW5uZXJtb3N0X2Jsb2NrID0gTlVMTDsKKwkg IGQtPmV4cCA9IHBhcnNlX2V4cHJlc3Npb24gKGQtPmV4cF9zdHJpbmcpOwor CSAgZC0+YmxvY2sgPSBpbm5lcm1vc3RfYmxvY2s7CisJfQorICAgICAgaWYg KGV4LnJlYXNvbiA8IDApCisJeworCSAgLyogQ2FuJ3QgcmUtcGFyc2UgdGhl IGV4cHJlc3Npb24uICBEaXNhYmxlIHRoaXMgZGlzcGxheSBpdGVtLiAgKi8K KwkgIGQtPmVuYWJsZWRfcCA9IDA7CisJICB3YXJuaW5nIChfKCJVbmFibGUg dG8gZGlzcGxheSBcIiVzXCI6ICVzIiksCisJCSAgIGQtPmV4cF9zdHJpbmcs IGV4Lm1lc3NhZ2UpOworCSAgcmV0dXJuOworCX0KKyAgICB9CisKICAgaWYg KGQtPmJsb2NrKQogICAgIHdpdGhpbl9jdXJyZW50X3Njb3BlID0gY29udGFp bmVkX2luIChnZXRfc2VsZWN0ZWRfYmxvY2sgKDApLCBkLT5ibG9jayk7CiAg IGVsc2UKQEAgLTE3MzEsNiArMTc1NSw3NCBAQCBkaXNhYmxlX2Rpc3BsYXlf Y29tbWFuZCAoY2hhciAqYXJncywgaW50CiAJICBwKys7CiAgICAgICB9CiB9 CisKKy8qIFJldHVybiAxIGlmIEQgdXNlcyBTT0xJQiAoYW5kIHdpbGwgYmVj b21lIGRhbmdsaW5nIHdoZW4gU09MSUIKKyAgIGlzIHVubG9hZGVkKSwgb3Ro ZXJ3aXNlIHJldHVybiAwLiAgKi8KKworc3RhdGljIGludAorZGlzcGxheV91 c2VzX3NvbGliX3AgKGNvbnN0IHN0cnVjdCBkaXNwbGF5ICpkLAorCQkgICAg ICBjb25zdCBzdHJ1Y3Qgc29fbGlzdCAqc29saWIpCit7CisgIGludCBpOwor ICBzdHJ1Y3QgZXhwcmVzc2lvbiAqY29uc3QgZXhwID0gZC0+ZXhwOworCisg IGlmIChkLT5ibG9jayAhPSBOVUxMICYmCisgICAgICBzb2xpYl9hZGRyZXNz IChkLT5ibG9jay0+c3RhcnRhZGRyKSA9PSBzb2xpYi0+c29fbmFtZSkKKyAg ICByZXR1cm4gMTsKKworICBmb3IgKGkgPSAwOyBpIDwgZXhwLT5uZWx0czsg KQorICAgIHsKKyAgICAgIGludCBhcmdzLCBvcGxlbiA9IDA7CisgICAgICBj b25zdCB1bmlvbiBleHBfZWxlbWVudCAqY29uc3QgZWx0cyA9IGV4cC0+ZWx0 czsKKworICAgICAgaWYgKGVsdHNbaV0ub3Bjb2RlID09IE9QX1ZBUl9WQUxV RSkKKwl7CisJICBjb25zdCBzdHJ1Y3QgYmxvY2sgKmNvbnN0IGJsb2NrID0g ZWx0c1tpICsgMV0uYmxvY2s7CisJICBjb25zdCBzdHJ1Y3Qgc3ltYm9sICpj b25zdCBzeW1ib2wgPSBlbHRzW2kgKyAyXS5zeW1ib2w7CisJICBjb25zdCBz dHJ1Y3Qgb2JqX3NlY3Rpb24gKmNvbnN0IHNlY3Rpb24gPQorCSAgICBTWU1C T0xfT0JKX1NFQ1RJT04gKHN5bWJvbCk7CisKKwkgIGdkYl9hc3NlcnQgKGVs dHNbaSArIDNdLm9wY29kZSA9PSBPUF9WQVJfVkFMVUUpOworCisJICBpZiAo YmxvY2sgIT0gTlVMTAorCSAgICAgICYmIHNvbGliX2FkZHJlc3MgKGJsb2Nr LT5zdGFydGFkZHIpID09IHNvbGliLT5zb19uYW1lKQorCSAgICByZXR1cm4g MTsKKworCSAgaWYgKHNlY3Rpb24gJiYgc2VjdGlvbi0+b2JqZmlsZSA9PSBz b2xpYi0+b2JqZmlsZSkKKwkgICAgcmV0dXJuIDE7CisJfQorICAgICAgZXhw LT5sYW5ndWFnZV9kZWZuLT5sYV9leHBfZGVzYy0+b3BlcmF0b3JfbGVuZ3Ro IChleHAsIGkgKyAxLAorCQkJCQkJCSZvcGxlbiwgJmFyZ3MpOworICAgICAg Z2RiX2Fzc2VydCAob3BsZW4gPiAwKTsKKyAgICAgIGkgKz0gb3BsZW47Cisg ICAgfQorICByZXR1cm4gMDsKK30KKworLyogZGlzcGxheV9jaGFpbiBpdGVt cyBwb2ludCB0byBibG9ja3MgYW5kIGV4cHJlc3Npb25zLiBTb21lIGV4cHJl c3Npb25zIGluCisgICB0dXJuIG1heSBwb2ludCB0byBzeW1ib2xzLgorICAg Qm90aCBzeW1ib2xzIGFuZCBibG9ja3MgYXJlIG9ic3RhY2tfYWxsb2MnZCBv biBvYmpmaWxlX3N0YWNrLCBhbmQgYXJlCisgICBvYnN0YWNrX2ZyZWUnZCB3 aGVuIGEgc2hhcmVkIGxpYnJhcnkgaXMgdW5sb2FkZWQuCisgICBDbGVhciBw b2ludGVycyB0aGF0IGFyZSBhYm91dCB0byBiZWNvbWUgZGFuZ2xpbmcuCisg ICBCb3RoIC5leHAgYW5kIC5ibG9jayBmaWVsZHMgd2lsbCBiZSByZXN0b3Jl ZCBuZXh0IHRpbWUgd2UgbmVlZCB0byBkaXNwbGF5CisgICBhbiBpdGVtIGJ5 IHJlLXBhcnNpbmcgLmV4cF9zdHJpbmcgZmllbGQgaW4gdGhlIG5ldyBleGVj dXRpb24gY29udGV4dC4gICovCisKK3N0YXRpYyB2b2lkCitjbGVhcl9kYW5n bGluZ19kaXNwbGF5X2V4cHJlc3Npb25zIChzdHJ1Y3Qgc29fbGlzdCAqc29s aWIpCit7CisgIHN0cnVjdCBkaXNwbGF5ICpkOworICBzdHJ1Y3Qgb2JqZmls ZSAqb2JqZmlsZSA9IE5VTEw7CisKKyAgZm9yIChkID0gZGlzcGxheV9jaGFp bjsgZDsgZCA9IGQtPm5leHQpCisgICAgeworICAgICAgaWYgKGQtPmV4cCAm JiBkaXNwbGF5X3VzZXNfc29saWJfcCAoZCwgc29saWIpKQorCXsKKwkgIHhm cmVlIChkLT5leHApOworCSAgZC0+ZXhwID0gTlVMTDsKKwkgIGQtPmJsb2Nr ID0gTlVMTDsKKwl9CisgICAgfQorfQogDAogCiAvKiBQcmludCB0aGUgdmFs dWUgaW4gc3RhY2sgZnJhbWUgRlJBTUUgb2YgYSB2YXJpYWJsZSBzcGVjaWZp ZWQgYnkgYQpAQCAtMjM2Nyw2ICsyNDU5LDggQEAgX2luaXRpYWxpemVfcHJp bnRjbWQgKHZvaWQpCiAKICAgY3VycmVudF9kaXNwbGF5X251bWJlciA9IC0x OwogCisgIG9ic2VydmVyX2F0dGFjaF9zb2xpYl91bmxvYWRlZCAoY2xlYXJf ZGFuZ2xpbmdfZGlzcGxheV9leHByZXNzaW9ucyk7CisKICAgYWRkX2luZm8g KCJhZGRyZXNzIiwgYWRkcmVzc19pbmZvLAogCSAgICBfKCJEZXNjcmliZSB3 aGVyZSBzeW1ib2wgU1lNIGlzIHN0b3JlZC4iKSk7CiAKSW5kZXg6IHNvbGli LmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9zcmMv c3JjL2dkYi9zb2xpYi5jLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjExMQpk aWZmIC11IC1wIC11IC1yMS4xMTEgc29saWIuYwotLS0gc29saWIuYwkyMSBG ZWIgMjAwOSAxNjoxNDo0OSAtMDAwMAkxLjExMQorKysgc29saWIuYwk0IE1h ciAyMDA5IDE5OjE3OjU2IC0wMDAwCkBAIC05OTksOCArOTk5LDEzIEBAIHNo YXJlZGxpYnJhcnlfY29tbWFuZCAoY2hhciAqYXJncywgaW50IGYKIHZvaWQK IG5vX3NoYXJlZF9saWJyYXJpZXMgKGNoYXIgKmlnbm9yZWQsIGludCBmcm9t X3R0eSkKIHsKLSAgb2JqZmlsZV9wdXJnZV9zb2xpYnMgKCk7CisgIC8qIFRo ZSBvcmRlciBvZiB0aGUgdHdvIHJvdXRpbmVzIGJlbG93IGlzIGltcG9ydGFu dDogY2xlYXJfc29saWIKKyAgICAgd2lsbCBub3RpZnkgb2JzZXJ2ZXJzLCBh bmQgYXQgbGVhc3QgY2xlYXJfZGFuZ2xpbmdfZGlzcGxheV9leHByZXNzaW9u cworICAgICBvYnNlcnZlciBuZWVkcyBhY2Nlc3MgdG8gb2JqZmlsZXMgYXNz b2NpYXRlZCB3aXRoIHNvbGlicyBiZWluZworICAgICBjbGVhcmVkLiAgKi8K KwogICBjbGVhcl9zb2xpYiAoKTsKKyAgb2JqZmlsZV9wdXJnZV9zb2xpYnMg KCk7CiB9CiAKIHN0YXRpYyB2b2lkCkluZGV4OiB0ZXN0c3VpdGUvZ2RiLmJh c2Uvc29saWItZGlzcGxheS1saWIuYwo9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 ClJDUyBmaWxlOiB0ZXN0c3VpdGUvZ2RiLmJhc2Uvc29saWItZGlzcGxheS1s aWIuYwpkaWZmIC1OIHRlc3RzdWl0ZS9nZGIuYmFzZS9zb2xpYi1kaXNwbGF5 LWxpYi5jCi0tLSAvZGV2L251bGwJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAw MAorKysgdGVzdHN1aXRlL2dkYi5iYXNlL3NvbGliLWRpc3BsYXktbGliLmMJ NCBNYXIgMjAwOSAxOToxNzo1NiAtMDAwMApAQCAtMCwwICsxLDMwIEBACisv KiBUaGlzIHRlc3RjYXNlIGlzIHBhcnQgb2YgR0RCLCB0aGUgR05VIGRlYnVn Z2VyLgorCisgICBDb3B5cmlnaHQgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdh cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAg IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNl LCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K KworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkg V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv ZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBo YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90 LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKwor aW50IGFfZ2xvYmFsID0gNDE7CisjaWZuZGVmIE5PX0JfR0xPQkFMCitpbnQg Yl9nbG9iYWwgPSA0MjsKKyNlbmRpZgoraW50IGNfZ2xvYmFsID0gNDM7CisK K2ludCBmb28gKCkgeworICByZXR1cm4gYV9nbG9iYWwgKworI2lmbmRlZiBO T19CX0dMT0JBTAorICAgIGJfZ2xvYmFsICsKKyNlbmRpZgorICAgIGNfZ2xv YmFsOworfQpJbmRleDogdGVzdHN1aXRlL2dkYi5iYXNlL3NvbGliLWRpc3Bs YXktbWFpbi5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IHRl c3RzdWl0ZS9nZGIuYmFzZS9zb2xpYi1kaXNwbGF5LW1haW4uYwpkaWZmIC1O IHRlc3RzdWl0ZS9nZGIuYmFzZS9zb2xpYi1kaXNwbGF5LW1haW4uYwotLS0g L2Rldi9udWxsCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIHRlc3Rz dWl0ZS9nZGIuYmFzZS9zb2xpYi1kaXNwbGF5LW1haW4uYwk0IE1hciAyMDA5 IDE5OjE3OjU2IC0wMDAwCkBAIC0wLDAgKzEsMzIgQEAKKy8qIFRoaXMgdGVz dGNhc2UgaXMgcGFydCBvZiBHREIsIHRoZSBHTlUgZGVidWdnZXIuCisKKyAg IENvcHlyaWdodCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j LgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIg dGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBh cyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAo YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlz IHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3 aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJD SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm b3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2 ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor ICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0 cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCitleHRlcm4gaW50 IGZvbyAoKTsKKworaW50IG1haW5fZ2xvYmFsID0gNDQ7CitpbnQgYmFyICgp Cit7CisgIGludCBhX2xvY2FsID0gNDU7CisgIHN0YXRpYyBpbnQgYV9zdGF0 aWMgPSA0NjsKKyAgcmV0dXJuIG1haW5fZ2xvYmFsICsgYV9sb2NhbCArIGFf c3RhdGljOyAvKiBicmVhayBoZXJlICovCit9CisKK2ludCBtYWluICgpCit7 CisgIGJhciAoKTsKKyAgcmV0dXJuIGZvbyAoKTsKK30KSW5kZXg6IHRlc3Rz dWl0ZS9nZGIuYmFzZS9zb2xpYi1kaXNwbGF5LmV4cAo9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09ClJDUyBmaWxlOiB0ZXN0c3VpdGUvZ2RiLmJhc2Uvc29saWIt ZGlzcGxheS5leHAKZGlmZiAtTiB0ZXN0c3VpdGUvZ2RiLmJhc2Uvc29saWIt ZGlzcGxheS5leHAKLS0tIC9kZXYvbnVsbAkxIEphbiAxOTcwIDAwOjAwOjAw IC0wMDAwCisrKyB0ZXN0c3VpdGUvZ2RiLmJhc2Uvc29saWItZGlzcGxheS5l eHAJNCBNYXIgMjAwOSAxOToxNzo1NiAtMDAwMApAQCAtMCwwICsxLDExNSBA QAorIyBDb3B5cmlnaHQgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s IEluYy4KKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIg dGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBh cyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv bjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0 IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBw cm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls bCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0 aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5U QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g IFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v cmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg Y29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxv bmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3 dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisjCisjIENvbnRyaWJ1dGVkIGJ5IFBh dWwgUGx1emhuaWtvdiA8cHBsdXpobmlrb3ZAZ29vZ2xlLmNvbT4KKyMKKwor IyBUaGlzIHRlc3QgY2FzZSB2ZXJpZmllcyB0aGF0IGlmIGEgZGlzcGxheSBp cyBhY3RpdmUgb24gYSB2YXJpYWJsZQorIyB3aGljaCBiZWxvbmdzIGluIGEg c2hhcmVkIGxpYnJhcnksIGFuZCB0aGF0IHNoYXJlZCBsaWJyYXJ5IGlzCisj IHJlbG9hZGVkIChlLmcuIGR1ZSB0byByZS1leGVjdXRpb24gb2YgdGhlIHBy b2dyYW0pLCBHREIgd2lsbCBjb250aW51ZQorIyB0byBkaXNwbGF5IGl0IChn ZGItNi44IGNyYXNoZWQgdW5kZXIgdGhpcyBzY2VuYXJpbykuCisKKyMgQWxz byB0ZXN0IHRoYXQgYSBkaXNwbGF5IG9mIHZhcmlhYmxlIHdoaWNoIGlzIGN1 cnJlbnRseSBwcmVzZW50IGluCisjIGEgc2hhcmVkIGxpYnJhcnksIGJ1dCBk aXNhcHBlYXJzIGJlZm9yZSByZS1ydW4sIGRvZXNuJ3QgY2F1c2UgR0RCCisj IGRpZmZpY3VsdGllcywgYW5kIHRoYXQgaXQgY29udGludWVzIHRvIGRpc3Bs YXkgb3RoZXIgdmFyaWFibGVzLgorCisjIEZpbmFsbHksIHRlc3QgdGhhdCBk aXNwbGF5cyB3aGljaCByZWZlciB0byBtYWluIGV4ZWN1dGFibGUKKyMgKGFu ZCB0aHVzIGFyZW4ndCBhZmZlY3RlZCBieSBzaGFyZWQgbGlicmFyeSB1bmxv YWRpbmcpIGFyZSBub3QKKyMgZGlzYWJsZWQgcHJlbWF0dXJlbHkuCisKK2lm IFtza2lwX3NobGliX3Rlc3RzXSB0aGVuIHsKKyAgICByZXR1cm4gMAorfQor CisjIExpYnJhcnkgZmlsZS4KK3NldCBsaWJuYW1lICJzb2xpYi1kaXNwbGF5 LWxpYiIKK3NldCBzcmNmaWxlX2xpYiAke3NyY2Rpcn0vJHtzdWJkaXJ9LyR7 bGlibmFtZX0uYworc2V0IGJpbmZpbGVfbGliICR7b2JqZGlyfS8ke3N1YmRp cn0vJHtsaWJuYW1lfS5zbworc2V0IGxpYl9mbGFncyBbbGlzdCBkZWJ1Z10K KyMgQmluYXJ5IGZpbGUuCitzZXQgdGVzdGZpbGUgInNvbGliLWRpc3BsYXkt bWFpbiIKK3NldCBzcmNmaWxlICR7c3JjZGlyfS8ke3N1YmRpcn0vJHt0ZXN0 ZmlsZX0uYworc2V0IGJpbmZpbGUgJHtvYmpkaXJ9LyR7c3ViZGlyfS8ke3Rl c3RmaWxlfQorc2V0IGJpbl9mbGFncyBbbGlzdCBkZWJ1ZyBzaGxpYj0ke2Jp bmZpbGVfbGlifV0KKworaWYgW2dldF9jb21waWxlcl9pbmZvICR7YmluZmls ZX1dIHsKKyAgICByZXR1cm4gLTEKK30KKworaWYgeyBbZ2RiX2NvbXBpbGVf c2hsaWIgJHtzcmNmaWxlX2xpYn0gJHtiaW5maWxlX2xpYn0gJGxpYl9mbGFn c10gIT0gIiIKKyAgICAgfHwgW2dkYl9jb21waWxlICR7c3JjZmlsZX0gJHti aW5maWxlfSBleGVjdXRhYmxlICRiaW5fZmxhZ3NdICE9ICIiIH0geworICB1 bnRlc3RlZCAiQ291bGQgbm90IGNvbXBpbGUgJGJpbmZpbGVfbGliIG9yICRi aW5maWxlLiIKKyAgcmV0dXJuIC0xCit9CisKK2dkYl9leGl0CitnZGJfc3Rh cnQKK2dkYl9yZWluaXRpYWxpemVfZGlyICRzcmNkaXIvJHN1YmRpcgorZ2Ri X2xvYWQgJHtiaW5maWxlfQorCitpZiAhW3J1bnRvX21haW5dIHRoZW4gewor ICBmYWlsICJDYW4ndCBydW4gdG8gbWFpbiIKKyAgcmV0dXJuIDAKK30KKwor Z2RiX3Rlc3QgImRpc3BsYXkgYV9nbG9iYWwiICIxOiBhX2dsb2JhbCA9IDQx IgorZ2RiX3Rlc3QgImRpc3BsYXkgYl9nbG9iYWwiICIyOiBiX2dsb2JhbCA9 IDQyIgorZ2RiX3Rlc3QgImRpc3BsYXkgY19nbG9iYWwiICIzOiBjX2dsb2Jh bCA9IDQzIgorCitpZiAhW3J1bnRvX21haW5dIHRoZW4geworICAgIGZhaWwg IkNhbid0IHJ1biB0byBtYWluICgyKSIKKyAgICByZXR1cm4gMAorfQorCitn ZGJfdGVzdCAic3RlcGkiICIzOiBjX2dsb2JhbCA9IDQzXFxyXFxuMjogYl9n bG9iYWwgPSA0MlxcclxcbjE6IGFfZ2xvYmFsID0gNDEiICJhZnRlciByZXJ1 biIKKworIyBOb3cgcmVidWlsZCB0aGUgbGlicmFyeSB3aXRob3V0IGJfZ2xv YmFsCitpZiB7IFtnZGJfY29tcGlsZV9zaGxpYiAke3NyY2ZpbGVfbGlifSAk e2JpbmZpbGVfbGlifSBcCisJICAiJGxpYl9mbGFncyBhZGRpdGlvbmFsX2Zs YWdzPS1ETk9fQl9HTE9CQUwiXSAhPSAiIn0geworICAgIGZhaWwgIkNhbid0 IHJlYnVpbGQgJGJpbmZpbGVfbGliIgorfQorCitpZiAhW3J1bnRvX21haW5d IHRoZW4geworICAgIGZhaWwgIkNhbid0IHJ1biB0byBtYWluICgzKSIKKyAg ICByZXR1cm4gMAorfQorCitnZGJfdGVzdCAic3RlcGkiICIzOiBjX2dsb2Jh bCA9IDQzXFxyXFxuMTogYV9nbG9iYWwgPSA0MSIgImFmdGVyIHJlYnVpbGQi CisKKyMgTm93IHZlcmlmeSB0aGF0IGRpc3BsYXlzIHdoaWNoIGFyZSBub3Qg aW4gdGhlIHNoYXJlZCBsaWJyYXJ5CisjIGFyZSBub3QgY2xlYXJlZCBwZXJt YXR1cmVseS4KKworZ2RiX3Rlc3QgImJyZWFrIFtnZGJfZ2V0X2xpbmVfbnVt YmVyICJicmVhayBoZXJlIiAke3Rlc3RmaWxlfS5jXSIgXAorCSIuKkJyZWFr cG9pbnQuKiBhdCAuKiIgCisKK2dkYl90ZXN0ICJjb250aW51ZSIKK2dkYl90 ZXN0ICJkaXNwbGF5IG1haW5fZ2xvYmFsIiAiNDogbWFpbl9nbG9iYWwgPSA0 NCIKK2dkYl90ZXN0ICJkaXNwbGF5IGFfbG9jYWwiICI1OiBhX2xvY2FsID0g NDUiCitnZGJfdGVzdCAiZGlzcGxheSBhX3N0YXRpYyIgIjY6IGFfc3RhdGlj ID0gNDYiCisKK2lmICFbcnVudG9fbWFpbl0gdGhlbiB7CisgICAgZmFpbCAi Q2FuJ3QgcnVuIHRvIG1haW4gKDQpIgorICAgIHJldHVybiAwCit9CisKK2dk Yl90ZXN0ICJzdGVwaSIgIjY6IGFfc3RhdGljID0gNDZcXHJcXG40OiBtYWlu X2dsb2JhbCA9IDQ0XFxyXFxuLioiCitnZGJfdGVzdCAiYnJlYWsgW2dkYl9n ZXRfbGluZV9udW1iZXIgImJyZWFrIGhlcmUiICR7dGVzdGZpbGV9LmNdIiBc CisJIi4qQnJlYWtwb2ludC4qIGF0IC4qIiAKK2dkYl90ZXN0ICJjb250aW51 ZSIgIjY6IGFfc3RhdGljID0gNDZcXHJcXG41OiBhX2xvY2FsID0gNDVcXHJc XG40OiBtYWluX2dsb2JhbCA9IDQ0XFxyXFxuLioiCisKK2dkYl9leGl0CisK K3JldHVybiAwCisKKwo= --000e0cd150b6de17d804645001a0--