From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 19454 invoked by alias); 5 Mar 2009 23:46:53 -0000 Received: (qmail 19443 invoked by uid 22791); 5 Mar 2009 23:46:51 -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.33.17) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Thu, 05 Mar 2009 23:46:38 +0000 Received: from spaceape7.eur.corp.google.com (spaceape7.eur.corp.google.com [172.28.16.141]) by smtp-out.google.com with ESMTP id n25NkYAK018782 for ; Thu, 5 Mar 2009 23:46:34 GMT Received: from wf-out-1314.google.com (wff28.prod.google.com [10.142.6.28]) by spaceape7.eur.corp.google.com with ESMTP id n25NkMSh005165 for ; Thu, 5 Mar 2009 15:46:32 -0800 Received: by wf-out-1314.google.com with SMTP id 28so201830wff.29 for ; Thu, 05 Mar 2009 15:46:32 -0800 (PST) MIME-Version: 1.0 Received: by 10.142.68.5 with SMTP id q5mr771511wfa.12.1236296792155; Thu, 05 Mar 2009 15:46:32 -0800 (PST) In-Reply-To: <20090305200415.GC3744@adacore.com> References: <20090205030257.8A6073A6B7A@localhost> <8ac60eac0902061837p5885b812j8a26669e799702e1@mail.gmail.com> <8ac60eac0902181458g39dfbce9k63c3329528b0aad5@mail.gmail.com> <20090223010759.GA30997@adacore.com> <8ac60eac0902231012lb42bcb1q8b8cf19ad2ac192@mail.gmail.com> <8ac60eac0903021830w363783ear7d4c8fc1177d6448@mail.gmail.com> <8ac60eac0903041124s1aafb562u225f268c4d1511dd@mail.gmail.com> <20090305200415.GC3744@adacore.com> Date: Thu, 05 Mar 2009 23:46:00 -0000 Message-ID: <8ac60eac0903051546r1eaffc89tf1f35b21e6dc1b40@mail.gmail.com> Subject: Re: [patch] Fix a crash when displaying variables from shared library. From: Paul Pluzhnikov To: Joel Brobecker Cc: tromey@redhat.com, Pedro Alves , gdb-patches@sourceware.org Content-Type: multipart/mixed; boundary=001636e909e9222713046467c79a 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 Mail-Followup-To: gdb-patches@sourceware.org X-SW-Source: 2009-03/txt/msg00069.txt.bz2 --001636e909e9222713046467c79a Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-length: 2749 On Thu, Mar 5, 2009 at 12:04 PM, Joel Brobecker wrote: >> + if (d->block != NULL && >> + solib_address (d->block->startaddr) == solib->so_name) > > Minor style issue: The "&&" should be at the start of the next line. Sorry 'bout that. > >> + gdb_assert (elts[i + 3].opcode == OP_VAR_VALUE); > > Is this really necessary? I don't believe we have this sort > of assertion anywhere else. Ok, removed. >> +/* display_chain items point to blocks and expressions. Some expressions in > > One space is missing after the period (I feel really sorry about > perstering anyone about this, but this is the GCS) Sorry about missing this one ... >> + /* The order of the two routines below is important: clear_solib >> + will notify observers, and at least clear_dangling_display_expressions >> + observer needs access to objfiles associated with solibs being >> + cleared. */ > > I'm relunctant to have comments mention the name of a routine as > an example. I think we can get away from it by staying general: > > /* The order of the two routines below is important: clear_solib > notifies the solib_unloaded observers, and some of these observes > might need access to their associated objfiles. Therefore, > we cannot purge the solibs' objfiles before clear_solib has > been called. */ Sounds good, comment updated. >> +if ![runto_main] then { >> + fail "Can't run to main (2)" >> + return 0 >> +} >> + >> +gdb_test "stepi" "3: c_global = 43\\r\\n2: b_global = 42\\r\\n1: a_global = 41" "after rerun" > > I am guessing that the "stepi" test is really there because > you couldn't get the runto_main output, and therefore couldn't > verify it. Correct. > I suggest a different approach: > > | # Start the program, we should land in the program main procedure > | if { [gdb_start_cmd] < 0 } { > | fail "Can't run to main" > | return -1 > | } > | > | gdb_test "" \ > | "first \\(\\) at .*first.adb.*" \ > | "start first" > > The second gdb_test should allow you to verify that the debugger > displays your variables correctly. Looks good. Attached is the patch I just committed. Thanks, -- Paul Pluzhnikov ChangeLog: 2009-03-05 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-03-05 Paul Pluzhnikov * solib-display.exp: New file. * solib-display-main.c: New file. * solib-display-lib.c: New file. --001636e909e9222713046467c79a Content-Type: text/plain; charset=US-ASCII; name="gdb-display-crash-20090305.txt" Content-Disposition: attachment; filename="gdb-display-crash-20090305.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_fry2mvdz0 Content-length: 15067 SW5kZXg6IHByaW50Y21kLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg ZmlsZTogL2N2cy9zcmMvc3JjL2dkYi9wcmludGNtZC5jLHYKcmV0cmlldmlu ZyByZXZpc2lvbiAxLjE0NApkaWZmIC11IC1wIC11IC1yMS4xNDQgcHJpbnRj bWQuYwotLS0gcHJpbnRjbWQuYwkyNSBGZWIgMjAwOSAxODoyNjo1MyAtMDAw MAkxLjE0NAorKysgcHJpbnRjbWQuYwk1IE1hciAyMDA5IDIzOjI5OjM1IC0w 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 IGVsc2UKQEAgLTE3MzEsNiArMTc1NSw3MiBAQCBkaXNhYmxlX2Rpc3BsYXlf Y29tbWFuZCAoY2hhciAqYXJncywgaW50CiAJICBwKys7CiAgICAgICB9CiB9 CisKKy8qIFJldHVybiAxIGlmIEQgdXNlcyBTT0xJQiAoYW5kIHdpbGwgYmVj b21lIGRhbmdsaW5nIHdoZW4gU09MSUIKKyAgIGlzIHVubG9hZGVkKSwgb3Ro ZXJ3aXNlIHJldHVybiAwLiAgKi8KKworc3RhdGljIGludAorZGlzcGxheV91 c2VzX3NvbGliX3AgKGNvbnN0IHN0cnVjdCBkaXNwbGF5ICpkLAorCQkgICAg ICBjb25zdCBzdHJ1Y3Qgc29fbGlzdCAqc29saWIpCit7CisgIGludCBpOwor ICBzdHJ1Y3QgZXhwcmVzc2lvbiAqY29uc3QgZXhwID0gZC0+ZXhwOworCisg IGlmIChkLT5ibG9jayAhPSBOVUxMCisgICAgICAmJiBzb2xpYl9hZGRyZXNz IChkLT5ibG9jay0+c3RhcnRhZGRyKSA9PSBzb2xpYi0+c29fbmFtZSkKKyAg ICByZXR1cm4gMTsKKworICBmb3IgKGkgPSAwOyBpIDwgZXhwLT5uZWx0czsg KQorICAgIHsKKyAgICAgIGludCBhcmdzLCBvcGxlbiA9IDA7CisgICAgICBj b25zdCB1bmlvbiBleHBfZWxlbWVudCAqY29uc3QgZWx0cyA9IGV4cC0+ZWx0 czsKKworICAgICAgaWYgKGVsdHNbaV0ub3Bjb2RlID09IE9QX1ZBUl9WQUxV RSkKKwl7CisJICBjb25zdCBzdHJ1Y3QgYmxvY2sgKmNvbnN0IGJsb2NrID0g ZWx0c1tpICsgMV0uYmxvY2s7CisJICBjb25zdCBzdHJ1Y3Qgc3ltYm9sICpj b25zdCBzeW1ib2wgPSBlbHRzW2kgKyAyXS5zeW1ib2w7CisJICBjb25zdCBz dHJ1Y3Qgb2JqX3NlY3Rpb24gKmNvbnN0IHNlY3Rpb24gPQorCSAgICBTWU1C T0xfT0JKX1NFQ1RJT04gKHN5bWJvbCk7CisKKwkgIGlmIChibG9jayAhPSBO VUxMCisJICAgICAgJiYgc29saWJfYWRkcmVzcyAoYmxvY2stPnN0YXJ0YWRk cikgPT0gc29saWItPnNvX25hbWUpCisJICAgIHJldHVybiAxOworCisJICBp ZiAoc2VjdGlvbiAmJiBzZWN0aW9uLT5vYmpmaWxlID09IHNvbGliLT5vYmpm aWxlKQorCSAgICByZXR1cm4gMTsKKwl9CisgICAgICBleHAtPmxhbmd1YWdl X2RlZm4tPmxhX2V4cF9kZXNjLT5vcGVyYXRvcl9sZW5ndGggKGV4cCwgaSAr IDEsCisJCQkJCQkJJm9wbGVuLCAmYXJncyk7CisgICAgICBnZGJfYXNzZXJ0 IChvcGxlbiA+IDApOworICAgICAgaSArPSBvcGxlbjsKKyAgICB9CisgIHJl dHVybiAwOworfQorCisvKiBkaXNwbGF5X2NoYWluIGl0ZW1zIHBvaW50IHRv IGJsb2NrcyBhbmQgZXhwcmVzc2lvbnMuICBTb21lIGV4cHJlc3Npb25zIGlu CisgICB0dXJuIG1heSBwb2ludCB0byBzeW1ib2xzLgorICAgQm90aCBzeW1i b2xzIGFuZCBibG9ja3MgYXJlIG9ic3RhY2tfYWxsb2MnZCBvbiBvYmpmaWxl X3N0YWNrLCBhbmQgYXJlCisgICBvYnN0YWNrX2ZyZWUnZCB3aGVuIGEgc2hh cmVkIGxpYnJhcnkgaXMgdW5sb2FkZWQuCisgICBDbGVhciBwb2ludGVycyB0 aGF0IGFyZSBhYm91dCB0byBiZWNvbWUgZGFuZ2xpbmcuCisgICBCb3RoIC5l eHAgYW5kIC5ibG9jayBmaWVsZHMgd2lsbCBiZSByZXN0b3JlZCBuZXh0IHRp bWUgd2UgbmVlZCB0byBkaXNwbGF5CisgICBhbiBpdGVtIGJ5IHJlLXBhcnNp bmcgLmV4cF9zdHJpbmcgZmllbGQgaW4gdGhlIG5ldyBleGVjdXRpb24gY29u dGV4dC4gICovCisKK3N0YXRpYyB2b2lkCitjbGVhcl9kYW5nbGluZ19kaXNw bGF5X2V4cHJlc3Npb25zIChzdHJ1Y3Qgc29fbGlzdCAqc29saWIpCit7Cisg IHN0cnVjdCBkaXNwbGF5ICpkOworICBzdHJ1Y3Qgb2JqZmlsZSAqb2JqZmls ZSA9IE5VTEw7CisKKyAgZm9yIChkID0gZGlzcGxheV9jaGFpbjsgZDsgZCA9 IGQtPm5leHQpCisgICAgeworICAgICAgaWYgKGQtPmV4cCAmJiBkaXNwbGF5 X3VzZXNfc29saWJfcCAoZCwgc29saWIpKQorCXsKKwkgIHhmcmVlIChkLT5l eHApOworCSAgZC0+ZXhwID0gTlVMTDsKKwkgIGQtPmJsb2NrID0gTlVMTDsK Kwl9CisgICAgfQorfQogDAogCiAvKiBQcmludCB0aGUgdmFsdWUgaW4gc3Rh Y2sgZnJhbWUgRlJBTUUgb2YgYSB2YXJpYWJsZSBzcGVjaWZpZWQgYnkgYQpA QCAtMjM2Nyw2ICsyNDU3LDggQEAgX2luaXRpYWxpemVfcHJpbnRjbWQgKHZv aWQpCiAKICAgY3VycmVudF9kaXNwbGF5X251bWJlciA9IC0xOwogCisgIG9i c2VydmVyX2F0dGFjaF9zb2xpYl91bmxvYWRlZCAoY2xlYXJfZGFuZ2xpbmdf ZGlzcGxheV9leHByZXNzaW9ucyk7CisKICAgYWRkX2luZm8gKCJhZGRyZXNz IiwgYWRkcmVzc19pbmZvLAogCSAgICBfKCJEZXNjcmliZSB3aGVyZSBzeW1i b2wgU1lNIGlzIHN0b3JlZC4iKSk7CiAKSW5kZXg6IHNvbGliLmMKPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9zcmMvc3JjL2dkYi9z b2xpYi5jLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjExMQpkaWZmIC11IC1w IC11IC1yMS4xMTEgc29saWIuYwotLS0gc29saWIuYwkyMSBGZWIgMjAwOSAx NjoxNDo0OSAtMDAwMAkxLjExMQorKysgc29saWIuYwk1IE1hciAyMDA5IDIz OjI5OjM1IC0wMDAwCkBAIC05OTksOCArOTk5LDEzIEBAIHNoYXJlZGxpYnJh cnlfY29tbWFuZCAoY2hhciAqYXJncywgaW50IGYKIHZvaWQKIG5vX3NoYXJl ZF9saWJyYXJpZXMgKGNoYXIgKmlnbm9yZWQsIGludCBmcm9tX3R0eSkKIHsK LSAgb2JqZmlsZV9wdXJnZV9zb2xpYnMgKCk7CisgIC8qIFRoZSBvcmRlciBv ZiB0aGUgdHdvIHJvdXRpbmVzIGJlbG93IGlzIGltcG9ydGFudDogY2xlYXJf c29saWIgbm90aWZpZXMKKyAgICAgdGhlIHNvbGliX3VubG9hZGVkIG9ic2Vy dmVycywgYW5kIHNvbWUgb2YgdGhlc2Ugb2JzZXJ2ZXJzIG1pZ2h0IG5lZWQK KyAgICAgYWNjZXNzIHRvIHRoZWlyIGFzc29jaWF0ZWQgb2JqZmlsZXMuICBU aGVyZWZvcmUsIHdlIGNhbiBub3QgcHVyZ2UgdGhlCisgICAgIHNvbGlicycg b2JqZmlsZXMgYmVmb3JlIGNsZWFyX3NvbGliIGhhcyBiZWVuIGNhbGxlZC4g ICovCisKICAgY2xlYXJfc29saWIgKCk7CisgIG9iamZpbGVfcHVyZ2Vfc29s aWJzICgpOwogfQogCiBzdGF0aWMgdm9pZApJbmRleDogdGVzdHN1aXRlL2dk Yi5iYXNlL3NvbGliLWRpc3BsYXktbGliLmMKPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQpSQ1MgZmlsZTogdGVzdHN1aXRlL2dkYi5iYXNlL3NvbGliLWRpc3Bs YXktbGliLmMKZGlmZiAtTiB0ZXN0c3VpdGUvZ2RiLmJhc2Uvc29saWItZGlz cGxheS1saWIuYwotLS0gL2Rldi9udWxsCTEgSmFuIDE5NzAgMDA6MDA6MDAg LTAwMDAKKysrIHRlc3RzdWl0ZS9nZGIuYmFzZS9zb2xpYi1kaXNwbGF5LWxp Yi5jCTUgTWFyIDIwMDkgMjM6Mjk6MzYgLTAwMDAKQEAgLTAsMCArMSwzMCBA QAorLyogVGhpcyB0ZXN0Y2FzZSBpcyBwYXJ0IG9mIEdEQiwgdGhlIEdOVSBk ZWJ1Z2dlci4KKworICAgQ29weXJpZ2h0IDIwMDkgRnJlZSBTb2Z0d2FyZSBG b3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNv ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5 CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGlj ZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp b24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQg QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu dHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91 bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElm IG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICov CisKK2ludCBhX2dsb2JhbCA9IDQxOworI2lmbmRlZiBOT19CX0dMT0JBTAor aW50IGJfZ2xvYmFsID0gNDI7CisjZW5kaWYKK2ludCBjX2dsb2JhbCA9IDQz OworCitpbnQgZm9vICgpIHsKKyAgcmV0dXJuIGFfZ2xvYmFsICsKKyNpZm5k ZWYgTk9fQl9HTE9CQUwKKyAgICBiX2dsb2JhbCArCisjZW5kaWYKKyAgICBj X2dsb2JhbDsKK30KSW5kZXg6IHRlc3RzdWl0ZS9nZGIuYmFzZS9zb2xpYi1k aXNwbGF5LW1haW4uYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl OiB0ZXN0c3VpdGUvZ2RiLmJhc2Uvc29saWItZGlzcGxheS1tYWluLmMKZGlm ZiAtTiB0ZXN0c3VpdGUvZ2RiLmJhc2Uvc29saWItZGlzcGxheS1tYWluLmMK LS0tIC9kZXYvbnVsbAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyB0 ZXN0c3VpdGUvZ2RiLmJhc2Uvc29saWItZGlzcGxheS1tYWluLmMJNSBNYXIg MjAwOSAyMzoyOTozNiAtMDAwMApAQCAtMCwwICsxLDMyIEBACisvKiBUaGlz IHRlc3RjYXNlIGlzIHBhcnQgb2YgR0RCLCB0aGUgR05VIGRlYnVnZ2VyLgor CisgICBDb3B5cmlnaHQgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s IEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlv dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVu ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgor ICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAg VGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg aXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAg TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJl Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUg PGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworZXh0ZXJu IGludCBmb28gKCk7CisKK2ludCBtYWluX2dsb2JhbCA9IDQ0OworaW50IGJh ciAoKQoreworICBpbnQgYV9sb2NhbCA9IDQ1OworICBzdGF0aWMgaW50IGFf c3RhdGljID0gNDY7CisgIHJldHVybiBtYWluX2dsb2JhbCArIGFfbG9jYWwg KyBhX3N0YXRpYzsgLyogYnJlYWsgaGVyZSAqLworfQorCitpbnQgbWFpbiAo KQoreworICBiYXIgKCk7CisgIHJldHVybiBmb28gKCk7Cit9CkluZGV4OiB0 ZXN0c3VpdGUvZ2RiLmJhc2Uvc29saWItZGlzcGxheS5leHAKPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQpSQ1MgZmlsZTogdGVzdHN1aXRlL2dkYi5iYXNlL3Nv bGliLWRpc3BsYXkuZXhwCmRpZmYgLU4gdGVzdHN1aXRlL2dkYi5iYXNlL3Nv bGliLWRpc3BsYXkuZXhwCi0tLSAvZGV2L251bGwJMSBKYW4gMTk3MCAwMDow MDowMCAtMDAwMAorKysgdGVzdHN1aXRlL2dkYi5iYXNlL3NvbGliLWRpc3Bs YXkuZXhwCTUgTWFyIDIwMDkgMjM6Mjk6MzYgLTAwMDAKQEAgLTAsMCArMSwx MTUgQEAKKyMgQ29weXJpZ2h0IDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uLCBJbmMuCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5 b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVu ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisj IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRo aXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0 IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7 IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJD SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv ciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl ZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisj IGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6 Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorIworIyBDb250cmlidXRlZCBi eSBQYXVsIFBsdXpobmlrb3YgPHBwbHV6aG5pa292QGdvb2dsZS5jb20+Cisj CisKKyMgVGhpcyB0ZXN0IGNhc2UgdmVyaWZpZXMgdGhhdCBpZiBhIGRpc3Bs YXkgaXMgYWN0aXZlIG9uIGEgdmFyaWFibGUKKyMgd2hpY2ggYmVsb25ncyBp biBhIHNoYXJlZCBsaWJyYXJ5LCBhbmQgdGhhdCBzaGFyZWQgbGlicmFyeSBp cworIyByZWxvYWRlZCAoZS5nLiBkdWUgdG8gcmUtZXhlY3V0aW9uIG9mIHRo ZSBwcm9ncmFtKSwgR0RCIHdpbGwgY29udGludWUKKyMgdG8gZGlzcGxheSBp dCAoZ2RiLTYuOCBjcmFzaGVkIHVuZGVyIHRoaXMgc2NlbmFyaW8pLgorCisj IEFsc28gdGVzdCB0aGF0IGEgZGlzcGxheSBvZiB2YXJpYWJsZSB3aGljaCBp cyBjdXJyZW50bHkgcHJlc2VudCBpbgorIyBhIHNoYXJlZCBsaWJyYXJ5LCBi dXQgZGlzYXBwZWFycyBiZWZvcmUgcmUtcnVuLCBkb2Vzbid0IGNhdXNlIEdE QgorIyBkaWZmaWN1bHRpZXMsIGFuZCB0aGF0IGl0IGNvbnRpbnVlcyB0byBk aXNwbGF5IG90aGVyIHZhcmlhYmxlcy4KKworIyBGaW5hbGx5LCB0ZXN0IHRo YXQgZGlzcGxheXMgd2hpY2ggcmVmZXIgdG8gbWFpbiBleGVjdXRhYmxlCisj IChhbmQgdGh1cyBhcmVuJ3QgYWZmZWN0ZWQgYnkgc2hhcmVkIGxpYnJhcnkg dW5sb2FkaW5nKSBhcmUgbm90CisjIGRpc2FibGVkIHByZW1hdHVyZWx5Lgor CitpZiBbc2tpcF9zaGxpYl90ZXN0c10gdGhlbiB7CisgICAgcmV0dXJuIDAK K30KKworIyBMaWJyYXJ5IGZpbGUuCitzZXQgbGlibmFtZSAic29saWItZGlz cGxheS1saWIiCitzZXQgc3JjZmlsZV9saWIgJHtzcmNkaXJ9LyR7c3ViZGly fS8ke2xpYm5hbWV9LmMKK3NldCBiaW5maWxlX2xpYiAke29iamRpcn0vJHtz dWJkaXJ9LyR7bGlibmFtZX0uc28KK3NldCBsaWJfZmxhZ3MgW2xpc3QgZGVi dWddCisjIEJpbmFyeSBmaWxlLgorc2V0IHRlc3RmaWxlICJzb2xpYi1kaXNw bGF5LW1haW4iCitzZXQgc3JjZmlsZSAke3NyY2Rpcn0vJHtzdWJkaXJ9LyR7 dGVzdGZpbGV9LmMKK3NldCBiaW5maWxlICR7b2JqZGlyfS8ke3N1YmRpcn0v JHt0ZXN0ZmlsZX0KK3NldCBiaW5fZmxhZ3MgW2xpc3QgZGVidWcgc2hsaWI9 JHtiaW5maWxlX2xpYn1dCisKK2lmIFtnZXRfY29tcGlsZXJfaW5mbyAke2Jp bmZpbGV9XSB7CisgICAgcmV0dXJuIC0xCit9CisKK2lmIHsgW2dkYl9jb21w aWxlX3NobGliICR7c3JjZmlsZV9saWJ9ICR7YmluZmlsZV9saWJ9ICRsaWJf ZmxhZ3NdICE9ICIiCisgICAgIHx8IFtnZGJfY29tcGlsZSAke3NyY2ZpbGV9 ICR7YmluZmlsZX0gZXhlY3V0YWJsZSAkYmluX2ZsYWdzXSAhPSAiIiB9IHsK KyAgdW50ZXN0ZWQgIkNvdWxkIG5vdCBjb21waWxlICRiaW5maWxlX2xpYiBv ciAkYmluZmlsZS4iCisgIHJldHVybiAtMQorfQorCitnZGJfZXhpdAorZ2Ri X3N0YXJ0CitnZGJfcmVpbml0aWFsaXplX2RpciAkc3JjZGlyLyRzdWJkaXIK K2dkYl9sb2FkICR7YmluZmlsZX0KKworaWYgIVtydW50b19tYWluXSB0aGVu IHsKKyAgZmFpbCAiQ2FuJ3QgcnVuIHRvIG1haW4iCisgIHJldHVybiAwCit9 CisKK2dkYl90ZXN0ICJkaXNwbGF5IGFfZ2xvYmFsIiAiMTogYV9nbG9iYWwg PSA0MSIKK2dkYl90ZXN0ICJkaXNwbGF5IGJfZ2xvYmFsIiAiMjogYl9nbG9i YWwgPSA0MiIKK2dkYl90ZXN0ICJkaXNwbGF5IGNfZ2xvYmFsIiAiMzogY19n bG9iYWwgPSA0MyIKKworaWYgeyBbZ2RiX3N0YXJ0X2NtZF0gPCAwIH0gewor ICAgIGZhaWwgIkNhbid0IHJ1biB0byBtYWluICgyKSIKKyAgICByZXR1cm4g MAorfQorCitnZGJfdGVzdCAiIiAiMzogY19nbG9iYWwgPSA0M1xcclxcbjI6 IGJfZ2xvYmFsID0gNDJcXHJcXG4xOiBhX2dsb2JhbCA9IDQxIiAiYWZ0ZXIg cmVydW4iCisKKyMgTm93IHJlYnVpbGQgdGhlIGxpYnJhcnkgd2l0aG91dCBi X2dsb2JhbAoraWYgeyBbZ2RiX2NvbXBpbGVfc2hsaWIgJHtzcmNmaWxlX2xp Yn0gJHtiaW5maWxlX2xpYn0gXAorCSAgIiRsaWJfZmxhZ3MgYWRkaXRpb25h bF9mbGFncz0tRE5PX0JfR0xPQkFMIl0gIT0gIiJ9IHsKKyAgICBmYWlsICJD YW4ndCByZWJ1aWxkICRiaW5maWxlX2xpYiIKK30KKworaWYgeyBbZ2RiX3N0 YXJ0X2NtZF0gPCAwIH0geworICAgIGZhaWwgIkNhbid0IHJ1biB0byBtYWlu ICgzKSIKKyAgICByZXR1cm4gMAorfQorCitnZGJfdGVzdCAiIiAiMzogY19n bG9iYWwgPSA0M1xcclxcbndhcm5pbmc6IC4qYl9nbG9iYWwuKlxcclxcbjE6 IGFfZ2xvYmFsID0gNDEiICJhZnRlciByZXJ1biIKKworIyBOb3cgdmVyaWZ5 IHRoYXQgZGlzcGxheXMgd2hpY2ggYXJlIG5vdCBpbiB0aGUgc2hhcmVkIGxp YnJhcnkKKyMgYXJlIG5vdCBjbGVhcmVkIHBlcm1hdHVyZWx5LgorCitnZGJf dGVzdCAiYnJlYWsgW2dkYl9nZXRfbGluZV9udW1iZXIgImJyZWFrIGhlcmUi ICR7dGVzdGZpbGV9LmNdIiBcCisJIi4qQnJlYWtwb2ludC4qIGF0IC4qIiAK KworZ2RiX3Rlc3QgImNvbnRpbnVlIgorZ2RiX3Rlc3QgImRpc3BsYXkgbWFp bl9nbG9iYWwiICI0OiBtYWluX2dsb2JhbCA9IDQ0IgorZ2RiX3Rlc3QgImRp c3BsYXkgYV9sb2NhbCIgIjU6IGFfbG9jYWwgPSA0NSIKK2dkYl90ZXN0ICJk aXNwbGF5IGFfc3RhdGljIiAiNjogYV9zdGF0aWMgPSA0NiIKKworaWYgeyBb Z2RiX3N0YXJ0X2NtZF0gPCAwIH0geworICAgIGZhaWwgIkNhbid0IHJ1biB0 byBtYWluICg0KSIKKyAgICByZXR1cm4gMAorfQorCitnZGJfdGVzdCAiIiAi NjogYV9zdGF0aWMgPSA0NlxcclxcbjQ6IG1haW5fZ2xvYmFsID0gNDRcXHJc XG4uKiIKK2dkYl90ZXN0ICJicmVhayBbZ2RiX2dldF9saW5lX251bWJlciAi YnJlYWsgaGVyZSIgJHt0ZXN0ZmlsZX0uY10iIFwKKwkiLipCcmVha3BvaW50 LiogYXQgLioiIAorZ2RiX3Rlc3QgImNvbnRpbnVlIiAiNjogYV9zdGF0aWMg PSA0NlxcclxcbjU6IGFfbG9jYWwgPSA0NVxcclxcbjQ6IG1haW5fZ2xvYmFs ID0gNDRcXHJcXG4uKiIKKworZ2RiX2V4aXQKKworcmV0dXJuIDAKKworCg== --001636e909e9222713046467c79a--