From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 24333 invoked by alias); 9 Dec 2014 10:49:27 -0000 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 Received: (qmail 24323 invoked by uid 89); 9 Dec 2014 10:49:26 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.7 required=5.0 tests=AWL,BAYES_00,KAM_STOCKGEN,SPF_HELO_PASS,SPF_PASS,T_RP_MATCHES_RCVD autolearn=no version=3.3.2 X-HELO: mx1.redhat.com Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES256-GCM-SHA384 encrypted) ESMTPS; Tue, 09 Dec 2014 10:49:25 +0000 Received: from int-mx09.intmail.prod.int.phx2.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id sB9AnNXe019908 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL) for ; Tue, 9 Dec 2014 05:49:23 -0500 Received: from bordewijk.wildebeest.org (ovpn-116-48.ams2.redhat.com [10.36.116.48]) by int-mx09.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id sB9AnMb1032369 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO); Tue, 9 Dec 2014 05:49:23 -0500 Received: by bordewijk.wildebeest.org (Postfix, from userid 1000) id C1FCC8062001; Tue, 9 Dec 2014 11:49:21 +0100 (CET) Message-ID: <1418122161.18974.42.camel@bordewijk.wildebeest.org> Subject: Re: [PATCH] Use GCC5/DWARF5 DW_AT_noreturn to mark functions that don't return normally. From: Mark Wielaard To: Pedro Alves Cc: gdb-patches@sourceware.org Date: Tue, 09 Dec 2014 10:49:00 -0000 In-Reply-To: <5480696F.1060308@redhat.com> References: <1417099980-31834-1-git-send-email-mjw@redhat.com> <5480696F.1060308@redhat.com> Content-Type: multipart/mixed; boundary="=-P4Uq9NMDJNklKVgP0LKj" Mime-Version: 1.0 X-SW-Source: 2014-12/txt/msg00191.txt.bz2 --=-P4Uq9NMDJNklKVgP0LKj Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Content-length: 3342 On Thu, 2014-12-04 at 14:02 +0000, Pedro Alves wrote: > On 11/27/2014 02:53 PM, Mark Wielaard wrote: > > Add a flag field is_noreturn to struct func_type. Make calling_conventi= on > > a small bit field to not increase the size of the struct. Set is_noretu= rn > > if the new GCC5/DWARF5 DW_AT_noreturn is set on a DW_TAG_subprogram. > > Use this information to warn the user before doing a finish or return f= rom > > a function that does not return normally to its caller. > >=20 > > (gdb) finish > > Warning. Function endless does not return normally. > > Try to finish anyway? (y or n) > >=20 > > (gdb) return > > warning: Function does not return normally to caller! > > Make endless return now? (y or n) >=20 > I'd suggest making the warnings a bit more consistent. >=20 > - "Warning." vs "warning: " >=20 > Prefer the latter, as that's what the "warning" function uses. >=20 > - "." vs "!" >=20 > I'd keep it calm and get rid of the "!". :-) Fixed both. > >=20 > > gdb/ChangeLog > >=20 > > * dwarf2read.c (read_subroutine_type): Set TYPE_NO_RETURN from > > DW_AT_noreturn. > > * gdbtypes.h (struct func_type): Add is_noreturn field flag. Make > > calling_convention an 8 bit bit field. > > (TYPE_NO_RETURN): New macro. > > * infcmd.c (finish_command): Query if function does not return > > normally. > > * stack.c (return_command): Likewise. > >=20 > > include/ChangeLog > >=20 > > * dwarf2.def (DW_AT_noreturn): New DWARF5 attribute. >=20 > I wonder if we could have a test? Could e.g., make sure we don't > crash when the user confirms a return in a noreturn function. I am not sure how to write such a test. This is mainly interactive code, which will only trigger from_tty. I also am not sure such a test really tests this new feature. Trying to return from a noreturn function triggers undefined behavior. GDB probably won't crash, but the inferior might since the result is unpredictable (that is precisely why I added this, you forcibly return from a function and end up somewhere unexpected). Which makes testing the expected output of the user ignoring the warning somewhat hard. > > --- a/gdb/infcmd.c > > +++ b/gdb/infcmd.c > > @@ -1869,7 +1869,14 @@ finish_command (char *arg, int from_tty) > > if (execution_direction =3D=3D EXEC_REVERSE) > > printf_filtered (_("Run back to call of ")); > > else > > - printf_filtered (_("Run till exit from ")); > > + { > > + if (function !=3D NULL && TYPE_NO_RETURN (function->type) > > + && ! query (_("Warning. Function %s does not return normally.\n" > > + "Try to finish anyway? "), > > + SYMBOL_PRINT_NAME (function))) > > + error (_("Not confirmed.")); > > + printf_filtered (_("Run till exit from ")); > > + } >=20 > No space between "!" and query: >=20 > && !query ... Fixed. > > --- a/gdb/stack.c > > +++ b/gdb/stack.c > > @@ -2462,8 +2462,12 @@ return_command (char *retval_exp, int from_tty) > > confirmed =3D query (_("%sMake selected stack frame return now? "), > > query_prefix); > > else > > - confirmed =3D query (_("%sMake %s return now? "), query_prefix, > > - SYMBOL_PRINT_NAME (thisfun)); > > + { > > + if (TYPE_NO_RETURN (thisfun->type)) > > + warning ("Function does not return normally to caller!"); >=20 > i18n / _() . Added. Rebased patch attached. Thanks, Mark --=-P4Uq9NMDJNklKVgP0LKj Content-Disposition: inline; filename*0=0001-Use-GCC5-DWARF5-DW_AT_noreturn-to-mark-functions-tha.pat; filename*1=ch Content-Transfer-Encoding: base64 Content-Type: text/x-patch; name="0001-Use-GCC5-DWARF5-DW_AT_noreturn-to-mark-functions-tha.patch"; charset="UTF-8" Content-length: 9386 RnJvbSA2YjQ1NDcwM2E1YTUzYmVlMTM1NWI1YTg3MWExMGY2YmJmY2RlNjRl IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQ0KRnJvbTogTWFyayBXaWVsYWFy ZCA8bWp3QHJlZGhhdC5jb20+DQpEYXRlOiBUdWUsIDkgRGVjIDIwMTQgMTE6 NDU6NDEgKzAxMDANClN1YmplY3Q6IFtQQVRDSF0gVXNlIEdDQzUvRFdBUkY1 IERXX0FUX25vcmV0dXJuIHRvIG1hcmsgZnVuY3Rpb25zIHRoYXQgZG9uJ3QN CiByZXR1cm4gbm9ybWFsbHkuDQoNCkFkZCBhIGZsYWcgZmllbGQgaXNfbm9y ZXR1cm4gdG8gc3RydWN0IGZ1bmNfdHlwZS4gTWFrZSBjYWxsaW5nX2NvbnZl bnRpb24NCmEgc21hbGwgYml0IGZpZWxkIHRvIG5vdCBpbmNyZWFzZSB0aGUg c2l6ZSBvZiB0aGUgc3RydWN0LiBTZXQgaXNfbm9yZXR1cm4NCmlmIHRoZSBu ZXcgR0NDNS9EV0FSRjUgRFdfQVRfbm9yZXR1cm4gaXMgc2V0IG9uIGEgRFdf VEFHX3N1YnByb2dyYW0uDQpVc2UgdGhpcyBpbmZvcm1hdGlvbiB0byB3YXJu IHRoZSB1c2VyIGJlZm9yZSBkb2luZyBhIGZpbmlzaCBvciByZXR1cm4gZnJv bQ0KYSBmdW5jdGlvbiB0aGF0IGRvZXMgbm90IHJldHVybiBub3JtYWxseSB0 byBpdHMgY2FsbGVyLg0KDQooZ2RiKSBmaW5pc2gNCndhcm5pbmc6IEZ1bmN0 aW9uIGVuZGxlc3MgZG9lcyBub3QgcmV0dXJuIG5vcm1hbGx5Lg0KVHJ5IHRv IGZpbmlzaCBhbnl3YXk/ICh5IG9yIG4pDQoNCihnZGIpIHJldHVybg0Kd2Fy bmluZzogRnVuY3Rpb24gZG9lcyBub3QgcmV0dXJuIG5vcm1hbGx5IHRvIGNh bGxlci4NCk1ha2UgZW5kbGVzcyByZXR1cm4gbm93PyAoeSBvciBuKQ0KDQpn ZGIvQ2hhbmdlTG9nDQoNCgkqIGR3YXJmMnJlYWQuYyAocmVhZF9zdWJyb3V0 aW5lX3R5cGUpOiBTZXQgVFlQRV9OT19SRVRVUk4gZnJvbQ0KCURXX0FUX25v cmV0dXJuLg0KCSogZ2RidHlwZXMuaCAoc3RydWN0IGZ1bmNfdHlwZSk6IEFk ZCBpc19ub3JldHVybiBmaWVsZCBmbGFnLiBNYWtlDQoJY2FsbGluZ19jb252 ZW50aW9uIGFuIDggYml0IGJpdCBmaWVsZC4NCgkoVFlQRV9OT19SRVRVUk4p OiBOZXcgbWFjcm8uDQoJKiBpbmZjbWQuYyAoZmluaXNoX2NvbW1hbmQpOiBR dWVyeSBpZiBmdW5jdGlvbiBkb2VzIG5vdCByZXR1cm4NCglub3JtYWxseS4N CgkqIHN0YWNrLmMgKHJldHVybl9jb21tYW5kKTogTGlrZXdpc2UuDQoNCmlu Y2x1ZGUvQ2hhbmdlTG9nDQoNCgkqIGR3YXJmMi5kZWYgKERXX0FUX25vcmV0 dXJuKTogTmV3IERXQVJGNSBhdHRyaWJ1dGUuDQoNClRoZSBkd2FyZjIuaCBh ZGRpdGlvbiBhbmQgdGhlIGNvZGUgdG8gZW1pdCB0aGUgbmV3IGF0dHJpYnV0 ZSBpcyBhbHJlYWR5IGluDQp0aGUgZ2NjIHRyZWUuDQotLS0NCiBnZGIvQ2hh bmdlTG9nICAgICAgfCAxMSArKysrKysrKysrKw0KIGdkYi9kd2FyZjJyZWFk LmMgICB8ICA2ICsrKysrKw0KIGdkYi9nZGJ0eXBlcy5oICAgICB8IDEyICsr KysrKysrKystLQ0KIGdkYi9pbmZjbWQuYyAgICAgICB8ICA5ICsrKysrKysr LQ0KIGdkYi9zdGFjay5jICAgICAgICB8ICA4ICsrKysrKy0tDQogaW5jbHVk ZS9DaGFuZ2VMb2cgIHwgIDQgKysrKw0KIGluY2x1ZGUvZHdhcmYyLmRlZiB8 ICAyICsrDQogNyBmaWxlcyBjaGFuZ2VkLCA0NyBpbnNlcnRpb25zKCspLCA1 IGRlbGV0aW9ucygtKQ0KDQpkaWZmIC0tZ2l0IGEvZ2RiL0NoYW5nZUxvZyBi L2dkYi9DaGFuZ2VMb2cNCmluZGV4IGFkODQ1YTcuLjQzYTYyYWYgMTAwNjQ0 DQotLS0gYS9nZGIvQ2hhbmdlTG9nDQorKysgYi9nZGIvQ2hhbmdlTG9nDQpA QCAtMSwzICsxLDE0IEBADQorMjAxNC0xMi0wOSAgTWFyayBXaWVsYWFyZCAg PG1qd0ByZWRoYXQuY29tPg0KKw0KKwkqIGR3YXJmMnJlYWQuYyAocmVhZF9z dWJyb3V0aW5lX3R5cGUpOiBTZXQgVFlQRV9OT19SRVRVUk4gZnJvbQ0KKwlE V19BVF9ub3JldHVybi4NCisJKiBnZGJ0eXBlcy5oIChzdHJ1Y3QgZnVuY190 eXBlKTogQWRkIGlzX25vcmV0dXJuIGZpZWxkIGZsYWcuIE1ha2UNCisJY2Fs bGluZ19jb252ZW50aW9uIGFuIDggYml0IGJpdCBmaWVsZC4NCisJKFRZUEVf Tk9fUkVUVVJOKTogTmV3IG1hY3JvLg0KKwkqIGluZmNtZC5jIChmaW5pc2hf Y29tbWFuZCk6IFF1ZXJ5IGlmIGZ1bmN0aW9uIGRvZXMgbm90IHJldHVybg0K Kwlub3JtYWxseS4NCisJKiBzdGFjay5jIChyZXR1cm5fY29tbWFuZCk6IExp a2V3aXNlLg0KKw0KIDIwMTQtMTItMDggIERvdWcgRXZhbnMgIDxkamVAZ29v Z2xlLmNvbT4NCiANCiAJKiBweXRob24vcHktb2JqZmlsZS5jIChvYmpmcHlf Z2V0X293bmVyKTogSW5jcmVtZW50IHJlZmNvdW50IG9mIHJlc3VsdC4NCmRp ZmYgLS1naXQgYS9nZGIvZHdhcmYycmVhZC5jIGIvZ2RiL2R3YXJmMnJlYWQu Yw0KaW5kZXggODI5NjExZC4uOTBlNzg5MyAxMDA2NDQNCi0tLSBhL2dkYi9k d2FyZjJyZWFkLmMNCisrKyBiL2dkYi9kd2FyZjJyZWFkLmMNCkBAIC0xNDMw OCw2ICsxNDMwOCwxMiBAQCByZWFkX3N1YnJvdXRpbmVfdHlwZSAoc3RydWN0 IGRpZV9pbmZvICpkaWUsIHN0cnVjdCBkd2FyZjJfY3UgKmN1KQ0KICAgZWxz ZQ0KICAgICBUWVBFX0NBTExJTkdfQ09OVkVOVElPTiAoZnR5cGUpID0gRFdf Q0Nfbm9ybWFsOw0KIA0KKyAgLyogUmVjb3JkIHdoZXRoZXIgdGhlIGZ1bmN0 aW9uIHJldHVybnMgbm9ybWFsbHkgdG8gaXRzIGNhbGxlciBvciBub3QNCisg ICAgIGlmIHRoZSBEV0FSRiBwcm9kdWNlciBzZXQgdGhhdCBpbmZvcm1hdGlv bi4gICovDQorICBhdHRyID0gZHdhcmYyX2F0dHIgKGRpZSwgRFdfQVRfbm9y ZXR1cm4sIGN1KTsNCisgIGlmIChhdHRyICYmIChEV19VTlNORCAoYXR0cikg IT0gMCkpDQorICAgIFRZUEVfTk9fUkVUVVJOIChmdHlwZSkgPSAxOw0KKw0K ICAgLyogV2UgbmVlZCB0byBhZGQgdGhlIHN1YnJvdXRpbmUgdHlwZSB0byB0 aGUgZGllIGltbWVkaWF0ZWx5IHNvDQogICAgICB3ZSBkb24ndCBpbmZpbml0 ZWx5IHJlY3Vyc2Ugd2hlbiBkZWFsaW5nIHdpdGggcGFyYW1ldGVycw0KICAg ICAgZGVjbGFyZWQgYXMgdGhlIHNhbWUgc3Vicm91dGluZSB0eXBlLiAgKi8N CmRpZmYgLS1naXQgYS9nZGIvZ2RidHlwZXMuaCBiL2dkYi9nZGJ0eXBlcy5o DQppbmRleCBhNTZmNTQzLi4yODA2YzRkIDEwMDY0NA0KLS0tIGEvZ2RiL2dk YnR5cGVzLmgNCisrKyBiL2dkYi9nZGJ0eXBlcy5oDQpAQCAtMTAxOSw5ICsx MDE5LDE2IEBAIHN0cnVjdCBmdW5jX3R5cGUNCiAgIHsNCiAgICAgLyogKiBU aGUgY2FsbGluZyBjb252ZW50aW9uIGZvciB0YXJnZXRzIHN1cHBvcnRpbmcg bXVsdGlwbGUgQUJJcy4NCiAgICAgICAgUmlnaHQgbm93IHRoaXMgaXMgb25s eSBmZXRjaGVkIGZyb20gdGhlIER3YXJmLTINCi0gICAgICAgRFdfQVRfY2Fs bGluZ19jb252ZW50aW9uIGF0dHJpYnV0ZS4gICovDQorICAgICAgIERXX0FU X2NhbGxpbmdfY29udmVudGlvbiBhdHRyaWJ1dGUuICBUaGUgdmFsdWUgaXMg b25lIG9mIHRoZQ0KKyAgICAgICBEV19DQyBlbnVtIGR3YXJmX2NhbGxpbmdf Y29udmVudGlvbiBjb25zdGFudHMuICAqLw0KIA0KLSAgICB1bnNpZ25lZCBj YWxsaW5nX2NvbnZlbnRpb247DQorICAgIHVuc2lnbmVkIGNhbGxpbmdfY29u dmVudGlvbiA6IDg7DQorDQorICAgIC8qICogV2hldGhlciB0aGlzIGZ1bmN0 aW9uIG5vcm1hbGx5IHJldHVybnMgdG8gaXRzIGNhbGxlci4gIEl0IGlzDQor ICAgICAgIHNldCBmcm9tIHRoZSBEV19BVF9ub3JldHVybiBhdHRyaWJ1dGUg aWYgc2V0IG9uIHRoZQ0KKyAgICAgICBEV19UQUdfc3VicHJvZ3JhbS4gICov DQorDQorICAgIHVuc2lnbmVkIGludCBpc19ub3JldHVybiA6IDE7DQogDQog ICAgIC8qICogT25seSB0aG9zZSBEV19UQUdfR05VX2NhbGxfc2l0ZSdzIGlu IHRoaXMgZnVuY3Rpb24gdGhhdCBoYXZlDQogICAgICAgIERXX0FUX0dOVV90 YWlsX2NhbGwgc2V0IGFyZSBsaW5rZWQgaW4gdGhpcyBsaXN0LiAgRnVuY3Rp b24NCkBAIC0xMjQ1LDYgKzEyNTIsNyBAQCBleHRlcm4gdm9pZCBhbGxvY2F0 ZV9nbmF0X2F1eF90eXBlIChzdHJ1Y3QgdHlwZSAqKTsNCiAjZGVmaW5lIFRZ UEVfR05BVF9TUEVDSUZJQyh0aGlzdHlwZSkgVFlQRV9NQUlOX1RZUEUodGhp c3R5cGUpLT50eXBlX3NwZWNpZmljLmduYXRfc3R1ZmYNCiAjZGVmaW5lIFRZ UEVfREVTQ1JJUFRJVkVfVFlQRSh0aGlzdHlwZSkgVFlQRV9HTkFUX1NQRUNJ RklDKHRoaXN0eXBlKS0+ZGVzY3JpcHRpdmVfdHlwZQ0KICNkZWZpbmUgVFlQ RV9DQUxMSU5HX0NPTlZFTlRJT04odGhpc3R5cGUpIFRZUEVfTUFJTl9UWVBF KHRoaXN0eXBlKS0+dHlwZV9zcGVjaWZpYy5mdW5jX3N0dWZmLT5jYWxsaW5n X2NvbnZlbnRpb24NCisjZGVmaW5lIFRZUEVfTk9fUkVUVVJOKHRoaXN0eXBl KSBUWVBFX01BSU5fVFlQRSh0aGlzdHlwZSktPnR5cGVfc3BlY2lmaWMuZnVu Y19zdHVmZi0+aXNfbm9yZXR1cm4NCiAjZGVmaW5lIFRZUEVfVEFJTF9DQUxM X0xJU1QodGhpc3R5cGUpIFRZUEVfTUFJTl9UWVBFKHRoaXN0eXBlKS0+dHlw ZV9zcGVjaWZpYy5mdW5jX3N0dWZmLT50YWlsX2NhbGxfbGlzdA0KICNkZWZp bmUgVFlQRV9CQVNFQ0xBU1ModGhpc3R5cGUsaW5kZXgpIFRZUEVfRklFTERf VFlQRSh0aGlzdHlwZSwgaW5kZXgpDQogI2RlZmluZSBUWVBFX05fQkFTRUNM QVNTRVModGhpc3R5cGUpIFRZUEVfQ1BMVVNfU1BFQ0lGSUModGhpc3R5cGUp LT5uX2Jhc2VjbGFzc2VzDQpkaWZmIC0tZ2l0IGEvZ2RiL2luZmNtZC5jIGIv Z2RiL2luZmNtZC5jDQppbmRleCA0NDE1YjMxLi42OGQ5ZWY5IDEwMDY0NA0K LS0tIGEvZ2RiL2luZmNtZC5jDQorKysgYi9nZGIvaW5mY21kLmMNCkBAIC0x ODY5LDcgKzE4NjksMTQgQEAgZmluaXNoX2NvbW1hbmQgKGNoYXIgKmFyZywg aW50IGZyb21fdHR5KQ0KICAgICAgIGlmIChleGVjdXRpb25fZGlyZWN0aW9u ID09IEVYRUNfUkVWRVJTRSkNCiAJcHJpbnRmX2ZpbHRlcmVkIChfKCJSdW4g YmFjayB0byBjYWxsIG9mICIpKTsNCiAgICAgICBlbHNlDQotCXByaW50Zl9m aWx0ZXJlZCAoXygiUnVuIHRpbGwgZXhpdCBmcm9tICIpKTsNCisJew0KKwkg IGlmIChmdW5jdGlvbiAhPSBOVUxMICYmIFRZUEVfTk9fUkVUVVJOIChmdW5j dGlvbi0+dHlwZSkNCisJICAgICAgJiYgIXF1ZXJ5IChfKCJ3YXJuaW5nOiBG dW5jdGlvbiAlcyBkb2VzIG5vdCByZXR1cm4gbm9ybWFsbHkuXG4iDQorCQkJ ICAgIlRyeSB0byBmaW5pc2ggYW55d2F5PyAiKSwNCisJCQkgU1lNQk9MX1BS SU5UX05BTUUgKGZ1bmN0aW9uKSkpDQorCSAgICBlcnJvciAoXygiTm90IGNv bmZpcm1lZC4iKSk7DQorCSAgcHJpbnRmX2ZpbHRlcmVkIChfKCJSdW4gdGls bCBleGl0IGZyb20gIikpOw0KKwl9DQogDQogICAgICAgcHJpbnRfc3RhY2tf ZnJhbWUgKGdldF9zZWxlY3RlZF9mcmFtZSAoTlVMTCksIDEsIExPQ0FUSU9O LCAwKTsNCiAgICAgfQ0KZGlmZiAtLWdpdCBhL2dkYi9zdGFjay5jIGIvZ2Ri L3N0YWNrLmMNCmluZGV4IDI4MzQ4MDEuLmY3ZTc3ZTQgMTAwNjQ0DQotLS0g YS9nZGIvc3RhY2suYw0KKysrIGIvZ2RiL3N0YWNrLmMNCkBAIC0yNDYyLDgg KzI0NjIsMTIgQEAgcmV0dXJuX2NvbW1hbmQgKGNoYXIgKnJldHZhbF9leHAs IGludCBmcm9tX3R0eSkNCiAJY29uZmlybWVkID0gcXVlcnkgKF8oIiVzTWFr ZSBzZWxlY3RlZCBzdGFjayBmcmFtZSByZXR1cm4gbm93PyAiKSwNCiAJCQkg ICBxdWVyeV9wcmVmaXgpOw0KICAgICAgIGVsc2UNCi0JY29uZmlybWVkID0g cXVlcnkgKF8oIiVzTWFrZSAlcyByZXR1cm4gbm93PyAiKSwgcXVlcnlfcHJl Zml4LA0KLQkJCSAgIFNZTUJPTF9QUklOVF9OQU1FICh0aGlzZnVuKSk7DQor CXsNCisJICBpZiAoVFlQRV9OT19SRVRVUk4gKHRoaXNmdW4tPnR5cGUpKQ0K KwkgICAgd2FybmluZyAoIkZ1bmN0aW9uIGRvZXMgbm90IHJldHVybiBub3Jt YWxseSB0byBjYWxsZXIuIik7DQorCSAgY29uZmlybWVkID0gcXVlcnkgKF8o IiVzTWFrZSAlcyByZXR1cm4gbm93PyAiKSwgcXVlcnlfcHJlZml4LA0KKwkJ CSAgICAgU1lNQk9MX1BSSU5UX05BTUUgKHRoaXNmdW4pKTsNCisJfQ0KICAg ICAgIGlmICghY29uZmlybWVkKQ0KIAllcnJvciAoXygiTm90IGNvbmZpcm1l ZCIpKTsNCiAgICAgfQ0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvQ2hhbmdlTG9n IGIvaW5jbHVkZS9DaGFuZ2VMb2cNCmluZGV4IGU4MGQyZWMuLjY5ZWQ5OTYg MTAwNjQ0DQotLS0gYS9pbmNsdWRlL0NoYW5nZUxvZw0KKysrIGIvaW5jbHVk ZS9DaGFuZ2VMb2cNCkBAIC0xLDMgKzEsNyBAQA0KKzIwMTQtMTItMDkgIE1h cmsgV2llbGFhcmQgIDxtandAcmVkaGF0LmNvbT4NCisNCisJKiBkd2FyZjIu ZGVmIChEV19BVF9ub3JldHVybik6IE5ldyBEV0FSRjUgYXR0cmlidXRlLg0K Kw0KIDIwMTQtMTItMDYgIEVyaWMgQm90Y2F6b3UgIDxlYm90Y2F6b3VAYWRh Y29yZS5jb20+DQogDQogCSogZGlzLWFzbS5oIChwcmludF9pbnNuX3Zpc2l1 bSk6IERlY2xhcmUuDQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kd2FyZjIuZGVm IGIvaW5jbHVkZS9kd2FyZjIuZGVmDQppbmRleCA4Y2ExNDNjLi44NTMzYTNl IDEwMDY0NA0KLS0tIGEvaW5jbHVkZS9kd2FyZjIuZGVmDQorKysgYi9pbmNs dWRlL2R3YXJmMi5kZWYNCkBAIC0zMDgsNiArMzA4LDggQEAgRFdfQVQgKERX X0FUX2RhdGFfYml0X29mZnNldCwgMHg2YikNCiBEV19BVCAoRFdfQVRfY29u c3RfZXhwciwgMHg2YykNCiBEV19BVCAoRFdfQVRfZW51bV9jbGFzcywgMHg2 ZCkNCiBEV19BVCAoRFdfQVRfbGlua2FnZV9uYW1lLCAweDZlKQ0KKy8qIERX QVJGIDUuICAqLw0KK0RXX0FUIChEV19BVF9ub3JldHVybiwgMHg4NykNCiAN CiBEV19BVF9EVVAgKERXX0FUX2xvX3VzZXIsIDB4MjAwMCkgLyogSW1wbGVt ZW50YXRpb24tZGVmaW5lZCByYW5nZSBzdGFydC4gICovDQogRFdfQVRfRFVQ IChEV19BVF9oaV91c2VyLCAweDNmZmYpIC8qIEltcGxlbWVudGF0aW9uLWRl ZmluZWQgcmFuZ2UgZW5kLiAgKi8NCi0tIA0KMS44LjMuMQ0KDQo= --=-P4Uq9NMDJNklKVgP0LKj--