From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id WP1oGbs84mMsOSwAWB0awg (envelope-from ) for ; Tue, 07 Feb 2023 06:57:47 -0500 Received: by simark.ca (Postfix, from userid 112) id 63E191E15D; Tue, 7 Feb 2023 06:57:47 -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=r3kqCM4d; 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=-4.3 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED, RDNS_DYNAMIC,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 Received: from sourceware.org (ip-8-43-85-97.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 162C41E0D3 for ; Tue, 7 Feb 2023 06:57:46 -0500 (EST) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 4AC8D3858C62 for ; Tue, 7 Feb 2023 11:57:45 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 4AC8D3858C62 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1675771065; bh=oxYfxSovFc216V55qYMmWMf4xNut7fZ/porFVkpW9+c=; 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=r3kqCM4dWPMJGq6Cfi9G7rwcc9vFZoozkTAxNCVp4VJERo+J/o+YucQOrdnIPHlWY htwEW+PTLRTxF1/XUG3lXOl+oAbVY3hguo1+zOASYXhlNsd+fYuSXZOlrAuYaN44qq jxU24Fu0eeH0QzK6DjW7FOBm5S3tVc2ivA07vrR8= Received: from mx0a-001b2d01.pphosted.com (mx0a-001b2d01.pphosted.com [148.163.156.1]) by sourceware.org (Postfix) with ESMTPS id 03E1D3858D33 for ; Tue, 7 Feb 2023 11:57:18 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 03E1D3858D33 Received: from pps.filterd (m0098410.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 317B92SL010922; Tue, 7 Feb 2023 11:57:16 GMT Received: from nam12-mw2-obe.outbound.protection.outlook.com (mail-mw2nam12lp2044.outbound.protection.outlook.com [104.47.66.44]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 3nkksyc8xk-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 07 Feb 2023 11:57:15 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=eEIPLSfIDn6bE0JsHXdJK4p+sizs2NU6w8frwvl7NCxughd+21T1MdUy9c0mmZZDZuWz74nWQYsffTJH9EnDVUtzC+IvkzHY675qNL8Y/3cDziprBCr2fijptcdpndduAUElI/aTZAiXdwtVac9B5ezlAqIvjxmJI1wZcpOLY3MCJHHwP9CCyw6+NGHiXIZ5lpwYHESFhHikA+VRaQT+QChKa+XvEletZpNyHCWO9Y7Km1hD5VqcqiRc+1yQlNbd455O1VN4LQ5o8Upf01wlUc7or1oM/BSJj0diPULQ3szMttzuKQdwpuOEdZzlMSpAh3aa1Qk+OqC7UD+tx2u8gQ== 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=Tkmqg8JeQRvvHaaRL7lbHZUA8owW/bwpY34Xd+uH8OQ=; b=Ilm9tEjStNfwH1Qg5OTUlOdIjzebcFipRmXxlPe1JChZ0A0F0BlPX32iRRXnT/6dsuoZfcB4nZX8PWqUq1lp9yiXRs9PgrHoowRxwUkvNzlO35edxX/WInc6kG3aVN63wVDwmBIAEeAcm8C5xOZuMjFBHMRIG/8gw/H9vVCuohIU7Oo54y5LFC1xIn7DB90rtPv3nlk91FjBi7lJTw8zwhfc1aVvMg7ZEsHlCfzehL7bN0r0kta7TMCeUwnXPzH37jv8yfSV+LTaY2xj0ehpCCNMw7vn+NIInmM3OlscuwTmOc5mEO3d7+BQoyyoaIIhd0j30+wP2clnoPDr5ZTWFw== 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 MN0PR15MB5370.namprd15.prod.outlook.com (2603:10b6:208:375::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6064.36; Tue, 7 Feb 2023 11:57:13 +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.6064.036; Tue, 7 Feb 2023 11:57:12 +0000 To: Ulrich Weigand , "simark@simark.ca" , "gdb-patches@sourceware.org" 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+iAAawUgIADF3ySgAshzACACvn7HoAI6B4pgAADGXOAALszAIABIz5JgAU9kgCAARgy1A== Date: Tue, 7 Feb 2023 11:57:12 +0000 Message-ID: References: <09f2433177505899c9bd31347af9b43118e4f890.camel@de.ibm.com> <8b7c91369d53c1ace668ff03f4d819a66f5e64e6.camel@de.ibm.com> In-Reply-To: <8b7c91369d53c1ace668ff03f4d819a66f5e64e6.camel@de.ibm.com> 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_|MN0PR15MB5370:EE_ x-ms-office365-filtering-correlation-id: c48962d4-c193-4c6b-acd7-08db0902731a x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: 6Qp3rbtZJt0BXSK/LHwfGoIiLBJEEMGN/NVZE0q6z72lkQIJIjb09qsuhTPmO4ayaVKfLJyiicgXmL+DEYzkEraoIEYU9ubrYuCs04GrkFjxf/53ojrVbZZwyvCvXAjMzv1xKmpjS+/QRAgiBKpXQE1HLGk8/gd9HzvA43DgunL1OstpwmHiTUKhFgvfFAUMCwkaStid+HTV8OC2WvidTvjOndM1h1lt9RSTSdGkRwA7SUDPdNsxWVaS0Cmmfq2haOYItBOVbABLF8gag8LH9Csko3x3itp4fSZbuLmQU3AfaWrdalkPjwJ7UUc23lLDVqIh5SWQ4wNQLmbnyXP+razwgdLVwyUWwHby8hhE/H+4t9TXXb8S6lNbgbOkUP91C3mCGjnc6DzFbboqNnZM7UghpPC0VAZNfqt2w5xrr33lLkkpMUYgRp6b4B7uuk6wxnLleigv4rQ+IsR959UNoBXFLF4K67VhzF3WLW0klp+QRml/B96WwRCYImJ4ElKchDAzpRRgr/rOyBPPQVC4mogWODR9Wg2CL/x1JjLSVNjcc/7kdOht3EU+A6zsX4CMhVR7MkOZYYhpEdEdMV3qdyX5YNJ4VSxyM5Cwwzn20vjnIRDkdVwTu8ykjfZ7lJJJ86dBhZDKrjdKy9vX9WYerwoHt/cZQXeGW9NZ8+fCPCFTa0obXxa1TuScs1pAGVH59qAkfi2qb+K4g5aWQbQAag== 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)(136003)(346002)(396003)(39860400002)(376002)(366004)(451199018)(2906002)(33656002)(83380400001)(7696005)(71200400001)(53546011)(9686003)(26005)(186003)(6506007)(478600001)(76116006)(66476007)(64756008)(66446008)(66556008)(66946007)(91956017)(4326008)(8676002)(5660300002)(55016003)(86362001)(52536014)(8936002)(41300700001)(316002)(30864003)(99936003)(110136005)(38070700005)(122000001)(38100700002)(19627405001)(559001)(579004); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?Mc+dov6xxtEm1TOfyWsb++6YGQHlecKJsASBJR9gJAe+H6gIbwehVtmcl+dc?= =?us-ascii?Q?bGkSy4HtIkeosgTZacA/P1oA/RzIo7PY5SJClvKlvMMhZ+2N1tUfOtTk9iwi?= =?us-ascii?Q?xVPc7mHA0e9US9RNnTGcfLn4zD7C7eeKAVCDKhAbL9c7GXhTeoswootEA7yJ?= =?us-ascii?Q?HxmP5GXPqfF7AY36RwmzqVKGf82JMbYK5YSwV+JNUNgtuMm/bSHzutH2kNoJ?= =?us-ascii?Q?YMjLzazXa4/g6M2+QMNX7VlVVSbyXELodlKEtIIWQ4dOpmr5CB/pkQBB4ulc?= =?us-ascii?Q?QyT38GNp3ORlq6ezDI3ztN1zbP/2jSOgNlDcrv7rpop0C+gsrC6WOfPo8Xtl?= =?us-ascii?Q?Dsg/KQh+ajwH98O1Jy/68xstgZY80PUgLeyay7AZ3N2d2h4+RC6j4H55mbbv?= =?us-ascii?Q?jp1BQ8/gdLDaGesBH5It0sEdkW4RBswInOYZhZHm7hSLYbqMtwTF95lVw7b0?= =?us-ascii?Q?vmg1Ua4A0yUIh2lsNwS0iLFrU6J4xmgua9L6o838nrVGMbNMBcv1xN2WoXDP?= =?us-ascii?Q?rr+mRYv1aXon4OOYZM5NW/4LDUJI09dcWo54RcjyvESd64E3d9Q0hRiDuJzJ?= =?us-ascii?Q?8aCxUo1pcZK0GalHtU/ABscNsEJWZ25Rqut/rCiaGUTWyCDHbMgfDMo+h1bK?= =?us-ascii?Q?pYagMiFqZrGULZ7fOe8Bi7rGX23NQ/BL5Mwg/Uu9j8c9HMW84CWGncZ2ZN+m?= =?us-ascii?Q?la553uiaGise+A7Cmx1bHOgl/JgBlwVnn34aPzhjOmYt/s1lEZhNnu7SWxrj?= =?us-ascii?Q?h4e7gRjjBnS8TcwyEkq2rERBJjUPLDSdsKk7ecn6lpjA8+HZ9TChw/UDyaEg?= =?us-ascii?Q?H/j/1ejWaZCLLmBPLUxYuu+KgVDtY6aSwiAE9Fzlu9y7qIU6Ma9jFQaag9RV?= =?us-ascii?Q?1EIV7Lmjvvy5HDhmitg1E7tDDcurtQTdYbJi/pFumTe6ZJwkJ5vPZiSwuRyC?= =?us-ascii?Q?7NaSYuEvLSN9jgP1Oalvb29W2nwodsQ5newkElDsquxu1RJsUhBMahz+fOt8?= =?us-ascii?Q?BLg8MTB6k6nPOpucgRq6mrhXxpn6B553oYTIsNV4mvDaKmd95kTeBXvxckWu?= =?us-ascii?Q?uksxQEmKyBuCd5SUb2VO09/rEhBM/VgH5RziNJtABOzSqIWDwt9h7akIaQlJ?= =?us-ascii?Q?SPtPTiBfU4ZAb/PRPeANuBKiXy7geYc+hn6qKSEgrffKsT3aGpLgOpgC6ECj?= =?us-ascii?Q?A2dOQ5doYs97FR3xZ/xdg1+SI3xhWeZZVUeZqNBKdcIzijjCfpSrTNJOSIni?= =?us-ascii?Q?MGlU2DD7duPYKQs8Og4AqgqBjZsqYImRRsumykgov8A0PZRcYW4RDw8K2398?= =?us-ascii?Q?zLzIr1qgja2zKSU5TDtveoQTX6gyH3Mqp6H8D2QypXIw1/gAFjl1TGjHdffE?= =?us-ascii?Q?G6Kz4ZawmtwM65uhISm0g9FsiYvcASN0gAGLWmbLRMhwFdh9dEsIB/wwImya?= =?us-ascii?Q?GuCaZeirCzHN8r+aYYz2WimK+sbM8Tn5XyoM22Z6LRZD4sQy93BfDUf8nHUG?= =?us-ascii?Q?6/XcN/9qQIs7iABV4lllKkct1b934glz7ROOKr6+km1axWKtyANVc533mweB?= =?us-ascii?Q?oUmN+MWlZSpLIO5pIyy4DNbhPzt1z5IbcY4j6t1K?= Content-Type: multipart/mixed; boundary="_004_CH2PR15MB35449148A6541A1581B1749ED6DB9CH2PR15MB3544namp_" 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: c48962d4-c193-4c6b-acd7-08db0902731a X-MS-Exchange-CrossTenant-originalarrivaltime: 07 Feb 2023 11:57:12.8301 (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: sdFiWhNvH6jd16mPvhzp2JJLRdcdiDKxeXPCTiEUoz0cj2+45zqGR6LnOJQME0ZXxDHxA/Cu8D+ynt3hsjcU6Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN0PR15MB5370 X-Proofpoint-GUID: 3xb8fD-3I0durDzx-PEEfBqxqSPa8X5s X-Proofpoint-ORIG-GUID: 3xb8fD-3I0durDzx-PEEfBqxqSPa8X5s 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-07_03,2023-02-06_03,2022-06-22_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 mlxscore=0 spamscore=0 mlxlogscore=999 suspectscore=0 lowpriorityscore=0 bulkscore=0 malwarescore=0 phishscore=0 clxscore=1015 adultscore=0 impostorscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2212070000 definitions=main-2302070103 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_CH2PR15MB35449148A6541A1581B1749ED6DB9CH2PR15MB3544namp_ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Hi Ulrich, Tom and community, Please find attached the patch. I have written my answers to the previous c= omments. Kindly let me know if we need more changes. If not kindly push thi= s to the community code. The sample output and programs are pasted below th= is email. >I think this would fit better into gdb.threads, given that this is about t= he >interaction of multiple inferiors with the threading library on AIX. This I will do it immediately after this patch is done. >> if (user_current_pid !=3D 0) >>+ inferior_ptid =3D ptid_t (user_current_pid); >This seems unrelated to the rest of the changes at first glance. >Why is this necessary? So, when we need to be in the right context when we read memory. Before com= ing into the target wait, we switch_to_no_thread () due to which our inferi= or_ptid is set to null. Our target_memory needs the correct inferior_ptid. = Also, in case we don't have a ptid_t (pid) and the application is threaded= we need the inferior_ptid to be set correctly like shown in the patch. Pre= viously we used switch_to_thread ().. Now if the application is theraded an= d we only pass ptid_t (user_current_pid) to switch_to_thread () it will cra= sh as main thread looks different or is ptid_t (pid, 0, tid). Hence, we set= inferior_ptid to simplify. >Also, is the "user_current_pid !=3D 0" check even still needed given >the change to pd_enable() below? So, this I have removed. You were right. >By comparison, the Linux version of this in proc-service.c also >switches the current inferior and address space: > scoped_restore_current_inferior restore_inferior; > set_current_inferior (ph->thread->inf); >scoped_restore_current_program_space restore_current_progspace; >set_current_program_space (ph->thread->inf->pspace); > scoped_restore save_inferior_ptid =3D make_scoped_restore (&inferior_pti= d); >inferior_ptid =3D ph->thread->ptid; > so we should probably do the same for consistency. So, kindly allow me to disagree with you on this. What is happening is in i= nferior.c in do_target_wait1 () we call switch_to_inferior_no_thread ().. T= he function is as follows void switch_to_inferior_no_thread (inferior *inf) { set_current_inferior (inf); switch_to_no_thread (); set_current_program_space (inf->pspace); } Here we already set the correct current inferior and program space to the s= ame thing as that if we set in pdc_read_memory like linux. So, it does not = make any difference to add the changes like linux does. In the switch_to_no= _thread () we set inferior_ptid to null and that is why we only set inferio= r_ptid in pdc_read_memory and not anything else. So, I suggest we stick to = this plan. Secondly, things work if we do not do the same for pdc_write_mem= ory. I have not seen anything not work. So, I don't think it is good to add= it there. What say?? >This looks unnecessarily complicated. Isn't this just > *g++ =3D tp; This I have changed. >Is this a change in behavior to current GDB? I thought if the >application (whether a single inferior or one of multiple inferiors) >is threaded in the sense that it uses the libpthread library we >wanted to show it as threaded, so that the user can e.g. see the >thread ID in info threads. So, you are right. I read it somewhere which I am not able to recall that o= nly in multiple threads we need to show as thread. I checked the Linux outp= ut. It is what you mentioned. I have removed the gcount =3D=3D1 && pcount = =3D=3D 1 condition.. >This logic is still confusing me. Why is the > gptid.pid () =3D=3D pptid.pid () >check still needed? I thought we now collected only threads >of a single process to begin with, so they all ought to have >the same PID? >Also, if the point is the gptid.is_pid () check, this can >really only happen once per inferior, as it is switched >from non-threaded to threaded mode, right? So I removed the gptid.pid () =3D=3D pptid.pid () condition. The reason I h= ad added was the gcount {Thread count per process} was not per process befo= re. I was worried to swap process. Now we do not need it. As far as the check gptid.is_pid () is concerned, I will suggest we keep it= there. If cmp_result is > 0 and we have a main process swap to create a th= read. Rest is same in the loop. The reason being handling pi and gi variabl= es becomes complex otherwise. When this swap happens, we need to increment = both pi and gi.. Because we have taken care of the main threads in both pth= read library and GDB. And this for loop is executed only once. So, the firs= t event is main process being pthreaded. Once the swap happens pi and gi be= come one and since gcount =3D pcount =3D 1 we exit the for loop. Thread add= ition events comes after this. >That should just be "if (ptid.tid () =3D=3D 0)" then. This is done >- pd_deactivate (); >+ pd_disable (); >Why is this necessary? If it is, do we even need two >separate pd_deactivate and pd_disable routines any more? So, the process exits then all its threads also exit in the mourn inferior.= So, we disable everything. Yes, I removed pd_deactivate (). >>+ if (s.find ('(') !=3D std::string::npos >>+ && s.find (member_name) !=3D std::string::npos) >>+ return object_bfd; >Ah, I guess you also need to ensure the member_name follows >immediately after the '(', otherwise there could be confusion >if the member name happens to be part of the file name as well. This I have changed as per how you mentioned. Kindly check the patch and le= t me know :) 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 15991124)] I am parent [New inferior 3 (process 20840796)] I am parent ^Cin 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 33947921, running) 0xd0595fb0 in _p_nsleep () from /usr/lib/libpthread.a(shr_xpg5.o) 1.2 Thread 258 (tid 37421465, running) thread_function (arg=3D0x0) at /home/aditya/gdb_tests/ultimate-multi-thread-fork.c:32 1.3 Thread 515 (tid 32899441, running) thread_function (arg=3D0x0) 0x0) at /home/aditya/gdb_tests/ultimate-multi-thread-fork.c:32 2.1 Thread 515 (tid 33751493, running) 0xd0594fc8 in _sigsetmask () from /usr/lib/libpthread.a(shr_xpg5.o) 3.1 Thread 258 (tid 34931151, running) 0xd0594fc8 in _sigsetmask () from /usr/lib/libpthread.a(shr_xpg5.o) (gdb) ----------------------------------------------------------------------- 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: 07 February 2023 00:37 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: >>I think the question here is simply whether, if you run the >>test suite both without and with your patch, are any of the >>FAILs fixed with the patch? If not, it would be good to >>create a new test that fails without the patch and succeeds >>with it, and add that to the test suite. > >So, this is something new to me. We will add it as a continuation in the s= ame thread >after this patch. I will need one information. Which test suite will we ad= d it in? >gdb.threads or gdb.base? Also, kindly suggest a simple test case that is w= ritten that >I can see and learn. Any simple hello_world program will do. I want to und= erstand how >that exp file is written and how it compares to tell if a test case is pas= s or fail. I think this would fit better into gdb.threads, given that this is about th= e interaction of multiple inferiors with the threading library on AIX. I'd just look at existing test cases in that directory. For simple tests, = we usually have a .c file and a .exp file with the same name. The .exp file starts out with instructions to build the test case, and start it up under GDB. Then follow a series of test statements which are verified against the output of the GDB under test. As a simple example in a related area, you can look e.g. at fork-child-threads.{c,exp}. >Kindly give me feedback for this patch, incase we can do anything better >or is incorrect. Some comments: >@@ -508,14 +550,13 @@ pdc_read_data (pthdb_user_t user_current_pid, void *= buf, > /* This is needed to eliminate the dependency of current thread > which is null so that thread reads the correct target memory. */ > { >- scoped_restore_current_thread restore_current_thread; >+ scoped_restore save_inferior_ptid =3D make_scoped_restore (&inferior_= ptid); > /* Before the first inferior is added, we pass inferior_ptid.pid () > from pd_enable () which is 0. There is no need to switch threads > during first initialisation. In the rest of the callbacks the > current thread needs to be correct. */ > if (user_current_pid !=3D 0) >- switch_to_thread (current_inferior ()->process_target (), >- ptid_t (user_current_pid)); >+ inferior_ptid =3D ptid_t (user_current_pid); > status =3D target_read_memory (addr, (gdb_byte *) buf, len); > } This seems unrelated to the rest of the changes at first glance. Why is this necessary? Also, is the "user_current_pid !=3D 0" check even still needed given the change to pd_enable() below? By comparison, the Linux version of this in proc-service.c also switches the current inferior and address space: scoped_restore_current_inferior restore_inferior; set_current_inferior (ph->thread->inf); scoped_restore_current_program_space restore_current_progspace; set_current_program_space (ph->thread->inf->pspace); scoped_restore save_inferior_ptid =3D make_scoped_restore (&inferior_ptid= ); inferior_ptid =3D ph->thread->ptid; so we should probably do the same for consistency. Also, the same logic will be required in pdc_write_data, where it is currently missing completely. >+ for (thread_info *tp : all_threads (proc_target, ptid_t (pid))) >+ { >+ **(struct thread_info ***) &g =3D tp; >+ (*(struct thread_info ***) &g)++; >+ } This looks unnecessarily complicated. Isn't this just *g++ =3D tp; ? >+ /* If there is only one thread then we need not make the main >+ thread look like a thread. It can stay as a process. This >+ is useful when we have multiple inferiors, but only one is >+ threaded. So we need not make the other inferiors with only >+ main thread, look like a threaded one. For example, Thread >+ 1.1, 1.2, 2.1, 3.1 exists then it is useful to skip this for >+ loop for 2.1 and 3.1 leaving them as main process thread with >+ a dummy priv set. */ >+ >+ if (pcount =3D=3D 1 && gcount =3D=3D 1) >+ { >+ aix_thread_info *priv =3D new aix_thread_info; >+ tp =3D find_thread_ptid (proc_target, gptid); >+ tp->priv.reset (priv); >+ break; >+ } Is this a change in behavior to current GDB? I thought if the application (whether a single inferior or one of multiple inferiors) is threaded in the sense that it uses the libpthread library we wanted to show it as threaded, so that the user can e.g. see the thread ID in info threads. >+ /* This is to make the main process thread now look >+ like a thread. */ >+ >+ if (gptid.is_pid () && gptid.pid () =3D=3D pptid.pid ()) >+ { >+ thread_change_ptid (proc_target, gptid, pptid); >+ aix_thread_info *priv =3D new aix_thread_info; >+ priv->pdtid =3D pbuf[pi].pdtid; >+ priv->tid =3D pbuf[pi].tid; >+ tp =3D find_thread_ptid (proc_target, pptid); >+ tp->priv.reset (priv); >+ pi++; >+ gi++; >+ } >+ else >+ { >+ delete_thread (gbuf[gi]); >+ gi++; >+ } This logic is still confusing me. Why is the gptid.pid () =3D=3D pptid.pid () check still needed? I thought we now collected only threads of a single process to begin with, so they all ought to have the same PID? Also, if the point is the gptid.is_pid () check, this can really only happen once per inferior, as it is switched from non-threaded to threaded mode, right? Maybe it would simplify the logic to have all that (including the code under if (pcount =3D=3D 1 && gcount =3D=3D 1) above if it is actually needed) in a separate statement before that loop. I.e. directly before the loop, have a separate check whether the current process only has a single thread, whose ptid_t is still in the pid-only format, and if so, upgrade it to full TID format using the main thread's TID. Only after that, go through the loop to handle any other threads we may also have. (At that point, all GDB threads should already always be in TID format.) >- if (!PD_TID (ptid)) >+ if (!(ptid.tid () !=3D 0)) That should just be "if (ptid.tid () =3D=3D 0)" then. (Here and in a few other places.) >@@ -1741,7 +1823,7 @@ aix_thread_target::mourn_inferior () > { > target_ops *beneath =3D this->beneath (); > >- pd_deactivate (); >+ pd_disable (); > beneath->mourn_inferior (); > } Why is this necessary? If it is, do we even need two separate pd_deactivate and pd_disable routines any more? >@@ -618,6 +618,16 @@ solib_aix_bfd_open (const char *pathname) > if (member_name =3D=3D bfd_get_filename (object_bfd.get ())) > break; > >+ std::string s =3D bfd_get_filename (object_bfd.get ()); >+ >+ /* For every inferior after first int bfd system we >+ will have the pathname instead of the member name >+ registered. Hence the below condition exists. */ >+ >+ if (s.find ('(') !=3D std::string::npos >+ && s.find (member_name) !=3D std::string::npos) >+ return object_bfd; Ah, I guess you also need to ensure the member_name follows immediately after the '(', otherwise there could be confusion if the member name happens to be part of the file name as well. Bye, Ulrich --_004_CH2PR15MB35449148A6541A1581B1749ED6DB9CH2PR15MB3544namp_ 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=26021; creation-date="Tue, 07 Feb 2023 11:50:36 GMT"; modification-date="Tue, 07 Feb 2023 11:50:49 GMT" Content-Transfer-Encoding: base64 RnJvbSAxZjVlMGQyMDgxNzNkMzZjNmY5NDBlNGY5OGY3M2Y5ZTkzOTM0ZmU5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBZGl0eWEgVmlkeWFkaGFyIEthbWF0aCA8QWRpdHlhLkthbWF0 aDFAaWJtLmNvbT4KRGF0ZTogVHVlLCA3IEZlYiAyMDIzIDA1OjQyOjEzIC0wNjAwClN1YmplY3Q6 IFtQQVRDSF0gRml4IE11bHRpIHRocmVhZCBkZWJ1ZyBidWcgZml4IGluIEFJWAoKSW4gdGhlIHJl Y2VudCBjb21taXQgOThlZDI0ZmIzNWQ4OWViMjAxNzllZGY2YzEyZjU5OWM3YTllMjI4ZSBtYWRl IGJ5IE1yLiBUb20gdGhlcmUgaXMgYSBjaGFuZ2UgIGluIGFpeC10aHJlYWQuYyBmaWxlIHRoYXQg Y2hhbmdlcwoKc3RhdGljX2Nhc3QgPGFpeF90aHJlYWRfaW5mbyAqPiBpbiBnZGIgdG8gZ2RiOjpj aGVja2VkX3N0YXRpY19jYXN0IDxhaXhfdGhyZWFkX2luZm8gKj4KCkFJWCBmb2xrcyB1c2luZyB0 aGUgbGF0ZXN0IHZlcnNpb24gd2lsbCBub3QgYmUgYWJsZSB0byBkZWJ1ZyBtdWx0aSB0aHJlYWQg cHJvZ3JhbXMgYXMgYSByZXN1bHQgb2YgaXQKClRoZSBlcnJvciBpbiBBSVggaXMgYXMgZm9sbG93 czotCgppbnRlcm5hbC1lcnJvcjogY2hlY2tlZF9zdGF0aWNfY2FzdDogQXNzZXJ0aW9uICdyZXN1 bHQgIT0gbnVsbHB0cicgZmFpbGVkLgoKVGhlIHJlYXNvbiBpcyB0aGF0IG9uY2UgdGhlIHRocmVh ZHMgYXJlIHN5bmNyb25pc2VkIHdpdGggc3luY190aHJlYWRsaXN0cyAoKSBhbmQgdGhyZWFkcyBh cmUgYWRkZWQgd2l0aCBwcml2IC0KCldlIGl0ZXJhdGUgb3ZlciB0aHJlYWRzIHRvIGdldCB0aGUg dGhyZWFkIHdobyBjYXVzZWQgdGhlIGV2ZW50IGFuZCByZXR1cm4gaXRzIHB0aWQKCkhvd2V2ZXIg dGhlIGFsbF90aHJlYWRzX3NhZmUgKCkgZnVuY3Rpb24gd2lsbCBhbHdheXMgcmV0dXJuIE5VTEwg YXMgdGhyZWFkIGlzIHlldCB0byBiZSB1cGRhdGVkIGluIHRoYXQgbGlzdAoKU28gd2hhdCBoYXBw ZW5zIGlzIHdlIHdlcmUgbm90IHNldHRpbmcgdGhlIHRvcCB0YXJnZXQgYXMgdGhyZWFkcyBhcwoK U2hhcmVkIGxpYnJhcnkgd2FzIG5vdCBsb2FkZWQgZm9yIGEgbmV3IHByb2Nlc3MgYW5kCgpnY291 bnQgd2FzIG5vdCBjb3VudGVkIHBlciBwcm9jZXNzCgpUaGlzIHBhdGNoIGlzIGEgZml4IGZvciB0 aGUgc2FtZS4KLS0tCiBnZGIvYWl4LXRocmVhZC5jIHwgMzI3ICsrKysrKysrKysrKysrKysrKysr KysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tCiBnZGIvc29saWItYWl4LmMgIHwgIDE0ICsrCiAy IGZpbGVzIGNoYW5nZWQsIDIwNSBpbnNlcnRpb25zKCspLCAxMzYgZGVsZXRpb25zKC0pCgpkaWZm IC0tZ2l0IGEvZ2RiL2FpeC10aHJlYWQuYyBiL2dkYi9haXgtdGhyZWFkLmMKaW5kZXggZTU1NmMx NTM1NzYuLjFkODAwZjhiN2JlIDEwMDY0NAotLS0gYS9nZGIvYWl4LXRocmVhZC5jCisrKyBiL2dk Yi9haXgtdGhyZWFkLmMKQEAgLTY4LDEwICs2OCw2IEBAIHN0YXRpYyBib29sIGRlYnVnX2FpeF90 aHJlYWQ7CiAjZGVmaW5lIHB0aGRiX3RpZF90CXRpZF90CiAjZW5kaWYKIAotLyogUmV0dXJuIHdo ZXRoZXIgdG8gdHJlYXQgUElEIGFzIGEgZGVidWdnYWJsZSB0aHJlYWQgaWQuICAqLwotCi0jZGVm aW5lIFBEX1RJRChwdGlkKQkocGRfYWN0aXZlICYmIHB0aWQudGlkICgpICE9IDApCi0KIC8qIFN1 Y2Nlc3MgYW5kIGZhaWx1cmUgdmFsdWVzIHJldHVybmVkIGJ5IHB0aGRiIGNhbGxiYWNrcy4gICov CiAKICNkZWZpbmUgUERDX1NVQ0NFU1MJUFRIREJfU1VDQ0VTUwpAQCAtMTQ0LDI0ICsxNDAsNiBA QCBjbGFzcyBhaXhfdGhyZWFkX3RhcmdldCBmaW5hbCA6IHB1YmxpYyB0YXJnZXRfb3BzCiAKIHN0 YXRpYyBhaXhfdGhyZWFkX3RhcmdldCBhaXhfdGhyZWFkX29wczsKIAotLyogQWRkcmVzcyBvZiB0 aGUgZnVuY3Rpb24gdGhhdCBsaWJwdGhyZWFkIHdpbGwgY2FsbCB3aGVuIGxpYnB0aGRlYnVnCi0g ICBpcyByZWFkeSB0byBiZSBpbml0aWFsaXplZC4gICovCi0KLXN0YXRpYyBDT1JFX0FERFIgcGRf YnJrX2FkZHI7Ci0KLS8qIFdoZXRoZXIgdGhlIGN1cnJlbnQgYXBwbGljYXRpb24gaXMgZGVidWdn YWJsZSBieSBwdGhkYi4gICovCi0KLXN0YXRpYyBpbnQgcGRfYWJsZSA9IDA7Ci0KLS8qIFdoZXRo ZXIgYSB0aHJlYWRlZCBhcHBsaWNhdGlvbiBpcyBiZWluZyBkZWJ1Z2dlZC4gICovCi0KLXN0YXRp YyBpbnQgcGRfYWN0aXZlID0gMDsKLQotLyogV2hldGhlciB0aGUgY3VycmVudCBhcmNoaXRlY3R1 cmUgaXMgNjQtYml0LiAgCi0gICBPbmx5IHZhbGlkIHdoZW4gcGRfYWJsZSBpcyB0cnVlLiAgKi8K LQotc3RhdGljIGludCBhcmNoNjQ7Ci0KIC8qIEZvcndhcmQgZGVjbGFyYXRpb25zIGZvciBwdGhk YiBjYWxsYmFja3MuICAqLwogCiBzdGF0aWMgaW50IHBkY19zeW1ib2xfYWRkcnMgKHB0aGRiX3Vz ZXJfdCwgcHRoZGJfc3ltYm9sX3QgKiwgaW50KTsKQEAgLTE5MSw5ICsxNjksNjYgQEAgc3RhdGlj IHB0aGRiX2NhbGxiYWNrc190IHBkX2NhbGxiYWNrcyA9IHsKICAgTlVMTAogfTsKIAotLyogQ3Vy cmVudCBwdGhkYiBzZXNzaW9uLiAgKi8KKy8qIEFpeCB2YXJpYWJsZSBzdHJ1Y3R1cmUuICAqLwor c3RydWN0IGFpeF90aHJlYWRfdmFyaWFibGVzIAoreworICAvKiBXaGV0aGVyIHRoZSBjdXJyZW50 IGFwcGxpY2F0aW9uIGlzIGRlYnVnZ2FibGUgYnkgcHRoZGIuICAqLworICBpbnQgcGRfYWJsZTsK KworICAvKiBXaGV0aGVyIGEgdGhyZWFkZWQgYXBwbGljYXRpb24gaXMgYmVpbmcgZGVidWdnZWQu ICAqLworICBpbnQgcGRfYWN0aXZlOworCisgIC8qIEN1cnJlbnQgcHRoZGIgc2Vzc2lvbi4gICov CisgIHB0aGRiX3Nlc3Npb25fdCBwZF9zZXNzaW9uOworCisgIC8qIEFkZHJlc3Mgb2YgdGhlIGZ1 bmN0aW9uIHRoYXQgbGlicHRocmVhZCB3aWxsIGNhbGwgd2hlbiBsaWJwdGhkZWJ1ZworICAgaXMg cmVhZHkgdG8gYmUgaW5pdGlhbGl6ZWQuICAqLworICBDT1JFX0FERFIgcGRfYnJrX2FkZHI7CisK KyAgLyogV2hldGhlciB0aGUgY3VycmVudCBhcmNoaXRlY3R1cmUgaXMgNjQtYml0LgorICAgT25s eSB2YWxpZCB3aGVuIHBkX2FibGUgaXMgdHJ1ZS4gICovCisgIGludCBhcmNoNjQ7Cit9OworCisv KiBLZXkgdG8gb3VyIHBlci1pbmZlcmlvciBkYXRhLiAgKi8KK3N0YXRpYyBjb25zdCByZWdpc3Ry eTxpbmZlcmlvcj46OmtleTxhaXhfdGhyZWFkX3ZhcmlhYmxlcz4KKyAgYWl4X3RocmVhZF92YXJp YWJsZXNfaGFuZGxlOwogCi1zdGF0aWMgcHRoZGJfc2Vzc2lvbl90IHBkX3Nlc3Npb247CisvKiBG dW5jdGlvbiB0byBHZXQgYWl4X3RocmVhZF92YXJpYWJsZXMgZGF0YS4gICovCitzdGF0aWMgc3Ry dWN0IGFpeF90aHJlYWRfdmFyaWFibGVzKgorZ2V0X2FpeF90aHJlYWRfdmFyaWFibGVzX2RhdGEg KHN0cnVjdCBpbmZlcmlvciAqaW5mKQoreworICBpZiAoaW5mID09IE5VTEwpCisgICAgcmV0dXJu IE5VTEw7CisKKyAgc3RydWN0IGFpeF90aHJlYWRfdmFyaWFibGVzKiBkYXRhOworCisgIGRhdGEg PSBhaXhfdGhyZWFkX3ZhcmlhYmxlc19oYW5kbGUuZ2V0IChpbmYpOworICBpZiAoZGF0YSA9PSBO VUxMKQorICAgIGRhdGEgPSBhaXhfdGhyZWFkX3ZhcmlhYmxlc19oYW5kbGUuZW1wbGFjZSAoaW5m KTsKKworICByZXR1cm4gZGF0YTsKK30KKworLyogSGVscGVyIHRvIGdldCBkYXRhIGZvciBwdGlk IGluIGEgZnVuY3Rpb24uICAqLworCitzdGF0aWMgc3RydWN0IGFpeF90aHJlYWRfdmFyaWFibGVz KgorZ2V0X3RocmVhZF9kYXRhX2hlbHBlcl9mb3JfcHRpZCAocHRpZF90IHB0aWQpCit7CisgIGlu ZmVyaW9yICppbmYgPSBmaW5kX2luZmVyaW9yX3B0aWQgKGN1cnJlbnRfaW5mZXJpb3IgKCktPnBy b2Nlc3NfdGFyZ2V0ICgpLAorCQkJCQlwdGlkKTsKKyAgcmV0dXJuIGdldF9haXhfdGhyZWFkX3Zh cmlhYmxlc19kYXRhIChpbmYpOworfQorCisvKiBIZWxwZXIgdG8gZ2V0IGRhdGEgZm9yIHBpZCBp biBhIGZ1bmN0aW9uLiAgKi8KKworc3RhdGljIHN0cnVjdCBhaXhfdGhyZWFkX3ZhcmlhYmxlcyoK K2dldF90aHJlYWRfZGF0YV9oZWxwZXJfZm9yX3BpZCAocGlkX3QgcGlkKQoreworICBpbmZlcmlv ciAqaW5mID0gZmluZF9pbmZlcmlvcl9waWQgKGN1cnJlbnRfaW5mZXJpb3IgKCktPnByb2Nlc3Nf dGFyZ2V0ICgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpZCk7 CisgIHJldHVybiBnZXRfYWl4X3RocmVhZF92YXJpYWJsZXNfZGF0YSAoaW5mKTsKK30KIAogLyog UmV0dXJuIGEgcHJpbnRhYmxlIHJlcHJlc2VudGF0aW9uIG9mIHB0aGRlYnVnIGZ1bmN0aW9uIHJl dHVybgogICAgU1RBVFVTLiAgKi8KQEAgLTMxOCw3ICszNTMsNyBAQCBwaWRfdG9fcHJjIChwdGlk X3QgKnB0aWRwKQogICBwdGlkX3QgcHRpZDsKIAogICBwdGlkID0gKnB0aWRwOwotICBpZiAoUERf VElEIChwdGlkKSkKKyAgaWYgKHB0aWQudGlkICgpICE9IDApCiAgICAgKnB0aWRwID0gcHRpZF90 IChwdGlkLnBpZCAoKSk7CiB9CiAKQEAgLTM4OSw2ICs0MjQsOSBAQCBwZGNfcmVhZF9yZWdzIChw dGhkYl91c2VyX3QgdXNlcl9jdXJyZW50X3BpZCwKICAgZG91YmxlIGZwcnNbcHBjX251bV9mcHJz XTsKICAgc3RydWN0IHB0eHNwcnMgc3ByczY0OwogICBzdHJ1Y3QgcHRzcHJzIHNwcnMzMjsKKyAg c3RydWN0IGFpeF90aHJlYWRfdmFyaWFibGVzICpkYXRhOworICAKKyAgZGF0YSA9IGdldF90aHJl YWRfZGF0YV9oZWxwZXJfZm9yX3BpZCAodXNlcl9jdXJyZW50X3BpZCk7CiAgIAogICBpZiAoZGVi dWdfYWl4X3RocmVhZCkKICAgICBnZGJfcHJpbnRmIChnZGJfc3RkbG9nLCAicGRjX3JlYWRfcmVn cyB0aWQ9JWQgZmxhZ3M9JXNcbiIsCkBAIC0zOTcsNyArNDM1LDcgQEAgcGRjX3JlYWRfcmVncyAo cHRoZGJfdXNlcl90IHVzZXJfY3VycmVudF9waWQsCiAgIC8qIEdlbmVyYWwtcHVycG9zZSByZWdp c3RlcnMuICAqLwogICBpZiAoZmxhZ3MgJiBQVEhEQl9GTEFHX0dQUlMpCiAgICAgewotICAgICAg aWYgKGFyY2g2NCkKKyAgICAgIGlmIChkYXRhLT5hcmNoNjQpCiAJewogCSAgaWYgKCFwdHJhY2U2 NGFpeCAoUFRUX1JFQURfR1BSUywgdGlkLCAKIAkJCSAgICAodW5zaWduZWQgbG9uZykgZ3ByczY0 LCAwLCBOVUxMKSkKQEAgLTQyMyw3ICs0NjEsNyBAQCBwZGNfcmVhZF9yZWdzIChwdGhkYl91c2Vy X3QgdXNlcl9jdXJyZW50X3BpZCwKICAgLyogU3BlY2lhbC1wdXJwb3NlIHJlZ2lzdGVycy4gICov CiAgIGlmIChmbGFncyAmIFBUSERCX0ZMQUdfU1BSUykKICAgICB7Ci0gICAgICBpZiAoYXJjaDY0 KQorICAgICAgaWYgKGRhdGEtPmFyY2g2NCkKIAl7CiAJICBpZiAoIXB0cmFjZTY0YWl4IChQVFRf UkVBRF9TUFJTLCB0aWQsIAogCQkJICAgICh1bnNpZ25lZCBsb25nKSAmc3ByczY0LCAwLCBOVUxM KSkKQEAgLTQ1Niw2ICs0OTQsMTAgQEAgcGRjX3dyaXRlX3JlZ3MgKHB0aGRiX3VzZXJfdCB1c2Vy X2N1cnJlbnRfcGlkLAogICAgICB0aGlzIGlzIG5lZWRlZCwgSSBoYXZlIGltcGxlbWVudGVkIHdo YXQgSSB0aGluayBpdCBzaG91bGQgZG8sCiAgICAgIGhvd2V2ZXIgdGhpcyBjb2RlIGlzIHVudGVz dGVkLiAgKi8KIAorICBzdHJ1Y3QgYWl4X3RocmVhZF92YXJpYWJsZXMgKmRhdGE7CisgIAorICBk YXRhID0gZ2V0X3RocmVhZF9kYXRhX2hlbHBlcl9mb3JfcGlkICh1c2VyX2N1cnJlbnRfcGlkKTsK KwogICBpZiAoZGVidWdfYWl4X3RocmVhZCkKICAgICBnZGJfcHJpbnRmIChnZGJfc3RkbG9nLCAi cGRjX3dyaXRlX3JlZ3MgdGlkPSVkIGZsYWdzPSVzXG4iLAogCQkoaW50KSB0aWQsIGhleF9zdHJp bmcgKGZsYWdzKSk7CkBAIC00NjMsNyArNTA1LDcgQEAgcGRjX3dyaXRlX3JlZ3MgKHB0aGRiX3Vz ZXJfdCB1c2VyX2N1cnJlbnRfcGlkLAogICAvKiBHZW5lcmFsLXB1cnBvc2UgcmVnaXN0ZXJzLiAg Ki8KICAgaWYgKGZsYWdzICYgUFRIREJfRkxBR19HUFJTKQogICAgIHsKLSAgICAgIGlmIChhcmNo NjQpCisgICAgICBpZiAoZGF0YS0+YXJjaDY0KQogCXB0cmFjZTY0YWl4IChQVFRfV1JJVEVfR1BS UywgdGlkLCAKIAkJICAgICAodW5zaWduZWQgbG9uZykgY29udGV4dC0+Z3ByLCAwLCBOVUxMKTsK ICAgICAgIGVsc2UKQEAgLTQ3OSw3ICs1MjEsNyBAQCBwZGNfd3JpdGVfcmVncyAocHRoZGJfdXNl cl90IHVzZXJfY3VycmVudF9waWQsCiAgIC8qIFNwZWNpYWwtcHVycG9zZSByZWdpc3RlcnMuICAq LwogICBpZiAoZmxhZ3MgJiBQVEhEQl9GTEFHX1NQUlMpCiAgICAgewotICAgICAgaWYgKGFyY2g2 NCkKKyAgICAgIGlmIChkYXRhLT5hcmNoNjQpCiAJewogCSAgcHRyYWNlNjRhaXggKFBUVF9XUklU RV9TUFJTLCB0aWQsIAogCQkgICAgICAgKHVuc2lnbmVkIGxvbmcpICZjb250ZXh0LT5tc3IsIDAs IE5VTEwpOwpAQCAtNTA4LDE0ICs1NTAsMTIgQEAgcGRjX3JlYWRfZGF0YSAocHRoZGJfdXNlcl90 IHVzZXJfY3VycmVudF9waWQsIHZvaWQgKmJ1ZiwKICAgLyogVGhpcyBpcyBuZWVkZWQgdG8gZWxp bWluYXRlIHRoZSBkZXBlbmRlbmN5IG9mIGN1cnJlbnQgdGhyZWFkCiAgICAgIHdoaWNoIGlzIG51 bGwgc28gdGhhdCB0aHJlYWQgcmVhZHMgdGhlIGNvcnJlY3QgdGFyZ2V0IG1lbW9yeS4gICovCiAg IHsKLSAgICBzY29wZWRfcmVzdG9yZV9jdXJyZW50X3RocmVhZCByZXN0b3JlX2N1cnJlbnRfdGhy ZWFkOworICAgIHNjb3BlZF9yZXN0b3JlIHNhdmVfaW5mZXJpb3JfcHRpZCA9IG1ha2Vfc2NvcGVk X3Jlc3RvcmUgKCZpbmZlcmlvcl9wdGlkKTsKICAgICAvKiBCZWZvcmUgdGhlIGZpcnN0IGluZmVy aW9yIGlzIGFkZGVkLCB3ZSBwYXNzIGluZmVyaW9yX3B0aWQucGlkICgpCiAgICAgICAgZnJvbSBw ZF9lbmFibGUgKCkgd2hpY2ggaXMgMC4gIFRoZXJlIGlzIG5vIG5lZWQgdG8gc3dpdGNoIHRocmVh ZHMKICAgICAgICBkdXJpbmcgZmlyc3QgaW5pdGlhbGlzYXRpb24uICBJbiB0aGUgcmVzdCBvZiB0 aGUgY2FsbGJhY2tzIHRoZQogICAgICAgIGN1cnJlbnQgdGhyZWFkIG5lZWRzIHRvIGJlIGNvcnJl Y3QuICAqLwotICAgIGlmICh1c2VyX2N1cnJlbnRfcGlkICE9IDApCi0gICAgICBzd2l0Y2hfdG9f dGhyZWFkIChjdXJyZW50X2luZmVyaW9yICgpLT5wcm9jZXNzX3RhcmdldCAoKSwKLQkJCXB0aWRf dCAodXNlcl9jdXJyZW50X3BpZCkpOworICAgIGluZmVyaW9yX3B0aWQgPSBwdGlkX3QgKHVzZXJf Y3VycmVudF9waWQpOwogICAgIHN0YXR1cyA9IHRhcmdldF9yZWFkX21lbW9yeSAoYWRkciwgKGdk Yl9ieXRlICopIGJ1ZiwgbGVuKTsKICAgfQogICByZXQgPSBzdGF0dXMgPT0gMCA/IFBEQ19TVUND RVNTIDogUERDX0ZBSUxVUkU7CkBAIC02MzksMzkgKzY3OSw2IEBAIHBjbXAgKGNvbnN0IHZvaWQg KnAxdiwgY29uc3Qgdm9pZCAqcDJ2KQogICByZXR1cm4gcDEtPnB0aGlkIDwgcDItPnB0aGlkID8g LTEgOiBwMS0+cHRoaWQgPiBwMi0+cHRoaWQ7CiB9CiAKLS8qIGl0ZXJhdGVfb3Zlcl90aHJlYWRz KCkgY2FsbGJhY2sgZm9yIGNvdW50aW5nIEdEQiB0aHJlYWRzLgotCi0gICBEbyBub3QgY291bnQg dGhlIG1haW4gdGhyZWFkICh3aG9zZSB0aWQgaXMgemVybykuICBUaGlzIG1hdGNoZXMKLSAgIHRo ZSBsaXN0IG9mIHRocmVhZHMgcHJvdmlkZWQgYnkgdGhlIHB0aHJlYWRkZWJ1ZyBsaWJyYXJ5LCB3 aGljaAotICAgZG9lcyBub3QgaW5jbHVkZSB0aGF0IG1haW4gdGhyZWFkIGVpdGhlciwgYW5kIHRo dXMgYWxsb3dzIHVzCi0gICB0byBjb21wYXJlIHRoZSB0d28gbGlzdHMuICAqLwotCi1zdGF0aWMg aW50Ci1naXRlcl9jb3VudCAoc3RydWN0IHRocmVhZF9pbmZvICp0aHJlYWQsIHZvaWQgKmNvdW50 cCkKLXsKLSAgaWYgKFBEX1RJRCAodGhyZWFkLT5wdGlkKSkKLSAgICAoKihpbnQgKikgY291bnRw KSsrOwotICByZXR1cm4gMDsKLX0KLQotLyogaXRlcmF0ZV9vdmVyX3RocmVhZHMoKSBjYWxsYmFj ayBmb3IgYWNjdW11bGF0aW5nIEdEQiB0aHJlYWQgcGlkcy4KLQotICAgRG8gbm90IGluY2x1ZGUg dGhlIG1haW4gdGhyZWFkICh3aG9zZSB0aWQgaXMgemVybykuICBUaGlzIG1hdGNoZXMKLSAgIHRo ZSBsaXN0IG9mIHRocmVhZHMgcHJvdmlkZWQgYnkgdGhlIHB0aHJlYWRkZWJ1ZyBsaWJyYXJ5LCB3 aGljaAotICAgZG9lcyBub3QgaW5jbHVkZSB0aGF0IG1haW4gdGhyZWFkIGVpdGhlciwgYW5kIHRo dXMgYWxsb3dzIHVzCi0gICB0byBjb21wYXJlIHRoZSB0d28gbGlzdHMuICAqLwotCi1zdGF0aWMg aW50Ci1naXRlcl9hY2N1bSAoc3RydWN0IHRocmVhZF9pbmZvICp0aHJlYWQsIHZvaWQgKmJ1ZnAp Ci17Ci0gIGlmIChQRF9USUQgKHRocmVhZC0+cHRpZCkpCi0gICAgewotICAgICAgKiooc3RydWN0 IHRocmVhZF9pbmZvICoqKikgYnVmcCA9IHRocmVhZDsKLSAgICAgICgqKHN0cnVjdCB0aHJlYWRf aW5mbyAqKiopIGJ1ZnApKys7Ci0gICAgfQotICByZXR1cm4gMDsKLX0KLQogLyogcHRpZCBjb21w YXJpc29uIGZ1bmN0aW9uICovCiAKIHN0YXRpYyBpbnQKQEAgLTcxOSw3ICs3MjYsMTAgQEAgZ2V0 X3NpZ25hbGVkX3RocmVhZCAoaW50IHBpZCkKIAkJICAgIHNpemVvZiAodGhyaW5mKSwgJmt0aWQs IDEpICE9IDEpCiAJYnJlYWs7CiAKLSAgICAgIGlmICh0aHJpbmYudGlfY3Vyc2lnID09IFNJR1RS QVApCisgICAgICAvKiBXZSBhbHNvIG5lZWQgdG8ga2VlcCBpbiBtaW5kIFRyYXAgYW5kIGludGVy cnVwdCBvciBhbnkKKyAgICAgICAgIHNpZ25hbCB0aGF0IG5lZWRzIHRvIGJlIGhhbmRsZWQgaW4g cGRfdXBkYXRlICgpLiAgKi8KKworICAgICAgaWYgKHRocmluZi50aV9jdXJzaWcpCiAJcmV0dXJu IHRocmluZi50aV90aWQ7CiAgICAgfQogCkBAIC03NTAsNiArNzYwLDExIEBAIHN5bmNfdGhyZWFk bGlzdHMgKGludCBwaWQpCiAgIHB0aGRiX3B0aHJlYWRfdCBwZHRpZDsKICAgcHRocmVhZF90IHB0 aGlkOwogICBwdGhkYl90aWRfdCB0aWQ7CisgIHByb2Nlc3Nfc3RyYXR1bV90YXJnZXQgKnByb2Nf dGFyZ2V0CisgICAgICAgICAgICA9IGN1cnJlbnRfaW5mZXJpb3IgKCktPnByb2Nlc3NfdGFyZ2V0 ICgpOworICB0aHJlYWRfaW5mbyAgKnRwOworICBzdHJ1Y3QgYWl4X3RocmVhZF92YXJpYWJsZXMg KmRhdGE7CisgIGRhdGEgPSBnZXRfdGhyZWFkX2RhdGFfaGVscGVyX2Zvcl9waWQgKHBpZCk7CiAK ICAgLyogQWNjdW11bGF0ZSBhbiBhcnJheSBvZiBsaWJwdGhkZWJ1ZyB0aHJlYWRzIHNvcnRlZCBi eSBwdGhyZWFkIGlkLiAgKi8KIApAQCAtNzU5LDExICs3NzQsMTEgQEAgc3luY190aHJlYWRsaXN0 cyAoaW50IHBpZCkKIAogICBmb3IgKGNtZCA9IFBUSERCX0xJU1RfRklSU1Q7OyBjbWQgPSBQVEhE Ql9MSVNUX05FWFQpCiAgICAgewotICAgICAgc3RhdHVzID0gcHRoZGJfcHRocmVhZCAocGRfc2Vz c2lvbiwgJnBkdGlkLCBjbWQpOworICAgICAgc3RhdHVzID0gcHRoZGJfcHRocmVhZCAoZGF0YS0+ cGRfc2Vzc2lvbiwgJnBkdGlkLCBjbWQpOwogICAgICAgaWYgKHN0YXR1cyAhPSBQVEhEQl9TVUND RVNTIHx8IHBkdGlkID09IFBUSERCX0lOVkFMSURfUFRIUkVBRCkKIAlicmVhazsKIAotICAgICAg c3RhdHVzID0gcHRoZGJfcHRocmVhZF9wdGlkIChwZF9zZXNzaW9uLCBwZHRpZCwgJnB0aGlkKTsK KyAgICAgIHN0YXR1cyA9IHB0aGRiX3B0aHJlYWRfcHRpZCAoZGF0YS0+cGRfc2Vzc2lvbiwgcGR0 aWQsICZwdGhpZCk7CiAgICAgICBpZiAoc3RhdHVzICE9IFBUSERCX1NVQ0NFU1MgfHwgcHRoaWQg PT0gUFRIREJfSU5WQUxJRF9QVElEKQogCWNvbnRpbnVlOwogCkBAIC03ODAsNyArNzk1LDcgQEAg c3luY190aHJlYWRsaXN0cyAoaW50IHBpZCkKIAogICBmb3IgKHBpID0gMDsgcGkgPCBwY291bnQ7 IHBpKyspCiAgICAgewotICAgICAgc3RhdHVzID0gcHRoZGJfcHRocmVhZF90aWQgKHBkX3Nlc3Np b24sIHBidWZbcGldLnBkdGlkLCAmdGlkKTsKKyAgICAgIHN0YXR1cyA9IHB0aGRiX3B0aHJlYWRf dGlkIChkYXRhLT5wZF9zZXNzaW9uLCBwYnVmW3BpXS5wZHRpZCwgJnRpZCk7CiAgICAgICBpZiAo c3RhdHVzICE9IFBUSERCX1NVQ0NFU1MpCiAJdGlkID0gUFRIREJfSU5WQUxJRF9USUQ7CiAgICAg ICBwYnVmW3BpXS50aWQgPSB0aWQ7CkBAIC03OTAsMTAgKzgwNSwxNyBAQCBzeW5jX3RocmVhZGxp c3RzIChpbnQgcGlkKQogCiAgIC8qIEFjY3VtdWxhdGUgYW4gYXJyYXkgb2YgR0RCIHRocmVhZHMg c29ydGVkIGJ5IHBpZC4gICovCiAKKyAgLyogZ2NvdW50IGlzIEdEQiB0aHJlYWQgY291bnQgYW5k IHBjb3VudCBpcyBwdGhyZWFkbGliIHRocmVhZCBjb3VudC4gICovCisKICAgZ2NvdW50ID0gMDsK LSAgaXRlcmF0ZV9vdmVyX3RocmVhZHMgKGdpdGVyX2NvdW50LCAmZ2NvdW50KTsKKyAgZm9yICh0 aHJlYWRfaW5mbyAqdHAgOiBhbGxfdGhyZWFkcyAocHJvY190YXJnZXQsIHB0aWRfdCAocGlkKSkp CisgICAgZ2NvdW50Kys7CiAgIGcgPSBnYnVmID0gWE5FV1ZFQyAoc3RydWN0IHRocmVhZF9pbmZv ICosIGdjb3VudCk7Ci0gIGl0ZXJhdGVfb3Zlcl90aHJlYWRzIChnaXRlcl9hY2N1bSwgJmcpOwor ICBmb3IgKHRocmVhZF9pbmZvICp0cCA6IGFsbF90aHJlYWRzIChwcm9jX3RhcmdldCwgcHRpZF90 IChwaWQpKSkKKyAgeworICAgICpnID0gdHA7CisgICAgKmcrKzsKKyAgfQogICBxc29ydCAoZ2J1 ZiwgZ2NvdW50LCBzaXplb2YgKmdidWYsIGdjbXApOwogCiAgIC8qIEFwcGx5IGRpZmZlcmVuY2Vz IGJldHdlZW4gdGhlIHR3byBhcnJheXMgdG8gR0RCJ3MgdGhyZWFkIGxpc3QuICAqLwpAQCAtODEw LDggKzgzMiw2IEBAIHN5bmNfdGhyZWFkbGlzdHMgKGludCBwaWQpCiAJICBwcml2LT5wZHRpZCA9 IHBidWZbcGldLnBkdGlkOwogCSAgcHJpdi0+dGlkID0gcGJ1ZltwaV0udGlkOwogCi0JICBwcm9j ZXNzX3N0cmF0dW1fdGFyZ2V0ICpwcm9jX3RhcmdldAotCSAgICA9IGN1cnJlbnRfaW5mZXJpb3Ig KCktPnByb2Nlc3NfdGFyZ2V0ICgpOwogCSAgdGhyZWFkID0gYWRkX3RocmVhZF93aXRoX2luZm8g KHByb2NfdGFyZ2V0LAogCQkJCQkgcHRpZF90IChwaWQsIDAsIHBidWZbcGldLnB0aGlkKSwKIAkJ CQkJIHByaXYpOwpAQCAtODQxLDEzICs4NjEsMjggQEAgc3luY190aHJlYWRsaXN0cyAoaW50IHBp ZCkKIAkgICAgfQogCSAgZWxzZSBpZiAoY21wX3Jlc3VsdCA+IDApCiAJICAgIHsKLQkgICAgICBk ZWxldGVfdGhyZWFkIChnYnVmW2dpXSk7Ci0JICAgICAgZ2krKzsKKwkgICAgICAvKiBUaGlzIGlz IHRvIG1ha2UgdGhlIG1haW4gcHJvY2VzcyB0aHJlYWQgbm93IGxvb2sKKwkJIGxpa2UgYSB0aHJl YWQuICAqLworCisJICAgICAgaWYgKGdwdGlkLmlzX3BpZCAoKSkKKwkgICAgICB7CisJCXRocmVh ZF9jaGFuZ2VfcHRpZCAocHJvY190YXJnZXQsIGdwdGlkLCBwcHRpZCk7CisJCWFpeF90aHJlYWRf aW5mbyAqcHJpdiA9IG5ldyBhaXhfdGhyZWFkX2luZm87CisJCXByaXYtPnBkdGlkID0gcGJ1Zltw aV0ucGR0aWQ7CisJCXByaXYtPnRpZCA9IHBidWZbcGldLnRpZDsKKwkJdHAgPSBmaW5kX3RocmVh ZF9wdGlkIChwcm9jX3RhcmdldCwgcHB0aWQpOworCQl0cC0+cHJpdi5yZXNldCAocHJpdik7CisJ CXBpKys7CisJCWdpKys7CisJICAgICAgfQorCSAgICAgIGVsc2UKKwkgICAgICB7CisJCWRlbGV0 ZV90aHJlYWQgKGdidWZbZ2ldKTsKKwkJZ2krKzsKKwkgICAgICB9CiAJICAgIH0KIAkgIGVsc2UK IAkgICAgewotCSAgICAgIHByb2Nlc3Nfc3RyYXR1bV90YXJnZXQgKnByb2NfdGFyZ2V0Ci0JCT0g Y3VycmVudF9pbmZlcmlvciAoKS0+cHJvY2Vzc190YXJnZXQgKCk7CiAJICAgICAgdGhyZWFkID0g YWRkX3RocmVhZCAocHJvY190YXJnZXQsIHBwdGlkKTsKIAogCSAgICAgIGFpeF90aHJlYWRfaW5m byAqcHJpdiA9IG5ldyBhaXhfdGhyZWFkX2luZm87CkBAIC04ODcsMTEgKzkyMiwxNCBAQCBwZF91 cGRhdGUgKGludCBwaWQpCiAgIHB0aWRfdCBwdGlkOwogICBwdGhkYl90aWRfdCB0aWQ7CiAgIHN0 cnVjdCB0aHJlYWRfaW5mbyAqdGhyZWFkID0gTlVMTDsKKyAgc3RydWN0IGFpeF90aHJlYWRfdmFy aWFibGVzICpkYXRhOworCisgIGRhdGEgPSBnZXRfdGhyZWFkX2RhdGFfaGVscGVyX2Zvcl9waWQg KHBpZCk7CiAKLSAgaWYgKCFwZF9hY3RpdmUpCisgIGlmICghZGF0YS0+cGRfYWN0aXZlKQogICAg IHJldHVybiBwdGlkX3QgKHBpZCk7CiAKLSAgc3RhdHVzID0gcHRoZGJfc2Vzc2lvbl91cGRhdGUg KHBkX3Nlc3Npb24pOworICBzdGF0dXMgPSBwdGhkYl9zZXNzaW9uX3VwZGF0ZSAoZGF0YS0+cGRf c2Vzc2lvbik7CiAgIGlmIChzdGF0dXMgIT0gUFRIREJfU1VDQ0VTUykKICAgICByZXR1cm4gcHRp ZF90IChwaWQpOwogCkBAIC05MTgsMzEgKzk1NiwyMCBAQCBzdGF0aWMgcHRpZF90CiBwZF9hY3Rp dmF0ZSAoaW50IHBpZCkKIHsKICAgaW50IHN0YXR1czsKKyAgc3RydWN0IGFpeF90aHJlYWRfdmFy aWFibGVzICpkYXRhOworICBkYXRhID0gZ2V0X3RocmVhZF9kYXRhX2hlbHBlcl9mb3JfcGlkIChw aWQpOwogCQkKLSAgc3RhdHVzID0gcHRoZGJfc2Vzc2lvbl9pbml0IChwaWQsIGFyY2g2NCA/IFBF TV82NEJJVCA6IFBFTV8zMkJJVCwKKyAgc3RhdHVzID0gcHRoZGJfc2Vzc2lvbl9pbml0IChwaWQs IGRhdGEtPmFyY2g2NCA/IFBFTV82NEJJVCA6IFBFTV8zMkJJVCwKIAkJCSAgICAgICBQVEhEQl9G TEFHX1JFR1MsICZwZF9jYWxsYmFja3MsIAotCQkJICAgICAgICZwZF9zZXNzaW9uKTsKKwkJCSAg ICAgICAmZGF0YS0+cGRfc2Vzc2lvbik7CiAgIGlmIChzdGF0dXMgIT0gUFRIREJfU1VDQ0VTUykK ICAgICB7CiAgICAgICByZXR1cm4gcHRpZF90IChwaWQpOwogICAgIH0KLSAgcGRfYWN0aXZlID0g MTsKKyAgZGF0YS0+cGRfYWN0aXZlID0gMTsKICAgcmV0dXJuIHBkX3VwZGF0ZSAocGlkKTsKIH0K IAotLyogVW5kbyB0aGUgZWZmZWN0cyBvZiBwZF9hY3RpdmF0ZSgpLiAgKi8KLQotc3RhdGljIHZv aWQKLXBkX2RlYWN0aXZhdGUgKHZvaWQpCi17Ci0gIGlmICghcGRfYWN0aXZlKQotICAgIHJldHVy bjsKLSAgcHRoZGJfc2Vzc2lvbl9kZXN0cm95IChwZF9zZXNzaW9uKTsKLSAgCi0gIHBpZF90b19w cmMgKCZpbmZlcmlvcl9wdGlkKTsKLSAgcGRfYWN0aXZlID0gMDsKLX0KLQogLyogQW4gb2JqZWN0 IGZpbGUgaGFzIGp1c3QgYmVlbiBsb2FkZWQuICBDaGVjayB3aGV0aGVyIHRoZSBjdXJyZW50CiAg ICBhcHBsaWNhdGlvbiBpcyBwdGhyZWFkZWQsIGFuZCBpZiBzbywgcHJlcGFyZSBmb3IgdGhyZWFk IGRlYnVnZ2luZy4gICovCiAKQEAgLTk1MiwxMyArOTc5LDE5IEBAIHBkX2VuYWJsZSAodm9pZCkK ICAgaW50IHN0YXR1czsKICAgY2hhciAqc3R1Yl9uYW1lOwogICBzdHJ1Y3QgYm91bmRfbWluaW1h bF9zeW1ib2wgbXM7CisgIHN0cnVjdCBhaXhfdGhyZWFkX3ZhcmlhYmxlcyAqZGF0YTsKKworICBp ZiAoIWluZmVyaW9yX3B0aWQucGlkICgpKQorICAgIHJldHVybjsKKyAgCisgIGRhdGEgPSBnZXRf dGhyZWFkX2RhdGFfaGVscGVyX2Zvcl9wdGlkIChpbmZlcmlvcl9wdGlkKTsKIAogICAvKiBEb24n dCBpbml0aWFsaXplIHR3aWNlLiAgKi8KLSAgaWYgKHBkX2FibGUpCisgIGlmIChkYXRhLT5wZF9h YmxlKQogICAgIHJldHVybjsKIAogICAvKiBDaGVjayBhcHBsaWNhdGlvbiB3b3JkIHNpemUuICAq LwotICBhcmNoNjQgPSByZWdpc3Rlcl9zaXplICh0YXJnZXRfZ2RiYXJjaCAoKSwgMCkgPT0gODsK KyAgZGF0YS0+YXJjaDY0ID0gcmVnaXN0ZXJfc2l6ZSAodGFyZ2V0X2dkYmFyY2ggKCksIDApID09 IDg7CiAKICAgLyogQ2hlY2sgd2hldGhlciB0aGUgYXBwbGljYXRpb24gaXMgcHRocmVhZGVkLiAg Ki8KICAgc3R1Yl9uYW1lID0gTlVMTDsKQEAgLTk3MiwxMyArMTAwNSwxMyBAQCBwZF9lbmFibGUg KHZvaWQpCiAgIG1zID0gbG9va3VwX21pbmltYWxfc3ltYm9sIChzdHViX25hbWUsIE5VTEwsIE5V TEwpOwogICBpZiAobXMubWluc3ltID09IE5VTEwpCiAgICAgcmV0dXJuOwotICBwZF9icmtfYWRk ciA9IG1zLnZhbHVlX2FkZHJlc3MgKCk7Ci0gIGlmICghY3JlYXRlX3RocmVhZF9ldmVudF9icmVh a3BvaW50ICh0YXJnZXRfZ2RiYXJjaCAoKSwgcGRfYnJrX2FkZHIpKQorICBkYXRhLT5wZF9icmtf YWRkciA9IG1zLnZhbHVlX2FkZHJlc3MgKCk7CisgIGlmICghY3JlYXRlX3RocmVhZF9ldmVudF9i cmVha3BvaW50ICh0YXJnZXRfZ2RiYXJjaCAoKSwgZGF0YS0+cGRfYnJrX2FkZHIpKQogICAgIHJl dHVybjsKIAogICAvKiBQcmVwYXJlIGZvciB0aHJlYWQgZGVidWdnaW5nLiAgKi8KICAgY3VycmVu dF9pbmZlcmlvciAoKS0+cHVzaF90YXJnZXQgKCZhaXhfdGhyZWFkX29wcyk7Ci0gIHBkX2FibGUg PSAxOworICBkYXRhLT5wZF9hYmxlID0gMTsgCiAKICAgLyogSWYgd2UncmUgZGVidWdnaW5nIGEg Y29yZSBmaWxlIG9yIGFuIGF0dGFjaGVkIGluZmVyaW9yLCB0aGUKICAgICAgcHRocmVhZCBsaWJy YXJ5IG1heSBhbHJlYWR5IGhhdmUgYmVlbiBpbml0aWFsaXplZCwgc28gdHJ5IHRvCkBAIC05OTEs MjggKzEwMjQsMzEgQEAgcGRfZW5hYmxlICh2b2lkKQogc3RhdGljIHZvaWQKIHBkX2Rpc2FibGUg KHZvaWQpCiB7Ci0gIGlmICghcGRfYWJsZSkKKyAgc3RydWN0IGFpeF90aHJlYWRfdmFyaWFibGVz ICpkYXRhOworICBkYXRhID0gZ2V0X3RocmVhZF9kYXRhX2hlbHBlcl9mb3JfcHRpZCAoaW5mZXJp b3JfcHRpZCk7CisKKyAgaWYgKCFkYXRhLT5wZF9hYmxlKQogICAgIHJldHVybjsKLSAgaWYgKHBk X2FjdGl2ZSkKLSAgICBwZF9kZWFjdGl2YXRlICgpOwotICBwZF9hYmxlID0gMDsKKyAgaWYgKCFk YXRhLT5wZF9hY3RpdmUpCisgICAgcmV0dXJuOworICBwdGhkYl9zZXNzaW9uX2Rlc3Ryb3kgKGRh dGEtPnBkX3Nlc3Npb24pOworIAorICBwaWRfdG9fcHJjICgmaW5mZXJpb3JfcHRpZCk7CisgIGRh dGEtPnBkX2FjdGl2ZSA9IDA7CisgIGRhdGEtPnBkX2FibGUgPSAwOwogICBjdXJyZW50X2luZmVy aW9yICgpLT51bnB1c2hfdGFyZ2V0ICgmYWl4X3RocmVhZF9vcHMpOwogfQogCiAvKiBuZXdfb2Jq ZmlsZSBvYnNlcnZlciBjYWxsYmFjay4KIAogICAgSWYgT0JKRklMRSBpcyBub24tbnVsbCwgY2hl Y2sgd2hldGhlciBhIHRocmVhZGVkIGFwcGxpY2F0aW9uIGlzCi0gICBiZWluZyBkZWJ1Z2dlZCwg YW5kIGlmIHNvLCBwcmVwYXJlIGZvciB0aHJlYWQgZGVidWdnaW5nLgotCi0gICBJZiBPQkpGSUxF IGlzIG51bGwsIHN0b3AgZGVidWdnaW5nIHRocmVhZHMuICAqLworICAgYmVpbmcgZGVidWdnZWQs IGFuZCBpZiBzbywgcHJlcGFyZSBmb3IgdGhyZWFkIGRlYnVnZ2luZy4gICovCiAKIHN0YXRpYyB2 b2lkCiBuZXdfb2JqZmlsZSAoc3RydWN0IG9iamZpbGUgKm9iamZpbGUpCiB7CiAgIGlmIChvYmpm aWxlKQogICAgIHBkX2VuYWJsZSAoKTsKLSAgZWxzZQotICAgIHBkX2Rpc2FibGUgKCk7CiB9CiAK IC8qIEF0dGFjaCB0byBwcm9jZXNzIHNwZWNpZmllZCBieSBBUkdTLiAgKi8KQEAgLTEwNDIsOCAr MTA3OCwxMSBAQCBhaXhfdGhyZWFkX3RhcmdldDo6cmVzdW1lIChwdGlkX3QgcHRpZCwgaW50IHN0 ZXAsIGVudW0gZ2RiX3NpZ25hbCBzaWcpCiB7CiAgIHN0cnVjdCB0aHJlYWRfaW5mbyAqdGhyZWFk OwogICBwdGhkYl90aWRfdCB0aWRbMl07CisgIHN0cnVjdCBhaXhfdGhyZWFkX3ZhcmlhYmxlcyAq ZGF0YTsKKyAgCisgIGRhdGEgPSBnZXRfdGhyZWFkX2RhdGFfaGVscGVyX2Zvcl9wdGlkIChwdGlk KTsKIAotICBpZiAoIVBEX1RJRCAocHRpZCkpCisgIGlmIChwdGlkLnRpZCAoKSA9PSAwKQogICAg IHsKICAgICAgIHNjb3BlZF9yZXN0b3JlIHNhdmVfaW5mZXJpb3JfcHRpZCA9IG1ha2Vfc2NvcGVk X3Jlc3RvcmUgKCZpbmZlcmlvcl9wdGlkKTsKICAgICAgIApAQCAtMTA2NSw3ICsxMTA0LDcgQEAg YWl4X3RocmVhZF90YXJnZXQ6OnJlc3VtZSAocHRpZF90IHB0aWQsIGludCBzdGVwLCBlbnVtIGdk Yl9zaWduYWwgc2lnKQogCSAgICAgICBwdGlkLmx3cCAoKSk7CiAgICAgICB0aWRbMV0gPSAwOwog Ci0gICAgICBpZiAoYXJjaDY0KQorICAgICAgaWYgKGRhdGEtPmFyY2g2NCkKIAlwdHJhY2U2NGFp eCAoUFRUX0NPTlRJTlVFLCB0aWRbMF0sIChsb25nIGxvbmcpIDEsCiAJCSAgICAgZ2RiX3NpZ25h bF90b19ob3N0IChzaWcpLCAoUFRSQUNFX1RZUEVfQVJHNSkgdGlkKTsKICAgICAgIGVsc2UKQEAg LTEwODIsNiArMTEyMSw3IEBAIHB0aWRfdAogYWl4X3RocmVhZF90YXJnZXQ6OndhaXQgKHB0aWRf dCBwdGlkLCBzdHJ1Y3QgdGFyZ2V0X3dhaXRzdGF0dXMgKnN0YXR1cywKIAkJCSB0YXJnZXRfd2Fp dF9mbGFncyBvcHRpb25zKQogeworICBzdHJ1Y3QgYWl4X3RocmVhZF92YXJpYWJsZXMgKmRhdGE7 CiAgIHsKICAgICBwaWRfdG9fcHJjICgmcHRpZCk7CiAKQEAgLTEwOTUsOCArMTEzNSwxMCBAQCBh aXhfdGhyZWFkX3RhcmdldDo6d2FpdCAocHRpZF90IHB0aWQsIHN0cnVjdCB0YXJnZXRfd2FpdHN0 YXR1cyAqc3RhdHVzLAogICAgICBwaWQtb25seSBwdGlkcy4gICovCiAgIGdkYl9hc3NlcnQgKHB0 aWQuaXNfcGlkICgpKTsKIAorICBkYXRhID0gZ2V0X3RocmVhZF9kYXRhX2hlbHBlcl9mb3JfcHRp ZCAocHRpZCk7CisKICAgLyogQ2hlY2sgd2hldGhlciBsaWJwdGhkZWJ1ZyBtaWdodCBiZSByZWFk eSB0byBiZSBpbml0aWFsaXplZC4gICovCi0gIGlmICghcGRfYWN0aXZlICYmIHN0YXR1cy0+a2lu ZCAoKSA9PSBUQVJHRVRfV0FJVEtJTkRfU1RPUFBFRAorICBpZiAoIWRhdGEtPnBkX2FjdGl2ZSAm JiBzdGF0dXMtPmtpbmQgKCkgPT0gVEFSR0VUX1dBSVRLSU5EX1NUT1BQRUQKICAgICAgICYmIHN0 YXR1cy0+c2lnICgpID09IEdEQl9TSUdOQUxfVFJBUCkKICAgICB7CiAgICAgICBwcm9jZXNzX3N0 cmF0dW1fdGFyZ2V0ICpwcm9jX3RhcmdldApAQCAtMTEwNSw3ICsxMTQ3LDcgQEAgYWl4X3RocmVh ZF90YXJnZXQ6OndhaXQgKHB0aWRfdCBwdGlkLCBzdHJ1Y3QgdGFyZ2V0X3dhaXRzdGF0dXMgKnN0 YXR1cywKICAgICAgIHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoID0gcmVnY2FjaGUtPmFyY2ggKCk7 CiAKICAgICAgIGlmIChyZWdjYWNoZV9yZWFkX3BjIChyZWdjYWNoZSkKLQkgIC0gZ2RiYXJjaF9k ZWNyX3BjX2FmdGVyX2JyZWFrIChnZGJhcmNoKSA9PSBwZF9icmtfYWRkcikKKwkgIC0gZ2RiYXJj aF9kZWNyX3BjX2FmdGVyX2JyZWFrIChnZGJhcmNoKSA9PSBkYXRhLT5wZF9icmtfYWRkcikKIAly ZXR1cm4gcGRfYWN0aXZhdGUgKHB0aWQucGlkICgpKTsKICAgICB9CiAKQEAgLTEyMjksMTggKzEy NzEsMjAgQEAgZmV0Y2hfcmVnc191c2VyX3RocmVhZCAoc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNo ZSwgcHRoZGJfcHRocmVhZF90IHBkdGlkKQogICBwcGNfZ2RiYXJjaF90ZGVwICp0ZGVwID0gZ2Ri YXJjaF90ZGVwPHBwY19nZGJhcmNoX3RkZXA+IChnZGJhcmNoKTsKICAgaW50IHN0YXR1cywgaTsK ICAgcHRoZGJfY29udGV4dF90IGN0eDsKKyAgc3RydWN0IGFpeF90aHJlYWRfdmFyaWFibGVzICpk YXRhOworICBkYXRhID0gZ2V0X3RocmVhZF9kYXRhX2hlbHBlcl9mb3JfcHRpZCAoaW5mZXJpb3Jf cHRpZCk7CiAKICAgaWYgKGRlYnVnX2FpeF90aHJlYWQpCiAgICAgZ2RiX3ByaW50ZiAoZ2RiX3N0 ZGxvZywgCiAJCSJmZXRjaF9yZWdzX3VzZXJfdGhyZWFkICVseFxuIiwgKGxvbmcpIHBkdGlkKTsK LSAgc3RhdHVzID0gcHRoZGJfcHRocmVhZF9jb250ZXh0IChwZF9zZXNzaW9uLCBwZHRpZCwgJmN0 eCk7CisgIHN0YXR1cyA9IHB0aGRiX3B0aHJlYWRfY29udGV4dCAoZGF0YS0+cGRfc2Vzc2lvbiwg cGR0aWQsICZjdHgpOwogICBpZiAoc3RhdHVzICE9IFBUSERCX1NVQ0NFU1MpCiAgICAgZXJyb3Ig KF8oImFpeC10aHJlYWQ6IGZldGNoX3JlZ2lzdGVyczogcHRoZGJfcHRocmVhZF9jb250ZXh0IHJl dHVybmVkICVzIiksCiAJICAgcGRfc3RhdHVzMnN0ciAoc3RhdHVzKSk7CiAKICAgLyogR2VuZXJh bC1wdXJwb3NlIHJlZ2lzdGVycy4gICovCiAKLSAgaWYgKGFyY2g2NCkKKyAgaWYgKGRhdGEtPmFy Y2g2NCkKICAgICBzdXBwbHlfZ3ByczY0IChyZWdjYWNoZSwgY3R4Lmdwcik7CiAgIGVsc2UKICAg ICBmb3IgKGkgPSAwOyBpIDwgcHBjX251bV9ncHJzOyBpKyspCkBAIC0xMjUzLDcgKzEyOTcsNyBA QCBmZXRjaF9yZWdzX3VzZXJfdGhyZWFkIChzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLCBwdGhk Yl9wdGhyZWFkX3QgcGR0aWQpCiAKICAgLyogU3BlY2lhbCByZWdpc3RlcnMuICAqLwogCi0gIGlm IChhcmNoNjQpCisgIGlmIChkYXRhLT5hcmNoNjQpCiAgICAgc3VwcGx5X3NwcnM2NCAocmVnY2Fj aGUsIGN0eC5pYXIsIGN0eC5tc3IsIGN0eC5jciwgY3R4LmxyLCBjdHguY3RyLAogCQkJICAgICBj dHgueGVyLCBjdHguZnBzY3IpOwogICBlbHNlCkBAIC0xMjg4LDE4ICsxMzMyLDIxIEBAIGZldGNo X3JlZ3Nfa2VybmVsX3RocmVhZCAoc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwgaW50IHJlZ25v LAogICBzdHJ1Y3QgcHR4c3BycyBzcHJzNjQ7CiAgIHN0cnVjdCBwdHNwcnMgc3ByczMyOwogICBp bnQgaTsKKyAgc3RydWN0IGFpeF90aHJlYWRfdmFyaWFibGVzICpkYXRhOworICAKKyAgZGF0YSA9 IGdldF90aHJlYWRfZGF0YV9oZWxwZXJfZm9yX3B0aWQgKHJlZ2NhY2hlLT5wdGlkICgpKTsKIAog ICBpZiAoZGVidWdfYWl4X3RocmVhZCkKICAgICBnZGJfcHJpbnRmIChnZGJfc3RkbG9nLAogCQki ZmV0Y2hfcmVnc19rZXJuZWxfdGhyZWFkIHRpZD0lbHggcmVnbm89JWQgYXJjaDY0PSVkXG4iLAot CQkobG9uZykgdGlkLCByZWdubywgYXJjaDY0KTsKKwkJKGxvbmcpIHRpZCwgcmVnbm8sIGRhdGEt PmFyY2g2NCk7CiAKICAgLyogR2VuZXJhbC1wdXJwb3NlIHJlZ2lzdGVycy4gICovCiAgIGlmIChy ZWdubyA9PSAtMQogICAgICAgfHwgKHRkZXAtPnBwY19ncDBfcmVnbnVtIDw9IHJlZ25vCiAJICAm JiByZWdubyA8IHRkZXAtPnBwY19ncDBfcmVnbnVtICsgcHBjX251bV9ncHJzKSkKICAgICB7Ci0g ICAgICBpZiAoYXJjaDY0KQorICAgICAgaWYgKGRhdGEtPmFyY2g2NCkKIAl7CiAJICBpZiAoIXB0 cmFjZTY0YWl4IChQVFRfUkVBRF9HUFJTLCB0aWQsIAogCQkJICAgICh1bnNpZ25lZCBsb25nKSBn cHJzNjQsIDAsIE5VTEwpKQpAQCAtMTMzMSw3ICsxMzc4LDcgQEAgZmV0Y2hfcmVnc19rZXJuZWxf dGhyZWFkIChzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLCBpbnQgcmVnbm8sCiAKICAgaWYgKHJl Z25vID09IC0xIHx8IHNwZWNpYWxfcmVnaXN0ZXJfcCAoZ2RiYXJjaCwgcmVnbm8pKQogICAgIHsK LSAgICAgIGlmIChhcmNoNjQpCisgICAgICBpZiAoZGF0YS0+YXJjaDY0KQogCXsKIAkgIGlmICgh cHRyYWNlNjRhaXggKFBUVF9SRUFEX1NQUlMsIHRpZCwgCiAJCQkgICAgKHVuc2lnbmVkIGxvbmcp ICZzcHJzNjQsIDAsIE5VTEwpKQpAQCAtMTM2Myw3ICsxNDEwLDcgQEAgYWl4X3RocmVhZF90YXJn ZXQ6OmZldGNoX3JlZ2lzdGVycyAoc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwgaW50IHJlZ25v KQogICBzdHJ1Y3QgdGhyZWFkX2luZm8gKnRocmVhZDsKICAgcHRoZGJfdGlkX3QgdGlkOwogCi0g IGlmICghUERfVElEIChyZWdjYWNoZS0+cHRpZCAoKSkpCisgIGlmIChyZWdjYWNoZS0+cHRpZCAo KS50aWQgKCkgPT0gMCkKICAgICBiZW5lYXRoICgpLT5mZXRjaF9yZWdpc3RlcnMgKHJlZ2NhY2hl LCByZWdubyk7CiAgIGVsc2UKICAgICB7CkBAIC0xNTExLDYgKzE1NTgsOCBAQCBzdG9yZV9yZWdz X3VzZXJfdGhyZWFkIChjb25zdCBzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLCBwdGhkYl9wdGhy ZWFkX3QgcGR0aWQpCiAgIHB0aGRiX2NvbnRleHRfdCBjdHg7CiAgIHVpbnQzMl90IGludDMyOwog ICB1aW50NjRfdCBpbnQ2NDsKKyAgc3RydWN0IGFpeF90aHJlYWRfdmFyaWFibGVzICpkYXRhOwor ICBkYXRhID0gZ2V0X3RocmVhZF9kYXRhX2hlbHBlcl9mb3JfcHRpZCAoaW5mZXJpb3JfcHRpZCk7 CiAKICAgaWYgKGRlYnVnX2FpeF90aHJlYWQpCiAgICAgZ2RiX3ByaW50ZiAoZ2RiX3N0ZGxvZywg CkBAIC0xNTE4LDcgKzE1NjcsNyBAQCBzdG9yZV9yZWdzX3VzZXJfdGhyZWFkIChjb25zdCBzdHJ1 Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLCBwdGhkYl9wdGhyZWFkX3QgcGR0aWQpCiAKICAgLyogUmV0 cmlldmUgdGhlIHRocmVhZCdzIGN1cnJlbnQgY29udGV4dCBmb3IgaXRzIG5vbi1yZWdpc3Rlcgog ICAgICB2YWx1ZXMuICAqLwotICBzdGF0dXMgPSBwdGhkYl9wdGhyZWFkX2NvbnRleHQgKHBkX3Nl c3Npb24sIHBkdGlkLCAmY3R4KTsKKyAgc3RhdHVzID0gcHRoZGJfcHRocmVhZF9jb250ZXh0IChk YXRhLT5wZF9zZXNzaW9uLCBwZHRpZCwgJmN0eCk7CiAgIGlmIChzdGF0dXMgIT0gUFRIREJfU1VD Q0VTUykKICAgICBlcnJvciAoXygiYWl4LXRocmVhZDogc3RvcmVfcmVnaXN0ZXJzOiBwdGhkYl9w dGhyZWFkX2NvbnRleHQgcmV0dXJuZWQgJXMiKSwKIAkgICBwZF9zdGF0dXMyc3RyIChzdGF0dXMp KTsKQEAgLTE1MjgsNyArMTU3Nyw3IEBAIHN0b3JlX3JlZ3NfdXNlcl90aHJlYWQgKGNvbnN0IHN0 cnVjdCByZWdjYWNoZSAqcmVnY2FjaGUsIHB0aGRiX3B0aHJlYWRfdCBwZHRpZCkKICAgZm9yIChp ID0gMDsgaSA8IHBwY19udW1fZ3ByczsgaSsrKQogICAgIGlmIChSRUdfVkFMSUQgPT0gcmVnY2Fj aGUtPmdldF9yZWdpc3Rlcl9zdGF0dXMgKHRkZXAtPnBwY19ncDBfcmVnbnVtICsgaSkpCiAgICAg ICB7Ci0JaWYgKGFyY2g2NCkKKwlpZiAoZGF0YS0+YXJjaDY0KQogCSAgewogCSAgICByZWdjYWNo ZS0+cmF3X2NvbGxlY3QgKHRkZXAtPnBwY19ncDBfcmVnbnVtICsgaSwgKHZvaWQgKikgJmludDY0 KTsKIAkgICAgY3R4LmdwcltpXSA9IGludDY0OwpAQCAtMTU0NSw3ICsxNTk0LDcgQEAgc3RvcmVf cmVnc191c2VyX3RocmVhZCAoY29uc3Qgc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwgcHRoZGJf cHRocmVhZF90IHBkdGlkKQogICAgIGZpbGxfZnBycyAocmVnY2FjaGUsIGN0eC5mcHIpOwogCiAg IC8qIFNwZWNpYWwgcmVnaXN0ZXJzIChhbHdheXMga2VwdCBpbiBjdHggYXMgNjQgYml0cykuICAq LwotICBpZiAoYXJjaDY0KQorICBpZiAoZGF0YS0+YXJjaDY0KQogICAgIHsKICAgICAgIGZpbGxf c3ByczY0IChyZWdjYWNoZSwgJmN0eC5pYXIsICZjdHgubXNyLCAmY3R4LmNyLCAmY3R4LmxyLCAm Y3R4LmN0ciwKIAkJCSAgICAgJmN0eC54ZXIsICZjdHguZnBzY3IpOwpAQCAtMTU3Niw3ICsxNjI1 LDcgQEAgc3RvcmVfcmVnc191c2VyX3RocmVhZCAoY29uc3Qgc3RydWN0IHJlZ2NhY2hlICpyZWdj YWNoZSwgcHRoZGJfcHRocmVhZF90IHBkdGlkKQogCWN0eC5mcHNjciA9IHRtcF9mcHNjcjsKICAg ICB9CiAKLSAgc3RhdHVzID0gcHRoZGJfcHRocmVhZF9zZXRjb250ZXh0IChwZF9zZXNzaW9uLCBw ZHRpZCwgJmN0eCk7CisgIHN0YXR1cyA9IHB0aGRiX3B0aHJlYWRfc2V0Y29udGV4dCAoZGF0YS0+ cGRfc2Vzc2lvbiwgcGR0aWQsICZjdHgpOwogICBpZiAoc3RhdHVzICE9IFBUSERCX1NVQ0NFU1Mp CiAgICAgZXJyb3IgKF8oImFpeC10aHJlYWQ6IHN0b3JlX3JlZ2lzdGVyczogIgogCSAgICAgInB0 aGRiX3B0aHJlYWRfc2V0Y29udGV4dCByZXR1cm5lZCAlcyIpLApAQCAtMTYwMiw2ICsxNjUxLDkg QEAgc3RvcmVfcmVnc19rZXJuZWxfdGhyZWFkIChjb25zdCBzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2Nh Y2hlLCBpbnQgcmVnbm8sCiAgIGRvdWJsZSBmcHJzW3BwY19udW1fZnByc107CiAgIHN0cnVjdCBw dHhzcHJzIHNwcnM2NDsKICAgc3RydWN0IHB0c3BycyAgc3ByczMyOworICBzdHJ1Y3QgYWl4X3Ro cmVhZF92YXJpYWJsZXMgKmRhdGE7CisgIAorICBkYXRhID0gZ2V0X3RocmVhZF9kYXRhX2hlbHBl cl9mb3JfcHRpZCAocmVnY2FjaGUtPnB0aWQgKCkpOwogCiAgIGlmIChkZWJ1Z19haXhfdGhyZWFk KQogICAgIGdkYl9wcmludGYgKGdkYl9zdGRsb2csIApAQCAtMTYxMyw3ICsxNjY1LDcgQEAgc3Rv cmVfcmVnc19rZXJuZWxfdGhyZWFkIChjb25zdCBzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLCBp bnQgcmVnbm8sCiAgICAgICB8fCAodGRlcC0+cHBjX2dwMF9yZWdudW0gPD0gcmVnbm8KIAkgICYm IHJlZ25vIDwgdGRlcC0+cHBjX2dwMF9yZWdudW0gKyBwcGNfbnVtX2ZwcnMpKQogICAgIHsKLSAg ICAgIGlmIChhcmNoNjQpCisgICAgICBpZiAoZGF0YS0+YXJjaDY0KQogCXsKIAkgIC8qIFByZS1m ZXRjaDogc29tZSByZWdzIG1heSBub3QgYmUgaW4gdGhlIGNhY2hlLiAgKi8KIAkgIHB0cmFjZTY0 YWl4IChQVFRfUkVBRF9HUFJTLCB0aWQsICh1bnNpZ25lZCBsb25nKSBncHJzNjQsIDAsIE5VTEwp OwpAQCAtMTY0Niw3ICsxNjk4LDcgQEAgc3RvcmVfcmVnc19rZXJuZWxfdGhyZWFkIChjb25zdCBz dHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLCBpbnQgcmVnbm8sCiAKICAgaWYgKHJlZ25vID09IC0x IHx8IHNwZWNpYWxfcmVnaXN0ZXJfcCAoZ2RiYXJjaCwgcmVnbm8pKQogICAgIHsKLSAgICAgIGlm IChhcmNoNjQpCisgICAgICBpZiAoZGF0YS0+YXJjaDY0KQogCXsKIAkgIC8qIFByZS1mZXRjaDog c29tZSByZWdpc3RlcnMgd29uJ3QgYmUgaW4gdGhlIGNhY2hlLiAgKi8KIAkgIHB0cmFjZTY0YWl4 IChQVFRfUkVBRF9TUFJTLCB0aWQsIApAQCAtMTcwMyw3ICsxNzU1LDcgQEAgYWl4X3RocmVhZF90 YXJnZXQ6OnN0b3JlX3JlZ2lzdGVycyAoc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwgaW50IHJl Z25vKQogICBzdHJ1Y3QgdGhyZWFkX2luZm8gKnRocmVhZDsKICAgcHRoZGJfdGlkX3QgdGlkOwog Ci0gIGlmICghUERfVElEIChyZWdjYWNoZS0+cHRpZCAoKSkpCisgIGlmIChyZWdjYWNoZS0+cHRp ZCAoKS50aWQgKCkgPT0gMCkKICAgICBiZW5lYXRoICgpLT5zdG9yZV9yZWdpc3RlcnMgKHJlZ2Nh Y2hlLCByZWdubyk7CiAgIGVsc2UKICAgICB7CkBAIC0xNzQxLDcgKzE3OTMsNyBAQCBhaXhfdGhy ZWFkX3RhcmdldDo6bW91cm5faW5mZXJpb3IgKCkKIHsKICAgdGFyZ2V0X29wcyAqYmVuZWF0aCA9 IHRoaXMtPmJlbmVhdGggKCk7CiAKLSAgcGRfZGVhY3RpdmF0ZSAoKTsKKyAgcGRfZGlzYWJsZSAo KTsKICAgYmVuZWF0aC0+bW91cm5faW5mZXJpb3IgKCk7CiB9CiAKQEAgLTE3NTAsNyArMTgwMiw3 IEBAIGFpeF90aHJlYWRfdGFyZ2V0Ojptb3Vybl9pbmZlcmlvciAoKQogYm9vbAogYWl4X3RocmVh ZF90YXJnZXQ6OnRocmVhZF9hbGl2ZSAocHRpZF90IHB0aWQpCiB7Ci0gIGlmICghUERfVElEIChw dGlkKSkKKyAgaWYgKHB0aWQudGlkICgpID09IDApCiAgICAgcmV0dXJuIGJlbmVhdGggKCktPnRo cmVhZF9hbGl2ZSAocHRpZCk7CiAKICAgLyogV2UgdXBkYXRlIHRoZSB0aHJlYWQgbGlzdCBldmVy eSB0aW1lIHRoZSBjaGlsZCBzdG9wcywgc28gYWxsCkBAIC0xNzY2LDcgKzE4MTgsNyBAQCBhaXhf dGhyZWFkX3RhcmdldDo6dGhyZWFkX2FsaXZlIChwdGlkX3QgcHRpZCkKIHN0ZDo6c3RyaW5nCiBh aXhfdGhyZWFkX3RhcmdldDo6cGlkX3RvX3N0ciAocHRpZF90IHB0aWQpCiB7Ci0gIGlmICghUERf VElEIChwdGlkKSkKKyAgaWYgKHB0aWQudGlkICgpID09IDApCiAgICAgcmV0dXJuIGJlbmVhdGgg KCktPnBpZF90b19zdHIgKHB0aWQpOwogCiAgIHJldHVybiBzdHJpbmdfcHJpbnRmIChfKCJUaHJl YWQgJXMiKSwgcHVsb25nZXN0IChwdGlkLnRpZCAoKSkpOwpAQCAtMTc4Niw4ICsxODM4LDExIEBA IGFpeF90aHJlYWRfdGFyZ2V0OjpleHRyYV90aHJlYWRfaW5mbyAoc3RydWN0IHRocmVhZF9pbmZv ICp0aHJlYWQpCiAgIHB0aGRiX2RldGFjaHN0YXRlX3QgZGV0YWNoc3RhdGU7CiAgIGludCBjYW5j ZWxwZW5kOwogICBzdGF0aWMgY2hhciAqcmV0ID0gTlVMTDsKKyAgc3RydWN0IGFpeF90aHJlYWRf dmFyaWFibGVzICpkYXRhOworCisgIGRhdGEgPSBnZXRfdGhyZWFkX2RhdGFfaGVscGVyX2Zvcl9w dGlkICh0aHJlYWQtPnB0aWQpOwogCi0gIGlmICghUERfVElEICh0aHJlYWQtPnB0aWQpKQorICBp ZiAodGhyZWFkLT5wdGlkLnRpZCAoKSA9PSAwKQogICAgIHJldHVybiBOVUxMOwogCiAgIHN0cmlu Z19maWxlIGJ1ZjsKQEAgLTE4MDAsMjQgKzE4NTUsMjQgQEAgYWl4X3RocmVhZF90YXJnZXQ6OmV4 dHJhX3RocmVhZF9pbmZvIChzdHJ1Y3QgdGhyZWFkX2luZm8gKnRocmVhZCkKICAgICAvKiBpMThu OiBMaWtlICJ0aHJlYWQtaWRlbnRpZmllciAlZCwgW3N0YXRlXSBydW5uaW5nLCBzdXNwZW5kZWQi ICovCiAgICAgYnVmLnByaW50ZiAoXygidGlkICVkIiksIChpbnQpdGlkKTsKIAotICBzdGF0dXMg PSBwdGhkYl9wdGhyZWFkX3N0YXRlIChwZF9zZXNzaW9uLCBwZHRpZCwgJnN0YXRlKTsKKyAgc3Rh dHVzID0gcHRoZGJfcHRocmVhZF9zdGF0ZSAoZGF0YS0+cGRfc2Vzc2lvbiwgcGR0aWQsICZzdGF0 ZSk7CiAgIGlmIChzdGF0dXMgIT0gUFRIREJfU1VDQ0VTUykKICAgICBzdGF0ZSA9IFBTVF9OT1RT VVA7CiAgIGJ1Zi5wcmludGYgKCIsICVzIiwgc3RhdGUyc3RyIChzdGF0ZSkpOwogCi0gIHN0YXR1 cyA9IHB0aGRiX3B0aHJlYWRfc3VzcGVuZHN0YXRlIChwZF9zZXNzaW9uLCBwZHRpZCwgCisgIHN0 YXR1cyA9IHB0aGRiX3B0aHJlYWRfc3VzcGVuZHN0YXRlIChkYXRhLT5wZF9zZXNzaW9uLCBwZHRp ZCwgCiAJCQkJICAgICAgICZzdXNwZW5kc3RhdGUpOwogICBpZiAoc3RhdHVzID09IFBUSERCX1NV Q0NFU1MgJiYgc3VzcGVuZHN0YXRlID09IFBTU19TVVNQRU5ERUQpCiAgICAgLyogaTE4bjogTGlr ZSAiVGhyZWFkLUlkICVkLCBbc3RhdGVdIHJ1bm5pbmcsIHN1c3BlbmRlZCIgKi8KICAgICBidWYu cHJpbnRmIChfKCIsIHN1c3BlbmRlZCIpKTsKIAotICBzdGF0dXMgPSBwdGhkYl9wdGhyZWFkX2Rl dGFjaHN0YXRlIChwZF9zZXNzaW9uLCBwZHRpZCwgCisgIHN0YXR1cyA9IHB0aGRiX3B0aHJlYWRf ZGV0YWNoc3RhdGUgKGRhdGEtPnBkX3Nlc3Npb24sIHBkdGlkLCAKIAkJCQkgICAgICAmZGV0YWNo c3RhdGUpOwogICBpZiAoc3RhdHVzID09IFBUSERCX1NVQ0NFU1MgJiYgZGV0YWNoc3RhdGUgPT0g UERTX0RFVEFDSEVEKQogICAgIC8qIGkxOG46IExpa2UgIlRocmVhZC1JZCAlZCwgW3N0YXRlXSBy dW5uaW5nLCBkZXRhY2hlZCIgKi8KICAgICBidWYucHJpbnRmIChfKCIsIGRldGFjaGVkIikpOwog Ci0gIHB0aGRiX3B0aHJlYWRfY2FuY2VscGVuZCAocGRfc2Vzc2lvbiwgcGR0aWQsICZjYW5jZWxw ZW5kKTsKKyAgcHRoZGJfcHRocmVhZF9jYW5jZWxwZW5kIChkYXRhLT5wZF9zZXNzaW9uLCBwZHRp ZCwgJmNhbmNlbHBlbmQpOwogICBpZiAoc3RhdHVzID09IFBUSERCX1NVQ0NFU1MgJiYgY2FuY2Vs cGVuZCkKICAgICAvKiBpMThuOiBMaWtlICJUaHJlYWQtSWQgJWQsIFtzdGF0ZV0gcnVubmluZywg Y2FuY2VsIHBlbmRpbmciICovCiAgICAgYnVmLnByaW50ZiAoXygiLCBjYW5jZWwgcGVuZGluZyIp KTsKZGlmZiAtLWdpdCBhL2dkYi9zb2xpYi1haXguYyBiL2dkYi9zb2xpYi1haXguYwppbmRleCBm NDgzZjU0ZGUxMy4uNmJlODEwNjRlYmQgMTAwNjQ0Ci0tLSBhL2dkYi9zb2xpYi1haXguYworKysg Yi9nZGIvc29saWItYWl4LmMKQEAgLTYxOCw2ICs2MTgsMjAgQEAgc29saWJfYWl4X2JmZF9vcGVu IChjb25zdCBjaGFyICpwYXRobmFtZSkKICAgICAgIGlmIChtZW1iZXJfbmFtZSA9PSBiZmRfZ2V0 X2ZpbGVuYW1lIChvYmplY3RfYmZkLmdldCAoKSkpCiAJYnJlYWs7CiAKKyAgICAgIHN0ZDo6c3Ry aW5nIHMgPSBiZmRfZ2V0X2ZpbGVuYW1lIChvYmplY3RfYmZkLmdldCAoKSk7CisKKyAgICAgIC8q IEZvciBldmVyeSBpbmZlcmlvciBhZnRlciBmaXJzdCBpbnQgYmZkIHN5c3RlbSB3ZSAKKwkgd2ls bCBoYXZlIHRoZSBwYXRobmFtZSBpbnN0ZWFkIG9mIHRoZSBtZW1iZXIgbmFtZQorCSByZWdpc3Rl cmVkLiBIZW5jZSB0aGUgYmVsb3cgY29uZGl0aW9uIGV4aXN0cy4gICovCisKKyAgICAgIGlmIChz LmZpbmQgKCcoJykgIT0gc3RkOjpzdHJpbmc6Om5wb3MpCisJeworCSAgaW50IHBvcyA9IHMuZmlu ZCAoJygnKTsKKwkgIGludCBsZW4gPSBzLmZpbmQgKCcpJykgLSBzLmZpbmQgKCcoJyk7CisJICBp ZiAocy5zdWJzdHIgKHBvcysxLCBsZW4tMSkgPT0gbWVtYmVyX25hbWUpIAorCSAgICByZXR1cm4g b2JqZWN0X2JmZDsKKwl9CisKICAgICAgIG9iamVjdF9iZmQgPSBnZGJfYmZkX29wZW5yX25leHRf YXJjaGl2ZWRfZmlsZSAoYXJjaGl2ZV9iZmQuZ2V0ICgpLAogCQkJCQkJICAgICBvYmplY3RfYmZk LmdldCAoKSk7CiAgICAgfQotLSAKMi4zMS4xCgo= --_004_CH2PR15MB35449148A6541A1581B1749ED6DB9CH2PR15MB3544namp_--