From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id aIXGLeFZ22Mo1icAWB0awg (envelope-from ) for ; Thu, 02 Feb 2023 01:36:17 -0500 Received: by simark.ca (Postfix, from userid 112) id B703F1E128; Thu, 2 Feb 2023 01:36:17 -0500 (EST) Authentication-Results: simark.ca; dkim=pass (1024-bit key; secure) header.d=sourceware.org header.i=@sourceware.org header.a=rsa-sha256 header.s=default header.b=K91+Sn5A; dkim-atps=neutral X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on simark.ca X-Spam-Level: X-Spam-Status: No, score=-8.0 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI, URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 Received: from sourceware.org (server2.sourceware.org [8.43.85.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by simark.ca (Postfix) with ESMTPS id 555F21E0D3 for ; Thu, 2 Feb 2023 01:36:16 -0500 (EST) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 8915B3858418 for ; Thu, 2 Feb 2023 06:36:15 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 8915B3858418 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1675319775; bh=s923xL7VxOWnWY1x6oZ79Y/tD6SjeIlwpgxzxcS51T8=; h=To:CC:Subject:Date:References:In-Reply-To:List-Id: List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe: From:Reply-To:From; b=K91+Sn5AQ7CQ4vdqqR6C3BQeyEtL1l8byyChf9MwUbDypaL4H/2sUdmJpZcrHrelR lqBI3xv2nz7oOwnULSGk7EES8h2DGbonqIqhAJRuAcJWECwYVuqs6WUQU483J9pJTA jfceIC4qchq2qUu3aiJTM0hBl0oexrcbAk5e5Ylw= 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 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 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 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-Content-Filtered-By: Mailman/MimeDel 2.1.29 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: , From: Aditya Kamath1 via Gdb-patches Reply-To: Aditya Kamath1 Errors-To: gdb-patches-bounces+public-inbox=simark.ca@sourceware.org Sender: "Gdb-patches" --_004_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 >From 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"? >From 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.patc= h 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 >From 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"? >From 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.patc= h 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 >From 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"? >From 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 --_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 RnJvbSA5NmQ1OTMxZjZlZWQ2NTlkYzNjMmY0NTZhODcxM2ExOTY5ZDE0YWM0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBZGl0eWEgVmlkeWFkaGFyIEthbWF0aCA8QWRpdHlhLkthbWF0 aDFAaWJtLmNvbT4KRGF0ZTogVGh1LCAyIEZlYiAyMDIzIDAwOjMyOjE2IC0wNjAwClN1YmplY3Q6 IFtQQVRDSF0gRml4IE11bHRpIHRocmVhZCBkZWJ1ZyBidWcgZml4IGluIEFJWAoKIEluIHRoZSBy ZWNlbnQgY29tbWl0IDk4ZWQyNGZiMzVkODllYjIwMTc5ZWRmNmMxMmY1OTljN2E5ZTIyOGUgbWFk ZSBieSBNci4gVG9tIHRoZXJlIGlzIGEgY2hhbmdlIGluIGFpeC10aHJlYWQuYyBmaWxlIHRoYXQg Y2hhbmdlcwoKIHN0YXRpY19jYXN0IDxhaXhfdGhyZWFkX2luZm8gKj4gaW4gZ2RiIHRvIGdkYjo6 Y2hlY2tlZF9zdGF0aWNfY2FzdCA8YWl4X3RocmVhZF9pbmZvICo+CgogQUlYIGZvbGtzIHVzaW5n IHRoZSBsYXRlc3QgdmVyc2lvbiB3aWxsIG5vdCBiZSBhYmxlIHRvIGRlYnVnIG11bHRpIHRocmVh ZCBwcm9ncmFtcyBhcyBhIHJlc3VsdCBvZiBpdAoKVGhlIGVycm9yIGluIEFJWCBpcyBhcyBmb2xs b3dzOi0KCmludGVybmFsLWVycm9yIGNoZWNrZWRfc3RhdGljX2Nhc3QgQXNzZXJ0aW9uIHJlc3Vs dCAhPSBudWxscHRyIGZhaWxlZC4KClRoZSByZWFzb24gYmVpbmcgQUlYIHNoYXJlZCBsaWJyYXJ5 IHdlcmUgbm90IGJlaW5nIGxvYWRlZCBmb3IgYSBuZXcgaW5mZXJpb3IgYW5kIHRvcCB0YXJnZXQg d2FzIG5vdCBzZXQgcHJvcGVybHkuCgpUaGlzIHBhdGNoIGlzIGEgZml4IGZvciB0aGUgc2FtZS4K LS0tCiBnZGIvYWl4LXRocmVhZC5jIHwgMjc1ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKy0tLS0tLS0tLS0tLS0tCiBnZGIvc29saWItYWl4LmMgIHwgIDEwICsrCiAyIGZpbGVzIGNo YW5nZWQsIDIwNSBpbnNlcnRpb25zKCspLCA4MCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9n ZGIvYWl4LXRocmVhZC5jIGIvZ2RiL2FpeC10aHJlYWQuYwppbmRleCBlNTU2YzE1MzU3Ni4uYmZj N2Y5MDFkZTAgMTAwNjQ0Ci0tLSBhL2dkYi9haXgtdGhyZWFkLmMKKysrIGIvZ2RiL2FpeC10aHJl YWQuYwpAQCAtNzAsNyArNzAsNyBAQCBzdGF0aWMgYm9vbCBkZWJ1Z19haXhfdGhyZWFkOwogCiAv KiBSZXR1cm4gd2hldGhlciB0byB0cmVhdCBQSUQgYXMgYSBkZWJ1Z2dhYmxlIHRocmVhZCBpZC4g ICovCiAKLSNkZWZpbmUgUERfVElEKHB0aWQpCShwZF9hY3RpdmUgJiYgcHRpZC50aWQgKCkgIT0g MCkKKyNkZWZpbmUgUERfVElEKHB0aWQsIGRhdGEpCShkYXRhLT5wZF9hY3RpdmUgJiYgcHRpZC50 aWQgKCkgIT0gMCkKIAogLyogU3VjY2VzcyBhbmQgZmFpbHVyZSB2YWx1ZXMgcmV0dXJuZWQgYnkg cHRoZGIgY2FsbGJhY2tzLiAgKi8KIApAQCAtMTQ5LDE0ICsxNDksNiBAQCBzdGF0aWMgYWl4X3Ro cmVhZF90YXJnZXQgYWl4X3RocmVhZF9vcHM7CiAKIHN0YXRpYyBDT1JFX0FERFIgcGRfYnJrX2Fk ZHI7CiAKLS8qIFdoZXRoZXIgdGhlIGN1cnJlbnQgYXBwbGljYXRpb24gaXMgZGVidWdnYWJsZSBi eSBwdGhkYi4gICovCi0KLXN0YXRpYyBpbnQgcGRfYWJsZSA9IDA7Ci0KLS8qIFdoZXRoZXIgYSB0 aHJlYWRlZCBhcHBsaWNhdGlvbiBpcyBiZWluZyBkZWJ1Z2dlZC4gICovCi0KLXN0YXRpYyBpbnQg cGRfYWN0aXZlID0gMDsKLQogLyogV2hldGhlciB0aGUgY3VycmVudCBhcmNoaXRlY3R1cmUgaXMg NjQtYml0LiAgCiAgICBPbmx5IHZhbGlkIHdoZW4gcGRfYWJsZSBpcyB0cnVlLiAgKi8KIApAQCAt MTkxLDkgKzE4Myw2MCBAQCBzdGF0aWMgcHRoZGJfY2FsbGJhY2tzX3QgcGRfY2FsbGJhY2tzID0g ewogICBOVUxMCiB9OwogCi0vKiBDdXJyZW50IHB0aGRiIHNlc3Npb24uICAqLworLyogQWl4IHZh cmlhYmxlIHN0cnVjdHVyZS4gICovCitzdHJ1Y3QgYWl4X3RocmVhZF92YXJpYWJsZXMgCit7Cisg IC8qIFdoZXRoZXIgdGhlIGN1cnJlbnQgYXBwbGljYXRpb24gaXMgZGVidWdnYWJsZSBieSBwdGhk Yi4gICovCisgIGludCBwZF9hYmxlOworCisgIC8qIFdoZXRoZXIgYSB0aHJlYWRlZCBhcHBsaWNh dGlvbiBpcyBiZWluZyBkZWJ1Z2dlZC4gICovCisgIGludCBwZF9hY3RpdmU7CisKKyAgLyogQ3Vy cmVudCBwdGhkYiBzZXNzaW9uLiAgKi8KKyAgcHRoZGJfc2Vzc2lvbl90IHBkX3Nlc3Npb247Cit9 OworCisvKiBLZXkgdG8gb3VyIHBlci1pbmZlcmlvciBkYXRhLiAgKi8KK3N0YXRpYyBjb25zdCBy ZWdpc3RyeTxpbmZlcmlvcj46OmtleTxhaXhfdGhyZWFkX3ZhcmlhYmxlcz4KKyAgYWl4X3RocmVh ZF92YXJpYWJsZXNfaGFuZGxlOworCisvKiBGdW5jdGlvbiB0byBHZXQgYWl4X3RocmVhZF92YXJp YWJsZXMgZGF0YS4gICovCitzdGF0aWMgc3RydWN0IGFpeF90aHJlYWRfdmFyaWFibGVzKgorZ2V0 X2FpeF90aHJlYWRfdmFyaWFibGVzX2RhdGEgKHN0cnVjdCBpbmZlcmlvciAqaW5mKQoreworICBp ZiAoaW5mID09IE5VTEwpCisgICAgcmV0dXJuIE5VTEw7CisKKyAgc3RydWN0IGFpeF90aHJlYWRf dmFyaWFibGVzKiBkYXRhOworCisgIGRhdGEgPSBhaXhfdGhyZWFkX3ZhcmlhYmxlc19oYW5kbGUu Z2V0IChpbmYpOworICBpZiAoZGF0YSA9PSBOVUxMKQorICAgIGRhdGEgPSBhaXhfdGhyZWFkX3Zh cmlhYmxlc19oYW5kbGUuZW1wbGFjZSAoaW5mKTsKIAotc3RhdGljIHB0aGRiX3Nlc3Npb25fdCBw ZF9zZXNzaW9uOworICByZXR1cm4gZGF0YTsKK30KKworLyogSGVscGVyIHRvIGdldCBkYXRhIGZv ciBwdGlkIGluIGEgZnVuY3Rpb24uICAqLworCitzdGF0aWMgc3RydWN0IGFpeF90aHJlYWRfdmFy aWFibGVzKgorZ2V0X3RocmVhZF9kYXRhX2hlbHBlcl9mb3JfcHRpZCAocHRpZF90IHB0aWQpCit7 CisgIHN0cnVjdCBhaXhfdGhyZWFkX3ZhcmlhYmxlcyAqZGF0YTsKKyAgaW5mZXJpb3IgKmluZiA9 IGZpbmRfaW5mZXJpb3JfcHRpZCAoY3VycmVudF9pbmZlcmlvciAoKS0+cHJvY2Vzc190YXJnZXQg KCksCisJCQkJCXB0aWQpOworICByZXR1cm4gZ2V0X2FpeF90aHJlYWRfdmFyaWFibGVzX2RhdGEg KGluZik7Cit9CisKKy8qIEhlbHBlciB0byBnZXQgZGF0YSBmb3IgcGlkIGluIGEgZnVuY3Rpb24u ICAqLworCitzdGF0aWMgc3RydWN0IGFpeF90aHJlYWRfdmFyaWFibGVzKgorZ2V0X3RocmVhZF9k YXRhX2hlbHBlcl9mb3JfcGlkIChwaWRfdCBwaWQpCit7CisgIHN0cnVjdCBhaXhfdGhyZWFkX3Zh cmlhYmxlcyAqZGF0YTsKKyAgaW5mZXJpb3IgKmluZiA9IGZpbmRfaW5mZXJpb3JfcGlkIChjdXJy ZW50X2luZmVyaW9yICgpLT5wcm9jZXNzX3RhcmdldCAoKSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBwaWQpOworICByZXR1cm4gZ2V0X2FpeF90aHJlYWRfdmFyaWFi bGVzX2RhdGEgKGluZik7Cit9CiAKIC8qIFJldHVybiBhIHByaW50YWJsZSByZXByZXNlbnRhdGlv biBvZiBwdGhkZWJ1ZyBmdW5jdGlvbiByZXR1cm4KICAgIFNUQVRVUy4gICovCkBAIC0zMTYsOSAr MzU5LDExIEBAIHN0YXRpYyB2b2lkCiBwaWRfdG9fcHJjIChwdGlkX3QgKnB0aWRwKQogewogICBw dGlkX3QgcHRpZDsKKyAgc3RydWN0IGFpeF90aHJlYWRfdmFyaWFibGVzICpkYXRhOworICBkYXRh ID0gZ2V0X3RocmVhZF9kYXRhX2hlbHBlcl9mb3JfcHRpZCAoKnB0aWRwKTsKIAogICBwdGlkID0g KnB0aWRwOwotICBpZiAoUERfVElEIChwdGlkKSkKKyAgaWYgKFBEX1RJRCAocHRpZCwgZGF0YSkp CiAgICAgKnB0aWRwID0gcHRpZF90IChwdGlkLnBpZCAoKSk7CiB9CiAKQEAgLTUwOCwxNCArNTUz LDEzIEBAIHBkY19yZWFkX2RhdGEgKHB0aGRiX3VzZXJfdCB1c2VyX2N1cnJlbnRfcGlkLCB2b2lk ICpidWYsCiAgIC8qIFRoaXMgaXMgbmVlZGVkIHRvIGVsaW1pbmF0ZSB0aGUgZGVwZW5kZW5jeSBv ZiBjdXJyZW50IHRocmVhZAogICAgICB3aGljaCBpcyBudWxsIHNvIHRoYXQgdGhyZWFkIHJlYWRz IHRoZSBjb3JyZWN0IHRhcmdldCBtZW1vcnkuICAqLwogICB7Ci0gICAgc2NvcGVkX3Jlc3RvcmVf Y3VycmVudF90aHJlYWQgcmVzdG9yZV9jdXJyZW50X3RocmVhZDsKKyAgICBzY29wZWRfcmVzdG9y ZSBzYXZlX2luZmVyaW9yX3B0aWQgPSBtYWtlX3Njb3BlZF9yZXN0b3JlICgmaW5mZXJpb3JfcHRp ZCk7CiAgICAgLyogQmVmb3JlIHRoZSBmaXJzdCBpbmZlcmlvciBpcyBhZGRlZCwgd2UgcGFzcyBp bmZlcmlvcl9wdGlkLnBpZCAoKQogICAgICAgIGZyb20gcGRfZW5hYmxlICgpIHdoaWNoIGlzIDAu ICBUaGVyZSBpcyBubyBuZWVkIHRvIHN3aXRjaCB0aHJlYWRzCiAgICAgICAgZHVyaW5nIGZpcnN0 IGluaXRpYWxpc2F0aW9uLiAgSW4gdGhlIHJlc3Qgb2YgdGhlIGNhbGxiYWNrcyB0aGUKICAgICAg ICBjdXJyZW50IHRocmVhZCBuZWVkcyB0byBiZSBjb3JyZWN0LiAgKi8KICAgICBpZiAodXNlcl9j dXJyZW50X3BpZCAhPSAwKQotICAgICAgc3dpdGNoX3RvX3RocmVhZCAoY3VycmVudF9pbmZlcmlv ciAoKS0+cHJvY2Vzc190YXJnZXQgKCksCi0JCQlwdGlkX3QgKHVzZXJfY3VycmVudF9waWQpKTsK KyAgICAgIGluZmVyaW9yX3B0aWQgPSBwdGlkX3QgKHVzZXJfY3VycmVudF9waWQpOwogICAgIHN0 YXR1cyA9IHRhcmdldF9yZWFkX21lbW9yeSAoYWRkciwgKGdkYl9ieXRlICopIGJ1ZiwgbGVuKTsK ICAgfQogICByZXQgPSBzdGF0dXMgPT0gMCA/IFBEQ19TVUNDRVNTIDogUERDX0ZBSUxVUkU7CkBA IC02MzksMzYgKzY4MywzMiBAQCBwY21wIChjb25zdCB2b2lkICpwMXYsIGNvbnN0IHZvaWQgKnAy dikKICAgcmV0dXJuIHAxLT5wdGhpZCA8IHAyLT5wdGhpZCA/IC0xIDogcDEtPnB0aGlkID4gcDIt PnB0aGlkOwogfQogCi0vKiBpdGVyYXRlX292ZXJfdGhyZWFkcygpIGNhbGxiYWNrIGZvciBjb3Vu dGluZyBHREIgdGhyZWFkcy4KLQotICAgRG8gbm90IGNvdW50IHRoZSBtYWluIHRocmVhZCAod2hv c2UgdGlkIGlzIHplcm8pLiAgVGhpcyBtYXRjaGVzCi0gICB0aGUgbGlzdCBvZiB0aHJlYWRzIHBy b3ZpZGVkIGJ5IHRoZSBwdGhyZWFkZGVidWcgbGlicmFyeSwgd2hpY2gKLSAgIGRvZXMgbm90IGlu Y2x1ZGUgdGhhdCBtYWluIHRocmVhZCBlaXRoZXIsIGFuZCB0aHVzIGFsbG93cyB1cwotICAgdG8g Y29tcGFyZSB0aGUgdHdvIGxpc3RzLiAgKi8KKy8qIENhbGxiYWNrIGZvciBjb3VudGluZyBHREIg dGhyZWFkcyBmb3IgcHJvY2VzcyBwaWQuICAqLwogCiBzdGF0aWMgaW50Ci1naXRlcl9jb3VudCAo c3RydWN0IHRocmVhZF9pbmZvICp0aHJlYWQsIHZvaWQgKmNvdW50cCkKK2dpdGVyX2NvdW50IChw aWRfdCBwaWQpCiB7Ci0gIGlmIChQRF9USUQgKHRocmVhZC0+cHRpZCkpCi0gICAgKCooaW50ICop IGNvdW50cCkrKzsKLSAgcmV0dXJuIDA7CisgIGludCBnY291bnQgPSAwOworICBwcm9jZXNzX3N0 cmF0dW1fdGFyZ2V0ICpwcm9jX3RhcmdldAorICAgID0gY3VycmVudF9pbmZlcmlvciAoKS0+cHJv Y2Vzc190YXJnZXQgKCk7CisgIGZvciAodGhyZWFkX2luZm8gKnRwIDogYWxsX3RocmVhZHMgKHBy b2NfdGFyZ2V0LCBwdGlkX3QgKHBpZCkpKQorICAgIGdjb3VudCsrOworICByZXR1cm4gZ2NvdW50 OwogfQogCi0vKiBpdGVyYXRlX292ZXJfdGhyZWFkcygpIGNhbGxiYWNrIGZvciBhY2N1bXVsYXRp bmcgR0RCIHRocmVhZCBwaWRzLgotCi0gICBEbyBub3QgaW5jbHVkZSB0aGUgbWFpbiB0aHJlYWQg KHdob3NlIHRpZCBpcyB6ZXJvKS4gIFRoaXMgbWF0Y2hlcwotICAgdGhlIGxpc3Qgb2YgdGhyZWFk cyBwcm92aWRlZCBieSB0aGUgcHRocmVhZGRlYnVnIGxpYnJhcnksIHdoaWNoCi0gICBkb2VzIG5v dCBpbmNsdWRlIHRoYXQgbWFpbiB0aHJlYWQgZWl0aGVyLCBhbmQgdGh1cyBhbGxvd3MgdXMKLSAg IHRvIGNvbXBhcmUgdGhlIHR3byBsaXN0cy4gICovCisvKiBDYWxsYmFjayBmb3IgYWNjdW11bGF0 aW5nIEdEQiB0aHJlYWQgcGlkcy4gICovCiAKIHN0YXRpYyBpbnQKLWdpdGVyX2FjY3VtIChzdHJ1 Y3QgdGhyZWFkX2luZm8gKnRocmVhZCwgdm9pZCAqYnVmcCkKK2dpdGVyX2FjY3VtICh2b2lkICpi dWZwLCBwaWRfdCBwaWQpCiB7Ci0gIGlmIChQRF9USUQgKHRocmVhZC0+cHRpZCkpCi0gICAgewot ICAgICAgKiooc3RydWN0IHRocmVhZF9pbmZvICoqKikgYnVmcCA9IHRocmVhZDsKLSAgICAgICgq KHN0cnVjdCB0aHJlYWRfaW5mbyAqKiopIGJ1ZnApKys7Ci0gICAgfQorICBwcm9jZXNzX3N0cmF0 dW1fdGFyZ2V0ICpwcm9jX3RhcmdldAorICAgID0gY3VycmVudF9pbmZlcmlvciAoKS0+cHJvY2Vz c190YXJnZXQgKCk7CisgIGZvciAodGhyZWFkX2luZm8gKnRwIDogYWxsX3RocmVhZHMgKHByb2Nf dGFyZ2V0LCBwdGlkX3QgKHBpZCkpKQorICB7CisgICAgKiooc3RydWN0IHRocmVhZF9pbmZvICoq KikgYnVmcCA9IHRwOworICAgICgqKHN0cnVjdCB0aHJlYWRfaW5mbyAqKiopIGJ1ZnApKys7Cisg IH0KKwogICByZXR1cm4gMDsKIH0KIApAQCAtNzE5LDcgKzc1OSwxMCBAQCBnZXRfc2lnbmFsZWRf dGhyZWFkIChpbnQgcGlkKQogCQkgICAgc2l6ZW9mICh0aHJpbmYpLCAma3RpZCwgMSkgIT0gMSkK IAlicmVhazsKIAotICAgICAgaWYgKHRocmluZi50aV9jdXJzaWcgPT0gU0lHVFJBUCkKKyAgICAg IC8qIFdlIGFsc28gbmVlZCB0byBrZWVwIGluIG1pbmQgVHJhcCBhbmQgaW50ZXJydXB0IG9yIGFu eQorICAgICAgICAgc2lnbmFsIHRoYXQgbmVlZHMgdG8gYmUgaGFuZGxlZCBpbiBwZF91cGRhdGUg KCkuICAqLworCisgICAgICBpZiAodGhyaW5mLnRpX2N1cnNpZykKIAlyZXR1cm4gdGhyaW5mLnRp X3RpZDsKICAgICB9CiAKQEAgLTc1MCw2ICs3OTMsMTEgQEAgc3luY190aHJlYWRsaXN0cyAoaW50 IHBpZCkKICAgcHRoZGJfcHRocmVhZF90IHBkdGlkOwogICBwdGhyZWFkX3QgcHRoaWQ7CiAgIHB0 aGRiX3RpZF90IHRpZDsKKyAgcHJvY2Vzc19zdHJhdHVtX3RhcmdldCAqcHJvY190YXJnZXQKKyAg ICAgICAgICAgID0gY3VycmVudF9pbmZlcmlvciAoKS0+cHJvY2Vzc190YXJnZXQgKCk7CisgIHRo cmVhZF9pbmZvICAqdHA7CisgIHN0cnVjdCBhaXhfdGhyZWFkX3ZhcmlhYmxlcyAqZGF0YTsKKyAg ZGF0YSA9IGdldF90aHJlYWRfZGF0YV9oZWxwZXJfZm9yX3BpZCAocGlkKTsKIAogICAvKiBBY2N1 bXVsYXRlIGFuIGFycmF5IG9mIGxpYnB0aGRlYnVnIHRocmVhZHMgc29ydGVkIGJ5IHB0aHJlYWQg aWQuICAqLwogCkBAIC03NTksMTEgKzgwNywxMSBAQCBzeW5jX3RocmVhZGxpc3RzIChpbnQgcGlk KQogCiAgIGZvciAoY21kID0gUFRIREJfTElTVF9GSVJTVDs7IGNtZCA9IFBUSERCX0xJU1RfTkVY VCkKICAgICB7Ci0gICAgICBzdGF0dXMgPSBwdGhkYl9wdGhyZWFkIChwZF9zZXNzaW9uLCAmcGR0 aWQsIGNtZCk7CisgICAgICBzdGF0dXMgPSBwdGhkYl9wdGhyZWFkIChkYXRhLT5wZF9zZXNzaW9u LCAmcGR0aWQsIGNtZCk7CiAgICAgICBpZiAoc3RhdHVzICE9IFBUSERCX1NVQ0NFU1MgfHwgcGR0 aWQgPT0gUFRIREJfSU5WQUxJRF9QVEhSRUFEKQogCWJyZWFrOwogCi0gICAgICBzdGF0dXMgPSBw dGhkYl9wdGhyZWFkX3B0aWQgKHBkX3Nlc3Npb24sIHBkdGlkLCAmcHRoaWQpOworICAgICAgc3Rh dHVzID0gcHRoZGJfcHRocmVhZF9wdGlkIChkYXRhLT5wZF9zZXNzaW9uLCBwZHRpZCwgJnB0aGlk KTsKICAgICAgIGlmIChzdGF0dXMgIT0gUFRIREJfU1VDQ0VTUyB8fCBwdGhpZCA9PSBQVEhEQl9J TlZBTElEX1BUSUQpCiAJY29udGludWU7CiAKQEAgLTc4MCw3ICs4MjgsNyBAQCBzeW5jX3RocmVh ZGxpc3RzIChpbnQgcGlkKQogCiAgIGZvciAocGkgPSAwOyBwaSA8IHBjb3VudDsgcGkrKykKICAg ICB7Ci0gICAgICBzdGF0dXMgPSBwdGhkYl9wdGhyZWFkX3RpZCAocGRfc2Vzc2lvbiwgcGJ1Zltw aV0ucGR0aWQsICZ0aWQpOworICAgICAgc3RhdHVzID0gcHRoZGJfcHRocmVhZF90aWQgKGRhdGEt PnBkX3Nlc3Npb24sIHBidWZbcGldLnBkdGlkLCAmdGlkKTsKICAgICAgIGlmIChzdGF0dXMgIT0g UFRIREJfU1VDQ0VTUykKIAl0aWQgPSBQVEhEQl9JTlZBTElEX1RJRDsKICAgICAgIHBidWZbcGld LnRpZCA9IHRpZDsKQEAgLTc5MCwxMCArODM4LDExIEBAIHN5bmNfdGhyZWFkbGlzdHMgKGludCBw aWQpCiAKICAgLyogQWNjdW11bGF0ZSBhbiBhcnJheSBvZiBHREIgdGhyZWFkcyBzb3J0ZWQgYnkg cGlkLiAgKi8KIAotICBnY291bnQgPSAwOwotICBpdGVyYXRlX292ZXJfdGhyZWFkcyAoZ2l0ZXJf Y291bnQsICZnY291bnQpOworICAvKiBnY291bnQgaXMgR0RCIHRocmVhZCBjb3VudCBhbmQgcGNv dW50IGlzIHB0aHJlYWRsaWIgdGhyZWFkIGNvdW50LiAgKi8KKworICBnY291bnQgPSBnaXRlcl9j b3VudCAocGlkKTsKICAgZyA9IGdidWYgPSBYTkVXVkVDIChzdHJ1Y3QgdGhyZWFkX2luZm8gKiwg Z2NvdW50KTsKLSAgaXRlcmF0ZV9vdmVyX3RocmVhZHMgKGdpdGVyX2FjY3VtLCAmZyk7CisgIGdp dGVyX2FjY3VtICgmZywgcGlkKTsKICAgcXNvcnQgKGdidWYsIGdjb3VudCwgc2l6ZW9mICpnYnVm LCBnY21wKTsKIAogICAvKiBBcHBseSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZSB0d28gYXJyYXlz IHRvIEdEQidzIHRocmVhZCBsaXN0LiAgKi8KQEAgLTgxMCw4ICs4NTksNiBAQCBzeW5jX3RocmVh ZGxpc3RzIChpbnQgcGlkKQogCSAgcHJpdi0+cGR0aWQgPSBwYnVmW3BpXS5wZHRpZDsKIAkgIHBy aXYtPnRpZCA9IHBidWZbcGldLnRpZDsKIAotCSAgcHJvY2Vzc19zdHJhdHVtX3RhcmdldCAqcHJv Y190YXJnZXQKLQkgICAgPSBjdXJyZW50X2luZmVyaW9yICgpLT5wcm9jZXNzX3RhcmdldCAoKTsK IAkgIHRocmVhZCA9IGFkZF90aHJlYWRfd2l0aF9pbmZvIChwcm9jX3RhcmdldCwKIAkJCQkJIHB0 aWRfdCAocGlkLCAwLCBwYnVmW3BpXS5wdGhpZCksCiAJCQkJCSBwcml2KTsKQEAgLTgzMCw2ICs4 NzcsMjMgQEAgc3luY190aHJlYWRsaXN0cyAoaW50IHBpZCkKIAogCSAgY21wX3Jlc3VsdCA9IHB0 aWRfY21wIChwcHRpZCwgZ3B0aWQpOwogCisJICAvKiBJZiB0aGVyZSBpcyBvbmx5IG9uZSB0aHJl YWQgdGhlbiB3ZSBuZWVkIG5vdCBtYWtlIHRoZSBtYWluIAorCSAgICAgdGhyZWFkIGxvb2sgbGlr ZSBhIHRocmVhZC4gIEl0IGNhbiBzdGF5IGFzIGEgcHJvY2Vzcy4gVGhpcworCSAgICAgaXMgdXNl ZnVsIHdoZW4gd2UgaGF2ZSBtdWx0aXBsZSBpbmZlcmlvcnMsIGJ1dCBvbmx5IG9uZSBpcworCSAg ICAgdGhyZWFkZWQuICBTbyB3ZSBuZWVkIG5vdCBtYWtlIHRoZSBvdGhlciBpbmZlcmlvcnMgd2l0 aCBvbmx5CisJICAgICBtYWluIHRocmVhZCwgbG9vayBsaWtlIGEgdGhyZWFkZWQgb25lLiAgRm9y IGV4YW1wbGUsIFRocmVhZAorCSAgICAgMS4xLCAxLjIsIDIuMSwgMy4xIGV4aXN0cyB0aGVuIGl0 IGlzIHVzZWZ1bCB0byBza2lwIHRoaXMgZm9yCisJICAgICBsb29wIGZvciAyLjEgYW5kIDMuMSBs ZWF2aW5nIHRoZW0gYXMgbWFpbiBwcm9jZXNzIHRocmVhZCB3aXRoCisJICAgICBhIGR1bW15IHBy aXYgc2V0LiAgKi8KKworCSAgaWYgKHBjb3VudCA9PSAxICYmIGdjb3VudCA9PSAxKQorCSAgewor CSAgICBhaXhfdGhyZWFkX2luZm8gKnByaXYgPSBuZXcgYWl4X3RocmVhZF9pbmZvOworCSAgICB0 cCA9IGZpbmRfdGhyZWFkX3B0aWQgKHByb2NfdGFyZ2V0LCBncHRpZCk7CisJICAgIHRwLT5wcml2 LnJlc2V0IChwcml2KTsKKwkgICAgYnJlYWs7CisJICB9CisKIAkgIGlmIChjbXBfcmVzdWx0ID09 IDApCiAJICAgIHsKIAkgICAgICBhaXhfdGhyZWFkX2luZm8gKnByaXYgPSBnZXRfYWl4X3RocmVh ZF9pbmZvIChnYnVmW2dpXSk7CkBAIC04NDEsOCArOTA1LDI1IEBAIHN5bmNfdGhyZWFkbGlzdHMg KGludCBwaWQpCiAJICAgIH0KIAkgIGVsc2UgaWYgKGNtcF9yZXN1bHQgPiAwKQogCSAgICB7Ci0J ICAgICAgZGVsZXRlX3RocmVhZCAoZ2J1ZltnaV0pOwotCSAgICAgIGdpKys7CisJICAgICAgLyog VGhpcyBpcyB0byBtYWtlIHRoZSBtYWluIHByb2Nlc3MgdGhyZWFkIG5vdyBsb29rCisJCSBsaWtl IGEgdGhyZWFkLiAgKi8KKworCSAgICAgIGlmIChncHRpZC5pc19waWQgKCkgJiYgZ3B0aWQucGlk ICgpID09IHBwdGlkLnBpZCAoKSkKKwkgICAgICB7CisJCXRocmVhZF9jaGFuZ2VfcHRpZCAocHJv Y190YXJnZXQsIGdwdGlkLCBwcHRpZCk7CisJCWFpeF90aHJlYWRfaW5mbyAqcHJpdiA9IG5ldyBh aXhfdGhyZWFkX2luZm87CisJCXByaXYtPnBkdGlkID0gcGJ1ZltwaV0ucGR0aWQ7CisJCXByaXYt PnRpZCA9IHBidWZbcGldLnRpZDsKKwkJdHAgPSBmaW5kX3RocmVhZF9wdGlkIChwcm9jX3Rhcmdl dCwgcHB0aWQpOworCQl0cC0+cHJpdi5yZXNldCAocHJpdik7CisJCXBpKys7CisJCWdpKys7CisJ ICAgICAgfQorCSAgICAgIGVsc2UKKwkgICAgICB7CisJCWRlbGV0ZV90aHJlYWQgKGdidWZbZ2ld KTsKKwkJZ2krKzsKKwkgICAgICB9CiAJICAgIH0KIAkgIGVsc2UKIAkgICAgewpAQCAtODg4LDEw ICs5NjksMTMgQEAgcGRfdXBkYXRlIChpbnQgcGlkKQogICBwdGhkYl90aWRfdCB0aWQ7CiAgIHN0 cnVjdCB0aHJlYWRfaW5mbyAqdGhyZWFkID0gTlVMTDsKIAotICBpZiAoIXBkX2FjdGl2ZSkKKyAg c3RydWN0IGFpeF90aHJlYWRfdmFyaWFibGVzICpkYXRhOworICBkYXRhID0gZ2V0X3RocmVhZF9k YXRhX2hlbHBlcl9mb3JfcGlkIChwaWQpOworCisgIGlmICghZGF0YS0+cGRfYWN0aXZlKQogICAg IHJldHVybiBwdGlkX3QgKHBpZCk7CiAKLSAgc3RhdHVzID0gcHRoZGJfc2Vzc2lvbl91cGRhdGUg KHBkX3Nlc3Npb24pOworICBzdGF0dXMgPSBwdGhkYl9zZXNzaW9uX3VwZGF0ZSAoZGF0YS0+cGRf c2Vzc2lvbik7CiAgIGlmIChzdGF0dXMgIT0gUFRIREJfU1VDQ0VTUykKICAgICByZXR1cm4gcHRp ZF90IChwaWQpOwogCkBAIC05MTgsMTUgKzEwMDIsMTcgQEAgc3RhdGljIHB0aWRfdAogcGRfYWN0 aXZhdGUgKGludCBwaWQpCiB7CiAgIGludCBzdGF0dXM7CisgIHN0cnVjdCBhaXhfdGhyZWFkX3Zh cmlhYmxlcyAqZGF0YTsKKyAgZGF0YSA9IGdldF90aHJlYWRfZGF0YV9oZWxwZXJfZm9yX3BpZCAo cGlkKTsKIAkJCiAgIHN0YXR1cyA9IHB0aGRiX3Nlc3Npb25faW5pdCAocGlkLCBhcmNoNjQgPyBQ RU1fNjRCSVQgOiBQRU1fMzJCSVQsCiAJCQkgICAgICAgUFRIREJfRkxBR19SRUdTLCAmcGRfY2Fs bGJhY2tzLCAKLQkJCSAgICAgICAmcGRfc2Vzc2lvbik7CisJCQkgICAgICAgJmRhdGEtPnBkX3Nl c3Npb24pOwogICBpZiAoc3RhdHVzICE9IFBUSERCX1NVQ0NFU1MpCiAgICAgewogICAgICAgcmV0 dXJuIHB0aWRfdCAocGlkKTsKICAgICB9Ci0gIHBkX2FjdGl2ZSA9IDE7CisgIGRhdGEtPnBkX2Fj dGl2ZSA9IDE7CiAgIHJldHVybiBwZF91cGRhdGUgKHBpZCk7CiB9CiAKQEAgLTkzNSwxMiArMTAy MSwxNSBAQCBwZF9hY3RpdmF0ZSAoaW50IHBpZCkKIHN0YXRpYyB2b2lkCiBwZF9kZWFjdGl2YXRl ICh2b2lkKQogewotICBpZiAoIXBkX2FjdGl2ZSkKKyAgc3RydWN0IGFpeF90aHJlYWRfdmFyaWFi bGVzICpkYXRhOworICBkYXRhID0gZ2V0X3RocmVhZF9kYXRhX2hlbHBlcl9mb3JfcHRpZCAoaW5m ZXJpb3JfcHRpZCk7CisKKyAgaWYgKCFkYXRhLT5wZF9hY3RpdmUpCiAgICAgcmV0dXJuOwotICBw dGhkYl9zZXNzaW9uX2Rlc3Ryb3kgKHBkX3Nlc3Npb24pOworICBwdGhkYl9zZXNzaW9uX2Rlc3Ry b3kgKGRhdGEtPnBkX3Nlc3Npb24pOwogICAKICAgcGlkX3RvX3ByYyAoJmluZmVyaW9yX3B0aWQp OwotICBwZF9hY3RpdmUgPSAwOworICBkYXRhLT5wZF9hY3RpdmUgPSAwOwogfQogCiAvKiBBbiBv YmplY3QgZmlsZSBoYXMganVzdCBiZWVuIGxvYWRlZC4gIENoZWNrIHdoZXRoZXIgdGhlIGN1cnJl bnQKQEAgLTk1Myw4ICsxMDQyLDE0IEBAIHBkX2VuYWJsZSAodm9pZCkKICAgY2hhciAqc3R1Yl9u YW1lOwogICBzdHJ1Y3QgYm91bmRfbWluaW1hbF9zeW1ib2wgbXM7CiAKKyAgaWYgKCFpbmZlcmlv cl9wdGlkLnBpZCAoKSkKKyAgICByZXR1cm47CisgIAorICBzdHJ1Y3QgYWl4X3RocmVhZF92YXJp YWJsZXMgKmRhdGE7CisgIGRhdGEgPSBnZXRfdGhyZWFkX2RhdGFfaGVscGVyX2Zvcl9wdGlkIChp bmZlcmlvcl9wdGlkKTsKKwogICAvKiBEb24ndCBpbml0aWFsaXplIHR3aWNlLiAgKi8KLSAgaWYg KHBkX2FibGUpCisgIGlmIChkYXRhLT5wZF9hYmxlKQogICAgIHJldHVybjsKIAogICAvKiBDaGVj ayBhcHBsaWNhdGlvbiB3b3JkIHNpemUuICAqLwpAQCAtOTc4LDcgKzEwNzMsNyBAQCBwZF9lbmFi bGUgKHZvaWQpCiAKICAgLyogUHJlcGFyZSBmb3IgdGhyZWFkIGRlYnVnZ2luZy4gICovCiAgIGN1 cnJlbnRfaW5mZXJpb3IgKCktPnB1c2hfdGFyZ2V0ICgmYWl4X3RocmVhZF9vcHMpOwotICBwZF9h YmxlID0gMTsKKyAgZGF0YS0+cGRfYWJsZSA9IDE7IAogCiAgIC8qIElmIHdlJ3JlIGRlYnVnZ2lu ZyBhIGNvcmUgZmlsZSBvciBhbiBhdHRhY2hlZCBpbmZlcmlvciwgdGhlCiAgICAgIHB0aHJlYWQg bGlicmFyeSBtYXkgYWxyZWFkeSBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQsIHNvIHRyeSB0bwpAQCAt OTkxLDI4ICsxMDg2LDI3IEBAIHBkX2VuYWJsZSAodm9pZCkKIHN0YXRpYyB2b2lkCiBwZF9kaXNh YmxlICh2b2lkKQogewotICBpZiAoIXBkX2FibGUpCisgIHN0cnVjdCBhaXhfdGhyZWFkX3Zhcmlh YmxlcyAqZGF0YTsKKyAgZGF0YSA9IGdldF90aHJlYWRfZGF0YV9oZWxwZXJfZm9yX3B0aWQgKGlu ZmVyaW9yX3B0aWQpOworCisgIGlmICghZGF0YS0+cGRfYWJsZSkKICAgICByZXR1cm47Ci0gIGlm IChwZF9hY3RpdmUpCisgIGlmIChkYXRhLT5wZF9hY3RpdmUpCiAgICAgcGRfZGVhY3RpdmF0ZSAo KTsKLSAgcGRfYWJsZSA9IDA7CisgIGRhdGEtPnBkX2FibGUgPSAwOwogICBjdXJyZW50X2luZmVy aW9yICgpLT51bnB1c2hfdGFyZ2V0ICgmYWl4X3RocmVhZF9vcHMpOwogfQogCiAvKiBuZXdfb2Jq ZmlsZSBvYnNlcnZlciBjYWxsYmFjay4KIAogICAgSWYgT0JKRklMRSBpcyBub24tbnVsbCwgY2hl Y2sgd2hldGhlciBhIHRocmVhZGVkIGFwcGxpY2F0aW9uIGlzCi0gICBiZWluZyBkZWJ1Z2dlZCwg YW5kIGlmIHNvLCBwcmVwYXJlIGZvciB0aHJlYWQgZGVidWdnaW5nLgotCi0gICBJZiBPQkpGSUxF IGlzIG51bGwsIHN0b3AgZGVidWdnaW5nIHRocmVhZHMuICAqLworICAgYmVpbmcgZGVidWdnZWQs IGFuZCBpZiBzbywgcHJlcGFyZSBmb3IgdGhyZWFkIGRlYnVnZ2luZy4gICovCiAKIHN0YXRpYyB2 b2lkCiBuZXdfb2JqZmlsZSAoc3RydWN0IG9iamZpbGUgKm9iamZpbGUpCiB7CiAgIGlmIChvYmpm aWxlKQogICAgIHBkX2VuYWJsZSAoKTsKLSAgZWxzZQotICAgIHBkX2Rpc2FibGUgKCk7CiB9CiAK IC8qIEF0dGFjaCB0byBwcm9jZXNzIHNwZWNpZmllZCBieSBBUkdTLiAgKi8KQEAgLTEwNDIsOCAr MTEzNiwxMCBAQCBhaXhfdGhyZWFkX3RhcmdldDo6cmVzdW1lIChwdGlkX3QgcHRpZCwgaW50IHN0 ZXAsIGVudW0gZ2RiX3NpZ25hbCBzaWcpCiB7CiAgIHN0cnVjdCB0aHJlYWRfaW5mbyAqdGhyZWFk OwogICBwdGhkYl90aWRfdCB0aWRbMl07CisgIHN0cnVjdCBhaXhfdGhyZWFkX3ZhcmlhYmxlcyAq ZGF0YTsKKyAgZGF0YSA9IGdldF90aHJlYWRfZGF0YV9oZWxwZXJfZm9yX3B0aWQgKHB0aWQpOwog Ci0gIGlmICghUERfVElEIChwdGlkKSkKKyAgaWYgKCFQRF9USUQgKHB0aWQsIGRhdGEpKQogICAg IHsKICAgICAgIHNjb3BlZF9yZXN0b3JlIHNhdmVfaW5mZXJpb3JfcHRpZCA9IG1ha2Vfc2NvcGVk X3Jlc3RvcmUgKCZpbmZlcmlvcl9wdGlkKTsKICAgICAgIApAQCAtMTA5NSw4ICsxMTkxLDExIEBA IGFpeF90aHJlYWRfdGFyZ2V0Ojp3YWl0IChwdGlkX3QgcHRpZCwgc3RydWN0IHRhcmdldF93YWl0 c3RhdHVzICpzdGF0dXMsCiAgICAgIHBpZC1vbmx5IHB0aWRzLiAgKi8KICAgZ2RiX2Fzc2VydCAo cHRpZC5pc19waWQgKCkpOwogCisgIHN0cnVjdCBhaXhfdGhyZWFkX3ZhcmlhYmxlcyAqZGF0YTsK KyAgZGF0YSA9IGdldF90aHJlYWRfZGF0YV9oZWxwZXJfZm9yX3B0aWQgKHB0aWQpOworCiAgIC8q IENoZWNrIHdoZXRoZXIgbGlicHRoZGVidWcgbWlnaHQgYmUgcmVhZHkgdG8gYmUgaW5pdGlhbGl6 ZWQuICAqLwotICBpZiAoIXBkX2FjdGl2ZSAmJiBzdGF0dXMtPmtpbmQgKCkgPT0gVEFSR0VUX1dB SVRLSU5EX1NUT1BQRUQKKyAgaWYgKCFkYXRhLT5wZF9hY3RpdmUgJiYgc3RhdHVzLT5raW5kICgp ID09IFRBUkdFVF9XQUlUS0lORF9TVE9QUEVECiAgICAgICAmJiBzdGF0dXMtPnNpZyAoKSA9PSBH REJfU0lHTkFMX1RSQVApCiAgICAgewogICAgICAgcHJvY2Vzc19zdHJhdHVtX3RhcmdldCAqcHJv Y190YXJnZXQKQEAgLTEyMjksMTEgKzEzMjgsMTMgQEAgZmV0Y2hfcmVnc191c2VyX3RocmVhZCAo c3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwgcHRoZGJfcHRocmVhZF90IHBkdGlkKQogICBwcGNf Z2RiYXJjaF90ZGVwICp0ZGVwID0gZ2RiYXJjaF90ZGVwPHBwY19nZGJhcmNoX3RkZXA+IChnZGJh cmNoKTsKICAgaW50IHN0YXR1cywgaTsKICAgcHRoZGJfY29udGV4dF90IGN0eDsKKyAgc3RydWN0 IGFpeF90aHJlYWRfdmFyaWFibGVzICpkYXRhOworICBkYXRhID0gZ2V0X3RocmVhZF9kYXRhX2hl bHBlcl9mb3JfcHRpZCAoaW5mZXJpb3JfcHRpZCk7CiAKICAgaWYgKGRlYnVnX2FpeF90aHJlYWQp CiAgICAgZ2RiX3ByaW50ZiAoZ2RiX3N0ZGxvZywgCiAJCSJmZXRjaF9yZWdzX3VzZXJfdGhyZWFk ICVseFxuIiwgKGxvbmcpIHBkdGlkKTsKLSAgc3RhdHVzID0gcHRoZGJfcHRocmVhZF9jb250ZXh0 IChwZF9zZXNzaW9uLCBwZHRpZCwgJmN0eCk7CisgIHN0YXR1cyA9IHB0aGRiX3B0aHJlYWRfY29u dGV4dCAoZGF0YS0+cGRfc2Vzc2lvbiwgcGR0aWQsICZjdHgpOwogICBpZiAoc3RhdHVzICE9IFBU SERCX1NVQ0NFU1MpCiAgICAgZXJyb3IgKF8oImFpeC10aHJlYWQ6IGZldGNoX3JlZ2lzdGVyczog cHRoZGJfcHRocmVhZF9jb250ZXh0IHJldHVybmVkICVzIiksCiAJICAgcGRfc3RhdHVzMnN0ciAo c3RhdHVzKSk7CkBAIC0xMzYyLDggKzE0NjMsMTAgQEAgYWl4X3RocmVhZF90YXJnZXQ6OmZldGNo X3JlZ2lzdGVycyAoc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwgaW50IHJlZ25vKQogewogICBz dHJ1Y3QgdGhyZWFkX2luZm8gKnRocmVhZDsKICAgcHRoZGJfdGlkX3QgdGlkOworICBzdHJ1Y3Qg YWl4X3RocmVhZF92YXJpYWJsZXMgKmRhdGE7CisgIGRhdGEgPSBnZXRfdGhyZWFkX2RhdGFfaGVs cGVyX2Zvcl9wdGlkIChyZWdjYWNoZS0+cHRpZCAoKSk7CiAKLSAgaWYgKCFQRF9USUQgKHJlZ2Nh Y2hlLT5wdGlkICgpKSkKKyAgaWYgKCFQRF9USUQgKHJlZ2NhY2hlLT5wdGlkICgpLCBkYXRhKSkK ICAgICBiZW5lYXRoICgpLT5mZXRjaF9yZWdpc3RlcnMgKHJlZ2NhY2hlLCByZWdubyk7CiAgIGVs c2UKICAgICB7CkBAIC0xNTExLDYgKzE2MTQsOCBAQCBzdG9yZV9yZWdzX3VzZXJfdGhyZWFkIChj b25zdCBzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLCBwdGhkYl9wdGhyZWFkX3QgcGR0aWQpCiAg IHB0aGRiX2NvbnRleHRfdCBjdHg7CiAgIHVpbnQzMl90IGludDMyOwogICB1aW50NjRfdCBpbnQ2 NDsKKyAgc3RydWN0IGFpeF90aHJlYWRfdmFyaWFibGVzICpkYXRhOworICBkYXRhID0gZ2V0X3Ro cmVhZF9kYXRhX2hlbHBlcl9mb3JfcHRpZCAoaW5mZXJpb3JfcHRpZCk7CiAKICAgaWYgKGRlYnVn X2FpeF90aHJlYWQpCiAgICAgZ2RiX3ByaW50ZiAoZ2RiX3N0ZGxvZywgCkBAIC0xNTE4LDcgKzE2 MjMsNyBAQCBzdG9yZV9yZWdzX3VzZXJfdGhyZWFkIChjb25zdCBzdHJ1Y3QgcmVnY2FjaGUgKnJl Z2NhY2hlLCBwdGhkYl9wdGhyZWFkX3QgcGR0aWQpCiAKICAgLyogUmV0cmlldmUgdGhlIHRocmVh ZCdzIGN1cnJlbnQgY29udGV4dCBmb3IgaXRzIG5vbi1yZWdpc3RlcgogICAgICB2YWx1ZXMuICAq LwotICBzdGF0dXMgPSBwdGhkYl9wdGhyZWFkX2NvbnRleHQgKHBkX3Nlc3Npb24sIHBkdGlkLCAm Y3R4KTsKKyAgc3RhdHVzID0gcHRoZGJfcHRocmVhZF9jb250ZXh0IChkYXRhLT5wZF9zZXNzaW9u LCBwZHRpZCwgJmN0eCk7CiAgIGlmIChzdGF0dXMgIT0gUFRIREJfU1VDQ0VTUykKICAgICBlcnJv ciAoXygiYWl4LXRocmVhZDogc3RvcmVfcmVnaXN0ZXJzOiBwdGhkYl9wdGhyZWFkX2NvbnRleHQg cmV0dXJuZWQgJXMiKSwKIAkgICBwZF9zdGF0dXMyc3RyIChzdGF0dXMpKTsKQEAgLTE1NzYsNyAr MTY4MSw3IEBAIHN0b3JlX3JlZ3NfdXNlcl90aHJlYWQgKGNvbnN0IHN0cnVjdCByZWdjYWNoZSAq cmVnY2FjaGUsIHB0aGRiX3B0aHJlYWRfdCBwZHRpZCkKIAljdHguZnBzY3IgPSB0bXBfZnBzY3I7 CiAgICAgfQogCi0gIHN0YXR1cyA9IHB0aGRiX3B0aHJlYWRfc2V0Y29udGV4dCAocGRfc2Vzc2lv biwgcGR0aWQsICZjdHgpOworICBzdGF0dXMgPSBwdGhkYl9wdGhyZWFkX3NldGNvbnRleHQgKGRh dGEtPnBkX3Nlc3Npb24sIHBkdGlkLCAmY3R4KTsKICAgaWYgKHN0YXR1cyAhPSBQVEhEQl9TVUND RVNTKQogICAgIGVycm9yIChfKCJhaXgtdGhyZWFkOiBzdG9yZV9yZWdpc3RlcnM6ICIKIAkgICAg ICJwdGhkYl9wdGhyZWFkX3NldGNvbnRleHQgcmV0dXJuZWQgJXMiKSwKQEAgLTE3MDIsOCArMTgw NywxMCBAQCBhaXhfdGhyZWFkX3RhcmdldDo6c3RvcmVfcmVnaXN0ZXJzIChzdHJ1Y3QgcmVnY2Fj aGUgKnJlZ2NhY2hlLCBpbnQgcmVnbm8pCiB7CiAgIHN0cnVjdCB0aHJlYWRfaW5mbyAqdGhyZWFk OwogICBwdGhkYl90aWRfdCB0aWQ7CisgIHN0cnVjdCBhaXhfdGhyZWFkX3ZhcmlhYmxlcyAqZGF0 YTsKKyAgZGF0YSA9IGdldF90aHJlYWRfZGF0YV9oZWxwZXJfZm9yX3B0aWQgKGluZmVyaW9yX3B0 aWQpOwogCi0gIGlmICghUERfVElEIChyZWdjYWNoZS0+cHRpZCAoKSkpCisgIGlmICghUERfVElE IChyZWdjYWNoZS0+cHRpZCAoKSwgZGF0YSkpCiAgICAgYmVuZWF0aCAoKS0+c3RvcmVfcmVnaXN0 ZXJzIChyZWdjYWNoZSwgcmVnbm8pOwogICBlbHNlCiAgICAgewpAQCAtMTc0MSw3ICsxODQ4LDcg QEAgYWl4X3RocmVhZF90YXJnZXQ6Om1vdXJuX2luZmVyaW9yICgpCiB7CiAgIHRhcmdldF9vcHMg KmJlbmVhdGggPSB0aGlzLT5iZW5lYXRoICgpOwogCi0gIHBkX2RlYWN0aXZhdGUgKCk7CisgIHBk X2Rpc2FibGUgKCk7CiAgIGJlbmVhdGgtPm1vdXJuX2luZmVyaW9yICgpOwogfQogCkBAIC0xNzUw LDcgKzE4NTcsMTAgQEAgYWl4X3RocmVhZF90YXJnZXQ6Om1vdXJuX2luZmVyaW9yICgpCiBib29s CiBhaXhfdGhyZWFkX3RhcmdldDo6dGhyZWFkX2FsaXZlIChwdGlkX3QgcHRpZCkKIHsKLSAgaWYg KCFQRF9USUQgKHB0aWQpKQorICBzdHJ1Y3QgYWl4X3RocmVhZF92YXJpYWJsZXMgKmRhdGE7Cisg IGRhdGEgPSBnZXRfdGhyZWFkX2RhdGFfaGVscGVyX2Zvcl9wdGlkIChpbmZlcmlvcl9wdGlkKTsK KworICBpZiAoIVBEX1RJRCAocHRpZCwgZGF0YSkpCiAgICAgcmV0dXJuIGJlbmVhdGggKCktPnRo cmVhZF9hbGl2ZSAocHRpZCk7CiAKICAgLyogV2UgdXBkYXRlIHRoZSB0aHJlYWQgbGlzdCBldmVy eSB0aW1lIHRoZSBjaGlsZCBzdG9wcywgc28gYWxsCkBAIC0xNzY2LDcgKzE4NzYsMTAgQEAgYWl4 X3RocmVhZF90YXJnZXQ6OnRocmVhZF9hbGl2ZSAocHRpZF90IHB0aWQpCiBzdGQ6OnN0cmluZwog YWl4X3RocmVhZF90YXJnZXQ6OnBpZF90b19zdHIgKHB0aWRfdCBwdGlkKQogewotICBpZiAoIVBE X1RJRCAocHRpZCkpCisgIHN0cnVjdCBhaXhfdGhyZWFkX3ZhcmlhYmxlcyAqZGF0YTsKKyAgZGF0 YSA9IGdldF90aHJlYWRfZGF0YV9oZWxwZXJfZm9yX3B0aWQgKHB0aWQpOworCisgIGlmICghUERf VElEIChwdGlkLCBkYXRhKSkKICAgICByZXR1cm4gYmVuZWF0aCAoKS0+cGlkX3RvX3N0ciAocHRp ZCk7CiAKICAgcmV0dXJuIHN0cmluZ19wcmludGYgKF8oIlRocmVhZCAlcyIpLCBwdWxvbmdlc3Qg KHB0aWQudGlkICgpKSk7CkBAIC0xNzg2LDggKzE4OTksMTAgQEAgYWl4X3RocmVhZF90YXJnZXQ6 OmV4dHJhX3RocmVhZF9pbmZvIChzdHJ1Y3QgdGhyZWFkX2luZm8gKnRocmVhZCkKICAgcHRoZGJf ZGV0YWNoc3RhdGVfdCBkZXRhY2hzdGF0ZTsKICAgaW50IGNhbmNlbHBlbmQ7CiAgIHN0YXRpYyBj aGFyICpyZXQgPSBOVUxMOworICBzdHJ1Y3QgYWl4X3RocmVhZF92YXJpYWJsZXMgKmRhdGE7Cisg IGRhdGEgPSBnZXRfdGhyZWFkX2RhdGFfaGVscGVyX2Zvcl9wdGlkICh0aHJlYWQtPnB0aWQpOwog Ci0gIGlmICghUERfVElEICh0aHJlYWQtPnB0aWQpKQorICBpZiAoIVBEX1RJRCAodGhyZWFkLT5w dGlkLCBkYXRhKSkKICAgICByZXR1cm4gTlVMTDsKIAogICBzdHJpbmdfZmlsZSBidWY7CkBAIC0x ODAwLDI0ICsxOTE1LDI0IEBAIGFpeF90aHJlYWRfdGFyZ2V0OjpleHRyYV90aHJlYWRfaW5mbyAo c3RydWN0IHRocmVhZF9pbmZvICp0aHJlYWQpCiAgICAgLyogaTE4bjogTGlrZSAidGhyZWFkLWlk ZW50aWZpZXIgJWQsIFtzdGF0ZV0gcnVubmluZywgc3VzcGVuZGVkIiAqLwogICAgIGJ1Zi5wcmlu dGYgKF8oInRpZCAlZCIpLCAoaW50KXRpZCk7CiAKLSAgc3RhdHVzID0gcHRoZGJfcHRocmVhZF9z dGF0ZSAocGRfc2Vzc2lvbiwgcGR0aWQsICZzdGF0ZSk7CisgIHN0YXR1cyA9IHB0aGRiX3B0aHJl YWRfc3RhdGUgKGRhdGEtPnBkX3Nlc3Npb24sIHBkdGlkLCAmc3RhdGUpOwogICBpZiAoc3RhdHVz ICE9IFBUSERCX1NVQ0NFU1MpCiAgICAgc3RhdGUgPSBQU1RfTk9UU1VQOwogICBidWYucHJpbnRm ICgiLCAlcyIsIHN0YXRlMnN0ciAoc3RhdGUpKTsKIAotICBzdGF0dXMgPSBwdGhkYl9wdGhyZWFk X3N1c3BlbmRzdGF0ZSAocGRfc2Vzc2lvbiwgcGR0aWQsIAorICBzdGF0dXMgPSBwdGhkYl9wdGhy ZWFkX3N1c3BlbmRzdGF0ZSAoZGF0YS0+cGRfc2Vzc2lvbiwgcGR0aWQsIAogCQkJCSAgICAgICAm c3VzcGVuZHN0YXRlKTsKICAgaWYgKHN0YXR1cyA9PSBQVEhEQl9TVUNDRVNTICYmIHN1c3BlbmRz dGF0ZSA9PSBQU1NfU1VTUEVOREVEKQogICAgIC8qIGkxOG46IExpa2UgIlRocmVhZC1JZCAlZCwg W3N0YXRlXSBydW5uaW5nLCBzdXNwZW5kZWQiICovCiAgICAgYnVmLnByaW50ZiAoXygiLCBzdXNw ZW5kZWQiKSk7CiAKLSAgc3RhdHVzID0gcHRoZGJfcHRocmVhZF9kZXRhY2hzdGF0ZSAocGRfc2Vz c2lvbiwgcGR0aWQsIAorICBzdGF0dXMgPSBwdGhkYl9wdGhyZWFkX2RldGFjaHN0YXRlIChkYXRh LT5wZF9zZXNzaW9uLCBwZHRpZCwgCiAJCQkJICAgICAgJmRldGFjaHN0YXRlKTsKICAgaWYgKHN0 YXR1cyA9PSBQVEhEQl9TVUNDRVNTICYmIGRldGFjaHN0YXRlID09IFBEU19ERVRBQ0hFRCkKICAg ICAvKiBpMThuOiBMaWtlICJUaHJlYWQtSWQgJWQsIFtzdGF0ZV0gcnVubmluZywgZGV0YWNoZWQi ICovCiAgICAgYnVmLnByaW50ZiAoXygiLCBkZXRhY2hlZCIpKTsKIAotICBwdGhkYl9wdGhyZWFk X2NhbmNlbHBlbmQgKHBkX3Nlc3Npb24sIHBkdGlkLCAmY2FuY2VscGVuZCk7CisgIHB0aGRiX3B0 aHJlYWRfY2FuY2VscGVuZCAoZGF0YS0+cGRfc2Vzc2lvbiwgcGR0aWQsICZjYW5jZWxwZW5kKTsK ICAgaWYgKHN0YXR1cyA9PSBQVEhEQl9TVUNDRVNTICYmIGNhbmNlbHBlbmQpCiAgICAgLyogaTE4 bjogTGlrZSAiVGhyZWFkLUlkICVkLCBbc3RhdGVdIHJ1bm5pbmcsIGNhbmNlbCBwZW5kaW5nIiAq LwogICAgIGJ1Zi5wcmludGYgKF8oIiwgY2FuY2VsIHBlbmRpbmciKSk7CmRpZmYgLS1naXQgYS9n ZGIvc29saWItYWl4LmMgYi9nZGIvc29saWItYWl4LmMKaW5kZXggZjQ4M2Y1NGRlMTMuLjA5ZDAz M2VmNDczIDEwMDY0NAotLS0gYS9nZGIvc29saWItYWl4LmMKKysrIGIvZ2RiL3NvbGliLWFpeC5j CkBAIC01NjUsNiArNTY1LDcgQEAgc29saWJfYWl4X2JmZF9vcGVuIChjb25zdCBjaGFyICpwYXRo bmFtZSkKICAgY29uc3QgY2hhciAqc2VwOwogICBpbnQgZmlsZW5hbWVfbGVuOwogICBpbnQgZm91 bmRfZmlsZTsKKyAgc3RkOjpzdHJpbmcgc3RyaW5nX3BhdGggPSBwYXRobmFtZTsKIAogICBpZiAo cGF0aG5hbWVbcGF0aF9sZW4gLSAxXSAhPSAnKScpCiAgICAgcmV0dXJuIHNvbGliX2JmZF9vcGVu IChwYXRobmFtZSk7CkBAIC02MTgsNiArNjE5LDE1IEBAIHNvbGliX2FpeF9iZmRfb3BlbiAoY29u c3QgY2hhciAqcGF0aG5hbWUpCiAgICAgICBpZiAobWVtYmVyX25hbWUgPT0gYmZkX2dldF9maWxl bmFtZSAob2JqZWN0X2JmZC5nZXQgKCkpKQogCWJyZWFrOwogCisgICAgICBzdGQ6OnN0cmluZyBz ID0gYmZkX2dldF9maWxlbmFtZSAob2JqZWN0X2JmZC5nZXQgKCkpOworCisgICAgICAvKiBGb3Ig ZXZlcnkgaW5mZXJpb3IgYWZ0ZXIgZmlyc3QgaW50IGJmZCBzeXN0ZW0gd2UgCisJIHdpbGwgaGF2 ZSB0aGUgcGF0aG5hbWUgaW5zdGVhZCBvZiB0aGUgbWVtYmVyIG5hbWUKKwkgcmVnaXN0ZXJlZC4g SGVuY2UgdGhlIGJlbG93IGNvbmRpdGlvbiBleGlzdHMuICAqLworCisgICAgICBpZiAoc3RyaW5n X3BhdGguY29tcGFyZSAocykgPT0gMCkKKwlyZXR1cm4gb2JqZWN0X2JmZDsKKwogICAgICAgb2Jq ZWN0X2JmZCA9IGdkYl9iZmRfb3BlbnJfbmV4dF9hcmNoaXZlZF9maWxlIChhcmNoaXZlX2JmZC5n ZXQgKCksCiAJCQkJCQkgICAgIG9iamVjdF9iZmQuZ2V0ICgpKTsKICAgICB9Ci0tIAoyLjMxLjEK Cg== --_004_CH2PR15MB35449137854F561F1EA7DE04D6D69CH2PR15MB3544namp_--