From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 1601 invoked by alias); 20 Dec 2007 08:03:39 -0000 Received: (qmail 1592 invoked by uid 22791); 20 Dec 2007 08:03:38 -0000 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.31) with ESMTP; Thu, 20 Dec 2007 08:03:31 +0000 Received: from zps76.corp.google.com (zps76.corp.google.com [172.25.146.76]) by smtp-out.google.com with ESMTP id lBK83Idm012094 for ; Thu, 20 Dec 2007 08:03:19 GMT Received: from rv-out-0910.google.com (rvbl15.prod.google.com [10.140.88.15]) by zps76.corp.google.com with ESMTP id lBK83HQO028811 for ; Thu, 20 Dec 2007 00:03:17 -0800 Received: by rv-out-0910.google.com with SMTP id l15so2837658rvb.48 for ; Thu, 20 Dec 2007 00:03:17 -0800 (PST) Received: by 10.140.188.10 with SMTP id l10mr4301364rvf.78.1198137797514; Thu, 20 Dec 2007 00:03:17 -0800 (PST) Received: by 10.141.193.15 with HTTP; Thu, 20 Dec 2007 00:03:17 -0800 (PST) Message-ID: <2e7be40c0712200003j29ca149hdd6e778f2aeec17a@mail.gmail.com> Date: Thu, 20 Dec 2007 13:46:00 -0000 From: "Chris Demetriou" To: gdb-patches@sources.redhat.com Subject: [RFA] 'set print thread-events' to control printing of thread start/exit messages MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_19341_16270202.1198137797462" 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: 2007-12/txt/msg00333.txt.bz2 ------=_Part_19341_16270202.1198137797462 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline Content-length: 1659 [hi! long time no see!] The attached patch makes the printing of thread start/exit messages on Linux configurable via 'set print thread-events'. (A coworker commented that for the benchmarks he was trying to debug, printing of thread start/exit messages was ... quite tedious. And i figured a patch would be ... quite straightforward.) I'm ambivalent about the name of the new option, and the location of the option in the docs. I'm willing to listen to suggestions (especially from approvers! 8-) of better alternatives. Built w/ gdb head sources as of 2007-12-19 mid-day (US/Pacific), configured w/ host/target/build=i686-linux, tested with the new test ("make RUNTESTFLAGS=thread_events.exp") + using "info .../gdb.info" to view the new docs. chris ---- [gdb/ChangeLog] 2007-12-19 Chris Demetriou * gdbthread.h (print_thread_events): New variable declaration. * thread.c (print_thread_events): New variable definition. (show_print_thread_events): New function. (_initialize_thread): Add "set print thread-events" and "show print thread-events" commands. * linux-thread-db.c (check_event): Make attach_thread and detach_thread be verbose only if print_thread_events is set. [gdb/doc/ChangeLog] 2007-12-19 Chris Demetriou * gdb.texinfo (Threads): Document new "set print thread-events" and "show print thread-events" commands. [gdb/testsuite/ChangeLog] 2007-12-19 Chris Demetriou * gdb.threads/thread_events.c: New testcase source file. * gdb.threads/thread_events.exp: New testcase expect file. ------=_Part_19341_16270202.1198137797462 Content-Type: application/octet-stream; name=gdb_thread_event_messages.patch Content-Transfer-Encoding: base64 X-Attachment-Id: f_faf08mgq0 Content-Disposition: attachment; filename=gdb_thread_event_messages.patch Content-length: 15909 W2dkYi9DaGFuZ2VMb2ddCjIwMDctMTItMTkgIENocmlzIERlbWV0cmlvdSAg PGNnZEBnb29nbGUuY29tPgoKICAgICAgICAqIGdkYnRocmVhZC5oIChwcmlu dF90aHJlYWRfZXZlbnRzKTogTmV3IHZhcmlhYmxlIGRlY2xhcmF0aW9uLgog ICAgICAgICogdGhyZWFkLmMgKHByaW50X3RocmVhZF9ldmVudHMpOiBOZXcg dmFyaWFibGUgZGVmaW5pdGlvbi4KICAgICAgICAoc2hvd19wcmludF90aHJl YWRfZXZlbnRzKTogTmV3IGZ1bmN0aW9uLgogICAgICAgIChfaW5pdGlhbGl6 ZV90aHJlYWQpOiBBZGQgInNldCBwcmludCB0aHJlYWQtZXZlbnRzIiBhbmQK ICAgICAgICAic2hvdyBwcmludCB0aHJlYWQtZXZlbnRzIiBjb21tYW5kcy4K ICAgICAgICAqIGxpbnV4LXRocmVhZC1kYi5jIChjaGVja19ldmVudCk6IE1h a2UgYXR0YWNoX3RocmVhZCBhbmQKICAgICAgICBkZXRhY2hfdGhyZWFkIGJl IHZlcmJvc2Ugb25seSBpZiBwcmludF90aHJlYWRfZXZlbnRzIGlzIHNldC4K CltnZGIvZG9jL0NoYW5nZUxvZ10KMjAwNy0xMi0xOSAgQ2hyaXMgRGVtZXRy aW91ICA8Y2dkQGdvb2dsZS5jb20+CgogICAgICAgICogZ2RiLnRleGluZm8g KFRocmVhZHMpOiBEb2N1bWVudCBuZXcgInNldCBwcmludCB0aHJlYWQtZXZl bnRzIgogICAgICAgIGFuZCAic2hvdyBwcmludCB0aHJlYWQtZXZlbnRzIiBj b21tYW5kcy4KCltnZGIvdGVzdHN1aXRlL0NoYW5nZUxvZ10KMjAwNy0xMi0x OSAgQ2hyaXMgRGVtZXRyaW91ICA8Y2dkQGdvb2dsZS5jb20+CgogICAgICAg ICogZ2RiLnRocmVhZHMvdGhyZWFkX2V2ZW50cy5jOiBOZXcgdGVzdGNhc2Ug c291cmNlIGZpbGUuCiAgICAgICAgKiBnZGIudGhyZWFkcy90aHJlYWRfZXZl bnRzLmV4cDogTmV3IHRlc3RjYXNlIGV4cGVjdCBmaWxlLgoKCkluZGV4OiBn ZGJ0aHJlYWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv Y3ZzL3NyYy9zcmMvZ2RiL2dkYnRocmVhZC5oLHYKcmV0cmlldmluZyByZXZp c2lvbiAxLjE3CmRpZmYgLXUgLXUgLXAgLXIxLjE3IGdkYnRocmVhZC5oCi0t LSBnZGJ0aHJlYWQuaAk2IERlYyAyMDA3IDEyOjU3OjUxIC0wMDAwCTEuMTcK KysrIGdkYnRocmVhZC5oCTIwIERlYyAyMDA3IDAwOjA1OjU2IC0wMDAwCkBA IC0xNDEsNCArMTQxLDggQEAgZXh0ZXJuIHZvaWQgc3dpdGNoX3RvX3RocmVh ZCAocHRpZF90IHB0aQogLyogQ29tbWFuZHMgd2l0aCBhIHByZWZpeCBvZiBg dGhyZWFkJy4gICovCiBleHRlcm4gc3RydWN0IGNtZF9saXN0X2VsZW1lbnQg KnRocmVhZF9jbWRfbGlzdDsKIAorLyogUHJpbnQgbm90aWNlcyBvbiB0aHJl YWQgZXZlbnRzIChhdHRhY2gsIGRldGFjaCwgZXRjLiksIHNldCB3aXRoCisg ICBgc2V0IHByaW50IHRocmVhZC1ldmVudHMnLiAgKi8KK2V4dGVybiBpbnQg cHJpbnRfdGhyZWFkX2V2ZW50czsKKwogI2VuZGlmIC8qIEdEQlRIUkVBRF9I ICovCkluZGV4OiBsaW51eC10aHJlYWQtZGIuYwo9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09ClJDUyBmaWxlOiAvY3ZzL3NyYy9zcmMvZ2RiL2xpbnV4LXRocmVh ZC1kYi5jLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjM1CmRpZmYgLXUgLXUg LXAgLXIxLjM1IGxpbnV4LXRocmVhZC1kYi5jCi0tLSBsaW51eC10aHJlYWQt ZGIuYwkyNSBPY3QgMjAwNyAyMjowOTozNCAtMDAwMAkxLjM1CisrKyBsaW51 eC10aHJlYWQtZGIuYwkyMCBEZWMgMjAwNyAwMDowNTo1NiAtMDAwMApAQCAt ODQzLDcgKzg0Myw3IEBAIGNoZWNrX2V2ZW50IChwdGlkX3QgcHRpZCkKIAlj YXNlIFREX0NSRUFURToKIAkgIC8qIENhbGwgYXR0YWNoX3RocmVhZCB3aGV0 aGVyIG9yIG5vdCB3ZSBhbHJlYWR5IGtub3cgYWJvdXQgYQogCSAgICAgdGhy ZWFkIHdpdGggdGhpcyB0aHJlYWQgSUQuICAqLwotCSAgYXR0YWNoX3RocmVh ZCAocHRpZCwgbXNnLnRoX3AsICZ0aSwgMSk7CisJICBhdHRhY2hfdGhyZWFk IChwdGlkLCBtc2cudGhfcCwgJnRpLCBwcmludF90aHJlYWRfZXZlbnRzKTsK IAogCSAgYnJlYWs7CiAKQEAgLTg1Miw3ICs4NTIsNyBAQCBjaGVja19ldmVu dCAocHRpZF90IHB0aWQpCiAJICBpZiAoIWluX3RocmVhZF9saXN0IChwdGlk KSkKIAkgICAgZXJyb3IgKF8oIlNwdXJpb3VzIHRocmVhZCBkZWF0aCBldmVu dC4iKSk7CiAKLQkgIGRldGFjaF90aHJlYWQgKHB0aWQsIDEpOworCSAgZGV0 YWNoX3RocmVhZCAocHRpZCwgcHJpbnRfdGhyZWFkX2V2ZW50cyk7CiAKIAkg IGJyZWFrOwogCkluZGV4OiB0aHJlYWQuYwo9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09ClJDUyBmaWxlOiAvY3ZzL3NyYy9zcmMvZ2RiL3RocmVhZC5jLHYKcmV0 cmlldmluZyByZXZpc2lvbiAxLjU3CmRpZmYgLXUgLXUgLXAgLXIxLjU3IHRo cmVhZC5jCi0tLSB0aHJlYWQuYwk2IERlYyAyMDA3IDEyOjU3OjUxIC0wMDAw CTEuNTcKKysrIHRocmVhZC5jCTIwIERlYyAyMDA3IDAwOjA1OjU2IC0wMDAw CkBAIC02NzUsNiArNjc1LDE3IEBAIHRocmVhZF9jb21tYW5kIChjaGFyICp0 aWRzdHIsIGludCBmcm9tX3QKICAgZ2RiX3RocmVhZF9zZWxlY3QgKHVpb3V0 LCB0aWRzdHIsIE5VTEwpOwogfQogCisvKiBQcmludCBub3RpY2VzIHdoZW4g bmV3IHRocmVhZHMgYXJlIGF0dGFjaGVkIGFuZCBkZXRhY2hlZC4gICovCitp bnQgcHJpbnRfdGhyZWFkX2V2ZW50cyA9IDE7CitzdGF0aWMgdm9pZAorc2hv d19wcmludF90aHJlYWRfZXZlbnRzIChzdHJ1Y3QgdWlfZmlsZSAqZmlsZSwg aW50IGZyb21fdHR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1 Y3QgY21kX2xpc3RfZWxlbWVudCAqYywgY29uc3QgY2hhciAqdmFsdWUpCit7 CisgIGZwcmludGZfZmlsdGVyZWQgKGZpbGUsIF8oIlwKK1ByaW50aW5nIG9m IHRocmVhZCBldmVudHMgaXMgJXMuXG4iKSwKKyAgICAgICAgICAgICAgICAg ICAgdmFsdWUpOworfQorCiBzdGF0aWMgaW50CiBkb19jYXB0dXJlZF90aHJl YWRfc2VsZWN0IChzdHJ1Y3QgdWlfb3V0ICp1aW91dCwgdm9pZCAqdGlkc3Ry KQogewpAQCAtNzM3LDQgKzc0OCwxMiBAQCBUaGUgbmV3IHRocmVhZCBJRCBt dXN0IGJlIGN1cnJlbnRseSBrbm93CiAKICAgaWYgKCF4ZGJfY29tbWFuZHMp CiAgICAgYWRkX2NvbV9hbGlhcyAoInQiLCAidGhyZWFkIiwgY2xhc3NfcnVu LCAxKTsKKworICBhZGRfc2V0c2hvd19ib29sZWFuX2NtZCAoInRocmVhZC1l dmVudHMiLCBub19jbGFzcywKKyAgICAgICAgICZwcmludF90aHJlYWRfZXZl bnRzLCBfKCJcCitTZXQgcHJpbnRpbmcgb2YgdGhyZWFkIGV2ZW50cyAoZS5n LiwgdGhyZWFkIHN0YXJ0IGFuZCBleGl0KS4iKSwgXygiXAorU2hvdyBwcmlu dGluZyBvZiB0aHJlYWQgZXZlbnRzIChlLmcuLCB0aHJlYWQgc3RhcnQgYW5k IGV4aXQpLiIpLCBOVUxMLAorICAgICAgICAgTlVMTCwKKyAgICAgICAgIHNo b3dfcHJpbnRfdGhyZWFkX2V2ZW50cywKKyAgICAgICAgICZzZXRwcmludGxp c3QsICZzaG93cHJpbnRsaXN0KTsKIH0KSW5kZXg6IGRvYy9nZGIudGV4aW5m bwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3NyYy9z cmMvZ2RiL2RvYy9nZGIudGV4aW5mbyx2CnJldHJpZXZpbmcgcmV2aXNpb24g MS40NTMKZGlmZiAtdSAtdSAtcCAtcjEuNDUzIGdkYi50ZXhpbmZvCi0tLSBk b2MvZ2RiLnRleGluZm8JMTggRGVjIDIwMDcgMTg6MTE6MDkgLTAwMDAJMS40 NTMKKysrIGRvYy9nZGIudGV4aW5mbwkyMCBEZWMgMjAwNyAwMDowNTo1NiAt MDAwMApAQCAtMjI0MSw2ICsyMjQxLDggQEAgcHJvZ3JhbXM6CiBAaXRlbSBA c2FtcHt0aHJlYWQgYXBwbHkgW0B2YXJ7dGhyZWFkbm99XSBbQHZhcnthbGx9 XSBAdmFye2FyZ3N9fSwKIGEgY29tbWFuZCB0byBhcHBseSBhIGNvbW1hbmQg dG8gYSBsaXN0IG9mIHRocmVhZHMKIEBpdGVtIHRocmVhZC1zcGVjaWZpYyBi cmVha3BvaW50cworQGl0ZW0gQHNhbXB7c2V0IHByaW50IHRocmVhZC1ldmVu dHN9LCB3aGljaCBjb250cm9scyBwcmludGluZyBvZiAKK21lc3NhZ2VzIG9u IHRocmVhZCBzdGFydCBhbmQgZXhpdC4KIEBlbmQgaXRlbWl6ZQogCiBAcXVv dGF0aW9uCkBAIC0yNDM0LDYgKzI0MzYsMjIgQEAgdGhyZWFkcyB0aGF0IHlv dSB3YW50IGFmZmVjdGVkIHdpdGggdGhlIAogc2hvd24gaW4gdGhlIGZpcnN0 IGZpZWxkIG9mIHRoZSBAc2FtcHtpbmZvIHRocmVhZHN9IGRpc3BsYXk7IG9y IGl0CiBjb3VsZCBiZSBhIHJhbmdlIG9mIHRocmVhZCBudW1iZXJzLCBhcyBp biBAY29kZXsyLTR9LiAgVG8gYXBwbHkgYQogY29tbWFuZCB0byBhbGwgdGhy ZWFkcywgdHlwZSBAa2Jke3RocmVhZCBhcHBseSBhbGwgQHZhcntjb21tYW5k fX0uCisKK0BraW5kZXggc2V0IHByaW50IHRocmVhZC1ldmVudHMKK0BjaW5k ZXggcHJpbnQgbWVzc2FnZXMgb24gdGhyZWFkIHN0YXJ0IGFuZCBleGl0CitA aXRlbSBzZXQgcHJpbnQgdGhyZWFkLWV2ZW50cworQGl0ZW14IHNldCBwcmlu dCB0aHJlYWQtZXZlbnRzIG9uCitAaXRlbXggc2V0IHByaW50IHRocmVhZC1l dmVudHMgb2ZmCitUaGUgQGNvZGV7c2V0IHByaW50IHRocmVhZC1hdHRhY2h9 IGNvbW1hbmQgYWxsb3dzIHlvdSB0byBlbmFibGUgb3IKK2Rpc2FibGUgcHJp bnRpbmcgb2YgbWVzc2FnZXMgd2hlbiBHREIgbm90aWNlcyB0aGF0IG5ldyB0 aHJlYWRzIGhhdmUKK3N0YXJ0ZWQgb3IgdGhhdCB0aHJlYWRzIGhhdmUgZXhp dGVkLiAgQnkgZGVmYXVsdCwgdGhlc2UgbWVzc2FnZXMgd2lsbAorYmUgcHJp bnRlZCBpZiBkZXRlY3Rpb24gb2YgdGhlc2UgZXZlbnRzIGlzIHN1cHBvcnRl ZCBieSB0aGUgdGFyZ2V0LgorTm90ZSB0aGF0IHRoZXNlIG1lc3NhZ2VzIGNh bm5vdCBiZSBkaXNhYmxlZCBvbiBhbGwgdGFyZ2V0cy4KKworQGtpbmRleCBz aG93IHByaW50IHRocmVhZC1ldmVudHMKK0BpdGVtIHNob3cgcHJpbnQgdGhy ZWFkLWV2ZW50cworU2hvdyB3aGV0aGVyIG1lc3NhZ2VzIHdpbGwgYmUgcHJp bnRlZCB3aGVuIEdEQiBkZXRlY3RzIHRoYXQgdGhyZWFkcworaGF2ZSBzdGFy dGVkIGFuZCBleGl0ZWQuCiBAZW5kIHRhYmxlCiAKIEBjaW5kZXggYXV0b21h dGljIHRocmVhZCBzZWxlY3Rpb24KSW5kZXg6IHRlc3RzdWl0ZS9nZGIudGhy ZWFkcy90aHJlYWRfZXZlbnRzLmMKPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS Q1MgZmlsZTogdGVzdHN1aXRlL2dkYi50aHJlYWRzL3RocmVhZF9ldmVudHMu YwpkaWZmIC1OIHRlc3RzdWl0ZS9nZGIudGhyZWFkcy90aHJlYWRfZXZlbnRz LmMKLS0tIC9kZXYvbnVsbAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCisr KyB0ZXN0c3VpdGUvZ2RiLnRocmVhZHMvdGhyZWFkX2V2ZW50cy5jCTIwIERl YyAyMDA3IDAwOjA1OjU2IC0wMDAwCkBAIC0wLDAgKzEsNTUgQEAKKy8qIENv cHlyaWdodCAoQykgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu Yy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVy IHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug YXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAg KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhp cyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg d2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7 IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVS Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug Zm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2Vp dmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UK KyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0 dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisgICBUaGlzIGZpbGUg d2FzIHdyaXR0ZW4gYnkgQ2hyaXMgRGVtZXRyaW91IChjZ2RAZ29vZ2xlLmNv bSkuICAqLworCisvKiBTaW1wbGUgdGVzdCB0byB0cmlnZ2VyIHRocmVhZCBl dmVudHMgKHRocmVhZCBzdGFydCwgdGhyZWFkIGV4aXQpLiAgKi8KKworI2lu Y2x1ZGUgPHB0aHJlYWQuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNs dWRlIDxzdGRpby5oPgorCitzdGF0aWMgdm9pZCAqCit0aHJlYWRmdW5jICh2 b2lkICphcmcpCit7CisgIHByaW50ZiAoImluIHRocmVhZGZ1bmNcbiIpOwor ICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQKK2FmdGVyX2pvaW5f ZnVuYyAodm9pZCkKK3sKKyAgcHJpbnRmICgiZmluaXNoZWRcbiIpOworfQor CitpbnQgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgcHRo cmVhZF90IHRocmVhZDsKKworICBpZiAocHRocmVhZF9jcmVhdGUoJnRocmVh ZCwgTlVMTCwgdGhyZWFkZnVuYywgTlVMTCkgIT0gMCkKKyAgICB7CisgICAg ICBwcmludGYgKCJwdGhyZWFkX2NyZWF0ZSBmYWlsZWRcbiIpOworICAgICAg ZXhpdCAoMSk7CisgICAgfQorCisgIGlmIChwdGhyZWFkX2pvaW4gKHRocmVh ZCwgTlVMTCkgIT0gMCkKKyAgICB7CisgICAgICBwcmludGYgKCJwdGhyZWFk X2pvaW4gZmFpbGVkXG4iKTsKKyAgICAgIGV4aXQgKDEpOworICAgIH0KKwor ICBhZnRlcl9qb2luX2Z1bmMoKTsKKyAgcmV0dXJuIDA7Cit9CkluZGV4OiB0 ZXN0c3VpdGUvZ2RiLnRocmVhZHMvdGhyZWFkX2V2ZW50cy5leHAKPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogdGVzdHN1aXRlL2dkYi50aHJl YWRzL3RocmVhZF9ldmVudHMuZXhwCmRpZmYgLU4gdGVzdHN1aXRlL2dkYi50 aHJlYWRzL3RocmVhZF9ldmVudHMuZXhwCi0tLSAvZGV2L251bGwJMSBKYW4g MTk3MCAwMDowMDowMCAtMDAwMAorKysgdGVzdHN1aXRlL2dkYi50aHJlYWRz L3RocmVhZF9ldmVudHMuZXhwCTIwIERlYyAyMDA3IDAwOjA1OjU2IC0wMDAw CkBAIC0wLDAgKzEsMTQ5IEBACisjIENvcHlyaWdodCAoQykgMjAwNyBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyBUaGlzIHByb2dyYW0g aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k L29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9m IHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl ciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQg aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJ VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg d2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ug c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4g IElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4K KworIyBQbGVhc2UgZW1haWwgYW55IGJ1Z3MsIGNvbW1lbnRzLCBhbmQvb3Ig YWRkaXRpb25zIHRvIHRoaXMgZmlsZSB0bzoKKyMgYnVnLWdkYkBwcmVwLmFp Lm1pdC5lZHUKKworIyBUaGlzIGZpbGUgd2FzIHdyaXR0ZW4gYnkgQ2hyaXMg RGVtZXRyaW91IChjZ2RAZ29vZ2xlLmNvbSkuCisjIEl0IHRlc3RzIHByaW50 aW5nIG9mIHRocmVhZCBldmVudCAoc3RhcnQsIGV4aXQpIGluZm9ybWF0aW9u LCBhbmQKKyMgZGlzYWJsaW5nIG9mIHRob3NlIG1lc3NhZ2VzLgorIworIyBO b3RlOiB0aGUgZm9ybWF0IG9mIHRocmVhZCBldmVudCBtZXNzYWdlcyAoYW5k IGFsc28gd2hldGhlciBvciBub3QKKyMgbWVzc2FnZXMgYXJlIHByaW50ZWQg YW5kIGNhbiBiZSBkaXNhYmxlZCkgaXMgZGVwZW5kZW50IG9uIHRoZSB0YXJn ZXQKKyMgdGhyZWFkIHN1cHBvcnQgY29kZS4KKworIyBUaGlzIHRlc3QgaGFz IG9ubHkgYmVlbiB2ZXJpZmllZCB3aXRoIExpbnV4IHRhcmdldHMsIGFuZCB3 b3VsZCBuZWVkCisjIHRvIGJlIGdlbmVyYWxpemVkIHRvIHN1cHBvcnQgb3Ro ZXIgdGFyZ2V0cworaWYgIVtpc3RhcmdldCAqLSotbGludXgqXSB0aGVuIHsK KyAgICByZXR1cm4KK30KKworaWYgJHRyYWNlbGV2ZWwgdGhlbiB7CisgICAg ICAgIHN0cmFjZSAkdHJhY2VsZXZlbAorfQorCitzZXQgcHJtc19pZCAwCitz ZXQgYnVnX2lkIDAKKworc2V0IHRlc3RmaWxlICJ0aHJlYWRfZXZlbnRzIgor c2V0IHNyY2ZpbGUgJHt0ZXN0ZmlsZX0uYworc2V0IGJpbmZpbGUgJHtvYmpk aXJ9LyR7c3ViZGlyfS8ke3Rlc3RmaWxlfQorCitpZiB7W2dkYl9jb21waWxl X3B0aHJlYWRzICIke3NyY2Rpcn0vJHtzdWJkaXJ9LyR7c3JjZmlsZX0iICIk e2JpbmZpbGV9IiBleGVjdXRhYmxlIFtsaXN0IGRlYnVnICJpbmNkaXI9JHtv YmpkaXJ9Il1dICE9ICIiIH0geworICAgIHJldHVybiAtMQorfQorCitwcm9j IGdkYl90ZXN0X3RocmVhZF9zdGFydCB7bWVzc2FnZXNfZW5hYmxlZCBjb21t YW5kIHBhdHRlcm4gbWVzc2FnZX0geworICBnbG9iYWwgZ2RiX3Byb21wdAor CisgIGlmIHsgJG1lc3NhZ2VzX2VuYWJsZWQgfSB7CisgICAgc2V0IGV2ZW50 c19leHBlY3RlZCAxCisgIH0gZWxzZSB7CisgICAgc2V0IGV2ZW50c19leHBl Y3RlZCAwCisgIH0KKyAgc2V0IGV2ZW50c19zZWVuIDAKKworICByZXR1cm4g W2dkYl90ZXN0X211bHRpcGxlICRjb21tYW5kICRtZXNzYWdlIHsKKyAgICAt cmUgIlxcXFtOZXcgVGhyZWFkIFxbXlxdXF0qXFxcXVxyXG4iIHsKKyAgICAg IGluY3IgZXZlbnRzX3NlZW47CisgICAgICBleHBfY29udGludWU7CisgICAg fQorICAgIC1yZSAiXFtcclxuXF0qKCRwYXR0ZXJuKVxbXHJcblxdKyRnZGJf cHJvbXB0ICQiIHsKKyAgICAgIGlmIHsgJGV2ZW50c19zZWVuICE9ICRldmVu dHNfZXhwZWN0ZWQgfSB7CisgICAgICAgIGZhaWwgIiRtZXNzYWdlIChzYXcg JGV2ZW50c19zZWVuLCBleHBlY3RlZCAkZXZlbnRzX2V4cGVjdGVkKSIKKyAg ICAgIH0gZWxzZSB7CisgICAgICAgIHBhc3MgIiRtZXNzYWdlIgorICAgICAg fQorICAgIH0KKyAgfV0KK30KKworcHJvYyBnZGJfdGVzdF90aHJlYWRfZXhp dCB7bWVzc2FnZXNfZW5hYmxlZCBjb21tYW5kIHBhdHRlcm4gbWVzc2FnZX0g eworICBnbG9iYWwgZ2RiX3Byb21wdAorCisgIGlmIHsgJG1lc3NhZ2VzX2Vu YWJsZWQgfSB7CisgICAgc2V0IGV2ZW50c19leHBlY3RlZCAxCisgIH0gZWxz ZSB7CisgICAgc2V0IGV2ZW50c19leHBlY3RlZCAwCisgIH0KKyAgc2V0IGV2 ZW50c19zZWVuIDAKKworICByZXR1cm4gW2dkYl90ZXN0X211bHRpcGxlICRj b21tYW5kICRtZXNzYWdlIHsKKyAgICAtcmUgIlxcXFtUaHJlYWQgXFteXF1c XSogZXhpdGVkXFxcXVxyXG4iIHsKKyAgICAgIGluY3IgZXZlbnRzX3NlZW4K KyAgICAgIGV4cF9jb250aW51ZTsKKyAgICB9CisgICAgLXJlICJcW1xyXG5c XSooJHBhdHRlcm4pXFtcclxuXF0rJGdkYl9wcm9tcHQgJCIgeworICAgICAg aWYgeyAkZXZlbnRzX3NlZW4gIT0gJGV2ZW50c19leHBlY3RlZCB9IHsKKyAg ICAgICAgZmFpbCAiJG1lc3NhZ2UgKHNhdyAkZXZlbnRzX3NlZW4sIGV4cGVj dGVkICRldmVudHNfZXhwZWN0ZWQpIgorICAgICAgfSBlbHNlIHsKKyAgICAg ICAgcGFzcyAiJG1lc3NhZ2UiCisgICAgICB9CisgICAgfQorICB9XQorfQor Citwcm9jIHRlc3RfdGhyZWFkX21lc3NhZ2VzIHtlbmFibGVkfSB7CisgIGds b2JhbCBzcmNkaXIgc3ViZGlyIGJpbmZpbGUgc3JjZmlsZQorCisgIGlmIHsg JGVuYWJsZWQgfSB7CisgICAgc2V0IGVuYWJsZWRfc3RyaW5nICJ3aXRoIG1l c3NhZ2VzIGVuYWJsZWQiCisgIH0gZWxzZSB7CisgICAgc2V0IGVuYWJsZWRf c3RyaW5nICJ3aXRoIG1lc3NhZ2VzIGRpc2FibGVkIgorICB9CisKKyAgZ2Ri X3N0YXJ0CisgIGdkYl9yZWluaXRpYWxpemVfZGlyICRzcmNkaXIvJHN1YmRp cgorICBnZGJfbG9hZCAke2JpbmZpbGV9CisKKyAgaWYgeyAkZW5hYmxlZCB9 IHsKKyAgICAgZ2RiX3Rlc3QgInNldCBwcmludCB0aHJlYWQtZXZlbnRzIG9u IgorICB9IGVsc2UgeworICAgICBnZGJfdGVzdCAic2V0IHByaW50IHRocmVh ZC1ldmVudHMgb2ZmIgorICB9CisKKyAgIyBUaGUgaW5pdGlhbCB0aHJlYWQg bWF5IGxvZyBhICdOZXcgVGhyZWFkJyBtZXNzYWdlLCBidXQgd2UgZG9uJ3QK KyAgIyBjaGVjayBmb3IgaXQuCisgIGlmICFbcnVudG9fbWFpbl0gdGhlbiB7 CisgICAgIGZhaWwgIkNhbid0IHJ1biB0byBtYWluICRlbmFibGVkX3N0cmlu ZyIKKyAgICAgcmV0dXJuIDEKKyAgfQorCisgIGdkYl90ZXN0ICJicmVhayB0 aHJlYWRmdW5jIiBcCisgICAgICAiQnJlYWtwb2ludC4qYXQuKiBmaWxlIC4q JHNyY2ZpbGUsIGxpbmUuKiIgXAorICAgICAgImJyZWFrcG9pbnQgYXQgdGhy ZWFkZnVuYyAkZW5hYmxlZF9zdHJpbmciCisgIGdkYl90ZXN0ICJicmVhayBh ZnRlcl9qb2luX2Z1bmMiIFwKKyAgICAgICJCcmVha3BvaW50LiphdC4qIGZp bGUgLiokc3JjZmlsZSwgbGluZS4qIiBcCisgICAgICAiYnJlYWtwb2ludCBh dCBhZnRlcl9qb2luX2Z1bmMgJGVuYWJsZWRfc3RyaW5nIgorCisgICMgY29u dGludWUgdG8gdGhyZWFkZnVuYyBicmVha3BvaW50LiAgQSB0aHJlYWQgd2ls bCBzdGFydC4KKyAgIyBFeHBlY3QgdG8gc2VlIGEgdGhyZWFkIHN0YXJ0IG1l c3NhZ2UsIGlmIG1lc3NhZ2VzIGFyZSBlbmFibGVkLgorICBnZGJfdGVzdF90 aHJlYWRfc3RhcnQgJGVuYWJsZWQgImNvbnRpbnVlIiBcCisgICAgICAgIi4q QnJlYWtwb2ludCAuKiwuKnRocmVhZGZ1bmMuKmF0Liokc3JjZmlsZTouKiIg XAorICAgICAgICJjb250aW51ZSB0byB0aHJlYWRmdW5jICRlbmFibGVkX3N0 cmluZyIKKworICAjIGNvbnRpbnVlIHRvIGFmdGVyX2pvaW5fZnVuYyBicmVh a3BvaW50LiAgQSB0aHJlYWQgd2lsbCBleGl0LgorICAjIEV4cGVjdCB0byBz ZWUgYSB0aHJlYWQgZXhpdCBtZXNzYWdlLCBpZiBtZXNzYWdlcyBhcmUgZW5h YmxlZC4KKyAgZ2RiX3Rlc3RfdGhyZWFkX2V4aXQgJGVuYWJsZWQgImNvbnRp bnVlIiBcCisgICAgICAgIi4qQnJlYWtwb2ludCAuKiwuKmFmdGVyX2pvaW5f ZnVuYy4qYXQuKiRzcmNmaWxlOi4qIiBcCisgICAgICAgImNvbnRpbnVlIHRv IGFmdGVyX2pvaW5fZnVuYyAkZW5hYmxlZF9zdHJpbmciCisKKyAgZGVsZXRl X2JyZWFrcG9pbnRzCisKKyAgZ2RiX2V4aXQKK30KKwordGVzdF90aHJlYWRf bWVzc2FnZXMgMAordGVzdF90aHJlYWRfbWVzc2FnZXMgMQo= ------=_Part_19341_16270202.1198137797462--