From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from NAM02-SN1-obe.outbound.protection.outlook.com (mail-sn1anam02on2044.outbound.protection.outlook.com [40.107.96.44]) by sourceware.org (Postfix) with ESMTPS id 679203858D3C for ; Fri, 19 Nov 2021 14:09:11 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 679203858D3C ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=mM8s3IL/I4IK4SWmxWYYJ0wsjNN6I/1npG/FykSoC7xo7RZvfhA1eHdBV9W3SK90nlW2zY+x3NKxwRLgmgyO0mCJCyPnDN5uSSJI9dva7vScDeeHJ41MJFc24kIJp4wb0SB1x6O2rIzEVQ5S4pJjoQhQj9KpOrLb/7Z1zU5V9solpep3yfDLcppOMHcm2kPrkj6TLiQSVsT4n64imsX48+iixqh+1e/QsdkQppql2C9qA7YtLjh9ZFza2iuNG9sPfeg+wRw81/GgbniK6pBwTn6XY67XRbxFDm/0LWdne7bFAJGRwYe9FYVgm+vhit8dW4KGuFDcQ5J4INkKZ8KYvg== 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:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=xudlUsYbvp4oKNeb72SZJ0yzmC4wrYqURlyEcxu3bxg=; b=C3iB24Cofvo1MHkCb9lYD1PedZwjFYVUHuaKLFLgcTDHHN7K5XnErKE3ndZDtlqD29TXMz3sa/5L5KPI9yYEJzSit2T/UY6AxN9d7NbqCzSN0mIlgkXb0+GvNUMCxtP9SyCjbwH8BfnYkNzj0z4jpEZjUoNBKIyt3pGeDBTwAjpL4UWNRN0QMREL3JTxs9N7FlDlEC9XCaODVfMyEd1pwMf9eVi99fP0Bm7/PKJXhDfVGahjP24XGSh1TFitYJ2OeLS6HAyAEPkoNN1XBm6EL1McWA/WN/9U2KY78z7gd89+rjw5KVTR9tlaJiQVe6uXCRbjgt+jzER7vEHdJu8jiw== 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 MWHPR12MB1167.namprd12.prod.outlook.com (2603:10b6:300:8::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4713.22; Fri, 19 Nov 2021 14:09:07 +0000 Received: from MW2PR12MB4684.namprd12.prod.outlook.com ([fe80::604e:c4ba:b448:1b40]) by MW2PR12MB4684.namprd12.prod.outlook.com ([fe80::604e:c4ba:b448:1b40%5]) with mapi id 15.20.4690.027; Fri, 19 Nov 2021 14:09:07 +0000 From: "Kumar N, Bhuvanendra" To: "aburgess@redhat.com" CC: "gdb-patches@sourceware.org" , "George, Jini Susan" , "Achra, Nitika" , "Sharma, Alok Kumar" , "E, Nagajyothi" , "Joseph, Ancel" Subject: FW: [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/AACxzmqgAA84QAgCGPfWdA= Date: Fri, 19 Nov 2021 14:09:06 +0000 Message-ID: References: <20210920094122.GB4950@embecosm.com> <20211006155135.GS1900093@embecosm.com> In-Reply-To: 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-11-19T14:08:49Z; 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=c0026e34-6ff2-478e-a015-c2e154137452; MSIP_Label_88914ebd-7e6c-4e12-a031-a9906be2db14_ContentBits=1 x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 2a0befe0-f56a-437d-265e-08d9ab6626a0 x-ms-traffictypediagnostic: MWHPR12MB1167: x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:144; x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: heWm87OyA7lgqO26e86m96feWdOadf2x4TytWmjPdWJVTfe8onSPX2Cm4eiO/Ijca4ksCnLmj/ZH7MC8+H3eAupiuD2jnsHudnnLMIZzcS+geMMi7ghhLrjcZrWMpz3VshEOIKa0oEp1B1gaMN6Qqmq9O1JotsfEJjufPDtSJebV8Vc8Q7xAhDaxqoDRoK/xmY9pvx6PLzAwyVzxf1qda+1rTQea4e3f2zX+VG510ut6+9d+3DO5+b+n3VGt7a8XY3eq32htI4zI0M+Gg8oli9udekqAhVzt3PeI5szl++Uyo0poo6atyCRFMfGHReDQXGzCYHrRE7FQEKEWXcYHVu8/JF/ncnfqiFSTWhO+/0HEgR4iOJ7vF2xv3c98VjEbnPxhRqUIfpMJv11fJtSiXEjsfOBWSroqtPbPQPKiapD8D/clMOPr8WWawx/Iw1CS34LIJokupK4pxKskQ106HUQ1kqHF82K+/+gSBnAKZtDtDx0vGBjQxpJeewJKcEgk/L4g1wWsOhDKVlkKCtaE9K3Lsvco7Dpw3FGXik513W8n+BEt+HH3L7IORYGI2gYrO/1IcdjmIxCTPwA9f0UBciQnz6XPy48PODQq5o+bUt6YxCcT7RfDlNFtAfLk1nDkDD8qgHGogD5qUJzZq21Z1R7xYjuzkq7pfs0+PFT6KsAiZBz9/3ToiCJW7y7bX+EQcx68G65YrEujvHDEgwbIH6ua52fkyvrcGvQ+T4ji3s1C97tJYzmjJxwtfT95VjkMzJjf5RcRFZwjqpTAvZ9G5p980w7yFfaXPpPGdbQ371SfBL/egad29K021uHwGzGkuJmjQuVrq6DkkQg7N7IuVzsQFdVChS4kxEfcgIaakj8= 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)(84970400001)(83380400001)(45080400002)(122000001)(6916009)(55016002)(38100700002)(30864003)(66946007)(55236004)(316002)(76116006)(9686003)(53546011)(6506007)(52536014)(99936003)(8676002)(86362001)(2906002)(186003)(38070700005)(33656002)(5660300002)(7696005)(4326008)(66556008)(54906003)(64756008)(66446008)(8936002)(26005)(508600001)(966005)(71200400001)(66476007)(2004002)(579004)(559001); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?ApHUwPGXOUX1c5o9tM8aSL6DAUZroU6NL2XctdA5fAKF4P64en4fg/tiQwR+?= =?us-ascii?Q?c/lK9X4b4sVVM0kbxJOjNbDEAXYfYA2vuU7k5x7La6cWGzf3/Dlq5hbcDln4?= =?us-ascii?Q?+iGRMGhHZxpL6VT4K5c3uGQUM8W0nOFfA3kuR4gCA5rtQ9fsobkM0PqnYxBs?= =?us-ascii?Q?TiK+JoZk33P7uXFc4xU5CxqiP6PVaeijIUeAfl94q+8ZjtJLNHaviDYUtxmj?= =?us-ascii?Q?pwc403MrEDXGjirkpb4geAhrFTk63JJ+bYM9W9OnRHLg6qCSYXIIM0e3JYr8?= =?us-ascii?Q?G2xO6W3kfDfVM6GtMEYMiFYcXG49YZ9399OmDeu6Xuffm+Rprn/fnpTXTbTK?= =?us-ascii?Q?W4+RdAnXwQZpU5wEfL9AUI1o/FoH46W0WvyH14Wvffbj1moD59zOI13JdUTk?= =?us-ascii?Q?wgCsFoY81CPBalTXZCRQkZTw7ZQFSCSZcORjtDMsqdezrui/j5OeFz6GsAZo?= =?us-ascii?Q?xDEKSD5nbaaeMoelCmREovMcCxTANkjdmnBPRQjk4R10kuBy5pf3dzlEqiQc?= =?us-ascii?Q?Q0Blv40W3+llBJJLcxi6+0DMkfqbhBqGzNWiU9e2fCA6Jz32urUW6Sh8vzAH?= =?us-ascii?Q?JLXxaxRE+OkOEm0PW1Q2ZmAoPU446l4GEmT1QkaMvHd35C1OD69yzEByO1qQ?= =?us-ascii?Q?7zmKC3mfiLuKCM5Dhryd9HM5QjIp5RjGL1MAdb24KDQDBePZuxRHJM5zAKTc?= =?us-ascii?Q?E5Rsk8UNEUsmTcCwfQpJb6+29h/tG6k9noVlW0fe07oYzbYsRW3Fmrr2em6N?= =?us-ascii?Q?Rq4U6E+G0G1/iush3UkZamzZkehIVSQACpZfTetwSestQlItM2HJLUgLOWzS?= =?us-ascii?Q?CM+vfxsDZPMNL5bsQl+QX4HPNaLzX46CvOxDJiu4xaaqeiodDzvb3OnzHz6v?= =?us-ascii?Q?BvWsVhlumEZ30E0ET7mihmxVzIZNVyVfR3aZGaPkarYI7SYF4rekJZD6S82v?= =?us-ascii?Q?0GI24E1c3T/6euqYgCQ4IqwhzAQ1t0+GZ5NOt3E2pGOa2GJ0PM/LLa68TcBz?= =?us-ascii?Q?63rjRU17hgeoBVWtbYwUdVlgsVvZzaWx8N500AjibIN2LpeyuHCT522W9Trd?= =?us-ascii?Q?ea5+qFq+mMFz8M4OjRkRFgR3zJtB/sysnKFPw0sLlfbLeSRD7WakA8THsYKn?= =?us-ascii?Q?cQUZR4A3yUfAxguiTUZFYyR6pKLRujGpY4Hw9PS4EZJ4dkpKBW9tjiv6JGa6?= =?us-ascii?Q?ud4T15yo+YifCzAuZ1ib32oUc1XTt1v98HgOVpezM694QFHHdJvhTmqR9l5M?= =?us-ascii?Q?KlteOrc+xnbABfhdfkUMEi2WvOj+oHIPsQq+5G9nrLQQUiNMTSHJ6RXyQAg5?= =?us-ascii?Q?MO2fOK1Pk0ACv99oLwFx6MEqq3MACZAKQG4YqIoPya6SvWX7S6APT/Jp9909?= =?us-ascii?Q?g9Zt4Pt3kdrbvqsIXKBBnKzJZjOxZbUCcZm2tvcJgv/ibvbbbVi4Xogwzl6w?= =?us-ascii?Q?Pn8oaXIY4gCseEXpoGtsLGh6/2plEroWxTAVBs4GS0/FrCn8N6YYXtoilt1t?= =?us-ascii?Q?SrKH/bsHRhOg/k3Ou1T7mmcFJ5MHWvOT+U1sJqGx0wU+NxX/hFV3VsAgNW7b?= =?us-ascii?Q?QtG/QTo8B7H6ehtd93V3NJeDYgqeiGLKeVq3/0ebN5gYICJFEHDEpAS4KTUK?= =?us-ascii?Q?/UB0etGYCYS3Y1SNlBGTM48=3D?= Content-Type: multipart/mixed; boundary="_002_MW2PR12MB46842E19E0C007626FE4AF15879C9MW2PR12MB4684namp_" 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: 2a0befe0-f56a-437d-265e-08d9ab6626a0 X-MS-Exchange-CrossTenant-originalarrivaltime: 19 Nov 2021 14:09:07.0120 (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: eM8Ur6V1FJBVAsFj8jxEAEd2UYCpAXXJvWv1k6KCsOfgAv3jrSUrX3scyY77THdbOX02fMEy/qQAC1sffAhBtQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MWHPR12MB1167 X-Spam-Status: No, score=-11.6 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: Fri, 19 Nov 2021 14:09:17 -0000 --_002_MW2PR12MB46842E19E0C007626FE4AF15879C9MW2PR12MB4684namp_ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable [AMD Official Use Only] Hi Andrew, Thanks again for the review. Could you please use this revised patch for th= e review, thanks I am resending the revised patch now and details are shared just below in t= his email chain. I am getting the proper outputs with "info local" as shown below. Regards, bhuvan (gdb) i local a =3D 10 b =3D 20 nml =3D ( a =3D 10, b =3D 20 ) (gdb) pt nml type =3D Type nml integer :: a integer :: b End Type nml (gdb) whatis nml type =3D Type nml -----Original Message----- From: Kumar N, Bhuvanendra=20 Sent: Friday, October 8, 2021 2:35 AM 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) [AMD Official Use Only] Hi Andrew, Thanks again for your review comments. I have now introduced a new type(TYP= E_CODE_NAMELIST) for namelist type as you suggested, could you please revie= w the revised changes. Updated patch is attached and also inlined with this= email. There are no regressions found during testing. thanks, bhuvan PATCH inlined: >From 89b7f847042ccea44633f714db07400fa6dd3617 Mon Sep 17 00:00:00 2001 From: =3D?UTF-8?q?=3DE2=3D80=3D9Cbhkumarn=3DE2=3D80=3D9D?=3D Date: Fri, 8 Oct 2021 02:01:18 +0530 Subject: [PATCH] gdb/fortran: Fix ptype and print commands for namelist va= riables. 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 supp= ort 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 varia= bles and its items. Sample output of these commands is shared below, with f= ixed 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/dwarf2/read.c | 43 ++++++++++++++++++---- gdb/f-typeprint.c | 6 +++- gdb/f-valprint.c | 11 ++++++ gdb/gdbtypes.h | 2 ++ gdb/testsuite/gdb.fortran/namelist.exp | 49 ++++++++++++++++++++++++++ gdb/testsuite/gdb.fortran/namelist.f90 | 27 ++++++++++++++ include/dwarf2.def | 2 +- 7 files changed, 132 insertions(+), 8 deletions(-) create mode 100644 gdb= /testsuite/gdb.fortran/namelist.exp create mode 100644 gdb/testsuite/gdb.fortran/namelist.f90 diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c index cbd9a3012eb..e6cd8= ed48f0 100644 --- a/gdb/dwarf2/read.c +++ b/gdb/dwarf2/read.c @@ -9705,6 +9705,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: @@ -14562,8 +14563,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. */ @@ -15621,6 +15634,10 @@ read_structure_type (struct die_info *die, struct = dwarf2_cu *cu) { type->set_code (TYPE_CODE_UNION); } + else if (die->tag =3D=3D DW_TAG_namelist) + { + type->set_code (TYPE_CODE_NAMELIST); + } else { type->set_code (TYPE_CODE_STRUCT); @@ -15823,7 +15840,8 @@ handle_st= ruct_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 @@ -15867,7 +15885,= 9 @@ handle_struct_member_die (struct die_info *child_die, struct type *typ= e, } =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) @@ -2= 1971,8 +21991,17 @@ new_symbol (struct die_info *die, struct type *type, st= ruct 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 @@ -22909,6 = +22938,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 @@ -22933,6 +22963,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-typeprint.c b/gdb/f-typeprint.c index 1791cb29451..5b34622dacb = 100644 --- a/gdb/f-typeprint.c +++ b/gdb/f-typeprint.c @@ -121,6 +121,7 @@ f_language::f_type_print_varspec_prefix (struct type *t= ype, case TYPE_CODE_UNDEF: case TYPE_CODE_STRUCT: case TYPE_CODE_UNION: + case TYPE_CODE_NAMELIST: case TYPE_CODE_ENUM: case TYPE_CODE_INT: case TYPE_CODE_FLT: @@ -261,6 +262,7 @@ f_language::f_type_print_varspec_suffix (struct type *t= ype, case TYPE_CODE_UNDEF: case TYPE_CODE_STRUCT: case TYPE_CODE_UNION: + case TYPE_CODE_NAMELIST: case TYPE_CODE_ENUM: case TYPE_CODE_INT: case TYPE_CODE_FLT: @@ -305,7 +307,8 @@ f_language::f_type_print_base (struct type *type, struc= t ui_file *stream, const char *prefix =3D ""; if (type->code () =3D=3D TYPE_CODE_UNION) prefix =3D "Type, C_Union :: "; - else if (type->code () =3D=3D TYPE_CODE_STRUCT) + else if (type->code () =3D=3D TYPE_CODE_STRUCT + || type->code () =3D=3D TYPE_CODE_NAMELIST) prefix =3D "Type "; fprintf_filtered (stream, "%*s%s%s", level, "", prefix, type->name (= )); return; @@ -391,6 +394,7 @@ f_language::f_type_print_base (struct type *type, struc= t ui_file *stream, =20 case TYPE_CODE_STRUCT: case TYPE_CODE_UNION: + case TYPE_CODE_NAMELIST: if (type->code () =3D=3D TYPE_CODE_UNION) fprintf_filtered (stream, "%*sType, C_Union :: ", level, ""); else diff --git a/gdb/f-valprint.c b/gdb/f-valprint.c index 27d9a730978..6f80b5a= 12ff 100644 --- a/gdb/f-valprint.c +++ b/gdb/f-valprint.c @@ -295,6 +295,7 @@ f_language::value_print_inner (struct value *val, struc= t ui_file *stream, =20 case TYPE_CODE_STRUCT: case TYPE_CODE_UNION: + case TYPE_CODE_NAMELIST: /* Starting from the Fortran 90 standard, Fortran supports derived types. */ fprintf_filtered (stream, "( "); @@ -320,6 +321,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->code () =3D=3D TYPE_CODE_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 dc575c42996..ba8a61987db= 100644 --- a/gdb/gdbtypes.h +++ b/gdb/gdbtypes.h @@ -195,6 +195,8 @@ enum type_code =20 /* * Fixed Point type. */ TYPE_CODE_FIXED_POINT, + + TYPE_CODE_NAMELIST, /**< Fortran namelist. */ }; =20 /* * Some bits for the type's instance_flags word. See the macros diff --= git a/gdb/testsuite/gdb.fortran/namelist.exp b/gdb/testsuite/gdb.fortran/na= melist.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=20 +# it under the terms of the GNU General Public License as published by=20 +# the Free Software Foundation; either version 3 of the License, or #=20 +(at your option) any later version. +# +# This program is distributed in the hope that it will be useful, # but=20 +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 . + +# 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 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"]=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 \\)" +} 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=20 +! it under the terms of the GNU General Public License as published by=20 +! the Free Software Foundation; either version 3 of the License, or !=20 +(at your option) any later version. +! +! This program is distributed in the hope that it will be useful, ! but=20 +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 . +! +! 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..6b8= be1f6a16 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, 0x= 41) DW_AT (DW_AT_identifier_case, 0x42) DW_AT (DW_AT_macro_info, 0x43) -D= W_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 -----Original Message----- From: Andrew Burgess =20 Sent: Wednesday, October 6, 2021 9:22 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 [2021-09-22 12:38:20 +0= 000]: > [AMD Official Use Only] > > Hi Andrew, > > Thanks a lot for your review comments, I have addressed all the review co= mments and tested. Updated patch is attached and also inlined with this ema= il. > > >I'm a little uncomfortable with this if condition. This feels like a bi= t of a hack. Is there precedent anywhere else in GDB for using the type sp= ecific field like this? > >Wouldn't adding a TYPE_CODE_NAMELIST be more in keeping with how GDB cur= rently does things, though I understand this is likely to make the patch sl= ightly bigger. Did you consider this approach? > > Regarding your major comment, I did considered introducing a new type=20 > specific field for namelist earlier, instead of using any of those=20 > existing. Reason I did not included in my earlier patch was,=20 > type_specific_kind is declared with 3 bits in struct main_type and=20 > already there were 8 values, hence deferred expanding=20 > type_specific_kind etc.... But now I have done that, thanks for the=20 > suggestion. Except that wasn't quite what I suggested; I actually asked whether namelis= t's should become their own type altogether, notice I suggested TYPE_CODE_N= AMELIST. Though what you have here is nice in its simplicity, but I can't shake the = feeling that its not the right solution. I'll need to think about this some more - maybe others have an opinion? Thanks, Andrew > > Regards, > bhuvan > > PATH inlined: > > From 59053daf1018c3e4bcae8cd342d46b00f4f03648 Mon Sep 17 00:00:00 2001 > From: =3D?UTF-8?q?=3DE2=3D80=3D9Cbhkumarn=3DE2=3D80=3D9D?=3D=20 > > Date: Wed, 22 Sep 2021 17:52:15 +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 | 44 +++++++++++++++++++---- > gdb/f-valprint.c | 10 ++++++ > gdb/gdbtypes.h | 3 +- > gdb/testsuite/ChangeLog | 5 +++ > gdb/testsuite/gdb.fortran/namelist.exp | 49=20 > ++++++++++++++++++++++++++ > gdb/testsuite/gdb.fortran/namelist.f90 | 27 ++++++++++++++ > include/dwarf2.def | 2 +- > 8 files changed, 142 insertions(+), 9 deletions(-) create mode=20 > 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=20 > 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 > > * python/lib/gdb/FrameDecorator.py (FrameDecorator): Use 'is None' > diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c index=20 > 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,=20 > 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)) > + { > + /* 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 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. */ > > /* Get type of field. */ > @@ -15448,7 +15461,10 @@ read_structure_type (struct die_info *die, struc= t dwarf2_cu *cu) > } > > 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); > > name =3D dwarf2_name (die, cu); > if (name !=3D NULL) > @@ -15684,7 +15700,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 @@=20 > -15728,7 +15745,9 @@ handle_struct_member_die (struct die_info=20 > *child_die, 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 +21826,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 +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; > > @@ -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 unnam= ed > structures or unions. These were of the form "._%d" in GCC 4.1, > or simply "" or "" in GCC=20 > 4.3 diff --git a/gdb/f-valprint.c b/gdb/f-valprint.c index=20 > 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, 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_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); > > diff --git a/gdb/gdbtypes.h b/gdb/gdbtypes.h index=20 > 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, > }; > > 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. */ > > - ENUM_BITFIELD(type_specific_kind) type_specific_field : 3; > + ENUM_BITFIELD(type_specific_kind) type_specific_field : 4; > > /* * Number of fields described for this type. This field appears > at this location because it packs nicely here. */ 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 > + > + * gdb.fortran/namelist.exp: New file. > + * gdb.fortran/namelist.f90: New file. > + > 2021-06-10 Bhuvanendra Kumar N > > * 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..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=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 . > + > +# 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 n= ml" > + 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=20 > b/gdb/testsuite/gdb.fortran/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=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 . > +! > +! 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 > > > -----Original Message----- > From: Andrew Burgess > Sent: Monday, September 20, 2021 3:11 PM > To: Kumar N, Bhuvanendra > Cc: gdb-patches@sourceware.org; George, Jini Susan=20 > ; Achra, Nitika ;=20 > Sharma, Alok Kumar ; E, Nagajyothi=20 > > Subject: Re: [PATCH] Fix ptype and print commands for namelist=20 > variables(a fortran feature) > > [CAUTION: External Email] > > * Kumar N, Bhuvanendra via Gdb-patches [2021= -08-24 09:16:19 +0000]: > > > [AMD Official Use Only] > > > > Hi all, > > > > Requesting code review for this GDB patch. Required patch is attached a= nd also inlined below with this email. > > > > Problem description/summary: > > > > GCC/gfortran support namelist(a fortran feature), it emits DW_TAG_namel= ist 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 p= rint, 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 vari= ables 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 ) > > bhuvan, > > Thanks for working on this. I have some small style issues, but I have a= bigger 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= per DWARF standard naming convention in GCC/gfortran repo (https://nam11.s= afelinks.protection.outlook.com/?url=3Dhttps%3A%2F%2Fgithub.com%2Fgcc-mirro= r%2Fgcc&data=3D04%7C01%7CBhuvanendra.KumarN%40amd.com%7C1b602ae2197248e= 5a9a008d988e12ef7%7C3dd8961fe4884e608e11a82d994e183d%7C0%7C0%7C637691323019= 155507%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6= Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=3DK8mncjSuCt9BEaGJTnlJ9qp0%2FpFSVvf= kVxbe%2FNFrej0%3D&reserved=3D0) will be handled in separate PATCH. I wi= ll raise separate patch for this. > > > > regards, > > bhuvan > > > > Patch inlined: > > > > From 0775cbf3716bae9480c3f1f1d9d8860ac561929e Mon Sep 17 00:00:00=20 > > 2001 > > From: =3D?UTF-8?q?=3DE2=3D80=3D9Cbhkumarn=3DE2=3D80=3D9D?=3D > > Bhuvanendra.KumarN@amd.com > > Date: Mon, 24 Aug 2021 11:49:14 +0530 > > Subject: [PATCH] Fix ptype and print commands for namelist=20 > > variables(a 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 messag= e as shown below. > > (gdb) print nml > > No symbol "nml" in current context. > > This commit is to make the print and ptype commands work for=20 > > namelist variables and its items. Sample output of these commands is=20 > > 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 | 41 +++++++++++++++++++---- > > gdb/f-valprint.c | 10 ++++++ > > gdb/testsuite/ChangeLog | 5 +++ > > gdb/testsuite/gdb.fortran/namelist.exp | 45=20 > > ++++++++++++++++++++++++++ > > gdb/testsuite/gdb.fortran/namelist.f90 | 27 ++++++++++++++++ > > include/dwarf2.def | 2 +- > > 7 files changed, 134 insertions(+), 7 deletions(-) create mode=20 > > 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 > > +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 > > 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, stru= ct 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_namelis= t_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= _item, 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, stru= ct 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 = else block. > > > name =3D dwarf2_name (die, cu); > > if (name !=3D NULL) > > @@ -15684,7 +15699,8 @@ handle_struct_member_die (struct die_info *chil= d_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 @@=20 > > -15728,7 > > +15744,9 @@ handle_struct_member_die (struct die_info *child_die, > > 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 = *type, 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 @@ > > -22744,6 +22771,7 @@ dwarf2_name (struct die_info *die, struct dwarf2_c= u *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 dwarf= 2_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 unn= amed > > structures or unions. These were of the form "._%d" in GCC 4.1, > > or simply "" or "" in GCC=20 > > 4.3 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, = struct ui_file *stream, > > fputs_filtered (" =3D ", stream); > > } > > + /* While printing namelist items, fetch the appropriate val= ue > > + 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= of a hack. Is there precedent anywhere else in GDB for using the type spe= cific field like this? > > Wouldn't adding a TYPE_CODE_NAMELIST be more in keeping with how GDB curr= ently does things, though I understand this is likely to make the patch sli= ghtly 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 > > +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 > > 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 copyrigh= t 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=20 > > +the 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.protec= tion.outlook.com/?url=3Dhttp%3A%2F%2Fwww.gnu.org%2Flicenses%2F&data=3D0= 4%7C01%7CBhuvanendra.KumarN%40amd.com%7C1b602ae2197248e5a9a008d988e12ef7%7C= 3dd8961fe4884e608e11a82d994e183d%7C0%7C0%7C637691323019160499%7CUnknown%7CT= WFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%= 3D%7C1000&sdata=3DKoXo6%2BRQEYSwRQ6VV%2Batjx0FoVfnufps0RJnK88k2y0%3D&am= p;reserved=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= 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 = differently. > > +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 > > 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=20 > > +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=20 > > +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 https://nam11.safelinks.protecti= on.outlook.com/?url=3Dhttp%3A%2F%2Fwww.gnu.org%2Flicenses%2F&data=3D04%= 7C01%7CBhuvanendra.KumarN%40amd.com%7C1b602ae2197248e5a9a008d988e12ef7%7C3d= d8961fe4884e608e11a82d994e183d%7C0%7C0%7C637691323019160499%7CUnknown%7CTWF= pbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D= %7C1000&sdata=3DKoXo6%2BRQEYSwRQ6VV%2Batjx0FoVfnufps0RJnK88k2y0%3D&= reserved=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 > > 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_MW2PR12MB46842E19E0C007626FE4AF15879C9MW2PR12MB4684namp_ Content-Type: application/octet-stream; name="0001-gdb-fortran-Fix-ptype-and-print-commands-for-namelis.patch" Content-Description: 0001-gdb-fortran-Fix-ptype-and-print-commands-for-namelis.patch Content-Disposition: attachment; filename="0001-gdb-fortran-Fix-ptype-and-print-commands-for-namelis.patch"; size=11751; creation-date="Thu, 07 Oct 2021 21:00:00 GMT"; modification-date="Thu, 07 Oct 2021 21:05:08 GMT" Content-Transfer-Encoding: base64 RnJvbSA4OWI3Zjg0NzA0MmNjZWE0NDYzM2Y3MTRkYjA3NDAwZmE2ZGQzNjE3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiA9P1VURi04P3E/PUUyPTgwPTlDYmhrdW1hcm49RTI9ODA9OUQ/ PSA8Qmh1dmFuZW5kcmEuS3VtYXJOQGFtZC5jb20+CkRhdGU6IEZyaSwgOCBPY3QgMjAyMSAwMjow MToxOCArMDUzMApTdWJqZWN0OiBbUEFUQ0hdIGdkYi9mb3J0cmFuOiBGaXggcHR5cGUgYW5kIHBy aW50IGNvbW1hbmRzIGZvciBuYW1lbGlzdAogdmFyaWFibGVzLgoKR0NDL2dmb3J0cmFuIHN1cHBv cnQgbmFtZWxpc3QoYSBmb3J0cmFuIGZlYXR1cmUpLCBpdCBlbWl0cyBEV19UQUdfbmFtZWxpc3QK YW5kIERXX1RBR19uYW1lbGlzdF9pdGVtIGRpZXMuIEJ1dCBnZGIgZG9lcyBub3QgcHJvY2VzcyB0 aGVzZSBkaWVzIGFuZApzdXBwb3J0IG5hbWVsaXN0IHZhcmlhYmxlcyBkdXJpbmcgcHJpbnQgYW5k IHB0eXBlIGNvbW1hbmRzLiBXaGVuIHRyaWVkIHRvCnByaW50LCBpdCBiYWlscyBvdXQgd2l0aCB0 aGUgZXJyb3IgbWVzc2FnZSBhcyBzaG93biBiZWxvdy4KKGdkYikgcHJpbnQgbm1sCk5vIHN5bWJv bCAibm1sIiBpbiBjdXJyZW50IGNvbnRleHQuClRoaXMgY29tbWl0IGlzIHRvIG1ha2UgdGhlIHBy aW50IGFuZCBwdHlwZSBjb21tYW5kcyB3b3JrIGZvciBuYW1lbGlzdAp2YXJpYWJsZXMgYW5kIGl0 cyBpdGVtcy4gU2FtcGxlIG91dHB1dCBvZiB0aGVzZSBjb21tYW5kcyBpcyBzaGFyZWQgYmVsb3cs CndpdGggZml4ZWQgZ2RiLgooZ2RiKSBwdHlwZSBubWwKdHlwZSA9IFR5cGUgbm1sCiAgICBpbnRl Z2VyKGtpbmQ9NCkgOjogYQogICAgaW50ZWdlcihraW5kPTQpIDo6IGIKRW5kIFR5cGUgbm1sCihn ZGIpIHByaW50IG5tbAokMSA9ICggYSA9IDEwLCBiID0gMjAgKQotLS0KIGdkYi9kd2FyZjIvcmVh ZC5jICAgICAgICAgICAgICAgICAgICAgIHwgNDMgKysrKysrKysrKysrKysrKysrLS0tLQogZ2Ri L2YtdHlwZXByaW50LmMgICAgICAgICAgICAgICAgICAgICAgfCAgNiArKystCiBnZGIvZi12YWxw cmludC5jICAgICAgICAgICAgICAgICAgICAgICB8IDExICsrKysrKwogZ2RiL2dkYnR5cGVzLmgg ICAgICAgICAgICAgICAgICAgICAgICAgfCAgMiArKwogZ2RiL3Rlc3RzdWl0ZS9nZGIuZm9ydHJh bi9uYW1lbGlzdC5leHAgfCA0OSArKysrKysrKysrKysrKysrKysrKysrKysrKwogZ2RiL3Rlc3Rz dWl0ZS9nZGIuZm9ydHJhbi9uYW1lbGlzdC5mOTAgfCAyNyArKysrKysrKysrKysrKwogaW5jbHVk ZS9kd2FyZjIuZGVmICAgICAgICAgICAgICAgICAgICAgfCAgMiArLQogNyBmaWxlcyBjaGFuZ2Vk LCAxMzIgaW5zZXJ0aW9ucygrKSwgOCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBn ZGIvdGVzdHN1aXRlL2dkYi5mb3J0cmFuL25hbWVsaXN0LmV4cAogY3JlYXRlIG1vZGUgMTAwNjQ0 IGdkYi90ZXN0c3VpdGUvZ2RiLmZvcnRyYW4vbmFtZWxpc3QuZjkwCgpkaWZmIC0tZ2l0IGEvZ2Ri L2R3YXJmMi9yZWFkLmMgYi9nZGIvZHdhcmYyL3JlYWQuYwppbmRleCBjYmQ5YTMwMTJlYi4uZTZj ZDhlZDQ4ZjAgMTAwNjQ0Ci0tLSBhL2dkYi9kd2FyZjIvcmVhZC5jCisrKyBiL2dkYi9kd2FyZjIv cmVhZC5jCkBAIC05NzA1LDYgKzk3MDUsNyBAQCBwcm9jZXNzX2RpZSAoc3RydWN0IGRpZV9pbmZv ICpkaWUsIHN0cnVjdCBkd2FyZjJfY3UgKmN1KQogICAgIGNhc2UgRFdfVEFHX2ludGVyZmFjZV90 eXBlOgogICAgIGNhc2UgRFdfVEFHX3N0cnVjdHVyZV90eXBlOgogICAgIGNhc2UgRFdfVEFHX3Vu aW9uX3R5cGU6CisgICAgY2FzZSBEV19UQUdfbmFtZWxpc3Q6CiAgICAgICBwcm9jZXNzX3N0cnVj dHVyZV9zY29wZSAoZGllLCBjdSk7CiAgICAgICBicmVhazsKICAgICBjYXNlIERXX1RBR19lbnVt ZXJhdGlvbl90eXBlOgpAQCAtMTQ1NjIsOCArMTQ1NjMsMjAgQEAgZHdhcmYyX2FkZF9maWVsZCAo c3RydWN0IGZpZWxkX2luZm8gKmZpcCwgc3RydWN0IGRpZV9pbmZvICpkaWUsCiAKICAgZnAgPSAm bmV3X2ZpZWxkLT5maWVsZDsKIAotICBpZiAoZGllLT50YWcgPT0gRFdfVEFHX21lbWJlciAmJiAh IGRpZV9pc19kZWNsYXJhdGlvbiAoZGllLCBjdSkpCi0gICAgeworICBpZiAoKGRpZS0+dGFnID09 IERXX1RBR19tZW1iZXIgfHwgZGllLT50YWcgPT0gRFdfVEFHX25hbWVsaXN0X2l0ZW0pCisgICAg ICAgICAgICAmJiAhIGRpZV9pc19kZWNsYXJhdGlvbiAoZGllLCBjdSkpCisgICAgeworICAgICAg LyogRm9yIHRoZSBEV19UQUdfbmFtZWxpc3RfaXRlbSBkaWUsIHVzZSB0aGUgcmVmZXJlbmNlZCBk aWUuICAqLworICAgICAgaWYgKGRpZS0+dGFnID09IERXX1RBR19uYW1lbGlzdF9pdGVtKQorICAg ICAgICB7CisgICAgICAgICAgc3RydWN0IGF0dHJpYnV0ZSAqYXR0cjEgPSBkd2FyZjJfYXR0ciAo ZGllLCBEV19BVF9uYW1lbGlzdF9pdGVtLCBjdSk7CisgICAgICAgICAgc3RydWN0IGRpZV9pbmZv ICppdGVtX2RpZSA9IG51bGxwdHI7CisgICAgICAgICAgc3RydWN0IGR3YXJmMl9jdSAqaXRlbV9j dSA9IGN1OworICAgICAgICAgIGlmIChhdHRyMS0+Zm9ybV9pc19yZWYgKCkpCisgICAgICAgICAg ICBpdGVtX2RpZSA9IGZvbGxvd19kaWVfcmVmIChkaWUsIGF0dHIxLCAmaXRlbV9jdSk7CisgICAg ICAgICAgaWYgKGl0ZW1fZGllICE9IG51bGxwdHIpCisgICAgICAgICAgICBkaWUgPSBpdGVtX2Rp ZTsKKyAgICAgICAgfQogICAgICAgLyogRGF0YSBtZW1iZXIgb3RoZXIgdGhhbiBhIEMrKyBzdGF0 aWMgZGF0YSBtZW1iZXIuICAqLwogCiAgICAgICAvKiBHZXQgdHlwZSBvZiBmaWVsZC4gICovCkBA IC0xNTYyMSw2ICsxNTYzNCwxMCBAQCByZWFkX3N0cnVjdHVyZV90eXBlIChzdHJ1Y3QgZGllX2lu Zm8gKmRpZSwgc3RydWN0IGR3YXJmMl9jdSAqY3UpCiAgICAgewogICAgICAgdHlwZS0+c2V0X2Nv ZGUgKFRZUEVfQ09ERV9VTklPTik7CiAgICAgfQorICBlbHNlIGlmIChkaWUtPnRhZyA9PSBEV19U QUdfbmFtZWxpc3QpCisgICAgeworICAgICAgdHlwZS0+c2V0X2NvZGUgKFRZUEVfQ09ERV9OQU1F TElTVCk7CisgICAgfQogICBlbHNlCiAgICAgewogICAgICAgdHlwZS0+c2V0X2NvZGUgKFRZUEVf Q09ERV9TVFJVQ1QpOwpAQCAtMTU4MjMsNyArMTU4NDAsOCBAQCBoYW5kbGVfc3RydWN0X21lbWJl cl9kaWUgKHN0cnVjdCBkaWVfaW5mbyAqY2hpbGRfZGllLCBzdHJ1Y3QgdHlwZSAqdHlwZSwKIAkJ CSAgc3RydWN0IGR3YXJmMl9jdSAqY3UpCiB7CiAgIGlmIChjaGlsZF9kaWUtPnRhZyA9PSBEV19U QUdfbWVtYmVyCi0gICAgICB8fCBjaGlsZF9kaWUtPnRhZyA9PSBEV19UQUdfdmFyaWFibGUpCisg ICAgICB8fCBjaGlsZF9kaWUtPnRhZyA9PSBEV19UQUdfdmFyaWFibGUKKyAgICAgIHx8IGNoaWxk X2RpZS0+dGFnID09IERXX1RBR19uYW1lbGlzdF9pdGVtKQogICAgIHsKICAgICAgIC8qIE5PVEU6 IGNhcmx0b24vMjAwMi0xMS0wNTogQSBDKysgc3RhdGljIGRhdGEgbWVtYmVyCiAJIHNob3VsZCBi ZSBhIERXX1RBR19tZW1iZXIgdGhhdCBpcyBhIGRlY2xhcmF0aW9uLCBidXQKQEAgLTE1ODY3LDcg KzE1ODg1LDkgQEAgaGFuZGxlX3N0cnVjdF9tZW1iZXJfZGllIChzdHJ1Y3QgZGllX2luZm8gKmNo aWxkX2RpZSwgc3RydWN0IHR5cGUgKnR5cGUsCiB9CiAKIC8qIEZpbmlzaCBjcmVhdGluZyBhIHN0 cnVjdHVyZSBvciB1bmlvbiB0eXBlLCBpbmNsdWRpbmcgZmlsbGluZyBpbgotICAgaXRzIG1lbWJl cnMgYW5kIGNyZWF0aW5nIGEgc3ltYm9sIGZvciBpdC4gICovCisgICBpdHMgbWVtYmVycyBhbmQg Y3JlYXRpbmcgYSBzeW1ib2wgZm9yIGl0LiBUaGlzIGZ1bmN0aW9uIGFsc28KKyAgIGhhbmRsZXMg Rm9ydHJhbiBuYW1lbGlzdCB2YXJpYWJsZSwgaXRzIGl0ZW1zIG9yIG1lbWJlcnMgYW5kCisgICBj cmVhdGluZyBhIHN5bWJvbCBmb3IgaXQuICAqLwogCiBzdGF0aWMgdm9pZAogcHJvY2Vzc19zdHJ1 Y3R1cmVfc2NvcGUgKHN0cnVjdCBkaWVfaW5mbyAqZGllLCBzdHJ1Y3QgZHdhcmYyX2N1ICpjdSkK QEAgLTIxOTcxLDggKzIxOTkxLDE3IEBAIG5ld19zeW1ib2wgKHN0cnVjdCBkaWVfaW5mbyAqZGll LCBzdHJ1Y3QgdHlwZSAqdHlwZSwgc3RydWN0IGR3YXJmMl9jdSAqY3UsCiAJY2FzZSBEV19UQUdf dW5pb25fdHlwZToKIAljYXNlIERXX1RBR19zZXRfdHlwZToKIAljYXNlIERXX1RBR19lbnVtZXJh dGlvbl90eXBlOgotCSAgU1lNQk9MX0FDTEFTU19JTkRFWCAoc3ltKSA9IExPQ19UWVBFREVGOwot CSAgU1lNQk9MX0RPTUFJTiAoc3ltKSA9IFNUUlVDVF9ET01BSU47CisJY2FzZSBEV19UQUdfbmFt ZWxpc3Q6CisJICBpZiAoZGllLT50YWcgPT0gRFdfVEFHX25hbWVsaXN0KQorICAgICAgICAgICAg eworCSAgICAgIFNZTUJPTF9BQ0xBU1NfSU5ERVggKHN5bSkgPSBMT0NfU1RBVElDOworCSAgICAg IFNZTUJPTF9ET01BSU4gKHN5bSkgPSBWQVJfRE9NQUlOOworICAgICAgICAgICAgfQorCSAgZWxz ZQorICAgICAgICAgICAgeworCSAgICAgIFNZTUJPTF9BQ0xBU1NfSU5ERVggKHN5bSkgPSBMT0Nf VFlQRURFRjsKKwkgICAgICBTWU1CT0xfRE9NQUlOIChzeW0pID0gU1RSVUNUX0RPTUFJTjsKKyAg ICAgICAgICAgIH0KIAogCSAgewogCSAgICAvKiBOT1RFOiBjYXJsdG9uLzIwMDMtMTEtMTA6IEMr KyBjbGFzcyBzeW1ib2xzIHNob3VsZG4ndApAQCAtMjI5MDksNiArMjI5MzgsNyBAQCBkd2FyZjJf bmFtZSAoc3RydWN0IGRpZV9pbmZvICpkaWUsIHN0cnVjdCBkd2FyZjJfY3UgKmN1KQogICAgICAg JiYgZGllLT50YWcgIT0gRFdfVEFHX2NsYXNzX3R5cGUKICAgICAgICYmIGRpZS0+dGFnICE9IERX X1RBR19pbnRlcmZhY2VfdHlwZQogICAgICAgJiYgZGllLT50YWcgIT0gRFdfVEFHX3N0cnVjdHVy ZV90eXBlCisgICAgICAmJiBkaWUtPnRhZyAhPSBEV19UQUdfbmFtZWxpc3QKICAgICAgICYmIGRp ZS0+dGFnICE9IERXX1RBR191bmlvbl90eXBlKQogICAgIHJldHVybiBOVUxMOwogCkBAIC0yMjkz Myw2ICsyMjk2Myw3IEBAIGR3YXJmMl9uYW1lIChzdHJ1Y3QgZGllX2luZm8gKmRpZSwgc3RydWN0 IGR3YXJmMl9jdSAqY3UpCiAgICAgY2FzZSBEV19UQUdfaW50ZXJmYWNlX3R5cGU6CiAgICAgY2Fz ZSBEV19UQUdfc3RydWN0dXJlX3R5cGU6CiAgICAgY2FzZSBEV19UQUdfdW5pb25fdHlwZToKKyAg ICBjYXNlIERXX1RBR19uYW1lbGlzdDoKICAgICAgIC8qIFNvbWUgR0NDIHZlcnNpb25zIGVtaXQg c3B1cmlvdXMgRFdfQVRfbmFtZSBhdHRyaWJ1dGVzIGZvciB1bm5hbWVkCiAJIHN0cnVjdHVyZXMg b3IgdW5pb25zLiAgVGhlc2Ugd2VyZSBvZiB0aGUgZm9ybSAiLl8lZCIgaW4gR0NDIDQuMSwKIAkg b3Igc2ltcGx5ICI8YW5vbnltb3VzIHN0cnVjdD4iIG9yICI8YW5vbnltb3VzIHVuaW9uPiIgaW4g R0NDIDQuMwpkaWZmIC0tZ2l0IGEvZ2RiL2YtdHlwZXByaW50LmMgYi9nZGIvZi10eXBlcHJpbnQu YwppbmRleCAxNzkxY2IyOTQ1MS4uNWIzNDYyMmRhY2IgMTAwNjQ0Ci0tLSBhL2dkYi9mLXR5cGVw cmludC5jCisrKyBiL2dkYi9mLXR5cGVwcmludC5jCkBAIC0xMjEsNiArMTIxLDcgQEAgZl9sYW5n dWFnZTo6Zl90eXBlX3ByaW50X3ZhcnNwZWNfcHJlZml4IChzdHJ1Y3QgdHlwZSAqdHlwZSwKICAg ICBjYXNlIFRZUEVfQ09ERV9VTkRFRjoKICAgICBjYXNlIFRZUEVfQ09ERV9TVFJVQ1Q6CiAgICAg Y2FzZSBUWVBFX0NPREVfVU5JT046CisgICAgY2FzZSBUWVBFX0NPREVfTkFNRUxJU1Q6CiAgICAg Y2FzZSBUWVBFX0NPREVfRU5VTToKICAgICBjYXNlIFRZUEVfQ09ERV9JTlQ6CiAgICAgY2FzZSBU WVBFX0NPREVfRkxUOgpAQCAtMjYxLDYgKzI2Miw3IEBAIGZfbGFuZ3VhZ2U6OmZfdHlwZV9wcmlu dF92YXJzcGVjX3N1ZmZpeCAoc3RydWN0IHR5cGUgKnR5cGUsCiAgICAgY2FzZSBUWVBFX0NPREVf VU5ERUY6CiAgICAgY2FzZSBUWVBFX0NPREVfU1RSVUNUOgogICAgIGNhc2UgVFlQRV9DT0RFX1VO SU9OOgorICAgIGNhc2UgVFlQRV9DT0RFX05BTUVMSVNUOgogICAgIGNhc2UgVFlQRV9DT0RFX0VO VU06CiAgICAgY2FzZSBUWVBFX0NPREVfSU5UOgogICAgIGNhc2UgVFlQRV9DT0RFX0ZMVDoKQEAg LTMwNSw3ICszMDcsOCBAQCBmX2xhbmd1YWdlOjpmX3R5cGVfcHJpbnRfYmFzZSAoc3RydWN0IHR5 cGUgKnR5cGUsIHN0cnVjdCB1aV9maWxlICpzdHJlYW0sCiAgICAgICBjb25zdCBjaGFyICpwcmVm aXggPSAiIjsKICAgICAgIGlmICh0eXBlLT5jb2RlICgpID09IFRZUEVfQ09ERV9VTklPTikKIAlw cmVmaXggPSAiVHlwZSwgQ19VbmlvbiA6OiAiOwotICAgICAgZWxzZSBpZiAodHlwZS0+Y29kZSAo KSA9PSBUWVBFX0NPREVfU1RSVUNUKQorICAgICAgZWxzZSBpZiAodHlwZS0+Y29kZSAoKSA9PSBU WVBFX0NPREVfU1RSVUNUCisgICAgICAgICAgICAgICB8fCB0eXBlLT5jb2RlICgpID09IFRZUEVf Q09ERV9OQU1FTElTVCkKIAlwcmVmaXggPSAiVHlwZSAiOwogICAgICAgZnByaW50Zl9maWx0ZXJl ZCAoc3RyZWFtLCAiJSpzJXMlcyIsIGxldmVsLCAiIiwgcHJlZml4LCB0eXBlLT5uYW1lICgpKTsK ICAgICAgIHJldHVybjsKQEAgLTM5MSw2ICszOTQsNyBAQCBmX2xhbmd1YWdlOjpmX3R5cGVfcHJp bnRfYmFzZSAoc3RydWN0IHR5cGUgKnR5cGUsIHN0cnVjdCB1aV9maWxlICpzdHJlYW0sCiAKICAg ICBjYXNlIFRZUEVfQ09ERV9TVFJVQ1Q6CiAgICAgY2FzZSBUWVBFX0NPREVfVU5JT046CisgICAg Y2FzZSBUWVBFX0NPREVfTkFNRUxJU1Q6CiAgICAgICBpZiAodHlwZS0+Y29kZSAoKSA9PSBUWVBF X0NPREVfVU5JT04pCiAJZnByaW50Zl9maWx0ZXJlZCAoc3RyZWFtLCAiJSpzVHlwZSwgQ19Vbmlv biA6OiAiLCBsZXZlbCwgIiIpOwogICAgICAgZWxzZQpkaWZmIC0tZ2l0IGEvZ2RiL2YtdmFscHJp bnQuYyBiL2dkYi9mLXZhbHByaW50LmMKaW5kZXggMjdkOWE3MzA5NzguLjZmODBiNWExMmZmIDEw MDY0NAotLS0gYS9nZGIvZi12YWxwcmludC5jCisrKyBiL2dkYi9mLXZhbHByaW50LmMKQEAgLTI5 NSw2ICsyOTUsNyBAQCBmX2xhbmd1YWdlOjp2YWx1ZV9wcmludF9pbm5lciAoc3RydWN0IHZhbHVl ICp2YWwsIHN0cnVjdCB1aV9maWxlICpzdHJlYW0sCiAKICAgICBjYXNlIFRZUEVfQ09ERV9TVFJV Q1Q6CiAgICAgY2FzZSBUWVBFX0NPREVfVU5JT046CisgICAgY2FzZSBUWVBFX0NPREVfTkFNRUxJ U1Q6CiAgICAgICAvKiBTdGFydGluZyBmcm9tIHRoZSBGb3J0cmFuIDkwIHN0YW5kYXJkLCBGb3J0 cmFuIHN1cHBvcnRzIGRlcml2ZWQKIAkgdHlwZXMuICAqLwogICAgICAgZnByaW50Zl9maWx0ZXJl ZCAoc3RyZWFtLCAiKCAiKTsKQEAgLTMyMCw2ICszMjEsMTYgQEAgZl9sYW5ndWFnZTo6dmFsdWVf cHJpbnRfaW5uZXIgKHN0cnVjdCB2YWx1ZSAqdmFsLCBzdHJ1Y3QgdWlfZmlsZSAqc3RyZWFtLAog CQkgIGZwdXRzX2ZpbHRlcmVkICgiID0gIiwgc3RyZWFtKTsKIAkJfQogCisJICAgICAgLyogV2hp bGUgcHJpbnRpbmcgbmFtZWxpc3QgaXRlbXMsIGZldGNoIHRoZSBhcHByb3ByaWF0ZSB2YWx1ZQor CSAgICAgICAgIGZpZWxkIGJlZm9yZSBwcmludGluZyBpdHMgdmFsdWUuICAqLworCSAgICAgIGlm ICh0eXBlLT5jb2RlICgpID09IFRZUEVfQ09ERV9OQU1FTElTVCkKKwkgICAgICAgIHsKKwkgICAg ICAgICAgc3RydWN0IGJsb2NrX3N5bWJvbCBzeW1uaSA9IGxvb2t1cF9zeW1ib2wgKGZpZWxkX25h bWUsCisJCQlnZXRfc2VsZWN0ZWRfYmxvY2sgKDApLCBWQVJfRE9NQUlOLCBudWxscHRyKTsKKwkg ICAgICAgICAgaWYgKHN5bW5pLnN5bWJvbCAhPSBudWxscHRyKQorCSAgICAgICAgICAgIGZpZWxk ID0gdmFsdWVfb2ZfdmFyaWFibGUgKHN5bW5pLnN5bWJvbCwgc3ltbmkuYmxvY2spOworCSAgICAg ICAgfQorCiAJICAgICAgY29tbW9uX3ZhbF9wcmludCAoZmllbGQsIHN0cmVhbSwgcmVjdXJzZSAr IDEsCiAJCQkJb3B0aW9ucywgY3VycmVudF9sYW5ndWFnZSk7CiAKZGlmZiAtLWdpdCBhL2dkYi9n ZGJ0eXBlcy5oIGIvZ2RiL2dkYnR5cGVzLmgKaW5kZXggZGM1NzVjNDI5OTYuLmJhOGE2MTk4N2Ri IDEwMDY0NAotLS0gYS9nZGIvZ2RidHlwZXMuaAorKysgYi9nZGIvZ2RidHlwZXMuaApAQCAtMTk1 LDYgKzE5NSw4IEBAIGVudW0gdHlwZV9jb2RlCiAKICAgICAvKiAqIEZpeGVkIFBvaW50IHR5cGUu ICAqLwogICAgIFRZUEVfQ09ERV9GSVhFRF9QT0lOVCwKKworICAgIFRZUEVfQ09ERV9OQU1FTElT VCwgICAgICAgICAvKio8IEZvcnRyYW4gbmFtZWxpc3QuICAqLwogICB9OwogCiAvKiAqIFNvbWUg Yml0cyBmb3IgdGhlIHR5cGUncyBpbnN0YW5jZV9mbGFncyB3b3JkLiAgU2VlIHRoZSBtYWNyb3MK ZGlmZiAtLWdpdCBhL2dkYi90ZXN0c3VpdGUvZ2RiLmZvcnRyYW4vbmFtZWxpc3QuZXhwIGIvZ2Ri L3Rlc3RzdWl0ZS9nZGIuZm9ydHJhbi9uYW1lbGlzdC5leHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMDAuLjkwNzYyOTI4NDU1Ci0tLSAvZGV2L251bGwKKysrIGIvZ2RiL3Rl c3RzdWl0ZS9nZGIuZm9ydHJhbi9uYW1lbGlzdC5leHAKQEAgLTAsMCArMSw0OSBAQAorIyBDb3B5 cmlnaHQgKEMpIDIwMjEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyMgVGhpcyBw cm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBt b2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0 aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkg bGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBv ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZl IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxv bmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xp Y2Vuc2VzLz4uCisKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIGdkYiB0ZXN0c3VpdGUuICBJ dCBjb250YWlucyB0ZXN0cyBmb3IgZm9ydHJhbgorIyBuYW1lbGlzdC4KKworaWYgeyBbc2tpcF9m b3J0cmFuX3Rlc3RzXSB9IHsgcmV0dXJuIC0xIH0KKworc3RhbmRhcmRfdGVzdGZpbGUgLmY5MAor bG9hZF9saWIgImZvcnRyYW4uZXhwIgorCitpZiB7W3ByZXBhcmVfZm9yX3Rlc3RpbmcgImZhaWxl ZCB0byBwcmVwYXJlIiAkdGVzdGZpbGUgJHNyY2ZpbGUge2RlYnVnIGY5MH1dfSB7CisgICAgcmV0 dXJuIC0xCit9CisKK2lmICFbZm9ydHJhbl9ydW50b19tYWluXSB0aGVuIHsKKyAgICBwZXJyb3Ig ImNvdWxkbid0IHJ1biB0byBtYWluIgorICAgIGNvbnRpbnVlCit9CisKKyMgRGVwZW5kaW5nIG9u IHRoZSBjb21waWxlciBiZWluZyB1c2VkLCB0aGUgdHlwZSBuYW1lcyBjYW4gYmUgcHJpbnRlZCBk aWZmZXJlbnRseS4KK3NldCBpbnQgW2ZvcnRyYW5faW50NF0KKworZ2RiX2JyZWFrcG9pbnQgW2dk Yl9nZXRfbGluZV9udW1iZXIgIkRpc3BsYXkgbmFtZWxpc3QiXQorZ2RiX2NvbnRpbnVlX3RvX2Jy ZWFrcG9pbnQgIkRpc3BsYXkgbmFtZWxpc3QiCisKK2lmIHtbdGVzdF9jb21waWxlcl9pbmZvIHtn Y2MtKn1dfSB7CisgICAgZ2RiX3Rlc3QgInB0eXBlIG5tbCIgXAorICAgICAgICAidHlwZSA9IFR5 cGUgbm1sXHJcbiAqJGludCA6OiBhXHJcbiAqJGludCA6OiBiXHJcbiAqRW5kIFR5cGUgbm1sIgor ICAgIGdkYl90ZXN0ICJwcmludCBubWwiIFwKKyAgICAgICAgIlxcJFxbMC05XF0rID0gXFwoIGEg PSAxMCwgYiA9IDIwIFxcKSIKK30gZWxzZSB7CisgICAgZ2RiX3Rlc3QgInB0eXBlIG5tbCIgXAor ICAgICAgICAiTm8gc3ltYm9sIFwibm1sXCIgaW4gY3VycmVudCBjb250ZXh0XFwuIgorICAgIGdk Yl90ZXN0ICJwcmludCBubWwiIFwKKyAgICAgICAgIk5vIHN5bWJvbCBcIm5tbFwiIGluIGN1cnJl bnQgY29udGV4dFxcLiIKK30KZGlmZiAtLWdpdCBhL2dkYi90ZXN0c3VpdGUvZ2RiLmZvcnRyYW4v bmFtZWxpc3QuZjkwIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIuZm9ydHJhbi9uYW1lbGlzdC5mOTAKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmZiMzY2OTBkNzY1Ci0tLSAvZGV2 L251bGwKKysrIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIuZm9ydHJhbi9uYW1lbGlzdC5mOTAKQEAgLTAs MCArMSwyNyBAQAorISBDb3B5cmlnaHQgKEMpIDIwMjEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u LCBJbmMuCishCishIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz dHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CishIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CishIHRoZSBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCishIChh dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCishCishIFRoaXMgcHJvZ3JhbSBpcyBk aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorISBidXQgV0lU SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor ISBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT ZWUgdGhlCishIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCish CishIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlCishIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0 dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorIQorISBUaGlzIGZpbGUgaXMgdGhlIEZvcnRy YW4gc291cmNlIGZpbGUgZm9yIG5hbWVsaXN0LmV4cC4KKworcHJvZ3JhbSBtYWluCisKKyAgaW50 ZWdlciA6OiBhLCBiCisgIG5hbWVsaXN0IC9ubWwvIGEsIGIKKworICBhID0gMTAKKyAgYiA9IDIw CisgIFdyaXRlKCosbm1sKSAhIERpc3BsYXkgbmFtZWxpc3QKKworZW5kIHByb2dyYW0gbWFpbgpk aWZmIC0tZ2l0IGEvaW5jbHVkZS9kd2FyZjIuZGVmIGIvaW5jbHVkZS9kd2FyZjIuZGVmCmluZGV4 IDFhZTZlMWRmMjk4Li42YjhiZTFmNmExNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kd2FyZjIuZGVm CisrKyBiL2luY2x1ZGUvZHdhcmYyLmRlZgpAQCAtMjg5LDcgKzI4OSw3IEBAIERXX0FUIChEV19B VF9mcmFtZV9iYXNlLCAweDQwKQogRFdfQVQgKERXX0FUX2ZyaWVuZCwgMHg0MSkKIERXX0FUIChE V19BVF9pZGVudGlmaWVyX2Nhc2UsIDB4NDIpCiBEV19BVCAoRFdfQVRfbWFjcm9faW5mbywgMHg0 MykKLURXX0FUIChEV19BVF9uYW1lbGlzdF9pdGVtcywgMHg0NCkKK0RXX0FUIChEV19BVF9uYW1l bGlzdF9pdGVtLCAweDQ0KQogRFdfQVQgKERXX0FUX3ByaW9yaXR5LCAweDQ1KQogRFdfQVQgKERX X0FUX3NlZ21lbnQsIDB4NDYpCiBEV19BVCAoRFdfQVRfc3BlY2lmaWNhdGlvbiwgMHg0NykKLS0g CjIuMTcuMQoK --_002_MW2PR12MB46842E19E0C007626FE4AF15879C9MW2PR12MB4684namp_--