From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from NAM11-DM6-obe.outbound.protection.outlook.com (mail-dm6nam11on2048.outbound.protection.outlook.com [40.107.223.48]) by sourceware.org (Postfix) with ESMTPS id F1B8D3858D39 for ; Wed, 22 Sep 2021 12:38:22 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org F1B8D3858D39 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=TSVXLqFIHzRJNOmI+6XM2i1xRto1iqos05GdcwtexPy/53oNx1++Kuy6uNSz6LnBClp9PoW8VY2rH/WbKOjwCnWqn50aUvbeIbqAFJv6Rly3uGwmtY4UI5ybOuJ/I2F/zHOW3itJTD7SP7w5CRMm29uOyMOyBhMXPF5t6Dq594niaR9MmzWAtd8/xUnqBWBe3actjRR4+9NYuoBsaJCXTlABGbUZvP5HNomkLwVWkMsbCz4/UdKPMEmqats3oMNwMzvhFL0xxLAkmWcJ9lE/P5vt3AN22eU7o5p1ALQapvcrvM1BCl3HMLwxfaPUJ/u3G9bnZHKtvGUWVcXiHOMvDw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=8tQJ2OVfaZG6I4/qV0ZUKe3540FMJ6Nc8OANJYI3N+4=; b=FNqzHdoF8h1QE+ovazINolwC4dy0deMOobWCrhrK4NkEV/Yv7R4CjedcaZn0NlA8mNxS39kX1oHX7+DrdEpPoDleXHW/025ne/OK60c1Z8YWFPAClaH3oCm9HfdX/2CRW/WZ9nP4ggOLyrELD+x6RG4BdQFVrbrJEFY6XzwR0W9uxOUis1hv8LnnLB7XI/QHE29HVyiNH08eoQrSSwckv2Mp4SS3qVZ6S6ZdEEELq1pbHfU1Q0AR2B3Y7tyJz0Nw3dnUrOeBHYXjEgzr/Wjlw4R3wVUVn+R0cToSk7AKhzuuNjUBLQ+/lMdln6VeW6UzW0GUBGH3svlpjqbwbEWCyQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=amd.com; dmarc=pass action=none header.from=amd.com; dkim=pass header.d=amd.com; arc=none Received: from MW2PR12MB4684.namprd12.prod.outlook.com (2603:10b6:302:13::29) by MW2PR12MB2474.namprd12.prod.outlook.com (2603:10b6:907:9::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4523.14; Wed, 22 Sep 2021 12:38:20 +0000 Received: from MW2PR12MB4684.namprd12.prod.outlook.com ([fe80::edd4:501e:6b73:72bf]) by MW2PR12MB4684.namprd12.prod.outlook.com ([fe80::edd4:501e:6b73:72bf%5]) with mapi id 15.20.4523.018; Wed, 22 Sep 2021 12:38:20 +0000 From: "Kumar N, Bhuvanendra" To: Andrew Burgess CC: "gdb-patches@sourceware.org" , "George, Jini Susan" , "Achra, Nitika" , "Sharma, Alok Kumar" , "E, Nagajyothi" Subject: RE: [PATCH] Fix ptype and print commands for namelist variables(a fortran feature) Thread-Topic: [PATCH] Fix ptype and print commands for namelist variables(a fortran feature) Thread-Index: AdeYyESNFilxiCvkSRWjYmJPezxZtgVO2csAAGpd/AA= Date: Wed, 22 Sep 2021 12:38:20 +0000 Message-ID: References: <20210920094122.GB4950@embecosm.com> In-Reply-To: <20210920094122.GB4950@embecosm.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: yes X-MS-TNEF-Correlator: msip_labels: MSIP_Label_88914ebd-7e6c-4e12-a031-a9906be2db14_Enabled=true; MSIP_Label_88914ebd-7e6c-4e12-a031-a9906be2db14_SetDate=2021-09-22T12:38:14Z; MSIP_Label_88914ebd-7e6c-4e12-a031-a9906be2db14_Method=Standard; MSIP_Label_88914ebd-7e6c-4e12-a031-a9906be2db14_Name=AMD Official Use Only-AIP 2.0; MSIP_Label_88914ebd-7e6c-4e12-a031-a9906be2db14_SiteId=3dd8961f-e488-4e60-8e11-a82d994e183d; MSIP_Label_88914ebd-7e6c-4e12-a031-a9906be2db14_ActionId=904969a3-2087-44c9-8fed-6b618f7c88d6; MSIP_Label_88914ebd-7e6c-4e12-a031-a9906be2db14_ContentBits=1 x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: f33f65f7-db1e-474f-3843-08d97dc5dc52 x-ms-traffictypediagnostic: MW2PR12MB2474: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:1850; x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: OYt3lgf16uLju1tj/ij7i0KCWAsaSJfOP7xabvYmyJDBNPQQsjiDWJpmUe0s6Wb6CwSM5gv32IiJELzK72k5xfDO++F3GOXMFYdHHmyFBliaDtr4ZmsH/lRjLoBZZfjw0RjaFvCGZpkEzMHXkbgjfWvGpFS0LiN7qoYxx6Cz9vku5bAM67w+NEK50Eb2qBGpy+grMgHfm/hBGC9/LbiYlPrIi1y/f/F9i6M3MdszuqeHrnBMbz+e/JZYU+QSRk6DcYchfl7EqxGiV/+GK2FkbfXjZTnfCezk0DefW/Eqk0pZkGIRCBtGL7ZbOws5JU7SKXwY6FDaGAOU5n7qwe4l02VLJasW+UoHT/+QV3gI0cjMP9hXxZuTDMb8eKnTSxY+VBeo85QqHU525V611oMhsQWvo+ZmxImbjV/46nWNUv3uA/GKVVhqKsMtXnCIQCvtz70xv0whwIXE//Ugg/EHMYrmlz/Q9lwH/FTnH7ZxiJHsyx9ITC/bpEAljBSAYGQNd5IUhjZ/uFzsONOrxAj8kTxBIaUiM2LEFcs26bZNaKVW+FE5XUzULQ2h1ukZ78RZe3A3ABuw5Br8qTIpmzisoPotBX1GnC0wpUVkBZzA7LmMv+uSPIf42owno8j86qvp/zV/WXcIOyFg27AYO7px29kMxyRZepGaPAtG8kBOMg9WlTV8SPYw1JKprlaEnwuCKmY8kTa2wyLGG4kxdiCbT/fKeoLGjr7ZAgbAkw2eucXaU6+LEu947BY8A8o+WsAfBVtbvQPbep22w4UusXIqxTCJaOP65F7c9pWM034+6zhILqmYds3mQjIPJYG5S/WkyV6J4oouzah8vHvZG93sc2s4Zbz5TyazaZH8yQD30vc= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:MW2PR12MB4684.namprd12.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(366004)(99936003)(122000001)(54906003)(86362001)(8936002)(76116006)(30864003)(38100700002)(7696005)(83380400001)(4326008)(64756008)(66446008)(186003)(52536014)(5660300002)(2906002)(66556008)(53546011)(66476007)(66616009)(66946007)(8676002)(6916009)(508600001)(71200400001)(9686003)(6506007)(966005)(33656002)(316002)(38070700005)(45080400002)(55016002)(2004002)(559001)(579004); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?ebiJNikNK0vZHONix81UCtBLQIXhZEFZKCAd03FnDN4+1gZh7sTFaCHDV1E+?= =?us-ascii?Q?dFHXKIaXfYbhnad8VnTMU6W2d21Rz4u8R/MIQcgojroWzFSwSpaiLRW5VYSI?= =?us-ascii?Q?vYR7SncbaFCCRnRFMTCgSS25AHy5CPJ4lkQRGykLn1/+moFLfEj3dUPFZr1V?= =?us-ascii?Q?0IORI8oYiCnmNIT8Bp+KsKZ+sKSMFFByY/0RMbbP3CZdFGm08vJbwV26SEdz?= =?us-ascii?Q?Ob8IKqUyc3Do9rhQtNm3GOnXFN9jKstxETd2zV3+mlwPV5K5F79Xf0GxdMHG?= =?us-ascii?Q?9E8jl2cFhzuQpECexBAdp0e5EorHZlCJGDcsqyq9AHnv02itbELLFgfxHFg4?= =?us-ascii?Q?lyKMGBU+S7ZvtwUWrmHrrDYrdqyyah0dhb2QT6wg8yU2rRTexO7cYkxpzECh?= =?us-ascii?Q?OZYOXCdjEuAXWM1qQ5EzfYT88a2FHP+pz8SjjWq9eKELNkkV8UxsIbMj4P1x?= =?us-ascii?Q?ZeLZ31FoF4wa8DRt47rkLItWrCT28/90UykeriV+O1WN3y6hZUZr+GhpE9f1?= =?us-ascii?Q?qAAguKiPIdMbTGfWe5dSLVPLAWenHzLR53noEl87XzNmicSQBJsYKP75Jrtf?= =?us-ascii?Q?B4XHXfuubQb8PYgeKce18s6bTxC4aWuDPO37Z90PpwLZBm1V2rMquNHr+yqk?= =?us-ascii?Q?tWigHDd6tDEBz8k41r6MIHmL9l2Lt3tSoB+Lc5zqE7L0rvICYtxpFKsYjtkL?= =?us-ascii?Q?JGNYJWqy0l3ubFbNBmqtcUsFta8rtku6H/PPHK5eCSrYb4tkLcqjItBiV88U?= =?us-ascii?Q?TzBGxeRX4tTVpc7uYFtgjdCSq1m2K2eYAMX1+9J59qvACyEzLxpaTIlxjxqV?= =?us-ascii?Q?gsc/SGwQosBgLBxYWhW+15QnYk+FCXUNtMDZXriL7tWVbWa4ECOT7tZ5p0I6?= =?us-ascii?Q?7Hsv/pRW8QDvTDteGUfduaMZro8ksCPvnuTKD6IMAH/emJSOVDa1EeN0nc6P?= =?us-ascii?Q?tJzDWGgDSlUgov/GiAZaHEPYviGraEJFkwL3GH6tyYx4dXdxj6GbpdH5fNY7?= =?us-ascii?Q?aQmMUGpZTcykKqcyoZIeVR/H5EabTRYbO1mBnQkk1MdLsElk5N4JVPg/PPRn?= =?us-ascii?Q?JPjoUb29MEl8RZ8Rej2StD11po5ko+BHN9kBqMKE8YdtD2zvk4psG/2AIWWU?= =?us-ascii?Q?XQNJLVVy/TAmw1Lk/yONeYlolrmGUNgp7diJGXoivniu8Yu1Q/bw/7gO4fyJ?= =?us-ascii?Q?+ypj+4PA/PO/f1lzZ07MhStLXPS4asBSakvQt6Ly1bqE5+DjBXZdktbLA+Xi?= =?us-ascii?Q?LsHNELW4qW06OlJZKMpdLEwz6kFz5hVDnA246EsWxEwL/XnhF1jvhe1Sniq8?= =?us-ascii?Q?WFY4Euj3pqdHknxejz+klwuWgLN0qREbmlfQRC4XtwjC6HE7SZhOgphhGgCy?= =?us-ascii?Q?M5jnaV4=3D?= Content-Type: multipart/mixed; boundary="_002_MW2PR12MB4684AD2B80E4D588ED22921287A29MW2PR12MB4684namp_" MIME-Version: 1.0 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MW2PR12MB4684.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: f33f65f7-db1e-474f-3843-08d97dc5dc52 X-MS-Exchange-CrossTenant-originalarrivaltime: 22 Sep 2021 12:38:20.1484 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: 5+eEMQb/09VjfZkkIcaJzzfUg8Anw3DwmXoSwe14TJVt70OotmYMafNozEkUnFm/iAnmUKp8oJDRxy1x7bR8Ng== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW2PR12MB2474 X-Spam-Status: No, score=-11.0 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, KAM_LOTSOFHASH, KAM_SHORT, KAM_STOCKGEN, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_PASS, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 22 Sep 2021 12:38:27 -0000 --_002_MW2PR12MB4684AD2B80E4D588ED22921287A29MW2PR12MB4684namp_ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable [AMD Official Use Only] Hi Andrew, Thanks a lot for your review comments, I have addressed all the review comm= ents and tested. Updated patch is attached and also inlined with this email= .=20 >I'm a little uncomfortable with this if condition. This feels like a bit = of a hack. Is there precedent anywhere else in GDB for using the type spec= ific field like this? >Wouldn't adding a TYPE_CODE_NAMELIST be more in keeping with how GDB curre= ntly does things, though I understand this is likely to make the patch slig= htly bigger. Did you consider this approach? Regarding your major comment, I did considered introducing a new type speci= fic field for namelist earlier, instead of using any of those existing. Rea= son I did not included in my earlier patch was, type_specific_kind is decla= red with 3 bits in struct main_type and already there were 8 values, hence = deferred expanding type_specific_kind etc.... But now I have done that, tha= nks for the suggestion. Regards, bhuvan PATH inlined:=20 >From 59053daf1018c3e4bcae8cd342d46b00f4f03648 Mon Sep 17 00:00:00 2001 From: =3D?UTF-8?q?=3DE2=3D80=3D9Cbhkumarn=3DE2=3D80=3D9D?=3D Date: Wed, 22 Sep 2021 17:52:15 +0530 Subject: [PATCH] Fix ptype and print commands for namelist variables(a fort= ran feature). GCC/gfortran support namelist(a fortran feature), it emits DW_TAG_namelist and DW_TAG_namelist_item dies. But gdb does not process these dies and support namelist variables during print and ptype commands. When tried to print, it bails out with the error message as shown below. (gdb) print nml No symbol "nml" in current context. This commit is to make the print and ptype commands work for namelist variables and its items. Sample output of these commands is shared below, with fixed gdb. (gdb) ptype nml type =3D Type nml integer(kind=3D4) :: a integer(kind=3D4) :: b End Type nml (gdb) print nml $1 =3D ( a =3D 10, b =3D 20 ) --- gdb/ChangeLog | 11 ++++++ gdb/dwarf2/read.c | 44 +++++++++++++++++++---- gdb/f-valprint.c | 10 ++++++ gdb/gdbtypes.h | 3 +- gdb/testsuite/ChangeLog | 5 +++ gdb/testsuite/gdb.fortran/namelist.exp | 49 ++++++++++++++++++++++++++ gdb/testsuite/gdb.fortran/namelist.f90 | 27 ++++++++++++++ include/dwarf2.def | 2 +- 8 files changed, 142 insertions(+), 9 deletions(-) create mode 100644 gdb/testsuite/gdb.fortran/namelist.exp create mode 100644 gdb/testsuite/gdb.fortran/namelist.f90 diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 36cb4c9e7e9..ec01c2957e9 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,14 @@ +2021-08-23 Bhuvanendra Kumar N + + * dwarf2/read.c (process_die): Add new case for namelist. + (dwarf2_add_field): Process DW_TAG_namelist_item die. + (read_structure_type, handle_struct_member_die, new_symbol) + (dwarf2_name): Update. + * f-valprint.c (f_language::value_print_inner): Add support for + printing namelist items. + * include/dwarf2.def: (DW_AT_namelist_items): Renamed to ... + (DW_AT_namelist_item): ... this. As per dwarf standard. + 2021-06-08 Lancelot Six =20 * python/lib/gdb/FrameDecorator.py (FrameDecorator): Use 'is None' diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c index 96009f1418f..88db06ec9e7 100644 --- a/gdb/dwarf2/read.c +++ b/gdb/dwarf2/read.c @@ -9570,6 +9570,7 @@ process_die (struct die_info *die, struct dwarf2_cu *= cu) case DW_TAG_interface_type: case DW_TAG_structure_type: case DW_TAG_union_type: + case DW_TAG_namelist: process_structure_scope (die, cu); break; case DW_TAG_enumeration_type: @@ -14417,8 +14418,20 @@ dwarf2_add_field (struct field_info *fip, struct d= ie_info *die, =20 fp =3D &new_field->field; =20 - if (die->tag =3D=3D DW_TAG_member && ! die_is_declaration (die, cu)) - { + if ((die->tag =3D=3D DW_TAG_member || die->tag =3D=3D DW_TAG_namelist_it= em) + && ! die_is_declaration (die, cu)) + { + /* For the DW_TAG_namelist_item die, use the referenced die. */ + if (die->tag =3D=3D DW_TAG_namelist_item) + { + struct attribute *attr1 =3D dwarf2_attr (die, DW_AT_namelist_ite= m, cu); + struct die_info *item_die =3D nullptr; + struct dwarf2_cu *item_cu =3D cu; + if (attr1->form_is_ref ()) + item_die =3D follow_die_ref (die, attr1, &item_cu); + if (item_die !=3D nullptr) + die =3D item_die; + } /* Data member other than a C++ static data member. */ =20 /* Get type of field. */ @@ -15448,7 +15461,10 @@ read_structure_type (struct die_info *die, struct = dwarf2_cu *cu) } =20 type =3D alloc_type (objfile); - INIT_CPLUS_SPECIFIC (type); + if (die->tag =3D=3D DW_TAG_namelist) + TYPE_SPECIFIC_FIELD (type) =3D TYPE_SPECIFIC_NAMELIST; + else + INIT_CPLUS_SPECIFIC (type); =20 name =3D dwarf2_name (die, cu); if (name !=3D NULL) @@ -15684,7 +15700,8 @@ handle_struct_member_die (struct die_info *child_di= e, struct type *type, struct dwarf2_cu *cu) { if (child_die->tag =3D=3D DW_TAG_member - || child_die->tag =3D=3D DW_TAG_variable) + || child_die->tag =3D=3D DW_TAG_variable + || child_die->tag =3D=3D DW_TAG_namelist_item) { /* NOTE: carlton/2002-11-05: A C++ static data member should be a DW_TAG_member that is a declaration, but @@ -15728,7 +15745,9 @@ handle_struct_member_die (struct die_info *child_di= e, struct type *type, } =20 /* Finish creating a structure or union type, including filling in - its members and creating a symbol for it. */ + its members and creating a symbol for it. This function also + handles Fortran namelist variable, its items or members and + creating a symbol for it. */ =20 static void process_structure_scope (struct die_info *die, struct dwarf2_cu *cu) @@ -21807,8 +21826,17 @@ new_symbol (struct die_info *die, struct type *typ= e, struct dwarf2_cu *cu, case DW_TAG_union_type: case DW_TAG_set_type: case DW_TAG_enumeration_type: - SYMBOL_ACLASS_INDEX (sym) =3D LOC_TYPEDEF; - SYMBOL_DOMAIN (sym) =3D STRUCT_DOMAIN; + case DW_TAG_namelist: + if (die->tag =3D=3D DW_TAG_namelist) + { + SYMBOL_ACLASS_INDEX (sym) =3D LOC_STATIC; + SYMBOL_DOMAIN (sym) =3D VAR_DOMAIN; + } + else + { + SYMBOL_ACLASS_INDEX (sym) =3D LOC_TYPEDEF; + SYMBOL_DOMAIN (sym) =3D STRUCT_DOMAIN; + } =20 { /* NOTE: carlton/2003-11-10: C++ class symbols shouldn't @@ -22744,6 +22772,7 @@ dwarf2_name (struct die_info *die, struct dwarf2_cu= *cu) && die->tag !=3D DW_TAG_class_type && die->tag !=3D DW_TAG_interface_type && die->tag !=3D DW_TAG_structure_type + && die->tag !=3D DW_TAG_namelist && die->tag !=3D DW_TAG_union_type) return NULL; =20 @@ -22768,6 +22797,7 @@ dwarf2_name (struct die_info *die, struct dwarf2_cu= *cu) case DW_TAG_interface_type: case DW_TAG_structure_type: case DW_TAG_union_type: + case DW_TAG_namelist: /* Some GCC versions emit spurious DW_AT_name attributes for unnamed structures or unions. These were of the form "._%d" in GCC 4.1, or simply "" or "" in GCC 4.3 diff --git a/gdb/f-valprint.c b/gdb/f-valprint.c index 240daaf34f9..aa86fbc901e 100644 --- a/gdb/f-valprint.c +++ b/gdb/f-valprint.c @@ -320,6 +320,16 @@ f_language::value_print_inner (struct value *val, stru= ct ui_file *stream, fputs_filtered (" =3D ", stream); } =20 + /* While printing namelist items, fetch the appropriate value + field before printing its value. */ + if (TYPE_SPECIFIC_FIELD (type) =3D=3D TYPE_SPECIFIC_NAMELIST) + { + struct block_symbol symni =3D lookup_symbol (field_name, + get_selected_block (0), VAR_DOMAIN, nullptr); + if (symni.symbol !=3D nullptr) + field =3D value_of_variable (symni.symbol, symni.block); + } + common_val_print (field, stream, recurse + 1, options, current_language); =20 diff --git a/gdb/gdbtypes.h b/gdb/gdbtypes.h index 0cc00e74a20..124282c3d53 100644 --- a/gdb/gdbtypes.h +++ b/gdb/gdbtypes.h @@ -607,6 +607,7 @@ enum type_specific_kind TYPE_SPECIFIC_SELF_TYPE, TYPE_SPECIFIC_INT, TYPE_SPECIFIC_FIXED_POINT, + TYPE_SPECIFIC_NAMELIST, }; =20 union type_owner @@ -833,7 +834,7 @@ struct main_type /* * A discriminant telling us which field of the type_specific union is being used for this type, if any. */ =20 - ENUM_BITFIELD(type_specific_kind) type_specific_field : 3; + ENUM_BITFIELD(type_specific_kind) type_specific_field : 4; =20 /* * Number of fields described for this type. This field appears at this location because it packs nicely here. */ diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 87cf3e2a061..33f60c29b3c 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2021-07-26 Bhuvanendra Kumar N + + * gdb.fortran/namelist.exp: New file. + * gdb.fortran/namelist.f90: New file. + 2021-06-10 Bhuvanendra Kumar N =20 * gdb.fortran/ptype-on-functions.exp: Add type info of formal diff --git a/gdb/testsuite/gdb.fortran/namelist.exp b/gdb/testsuite/gdb.for= tran/namelist.exp new file mode 100644 index 00000000000..90762928455 --- /dev/null +++ b/gdb/testsuite/gdb.fortran/namelist.exp @@ -0,0 +1,49 @@ +# Copyright (C) 2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# This file is part of the gdb testsuite. It contains tests for fortran +# namelist. + +if { [skip_fortran_tests] } { return -1 } + +standard_testfile .f90 +load_lib "fortran.exp" + +if {[prepare_for_testing "failed to prepare" $testfile $srcfile {debug f90= }]} { + return -1 +} + +if ![fortran_runto_main] then { + perror "couldn't run to main" + continue +} + +# Depending on the compiler being used, the type names can be printed diff= erently. +set int [fortran_int4] + +gdb_breakpoint [gdb_get_line_number "Display namelist"] +gdb_continue_to_breakpoint "Display namelist" + +if {[test_compiler_info {gcc-*}]} { + gdb_test "ptype nml" \ + "type =3D Type nml\r\n *$int :: a\r\n *$int :: b\r\n *End Type nml= " + gdb_test "print nml" \ + "\\$\[0-9\]+ =3D \\( a =3D 10, b =3D 20 \\)" +} else { + gdb_test "ptype nml" \ + "No symbol \"nml\" in current context\\." + gdb_test "print nml" \ + "No symbol \"nml\" in current context\\." +} diff --git a/gdb/testsuite/gdb.fortran/namelist.f90 b/gdb/testsuite/gdb.for= tran/namelist.f90 new file mode 100644 index 00000000000..fb36690d765 --- /dev/null +++ b/gdb/testsuite/gdb.fortran/namelist.f90 @@ -0,0 +1,27 @@ +! Copyright (C) 2021 Free Software Foundation, Inc. +! +! This program is free software; you can redistribute it and/or modify +! it under the terms of the GNU General Public License as published by +! the Free Software Foundation; either version 3 of the License, or +! (at your option) any later version. +! +! This program is distributed in the hope that it will be useful, +! but WITHOUT ANY WARRANTY; without even the implied warranty of +! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +! GNU General Public License for more details. +! +! You should have received a copy of the GNU General Public License +! along with this program. If not, see . +! +! This file is the Fortran source file for namelist.exp. + +program main + + integer :: a, b + namelist /nml/ a, b + + a =3D 10 + b =3D 20 + Write(*,nml) ! Display namelist + +end program main diff --git a/include/dwarf2.def b/include/dwarf2.def index 1ae6e1df298..6b8be1f6a16 100644 --- a/include/dwarf2.def +++ b/include/dwarf2.def @@ -289,7 +289,7 @@ DW_AT (DW_AT_frame_base, 0x40) DW_AT (DW_AT_friend, 0x41) DW_AT (DW_AT_identifier_case, 0x42) DW_AT (DW_AT_macro_info, 0x43) -DW_AT (DW_AT_namelist_items, 0x44) +DW_AT (DW_AT_namelist_item, 0x44) DW_AT (DW_AT_priority, 0x45) DW_AT (DW_AT_segment, 0x46) DW_AT (DW_AT_specification, 0x47) --=20 2.17.1 -----Original Message----- From: Andrew Burgess =20 Sent: Monday, September 20, 2021 3:11 PM To: Kumar N, Bhuvanendra Cc: gdb-patches@sourceware.org; George, Jini Susan ; Achra, Nitika ; Sharma, Alok Kumar ; E, Nagajyothi Subject: Re: [PATCH] Fix ptype and print commands for namelist variables(a = fortran feature) [CAUTION: External Email] * Kumar N, Bhuvanendra via Gdb-patches [2021-0= 8-24 09:16:19 +0000]: > [AMD Official Use Only] > > Hi all, > > Requesting code review for this GDB patch. Required patch is attached and= also inlined below with this email. > > Problem description/summary: > > GCC/gfortran support namelist(a fortran feature), it emits DW_TAG_namelis= t and DW_TAG_namelist_item dies. But gdb does not process these dies and su= pport namelist variables during print and ptype commands. When tried to pri= nt, it bails out with the error message as shown below. > (gdb) print nml > No symbol "nml" in current context. > > Fix details: > > This fix is to make the print and ptype commands work for namelist variab= les and its items. Sample output of these commands is shared below, with fi= xed gdb. > > (gdb) ptype nml > type =3D Type nml > integer(kind=3D4) :: a > integer(kind=3D4) :: b > End Type nml > (gdb) print nml > $1 =3D ( a =3D 10, b =3D 20 ) bhuvan, Thanks for working on this. I have some small style issues, but I have a b= igger question which you'll find inline. Thanks, Andrew > > gdb/ChangeLog: > > * dwarf2/read.c (process_die): Add new case for namelist. > (dwarf2_add_field): Process DW_TAG_namelist_item die. > (read_structure_type, handle_struct_member_die, new_symbol) > (dwarf2_name): Update. > * f-valprint.c (f_language::value_print_inner): Add support for > printing namelist items. > * include/dwarf2.def: (DW_AT_namelist_items): Renamed to ... > (DW_AT_namelist_item): ... this. As per dwarf standard. > > gdb/testsuite/ChangeLog: > > * gdb.fortran/namelist.exp: New file. > * gdb.fortran/namelist.f90: New file. > > NOTE: Similarly renaming DW_AT_namelist_items to DW_AT_namelist_item as p= er DWARF standard naming convention in GCC/gfortran repo (https://nam11.saf= elinks.protection.outlook.com/?url=3Dhttps%3A%2F%2Fgithub.com%2Fgcc-mirror%= 2Fgcc&data=3D04%7C01%7CBhuvanendra.KumarN%40amd.com%7Cf615fb689a504a4c0= 06508d97c1ad0b5%7C3dd8961fe4884e608e11a82d994e183d%7C0%7C0%7C63767727688364= 5649%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik= 1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=3DyZro%2BZ5l9UWD0epPKzPI21qCx0KmAKZJs= lWb6bgkanE%3D&reserved=3D0) will be handled in separate PATCH. I will r= aise separate patch for this. > > regards, > bhuvan > > Patch inlined: > > From 0775cbf3716bae9480c3f1f1d9d8860ac561929e Mon Sep 17 00:00:00 2001 > From: =3D?UTF-8?q?=3DE2=3D80=3D9Cbhkumarn=3DE2=3D80=3D9D?=3D=20 > Bhuvanendra.KumarN@amd.com > Date: Mon, 24 Aug 2021 11:49:14 +0530 > Subject: [PATCH] Fix ptype and print commands for namelist variables(a=20 > fortran feature). > > GCC/gfortran support namelist(a fortran feature), it emits=20 > DW_TAG_namelist and DW_TAG_namelist_item dies. But gdb does not=20 > process these dies and support namelist variables during print and=20 > ptype commands. When tried to print, it bails out with the error message = as shown below. > (gdb) print nml > No symbol "nml" in current context. > This commit is to make the print and ptype commands work for namelist=20 > variables and its items. Sample output of these commands is shared=20 > below, with fixed gdb. > (gdb) ptype nml > type =3D Type nml > integer(kind=3D4) :: a > integer(kind=3D4) :: b > End Type nml > (gdb) print nml > $1 =3D ( a =3D 10, b =3D 20 ) > --- > gdb/ChangeLog | 11 +++++++ > gdb/dwarf2/read.c | 41 +++++++++++++++++++---- > gdb/f-valprint.c | 10 ++++++ > gdb/testsuite/ChangeLog | 5 +++ > gdb/testsuite/gdb.fortran/namelist.exp | 45 ++++++++++++++++++++++++++ > gdb/testsuite/gdb.fortran/namelist.f90 | 27 ++++++++++++++++ > include/dwarf2.def | 2 +- > 7 files changed, 134 insertions(+), 7 deletions(-) create mode 100644=20 > gdb/testsuite/gdb.fortran/namelist.exp > create mode 100644 gdb/testsuite/gdb.fortran/namelist.f90 > > diff --git a/gdb/ChangeLog b/gdb/ChangeLog index=20 > 36cb4c9e7e9..ec01c2957e9 100644 > --- a/gdb/ChangeLog > +++ b/gdb/ChangeLog > @@ -1,3 +1,14 @@ > +2021-08-23 Bhuvanendra Kumar N =20 > +Bhuvanendra.KumarN@amd.com > + > + * dwarf2/read.c (process_die): Add new case for namelist. > + (dwarf2_add_field): Process DW_TAG_namelist_item die. > + (read_structure_type, handle_struct_member_die, new_symbol) > + (dwarf2_name): Update. > + * f-valprint.c (f_language::value_print_inner): Add support for > + printing namelist items. > + * include/dwarf2.def: (DW_AT_namelist_items): Renamed to ... > + (DW_AT_namelist_item): ... this. As per dwarf standard. > + > 2021-06-08 Lancelot Six lsix@lancelotsix.com > * python/lib/gdb/FrameDecorator.py (FrameDecorator): Use 'is None' > diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c index=20 > 96009f1418f..54528d67498 100644 > --- a/gdb/dwarf2/read.c > +++ b/gdb/dwarf2/read.c > @@ -9570,6 +9570,7 @@ process_die (struct die_info *die, struct dwarf2_cu= *cu) > case DW_TAG_interface_type: > case DW_TAG_structure_type: > case DW_TAG_union_type: > + case DW_TAG_namelist: > process_structure_scope (die, cu); > break; > case DW_TAG_enumeration_type: > @@ -14417,8 +14418,20 @@ dwarf2_add_field (struct field_info *fip, struct= die_info *die, > fp =3D &new_field->field; > - if (die->tag =3D=3D DW_TAG_member && ! die_is_declaration (die, cu)) > - { > + if ((die->tag =3D=3D DW_TAG_member || die->tag =3D=3D DW_TAG_namelist_= item) && > + ! die_is_declaration (die, cu)) The '&&' operator should start the line. > + { > + /* For the DW_TAG_namelist_item die, use the referenced die. */ > + if (die->tag =3D=3D DW_TAG_namelist_item) > + { > + struct attribute *attr1 =3D dwarf2_attr (die, DW_AT_namelist_i= tem, cu); > + struct die_info *item_die =3D NULL; Throughout this patch, please use nullptr instead of NULL. > + struct dwarf2_cu *item_cu =3D cu; > + if (attr1->form_is_ref ()) > + item_die =3D follow_die_ref (die, attr1, &item_cu); > + if (item_die !=3D NULL) > + die =3D item_die; > + } > /* Data member other than a C++ static data member. */ > /* Get type of field. */ > @@ -15449,6 +15462,8 @@ read_structure_type (struct die_info *die, struct= dwarf2_cu *cu) > type =3D alloc_type (objfile); > INIT_CPLUS_SPECIFIC (type); > + if (die->tag =3D=3D DW_TAG_namelist) > + INIT_NONE_SPECIFIC (type); I think you should use if/then/else and place INIT_CPLUS_SPECIFIC in the el= se block. > name =3D dwarf2_name (die, cu); > if (name !=3D NULL) > @@ -15684,7 +15699,8 @@ handle_struct_member_die (struct die_info *child_= die, struct type *type, > struct dwarf2_cu *cu) { > if (child_die->tag =3D=3D DW_TAG_member > - || child_die->tag =3D=3D DW_TAG_variable) > + || child_die->tag =3D=3D DW_TAG_variable > + || child_die->tag =3D=3D DW_TAG_namelist_item) > { > /* NOTE: carlton/2002-11-05: A C++ static data member > should be a DW_TAG_member that is a declaration, but @@ -15728,7=20 > +15744,9 @@ handle_struct_member_die (struct die_info *child_die,=20 > struct type *type, } > /* Finish creating a structure or union type, including filling in > - its members and creating a symbol for it. */ > + its members and creating a symbol for it. This function also > + handles Fortran namelist variable, its items or members and > + creating a symbol for it. */ > static void > process_structure_scope (struct die_info *die, struct dwarf2_cu *cu)=20 > @@ -21807,8 +21825,17 @@ new_symbol (struct die_info *die, struct type *t= ype, struct dwarf2_cu *cu, > case DW_TAG_union_type: > case DW_TAG_set_type: > case DW_TAG_enumeration_type: > - SYMBOL_ACLASS_INDEX (sym) =3D LOC_TYPEDEF; > - SYMBOL_DOMAIN (sym) =3D STRUCT_DOMAIN; > + case DW_TAG_namelist: > + if (die->tag =3D=3D DW_TAG_namelist) > + { > + SYMBOL_ACLASS_INDEX (sym) =3D LOC_STATIC; > + SYMBOL_DOMAIN (sym) =3D VAR_DOMAIN; > + } > + else > + { > + SYMBOL_ACLASS_INDEX (sym) =3D LOC_TYPEDEF; > + SYMBOL_DOMAIN (sym) =3D STRUCT_DOMAIN; > + } > { > /* NOTE: carlton/2003-11-10: C++ class symbols shouldn't @@=20 > -22744,6 +22771,7 @@ dwarf2_name (struct die_info *die, struct dwarf2_cu = *cu) > && die->tag !=3D DW_TAG_class_type > && die->tag !=3D DW_TAG_interface_type > && die->tag !=3D DW_TAG_structure_type > + && die->tag !=3D DW_TAG_namelist > && die->tag !=3D DW_TAG_union_type) > return NULL; > @@ -22768,6 +22796,7 @@ dwarf2_name (struct die_info *die, struct dwarf2_= cu *cu) > case DW_TAG_interface_type: > case DW_TAG_structure_type: > case DW_TAG_union_type: > + case DW_TAG_namelist: > /* Some GCC versions emit spurious DW_AT_name attributes for unnam= ed > structures or unions. These were of the form "._%d" in GCC 4.1, > or simply "" or "" in GCC 4.3=20 > diff --git a/gdb/f-valprint.c b/gdb/f-valprint.c index=20 > 240daaf34f9..8ed35e2fb1f 100644 > --- a/gdb/f-valprint.c > +++ b/gdb/f-valprint.c > @@ -320,6 +320,16 @@ f_language::value_print_inner (struct value *val, st= ruct ui_file *stream, > fputs_filtered (" =3D ", stream); > } > + /* While printing namelist items, fetch the appropriate value > + field before printing its value. */ > + if (TYPE_SPECIFIC_FIELD (type) =3D=3D TYPE_SPECIFIC_NONE) I'm a little uncomfortable with this if condition. This feels like a bit o= f a hack. Is there precedent anywhere else in GDB for using the type speci= fic field like this? Wouldn't adding a TYPE_CODE_NAMELIST be more in keeping with how GDB curren= tly does things, though I understand this is likely to make the patch sligh= tly bigger. Did you consider this approach? > + { > + struct block_symbol symni =3D lookup_symbol(field_name, > + get_selected_block (0), VAR_DOMAIN, nullptr); There's a missing space before '(' here, and two lines below. > + if (symni.symbol !=3D NULL) > + field =3D value_of_variable(symni.symbol, symni.block); > + } > + > common_val_print (field, stream, recurse + 1, > options, current_language); diff --git=20 > a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index=20 > 87cf3e2a061..33f60c29b3c 100644 > --- a/gdb/testsuite/ChangeLog > +++ b/gdb/testsuite/ChangeLog > @@ -1,3 +1,8 @@ > +2021-07-26 Bhuvanendra Kumar N =20 > +Bhuvanendra.KumarN@amd.com > + > + * gdb.fortran/namelist.exp: New file. > + * gdb.fortran/namelist.f90: New file. > + > 2021-06-10 Bhuvanendra Kumar N Bhuvanendra.KumarN@amd.com > * gdb.fortran/ptype-on-functions.exp: Add type info of formal=20 > diff --git a/gdb/testsuite/gdb.fortran/namelist.exp=20 > b/gdb/testsuite/gdb.fortran/namelist.exp > new file mode 100644 > index 00000000000..e4df8c7debb > --- /dev/null > +++ b/gdb/testsuite/gdb.fortran/namelist.exp > @@ -0,0 +1,45 @@ > +# Copyright 2020-2021 Free Software Foundation, Inc. The '2020' date is only needed if the patch was original posted in 2020, or= if this file is copied/based on some other in-tree file that is copyright = 2020+. > + > +# This program is free software; you can redistribute it and/or=20 > +modify # it under the terms of the GNU General Public License as=20 > +published by # the Free Software Foundation; either version 3 of the=20 > +License, or # (at your option) any later version. > +# > +# This program is distributed in the hope that it will be useful, #=20 > +but WITHOUT ANY WARRANTY; without even the implied warranty of #=20 > +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU=20 > +General Public License for more details. > +# > +# You should have received a copy of the GNU General Public License #=20 > +along with this program. If not, see https://nam11.safelinks.protection= .outlook.com/?url=3Dhttp%3A%2F%2Fwww.gnu.org%2Flicenses%2F&data=3D04%7C= 01%7CBhuvanendra.KumarN%40amd.com%7Cf615fb689a504a4c006508d97c1ad0b5%7C3dd8= 961fe4884e608e11a82d994e183d%7C0%7C0%7C637677276883645649%7CUnknown%7CTWFpb= GZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7= C1000&sdata=3DQG%2FRj3ZZSfOdcgEEhs5GUDAwOK5RCeBiSJdPVN1DfsY%3D&rese= rved=3D0. > + > +# This file is part of the gdb testsuite. It contains tests for=20 > +fortran # namelist. > + > +if { [skip_fortran_tests] } { return -1 } > + > +standard_testfile .f90 > +load_lib "fortran.exp" > + > +if {[prepare_for_testing "failed to prepare" $testfile $srcfile {debug f= 90}]} { > + return -1 > +} > + > +if ![fortran_runto_main] then { > + perror "couldn't run to main" > + continue > +} > + > +# Depending on the compiler being used, the type names can be printed di= fferently. > +set int [fortran_int4] > + > +gdb_breakpoint [gdb_get_line_number "Display namelist"]=20 > +gdb_continue_to_breakpoint "Display namelist" > + > +if {[test_compiler_info {gcc-*}]} { > + gdb_test "ptype nml" "type =3D Type nml\r\n *$int :: a\r\n *$int :: = b\r\n *End Type nml" > + gdb_test "print nml" \\$\[0-9\]+ =3D \\( a =3D 10, b =3D 20=20 > +\\) The pattern should be wrapped onto the newline. Thanks, Andrew > +} else { > + gdb_test "ptype nml" "No symbol \"nml\" in current context\\." > + gdb_test "print nml" "No symbol \"nml\" in current context\\." > +} > diff --git a/gdb/testsuite/gdb.fortran/namelist.f90=20 > b/gdb/testsuite/gdb.fortran/namelist.f90 > new file mode 100644 > index 00000000000..00704eddf27 > --- /dev/null > +++ b/gdb/testsuite/gdb.fortran/namelist.f90 > @@ -0,0 +1,27 @@ > +! Copyright 2020-2021 Free Software Foundation, Inc. > +! > +! This program is free software; you can redistribute it and/or=20 > +modify ! it under the terms of the GNU General Public License as=20 > +published by ! the Free Software Foundation; either version 3 of the=20 > +License, or ! (at your option) any later version. > +! > +! This program is distributed in the hope that it will be useful, !=20 > +but WITHOUT ANY WARRANTY; without even the implied warranty of !=20 > +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU=20 > +General Public License for more details. > +! > +! You should have received a copy of the GNU General Public License !=20 > +along with this program. If not, see https://nam11.safelinks.protection= .outlook.com/?url=3Dhttp%3A%2F%2Fwww.gnu.org%2Flicenses%2F&data=3D04%7C= 01%7CBhuvanendra.KumarN%40amd.com%7Cf615fb689a504a4c006508d97c1ad0b5%7C3dd8= 961fe4884e608e11a82d994e183d%7C0%7C0%7C637677276883645649%7CUnknown%7CTWFpb= GZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7= C1000&sdata=3DQG%2FRj3ZZSfOdcgEEhs5GUDAwOK5RCeBiSJdPVN1DfsY%3D&rese= rved=3D0. > +! > +! This file is the Fortran source file for namelist.exp. > + > +program main > + > + integer :: a, b > + namelist /nml/ a, b > + > + a =3D 10 > + b =3D 20 > + Write(*,nml) ! Display namelist > + > +end program main > diff --git a/include/dwarf2.def b/include/dwarf2.def index=20 > 1ae6e1df298..6b8be1f6a16 100644 > --- a/include/dwarf2.def > +++ b/include/dwarf2.def > @@ -289,7 +289,7 @@ DW_AT (DW_AT_frame_base, 0x40) DW_AT=20 > (DW_AT_friend, 0x41) DW_AT (DW_AT_identifier_case, 0x42) DW_AT=20 > (DW_AT_macro_info, 0x43) -DW_AT (DW_AT_namelist_items, 0x44) > +DW_AT (DW_AT_namelist_item, 0x44) > DW_AT (DW_AT_priority, 0x45) > DW_AT (DW_AT_segment, 0x46) > DW_AT (DW_AT_specification, 0x47) > -- > 2.17.1 > > > --_002_MW2PR12MB4684AD2B80E4D588ED22921287A29MW2PR12MB4684namp_ Content-Type: application/octet-stream; name="0001-Fix-ptype-and-print-commands-for-namelist-variables-.patch" Content-Description: 0001-Fix-ptype-and-print-commands-for-namelist-variables-.patch Content-Disposition: attachment; filename="0001-Fix-ptype-and-print-commands-for-namelist-variables-.patch"; size=11669; creation-date="Wed, 22 Sep 2021 12:27:00 GMT"; modification-date="Wed, 22 Sep 2021 12:27:00 GMT" Content-Transfer-Encoding: base64 RnJvbSA1OTA1M2RhZjEwMThjM2U0YmNhZThjZDM0MmQ0NmIwMGY0ZjAzNjQ4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiA9P1VURi04P3E/PUUyPTgwPTlDYmhrdW1hcm49RTI9ODA9OUQ/ PSA8Qmh1dmFuZW5kcmEuS3VtYXJOQGFtZC5jb20+CkRhdGU6IFdlZCwgMjIgU2VwIDIwMjEgMTc6 NTI6MTUgKzA1MzAKU3ViamVjdDogW1BBVENIXSBGaXggcHR5cGUgYW5kIHByaW50IGNvbW1hbmRz IGZvciBuYW1lbGlzdCB2YXJpYWJsZXMoYSBmb3J0cmFuCiBmZWF0dXJlKS4KCkdDQy9nZm9ydHJh biBzdXBwb3J0IG5hbWVsaXN0KGEgZm9ydHJhbiBmZWF0dXJlKSwgaXQgZW1pdHMgRFdfVEFHX25h bWVsaXN0CmFuZCBEV19UQUdfbmFtZWxpc3RfaXRlbSBkaWVzLiBCdXQgZ2RiIGRvZXMgbm90IHBy b2Nlc3MgdGhlc2UgZGllcyBhbmQKc3VwcG9ydCBuYW1lbGlzdCB2YXJpYWJsZXMgZHVyaW5nIHBy aW50IGFuZCBwdHlwZSBjb21tYW5kcy4gV2hlbiB0cmllZCB0bwpwcmludCwgaXQgYmFpbHMgb3V0 IHdpdGggdGhlIGVycm9yIG1lc3NhZ2UgYXMgc2hvd24gYmVsb3cuCihnZGIpIHByaW50IG5tbApO byBzeW1ib2wgIm5tbCIgaW4gY3VycmVudCBjb250ZXh0LgpUaGlzIGNvbW1pdCBpcyB0byBtYWtl IHRoZSBwcmludCBhbmQgcHR5cGUgY29tbWFuZHMgd29yayBmb3IgbmFtZWxpc3QKdmFyaWFibGVz IGFuZCBpdHMgaXRlbXMuIFNhbXBsZSBvdXRwdXQgb2YgdGhlc2UgY29tbWFuZHMgaXMgc2hhcmVk IGJlbG93LAp3aXRoIGZpeGVkIGdkYi4KKGdkYikgcHR5cGUgbm1sCnR5cGUgPSBUeXBlIG5tbAog ICAgaW50ZWdlcihraW5kPTQpIDo6IGEKICAgIGludGVnZXIoa2luZD00KSA6OiBiCkVuZCBUeXBl IG5tbAooZ2RiKSBwcmludCBubWwKJDEgPSAoIGEgPSAxMCwgYiA9IDIwICkKLS0tCiBnZGIvQ2hh bmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICB8IDExICsrKysrKwogZ2RiL2R3YXJmMi9y ZWFkLmMgICAgICAgICAgICAgICAgICAgICAgfCA0NCArKysrKysrKysrKysrKysrKysrLS0tLQog Z2RiL2YtdmFscHJpbnQuYyAgICAgICAgICAgICAgICAgICAgICAgfCAxMCArKysrKysKIGdkYi9n ZGJ0eXBlcy5oICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDMgKy0KIGdkYi90ZXN0c3VpdGUv Q2hhbmdlTG9nICAgICAgICAgICAgICAgIHwgIDUgKysrCiBnZGIvdGVzdHN1aXRlL2dkYi5mb3J0 cmFuL25hbWVsaXN0LmV4cCB8IDQ5ICsrKysrKysrKysrKysrKysrKysrKysrKysrCiBnZGIvdGVz dHN1aXRlL2dkYi5mb3J0cmFuL25hbWVsaXN0LmY5MCB8IDI3ICsrKysrKysrKysrKysrCiBpbmNs dWRlL2R3YXJmMi5kZWYgICAgICAgICAgICAgICAgICAgICB8ICAyICstCiA4IGZpbGVzIGNoYW5n ZWQsIDE0MiBpbnNlcnRpb25zKCspLCA5IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0 IGdkYi90ZXN0c3VpdGUvZ2RiLmZvcnRyYW4vbmFtZWxpc3QuZXhwCiBjcmVhdGUgbW9kZSAxMDA2 NDQgZ2RiL3Rlc3RzdWl0ZS9nZGIuZm9ydHJhbi9uYW1lbGlzdC5mOTAKCmRpZmYgLS1naXQgYS9n ZGIvQ2hhbmdlTG9nIGIvZ2RiL0NoYW5nZUxvZwppbmRleCAzNmNiNGM5ZTdlOS4uZWMwMWMyOTU3 ZTkgMTAwNjQ0Ci0tLSBhL2dkYi9DaGFuZ2VMb2cKKysrIGIvZ2RiL0NoYW5nZUxvZwpAQCAtMSwz ICsxLDE0IEBACisyMDIxLTA4LTIzICBCaHV2YW5lbmRyYSBLdW1hciBOICA8Qmh1dmFuZW5kcmEu S3VtYXJOQGFtZC5jb20+CisKKwkqIGR3YXJmMi9yZWFkLmMgKHByb2Nlc3NfZGllKTogQWRkIG5l dyBjYXNlIGZvciBuYW1lbGlzdC4KKwkoZHdhcmYyX2FkZF9maWVsZCk6IFByb2Nlc3MgRFdfVEFH X25hbWVsaXN0X2l0ZW0gZGllLgorCShyZWFkX3N0cnVjdHVyZV90eXBlLCBoYW5kbGVfc3RydWN0 X21lbWJlcl9kaWUsIG5ld19zeW1ib2wpCisJKGR3YXJmMl9uYW1lKTogVXBkYXRlLgorCSogZi12 YWxwcmludC5jIChmX2xhbmd1YWdlOjp2YWx1ZV9wcmludF9pbm5lcik6IEFkZCBzdXBwb3J0IGZv cgorCXByaW50aW5nIG5hbWVsaXN0IGl0ZW1zLgorCSogaW5jbHVkZS9kd2FyZjIuZGVmOiAoRFdf QVRfbmFtZWxpc3RfaXRlbXMpOiBSZW5hbWVkIHRvIC4uLgorCShEV19BVF9uYW1lbGlzdF9pdGVt KTogLi4uIHRoaXMuIEFzIHBlciBkd2FyZiBzdGFuZGFyZC4KKwogMjAyMS0wNi0wOCAgTGFuY2Vs b3QgU2l4ICA8bHNpeEBsYW5jZWxvdHNpeC5jb20+CiAKIAkqIHB5dGhvbi9saWIvZ2RiL0ZyYW1l RGVjb3JhdG9yLnB5IChGcmFtZURlY29yYXRvcik6IFVzZSAnaXMgTm9uZScKZGlmZiAtLWdpdCBh L2dkYi9kd2FyZjIvcmVhZC5jIGIvZ2RiL2R3YXJmMi9yZWFkLmMKaW5kZXggOTYwMDlmMTQxOGYu Ljg4ZGIwNmVjOWU3IDEwMDY0NAotLS0gYS9nZGIvZHdhcmYyL3JlYWQuYworKysgYi9nZGIvZHdh cmYyL3JlYWQuYwpAQCAtOTU3MCw2ICs5NTcwLDcgQEAgcHJvY2Vzc19kaWUgKHN0cnVjdCBkaWVf aW5mbyAqZGllLCBzdHJ1Y3QgZHdhcmYyX2N1ICpjdSkKICAgICBjYXNlIERXX1RBR19pbnRlcmZh Y2VfdHlwZToKICAgICBjYXNlIERXX1RBR19zdHJ1Y3R1cmVfdHlwZToKICAgICBjYXNlIERXX1RB R191bmlvbl90eXBlOgorICAgIGNhc2UgRFdfVEFHX25hbWVsaXN0OgogICAgICAgcHJvY2Vzc19z dHJ1Y3R1cmVfc2NvcGUgKGRpZSwgY3UpOwogICAgICAgYnJlYWs7CiAgICAgY2FzZSBEV19UQUdf ZW51bWVyYXRpb25fdHlwZToKQEAgLTE0NDE3LDggKzE0NDE4LDIwIEBAIGR3YXJmMl9hZGRfZmll bGQgKHN0cnVjdCBmaWVsZF9pbmZvICpmaXAsIHN0cnVjdCBkaWVfaW5mbyAqZGllLAogCiAgIGZw ID0gJm5ld19maWVsZC0+ZmllbGQ7CiAKLSAgaWYgKGRpZS0+dGFnID09IERXX1RBR19tZW1iZXIg JiYgISBkaWVfaXNfZGVjbGFyYXRpb24gKGRpZSwgY3UpKQotICAgIHsKKyAgaWYgKChkaWUtPnRh ZyA9PSBEV19UQUdfbWVtYmVyIHx8IGRpZS0+dGFnID09IERXX1RBR19uYW1lbGlzdF9pdGVtKQor ICAgICAgICAgICAgJiYgISBkaWVfaXNfZGVjbGFyYXRpb24gKGRpZSwgY3UpKQorICAgIHsKKyAg ICAgIC8qIEZvciB0aGUgRFdfVEFHX25hbWVsaXN0X2l0ZW0gZGllLCB1c2UgdGhlIHJlZmVyZW5j ZWQgZGllLiAgKi8KKyAgICAgIGlmIChkaWUtPnRhZyA9PSBEV19UQUdfbmFtZWxpc3RfaXRlbSkK KyAgICAgICAgeworICAgICAgICAgIHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIxID0gZHdhcmYyX2F0 dHIgKGRpZSwgRFdfQVRfbmFtZWxpc3RfaXRlbSwgY3UpOworICAgICAgICAgIHN0cnVjdCBkaWVf aW5mbyAqaXRlbV9kaWUgPSBudWxscHRyOworICAgICAgICAgIHN0cnVjdCBkd2FyZjJfY3UgKml0 ZW1fY3UgPSBjdTsKKyAgICAgICAgICBpZiAoYXR0cjEtPmZvcm1faXNfcmVmICgpKQorICAgICAg ICAgICAgaXRlbV9kaWUgPSBmb2xsb3dfZGllX3JlZiAoZGllLCBhdHRyMSwgJml0ZW1fY3UpOwor ICAgICAgICAgIGlmIChpdGVtX2RpZSAhPSBudWxscHRyKQorICAgICAgICAgICAgZGllID0gaXRl bV9kaWU7CisgICAgICAgIH0KICAgICAgIC8qIERhdGEgbWVtYmVyIG90aGVyIHRoYW4gYSBDKysg c3RhdGljIGRhdGEgbWVtYmVyLiAgKi8KIAogICAgICAgLyogR2V0IHR5cGUgb2YgZmllbGQuICAq LwpAQCAtMTU0NDgsNyArMTU0NjEsMTAgQEAgcmVhZF9zdHJ1Y3R1cmVfdHlwZSAoc3RydWN0IGRp ZV9pbmZvICpkaWUsIHN0cnVjdCBkd2FyZjJfY3UgKmN1KQogICAgIH0KIAogICB0eXBlID0gYWxs b2NfdHlwZSAob2JqZmlsZSk7Ci0gIElOSVRfQ1BMVVNfU1BFQ0lGSUMgKHR5cGUpOworICBpZiAo ZGllLT50YWcgPT0gRFdfVEFHX25hbWVsaXN0KQorICAgIFRZUEVfU1BFQ0lGSUNfRklFTEQgKHR5 cGUpID0gVFlQRV9TUEVDSUZJQ19OQU1FTElTVDsKKyAgZWxzZQorICAgIElOSVRfQ1BMVVNfU1BF Q0lGSUMgKHR5cGUpOwogCiAgIG5hbWUgPSBkd2FyZjJfbmFtZSAoZGllLCBjdSk7CiAgIGlmIChu YW1lICE9IE5VTEwpCkBAIC0xNTY4NCw3ICsxNTcwMCw4IEBAIGhhbmRsZV9zdHJ1Y3RfbWVtYmVy X2RpZSAoc3RydWN0IGRpZV9pbmZvICpjaGlsZF9kaWUsIHN0cnVjdCB0eXBlICp0eXBlLAogCQkJ ICBzdHJ1Y3QgZHdhcmYyX2N1ICpjdSkKIHsKICAgaWYgKGNoaWxkX2RpZS0+dGFnID09IERXX1RB R19tZW1iZXIKLSAgICAgIHx8IGNoaWxkX2RpZS0+dGFnID09IERXX1RBR192YXJpYWJsZSkKKyAg ICAgIHx8IGNoaWxkX2RpZS0+dGFnID09IERXX1RBR192YXJpYWJsZQorICAgICAgfHwgY2hpbGRf ZGllLT50YWcgPT0gRFdfVEFHX25hbWVsaXN0X2l0ZW0pCiAgICAgewogICAgICAgLyogTk9URTog Y2FybHRvbi8yMDAyLTExLTA1OiBBIEMrKyBzdGF0aWMgZGF0YSBtZW1iZXIKIAkgc2hvdWxkIGJl IGEgRFdfVEFHX21lbWJlciB0aGF0IGlzIGEgZGVjbGFyYXRpb24sIGJ1dApAQCAtMTU3MjgsNyAr MTU3NDUsOSBAQCBoYW5kbGVfc3RydWN0X21lbWJlcl9kaWUgKHN0cnVjdCBkaWVfaW5mbyAqY2hp bGRfZGllLCBzdHJ1Y3QgdHlwZSAqdHlwZSwKIH0KIAogLyogRmluaXNoIGNyZWF0aW5nIGEgc3Ry dWN0dXJlIG9yIHVuaW9uIHR5cGUsIGluY2x1ZGluZyBmaWxsaW5nIGluCi0gICBpdHMgbWVtYmVy cyBhbmQgY3JlYXRpbmcgYSBzeW1ib2wgZm9yIGl0LiAgKi8KKyAgIGl0cyBtZW1iZXJzIGFuZCBj cmVhdGluZyBhIHN5bWJvbCBmb3IgaXQuIFRoaXMgZnVuY3Rpb24gYWxzbworICAgaGFuZGxlcyBG b3J0cmFuIG5hbWVsaXN0IHZhcmlhYmxlLCBpdHMgaXRlbXMgb3IgbWVtYmVycyBhbmQKKyAgIGNy ZWF0aW5nIGEgc3ltYm9sIGZvciBpdC4gICovCiAKIHN0YXRpYyB2b2lkCiBwcm9jZXNzX3N0cnVj dHVyZV9zY29wZSAoc3RydWN0IGRpZV9pbmZvICpkaWUsIHN0cnVjdCBkd2FyZjJfY3UgKmN1KQpA QCAtMjE4MDcsOCArMjE4MjYsMTcgQEAgbmV3X3N5bWJvbCAoc3RydWN0IGRpZV9pbmZvICpkaWUs IHN0cnVjdCB0eXBlICp0eXBlLCBzdHJ1Y3QgZHdhcmYyX2N1ICpjdSwKIAljYXNlIERXX1RBR191 bmlvbl90eXBlOgogCWNhc2UgRFdfVEFHX3NldF90eXBlOgogCWNhc2UgRFdfVEFHX2VudW1lcmF0 aW9uX3R5cGU6Ci0JICBTWU1CT0xfQUNMQVNTX0lOREVYIChzeW0pID0gTE9DX1RZUEVERUY7Ci0J ICBTWU1CT0xfRE9NQUlOIChzeW0pID0gU1RSVUNUX0RPTUFJTjsKKwljYXNlIERXX1RBR19uYW1l bGlzdDoKKwkgIGlmIChkaWUtPnRhZyA9PSBEV19UQUdfbmFtZWxpc3QpCisgICAgICAgICAgICB7 CisJICAgICAgU1lNQk9MX0FDTEFTU19JTkRFWCAoc3ltKSA9IExPQ19TVEFUSUM7CisJICAgICAg U1lNQk9MX0RPTUFJTiAoc3ltKSA9IFZBUl9ET01BSU47CisgICAgICAgICAgICB9CisJICBlbHNl CisgICAgICAgICAgICB7CisJICAgICAgU1lNQk9MX0FDTEFTU19JTkRFWCAoc3ltKSA9IExPQ19U WVBFREVGOworCSAgICAgIFNZTUJPTF9ET01BSU4gKHN5bSkgPSBTVFJVQ1RfRE9NQUlOOworICAg ICAgICAgICAgfQogCiAJICB7CiAJICAgIC8qIE5PVEU6IGNhcmx0b24vMjAwMy0xMS0xMDogQysr IGNsYXNzIHN5bWJvbHMgc2hvdWxkbid0CkBAIC0yMjc0NCw2ICsyMjc3Miw3IEBAIGR3YXJmMl9u YW1lIChzdHJ1Y3QgZGllX2luZm8gKmRpZSwgc3RydWN0IGR3YXJmMl9jdSAqY3UpCiAgICAgICAm JiBkaWUtPnRhZyAhPSBEV19UQUdfY2xhc3NfdHlwZQogICAgICAgJiYgZGllLT50YWcgIT0gRFdf VEFHX2ludGVyZmFjZV90eXBlCiAgICAgICAmJiBkaWUtPnRhZyAhPSBEV19UQUdfc3RydWN0dXJl X3R5cGUKKyAgICAgICYmIGRpZS0+dGFnICE9IERXX1RBR19uYW1lbGlzdAogICAgICAgJiYgZGll LT50YWcgIT0gRFdfVEFHX3VuaW9uX3R5cGUpCiAgICAgcmV0dXJuIE5VTEw7CiAKQEAgLTIyNzY4 LDYgKzIyNzk3LDcgQEAgZHdhcmYyX25hbWUgKHN0cnVjdCBkaWVfaW5mbyAqZGllLCBzdHJ1Y3Qg ZHdhcmYyX2N1ICpjdSkKICAgICBjYXNlIERXX1RBR19pbnRlcmZhY2VfdHlwZToKICAgICBjYXNl IERXX1RBR19zdHJ1Y3R1cmVfdHlwZToKICAgICBjYXNlIERXX1RBR191bmlvbl90eXBlOgorICAg IGNhc2UgRFdfVEFHX25hbWVsaXN0OgogICAgICAgLyogU29tZSBHQ0MgdmVyc2lvbnMgZW1pdCBz cHVyaW91cyBEV19BVF9uYW1lIGF0dHJpYnV0ZXMgZm9yIHVubmFtZWQKIAkgc3RydWN0dXJlcyBv ciB1bmlvbnMuICBUaGVzZSB3ZXJlIG9mIHRoZSBmb3JtICIuXyVkIiBpbiBHQ0MgNC4xLAogCSBv ciBzaW1wbHkgIjxhbm9ueW1vdXMgc3RydWN0PiIgb3IgIjxhbm9ueW1vdXMgdW5pb24+IiBpbiBH Q0MgNC4zCmRpZmYgLS1naXQgYS9nZGIvZi12YWxwcmludC5jIGIvZ2RiL2YtdmFscHJpbnQuYwpp bmRleCAyNDBkYWFmMzRmOS4uYWE4NmZiYzkwMWUgMTAwNjQ0Ci0tLSBhL2dkYi9mLXZhbHByaW50 LmMKKysrIGIvZ2RiL2YtdmFscHJpbnQuYwpAQCAtMzIwLDYgKzMyMCwxNiBAQCBmX2xhbmd1YWdl Ojp2YWx1ZV9wcmludF9pbm5lciAoc3RydWN0IHZhbHVlICp2YWwsIHN0cnVjdCB1aV9maWxlICpz dHJlYW0sCiAJCSAgZnB1dHNfZmlsdGVyZWQgKCIgPSAiLCBzdHJlYW0pOwogCQl9CiAKKwkgICAg ICAvKiBXaGlsZSBwcmludGluZyBuYW1lbGlzdCBpdGVtcywgZmV0Y2ggdGhlIGFwcHJvcHJpYXRl IHZhbHVlCisJICAgICAgICAgZmllbGQgYmVmb3JlIHByaW50aW5nIGl0cyB2YWx1ZS4gICovCisJ ICAgICAgaWYgKFRZUEVfU1BFQ0lGSUNfRklFTEQgKHR5cGUpID09IFRZUEVfU1BFQ0lGSUNfTkFN RUxJU1QpCisJICAgICAgICB7CisJICAgICAgICAgIHN0cnVjdCBibG9ja19zeW1ib2wgc3ltbmkg PSBsb29rdXBfc3ltYm9sIChmaWVsZF9uYW1lLAorCQkJZ2V0X3NlbGVjdGVkX2Jsb2NrICgwKSwg VkFSX0RPTUFJTiwgbnVsbHB0cik7CisJICAgICAgICAgIGlmIChzeW1uaS5zeW1ib2wgIT0gbnVs bHB0cikKKwkgICAgICAgICAgICBmaWVsZCA9IHZhbHVlX29mX3ZhcmlhYmxlIChzeW1uaS5zeW1i b2wsIHN5bW5pLmJsb2NrKTsKKwkgICAgICAgIH0KKwogCSAgICAgIGNvbW1vbl92YWxfcHJpbnQg KGZpZWxkLCBzdHJlYW0sIHJlY3Vyc2UgKyAxLAogCQkJCW9wdGlvbnMsIGN1cnJlbnRfbGFuZ3Vh Z2UpOwogCmRpZmYgLS1naXQgYS9nZGIvZ2RidHlwZXMuaCBiL2dkYi9nZGJ0eXBlcy5oCmluZGV4 IDBjYzAwZTc0YTIwLi4xMjQyODJjM2Q1MyAxMDA2NDQKLS0tIGEvZ2RiL2dkYnR5cGVzLmgKKysr IGIvZ2RiL2dkYnR5cGVzLmgKQEAgLTYwNyw2ICs2MDcsNyBAQCBlbnVtIHR5cGVfc3BlY2lmaWNf a2luZAogICBUWVBFX1NQRUNJRklDX1NFTEZfVFlQRSwKICAgVFlQRV9TUEVDSUZJQ19JTlQsCiAg IFRZUEVfU1BFQ0lGSUNfRklYRURfUE9JTlQsCisgIFRZUEVfU1BFQ0lGSUNfTkFNRUxJU1QsCiB9 OwogCiB1bmlvbiB0eXBlX293bmVyCkBAIC04MzMsNyArODM0LDcgQEAgc3RydWN0IG1haW5fdHlw ZQogICAvKiAqIEEgZGlzY3JpbWluYW50IHRlbGxpbmcgdXMgd2hpY2ggZmllbGQgb2YgdGhlIHR5 cGVfc3BlY2lmaWMKICAgICAgdW5pb24gaXMgYmVpbmcgdXNlZCBmb3IgdGhpcyB0eXBlLCBpZiBh bnkuICAqLwogCi0gIEVOVU1fQklURklFTEQodHlwZV9zcGVjaWZpY19raW5kKSB0eXBlX3NwZWNp ZmljX2ZpZWxkIDogMzsKKyAgRU5VTV9CSVRGSUVMRCh0eXBlX3NwZWNpZmljX2tpbmQpIHR5cGVf c3BlY2lmaWNfZmllbGQgOiA0OwogCiAgIC8qICogTnVtYmVyIG9mIGZpZWxkcyBkZXNjcmliZWQg Zm9yIHRoaXMgdHlwZS4gIFRoaXMgZmllbGQgYXBwZWFycwogICAgICBhdCB0aGlzIGxvY2F0aW9u IGJlY2F1c2UgaXQgcGFja3MgbmljZWx5IGhlcmUuICAqLwpkaWZmIC0tZ2l0IGEvZ2RiL3Rlc3Rz dWl0ZS9DaGFuZ2VMb2cgYi9nZGIvdGVzdHN1aXRlL0NoYW5nZUxvZwppbmRleCA4N2NmM2UyYTA2 MS4uMzNmNjBjMjliM2MgMTAwNjQ0Ci0tLSBhL2dkYi90ZXN0c3VpdGUvQ2hhbmdlTG9nCisrKyBi L2dkYi90ZXN0c3VpdGUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsOCBAQAorMjAyMS0wNy0yNiAgQmh1 dmFuZW5kcmEgS3VtYXIgTiAgPEJodXZhbmVuZHJhLkt1bWFyTkBhbWQuY29tPgorCisJKiBnZGIu Zm9ydHJhbi9uYW1lbGlzdC5leHA6IE5ldyBmaWxlLgorCSogZ2RiLmZvcnRyYW4vbmFtZWxpc3Qu ZjkwOiBOZXcgZmlsZS4KKwogMjAyMS0wNi0xMCAgQmh1dmFuZW5kcmEgS3VtYXIgTiAgPEJodXZh bmVuZHJhLkt1bWFyTkBhbWQuY29tPgogCiAJKiBnZGIuZm9ydHJhbi9wdHlwZS1vbi1mdW5jdGlv bnMuZXhwOiBBZGQgdHlwZSBpbmZvIG9mIGZvcm1hbApkaWZmIC0tZ2l0IGEvZ2RiL3Rlc3RzdWl0 ZS9nZGIuZm9ydHJhbi9uYW1lbGlzdC5leHAgYi9nZGIvdGVzdHN1aXRlL2dkYi5mb3J0cmFuL25h bWVsaXN0LmV4cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uOTA3NjI5 Mjg0NTUKLS0tIC9kZXYvbnVsbAorKysgYi9nZGIvdGVzdHN1aXRlL2dkYi5mb3J0cmFuL25hbWVs aXN0LmV4cApAQCAtMCwwICsxLDQ5IEBACisjIENvcHlyaWdodCAoQykgMjAyMSBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsg eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVy bXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0 aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNl bnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlz IHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1 bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg d2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y ZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElm IG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworIyBUaGlzIGZpbGUg aXMgcGFydCBvZiB0aGUgZ2RiIHRlc3RzdWl0ZS4gIEl0IGNvbnRhaW5zIHRlc3RzIGZvciBmb3J0 cmFuCisjIG5hbWVsaXN0LgorCitpZiB7IFtza2lwX2ZvcnRyYW5fdGVzdHNdIH0geyByZXR1cm4g LTEgfQorCitzdGFuZGFyZF90ZXN0ZmlsZSAuZjkwCitsb2FkX2xpYiAiZm9ydHJhbi5leHAiCisK K2lmIHtbcHJlcGFyZV9mb3JfdGVzdGluZyAiZmFpbGVkIHRvIHByZXBhcmUiICR0ZXN0ZmlsZSAk c3JjZmlsZSB7ZGVidWcgZjkwfV19IHsKKyAgICByZXR1cm4gLTEKK30KKworaWYgIVtmb3J0cmFu X3J1bnRvX21haW5dIHRoZW4geworICAgIHBlcnJvciAiY291bGRuJ3QgcnVuIHRvIG1haW4iCisg ICAgY29udGludWUKK30KKworIyBEZXBlbmRpbmcgb24gdGhlIGNvbXBpbGVyIGJlaW5nIHVzZWQs IHRoZSB0eXBlIG5hbWVzIGNhbiBiZSBwcmludGVkIGRpZmZlcmVudGx5Lgorc2V0IGludCBbZm9y dHJhbl9pbnQ0XQorCitnZGJfYnJlYWtwb2ludCBbZ2RiX2dldF9saW5lX251bWJlciAiRGlzcGxh eSBuYW1lbGlzdCJdCitnZGJfY29udGludWVfdG9fYnJlYWtwb2ludCAiRGlzcGxheSBuYW1lbGlz dCIKKworaWYge1t0ZXN0X2NvbXBpbGVyX2luZm8ge2djYy0qfV19IHsKKyAgICBnZGJfdGVzdCAi cHR5cGUgbm1sIiBcCisgICAgICAgICJ0eXBlID0gVHlwZSBubWxcclxuICokaW50IDo6IGFcclxu ICokaW50IDo6IGJcclxuICpFbmQgVHlwZSBubWwiCisgICAgZ2RiX3Rlc3QgInByaW50IG5tbCIg XAorICAgICAgICAiXFwkXFswLTlcXSsgPSBcXCggYSA9IDEwLCBiID0gMjAgXFwpIgorfSBlbHNl IHsKKyAgICBnZGJfdGVzdCAicHR5cGUgbm1sIiBcCisgICAgICAgICJObyBzeW1ib2wgXCJubWxc IiBpbiBjdXJyZW50IGNvbnRleHRcXC4iCisgICAgZ2RiX3Rlc3QgInByaW50IG5tbCIgXAorICAg ICAgICAiTm8gc3ltYm9sIFwibm1sXCIgaW4gY3VycmVudCBjb250ZXh0XFwuIgorfQpkaWZmIC0t Z2l0IGEvZ2RiL3Rlc3RzdWl0ZS9nZGIuZm9ydHJhbi9uYW1lbGlzdC5mOTAgYi9nZGIvdGVzdHN1 aXRlL2dkYi5mb3J0cmFuL25hbWVsaXN0LmY5MApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwMC4uZmIzNjY5MGQ3NjUKLS0tIC9kZXYvbnVsbAorKysgYi9nZGIvdGVzdHN1aXRl L2dkYi5mb3J0cmFuL25hbWVsaXN0LmY5MApAQCAtMCwwICsxLDI3IEBACishIENvcHlyaWdodCAo QykgMjAyMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyEKKyEgVGhpcyBwcm9ncmFt IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkK KyEgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBh cyBwdWJsaXNoZWQgYnkKKyEgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZl cnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyEgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg dmVyc2lvbi4KKyEKKyEgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo YXQgaXQgd2lsbCBiZSB1c2VmdWwsCishIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91 dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCishIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyEgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyEKKyEgWW91IHNob3VsZCBoYXZlIHJlY2Vp dmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyEgYWxvbmcgd2l0 aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2Vz Lz4uCishCishIFRoaXMgZmlsZSBpcyB0aGUgRm9ydHJhbiBzb3VyY2UgZmlsZSBmb3IgbmFtZWxp c3QuZXhwLgorCitwcm9ncmFtIG1haW4KKworICBpbnRlZ2VyIDo6IGEsIGIKKyAgbmFtZWxpc3Qg L25tbC8gYSwgYgorCisgIGEgPSAxMAorICBiID0gMjAKKyAgV3JpdGUoKixubWwpICEgRGlzcGxh eSBuYW1lbGlzdAorCitlbmQgcHJvZ3JhbSBtYWluCmRpZmYgLS1naXQgYS9pbmNsdWRlL2R3YXJm Mi5kZWYgYi9pbmNsdWRlL2R3YXJmMi5kZWYKaW5kZXggMWFlNmUxZGYyOTguLjZiOGJlMWY2YTE2 IDEwMDY0NAotLS0gYS9pbmNsdWRlL2R3YXJmMi5kZWYKKysrIGIvaW5jbHVkZS9kd2FyZjIuZGVm CkBAIC0yODksNyArMjg5LDcgQEAgRFdfQVQgKERXX0FUX2ZyYW1lX2Jhc2UsIDB4NDApCiBEV19B VCAoRFdfQVRfZnJpZW5kLCAweDQxKQogRFdfQVQgKERXX0FUX2lkZW50aWZpZXJfY2FzZSwgMHg0 MikKIERXX0FUIChEV19BVF9tYWNyb19pbmZvLCAweDQzKQotRFdfQVQgKERXX0FUX25hbWVsaXN0 X2l0ZW1zLCAweDQ0KQorRFdfQVQgKERXX0FUX25hbWVsaXN0X2l0ZW0sIDB4NDQpCiBEV19BVCAo RFdfQVRfcHJpb3JpdHksIDB4NDUpCiBEV19BVCAoRFdfQVRfc2VnbWVudCwgMHg0NikKIERXX0FU IChEV19BVF9zcGVjaWZpY2F0aW9uLCAweDQ3KQotLSAKMi4xNy4xCgo= --_002_MW2PR12MB4684AD2B80E4D588ED22921287A29MW2PR12MB4684namp_--