From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 29238 invoked by alias); 7 Feb 2009 02:37:20 -0000 Received: (qmail 29227 invoked by uid 22791); 7 Feb 2009 02:37:18 -0000 X-SWARE-Spam-Status: No, hits=-1.3 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_22,J_CHICKENPOX_35,SARE_MSGID_LONG40,SPF_PASS X-Spam-Check-By: sourceware.org Received: from smtp-out.google.com (HELO smtp-out.google.com) (216.239.33.17) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Sat, 07 Feb 2009 02:37:13 +0000 Received: from spaceape14.eur.corp.google.com (spaceape14.eur.corp.google.com [172.28.16.148]) by smtp-out.google.com with ESMTP id n172b9qa022014 for ; Sat, 7 Feb 2009 02:37:10 GMT Received: from wf-out-1314.google.com (wfc25.prod.google.com [10.142.3.25]) by spaceape14.eur.corp.google.com with ESMTP id n172b5NP023001 for ; Fri, 6 Feb 2009 18:37:06 -0800 Received: by wf-out-1314.google.com with SMTP id 25so1087825wfc.21 for ; Fri, 06 Feb 2009 18:37:05 -0800 (PST) MIME-Version: 1.0 Received: by 10.142.194.1 with SMTP id r1mr117547wff.166.1233974225666; Fri, 06 Feb 2009 18:37:05 -0800 (PST) In-Reply-To: References: <20090205030257.8A6073A6B7A@localhost> Date: Sat, 07 Feb 2009 02:37:00 -0000 Message-ID: <8ac60eac0902061837p5885b812j8a26669e799702e1@mail.gmail.com> Subject: Re: [patch] Fix a crash when displaying variables from shared library. From: Paul Pluzhnikov To: tromey@redhat.com, Pedro Alves Cc: gdb-patches@sourceware.org Content-Type: multipart/mixed; boundary=000e0cd14ed862015804624b0381 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-02/txt/msg00172.txt.bz2 --000e0cd14ed862015804624b0381 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-length: 3217 On Fri, Feb 6, 2009 at 1:36 PM, Tom Tromey wrote: >>>>>> "Paul" == Paul Pluzhnikov writes: > > Paul> @@ -1526,6 +1527,9 @@ do_one_display (struct display *d) > [...] > Paul> + if (d->exp == NULL) > Paul> + d->exp = parse_expression (d->exp_string); > > Suppose this fails. I think what would happen is that none of the > following displays would print anything. However, it seems like what > should happen is that gdb deletes this display and moves on to try the > next. What do you think? Fixed: I believe we should disable this display, not delete it altogether though. I extended the test case to verify this works. > Also, are blocks valid after an solib is deleted? (I don't know.) If > not then that means that the 'block' field must also be invalidated. Fixed: the blocks are also obstack_free'd (AFAICT). They should be cleared even if they weren't free'd: for all we know reloaded shlib may have been completely re-factored, and the expression could have moved to another block. > Paul> + > Paul> +static void > Paul> +clear_dangling_display_expressions (struct so_list *solist) > > I think any new function needs an explanatory comment. Done. > Paul> --- solib.c 15 Jan 2009 16:35:22 -0000 1.109 > Paul> +++ solib.c 5 Feb 2009 02:43:31 -0000 > Paul> @@ -908,6 +908,7 @@ clear_solib (void) > Paul> { > Paul> struct so_list *so = so_list_head; > Paul> so_list_head = so->next; > Paul> + observer_notify_solib_unloaded (so); > Paul> if (so->abfd) > > This hunk is already under discussion: > > http://sourceware.org/ml/gdb-patches/2009-01/msg00542.html > > In particular, I think Daniel's question should be answered before > this goes in: > > http://sourceware.org/ml/gdb-patches/2009-02/msg00002.html This turned out to be non-issue: disable_breakpoints_in_shlibs() is called just a couple of lines above, so by the time we get into disable_breakpoints_in_unloaded_shlib(), all of them already have loc->shlib_disable == 1, and it remains silent. > Paul> Index: testsuite/gdb.base/solib-display.exp > [...] > Paul> +gdb_test "display a_global" > Paul> +gdb_test "continue" > Paul> +gdb_test "run" "1: a_global = 0" > > For regression tests, I like to add a comment explaining what is being > tested. Could you do this? It doesn't have to be long. My reason > for doing this is that later on it isn't always obvious what a test is > trying to test. Done. > Otherwise this patch looks good to me. > > Tom > On Fri, Feb 6, 2009 at 1:53 PM, Pedro Alves wrote: > On Thursday 05 February 2009 03:02:57, Paul Pluzhnikov wrote: >> +gdb_test "display a_global" >> +gdb_test "continue" >> +gdb_test "run" "1: a_global = 0" >> + > > Expecting an inferior exit like this, and using an hardcoded "run" > will make this test fail against (most) remote targets. > > (there's a board file in the wiki you could use for easy > gdbserver testing, if you'd like) > > Can you adapt the test to not use an hardcoded "run", or perhaps just > skip it against remote targets? Done. Thanks for the reviews. I re-tested on x86_64-linux with no regressions. OK? -- Paul Pluzhnikov --000e0cd14ed862015804624b0381 Content-Type: text/plain; charset=US-ASCII; name="gdb-display-crash-20090206.txt" Content-Disposition: attachment; filename="gdb-display-crash-20090206.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_fqvoc35w0 Content-length: 11363 SW5kZXg6IHByaW50Y21kLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg ZmlsZTogL2N2cy9zcmMvc3JjL2dkYi9wcmludGNtZC5jLHYKcmV0cmlldmlu ZyByZXZpc2lvbiAxLjE0MgpkaWZmIC11IC1wIC11IC1yMS4xNDIgcHJpbnRj bWQuYwotLS0gcHJpbnRjbWQuYwk1IEZlYiAyMDA5IDAwOjEzOjQzIC0wMDAw CTEuMTQyCisrKyBwcmludGNtZC5jCTcgRmViIDIwMDkgMDI6MzE6MDAgLTAw MDAKQEAgLTQzLDYgKzQzLDggQEAKICNpbmNsdWRlICJkaXNhc20uaCIKICNp bmNsdWRlICJkZnAuaCIKICNpbmNsdWRlICJ2YWxwcmludC5oIgorI2luY2x1 ZGUgImV4Y2VwdGlvbnMuaCIKKyNpbmNsdWRlICJvYnNlcnZlci5oIgogCiAj aWZkZWYgVFVJCiAjaW5jbHVkZSAidHVpL3R1aS5oIgkJLyogRm9yIHR1aV9h Y3RpdmUgZXQuYWwuICAgKi8KQEAgLTEzOTUsNyArMTM5Nyw3IEBAIGRpc3Bs YXlfY29tbWFuZCAoY2hhciAqZXhwLCBpbnQgZnJvbV90dHkKIAkgIGZtdC5j b3VudCA9IDA7CiAJfQogCi0gICAgICBpbm5lcm1vc3RfYmxvY2sgPSAwOwor ICAgICAgaW5uZXJtb3N0X2Jsb2NrID0gTlVMTDsKICAgICAgIGV4cHIgPSBw YXJzZV9leHByZXNzaW9uIChleHApOwogCiAgICAgICBuZXcgPSAoc3RydWN0 IGRpc3BsYXkgKikgeG1hbGxvYyAoc2l6ZW9mIChzdHJ1Y3QgZGlzcGxheSkp OwpAQCAtMTUxOSw2ICsxNTIxLDI0IEBAIGRvX29uZV9kaXNwbGF5IChzdHJ1 Y3QgZGlzcGxheSAqZCkKICAgaWYgKGQtPmVuYWJsZWRfcCA9PSAwKQogICAg IHJldHVybjsKIAorICBpZiAoZC0+ZXhwID09IE5VTEwpCisgICAgeworICAg ICAgdm9sYXRpbGUgc3RydWN0IGdkYl9leGNlcHRpb24gZXg7CisgICAgICBU UllfQ0FUQ0ggKGV4LCBSRVRVUk5fTUFTS19BTEwpCisJeworCSAgaW5uZXJt b3N0X2Jsb2NrID0gTlVMTDsKKwkgIGQtPmV4cCA9IHBhcnNlX2V4cHJlc3Np b24gKGQtPmV4cF9zdHJpbmcpOworCSAgZC0+YmxvY2sgPSBpbm5lcm1vc3Rf YmxvY2s7CisJfQorICAgICAgaWYgKGV4LnJlYXNvbiA8IDApCisJeworCSAg LyogQ2FuJ3QgcmUtcGFyc2UgdGhlIGV4cHJlc3Npb24uIERpc2FibGUgdGhp cyBkaXNwbGF5IGl0ZW0uICovCisJICBkLT5lbmFibGVkX3AgPSAwOworCSAg d2FybmluZyAoXygiVW5hYmxlIHRvIGRpc3BsYXkgXCIlc1wiOiAlcyIpLCBk LT5leHBfc3RyaW5nLCBleC5tZXNzYWdlKTsKKwkgIHJldHVybjsKKwl9Cisg ICAgfQorCiAgIGlmIChkLT5ibG9jaykKICAgICB3aXRoaW5fY3VycmVudF9z Y29wZSA9IGNvbnRhaW5lZF9pbiAoZ2V0X3NlbGVjdGVkX2Jsb2NrICgwKSwg ZC0+YmxvY2spOwogICBlbHNlCkBAIC0xNzMxLDYgKzE3NTEsMjggQEAgZGlz YWJsZV9kaXNwbGF5X2NvbW1hbmQgKGNoYXIgKmFyZ3MsIGludAogCSAgcCsr OwogICAgICAgfQogfQorCisvKiBkaXNwbGF5X2NoYWluIGl0ZW1zIHBvaW50 IHRvIGJsb2NrcyBhbmQgZXhwcmVzc2lvbnMuIFNvbWUgZXhwcmVzc2lvbnMK KyAgIGluIHR1cm4gbWF5IHBvaW50IHRvIHN5bWJvbHMuCisgICBCb3RoIHN5 bWJvbHMgYW5kIGJsb2NrcyBhcmUgb2JzdGFja19hbGxvYydkIG9uIG9iamZp bGVfc3RhY2ssIGFuZCBhcmUKKyAgIG9ic3RhY2tfZnJlZSdkIHdoZW4gYSBz aGFyZWQgbGlicmFyeSBpcyB1bmxvYWRlZC4KKyAgIENsZWFyIHBvaW50ZXJz IHRoYXQgYXJlIGFib3V0IHRvIGJlY29tZSBkYW5nbGluZy4KKyAgIEJvdGgg LmV4cCBhbmQgLmJsb2NrIHdpbGwgYmUgcmVzdG9yZWQgbmV4dCB0aW1lIHdl IG5lZWQgdG8gZGlzcGxheSBhbiBpdGVtCisgICBmcm9tIHRoZSBuZXdseS1s b2FkZWQgc2hhcmVkIGxpYnJhcnkuCisqLworCitzdGF0aWMgdm9pZAorY2xl YXJfZGFuZ2xpbmdfZGlzcGxheV9leHByZXNzaW9ucyAoc3RydWN0IHNvX2xp c3QgKnNvbGlzdCkKK3sKKyAgc3RydWN0IGRpc3BsYXkgKmQ7CisKKyAgZm9y IChkID0gZGlzcGxheV9jaGFpbjsgZDsgZCA9IGQtPm5leHQpCisgICAgewor ICAgICAgeGZyZWUgKGQtPmV4cCk7CisgICAgICBkLT5leHAgPSBOVUxMOwor ICAgICAgZC0+YmxvY2sgPSBOVUxMOworICAgIH0KK30KIAwKIAogLyogUHJp bnQgdGhlIHZhbHVlIGluIHN0YWNrIGZyYW1lIEZSQU1FIG9mIGEgdmFyaWFi bGUgc3BlY2lmaWVkIGJ5IGEKQEAgLTIzNjcsNiArMjQwOSw4IEBAIF9pbml0 aWFsaXplX3ByaW50Y21kICh2b2lkKQogCiAgIGN1cnJlbnRfZGlzcGxheV9u dW1iZXIgPSAtMTsKIAorICBvYnNlcnZlcl9hdHRhY2hfc29saWJfdW5sb2Fk ZWQgKGNsZWFyX2RhbmdsaW5nX2Rpc3BsYXlfZXhwcmVzc2lvbnMpOworCiAg IGFkZF9pbmZvICgiYWRkcmVzcyIsIGFkZHJlc3NfaW5mbywKIAkgICAgXygi RGVzY3JpYmUgd2hlcmUgc3ltYm9sIFNZTSBpcyBzdG9yZWQuIikpOwogCklu ZGV4OiBzb2xpYi5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6 IC9jdnMvc3JjL3NyYy9nZGIvc29saWIuYyx2CnJldHJpZXZpbmcgcmV2aXNp b24gMS4xMDkKZGlmZiAtdSAtcCAtdSAtcjEuMTA5IHNvbGliLmMKLS0tIHNv bGliLmMJMTUgSmFuIDIwMDkgMTY6MzU6MjIgLTAwMDAJMS4xMDkKKysrIHNv bGliLmMJNyBGZWIgMjAwOSAwMjozMTowMCAtMDAwMApAQCAtOTA4LDYgKzkw OCw3IEBAIGNsZWFyX3NvbGliICh2b2lkKQogICAgIHsKICAgICAgIHN0cnVj dCBzb19saXN0ICpzbyA9IHNvX2xpc3RfaGVhZDsKICAgICAgIHNvX2xpc3Rf aGVhZCA9IHNvLT5uZXh0OworICAgICAgb2JzZXJ2ZXJfbm90aWZ5X3NvbGli X3VubG9hZGVkIChzbyk7CiAgICAgICBpZiAoc28tPmFiZmQpCiAJcmVtb3Zl X3RhcmdldF9zZWN0aW9ucyAoc28tPmFiZmQpOwogICAgICAgZnJlZV9zbyAo c28pOwpJbmRleDogdGVzdHN1aXRlL2dkYi5iYXNlL3NvbGliLWRpc3BsYXkt bGliLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogdGVzdHN1 aXRlL2dkYi5iYXNlL3NvbGliLWRpc3BsYXktbGliLmMKZGlmZiAtTiB0ZXN0 c3VpdGUvZ2RiLmJhc2Uvc29saWItZGlzcGxheS1saWIuYwotLS0gL2Rldi9u dWxsCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIHRlc3RzdWl0ZS9n ZGIuYmFzZS9zb2xpYi1kaXNwbGF5LWxpYi5jCTcgRmViIDIwMDkgMDI6MzE6 MDAgLTAwMDAKQEAgLTAsMCArMSwzMCBAQAorLyogVGhpcyB0ZXN0Y2FzZSBp cyBwYXJ0IG9mIEdEQiwgdGhlIEdOVSBkZWJ1Z2dlci4KKworICAgQ29weXJp Z2h0IDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAg IFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz dHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVy bXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxp c2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0 aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3Vy IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3Jh bSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg dXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0 IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJ TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl ZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl IGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv cHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9u ZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3 LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKK2ludCBhX2dsb2JhbCA9IDQx OworI2lmbmRlZiBOT19CX0dMT0JBTAoraW50IGJfZ2xvYmFsID0gNDI7Cisj ZW5kaWYKK2ludCBjX2dsb2JhbCA9IDQzOworCitpbnQgZm9vICgpIHsKKyAg cmV0dXJuIGFfZ2xvYmFsICsKKyNpZm5kZWYgTk9fQl9HTE9CQUwKKyAgICBi X2dsb2JhbCArCisjZW5kaWYKKyAgICBjX2dsb2JhbDsKK30KSW5kZXg6IHRl c3RzdWl0ZS9nZGIuYmFzZS9zb2xpYi1kaXNwbGF5LW1haW4uYwo9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09ClJDUyBmaWxlOiB0ZXN0c3VpdGUvZ2RiLmJhc2Uv c29saWItZGlzcGxheS1tYWluLmMKZGlmZiAtTiB0ZXN0c3VpdGUvZ2RiLmJh c2Uvc29saWItZGlzcGxheS1tYWluLmMKLS0tIC9kZXYvbnVsbAkxIEphbiAx OTcwIDAwOjAwOjAwIC0wMDAwCisrKyB0ZXN0c3VpdGUvZ2RiLmJhc2Uvc29s aWItZGlzcGxheS1tYWluLmMJNyBGZWIgMjAwOSAwMjozMTowMCAtMDAwMApA QCAtMCwwICsxLDIzIEBACisvKiBUaGlzIHRlc3RjYXNlIGlzIHBhcnQgb2Yg R0RCLCB0aGUgR05VIGRlYnVnZ2VyLgorCisgICBDb3B5cmlnaHQgMjAwOSBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9n cmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0 IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cisg ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lv biAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBh bnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3Ry aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg aW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K KworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhp cyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9s aWNlbnNlcy8+LiAgKi8KKworZXh0ZXJuIGludCBmb28gKCk7CisKK2ludCBt YWluICgpCit7CisgIHJldHVybiBmb28gKCk7Cit9CkluZGV4OiB0ZXN0c3Vp dGUvZ2RiLmJhc2Uvc29saWItZGlzcGxheS5leHAKPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQpSQ1MgZmlsZTogdGVzdHN1aXRlL2dkYi5iYXNlL3NvbGliLWRp c3BsYXkuZXhwCmRpZmYgLU4gdGVzdHN1aXRlL2dkYi5iYXNlL3NvbGliLWRp c3BsYXkuZXhwCi0tLSAvZGV2L251bGwJMSBKYW4gMTk3MCAwMDowMDowMCAt MDAwMAorKysgdGVzdHN1aXRlL2dkYi5iYXNlL3NvbGliLWRpc3BsYXkuZXhw CTcgRmViIDIwMDkgMDI6MzE6MDAgLTAwMDAKQEAgLTAsMCArMSw4MiBAQAor IyBDb3B5cmlnaHQgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu Yy4KKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g cmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhl IHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBw dWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg ZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlv dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9n cmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi ZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91 dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJ TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl ZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg ZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w eSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcg d2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5n bnUub3JnL2xpY2Vuc2VzLz4uCisjCisjIENvbnRyaWJ1dGVkIGJ5IFBhdWwg UGx1emhuaWtvdiA8cHBsdXpobmlrb3ZAZ29vZ2xlLmNvbT4KKyMKKworIyBU aGlzIHRlc3QgY2FzZSB2ZXJpZmllcyB0aGF0IGlmIGEgZGlzcGxheSBpcyBh Y3RpdmUgb24gYSB2YXJpYWJsZQorIyB3aGljaCBiZWxvbmdzIGluIGEgc2hh cmVkIGxpYnJhcnksIGFuZCB0aGF0IHNoYXJlZCBsaWJyYXJ5IGlzCisjIHJl bG9hZGVkIChlLmcuIGR1ZSB0byByZS1leGVjdXRpb24gb2YgdGhlIHByb2dy YW0pLCBHREIgd2lsbCBjb250aW51ZQorIyB0byBkaXNwbGF5IGl0IChnZGIt Ni44IGNyYXNoZWQgdW5kZXIgdGhpcyBzY2VuYXJpbykuCisKKyMgQWxzbyB0 ZXN0IHRoYXQgYSBkaXNwbGF5IG9mIHZhcmlhYmxlIHdoaWNoIGlzIGN1cnJl bnRseSBwcmVzZW50IGluCisjIGEgc2hhcmVkIGxpYnJhcnksIGJ1dCBkaXNh cHBlYXJzIGJlZm9yZSByZS1ydW4sIGRvZXNuJ3QgY2F1c2UgR0RCCisjIGRp ZmZpY3VsdGllcywgYW5kIHRoYXQgaXQgY29udGludWVzIHRvIGRpc3BsYXkg b3RoZXIgdmFyaWFibGVzLgorCitpZiB7W3NraXBfc2hsaWJfdGVzdHNdIHx8 IFtpc19yZW1vdGUgdGFyZ2V0XX0geworICAgIHJldHVybiAwCit9CisKKyMg TGlicmFyeSBmaWxlLgorc2V0IGxpYm5hbWUgInNvbGliLWRpc3BsYXktbGli Igorc2V0IHNyY2ZpbGVfbGliICR7c3JjZGlyfS8ke3N1YmRpcn0vJHtsaWJu YW1lfS5jCitzZXQgYmluZmlsZV9saWIgJHtvYmpkaXJ9LyR7c3ViZGlyfS8k e2xpYm5hbWV9LnNvCitzZXQgbGliX2ZsYWdzIFtsaXN0IGRlYnVnXQorIyBC aW5hcnkgZmlsZS4KK3NldCB0ZXN0ZmlsZSAic29saWItZGlzcGxheS1tYWlu Igorc2V0IHNyY2ZpbGUgJHtzcmNkaXJ9LyR7c3ViZGlyfS8ke3Rlc3RmaWxl fS5jCitzZXQgYmluZmlsZSAke29iamRpcn0vJHtzdWJkaXJ9LyR7dGVzdGZp bGV9CitzZXQgYmluX2ZsYWdzIFtsaXN0IGRlYnVnIHNobGliPSR7YmluZmls ZV9saWJ9XQorCitpZiBbZ2V0X2NvbXBpbGVyX2luZm8gJHtiaW5maWxlfV0g eworICAgIHJldHVybiAtMQorfQorCitpZiB7IFtnZGJfY29tcGlsZV9zaGxp YiAke3NyY2ZpbGVfbGlifSAke2JpbmZpbGVfbGlifSAkbGliX2ZsYWdzXSAh PSAiIgorICAgICB8fCBbZ2RiX2NvbXBpbGUgJHtzcmNmaWxlfSAke2JpbmZp bGV9IGV4ZWN1dGFibGUgJGJpbl9mbGFnc10gIT0gIiIgfSB7CisgIHVudGVz dGVkICJDb3VsZCBub3QgY29tcGlsZSAkYmluZmlsZV9saWIgb3IgJGJpbmZp bGUuIgorICByZXR1cm4gLTEKK30KKworZ2RiX2V4aXQKK2dkYl9zdGFydAor Z2RiX3JlaW5pdGlhbGl6ZV9kaXIgJHNyY2Rpci8kc3ViZGlyCitnZGJfbG9h ZCAke2JpbmZpbGV9CisKK2lmICFbcnVudG9fbWFpbl0gdGhlbiB7CisgIGZh aWwgIkNhbid0IHJ1biB0byBtYWluIgorICByZXR1cm4gMAorfQorCitnZGJf dGVzdCAiZGlzcGxheSBhX2dsb2JhbCIKK2dkYl90ZXN0ICJkaXNwbGF5IGJf Z2xvYmFsIgorZ2RiX3Rlc3QgImRpc3BsYXkgY19nbG9iYWwiCitnZGJfdGVz dCAiY29udGludWUiCitnZGJfdGVzdCAicnVuIiAiMzogY19nbG9iYWwgPSA0 M1xcclxcbjI6IGJfZ2xvYmFsID0gNDJcXHJcXG4xOiBhX2dsb2JhbCA9IDQx IiAiYWZ0ZXIgcmVydW4iCitnZGJfdGVzdCAiY29udGludWUiCisKKyMgTm93 IHJlYnVpbGQgdGhlIGxpYnJhcnkgd2l0aG91dCBiX2dsb2JhbAoraWYgeyBb Z2RiX2NvbXBpbGVfc2hsaWIgJHtzcmNmaWxlX2xpYn0gJHtiaW5maWxlX2xp Yn0gXAorCSAgIiRsaWJfZmxhZ3MgYWRkaXRpb25hbF9mbGFncz0tRE5PX0Jf R0xPQkFMIl0gIT0gIiJ9IHsKKyAgICBmYWlsICJDYW4ndCByZWJ1aWxkICRi aW5maWxlX2xpYiIKK30KKworZ2RiX3Rlc3QgInJ1biIgIjM6IGNfZ2xvYmFs ID0gNDNcXHJcXG53YXJuaW5nOiAuKmJfZ2xvYmFsLipcXHJcXG4xOiBhX2ds b2JhbCA9IDQxIiAiYWZ0ZXIgcmVidWlsZCIKKworCitnZGJfZXhpdAorCity ZXR1cm4gMAorCisK --000e0cd14ed862015804624b0381--