From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 1075 invoked by alias); 18 Feb 2009 22:58:34 -0000 Received: (qmail 1067 invoked by uid 22791); 18 Feb 2009 22:58:33 -0000 X-SWARE-Spam-Status: No, hits=-0.5 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_22,J_CHICKENPOX_35,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; Wed, 18 Feb 2009 22:58:27 +0000 Received: from wpaz9.hot.corp.google.com (wpaz9.hot.corp.google.com [172.24.198.73]) by smtp-out.google.com with ESMTP id n1IMwMVv001633 for ; Wed, 18 Feb 2009 22:58:22 GMT Received: from wf-out-1314.google.com (wfg23.prod.google.com [10.142.7.23]) by wpaz9.hot.corp.google.com with ESMTP id n1IMw0GQ003560 for ; Wed, 18 Feb 2009 14:58:20 -0800 Received: by wf-out-1314.google.com with SMTP id 23so145724wfg.0 for ; Wed, 18 Feb 2009 14:58:20 -0800 (PST) MIME-Version: 1.0 Received: by 10.142.125.4 with SMTP id x4mr2834982wfc.75.1234997900296; Wed, 18 Feb 2009 14:58:20 -0800 (PST) In-Reply-To: References: <20090205030257.8A6073A6B7A@localhost> <8ac60eac0902061837p5885b812j8a26669e799702e1@mail.gmail.com> Date: Thu, 19 Feb 2009 01:00:00 -0000 Message-ID: <8ac60eac0902181458g39dfbce9k63c3329528b0aad5@mail.gmail.com> Subject: Re: [patch] Fix a crash when displaying variables from shared library. From: Paul Pluzhnikov To: Tom Tromey Cc: Pedro Alves , gdb-patches@sourceware.org Content-Type: multipart/mixed; boundary=000e0cd2287c2541270463395b39 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-02/txt/msg00391.txt.bz2 --000e0cd2287c2541270463395b39 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-length: 2208 On Tue, Feb 10, 2009 at 5:43 PM, Tom Tromey wrote: > But, it seems to me that notifying the observer here is the right > thing to do -- otherwise this observer is unreliable. Vladimir beat me to it. > This patch is ok. It turns out that clearing all displays on solib unload was too aggressive, as can be seen here: /* --- noshlib.c --- */ int a_global; int foo() { static int a_static; int a_local; return a_global + a_local + a_static; } int main() { return foo(); } /* --- cut --- */ Before the patch: gdb64-cvs -nx -ex 'set confirm off' ./noshlib GNU gdb (GDB) 6.8.50.20090218-cvs ... (gdb) b main Breakpoint 1 at 0x40032a: file noshlib.c, line 11. (gdb) b foo Breakpoint 2 at 0x400310: file noshlib.c, line 6. (gdb) r Breakpoint 1, main () at noshlib.c:11 11 return foo(); (gdb) c Breakpoint 2, foo () at noshlib.c:6 6 return a_global + a_local + a_static; (gdb) display a_global (gdb) display a_local (gdb) display a_static (gdb) r Breakpoint 1, main () at noshlib.c:11 11 return foo(); 3: a_static = 0 1: a_global = 0 (gdb) c Breakpoint 2, foo () at noshlib.c:6 6 return a_global + a_local + a_static; 3: a_static = 0 2: a_local = 0 1: a_global = 0 (gdb) q After the patch: (gdb) b main Breakpoint 1 at 0x40032a: file noshlib.c, line 11. (gdb) b foo Breakpoint 2 at 0x400310: file noshlib.c, line 6. (gdb) r Breakpoint 1, main () at noshlib.c:11 11 return foo(); (gdb) c Breakpoint 2, foo () at noshlib.c:6 6 return a_global + a_local + a_static; (gdb) display a_global (gdb) display a_local (gdb) display a_static (gdb) r Breakpoint 1, main () at noshlib.c:11 11 return foo(); warning: Unable to display "a_static": No symbol "a_static" in current context. warning: Unable to display "a_local": No symbol "a_local" in current context. 1: a_global = 0 (gdb) c Breakpoint 2, foo () at noshlib.c:6 6 return a_global + a_local + a_static; 1: a_global = 0 I've updated the patch to only clear displays which actually are about to become dangling, and extended the test to check that displays that refer to the main executable are not affected. Thanks, -- Paul Pluzhnikov --000e0cd2287c2541270463395b39 Content-Type: text/plain; charset=US-ASCII; name="gdb-display-crash-20090218.txt" Content-Disposition: attachment; filename="gdb-display-crash-20090218.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_frclthym0 Content-length: 13461 SW5kZXg6IHByaW50Y21kLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg ZmlsZTogL2N2cy9zcmMvc3JjL2dkYi9wcmludGNtZC5jLHYKcmV0cmlldmlu ZyByZXZpc2lvbiAxLjE0MgpkaWZmIC11IC1wIC11IC1yMS4xNDIgcHJpbnRj bWQuYwotLS0gcHJpbnRjbWQuYwk1IEZlYiAyMDA5IDAwOjEzOjQzIC0wMDAw CTEuMTQyCisrKyBwcmludGNtZC5jCTE4IEZlYiAyMDA5IDIyOjU1OjE4IC0w MDAwCkBAIC00Myw2ICs0Myw5IEBACiAjaW5jbHVkZSAiZGlzYXNtLmgiCiAj aW5jbHVkZSAiZGZwLmgiCiAjaW5jbHVkZSAidmFscHJpbnQuaCIKKyNpbmNs dWRlICJleGNlcHRpb25zLmgiCisjaW5jbHVkZSAib2JzZXJ2ZXIuaCIKKyNp bmNsdWRlICJzb2xpc3QuaCIKIAogI2lmZGVmIFRVSQogI2luY2x1ZGUgInR1 aS90dWkuaCIJCS8qIEZvciB0dWlfYWN0aXZlIGV0LmFsLiAgICovCkBAIC0x Mzk1LDcgKzEzOTgsNyBAQCBkaXNwbGF5X2NvbW1hbmQgKGNoYXIgKmV4cCwg aW50IGZyb21fdHR5CiAJICBmbXQuY291bnQgPSAwOwogCX0KIAotICAgICAg aW5uZXJtb3N0X2Jsb2NrID0gMDsKKyAgICAgIGlubmVybW9zdF9ibG9jayA9 IE5VTEw7CiAgICAgICBleHByID0gcGFyc2VfZXhwcmVzc2lvbiAoZXhwKTsK IAogICAgICAgbmV3ID0gKHN0cnVjdCBkaXNwbGF5ICopIHhtYWxsb2MgKHNp emVvZiAoc3RydWN0IGRpc3BsYXkpKTsKQEAgLTE1MTksNiArMTUyMiwyNSBA QCBkb19vbmVfZGlzcGxheSAoc3RydWN0IGRpc3BsYXkgKmQpCiAgIGlmIChk LT5lbmFibGVkX3AgPT0gMCkKICAgICByZXR1cm47CiAKKyAgaWYgKGQtPmV4 cCA9PSBOVUxMKQorICAgIHsKKyAgICAgIHZvbGF0aWxlIHN0cnVjdCBnZGJf ZXhjZXB0aW9uIGV4OworICAgICAgVFJZX0NBVENIIChleCwgUkVUVVJOX01B U0tfQUxMKQorCXsKKwkgIGlubmVybW9zdF9ibG9jayA9IE5VTEw7CisJICBk LT5leHAgPSBwYXJzZV9leHByZXNzaW9uIChkLT5leHBfc3RyaW5nKTsKKwkg IGQtPmJsb2NrID0gaW5uZXJtb3N0X2Jsb2NrOworCX0KKyAgICAgIGlmIChl eC5yZWFzb24gPCAwKQorCXsKKwkgIC8qIENhbid0IHJlLXBhcnNlIHRoZSBl eHByZXNzaW9uLiBEaXNhYmxlIHRoaXMgZGlzcGxheSBpdGVtLiAqLworCSAg ZC0+ZW5hYmxlZF9wID0gMDsKKwkgIHdhcm5pbmcgKF8oIlVuYWJsZSB0byBk aXNwbGF5IFwiJXNcIjogJXMiKSwKKwkJICAgZC0+ZXhwX3N0cmluZywgZXgu bWVzc2FnZSk7CisJICByZXR1cm47CisJfQorICAgIH0KKwogICBpZiAoZC0+ YmxvY2spCiAgICAgd2l0aGluX2N1cnJlbnRfc2NvcGUgPSBjb250YWluZWRf aW4gKGdldF9zZWxlY3RlZF9ibG9jayAoMCksIGQtPmJsb2NrKTsKICAgZWxz ZQpAQCAtMTczMSw2ICsxNzUzLDcwIEBAIGRpc2FibGVfZGlzcGxheV9jb21t YW5kIChjaGFyICphcmdzLCBpbnQKIAkgIHArKzsKICAgICAgIH0KIH0KKwor LyogQW5zd2VyIDEgaWYgImQiIHVzZXMgInNvbGliIiAoYW5kIHdpbGwgYmVj b21lIGRhbmdsaW5nIHdoZW4gInNvbGliIgorICAgaXMgdW5sb2FkZWQpLCBv dGhlcndpc2UgYW5zd2VyIDAuICAqLworCitzdGF0aWMgaW50CitkaXNwbGF5 X3VzZXNfc29saWJfcCAoY29uc3Qgc3RydWN0IGRpc3BsYXkgKmQsCisJCSAg ICAgIGNvbnN0IHN0cnVjdCBzb19saXN0ICpzb2xpYikKK3sKKyAgaW50IGk7 CisgIGNvbnN0IENPUkVfQUREUiBhZGRyX2xvdyA9IHNvbGliLT5hZGRyX2xv dzsKKyAgY29uc3QgQ09SRV9BRERSIGFkZHJfaGlnaCA9IHNvbGliLT5hZGRy X2hpZ2g7CisKKyAgaWYgKGQtPmJsb2NrICE9IE5VTEwKKyAgICAgICYmIGFk ZHJfbG93IDw9IGQtPmJsb2NrLT5zdGFydGFkZHIgJiYgZC0+YmxvY2stPmVu ZGFkZHIgPD0gYWRkcl9oaWdoKQorICAgIHJldHVybiAxOworCisgIGZvciAo aSA9IDA7IGkgPCBkLT5leHAtPm5lbHRzOyBpKyspCisgICAgeworICAgICAg dW5pb24gZXhwX2VsZW1lbnQgKmVsdHMgPSBkLT5leHAtPmVsdHM7CisgICAg ICBpZiAoZWx0c1tpXS5vcGNvZGUgPT0gT1BfVkFSX1ZBTFVFKQorCXsKKwkg IHN0cnVjdCBibG9jayAqYmxvY2sgPSBlbHRzWysraV0uYmxvY2s7CisJICBz dHJ1Y3Qgc3ltYm9sICpzeW1ib2wgPSBlbHRzWysraV0uc3ltYm9sOworCSAg c3RydWN0IG9ial9zZWN0aW9uICpzZWN0aW9uOworCisJICBnZGJfYXNzZXJ0 IChlbHRzWysraV0ub3Bjb2RlID09IE9QX1ZBUl9WQUxVRSk7CisKKwkgIGlm IChibG9jaworCSAgICAgICYmIGFkZHJfbG93IDw9IGJsb2NrLT5zdGFydGFk ZHIgJiYgYmxvY2stPmVuZGFkZHIgPD0gYWRkcl9oaWdoKQorCSAgICByZXR1 cm4gMTsKKworCSAgc2VjdGlvbiA9IFNZTUJPTF9PQkpfU0VDVElPTiAoc3lt Ym9sKTsKKwkgIGlmIChzZWN0aW9uICYmIHNlY3Rpb24tPm9iamZpbGUgPT0g c29saWItPm9iamZpbGUpCisJICAgIHJldHVybiAxOworCX0KKyAgICB9Cisg IHJldHVybiAwOworfQorCisvKiBkaXNwbGF5X2NoYWluIGl0ZW1zIHBvaW50 IHRvIGJsb2NrcyBhbmQgZXhwcmVzc2lvbnMuIFNvbWUKKyAgIGV4cHJlc3Np b25zIGluIHR1cm4gbWF5IHBvaW50IHRvIHN5bWJvbHMuCisgICBCb3RoIHN5 bWJvbHMgYW5kIGJsb2NrcyBhcmUgb2JzdGFja19hbGxvYydkIG9uIG9iamZp bGVfc3RhY2ssIGFuZCBhcmUKKyAgIG9ic3RhY2tfZnJlZSdkIHdoZW4gYSBz aGFyZWQgbGlicmFyeSBpcyB1bmxvYWRlZC4KKyAgIENsZWFyIHBvaW50ZXJz IHRoYXQgYXJlIGFib3V0IHRvIGJlY29tZSBkYW5nbGluZy4KKyAgIEJvdGgg LmV4cCBhbmQgLmJsb2NrIHdpbGwgYmUgcmVzdG9yZWQgbmV4dCB0aW1lIHdl IG5lZWQgdG8gZGlzcGxheSBhbiBpdGVtCisgICBmcm9tIHRoZSBuZXdseS1s b2FkZWQgc2hhcmVkIGxpYnJhcnkuCisqLworCitzdGF0aWMgdm9pZAorY2xl YXJfZGFuZ2xpbmdfZGlzcGxheV9leHByZXNzaW9ucyAoc3RydWN0IHNvX2xp c3QgKnNvbGliKQoreworICBzdHJ1Y3QgZGlzcGxheSAqZDsKKyAgc3RydWN0 IG9iamZpbGUgKm9iamZpbGUgPSBOVUxMOworCisgIGZvciAoZCA9IGRpc3Bs YXlfY2hhaW47IGQ7IGQgPSBkLT5uZXh0KQorICAgIHsKKyAgICAgIGlmIChk LT5leHAgJiYgZGlzcGxheV91c2VzX3NvbGliX3AgKGQsIHNvbGliKSkKKwl7 CisJICB4ZnJlZSAoZC0+ZXhwKTsKKwkgIGQtPmV4cCA9IE5VTEw7CisJICBk LT5ibG9jayA9IE5VTEw7CisJfQorICAgIH0KK30KIAwKIAogLyogUHJpbnQg dGhlIHZhbHVlIGluIHN0YWNrIGZyYW1lIEZSQU1FIG9mIGEgdmFyaWFibGUg c3BlY2lmaWVkIGJ5IGEKQEAgLTIzNjcsNiArMjQ1Myw4IEBAIF9pbml0aWFs aXplX3ByaW50Y21kICh2b2lkKQogCiAgIGN1cnJlbnRfZGlzcGxheV9udW1i ZXIgPSAtMTsKIAorICBvYnNlcnZlcl9hdHRhY2hfc29saWJfdW5sb2FkZWQg KGNsZWFyX2RhbmdsaW5nX2Rpc3BsYXlfZXhwcmVzc2lvbnMpOworCiAgIGFk ZF9pbmZvICgiYWRkcmVzcyIsIGFkZHJlc3NfaW5mbywKIAkgICAgXygiRGVz Y3JpYmUgd2hlcmUgc3ltYm9sIFNZTSBpcyBzdG9yZWQuIikpOwogCkluZGV4 OiB0ZXN0c3VpdGUvZ2RiLmJhc2Uvc29saWItZGlzcGxheS1saWIuYwo9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiB0ZXN0c3VpdGUvZ2RiLmJh c2Uvc29saWItZGlzcGxheS1saWIuYwpkaWZmIC1OIHRlc3RzdWl0ZS9nZGIu YmFzZS9zb2xpYi1kaXNwbGF5LWxpYi5jCi0tLSAvZGV2L251bGwJMSBKYW4g MTk3MCAwMDowMDowMCAtMDAwMAorKysgdGVzdHN1aXRlL2dkYi5iYXNlL3Nv bGliLWRpc3BsYXktbGliLmMJMTggRmViIDIwMDkgMjI6NTU6MTkgLTAwMDAK QEAgLTAsMCArMSwzMCBAQAorLyogVGhpcyB0ZXN0Y2FzZSBpcyBwYXJ0IG9m IEdEQiwgdGhlIEdOVSBkZWJ1Z2dlci4KKworICAgQ29weXJpZ2h0IDIwMDkg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJv Z3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp dCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQor ICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNp b24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikg YW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0 cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor ICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl IGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAg IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu CisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRo aXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcv bGljZW5zZXMvPi4gICovCisKK2ludCBhX2dsb2JhbCA9IDQxOworI2lmbmRl ZiBOT19CX0dMT0JBTAoraW50IGJfZ2xvYmFsID0gNDI7CisjZW5kaWYKK2lu dCBjX2dsb2JhbCA9IDQzOworCitpbnQgZm9vICgpIHsKKyAgcmV0dXJuIGFf Z2xvYmFsICsKKyNpZm5kZWYgTk9fQl9HTE9CQUwKKyAgICBiX2dsb2JhbCAr CisjZW5kaWYKKyAgICBjX2dsb2JhbDsKK30KSW5kZXg6IHRlc3RzdWl0ZS9n ZGIuYmFzZS9zb2xpYi1kaXNwbGF5LW1haW4uYwo9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09ClJDUyBmaWxlOiB0ZXN0c3VpdGUvZ2RiLmJhc2Uvc29saWItZGlz cGxheS1tYWluLmMKZGlmZiAtTiB0ZXN0c3VpdGUvZ2RiLmJhc2Uvc29saWIt ZGlzcGxheS1tYWluLmMKLS0tIC9kZXYvbnVsbAkxIEphbiAxOTcwIDAwOjAw OjAwIC0wMDAwCisrKyB0ZXN0c3VpdGUvZ2RiLmJhc2Uvc29saWItZGlzcGxh eS1tYWluLmMJMTggRmViIDIwMDkgMjI6NTU6MTkgLTAwMDAKQEAgLTAsMCAr MSwzMiBAQAorLyogVGhpcyB0ZXN0Y2FzZSBpcyBwYXJ0IG9mIEdEQiwgdGhl IEdOVSBkZWJ1Z2dlci4KKworICAgQ29weXJpZ2h0IDIwMDkgRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBm cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Ig bW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0 aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy IHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBp biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJ VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg d2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlv dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3Jh bS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMv Pi4gICovCisKK2V4dGVybiBpbnQgZm9vICgpOworCitpbnQgbWFpbl9nbG9i YWwgPSA0NDsKK2ludCBiYXIgKCkKK3sKKyAgaW50IGFfbG9jYWwgPSA0NTsK KyAgc3RhdGljIGludCBhX3N0YXRpYyA9IDQ2OworICByZXR1cm4gbWFpbl9n bG9iYWwgKyBhX2xvY2FsICsgYV9zdGF0aWM7IC8qIGJyZWFrIGhlcmUgKi8K K30KKworaW50IG1haW4gKCkKK3sKKyAgYmFyICgpOworICByZXR1cm4gZm9v ICgpOworfQpJbmRleDogdGVzdHN1aXRlL2dkYi5iYXNlL3NvbGliLWRpc3Bs YXkuZXhwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IHRlc3Rz dWl0ZS9nZGIuYmFzZS9zb2xpYi1kaXNwbGF5LmV4cApkaWZmIC1OIHRlc3Rz dWl0ZS9nZGIuYmFzZS9zb2xpYi1kaXNwbGF5LmV4cAotLS0gL2Rldi9udWxs CTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIHRlc3RzdWl0ZS9nZGIu YmFzZS9zb2xpYi1kaXNwbGF5LmV4cAkxOCBGZWIgMjAwOSAyMjo1NToxOSAt MDAwMApAQCAtMCwwICsxLDk5IEBACisjIENvcHlyaWdodCAyMDA5IEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBUaGlzIHByb2dyYW0gaXMg ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y IG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRo ZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2 ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4g dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhP VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy cmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hv dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElm IG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyMK KyMgQ29udHJpYnV0ZWQgYnkgUGF1bCBQbHV6aG5pa292IDxwcGx1emhuaWtv dkBnb29nbGUuY29tPgorIworCisjIFRoaXMgdGVzdCBjYXNlIHZlcmlmaWVz IHRoYXQgaWYgYSBkaXNwbGF5IGlzIGFjdGl2ZSBvbiBhIHZhcmlhYmxlCisj IHdoaWNoIGJlbG9uZ3MgaW4gYSBzaGFyZWQgbGlicmFyeSwgYW5kIHRoYXQg c2hhcmVkIGxpYnJhcnkgaXMKKyMgcmVsb2FkZWQgKGUuZy4gZHVlIHRvIHJl LWV4ZWN1dGlvbiBvZiB0aGUgcHJvZ3JhbSksIEdEQiB3aWxsIGNvbnRpbnVl CisjIHRvIGRpc3BsYXkgaXQgKGdkYi02LjggY3Jhc2hlZCB1bmRlciB0aGlz IHNjZW5hcmlvKS4KKworIyBBbHNvIHRlc3QgdGhhdCBhIGRpc3BsYXkgb2Yg dmFyaWFibGUgd2hpY2ggaXMgY3VycmVudGx5IHByZXNlbnQgaW4KKyMgYSBz aGFyZWQgbGlicmFyeSwgYnV0IGRpc2FwcGVhcnMgYmVmb3JlIHJlLXJ1biwg ZG9lc24ndCBjYXVzZSBHREIKKyMgZGlmZmljdWx0aWVzLCBhbmQgdGhhdCBp dCBjb250aW51ZXMgdG8gZGlzcGxheSBvdGhlciB2YXJpYWJsZXMuCisKKyMg RmluYWxseSwgdGVzdCB0aGF0IGRpc3BsYXlzIHdoaWNoIHJlZmVyIHRvIG1h aW4gZXhlY3V0YWJsZQorIyAoYW5kIHRodXMgYXJlbid0IGFmZmVjdGVkIGJ5 IHNoYXJlZCBsaWJyYXJ5IHVubG9hZGluZykgYXJlIG5vdAorIyBkaXNhYmxl ZCBwcmVtYXR1cmVseS4KKworaWYge1tza2lwX3NobGliX3Rlc3RzXSB8fCBb aXNfcmVtb3RlIHRhcmdldF19IHsKKyAgICByZXR1cm4gMAorfQorCisjIExp YnJhcnkgZmlsZS4KK3NldCBsaWJuYW1lICJzb2xpYi1kaXNwbGF5LWxpYiIK K3NldCBzcmNmaWxlX2xpYiAke3NyY2Rpcn0vJHtzdWJkaXJ9LyR7bGlibmFt ZX0uYworc2V0IGJpbmZpbGVfbGliICR7b2JqZGlyfS8ke3N1YmRpcn0vJHts aWJuYW1lfS5zbworc2V0IGxpYl9mbGFncyBbbGlzdCBkZWJ1Z10KKyMgQmlu YXJ5IGZpbGUuCitzZXQgdGVzdGZpbGUgInNvbGliLWRpc3BsYXktbWFpbiIK K3NldCBzcmNmaWxlICR7c3JjZGlyfS8ke3N1YmRpcn0vJHt0ZXN0ZmlsZX0u Yworc2V0IGJpbmZpbGUgJHtvYmpkaXJ9LyR7c3ViZGlyfS8ke3Rlc3RmaWxl fQorc2V0IGJpbl9mbGFncyBbbGlzdCBkZWJ1ZyBzaGxpYj0ke2JpbmZpbGVf bGlifV0KKworaWYgW2dldF9jb21waWxlcl9pbmZvICR7YmluZmlsZX1dIHsK KyAgICByZXR1cm4gLTEKK30KKworaWYgeyBbZ2RiX2NvbXBpbGVfc2hsaWIg JHtzcmNmaWxlX2xpYn0gJHtiaW5maWxlX2xpYn0gJGxpYl9mbGFnc10gIT0g IiIKKyAgICAgfHwgW2dkYl9jb21waWxlICR7c3JjZmlsZX0gJHtiaW5maWxl fSBleGVjdXRhYmxlICRiaW5fZmxhZ3NdICE9ICIiIH0geworICB1bnRlc3Rl ZCAiQ291bGQgbm90IGNvbXBpbGUgJGJpbmZpbGVfbGliIG9yICRiaW5maWxl LiIKKyAgcmV0dXJuIC0xCit9CisKK2dkYl9leGl0CitnZGJfc3RhcnQKK2dk Yl9yZWluaXRpYWxpemVfZGlyICRzcmNkaXIvJHN1YmRpcgorZ2RiX2xvYWQg JHtiaW5maWxlfQorCitpZiAhW3J1bnRvX21haW5dIHRoZW4geworICBmYWls ICJDYW4ndCBydW4gdG8gbWFpbiIKKyAgcmV0dXJuIDAKK30KKworZ2RiX3Rl c3QgImRpc3BsYXkgYV9nbG9iYWwiICIxOiBhX2dsb2JhbCA9IDQxIgorZ2Ri X3Rlc3QgImRpc3BsYXkgYl9nbG9iYWwiICIyOiBiX2dsb2JhbCA9IDQyIgor Z2RiX3Rlc3QgImRpc3BsYXkgY19nbG9iYWwiICIzOiBjX2dsb2JhbCA9IDQz IgorZ2RiX3Rlc3QgImNvbnRpbnVlIgorZ2RiX3Rlc3QgInJ1biIgIjM6IGNf Z2xvYmFsID0gNDNcXHJcXG4yOiBiX2dsb2JhbCA9IDQyXFxyXFxuMTogYV9n bG9iYWwgPSA0MSIgImFmdGVyIHJlcnVuIgorZ2RiX3Rlc3QgImNvbnRpbnVl IgorCisjIE5vdyByZWJ1aWxkIHRoZSBsaWJyYXJ5IHdpdGhvdXQgYl9nbG9i YWwKK2lmIHsgW2dkYl9jb21waWxlX3NobGliICR7c3JjZmlsZV9saWJ9ICR7 YmluZmlsZV9saWJ9IFwKKwkgICIkbGliX2ZsYWdzIGFkZGl0aW9uYWxfZmxh Z3M9LUROT19CX0dMT0JBTCJdICE9ICIifSB7CisgICAgZmFpbCAiQ2FuJ3Qg cmVidWlsZCAkYmluZmlsZV9saWIiCit9CisKK2dkYl90ZXN0ICJydW4iICIz OiBjX2dsb2JhbCA9IDQzXFxyXFxud2FybmluZzogLipiX2dsb2JhbC4qXFxy XFxuMTogYV9nbG9iYWwgPSA0MSIgImFmdGVyIHJlYnVpbGQiCisKKyMgTm93 IHZlcmlmeSB0aGF0IGRpc3BsYXlzIHdoaWNoIGFyZSBub3QgaW4gdGhlIHNo YXJlZCBsaWJyYXJ5CisjIGFyZSBub3QgY2xlYXJlZCBwZXJtYXR1cmVseS4K KworZ2RiX3Rlc3QgImJyZWFrIFtnZGJfZ2V0X2xpbmVfbnVtYmVyICJicmVh ayBoZXJlIiAke3Rlc3RmaWxlfS5jXSIgXAorCSIuKkJyZWFrcG9pbnQuKiBh dCAuKiIgCisKK2dkYl90ZXN0ICJjb250aW51ZSIKK2dkYl90ZXN0ICJkaXNw bGF5IG1haW5fZ2xvYmFsIiAiNDogbWFpbl9nbG9iYWwgPSA0NCIKK2dkYl90 ZXN0ICJkaXNwbGF5IGFfbG9jYWwiICI1OiBhX2xvY2FsID0gNDUiCitnZGJf dGVzdCAiZGlzcGxheSBhX3N0YXRpYyIgIjY6IGFfc3RhdGljID0gNDYiCitn ZGJfdGVzdCAiY29udGludWUiCitnZGJfdGVzdCAicnVuIiAiNjogYV9zdGF0 aWMgPSA0NlxcclxcbjQ6IG1haW5fZ2xvYmFsID0gNDRcXHJcXG4uKiIKK2dk Yl90ZXN0ICJjb250aW51ZSIgIjY6IGFfc3RhdGljID0gNDZcXHJcXG41OiBh X2xvY2FsID0gNDVcXHJcXG40OiBtYWluX2dsb2JhbCA9IDQ0XFxyXFxuLioi CisKK2dkYl9leGl0CisKK3JldHVybiAwCisKKwo= --000e0cd2287c2541270463395b39--