From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx0a-001b2d01.pphosted.com (mx0b-001b2d01.pphosted.com [148.163.158.5]) by sourceware.org (Postfix) with ESMTPS id 095913858401 for ; Thu, 2 Feb 2023 06:35:49 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 095913858401 Authentication-Results: sourceware.org; dmarc=pass (p=reject dis=none) header.from=ibm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=ibm.com Received: from pps.filterd (m0098419.ppops.net [127.0.0.1]) by mx0b-001b2d01.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 3126EW1T024103; Thu, 2 Feb 2023 06:35:48 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=from : to : cc : subject : date : message-id : references : in-reply-to : content-type : mime-version; s=pp1; bh=5h+26L0JCgVa4zVtI5tEw3l6EZs0sOgF+a67S1fugso=; b=SqY8xhdGcIc6YKMtR7p7mqaLy406mIjO5GnbIWEyAFht2IdK2KpnRr8Kvlr14KocWqnz raf0sBqS8CC368edGO2cUo96GSf+5KabRWW4RBt3nNjQ5SJuiDpEL5a67PaK8omBVfq6 jD6ef7vcxDevm2Su83eTnDeowEvWsQRwtE5mP9RODg58b3ggcH4GKE9yJjR/RUDYAkka aq/Qzyc8HuyzKBpM+i1zFTtGag8DlH+eCz5voIjMOI3edmZEO9y6jz8hC8tmD8cXWBma jGJZvl2tk/jVyaX2KkhlL2sjonXjhWC4tXAZptgyn0rt9KM0WfipxsGNwYKjSgtItVxs Ig== Received: from nam11-dm6-obe.outbound.protection.outlook.com (mail-dm6nam11lp2168.outbound.protection.outlook.com [104.47.57.168]) by mx0b-001b2d01.pphosted.com (PPS) with ESMTPS id 3ng7r1gcv3-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 02 Feb 2023 06:35:47 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=A0s7qHxFfdwn+JFdxqew64c5JClilWcT3/cqPWmp2ePc+5Q7h3BNZ0BufOCuqiSuQoGkwHcaz1Hom7lHQmEBOgpGIjrvajhm9TzPQvu2t4C04EXtG2cqd45C7VDJWddK6x5cv9WxHBs7jpdcvcf/IiKr4Oio8B9tt9aLP6R3Xwz+Bn3BOEK+cJ80O+bae1LCwe90MHaKawRf9B3O4me/wOab++n4+dtRHC/uqUOz9cuGxxtaTHC3Gi9UN36YVr0PjrMGlIMZDd0zCTR4cz1uCihjIhea0go4vN5XevkNmumJ9c2bKf3/fjvDqKX6ZkOWwxr5JaBNTGFlDU9/LWoRsQ== 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=5h+26L0JCgVa4zVtI5tEw3l6EZs0sOgF+a67S1fugso=; b=npxYrOVLVunzTQ9u7s4Rt6qYfaqO9OAvgZkRvwE0+dVSMQd2s5MC8fqeHWd8D8Fqq5K0pCHsn8IUE7EjV5p1eUKcaYqU0q0jEBDQoI6w1oPIrqNJ07Z8xNvYtxlxqogjU07+yqsxaC2lC7mAhBwH/5dTj8dXC8riAZdv0+O20DIAXxSZpXKlMes/CzPcGdfKbfv2UWa4iyYvJ0dD3fzv9zJM/zOZZasHvINTHz0MYQtopkXV3ZSml6rMzQPg5Rl4+QJLj4yoQUKoxtYE6/nfiXNjuAsvZuZrplmvnhj60MRHof/5JoIGibOHFswpXtGhbAqpp1JOVF81kgTbw/zvEQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=ibm.com; dmarc=pass action=none header.from=ibm.com; dkim=pass header.d=ibm.com; arc=none Received: from CH2PR15MB3544.namprd15.prod.outlook.com (2603:10b6:610:5::26) by DM4PR15MB6108.namprd15.prod.outlook.com (2603:10b6:8:190::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6064.27; Thu, 2 Feb 2023 06:35:45 +0000 Received: from CH2PR15MB3544.namprd15.prod.outlook.com ([fe80::1e54:c91e:9426:8880]) by CH2PR15MB3544.namprd15.prod.outlook.com ([fe80::1e54:c91e:9426:8880%5]) with mapi id 15.20.6043.038; Thu, 2 Feb 2023 06:35:45 +0000 From: Aditya Kamath1 To: Ulrich Weigand , "simark@simark.ca" , "gdb-patches@sourceware.org" , Aditya Kamath1 CC: Sangamesh Mallayya Subject: Re: [PATCH] 0001-Fix-multi-thread-debug-bug-in-AIX.patch Thread-Topic: [PATCH] 0001-Fix-multi-thread-debug-bug-in-AIX.patch Thread-Index: AQHY6DximDPpCqTL9kGyFvcEZokFBq4jlIiAgBFljYeAAA2HgIAIORaygAMrdQCACMPAdYADi8KAgAAbf+aAABUYgIAADhDtgAjHItiAAgYnAIACq/WKgAVsGwCABC6K8oAAZcYAgAq8WQ+AADoMgIAFnB/fgAUxEICABkBkK4AWHiQAgAFvY+iAAawUgIADF3ySgAshzACACvn7HoAI6B4pgAADGXM= Date: Thu, 2 Feb 2023 06:35:45 +0000 Message-ID: References: <0866c91331b08f2870fad6e6a13fbcd1a9823b48.camel@de.ibm.com> <5df6ab523034d1997ffda5bb06c3bd87777dcccb.camel@de.ibm.com> <0dba07cfad3da44c0281c53702d73f807bca7d06.camel@de.ibm.com> <5956432ab1e0eedc8f65e01d3793a80ccf3a3a1f.camel@de.ibm.com> <139ff3da5e35905c963869569bebf280733740c2.camel@de.ibm.com> <8302c3570292b864ab21176e58bdee546f6e4544.camel@de.ibm.com> <5324a4027099ed44a32b3de8db71df875e034deb.camel@de.ibm.com> <37f1252e8d8bc1bad3f7a4ac9b38749ee6791e17.camel@de.ibm.com> In-Reply-To: Accept-Language: en-IN, en-US Content-Language: en-IN X-MS-Has-Attach: yes X-MS-TNEF-Correlator: msip_labels: x-ms-publictraffictype: Email x-ms-traffictypediagnostic: CH2PR15MB3544:EE_|DM4PR15MB6108:EE_ x-ms-office365-filtering-correlation-id: 3aa2eba7-d04d-4520-3d1c-08db04e7b6a1 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: wkynD0IFSyy+044sAHfhHU9G9qX/cbXnewc6UxxQPe9IYXbmblOK/XXFMQ0kaLTAPDVnI8roazjATrbzbwNpnVr/to9nGaHpYdFP5hDToX1SD0GqS5RL4wDePjlfoLIivUUPR0ggY2kqr26n0qQzsmD4woidXn3zjaA0G2KeFXVrNmAlqugU2k5fFeHn8BmKBp0mzmz5adLisqD2e3QDBrXx3fcuZZDkkmah5qtJS5DGesX03/vkNpdtBjnsPQMAaeipmpFpdIQsw5wYke4L0j9sONIjg6/R1eLlVrosRR8ksTtg/Pk9i2ILwAHspEK+YbLgVExI23sH0uLCYvrpwgu91Hvx07lGfAAxdMOgKeZZjXH79E6L++nEuRSSkHbmdxfZDb+I4JTRMN8Pmb0EU1L+q1t0W/dxLadATxi6K/gIvTMAWjcjakQVnZjxrNmC2pJ9dZDbYRTWwWrX8EgvKwbSYEjRLF9Etw0DCGOTcfWusURjj2YwN1/cXx7/8qA3xZwpxANdcG4bT+CsWmYRg3aWvwJUnbaqrLxXZWMHr36PKbxwb3YXmm3b3BYaDURXMpQYvr3jo1vqoku5Ssclt9UVujaLnPEJ8fypcFSXsMSjDQyggQyiM7RB/XLYzeODlR8AwPgPwg3b2Y0bkKriVZ9q7hWC16NwslUK0BTxQocte0gRmGDnOLq8BJCIvrwg2DTb8F6v/O7wIVlUZ46U4w== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CH2PR15MB3544.namprd15.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230025)(396003)(376002)(39860400002)(366004)(136003)(346002)(451199018)(38070700005)(55016003)(83380400001)(99936003)(122000001)(19627405001)(38100700002)(4326008)(91956017)(76116006)(66946007)(66476007)(30864003)(66446008)(8676002)(66556008)(64756008)(52536014)(86362001)(5660300002)(2906002)(41300700001)(8936002)(71200400001)(7696005)(478600001)(6506007)(2940100002)(110136005)(316002)(186003)(53546011)(9686003)(33656002)(579004)(559001);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?XwVAUnVBEF3WAYbUEhp2bP4TgsZJxi3QdKZzjHc2fmUmEFJwLJtOTIyPoh42?= =?us-ascii?Q?nJOM5Ik5MR3OTzKI7K2Vjfzt7FmW69rvlAZEefhBB5AhCWycUPPZvNEXOAzh?= =?us-ascii?Q?acnjKVzCVQuQiH1yG62jJlzTS8sU5EwAShOgTg/UgWZv8MzJf62YEbEh4mtS?= =?us-ascii?Q?neeP3TSG7OKxvLI9sEP+8tRX2hxp7KS1y2ci/YAm0O78STaVC0DRBdHFm5pw?= =?us-ascii?Q?ZX7mQqoZhMnn/0pDpBbPEMhKJG6X46WpRSyU9Bpy2fA8XPtTfNf8u0W2zdq8?= =?us-ascii?Q?L4O9CRCMcG4ylHBaFmr31ILPv7ijJOm0xiLzuAitgOVtMGghTIvY3nQ2EuLw?= =?us-ascii?Q?DDALGEE58D3uVO5LwJb7M7t/oaY6MLGo8vjbkz5fpdocl/8GACELOqzEd/5C?= =?us-ascii?Q?2Z8aVq5HiCMKe/v8Wn80exxANmDg8QvMFDmX08UiikO1NzmDqkNd9N0nKhY1?= =?us-ascii?Q?ZokqwEv+iHpyybcQoODQ5VP8wYaO5tu+8CQVIa9g4ygFVyl6tXtHXfs0YQst?= =?us-ascii?Q?DXL+CieJGtYyoH2mYIcjPhOHjXtEqzd811ixWsrltsX4q0ConT5dHHXJ+m/s?= =?us-ascii?Q?7jzyCRquvqXP6syJZAp9IkS+Lkbrf3TGb+u3ecWJOT9UejG0eVZnmRQLMvcU?= =?us-ascii?Q?Mokv3mHkQ9cFw1hzEpYrrnHpdgpsxDqtIG6Rt0lIz2tQOKMvuO75V6xYAANL?= =?us-ascii?Q?aH89+4Jt6IXMfwFo3Q0M8w0iO/w4wxbt1tPHuUNBzVIzIjBF5hyo7kPzqmbN?= =?us-ascii?Q?hFqkZLIBmRMgZwBorenFhNJmBhnWOMlzlThAqLD3tHjQ1fwsegjkSIr59qk3?= =?us-ascii?Q?8yKnpqL8Y/J2pJ+p8ZJn1P4sc7XmEu9KaTOniYw/Iq5qRytDx6XZrXDLpKvs?= =?us-ascii?Q?eCoE4sqmITQlezu2NyRQnSJF1y+ro0TXCemDwvTL6IVgvS8m24r7xlpxKfak?= =?us-ascii?Q?kVOdbMRv6REEGR4myWfh/rjhXAlcj53obH0PjUW9fLRNb9xce8hjN30/F/op?= =?us-ascii?Q?Ne93ASykgsRo4saiUqFOYRM6YPTw+3ggNiz3zInT1Vl3Ze06+D3kCci4F5P+?= =?us-ascii?Q?1RCn/4jBmzbJEgT1H/AW5ixr0QCGGMO+8JjHyQXZfB8cw7SemFvSl1VqrD1W?= =?us-ascii?Q?ct/5U8CfQUIH5Mug5lv36A5a509U9hXYQ+cj6/eN3GuNqAaR01zucy7C25SP?= =?us-ascii?Q?IrvpBeNoqCw5jFKUUXNlfo+PLk+d9BqJtzKOo9jU4IYJIwaV29OQEY1ZoZIb?= =?us-ascii?Q?RZTbL582Ffr7VTxFblXibNQZveLNE/nfmi7NpVTuZsD3tqofA3XV+tUrxozs?= =?us-ascii?Q?uiUV9QrLc3F1NQrcuUZbETmydtwJj0inWsYPn72qOD43lqhfeZT37oc9cmUG?= =?us-ascii?Q?u7Wbkhd146wrWJ2CtdMgO20+vcSpKh7jyfqkbmbHcXgPHP/g2mQZr3xF7KSr?= =?us-ascii?Q?D1kGxVpbi02PsQzB0Sgcs638SewCW+/keiVxD5h/wpb9Gs+6ZUdoClRbsn5g?= =?us-ascii?Q?MWwKM8m9PpXphxaw5TghHkJd0fFy4B57ntO29YJEKp0NewPzZssdIW+NU+Cx?= =?us-ascii?Q?9LxDLCRFH9bcD62pAr2ubyJUPpGJ7wqIrV8RkCmdNI0FLXttqmth2ZdZD/wS?= =?us-ascii?Q?4A5zlSgg2OMAuBw3IHB5k167Rj3Bh3ajN9Ip4XcXcxk4?= Content-Type: multipart/mixed; boundary="_004_CH2PR15MB35449137854F561F1EA7DE04D6D69CH2PR15MB3544namp_" MIME-Version: 1.0 X-OriginatorOrg: ibm.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: CH2PR15MB3544.namprd15.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3aa2eba7-d04d-4520-3d1c-08db04e7b6a1 X-MS-Exchange-CrossTenant-originalarrivaltime: 02 Feb 2023 06:35:45.0721 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: fcf67057-50c9-4ad4-98f3-ffca64add9e9 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: iedh9/ZmuEBYBuf8S9T8ub6w8/OGjLyTWoJWU+zRW1Hv3XQPHk+feAJQcFyVnPFH6cHCcfrQnJQOevKiSrrxdA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM4PR15MB6108 X-Proofpoint-GUID: 0ektmymxWfk-T2iimDWGWEKtccM8xC35 X-Proofpoint-ORIG-GUID: 0ektmymxWfk-T2iimDWGWEKtccM8xC35 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.219,Aquarius:18.0.930,Hydra:6.0.562,FMLib:17.11.122.1 definitions=2023-02-01_15,2023-01-31_01,2022-06-22_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 bulkscore=0 phishscore=0 spamscore=0 adultscore=0 mlxlogscore=999 mlxscore=0 malwarescore=0 impostorscore=0 priorityscore=1501 lowpriorityscore=0 clxscore=1015 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2212070000 definitions=main-2302020061 X-Spam-Status: No, score=-2.9 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,HTML_MESSAGE,RCVD_IN_MSPIKE_H2,SPF_HELO_NONE,SPF_NONE,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: --_004_CH2PR15MB35449137854F561F1EA7DE04D6D69CH2PR15MB3544namp_ Content-Type: multipart/alternative; boundary="_000_CH2PR15MB35449137854F561F1EA7DE04D6D69CH2PR15MB3544namp_" --_000_CH2PR15MB35449137854F561F1EA7DE04D6D69CH2PR15MB3544namp_ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Hi Tom, Ulrich and community, I made a mistake by not removing a commented line in the last patch. I apol= ogise for the same. Kindly ignore the same. Thank you for the feedback for the fix of this bug. Please find attached th= e patch. {See: 0001-Fix-multi-thread-debug-bug-in-AIX.patch}. So, I have fixed the bug and it works alright. Please find the test program= , output with patch and without patch pasted below this email. >> We now have all variables {pd_able, pd_active and pd_session} now in a >> map of process ID and structure. This will help us make AIX GDB code >> easy to manage them per process in the aix-thread.c file. >I don't really know what this is about, but it's probably better to >attach the data directly to the inferior using the registry system. >(You can't use private_inferior as apparently that's reserved for the >process stratum.) >Search for registry for some examples. >It's better to pass in a ptid or even the aix_thread_variables object >itself than to rely on globals in low-level functions like this. So, I have taken care of this. Now we use the registry. Thank you for this = suggestion. I was not knowing this. This is a very nice feature. >> Secondly, in the function pid_to_str () there is a beneath () call, >> which is why I had to put this function in rs6000-aix-nat.c file. >I wonder why it's necessary, as it seems to me that >aix_thread_target::pid_to_str should have already handled the 'thread' >case, so the inherited method ought to be good enough. This I have removed. I made a mistake while analysing this solution. Thank = you for pointing it out. It works without it. Kindly check the output below. >Is there an existing gdb test case that exercises this code? >If not then it seems like a new test is warranted. This I am not aware of at least when I tried finding. What we need is a tes= t case to check if the shared library is loaded for every new inferior born= and the top target is set correctly in case of thread debugging. If something exists, I would like to know. >> + return object_bfd; >> + it++; >This doesn't look right to me at all. Using a global means that BFDs >from one inferior might "leak" to another, based solely on whether a >certain name was ever seen. Also nothing ever cleans out the global >vector. >It's better to attach this data to the relevant BFD using the registry >system, and not use a global at all. So we already attach this data using the lines here in the same function. std::string fname =3D string_printf ("%s%s", bfd_get_filename (archive_bfd.get ()), sep); bfd_set_filename (object_bfd.get (), fname.c_str ()); All we need to the right match for the name of the shared library. So, we a= lready have a pathname variable. I used it and removed the vector. Kindly s= ee it in the patch. You were right. There is nothing that could have clean = that vector. Kindly give me feedback if we can do anything better or is incorrect. If no= t, kindly push this patch so that AIX folks can have a better debugging exp= erience. Have a nice day ahead. Thanks and regards, Aditya. ------------------------------------------- Code:- #include #include #include #include #include pthread_barrier_t barrier; #define NUM_THREADS 2 void * thread_function (void *arg) { /* This ensures that the breakpoint is only hit after both threads are created, so the test can always switch to the non-event thread when the breakpoint triggers. */ pthread_barrier_wait (&barrier); pid_t child; child =3D fork (); if (child > 0) printf ("I am parent \n"); else { child =3D fork (); if (child > 0) printf ("I am child \n"); else printf ("I am grandchild \n"); } while (1); /* break here */ } int main (void) { int i; pthread_t thread[NUM_THREADS]; alarm (300); pthread_barrier_init (&barrier, NULL, NUM_THREADS); for (i =3D 0; i < NUM_THREADS; i++) { int res; res =3D pthread_create (&thread[i], NULL, thread_function, NULL); assert (res =3D=3D 0); } while (1) { sleep (15); } return 0; } ------------------------ Output with patch:- Reading symbols from /home/aditya/gdb_tests/ultimate-multi-thread-fork... (gdb) set detach-on-fork off (gdb) r Starting program: /home/aditya/gdb_tests/ultimate-multi-thread-fork [New Thread 258] [New Thread 515] [New inferior 2 (process 15728962)] I am parent [New inferior 3 (process 20382144)] I am parent ^C Thread 1.1 received signal SIGINT, Interrupt. [Switching to Thread 1] 0xd0595fb0 in _p_nsleep () from /usr/lib/libpthread.a(shr_xpg5.o) (gdb) info threads Id Target Id Frame * 1.1 Thread 1 (tid 34144675, running) 0xd0595fb0 in _p_nsleep () from /usr/lib/libpthread.a(shr_xpg5.o) 1.2 Thread 258 (tid 30146951, running) thread_function (arg=3D0x0) at /home/aditya/gdb_tests/ultimate-multi-thread-fork.c:32 1.3 Thread 515 (tid 37159321, running) thread_function (arg=3Dwarning: (= Internal error: pc 0x0 in read in psymtab, but not in symtab.) 0x0) at /home/aditya/gdb_tests/ultimate-multi-thread-fork.c:32 2.1 process 15728962 0xd0594fc8 in _sigsetmask () from /usr/lib/libpthread.a(shr_xpg5.o) 3.1 process 20382144 0xd0594fc8 in _sigsetmask () from /usr/lib/libpthread.a(shr_xpg5.o) (gdb) info sharedlibrary =46rom To Syms Read Shared Object Library 0xd05bc124 0xd05bf194 Yes (*) /usr/lib/libpthreads.a(shr_comm.o) 0xd05bb240 0xd05bb9a1 Yes (*) /usr/lib/libcrypt.a(shr.o) 0xd0576180 0xd05ba731 Yes (*) /usr/lib/libpthread.a(shr_xpg5.o) 0xd0100e00 0xd0575123 Yes (*) /usr/lib/libc.a(shr.o) (*): Shared library is missing debugging information. (gdb) inferior 2 [Switching to inferior 2 [process 15728962] (/home/aditya/gdb_tests/ultimat= e-multi-thread-fork)] [Switching to thread 2.1 (process 15728962)] #0 0xd0594fc8 in _sigsetmask () from /usr/lib/libpthread.a(shr_xpg5.o) ---------------------------- Output without patch:- Reading symbols from /home/aditya/gdb_tests/ultimate-multi-thread-fork... (gdb) set detach-on-fork off (gdb) r Starting program: /home/aditya/gdb_tests/ultimate-multi-thread-fork [New Thread 1] [New Thread 258] [New Thread 515] [New inferior 2 (process 11731200)] I am parent [New inferior 3 (process 16843200)] I am parent ^C Thread 1.1 received signal SIGINT, Interrupt. 0xd0595fb0 in _p_nsleep () from /usr/lib/libpthread.a(shr_xpg5.o) (gdb) inferior 2 [Switching to inferior 2 [process 11731200] (/home/aditya/gdb_tests/ultimat= e-multi-thread-fork)] [Switching to thread 2.1 (process 11731200)] #0 0xd0594fc8 in ?? () (gdb) info threads Id Target Id Frame 1.1 process 15270316 0xd0595fb0 in _p_nsleep () from /usr/lib/libpthread.a(shr_xpg5.o) 1.2 process 15270316 0xd0595fb0 in _p_nsleep () from /usr/lib/libpthread.a(shr_xpg5.o) 1.3 process 15270316 0xd0595fb0 in _p_nsleep () from /usr/lib/libpthread.a(shr_xpg5.o) 1.4 process 15270316 0xd0595fb0 in _p_nsleep () from /usr/lib/libpthread.a(shr_xpg5.o) * 2.1 process 11731200 0xd0594fc8 in ?? () 3.1 process 16843200 0xd0594fc8 in ?? () (gdb) info sharedlibrary warning: "/usr/lib/libpthreads.a": member "shr_comm.o" missing. warning: "/usr/lib/libcrypt.a": member "shr.o" missing. warning: "/usr/lib/libpthread.a": member "shr_xpg5.o" missing. warning: "/usr/lib/libc.a": member "shr.o" missing. warning: Could not load shared library symbols for 4 libraries, e.g. /usr/l= ib/libpthreads.a(shr_comm.o). Use the "info sharedlibrary" command to see the complete listing. Do you need "set solib-search-path" or "set sysroot"? =46rom To Syms Read Shared Object Library No /usr/lib/libpthreads.a(shr_comm.o) No /usr/lib/libcrypt.a(shr.o) No /usr/lib/libpthread.a(shr_xpg5.o) No /usr/lib/libc.a(shr.o) (gdb) ________________________________ From: Gdb-patches on behalf of Aditya Kamath1 via Gdb-patches Sent: 02 February 2023 11:54 To: Ulrich Weigand ; simark@simark.ca ; gdb-patches@sourceware.org Cc: Sangamesh Mallayya Subject: [EXTERNAL] Re: [PATCH] 0001-Fix-multi-thread-debug-bug-in-AIX.patch Hi Tom, Ulrich and community, Thank you for the feedback for the fix of this bug. Please find attached th= e patch. {See: 0001-Fix-multi-thread-debug-bug-in-AIX.patch}. So, I have fixed the bug and it works alright. Please find the test program= , output with patch and without patch pasted below this email. >> We now have all variables {pd_able, pd_active and pd_session} now in a >> map of process ID and structure. This will help us make AIX GDB code >> easy to manage them per process in the aix-thread.c file. >I don't really know what this is about, but it's probably better to >attach the data directly to the inferior using the registry system. >(You can't use private_inferior as apparently that's reserved for the >process stratum.) >Search for registry for some examples. >It's better to pass in a ptid or even the aix_thread_variables object >itself than to rely on globals in low-level functions like this. So, I have taken care of this. Now we use the registry. Thank you for this = suggestion. I was not knowing this. This is a very nice feature. >> Secondly, in the function pid_to_str () there is a beneath () call, >> which is why I had to put this function in rs6000-aix-nat.c file. >I wonder why it's necessary, as it seems to me that >aix_thread_target::pid_to_str should have already handled the 'thread' >case, so the inherited method ought to be good enough. This I have removed. I made a mistake while analysing this solution. Thank = you for pointing it out. It works without it. Kindly check the output below. >Is there an existing gdb test case that exercises this code? >If not then it seems like a new test is warranted. This I am not aware of at least when I tried finding. What we need is a tes= t case to check if the shared library is loaded for every new inferior born= and the top target is set correctly in case of thread debugging. If something exists, I would like to know. >> + return object_bfd; >> + it++; >This doesn't look right to me at all. Using a global means that BFDs >from one inferior might "leak" to another, based solely on whether a >certain name was ever seen. Also nothing ever cleans out the global >vector. >It's better to attach this data to the relevant BFD using the registry >system, and not use a global at all. So we already attach this data using the lines here in the same function. std::string fname =3D string_printf ("%s%s", bfd_get_filename (archive_bfd.get ()), sep); bfd_set_filename (object_bfd.get (), fname.c_str ()); All we need to the right match for the name of the shared library. So, we a= lready have a pathname variable. I used it and removed the vector. Kindly s= ee it in the patch. You were right. There is nothing that could have clean = that vector. Kindly give me feedback if we can do anything better or is incorrect. If no= t, kindly push this patch so that AIX folks can have a better debugging exp= erience. Have a nice day ahead. Thanks and regards, Aditya. ------------------------------------------- Code:- #include #include #include #include #include pthread_barrier_t barrier; #define NUM_THREADS 2 void * thread_function (void *arg) { /* This ensures that the breakpoint is only hit after both threads are created, so the test can always switch to the non-event thread when the breakpoint triggers. */ pthread_barrier_wait (&barrier); pid_t child; child =3D fork (); if (child > 0) printf ("I am parent \n"); else { child =3D fork (); if (child > 0) printf ("I am child \n"); else printf ("I am grandchild \n"); } while (1); /* break here */ } int main (void) { int i; pthread_t thread[NUM_THREADS]; alarm (300); pthread_barrier_init (&barrier, NULL, NUM_THREADS); for (i =3D 0; i < NUM_THREADS; i++) { int res; res =3D pthread_create (&thread[i], NULL, thread_function, NULL); assert (res =3D=3D 0); } while (1) { sleep (15); } return 0; } ------------------------ Output with patch:- Reading symbols from /home/aditya/gdb_tests/ultimate-multi-thread-fork... (gdb) set detach-on-fork off (gdb) r Starting program: /home/aditya/gdb_tests/ultimate-multi-thread-fork [New Thread 258] [New Thread 515] [New inferior 2 (process 15728962)] I am parent [New inferior 3 (process 20382144)] I am parent ^C Thread 1.1 received signal SIGINT, Interrupt. [Switching to Thread 1] 0xd0595fb0 in _p_nsleep () from /usr/lib/libpthread.a(shr_xpg5.o) (gdb) info threads Id Target Id Frame * 1.1 Thread 1 (tid 34144675, running) 0xd0595fb0 in _p_nsleep () from /usr/lib/libpthread.a(shr_xpg5.o) 1.2 Thread 258 (tid 30146951, running) thread_function (arg=3D0x0) at /home/aditya/gdb_tests/ultimate-multi-thread-fork.c:32 1.3 Thread 515 (tid 37159321, running) thread_function (arg=3Dwarning: (= Internal error: pc 0x0 in read in psymtab, but not in symtab.) 0x0) at /home/aditya/gdb_tests/ultimate-multi-thread-fork.c:32 2.1 process 15728962 0xd0594fc8 in _sigsetmask () from /usr/lib/libpthread.a(shr_xpg5.o) 3.1 process 20382144 0xd0594fc8 in _sigsetmask () from /usr/lib/libpthread.a(shr_xpg5.o) (gdb) info sharedlibrary =46rom To Syms Read Shared Object Library 0xd05bc124 0xd05bf194 Yes (*) /usr/lib/libpthreads.a(shr_comm.o) 0xd05bb240 0xd05bb9a1 Yes (*) /usr/lib/libcrypt.a(shr.o) 0xd0576180 0xd05ba731 Yes (*) /usr/lib/libpthread.a(shr_xpg5.o) 0xd0100e00 0xd0575123 Yes (*) /usr/lib/libc.a(shr.o) (*): Shared library is missing debugging information. (gdb) inferior 2 [Switching to inferior 2 [process 15728962] (/home/aditya/gdb_tests/ultimat= e-multi-thread-fork)] [Switching to thread 2.1 (process 15728962)] #0 0xd0594fc8 in _sigsetmask () from /usr/lib/libpthread.a(shr_xpg5.o) ---------------------------- Output without patch:- Reading symbols from /home/aditya/gdb_tests/ultimate-multi-thread-fork... (gdb) set detach-on-fork off (gdb) r Starting program: /home/aditya/gdb_tests/ultimate-multi-thread-fork [New Thread 1] [New Thread 258] [New Thread 515] [New inferior 2 (process 11731200)] I am parent [New inferior 3 (process 16843200)] I am parent ^C Thread 1.1 received signal SIGINT, Interrupt. 0xd0595fb0 in _p_nsleep () from /usr/lib/libpthread.a(shr_xpg5.o) (gdb) inferior 2 [Switching to inferior 2 [process 11731200] (/home/aditya/gdb_tests/ultimat= e-multi-thread-fork)] [Switching to thread 2.1 (process 11731200)] #0 0xd0594fc8 in ?? () (gdb) info threads Id Target Id Frame 1.1 process 15270316 0xd0595fb0 in _p_nsleep () from /usr/lib/libpthread.a(shr_xpg5.o) 1.2 process 15270316 0xd0595fb0 in _p_nsleep () from /usr/lib/libpthread.a(shr_xpg5.o) 1.3 process 15270316 0xd0595fb0 in _p_nsleep () from /usr/lib/libpthread.a(shr_xpg5.o) 1.4 process 15270316 0xd0595fb0 in _p_nsleep () from /usr/lib/libpthread.a(shr_xpg5.o) * 2.1 process 11731200 0xd0594fc8 in ?? () 3.1 process 16843200 0xd0594fc8 in ?? () (gdb) info sharedlibrary warning: "/usr/lib/libpthreads.a": member "shr_comm.o" missing. warning: "/usr/lib/libcrypt.a": member "shr.o" missing. warning: "/usr/lib/libpthread.a": member "shr_xpg5.o" missing. warning: "/usr/lib/libc.a": member "shr.o" missing. warning: Could not load shared library symbols for 4 libraries, e.g. /usr/l= ib/libpthreads.a(shr_comm.o). Use the "info sharedlibrary" command to see the complete listing. Do you need "set solib-search-path" or "set sysroot"? =46rom To Syms Read Shared Object Library No /usr/lib/libpthreads.a(shr_comm.o) No /usr/lib/libcrypt.a(shr.o) No /usr/lib/libpthread.a(shr_xpg5.o) No /usr/lib/libc.a(shr.o) (gdb) ________________________________ From: Gdb-patches on behalf of Aditya Kamath1 via Gdb-patches Sent: 27 January 2023 20:10 To: Ulrich Weigand ; simark@simark.ca ; gdb-patches@sourceware.org Cc: Sangamesh Mallayya Subject: [EXTERNAL] Re: [PATCH] 0001-Fix-multi-thread-debug-bug-in-AIX.patch Hi Ulrich and community, Thank you for the feedback for the fix of this bug. Please find attached th= e patch. {See: 0001-Fix-multi-thread-debug-bug-in-AIX.patch} So, I have fixed the bug and it works alright. Please find the test program= , output with patch and without patch pasted below this email. >+ if (s.find (member_name) !=3D std::string::npos) >+ { >+ return object_bfd; >+ } >This matches the member name *anywhere* in the full >filename, >which could lead to spurious matches, I think. The test >should be more specific. This I have taken care in the patch. There are a few changes for which I want to explain below. We now have all variables {pd_able, pd_active and pd_session} now in a map = of process ID and structure. This will help us make AIX GDB code easy to ma= nage them per process in the aix-thread.c file. Secondly, in the function pid_to_str () there is a beneath () call, which i= s why I had to put this function in rs6000-aix-nat.c file. Third thing is previously if there was no object file, we would use pd_disa= ble () to disable thread debugging. This is incorrect now that we support m= ultiple inferiors. Since we rely on inferior_ptid with new object file func= tion till a point, we must disable only when we mourn the inferior or a pro= cess dies. Otherwise, there is every chance we will disable thread debuggin= g for a wrong inferior that can be currently inferior_ptid. It also creates= a mess disabling the pd_active for the wrong inferior in cases where a new= inferior is born who object file is being loaded. This change can be seen = in the patch. I have written comments for the remaining changes in the patch. Kindly give me feedback if we can do anything better or is incorrect. If no= t, kindly push this patch so that AIX folks can have a better debugging exp= erience. Have a nice day ahead. Thanks and regards, Aditya. ------------------------------------------- Code:- #include #include #include #include #include pthread_barrier_t barrier; #define NUM_THREADS 2 void * thread_function (void *arg) { /* This ensures that the breakpoint is only hit after both threads are created, so the test can always switch to the non-event thread when the breakpoint triggers. */ pthread_barrier_wait (&barrier); pid_t child; child =3D fork (); if (child > 0) printf ("I am parent \n"); else { child =3D fork (); if (child > 0) printf ("I am child \n"); else printf ("I am grandchild \n"); } while (1); /* break here */ } int main (void) { int i; pthread_t thread[NUM_THREADS]; alarm (300); pthread_barrier_init (&barrier, NULL, NUM_THREADS); for (i =3D 0; i < NUM_THREADS; i++) { int res; res =3D pthread_create (&thread[i], NULL, thread_function, NULL); assert (res =3D=3D 0); } while (1) { sleep (15); } return 0; } --------------------------------------------------- Output with patch applied:- Reading symbols from /home/aditya/gdb_tests/ultimate-multi-thread-fork... (gdb) set detach-on-fork off (gdb) r Starting program: /home/aditya/gdb_tests/ultimate-multi-thread-fork [New Thread 258] [New Thread 515] [New inferior 2 (Process 17498448)] I am parent [New inferior 3 (Process 11731454)] I am parent ^C Thread 1.1 received signal SIGINT, Interrupt. [Switching to Thread 1] 0xd0595fb0 in _p_nsleep () from /usr/lib/libpthread.a(shr_xpg5.o) (gdb) inferior 2 [Switching to inferior 2 [Process 17498448] (/home/aditya/gdb_tests/ultimat= e-multi-thread-fork)] [Switching to thread 2.1 (Process 17498448)] #0 0xd0594fc8 in _sigsetmask () from /usr/lib/libpthread.a(shr_xpg5.o) (gdb) info threads Id Target Id Frame 1.1 Thread 1 (tid 25231849, running) 0xd0595fb0 in _p_nsleep () from /usr/lib/libpthread.a(shr_xpg5.o) 1.2 Thread 258 (tid 33227061, running) thread_function (arg=3D0x0) at /home/aditya/gdb_tests/ultimate-multi-thread-fork.c:32 1.3 Thread 515 (tid 23069149, running) thread_function (arg=3Dwarning: (= Internal error: pc 0x0 in read in psymtab, but not in symtab.) 0x0) at /home/aditya/gdb_tests/ultimate-multi-thread-fork.c:32 * 2.1 Process 17498448 0xd0594fc8 in _sigsetmask () from /usr/lib/libpthread.a(shr_xpg5.o) 3.1 Process 11731454 0xd0594fc8 in _sigsetmask () from /usr/lib/libpthread.a(shr_xpg5.o) (gdb) info sharedlibrary =46rom To Syms Read Shared Object Library 0xd05bc124 0xd05bf194 Yes (*) /usr/lib/libpthreads.a(shr_comm.o) 0xd05bb240 0xd05bb9a1 Yes (*) /usr/lib/libcrypt.a(shr.o) 0xd0576180 0xd05ba731 Yes (*) /usr/lib/libpthread.a(shr_xpg5.o) 0xd0100e00 0xd0575123 Yes (*) /usr/lib/libc.a(shr.o) (*): Shared library is missing debugging information. -------------------------------------------------------- Output without patch:- Reading symbols from /home/aditya/gdb_tests/ultimate-multi-thread-fork... (gdb) set detach-on-fork off (gdb) r Starting program: /home/aditya/gdb_tests/ultimate-multi-thread-fork [New Thread 1] [New Thread 258] [New Thread 515] [New inferior 2 (process 11731200)] I am parent [New inferior 3 (process 16843200)] I am parent ^C Thread 1.1 received signal SIGINT, Interrupt. 0xd0595fb0 in _p_nsleep () from /usr/lib/libpthread.a(shr_xpg5.o) (gdb) inferior 2 [Switching to inferior 2 [process 11731200] (/home/aditya/gdb_tests/ultimat= e-multi-thread-fork)] [Switching to thread 2.1 (process 11731200)] #0 0xd0594fc8 in ?? () (gdb) info threads Id Target Id Frame 1.1 process 15270316 0xd0595fb0 in _p_nsleep () from /usr/lib/libpthread.a(shr_xpg5.o) 1.2 process 15270316 0xd0595fb0 in _p_nsleep () from /usr/lib/libpthread.a(shr_xpg5.o) 1.3 process 15270316 0xd0595fb0 in _p_nsleep () from /usr/lib/libpthread.a(shr_xpg5.o) 1.4 process 15270316 0xd0595fb0 in _p_nsleep () from /usr/lib/libpthread.a(shr_xpg5.o) * 2.1 process 11731200 0xd0594fc8 in ?? () 3.1 process 16843200 0xd0594fc8 in ?? () (gdb) info sharedlibrary warning: "/usr/lib/libpthreads.a": member "shr_comm.o" missing. warning: "/usr/lib/libcrypt.a": member "shr.o" missing. warning: "/usr/lib/libpthread.a": member "shr_xpg5.o" missing. warning: "/usr/lib/libc.a": member "shr.o" missing. warning: Could not load shared library symbols for 4 libraries, e.g. /usr/l= ib/libpthreads.a(shr_comm.o). Use the "info sharedlibrary" command to see the complete listing. Do you need "set solib-search-path" or "set sysroot"? =46rom To Syms Read Shared Object Library No /usr/lib/libpthreads.a(shr_comm.o) No /usr/lib/libcrypt.a(shr.o) No /usr/lib/libpthread.a(shr_xpg5.o) No /usr/lib/libc.a(shr.o) (gdb) ________________________________ From: Ulrich Weigand Sent: 20 January 2023 20:14 To: simark@simark.ca ; Aditya Kamath1 ; gdb-patches@sourceware.org Cc: Sangamesh Mallayya Subject: Re: [PATCH] 0001-Fix-multi-thread-debug-bug-in-AIX.patch Aditya Kamath1 wrote: >Inorder to resolve the same I request for one information. How can we iter= ate_over_threads >of a particular process. What is that function. Is there any built-in avai= lable?? >Kindly let me know and that should solve this issue. Instead of iterate_over_threads you could use the all_threads() iterator di= rectly; this can be specialized to only return threads of one inferior like this: for (thread_info *tp : all_threads (proc_target, ptid_t (pid))) { ... } >Also kindly give me feedback on this patch if I need to change anything. I think this change in solib-aix.c is not quite correct: + std::string s =3D bfd_get_filename (object_bfd.get ()); + if (s.find (member_name) !=3D std::string::npos) + { + return object_bfd; + } This matches the member name *anywhere* in the full filename, which could lead to spurious matches, I think. The test should be more specific. Bye, Ulrich --_000_CH2PR15MB35449137854F561F1EA7DE04D6D69CH2PR15MB3544namp_-- --_004_CH2PR15MB35449137854F561F1EA7DE04D6D69CH2PR15MB3544namp_ Content-Type: application/octet-stream; name="0001-Fix-multi-thread-debug-bug-in-AIX.patch" Content-Description: 0001-Fix-multi-thread-debug-bug-in-AIX.patch Content-Disposition: attachment; filename="0001-Fix-multi-thread-debug-bug-in-AIX.patch"; size=20464; creation-date="Thu, 02 Feb 2023 06:34:48 GMT"; modification-date="Thu, 02 Feb 2023 06:34:52 GMT" Content-Transfer-Encoding: base64 RnJvbSA5NmQ1OTMxZjZlZWQ2NTlkYzNjMmY0NTZhODcxM2ExOTY5ZDE0YWM0 IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBBZGl0eWEgVmlkeWFk aGFyIEthbWF0aCA8QWRpdHlhLkthbWF0aDFAaWJtLmNvbT4KRGF0ZTogVGh1 LCAyIEZlYiAyMDIzIDAwOjMyOjE2IC0wNjAwClN1YmplY3Q6IFtQQVRDSF0g Rml4IE11bHRpIHRocmVhZCBkZWJ1ZyBidWcgZml4IGluIEFJWAoKIEluIHRo ZSByZWNlbnQgY29tbWl0IDk4ZWQyNGZiMzVkODllYjIwMTc5ZWRmNmMxMmY1 OTljN2E5ZTIyOGUgbWFkZSBieSBNci4gVG9tIHRoZXJlIGlzIGEgY2hhbmdl IGluIGFpeC10aHJlYWQuYyBmaWxlIHRoYXQgY2hhbmdlcwoKIHN0YXRpY19j YXN0IDxhaXhfdGhyZWFkX2luZm8gKj4gaW4gZ2RiIHRvIGdkYjo6Y2hlY2tl ZF9zdGF0aWNfY2FzdCA8YWl4X3RocmVhZF9pbmZvICo+CgogQUlYIGZvbGtz IHVzaW5nIHRoZSBsYXRlc3QgdmVyc2lvbiB3aWxsIG5vdCBiZSBhYmxlIHRv IGRlYnVnIG11bHRpIHRocmVhZCBwcm9ncmFtcyBhcyBhIHJlc3VsdCBvZiBp dAoKVGhlIGVycm9yIGluIEFJWCBpcyBhcyBmb2xsb3dzOi0KCmludGVybmFs LWVycm9yIGNoZWNrZWRfc3RhdGljX2Nhc3QgQXNzZXJ0aW9uIHJlc3VsdCAh PSBudWxscHRyIGZhaWxlZC4KClRoZSByZWFzb24gYmVpbmcgQUlYIHNoYXJl ZCBsaWJyYXJ5IHdlcmUgbm90IGJlaW5nIGxvYWRlZCBmb3IgYSBuZXcgaW5m ZXJpb3IgYW5kIHRvcCB0YXJnZXQgd2FzIG5vdCBzZXQgcHJvcGVybHkuCgpU aGlzIHBhdGNoIGlzIGEgZml4IGZvciB0aGUgc2FtZS4KLS0tCiBnZGIvYWl4 LXRocmVhZC5jIHwgMjc1ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKy0tLS0tLS0tLS0tLS0tCiBnZGIvc29saWItYWl4LmMgIHwgIDEwICsr CiAyIGZpbGVzIGNoYW5nZWQsIDIwNSBpbnNlcnRpb25zKCspLCA4MCBkZWxl dGlvbnMoLSkKCmRpZmYgLS1naXQgYS9nZGIvYWl4LXRocmVhZC5jIGIvZ2Ri L2FpeC10aHJlYWQuYwppbmRleCBlNTU2YzE1MzU3Ni4uYmZjN2Y5MDFkZTAg MTAwNjQ0Ci0tLSBhL2dkYi9haXgtdGhyZWFkLmMKKysrIGIvZ2RiL2FpeC10 aHJlYWQuYwpAQCAtNzAsNyArNzAsNyBAQCBzdGF0aWMgYm9vbCBkZWJ1Z19h aXhfdGhyZWFkOwogCiAvKiBSZXR1cm4gd2hldGhlciB0byB0cmVhdCBQSUQg YXMgYSBkZWJ1Z2dhYmxlIHRocmVhZCBpZC4gICovCiAKLSNkZWZpbmUgUERf VElEKHB0aWQpCShwZF9hY3RpdmUgJiYgcHRpZC50aWQgKCkgIT0gMCkKKyNk ZWZpbmUgUERfVElEKHB0aWQsIGRhdGEpCShkYXRhLT5wZF9hY3RpdmUgJiYg cHRpZC50aWQgKCkgIT0gMCkKIAogLyogU3VjY2VzcyBhbmQgZmFpbHVyZSB2 YWx1ZXMgcmV0dXJuZWQgYnkgcHRoZGIgY2FsbGJhY2tzLiAgKi8KIApAQCAt MTQ5LDE0ICsxNDksNiBAQCBzdGF0aWMgYWl4X3RocmVhZF90YXJnZXQgYWl4 X3RocmVhZF9vcHM7CiAKIHN0YXRpYyBDT1JFX0FERFIgcGRfYnJrX2FkZHI7 CiAKLS8qIFdoZXRoZXIgdGhlIGN1cnJlbnQgYXBwbGljYXRpb24gaXMgZGVi dWdnYWJsZSBieSBwdGhkYi4gICovCi0KLXN0YXRpYyBpbnQgcGRfYWJsZSA9 IDA7Ci0KLS8qIFdoZXRoZXIgYSB0aHJlYWRlZCBhcHBsaWNhdGlvbiBpcyBi ZWluZyBkZWJ1Z2dlZC4gICovCi0KLXN0YXRpYyBpbnQgcGRfYWN0aXZlID0g MDsKLQogLyogV2hldGhlciB0aGUgY3VycmVudCBhcmNoaXRlY3R1cmUgaXMg NjQtYml0LiAgCiAgICBPbmx5IHZhbGlkIHdoZW4gcGRfYWJsZSBpcyB0cnVl LiAgKi8KIApAQCAtMTkxLDkgKzE4Myw2MCBAQCBzdGF0aWMgcHRoZGJfY2Fs bGJhY2tzX3QgcGRfY2FsbGJhY2tzID0gewogICBOVUxMCiB9OwogCi0vKiBD dXJyZW50IHB0aGRiIHNlc3Npb24uICAqLworLyogQWl4IHZhcmlhYmxlIHN0 cnVjdHVyZS4gICovCitzdHJ1Y3QgYWl4X3RocmVhZF92YXJpYWJsZXMgCit7 CisgIC8qIFdoZXRoZXIgdGhlIGN1cnJlbnQgYXBwbGljYXRpb24gaXMgZGVi dWdnYWJsZSBieSBwdGhkYi4gICovCisgIGludCBwZF9hYmxlOworCisgIC8q IFdoZXRoZXIgYSB0aHJlYWRlZCBhcHBsaWNhdGlvbiBpcyBiZWluZyBkZWJ1 Z2dlZC4gICovCisgIGludCBwZF9hY3RpdmU7CisKKyAgLyogQ3VycmVudCBw dGhkYiBzZXNzaW9uLiAgKi8KKyAgcHRoZGJfc2Vzc2lvbl90IHBkX3Nlc3Np b247Cit9OworCisvKiBLZXkgdG8gb3VyIHBlci1pbmZlcmlvciBkYXRhLiAg Ki8KK3N0YXRpYyBjb25zdCByZWdpc3RyeTxpbmZlcmlvcj46OmtleTxhaXhf dGhyZWFkX3ZhcmlhYmxlcz4KKyAgYWl4X3RocmVhZF92YXJpYWJsZXNfaGFu ZGxlOworCisvKiBGdW5jdGlvbiB0byBHZXQgYWl4X3RocmVhZF92YXJpYWJs ZXMgZGF0YS4gICovCitzdGF0aWMgc3RydWN0IGFpeF90aHJlYWRfdmFyaWFi bGVzKgorZ2V0X2FpeF90aHJlYWRfdmFyaWFibGVzX2RhdGEgKHN0cnVjdCBp bmZlcmlvciAqaW5mKQoreworICBpZiAoaW5mID09IE5VTEwpCisgICAgcmV0 dXJuIE5VTEw7CisKKyAgc3RydWN0IGFpeF90aHJlYWRfdmFyaWFibGVzKiBk YXRhOworCisgIGRhdGEgPSBhaXhfdGhyZWFkX3ZhcmlhYmxlc19oYW5kbGUu Z2V0IChpbmYpOworICBpZiAoZGF0YSA9PSBOVUxMKQorICAgIGRhdGEgPSBh aXhfdGhyZWFkX3ZhcmlhYmxlc19oYW5kbGUuZW1wbGFjZSAoaW5mKTsKIAot c3RhdGljIHB0aGRiX3Nlc3Npb25fdCBwZF9zZXNzaW9uOworICByZXR1cm4g ZGF0YTsKK30KKworLyogSGVscGVyIHRvIGdldCBkYXRhIGZvciBwdGlkIGlu IGEgZnVuY3Rpb24uICAqLworCitzdGF0aWMgc3RydWN0IGFpeF90aHJlYWRf dmFyaWFibGVzKgorZ2V0X3RocmVhZF9kYXRhX2hlbHBlcl9mb3JfcHRpZCAo cHRpZF90IHB0aWQpCit7CisgIHN0cnVjdCBhaXhfdGhyZWFkX3ZhcmlhYmxl cyAqZGF0YTsKKyAgaW5mZXJpb3IgKmluZiA9IGZpbmRfaW5mZXJpb3JfcHRp ZCAoY3VycmVudF9pbmZlcmlvciAoKS0+cHJvY2Vzc190YXJnZXQgKCksCisJ CQkJCXB0aWQpOworICByZXR1cm4gZ2V0X2FpeF90aHJlYWRfdmFyaWFibGVz X2RhdGEgKGluZik7Cit9CisKKy8qIEhlbHBlciB0byBnZXQgZGF0YSBmb3Ig cGlkIGluIGEgZnVuY3Rpb24uICAqLworCitzdGF0aWMgc3RydWN0IGFpeF90 aHJlYWRfdmFyaWFibGVzKgorZ2V0X3RocmVhZF9kYXRhX2hlbHBlcl9mb3Jf cGlkIChwaWRfdCBwaWQpCit7CisgIHN0cnVjdCBhaXhfdGhyZWFkX3Zhcmlh YmxlcyAqZGF0YTsKKyAgaW5mZXJpb3IgKmluZiA9IGZpbmRfaW5mZXJpb3Jf cGlkIChjdXJyZW50X2luZmVyaW9yICgpLT5wcm9jZXNzX3RhcmdldCAoKSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaWQp OworICByZXR1cm4gZ2V0X2FpeF90aHJlYWRfdmFyaWFibGVzX2RhdGEgKGlu Zik7Cit9CiAKIC8qIFJldHVybiBhIHByaW50YWJsZSByZXByZXNlbnRhdGlv biBvZiBwdGhkZWJ1ZyBmdW5jdGlvbiByZXR1cm4KICAgIFNUQVRVUy4gICov CkBAIC0zMTYsOSArMzU5LDExIEBAIHN0YXRpYyB2b2lkCiBwaWRfdG9fcHJj IChwdGlkX3QgKnB0aWRwKQogewogICBwdGlkX3QgcHRpZDsKKyAgc3RydWN0 IGFpeF90aHJlYWRfdmFyaWFibGVzICpkYXRhOworICBkYXRhID0gZ2V0X3Ro cmVhZF9kYXRhX2hlbHBlcl9mb3JfcHRpZCAoKnB0aWRwKTsKIAogICBwdGlk ID0gKnB0aWRwOwotICBpZiAoUERfVElEIChwdGlkKSkKKyAgaWYgKFBEX1RJ RCAocHRpZCwgZGF0YSkpCiAgICAgKnB0aWRwID0gcHRpZF90IChwdGlkLnBp ZCAoKSk7CiB9CiAKQEAgLTUwOCwxNCArNTUzLDEzIEBAIHBkY19yZWFkX2Rh dGEgKHB0aGRiX3VzZXJfdCB1c2VyX2N1cnJlbnRfcGlkLCB2b2lkICpidWYs CiAgIC8qIFRoaXMgaXMgbmVlZGVkIHRvIGVsaW1pbmF0ZSB0aGUgZGVwZW5k ZW5jeSBvZiBjdXJyZW50IHRocmVhZAogICAgICB3aGljaCBpcyBudWxsIHNv IHRoYXQgdGhyZWFkIHJlYWRzIHRoZSBjb3JyZWN0IHRhcmdldCBtZW1vcnku ICAqLwogICB7Ci0gICAgc2NvcGVkX3Jlc3RvcmVfY3VycmVudF90aHJlYWQg cmVzdG9yZV9jdXJyZW50X3RocmVhZDsKKyAgICBzY29wZWRfcmVzdG9yZSBz YXZlX2luZmVyaW9yX3B0aWQgPSBtYWtlX3Njb3BlZF9yZXN0b3JlICgmaW5m ZXJpb3JfcHRpZCk7CiAgICAgLyogQmVmb3JlIHRoZSBmaXJzdCBpbmZlcmlv ciBpcyBhZGRlZCwgd2UgcGFzcyBpbmZlcmlvcl9wdGlkLnBpZCAoKQogICAg ICAgIGZyb20gcGRfZW5hYmxlICgpIHdoaWNoIGlzIDAuICBUaGVyZSBpcyBu byBuZWVkIHRvIHN3aXRjaCB0aHJlYWRzCiAgICAgICAgZHVyaW5nIGZpcnN0 IGluaXRpYWxpc2F0aW9uLiAgSW4gdGhlIHJlc3Qgb2YgdGhlIGNhbGxiYWNr cyB0aGUKICAgICAgICBjdXJyZW50IHRocmVhZCBuZWVkcyB0byBiZSBjb3Jy ZWN0LiAgKi8KICAgICBpZiAodXNlcl9jdXJyZW50X3BpZCAhPSAwKQotICAg ICAgc3dpdGNoX3RvX3RocmVhZCAoY3VycmVudF9pbmZlcmlvciAoKS0+cHJv Y2Vzc190YXJnZXQgKCksCi0JCQlwdGlkX3QgKHVzZXJfY3VycmVudF9waWQp KTsKKyAgICAgIGluZmVyaW9yX3B0aWQgPSBwdGlkX3QgKHVzZXJfY3VycmVu dF9waWQpOwogICAgIHN0YXR1cyA9IHRhcmdldF9yZWFkX21lbW9yeSAoYWRk ciwgKGdkYl9ieXRlICopIGJ1ZiwgbGVuKTsKICAgfQogICByZXQgPSBzdGF0 dXMgPT0gMCA/IFBEQ19TVUNDRVNTIDogUERDX0ZBSUxVUkU7CkBAIC02Mzks MzYgKzY4MywzMiBAQCBwY21wIChjb25zdCB2b2lkICpwMXYsIGNvbnN0IHZv aWQgKnAydikKICAgcmV0dXJuIHAxLT5wdGhpZCA8IHAyLT5wdGhpZCA/IC0x IDogcDEtPnB0aGlkID4gcDItPnB0aGlkOwogfQogCi0vKiBpdGVyYXRlX292 ZXJfdGhyZWFkcygpIGNhbGxiYWNrIGZvciBjb3VudGluZyBHREIgdGhyZWFk cy4KLQotICAgRG8gbm90IGNvdW50IHRoZSBtYWluIHRocmVhZCAod2hvc2Ug dGlkIGlzIHplcm8pLiAgVGhpcyBtYXRjaGVzCi0gICB0aGUgbGlzdCBvZiB0 aHJlYWRzIHByb3ZpZGVkIGJ5IHRoZSBwdGhyZWFkZGVidWcgbGlicmFyeSwg d2hpY2gKLSAgIGRvZXMgbm90IGluY2x1ZGUgdGhhdCBtYWluIHRocmVhZCBl aXRoZXIsIGFuZCB0aHVzIGFsbG93cyB1cwotICAgdG8gY29tcGFyZSB0aGUg dHdvIGxpc3RzLiAgKi8KKy8qIENhbGxiYWNrIGZvciBjb3VudGluZyBHREIg dGhyZWFkcyBmb3IgcHJvY2VzcyBwaWQuICAqLwogCiBzdGF0aWMgaW50Ci1n aXRlcl9jb3VudCAoc3RydWN0IHRocmVhZF9pbmZvICp0aHJlYWQsIHZvaWQg KmNvdW50cCkKK2dpdGVyX2NvdW50IChwaWRfdCBwaWQpCiB7Ci0gIGlmIChQ RF9USUQgKHRocmVhZC0+cHRpZCkpCi0gICAgKCooaW50ICopIGNvdW50cCkr KzsKLSAgcmV0dXJuIDA7CisgIGludCBnY291bnQgPSAwOworICBwcm9jZXNz X3N0cmF0dW1fdGFyZ2V0ICpwcm9jX3RhcmdldAorICAgID0gY3VycmVudF9p bmZlcmlvciAoKS0+cHJvY2Vzc190YXJnZXQgKCk7CisgIGZvciAodGhyZWFk X2luZm8gKnRwIDogYWxsX3RocmVhZHMgKHByb2NfdGFyZ2V0LCBwdGlkX3Qg KHBpZCkpKQorICAgIGdjb3VudCsrOworICByZXR1cm4gZ2NvdW50OwogfQog Ci0vKiBpdGVyYXRlX292ZXJfdGhyZWFkcygpIGNhbGxiYWNrIGZvciBhY2N1 bXVsYXRpbmcgR0RCIHRocmVhZCBwaWRzLgotCi0gICBEbyBub3QgaW5jbHVk ZSB0aGUgbWFpbiB0aHJlYWQgKHdob3NlIHRpZCBpcyB6ZXJvKS4gIFRoaXMg bWF0Y2hlcwotICAgdGhlIGxpc3Qgb2YgdGhyZWFkcyBwcm92aWRlZCBieSB0 aGUgcHRocmVhZGRlYnVnIGxpYnJhcnksIHdoaWNoCi0gICBkb2VzIG5vdCBp bmNsdWRlIHRoYXQgbWFpbiB0aHJlYWQgZWl0aGVyLCBhbmQgdGh1cyBhbGxv d3MgdXMKLSAgIHRvIGNvbXBhcmUgdGhlIHR3byBsaXN0cy4gICovCisvKiBD YWxsYmFjayBmb3IgYWNjdW11bGF0aW5nIEdEQiB0aHJlYWQgcGlkcy4gICov CiAKIHN0YXRpYyBpbnQKLWdpdGVyX2FjY3VtIChzdHJ1Y3QgdGhyZWFkX2lu Zm8gKnRocmVhZCwgdm9pZCAqYnVmcCkKK2dpdGVyX2FjY3VtICh2b2lkICpi dWZwLCBwaWRfdCBwaWQpCiB7Ci0gIGlmIChQRF9USUQgKHRocmVhZC0+cHRp ZCkpCi0gICAgewotICAgICAgKiooc3RydWN0IHRocmVhZF9pbmZvICoqKikg YnVmcCA9IHRocmVhZDsKLSAgICAgICgqKHN0cnVjdCB0aHJlYWRfaW5mbyAq KiopIGJ1ZnApKys7Ci0gICAgfQorICBwcm9jZXNzX3N0cmF0dW1fdGFyZ2V0 ICpwcm9jX3RhcmdldAorICAgID0gY3VycmVudF9pbmZlcmlvciAoKS0+cHJv Y2Vzc190YXJnZXQgKCk7CisgIGZvciAodGhyZWFkX2luZm8gKnRwIDogYWxs X3RocmVhZHMgKHByb2NfdGFyZ2V0LCBwdGlkX3QgKHBpZCkpKQorICB7Cisg ICAgKiooc3RydWN0IHRocmVhZF9pbmZvICoqKikgYnVmcCA9IHRwOworICAg ICgqKHN0cnVjdCB0aHJlYWRfaW5mbyAqKiopIGJ1ZnApKys7CisgIH0KKwog ICByZXR1cm4gMDsKIH0KIApAQCAtNzE5LDcgKzc1OSwxMCBAQCBnZXRfc2ln bmFsZWRfdGhyZWFkIChpbnQgcGlkKQogCQkgICAgc2l6ZW9mICh0aHJpbmYp LCAma3RpZCwgMSkgIT0gMSkKIAlicmVhazsKIAotICAgICAgaWYgKHRocmlu Zi50aV9jdXJzaWcgPT0gU0lHVFJBUCkKKyAgICAgIC8qIFdlIGFsc28gbmVl ZCB0byBrZWVwIGluIG1pbmQgVHJhcCBhbmQgaW50ZXJydXB0IG9yIGFueQor ICAgICAgICAgc2lnbmFsIHRoYXQgbmVlZHMgdG8gYmUgaGFuZGxlZCBpbiBw ZF91cGRhdGUgKCkuICAqLworCisgICAgICBpZiAodGhyaW5mLnRpX2N1cnNp ZykKIAlyZXR1cm4gdGhyaW5mLnRpX3RpZDsKICAgICB9CiAKQEAgLTc1MCw2 ICs3OTMsMTEgQEAgc3luY190aHJlYWRsaXN0cyAoaW50IHBpZCkKICAgcHRo ZGJfcHRocmVhZF90IHBkdGlkOwogICBwdGhyZWFkX3QgcHRoaWQ7CiAgIHB0 aGRiX3RpZF90IHRpZDsKKyAgcHJvY2Vzc19zdHJhdHVtX3RhcmdldCAqcHJv Y190YXJnZXQKKyAgICAgICAgICAgID0gY3VycmVudF9pbmZlcmlvciAoKS0+ cHJvY2Vzc190YXJnZXQgKCk7CisgIHRocmVhZF9pbmZvICAqdHA7CisgIHN0 cnVjdCBhaXhfdGhyZWFkX3ZhcmlhYmxlcyAqZGF0YTsKKyAgZGF0YSA9IGdl dF90aHJlYWRfZGF0YV9oZWxwZXJfZm9yX3BpZCAocGlkKTsKIAogICAvKiBB Y2N1bXVsYXRlIGFuIGFycmF5IG9mIGxpYnB0aGRlYnVnIHRocmVhZHMgc29y dGVkIGJ5IHB0aHJlYWQgaWQuICAqLwogCkBAIC03NTksMTEgKzgwNywxMSBA QCBzeW5jX3RocmVhZGxpc3RzIChpbnQgcGlkKQogCiAgIGZvciAoY21kID0g UFRIREJfTElTVF9GSVJTVDs7IGNtZCA9IFBUSERCX0xJU1RfTkVYVCkKICAg ICB7Ci0gICAgICBzdGF0dXMgPSBwdGhkYl9wdGhyZWFkIChwZF9zZXNzaW9u LCAmcGR0aWQsIGNtZCk7CisgICAgICBzdGF0dXMgPSBwdGhkYl9wdGhyZWFk IChkYXRhLT5wZF9zZXNzaW9uLCAmcGR0aWQsIGNtZCk7CiAgICAgICBpZiAo c3RhdHVzICE9IFBUSERCX1NVQ0NFU1MgfHwgcGR0aWQgPT0gUFRIREJfSU5W QUxJRF9QVEhSRUFEKQogCWJyZWFrOwogCi0gICAgICBzdGF0dXMgPSBwdGhk Yl9wdGhyZWFkX3B0aWQgKHBkX3Nlc3Npb24sIHBkdGlkLCAmcHRoaWQpOwor ICAgICAgc3RhdHVzID0gcHRoZGJfcHRocmVhZF9wdGlkIChkYXRhLT5wZF9z ZXNzaW9uLCBwZHRpZCwgJnB0aGlkKTsKICAgICAgIGlmIChzdGF0dXMgIT0g UFRIREJfU1VDQ0VTUyB8fCBwdGhpZCA9PSBQVEhEQl9JTlZBTElEX1BUSUQp CiAJY29udGludWU7CiAKQEAgLTc4MCw3ICs4MjgsNyBAQCBzeW5jX3RocmVh ZGxpc3RzIChpbnQgcGlkKQogCiAgIGZvciAocGkgPSAwOyBwaSA8IHBjb3Vu dDsgcGkrKykKICAgICB7Ci0gICAgICBzdGF0dXMgPSBwdGhkYl9wdGhyZWFk X3RpZCAocGRfc2Vzc2lvbiwgcGJ1ZltwaV0ucGR0aWQsICZ0aWQpOworICAg ICAgc3RhdHVzID0gcHRoZGJfcHRocmVhZF90aWQgKGRhdGEtPnBkX3Nlc3Np b24sIHBidWZbcGldLnBkdGlkLCAmdGlkKTsKICAgICAgIGlmIChzdGF0dXMg IT0gUFRIREJfU1VDQ0VTUykKIAl0aWQgPSBQVEhEQl9JTlZBTElEX1RJRDsK ICAgICAgIHBidWZbcGldLnRpZCA9IHRpZDsKQEAgLTc5MCwxMCArODM4LDEx IEBAIHN5bmNfdGhyZWFkbGlzdHMgKGludCBwaWQpCiAKICAgLyogQWNjdW11 bGF0ZSBhbiBhcnJheSBvZiBHREIgdGhyZWFkcyBzb3J0ZWQgYnkgcGlkLiAg Ki8KIAotICBnY291bnQgPSAwOwotICBpdGVyYXRlX292ZXJfdGhyZWFkcyAo Z2l0ZXJfY291bnQsICZnY291bnQpOworICAvKiBnY291bnQgaXMgR0RCIHRo cmVhZCBjb3VudCBhbmQgcGNvdW50IGlzIHB0aHJlYWRsaWIgdGhyZWFkIGNv dW50LiAgKi8KKworICBnY291bnQgPSBnaXRlcl9jb3VudCAocGlkKTsKICAg ZyA9IGdidWYgPSBYTkVXVkVDIChzdHJ1Y3QgdGhyZWFkX2luZm8gKiwgZ2Nv dW50KTsKLSAgaXRlcmF0ZV9vdmVyX3RocmVhZHMgKGdpdGVyX2FjY3VtLCAm Zyk7CisgIGdpdGVyX2FjY3VtICgmZywgcGlkKTsKICAgcXNvcnQgKGdidWYs IGdjb3VudCwgc2l6ZW9mICpnYnVmLCBnY21wKTsKIAogICAvKiBBcHBseSBk aWZmZXJlbmNlcyBiZXR3ZWVuIHRoZSB0d28gYXJyYXlzIHRvIEdEQidzIHRo cmVhZCBsaXN0LiAgKi8KQEAgLTgxMCw4ICs4NTksNiBAQCBzeW5jX3RocmVh ZGxpc3RzIChpbnQgcGlkKQogCSAgcHJpdi0+cGR0aWQgPSBwYnVmW3BpXS5w ZHRpZDsKIAkgIHByaXYtPnRpZCA9IHBidWZbcGldLnRpZDsKIAotCSAgcHJv Y2Vzc19zdHJhdHVtX3RhcmdldCAqcHJvY190YXJnZXQKLQkgICAgPSBjdXJy ZW50X2luZmVyaW9yICgpLT5wcm9jZXNzX3RhcmdldCAoKTsKIAkgIHRocmVh ZCA9IGFkZF90aHJlYWRfd2l0aF9pbmZvIChwcm9jX3RhcmdldCwKIAkJCQkJ IHB0aWRfdCAocGlkLCAwLCBwYnVmW3BpXS5wdGhpZCksCiAJCQkJCSBwcml2 KTsKQEAgLTgzMCw2ICs4NzcsMjMgQEAgc3luY190aHJlYWRsaXN0cyAoaW50 IHBpZCkKIAogCSAgY21wX3Jlc3VsdCA9IHB0aWRfY21wIChwcHRpZCwgZ3B0 aWQpOwogCisJICAvKiBJZiB0aGVyZSBpcyBvbmx5IG9uZSB0aHJlYWQgdGhl biB3ZSBuZWVkIG5vdCBtYWtlIHRoZSBtYWluIAorCSAgICAgdGhyZWFkIGxv b2sgbGlrZSBhIHRocmVhZC4gIEl0IGNhbiBzdGF5IGFzIGEgcHJvY2Vzcy4g VGhpcworCSAgICAgaXMgdXNlZnVsIHdoZW4gd2UgaGF2ZSBtdWx0aXBsZSBp bmZlcmlvcnMsIGJ1dCBvbmx5IG9uZSBpcworCSAgICAgdGhyZWFkZWQuICBT byB3ZSBuZWVkIG5vdCBtYWtlIHRoZSBvdGhlciBpbmZlcmlvcnMgd2l0aCBv bmx5CisJICAgICBtYWluIHRocmVhZCwgbG9vayBsaWtlIGEgdGhyZWFkZWQg b25lLiAgRm9yIGV4YW1wbGUsIFRocmVhZAorCSAgICAgMS4xLCAxLjIsIDIu MSwgMy4xIGV4aXN0cyB0aGVuIGl0IGlzIHVzZWZ1bCB0byBza2lwIHRoaXMg Zm9yCisJICAgICBsb29wIGZvciAyLjEgYW5kIDMuMSBsZWF2aW5nIHRoZW0g YXMgbWFpbiBwcm9jZXNzIHRocmVhZCB3aXRoCisJICAgICBhIGR1bW15IHBy aXYgc2V0LiAgKi8KKworCSAgaWYgKHBjb3VudCA9PSAxICYmIGdjb3VudCA9 PSAxKQorCSAgeworCSAgICBhaXhfdGhyZWFkX2luZm8gKnByaXYgPSBuZXcg YWl4X3RocmVhZF9pbmZvOworCSAgICB0cCA9IGZpbmRfdGhyZWFkX3B0aWQg KHByb2NfdGFyZ2V0LCBncHRpZCk7CisJICAgIHRwLT5wcml2LnJlc2V0IChw cml2KTsKKwkgICAgYnJlYWs7CisJICB9CisKIAkgIGlmIChjbXBfcmVzdWx0 ID09IDApCiAJICAgIHsKIAkgICAgICBhaXhfdGhyZWFkX2luZm8gKnByaXYg PSBnZXRfYWl4X3RocmVhZF9pbmZvIChnYnVmW2dpXSk7CkBAIC04NDEsOCAr OTA1LDI1IEBAIHN5bmNfdGhyZWFkbGlzdHMgKGludCBwaWQpCiAJICAgIH0K IAkgIGVsc2UgaWYgKGNtcF9yZXN1bHQgPiAwKQogCSAgICB7Ci0JICAgICAg ZGVsZXRlX3RocmVhZCAoZ2J1ZltnaV0pOwotCSAgICAgIGdpKys7CisJICAg ICAgLyogVGhpcyBpcyB0byBtYWtlIHRoZSBtYWluIHByb2Nlc3MgdGhyZWFk IG5vdyBsb29rCisJCSBsaWtlIGEgdGhyZWFkLiAgKi8KKworCSAgICAgIGlm IChncHRpZC5pc19waWQgKCkgJiYgZ3B0aWQucGlkICgpID09IHBwdGlkLnBp ZCAoKSkKKwkgICAgICB7CisJCXRocmVhZF9jaGFuZ2VfcHRpZCAocHJvY190 YXJnZXQsIGdwdGlkLCBwcHRpZCk7CisJCWFpeF90aHJlYWRfaW5mbyAqcHJp diA9IG5ldyBhaXhfdGhyZWFkX2luZm87CisJCXByaXYtPnBkdGlkID0gcGJ1 ZltwaV0ucGR0aWQ7CisJCXByaXYtPnRpZCA9IHBidWZbcGldLnRpZDsKKwkJ dHAgPSBmaW5kX3RocmVhZF9wdGlkIChwcm9jX3RhcmdldCwgcHB0aWQpOwor CQl0cC0+cHJpdi5yZXNldCAocHJpdik7CisJCXBpKys7CisJCWdpKys7CisJ ICAgICAgfQorCSAgICAgIGVsc2UKKwkgICAgICB7CisJCWRlbGV0ZV90aHJl YWQgKGdidWZbZ2ldKTsKKwkJZ2krKzsKKwkgICAgICB9CiAJICAgIH0KIAkg IGVsc2UKIAkgICAgewpAQCAtODg4LDEwICs5NjksMTMgQEAgcGRfdXBkYXRl IChpbnQgcGlkKQogICBwdGhkYl90aWRfdCB0aWQ7CiAgIHN0cnVjdCB0aHJl YWRfaW5mbyAqdGhyZWFkID0gTlVMTDsKIAotICBpZiAoIXBkX2FjdGl2ZSkK KyAgc3RydWN0IGFpeF90aHJlYWRfdmFyaWFibGVzICpkYXRhOworICBkYXRh ID0gZ2V0X3RocmVhZF9kYXRhX2hlbHBlcl9mb3JfcGlkIChwaWQpOworCisg IGlmICghZGF0YS0+cGRfYWN0aXZlKQogICAgIHJldHVybiBwdGlkX3QgKHBp ZCk7CiAKLSAgc3RhdHVzID0gcHRoZGJfc2Vzc2lvbl91cGRhdGUgKHBkX3Nl c3Npb24pOworICBzdGF0dXMgPSBwdGhkYl9zZXNzaW9uX3VwZGF0ZSAoZGF0 YS0+cGRfc2Vzc2lvbik7CiAgIGlmIChzdGF0dXMgIT0gUFRIREJfU1VDQ0VT UykKICAgICByZXR1cm4gcHRpZF90IChwaWQpOwogCkBAIC05MTgsMTUgKzEw MDIsMTcgQEAgc3RhdGljIHB0aWRfdAogcGRfYWN0aXZhdGUgKGludCBwaWQp CiB7CiAgIGludCBzdGF0dXM7CisgIHN0cnVjdCBhaXhfdGhyZWFkX3Zhcmlh YmxlcyAqZGF0YTsKKyAgZGF0YSA9IGdldF90aHJlYWRfZGF0YV9oZWxwZXJf Zm9yX3BpZCAocGlkKTsKIAkJCiAgIHN0YXR1cyA9IHB0aGRiX3Nlc3Npb25f aW5pdCAocGlkLCBhcmNoNjQgPyBQRU1fNjRCSVQgOiBQRU1fMzJCSVQsCiAJ CQkgICAgICAgUFRIREJfRkxBR19SRUdTLCAmcGRfY2FsbGJhY2tzLCAKLQkJ CSAgICAgICAmcGRfc2Vzc2lvbik7CisJCQkgICAgICAgJmRhdGEtPnBkX3Nl c3Npb24pOwogICBpZiAoc3RhdHVzICE9IFBUSERCX1NVQ0NFU1MpCiAgICAg ewogICAgICAgcmV0dXJuIHB0aWRfdCAocGlkKTsKICAgICB9Ci0gIHBkX2Fj dGl2ZSA9IDE7CisgIGRhdGEtPnBkX2FjdGl2ZSA9IDE7CiAgIHJldHVybiBw ZF91cGRhdGUgKHBpZCk7CiB9CiAKQEAgLTkzNSwxMiArMTAyMSwxNSBAQCBw ZF9hY3RpdmF0ZSAoaW50IHBpZCkKIHN0YXRpYyB2b2lkCiBwZF9kZWFjdGl2 YXRlICh2b2lkKQogewotICBpZiAoIXBkX2FjdGl2ZSkKKyAgc3RydWN0IGFp eF90aHJlYWRfdmFyaWFibGVzICpkYXRhOworICBkYXRhID0gZ2V0X3RocmVh ZF9kYXRhX2hlbHBlcl9mb3JfcHRpZCAoaW5mZXJpb3JfcHRpZCk7CisKKyAg aWYgKCFkYXRhLT5wZF9hY3RpdmUpCiAgICAgcmV0dXJuOwotICBwdGhkYl9z ZXNzaW9uX2Rlc3Ryb3kgKHBkX3Nlc3Npb24pOworICBwdGhkYl9zZXNzaW9u X2Rlc3Ryb3kgKGRhdGEtPnBkX3Nlc3Npb24pOwogICAKICAgcGlkX3RvX3By YyAoJmluZmVyaW9yX3B0aWQpOwotICBwZF9hY3RpdmUgPSAwOworICBkYXRh LT5wZF9hY3RpdmUgPSAwOwogfQogCiAvKiBBbiBvYmplY3QgZmlsZSBoYXMg anVzdCBiZWVuIGxvYWRlZC4gIENoZWNrIHdoZXRoZXIgdGhlIGN1cnJlbnQK QEAgLTk1Myw4ICsxMDQyLDE0IEBAIHBkX2VuYWJsZSAodm9pZCkKICAgY2hh ciAqc3R1Yl9uYW1lOwogICBzdHJ1Y3QgYm91bmRfbWluaW1hbF9zeW1ib2wg bXM7CiAKKyAgaWYgKCFpbmZlcmlvcl9wdGlkLnBpZCAoKSkKKyAgICByZXR1 cm47CisgIAorICBzdHJ1Y3QgYWl4X3RocmVhZF92YXJpYWJsZXMgKmRhdGE7 CisgIGRhdGEgPSBnZXRfdGhyZWFkX2RhdGFfaGVscGVyX2Zvcl9wdGlkIChp bmZlcmlvcl9wdGlkKTsKKwogICAvKiBEb24ndCBpbml0aWFsaXplIHR3aWNl LiAgKi8KLSAgaWYgKHBkX2FibGUpCisgIGlmIChkYXRhLT5wZF9hYmxlKQog ICAgIHJldHVybjsKIAogICAvKiBDaGVjayBhcHBsaWNhdGlvbiB3b3JkIHNp emUuICAqLwpAQCAtOTc4LDcgKzEwNzMsNyBAQCBwZF9lbmFibGUgKHZvaWQp CiAKICAgLyogUHJlcGFyZSBmb3IgdGhyZWFkIGRlYnVnZ2luZy4gICovCiAg IGN1cnJlbnRfaW5mZXJpb3IgKCktPnB1c2hfdGFyZ2V0ICgmYWl4X3RocmVh ZF9vcHMpOwotICBwZF9hYmxlID0gMTsKKyAgZGF0YS0+cGRfYWJsZSA9IDE7 IAogCiAgIC8qIElmIHdlJ3JlIGRlYnVnZ2luZyBhIGNvcmUgZmlsZSBvciBh biBhdHRhY2hlZCBpbmZlcmlvciwgdGhlCiAgICAgIHB0aHJlYWQgbGlicmFy eSBtYXkgYWxyZWFkeSBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQsIHNvIHRyeSB0 bwpAQCAtOTkxLDI4ICsxMDg2LDI3IEBAIHBkX2VuYWJsZSAodm9pZCkKIHN0 YXRpYyB2b2lkCiBwZF9kaXNhYmxlICh2b2lkKQogewotICBpZiAoIXBkX2Fi bGUpCisgIHN0cnVjdCBhaXhfdGhyZWFkX3ZhcmlhYmxlcyAqZGF0YTsKKyAg ZGF0YSA9IGdldF90aHJlYWRfZGF0YV9oZWxwZXJfZm9yX3B0aWQgKGluZmVy aW9yX3B0aWQpOworCisgIGlmICghZGF0YS0+cGRfYWJsZSkKICAgICByZXR1 cm47Ci0gIGlmIChwZF9hY3RpdmUpCisgIGlmIChkYXRhLT5wZF9hY3RpdmUp CiAgICAgcGRfZGVhY3RpdmF0ZSAoKTsKLSAgcGRfYWJsZSA9IDA7CisgIGRh dGEtPnBkX2FibGUgPSAwOwogICBjdXJyZW50X2luZmVyaW9yICgpLT51bnB1 c2hfdGFyZ2V0ICgmYWl4X3RocmVhZF9vcHMpOwogfQogCiAvKiBuZXdfb2Jq ZmlsZSBvYnNlcnZlciBjYWxsYmFjay4KIAogICAgSWYgT0JKRklMRSBpcyBu b24tbnVsbCwgY2hlY2sgd2hldGhlciBhIHRocmVhZGVkIGFwcGxpY2F0aW9u IGlzCi0gICBiZWluZyBkZWJ1Z2dlZCwgYW5kIGlmIHNvLCBwcmVwYXJlIGZv ciB0aHJlYWQgZGVidWdnaW5nLgotCi0gICBJZiBPQkpGSUxFIGlzIG51bGws IHN0b3AgZGVidWdnaW5nIHRocmVhZHMuICAqLworICAgYmVpbmcgZGVidWdn ZWQsIGFuZCBpZiBzbywgcHJlcGFyZSBmb3IgdGhyZWFkIGRlYnVnZ2luZy4g ICovCiAKIHN0YXRpYyB2b2lkCiBuZXdfb2JqZmlsZSAoc3RydWN0IG9iamZp bGUgKm9iamZpbGUpCiB7CiAgIGlmIChvYmpmaWxlKQogICAgIHBkX2VuYWJs ZSAoKTsKLSAgZWxzZQotICAgIHBkX2Rpc2FibGUgKCk7CiB9CiAKIC8qIEF0 dGFjaCB0byBwcm9jZXNzIHNwZWNpZmllZCBieSBBUkdTLiAgKi8KQEAgLTEw NDIsOCArMTEzNiwxMCBAQCBhaXhfdGhyZWFkX3RhcmdldDo6cmVzdW1lIChw dGlkX3QgcHRpZCwgaW50IHN0ZXAsIGVudW0gZ2RiX3NpZ25hbCBzaWcpCiB7 CiAgIHN0cnVjdCB0aHJlYWRfaW5mbyAqdGhyZWFkOwogICBwdGhkYl90aWRf dCB0aWRbMl07CisgIHN0cnVjdCBhaXhfdGhyZWFkX3ZhcmlhYmxlcyAqZGF0 YTsKKyAgZGF0YSA9IGdldF90aHJlYWRfZGF0YV9oZWxwZXJfZm9yX3B0aWQg KHB0aWQpOwogCi0gIGlmICghUERfVElEIChwdGlkKSkKKyAgaWYgKCFQRF9U SUQgKHB0aWQsIGRhdGEpKQogICAgIHsKICAgICAgIHNjb3BlZF9yZXN0b3Jl IHNhdmVfaW5mZXJpb3JfcHRpZCA9IG1ha2Vfc2NvcGVkX3Jlc3RvcmUgKCZp bmZlcmlvcl9wdGlkKTsKICAgICAgIApAQCAtMTA5NSw4ICsxMTkxLDExIEBA IGFpeF90aHJlYWRfdGFyZ2V0Ojp3YWl0IChwdGlkX3QgcHRpZCwgc3RydWN0 IHRhcmdldF93YWl0c3RhdHVzICpzdGF0dXMsCiAgICAgIHBpZC1vbmx5IHB0 aWRzLiAgKi8KICAgZ2RiX2Fzc2VydCAocHRpZC5pc19waWQgKCkpOwogCisg IHN0cnVjdCBhaXhfdGhyZWFkX3ZhcmlhYmxlcyAqZGF0YTsKKyAgZGF0YSA9 IGdldF90aHJlYWRfZGF0YV9oZWxwZXJfZm9yX3B0aWQgKHB0aWQpOworCiAg IC8qIENoZWNrIHdoZXRoZXIgbGlicHRoZGVidWcgbWlnaHQgYmUgcmVhZHkg dG8gYmUgaW5pdGlhbGl6ZWQuICAqLwotICBpZiAoIXBkX2FjdGl2ZSAmJiBz dGF0dXMtPmtpbmQgKCkgPT0gVEFSR0VUX1dBSVRLSU5EX1NUT1BQRUQKKyAg aWYgKCFkYXRhLT5wZF9hY3RpdmUgJiYgc3RhdHVzLT5raW5kICgpID09IFRB UkdFVF9XQUlUS0lORF9TVE9QUEVECiAgICAgICAmJiBzdGF0dXMtPnNpZyAo KSA9PSBHREJfU0lHTkFMX1RSQVApCiAgICAgewogICAgICAgcHJvY2Vzc19z dHJhdHVtX3RhcmdldCAqcHJvY190YXJnZXQKQEAgLTEyMjksMTEgKzEzMjgs MTMgQEAgZmV0Y2hfcmVnc191c2VyX3RocmVhZCAoc3RydWN0IHJlZ2NhY2hl ICpyZWdjYWNoZSwgcHRoZGJfcHRocmVhZF90IHBkdGlkKQogICBwcGNfZ2Ri YXJjaF90ZGVwICp0ZGVwID0gZ2RiYXJjaF90ZGVwPHBwY19nZGJhcmNoX3Rk ZXA+IChnZGJhcmNoKTsKICAgaW50IHN0YXR1cywgaTsKICAgcHRoZGJfY29u dGV4dF90IGN0eDsKKyAgc3RydWN0IGFpeF90aHJlYWRfdmFyaWFibGVzICpk YXRhOworICBkYXRhID0gZ2V0X3RocmVhZF9kYXRhX2hlbHBlcl9mb3JfcHRp ZCAoaW5mZXJpb3JfcHRpZCk7CiAKICAgaWYgKGRlYnVnX2FpeF90aHJlYWQp CiAgICAgZ2RiX3ByaW50ZiAoZ2RiX3N0ZGxvZywgCiAJCSJmZXRjaF9yZWdz X3VzZXJfdGhyZWFkICVseFxuIiwgKGxvbmcpIHBkdGlkKTsKLSAgc3RhdHVz ID0gcHRoZGJfcHRocmVhZF9jb250ZXh0IChwZF9zZXNzaW9uLCBwZHRpZCwg JmN0eCk7CisgIHN0YXR1cyA9IHB0aGRiX3B0aHJlYWRfY29udGV4dCAoZGF0 YS0+cGRfc2Vzc2lvbiwgcGR0aWQsICZjdHgpOwogICBpZiAoc3RhdHVzICE9 IFBUSERCX1NVQ0NFU1MpCiAgICAgZXJyb3IgKF8oImFpeC10aHJlYWQ6IGZl dGNoX3JlZ2lzdGVyczogcHRoZGJfcHRocmVhZF9jb250ZXh0IHJldHVybmVk ICVzIiksCiAJICAgcGRfc3RhdHVzMnN0ciAoc3RhdHVzKSk7CkBAIC0xMzYy LDggKzE0NjMsMTAgQEAgYWl4X3RocmVhZF90YXJnZXQ6OmZldGNoX3JlZ2lz dGVycyAoc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwgaW50IHJlZ25vKQog ewogICBzdHJ1Y3QgdGhyZWFkX2luZm8gKnRocmVhZDsKICAgcHRoZGJfdGlk X3QgdGlkOworICBzdHJ1Y3QgYWl4X3RocmVhZF92YXJpYWJsZXMgKmRhdGE7 CisgIGRhdGEgPSBnZXRfdGhyZWFkX2RhdGFfaGVscGVyX2Zvcl9wdGlkIChy ZWdjYWNoZS0+cHRpZCAoKSk7CiAKLSAgaWYgKCFQRF9USUQgKHJlZ2NhY2hl LT5wdGlkICgpKSkKKyAgaWYgKCFQRF9USUQgKHJlZ2NhY2hlLT5wdGlkICgp LCBkYXRhKSkKICAgICBiZW5lYXRoICgpLT5mZXRjaF9yZWdpc3RlcnMgKHJl Z2NhY2hlLCByZWdubyk7CiAgIGVsc2UKICAgICB7CkBAIC0xNTExLDYgKzE2 MTQsOCBAQCBzdG9yZV9yZWdzX3VzZXJfdGhyZWFkIChjb25zdCBzdHJ1Y3Qg cmVnY2FjaGUgKnJlZ2NhY2hlLCBwdGhkYl9wdGhyZWFkX3QgcGR0aWQpCiAg IHB0aGRiX2NvbnRleHRfdCBjdHg7CiAgIHVpbnQzMl90IGludDMyOwogICB1 aW50NjRfdCBpbnQ2NDsKKyAgc3RydWN0IGFpeF90aHJlYWRfdmFyaWFibGVz ICpkYXRhOworICBkYXRhID0gZ2V0X3RocmVhZF9kYXRhX2hlbHBlcl9mb3Jf cHRpZCAoaW5mZXJpb3JfcHRpZCk7CiAKICAgaWYgKGRlYnVnX2FpeF90aHJl YWQpCiAgICAgZ2RiX3ByaW50ZiAoZ2RiX3N0ZGxvZywgCkBAIC0xNTE4LDcg KzE2MjMsNyBAQCBzdG9yZV9yZWdzX3VzZXJfdGhyZWFkIChjb25zdCBzdHJ1 Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLCBwdGhkYl9wdGhyZWFkX3QgcGR0aWQp CiAKICAgLyogUmV0cmlldmUgdGhlIHRocmVhZCdzIGN1cnJlbnQgY29udGV4 dCBmb3IgaXRzIG5vbi1yZWdpc3RlcgogICAgICB2YWx1ZXMuICAqLwotICBz dGF0dXMgPSBwdGhkYl9wdGhyZWFkX2NvbnRleHQgKHBkX3Nlc3Npb24sIHBk dGlkLCAmY3R4KTsKKyAgc3RhdHVzID0gcHRoZGJfcHRocmVhZF9jb250ZXh0 IChkYXRhLT5wZF9zZXNzaW9uLCBwZHRpZCwgJmN0eCk7CiAgIGlmIChzdGF0 dXMgIT0gUFRIREJfU1VDQ0VTUykKICAgICBlcnJvciAoXygiYWl4LXRocmVh ZDogc3RvcmVfcmVnaXN0ZXJzOiBwdGhkYl9wdGhyZWFkX2NvbnRleHQgcmV0 dXJuZWQgJXMiKSwKIAkgICBwZF9zdGF0dXMyc3RyIChzdGF0dXMpKTsKQEAg LTE1NzYsNyArMTY4MSw3IEBAIHN0b3JlX3JlZ3NfdXNlcl90aHJlYWQgKGNv bnN0IHN0cnVjdCByZWdjYWNoZSAqcmVnY2FjaGUsIHB0aGRiX3B0aHJlYWRf dCBwZHRpZCkKIAljdHguZnBzY3IgPSB0bXBfZnBzY3I7CiAgICAgfQogCi0g IHN0YXR1cyA9IHB0aGRiX3B0aHJlYWRfc2V0Y29udGV4dCAocGRfc2Vzc2lv biwgcGR0aWQsICZjdHgpOworICBzdGF0dXMgPSBwdGhkYl9wdGhyZWFkX3Nl dGNvbnRleHQgKGRhdGEtPnBkX3Nlc3Npb24sIHBkdGlkLCAmY3R4KTsKICAg aWYgKHN0YXR1cyAhPSBQVEhEQl9TVUNDRVNTKQogICAgIGVycm9yIChfKCJh aXgtdGhyZWFkOiBzdG9yZV9yZWdpc3RlcnM6ICIKIAkgICAgICJwdGhkYl9w dGhyZWFkX3NldGNvbnRleHQgcmV0dXJuZWQgJXMiKSwKQEAgLTE3MDIsOCAr MTgwNywxMCBAQCBhaXhfdGhyZWFkX3RhcmdldDo6c3RvcmVfcmVnaXN0ZXJz IChzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLCBpbnQgcmVnbm8pCiB7CiAg IHN0cnVjdCB0aHJlYWRfaW5mbyAqdGhyZWFkOwogICBwdGhkYl90aWRfdCB0 aWQ7CisgIHN0cnVjdCBhaXhfdGhyZWFkX3ZhcmlhYmxlcyAqZGF0YTsKKyAg ZGF0YSA9IGdldF90aHJlYWRfZGF0YV9oZWxwZXJfZm9yX3B0aWQgKGluZmVy aW9yX3B0aWQpOwogCi0gIGlmICghUERfVElEIChyZWdjYWNoZS0+cHRpZCAo KSkpCisgIGlmICghUERfVElEIChyZWdjYWNoZS0+cHRpZCAoKSwgZGF0YSkp CiAgICAgYmVuZWF0aCAoKS0+c3RvcmVfcmVnaXN0ZXJzIChyZWdjYWNoZSwg cmVnbm8pOwogICBlbHNlCiAgICAgewpAQCAtMTc0MSw3ICsxODQ4LDcgQEAg YWl4X3RocmVhZF90YXJnZXQ6Om1vdXJuX2luZmVyaW9yICgpCiB7CiAgIHRh cmdldF9vcHMgKmJlbmVhdGggPSB0aGlzLT5iZW5lYXRoICgpOwogCi0gIHBk X2RlYWN0aXZhdGUgKCk7CisgIHBkX2Rpc2FibGUgKCk7CiAgIGJlbmVhdGgt Pm1vdXJuX2luZmVyaW9yICgpOwogfQogCkBAIC0xNzUwLDcgKzE4NTcsMTAg QEAgYWl4X3RocmVhZF90YXJnZXQ6Om1vdXJuX2luZmVyaW9yICgpCiBib29s CiBhaXhfdGhyZWFkX3RhcmdldDo6dGhyZWFkX2FsaXZlIChwdGlkX3QgcHRp ZCkKIHsKLSAgaWYgKCFQRF9USUQgKHB0aWQpKQorICBzdHJ1Y3QgYWl4X3Ro cmVhZF92YXJpYWJsZXMgKmRhdGE7CisgIGRhdGEgPSBnZXRfdGhyZWFkX2Rh dGFfaGVscGVyX2Zvcl9wdGlkIChpbmZlcmlvcl9wdGlkKTsKKworICBpZiAo IVBEX1RJRCAocHRpZCwgZGF0YSkpCiAgICAgcmV0dXJuIGJlbmVhdGggKCkt PnRocmVhZF9hbGl2ZSAocHRpZCk7CiAKICAgLyogV2UgdXBkYXRlIHRoZSB0 aHJlYWQgbGlzdCBldmVyeSB0aW1lIHRoZSBjaGlsZCBzdG9wcywgc28gYWxs CkBAIC0xNzY2LDcgKzE4NzYsMTAgQEAgYWl4X3RocmVhZF90YXJnZXQ6OnRo cmVhZF9hbGl2ZSAocHRpZF90IHB0aWQpCiBzdGQ6OnN0cmluZwogYWl4X3Ro cmVhZF90YXJnZXQ6OnBpZF90b19zdHIgKHB0aWRfdCBwdGlkKQogewotICBp ZiAoIVBEX1RJRCAocHRpZCkpCisgIHN0cnVjdCBhaXhfdGhyZWFkX3Zhcmlh YmxlcyAqZGF0YTsKKyAgZGF0YSA9IGdldF90aHJlYWRfZGF0YV9oZWxwZXJf Zm9yX3B0aWQgKHB0aWQpOworCisgIGlmICghUERfVElEIChwdGlkLCBkYXRh KSkKICAgICByZXR1cm4gYmVuZWF0aCAoKS0+cGlkX3RvX3N0ciAocHRpZCk7 CiAKICAgcmV0dXJuIHN0cmluZ19wcmludGYgKF8oIlRocmVhZCAlcyIpLCBw dWxvbmdlc3QgKHB0aWQudGlkICgpKSk7CkBAIC0xNzg2LDggKzE4OTksMTAg QEAgYWl4X3RocmVhZF90YXJnZXQ6OmV4dHJhX3RocmVhZF9pbmZvIChzdHJ1 Y3QgdGhyZWFkX2luZm8gKnRocmVhZCkKICAgcHRoZGJfZGV0YWNoc3RhdGVf dCBkZXRhY2hzdGF0ZTsKICAgaW50IGNhbmNlbHBlbmQ7CiAgIHN0YXRpYyBj aGFyICpyZXQgPSBOVUxMOworICBzdHJ1Y3QgYWl4X3RocmVhZF92YXJpYWJs ZXMgKmRhdGE7CisgIGRhdGEgPSBnZXRfdGhyZWFkX2RhdGFfaGVscGVyX2Zv cl9wdGlkICh0aHJlYWQtPnB0aWQpOwogCi0gIGlmICghUERfVElEICh0aHJl YWQtPnB0aWQpKQorICBpZiAoIVBEX1RJRCAodGhyZWFkLT5wdGlkLCBkYXRh KSkKICAgICByZXR1cm4gTlVMTDsKIAogICBzdHJpbmdfZmlsZSBidWY7CkBA IC0xODAwLDI0ICsxOTE1LDI0IEBAIGFpeF90aHJlYWRfdGFyZ2V0OjpleHRy YV90aHJlYWRfaW5mbyAoc3RydWN0IHRocmVhZF9pbmZvICp0aHJlYWQpCiAg ICAgLyogaTE4bjogTGlrZSAidGhyZWFkLWlkZW50aWZpZXIgJWQsIFtzdGF0 ZV0gcnVubmluZywgc3VzcGVuZGVkIiAqLwogICAgIGJ1Zi5wcmludGYgKF8o InRpZCAlZCIpLCAoaW50KXRpZCk7CiAKLSAgc3RhdHVzID0gcHRoZGJfcHRo cmVhZF9zdGF0ZSAocGRfc2Vzc2lvbiwgcGR0aWQsICZzdGF0ZSk7CisgIHN0 YXR1cyA9IHB0aGRiX3B0aHJlYWRfc3RhdGUgKGRhdGEtPnBkX3Nlc3Npb24s IHBkdGlkLCAmc3RhdGUpOwogICBpZiAoc3RhdHVzICE9IFBUSERCX1NVQ0NF U1MpCiAgICAgc3RhdGUgPSBQU1RfTk9UU1VQOwogICBidWYucHJpbnRmICgi LCAlcyIsIHN0YXRlMnN0ciAoc3RhdGUpKTsKIAotICBzdGF0dXMgPSBwdGhk Yl9wdGhyZWFkX3N1c3BlbmRzdGF0ZSAocGRfc2Vzc2lvbiwgcGR0aWQsIAor ICBzdGF0dXMgPSBwdGhkYl9wdGhyZWFkX3N1c3BlbmRzdGF0ZSAoZGF0YS0+ cGRfc2Vzc2lvbiwgcGR0aWQsIAogCQkJCSAgICAgICAmc3VzcGVuZHN0YXRl KTsKICAgaWYgKHN0YXR1cyA9PSBQVEhEQl9TVUNDRVNTICYmIHN1c3BlbmRz dGF0ZSA9PSBQU1NfU1VTUEVOREVEKQogICAgIC8qIGkxOG46IExpa2UgIlRo cmVhZC1JZCAlZCwgW3N0YXRlXSBydW5uaW5nLCBzdXNwZW5kZWQiICovCiAg ICAgYnVmLnByaW50ZiAoXygiLCBzdXNwZW5kZWQiKSk7CiAKLSAgc3RhdHVz ID0gcHRoZGJfcHRocmVhZF9kZXRhY2hzdGF0ZSAocGRfc2Vzc2lvbiwgcGR0 aWQsIAorICBzdGF0dXMgPSBwdGhkYl9wdGhyZWFkX2RldGFjaHN0YXRlIChk YXRhLT5wZF9zZXNzaW9uLCBwZHRpZCwgCiAJCQkJICAgICAgJmRldGFjaHN0 YXRlKTsKICAgaWYgKHN0YXR1cyA9PSBQVEhEQl9TVUNDRVNTICYmIGRldGFj aHN0YXRlID09IFBEU19ERVRBQ0hFRCkKICAgICAvKiBpMThuOiBMaWtlICJU aHJlYWQtSWQgJWQsIFtzdGF0ZV0gcnVubmluZywgZGV0YWNoZWQiICovCiAg ICAgYnVmLnByaW50ZiAoXygiLCBkZXRhY2hlZCIpKTsKIAotICBwdGhkYl9w dGhyZWFkX2NhbmNlbHBlbmQgKHBkX3Nlc3Npb24sIHBkdGlkLCAmY2FuY2Vs cGVuZCk7CisgIHB0aGRiX3B0aHJlYWRfY2FuY2VscGVuZCAoZGF0YS0+cGRf c2Vzc2lvbiwgcGR0aWQsICZjYW5jZWxwZW5kKTsKICAgaWYgKHN0YXR1cyA9 PSBQVEhEQl9TVUNDRVNTICYmIGNhbmNlbHBlbmQpCiAgICAgLyogaTE4bjog TGlrZSAiVGhyZWFkLUlkICVkLCBbc3RhdGVdIHJ1bm5pbmcsIGNhbmNlbCBw ZW5kaW5nIiAqLwogICAgIGJ1Zi5wcmludGYgKF8oIiwgY2FuY2VsIHBlbmRp bmciKSk7CmRpZmYgLS1naXQgYS9nZGIvc29saWItYWl4LmMgYi9nZGIvc29s aWItYWl4LmMKaW5kZXggZjQ4M2Y1NGRlMTMuLjA5ZDAzM2VmNDczIDEwMDY0 NAotLS0gYS9nZGIvc29saWItYWl4LmMKKysrIGIvZ2RiL3NvbGliLWFpeC5j CkBAIC01NjUsNiArNTY1LDcgQEAgc29saWJfYWl4X2JmZF9vcGVuIChjb25z dCBjaGFyICpwYXRobmFtZSkKICAgY29uc3QgY2hhciAqc2VwOwogICBpbnQg ZmlsZW5hbWVfbGVuOwogICBpbnQgZm91bmRfZmlsZTsKKyAgc3RkOjpzdHJp bmcgc3RyaW5nX3BhdGggPSBwYXRobmFtZTsKIAogICBpZiAocGF0aG5hbWVb cGF0aF9sZW4gLSAxXSAhPSAnKScpCiAgICAgcmV0dXJuIHNvbGliX2JmZF9v cGVuIChwYXRobmFtZSk7CkBAIC02MTgsNiArNjE5LDE1IEBAIHNvbGliX2Fp eF9iZmRfb3BlbiAoY29uc3QgY2hhciAqcGF0aG5hbWUpCiAgICAgICBpZiAo bWVtYmVyX25hbWUgPT0gYmZkX2dldF9maWxlbmFtZSAob2JqZWN0X2JmZC5n ZXQgKCkpKQogCWJyZWFrOwogCisgICAgICBzdGQ6OnN0cmluZyBzID0gYmZk X2dldF9maWxlbmFtZSAob2JqZWN0X2JmZC5nZXQgKCkpOworCisgICAgICAv KiBGb3IgZXZlcnkgaW5mZXJpb3IgYWZ0ZXIgZmlyc3QgaW50IGJmZCBzeXN0 ZW0gd2UgCisJIHdpbGwgaGF2ZSB0aGUgcGF0aG5hbWUgaW5zdGVhZCBvZiB0 aGUgbWVtYmVyIG5hbWUKKwkgcmVnaXN0ZXJlZC4gSGVuY2UgdGhlIGJlbG93 IGNvbmRpdGlvbiBleGlzdHMuICAqLworCisgICAgICBpZiAoc3RyaW5nX3Bh dGguY29tcGFyZSAocykgPT0gMCkKKwlyZXR1cm4gb2JqZWN0X2JmZDsKKwog ICAgICAgb2JqZWN0X2JmZCA9IGdkYl9iZmRfb3BlbnJfbmV4dF9hcmNoaXZl ZF9maWxlIChhcmNoaXZlX2JmZC5nZXQgKCksCiAJCQkJCQkgICAgIG9iamVj dF9iZmQuZ2V0ICgpKTsKICAgICB9Ci0tIAoyLjMxLjEKCg== --_004_CH2PR15MB35449137854F561F1EA7DE04D6D69CH2PR15MB3544namp_--