From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx0b-001b2d01.pphosted.com (mx0b-001b2d01.pphosted.com [148.163.158.5]) by sourceware.org (Postfix) with ESMTPS id A898B385841C for ; Wed, 1 Mar 2023 12:34:08 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org A898B385841C Authentication-Results: sourceware.org; dmarc=pass (p=reject dis=none) header.from=ibm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=ibm.com Received: from pps.filterd (m0098417.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 321CRBMc019742; Wed, 1 Mar 2023 12:34:07 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=from : to : cc : subject : date : message-id : references : in-reply-to : content-type : mime-version; s=pp1; bh=ld8+gfpVkUMieYoOBupXorCAa7fdLjNgbU7RI8ztvFo=; b=GJU+Gu7hRj6LX/WY+oDjoesrg6DXSIhTp4IrOAfIz4BA4rs8IERDaFIhZX9mN/ijklcj TF3+rx6TRD7N/KV6GLt7RNhmlajgAjh92MA2KzB4iRDECUzAoC50buoc0I9rYBHp5DxF Gw7Zlk6OmSkeAZlkDF7IdhxycwfRFxAztZzM1YdClScXdutUP+pfnkvUjhT6TCEbuqXF k+/Tr9qEvYvWdejeULv/zeipNp75eNC3RaaNQYOwY49k/1fk82GrvALzqIvwvEMbt0Cb hh3dtGgeoaVp0U1kHSvkt3+h5SQbDzuvcoX9tZIrjYIYDmNXtMzR70HGjnHXP9SXo80v hw== Received: from nam02-dm3-obe.outbound.protection.outlook.com (mail-dm3nam02lp2044.outbound.protection.outlook.com [104.47.56.44]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 3p23fq5ak9-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 01 Mar 2023 12:34:06 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=JIINS8/cgCmAEHdEcDWBqC9Eq2uiMk7ifFdtyFkqZQKqE6n7OJTYDHvQq2QNGWJ+JCFAhHzZmM2XA5K02zL9xnOYnDlc9shE4sVNfPUNQu4IOa/1nmypA060SwdG95l2oaBDThlhg0B03BctWCGlQxPeJVLlK03Feq9FkRLBaocIRspxxguyKJKHPA4MgrElnFHgfX2kfsD+5QfQtvwFV06j66SB2DwDDDlihP1bSO6eVsIBjNT0sFoQ75VIUqJJy+Cuscw4RFocHOguTv+fERvvSnHzBIiR6rRH3BOyFc5kDt/CFn5ZULND15RJWWiUDuGpCj0/PxmwDymaLS0XCA== 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=gbGfs5tHcfgWopA9TcYBnDrpgn+edViascyATw9f8Jo=; b=jv7lxPVzxuyefOw5Jsp02otnizdCanBo3s01FzoC30ILJmvkrX7feNDyUiOcIV9GJ6tZYBjXQM137wQ+G1FLWZToOHaxBGGfdSC3D/FYVRsXbR5n8Bp37Yy5eJ3hdee2k+f2XKK8/YGtNZuayCqpg7Gi43Xe2dAwnmw/fPbr8L/n3SOukUgtFThn3YacNQ8329XLYcWe23WKP0TCRUThs3rg/3bfLAOJURcWoH9su8nziCbgXAum/pRq4s3Wvmww/Nsf6yRDmrq0reTiMday6veyH6qynjOb9xn6wH8IQbXaEvn4Wrz8MYpxhQFebkLGtp+hQgdXzG5vYcCJkzCZ0A== 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 SA3PR15MB6147.namprd15.prod.outlook.com (2603:10b6:806:2fe::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6134.30; Wed, 1 Mar 2023 12:34:04 +0000 Received: from CH2PR15MB3544.namprd15.prod.outlook.com ([fe80::cb98:8c4d:b2e2:c281]) by CH2PR15MB3544.namprd15.prod.outlook.com ([fe80::cb98:8c4d:b2e2:c281%6]) with mapi id 15.20.6156.018; Wed, 1 Mar 2023 12:34:03 +0000 From: Aditya Kamath1 To: Ulrich Weigand , "gdb-patches@sourceware.org" , "simark@simark.ca" CC: Sangamesh Mallayya Subject: Re: [PATCH] Enable vector instruction debugging for AIX Thread-Topic: [PATCH] Enable vector instruction debugging for AIX Thread-Index: AQHY3u6lF+eu5MBiPkac4T2UQTTsTa4N1rEAgBXdOaaAACL2AIAa9qYHgAG+XYCAnK7VvIAB0CqAgAeraRA= Date: Wed, 1 Mar 2023 12:34:03 +0000 Message-ID: References: <3914469e72960a5d0d659f9ea8ea84c4456d64e2.camel@de.ibm.com> <02d8d62d9980ea5ae8e30b3ee1e7ac46a1b9f412.camel@de.ibm.com> <17dcfeee50a782539d977be334836e5f2d232a2c.camel@de.ibm.com> In-Reply-To: <17dcfeee50a782539d977be334836e5f2d232a2c.camel@de.ibm.com> Accept-Language: en-IN, en-US Content-Language: en-IN X-MS-Has-Attach: yes X-MS-TNEF-Correlator: x-ms-publictraffictype: Email x-ms-traffictypediagnostic: CH2PR15MB3544:EE_|SA3PR15MB6147:EE_ x-ms-office365-filtering-correlation-id: de3a325b-985e-414e-5a38-08db1a513e13 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: uMtHx1bNGuZze7wH/0cLdoKzbITpRluJv99zd/wG/m/tC4xrEyFp83P6GFUBbnxC1F619HFGD1Ov5IfZuRlqL+Rt2M/FUNNte9PuISrlw7E1OR09YTrNyBF6Epy6H9NPEc3yXxrtE+NWUtW7/ZD2ny0CjDEg3Ny/YNi5t0ewATpu1hCgD7BETOBpgUKnzphAX4Av8zgp9KfIApfTuKUrvu/GF0jPg6wzEMNgLprZkJ1XiOU610qXxsQr5xG8ghEUTEiQEkDUDfZ/UUEpz+pIGIOXDfr5M4qXq9UEMk58tyjoIDw2njqtdMW9fLoZQNbi//VeX4lyUH7oO4zdZFYIZqd3XTfAIsH4IBKqzOlGO+34CR2hA8PIkuWOurG8vqQB7+jsbD2DBhp5UK4kI+hz9OneVf0H0LGL6hZE+gdGf3lgVOLXaF0v3KJKyNkJ1ORGhAF3ZIoZXVinWYK2+VgST/mNMj9QWAwv168J9tutTdkBgRtE7YEFvpLYVC10Z1bgDgvcRx1DwdYi56XJiVzamIzxHUnOn1AuzeyL3AKdz0IrxTcavtZbwnK/LJvl9tSTuE/phnYXYgtKDFe5PBQkJJX1AY4WH7yPw8x8HcyiPxiWqdPSxsk0PQ5M2djdyUE8gIFvv29YGXYlgQz9A0dfcsEzsJr/Li5ZP45xPs+0lMdP5hk8h3GZB7LKqFQM64yv 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)(39860400002)(366004)(346002)(376002)(396003)(136003)(451199018)(38100700002)(38070700005)(166002)(99936003)(86362001)(122000001)(33656002)(66476007)(8676002)(30864003)(66556008)(66446008)(2906002)(76116006)(66946007)(41300700001)(4326008)(64756008)(8936002)(52536014)(5660300002)(966005)(55016003)(53546011)(6506007)(9686003)(26005)(83380400001)(186003)(110136005)(316002)(478600001)(91956017)(7696005)(71200400001);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?Windows-1252?Q?n5CuAEeLA68IyeNXi2pX0QCWe/5sZ6bP8/qfa2LaJE22GAfYGw0Kueu5?= =?Windows-1252?Q?6grp1HLSe1etKLiyUdGmNiKhMH0cVdHH55IPMsxVBKBeTfYdfVKIrAw9?= =?Windows-1252?Q?63WHl28P59oxyGKKHsm11H8kq0rEAxzo455Wq2nE7OwxXY7WWkjrF3/9?= =?Windows-1252?Q?JisOiWgyNEet9LvGBnns9WsBL2NPLp/CIaumTTVdMK77vewp4pXNVVlu?= =?Windows-1252?Q?SgQjJK4NnEe//852Yj9y/ieFyf/alR5QekdPyBHpKwAr57MGPNL6H/YF?= =?Windows-1252?Q?iKuL/MWK/k1SNKwwFTKRkXiTg3cOUF8izk6tz18SkpWdiBal0DPzLru6?= =?Windows-1252?Q?M2ymD4DswqhfKMch5q8Oqyp12aNnZPJg83ivVxDzXizzZv0LQhAQ3I1W?= =?Windows-1252?Q?qW6vXIC6JYx90Mw44qdu95F88mGxAynaMd2MSCTJA02tSmjhuk4HptVw?= =?Windows-1252?Q?xyfwHjBG7hvtCXNJvP9QC4OUp0M2Q/7LzvDH4Uo/o3BT1nNsZB0T0agQ?= =?Windows-1252?Q?NiaRmIbfpFTH4HlEaXifUbaIlmMYWAopHUuK7ZrMVcRqaVdm0CKysVX2?= =?Windows-1252?Q?A2meKversFWq3n9EVWjlxCIt27MiIfFYb0QPdNoCh5oatI+nD785BXu9?= =?Windows-1252?Q?cQWsesqLFNq341u0QUMPFsD7lKlyKAJuqVAPOBbg2BgM7/PgLpHgRiET?= =?Windows-1252?Q?yY9YMh6eYu8rMYJDCn9yEoA2yf1EB/lxuqbWcMFHslllO9SYKN/bfmrj?= =?Windows-1252?Q?k/TIPGeo+g6EO4ylW1odKiqBLEUNyvYwOALUy0Ht8S1vApMeIabKg5Ru?= =?Windows-1252?Q?VHRXR06gWN4X7/IV3Z6Ue3Ww8hfZJafM501D/p7uigvGDK9RuVwrVNBa?= =?Windows-1252?Q?nG5QfHbl2OgR3kGWDOKg86iZi2HpVMsfDlU+6izzv/t44mqfrnz/Ma1N?= =?Windows-1252?Q?tMNAy2ITxWWwN0As8xihq+Nbi9OceC6G43LChQNFhv3D/LI2bgfhwG/P?= =?Windows-1252?Q?XoRVFAPvHNHxcAfRA3ZwoPFkWtx0xKhBwV3xD0ivbcCwD9DlpBLx9eV2?= =?Windows-1252?Q?iNY8AC1rHDZePvipPS5/mwXQChORvNn65i8fh3QuwzfrCGow2nx6hF90?= =?Windows-1252?Q?N8set1KDo9zffVi3H5/XPqN2/ueaeyJrulZiVNyjyjUFKrnPsp20pRPm?= =?Windows-1252?Q?miQDdV2BOy5wESiOh8dHfhNBR15tKcJbufVuv7NNDRLtC2m+grCmlrAK?= =?Windows-1252?Q?4IwoL40FUw9cLnNfJYLpbR4XybsBRTNzhq1VkxXTBOmX11iJ6KVzW4J7?= =?Windows-1252?Q?LGKb7etDv7d7V7eUv/RGe+LWFoVOV2Yj605A+gvGcSPAHEmHP4YENQhb?= =?Windows-1252?Q?YexBAhXy6lij6nGhwsdourbXscqBBhir/cnnG2geVUuwSlMAGuXY7Rhm?= =?Windows-1252?Q?F9cytVjrqKleGmiti1QdRNt/hhYZ+nCEsJHk+DdtZle5ACrjmC53TDya?= =?Windows-1252?Q?XoCAQWZQAs49suJdrLNTnoeAQuNE9h7PaXlLSCyu+fLh9W3mV2lLN4/R?= =?Windows-1252?Q?1XGb/iBoTnLRzRYySmDijruOetZ2hE5riApRnDTVt4DNt6OJlKVkoF2q?= =?Windows-1252?Q?0zI3NOuiSroSLN3bv8ZseAx7isaXWiRgsSRWJxcPkg4IunCt4Py1+0P/?= =?Windows-1252?Q?TCi8VpYKKzFyIZAi9/lHt4qaNnluHk4ejyNSBiYgQ1OY9+8iQCiXXA?= =?Windows-1252?Q?=3D=3D?= Content-Type: multipart/mixed; boundary="_004_CH2PR15MB3544CCE02934081D8C720585D6AD9CH2PR15MB3544namp_" 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: de3a325b-985e-414e-5a38-08db1a513e13 X-MS-Exchange-CrossTenant-originalarrivaltime: 01 Mar 2023 12:34:03.8560 (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: IzX4cF81Fxwb0M3oNrXaYnGTP/nMCvUomcF4zRYWxdTiDjc/haby3rvw2U1nZbk5FqCE4CUw/nQZLoAtnzndQw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA3PR15MB6147 X-Proofpoint-GUID: 4_-c4AIzza50e4YkBoGoY-jUmok8Vkvw X-Proofpoint-ORIG-GUID: 4_-c4AIzza50e4YkBoGoY-jUmok8Vkvw X-Proofpoint-UnRewURL: 0 URL was un-rewritten MIME-Version: 1.0 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.219,Aquarius:18.0.942,Hydra:6.0.573,FMLib:17.11.170.22 definitions=2023-03-01_08,2023-03-01_01,2023-02-09_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 impostorscore=0 malwarescore=0 mlxscore=0 lowpriorityscore=0 bulkscore=0 mlxlogscore=999 spamscore=0 priorityscore=1501 clxscore=1015 adultscore=0 suspectscore=0 phishscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2212070000 definitions=main-2303010101 X-Spam-Status: No, score=-2.7 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,HTML_MESSAGE,RCVD_IN_MSPIKE_H2,SPF_HELO_NONE,SPF_NONE,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: --_004_CH2PR15MB3544CCE02934081D8C720585D6AD9CH2PR15MB3544namp_ Content-Type: multipart/alternative; boundary="_000_CH2PR15MB3544CCE02934081D8C720585D6AD9CH2PR15MB3544namp_" --_000_CH2PR15MB3544CCE02934081D8C720585D6AD9CH2PR15MB3544namp_ Content-Type: text/plain; charset="Windows-1252" Content-Transfer-Encoding: quoted-printable Hi Ulrich and community, Please find attached the patch. {See: 0001-Enable-vector-instruction-debugg= ing-for-AIX.patch}. Please see my reply to your comments marked in blue. Kindly suggest for changes if needed and review this patch. Have a nice day ahead. Thanks and regards, Aditya. >I notice that the other registers are guarded via >PTHDB_FLAG_GPRS and similar flags. Is there not any >equivalent flag for VMX / VSX registers? In the pthdebug.h file I don=92t see anything available for VMX. I can see = PTHDB_FLAG_VSRS but not sure if this is correct. However I have seen parts = of GDB use PTHDB_FLAG_REGS in aix-thread file that allows all registers. I = have used the same. Kindly see it in the patch. >>>- The machine doesn't have any vector registers >>> (i.e. __power_vmx() returns 0) >>If it doesn=92t have we do not do any thing. We do not even say machine d= oes >>not have any vector registers. Hence no else part to this if condition. >Well, but in your new rs6000_nat_target::read_description >routine, you *do* in fact say that *every* machine always >has VMX and VSX registers. >If you want those registers to simply not be present at >all on machines that do not have them, read_description >should choose an appropriate regset based on __power_vmx >and __power_vsx. I have done these changes in read_description in rs6000-aix-nat.c. Kindly l= et me know what you think. >>In Linux I have seen they show a 0, in the second case. >>So do we also do the same? When I tried doing so, I can tell >>you ptrace () did not allow me to write 0 as well in >>store_vsx_register_aix(), since till user or debugee code >>actually uses it, it is unavailable. So we cannot write 0 >>in the ptrace call via PT_WRITE_VEC. >I think this is different between AIX and Linux then. If >you cannot write anything to the register, I agree it makes >sense to show it as "unavailable". Inorder to keep it standardised I have decided to keep it to 0 till debugee= uses it, reason being in certain places we are setting vmx variable to 0 i= n case ptrace fails. It will be better if we keep it uniform throughout. In= this patch I have taken care of the same. Kindly let me know what you think >>The online documentation I read { https://www.ibm.com/docs/en/aix/7.2?top= ic=3Dp-ptrace-ptracex-ptrace64-subroutine } >>said The PTT_READ_VEC request reads the vector register state of the >>specified thread. There is no PT_READ_VEC or any call that takes >>to get vector registers in any online or internal documents I searched. >>So we need a thread ID to fetch vector registers. >I see. Still, the rs6000-aix-nat.c routines should only be called >for single-threaded processes, right? For these processes, does the >kernel thread ID come from a different name space as the process ID, >or are those IDs just the same (they would be on Linux)? Yes, only for single threaded process. They are of a different name space. = The main thread has a kernel thread ID which is not equal to its process ID= . I also read in a document that the TID=92s in AIX are always odd with the= last bit set and PID=92s are always even with the last bit set as 0. >What's supposed to happen is that for single-threaded processes, >fetch_registers in rs6000-aix-nat.c is called; while for multi- >threaded processes the routine in aix-thread.c is called. The >latter will handle either user threads or kernel threads. >Looking at the big picture, I think the best way to remove the >duplication would be to move all handling of *kernel* threads >to rs6000-aix-nat.c, and leave only user threads in aix-threads.c. >But I guess this could be done as a future cleanup. Yes, I felt that we need to do this. We will do it as a separate patch post= this vector submission. Two things I need to do is contribute that info sh= aredlib test case of threads to the community and this clean up. After this= patch we will work on these two. >Right now in this line you're trying to add: >+ || (op & 0xfc1fffff) =3D=3D 0x7c012f98) /* stxvd2x vs0, r1= , r5 */ >the code does not match the comment. >Again, my primary question would be, why are you making >this change at all? Based on that, what is the exact >set of possible instructions you want to match here? >Given that, it should be straightforward to construct >the correct mask / comparison values to implement that >choice. I get what you have explained to me here. It seems this might be the instru= ction generated in the prologue in certain cases. However I have not succee= ded in producing any example that has this in the prologue and do not know = the cases. Hence I have removed the same from this patch. Having said, if e= ver I see it in future in any example we can add it and work around. At thi= s moment it is removed from the patch. I have tested this with single thre= ad codes and multi-threads and so far no difference of this check existing = or not since it is not there in the prologue. >>Well, at the very least this needs to be announced in the NEWS file. > >>This still mentions AIX 4 being supported. > >So what is the process and when do we do it. Do we do it >after the commit of this patch?? >I think as part of this patch, you should update the NEWS >file with the supported AIX versions going forward. I have added the same in this patch. Let me know if it is okay. >(Note that it would be good to actually verify that the >debugger builds and works correctly on all the versions >that we declare as supported.) I will check this and reply in the next email. Will confirm this once I hav= e done it. >+ /* vector registers. */ >+ __vmx_context_t vmx; >+ if (__power_vmx()) >+ { >+ if (data->arch64) >+ if (!ptrace64aix (PTT_READ_VEC, tid, (long long) &vmx, 0, 0)) >+ memcpy (&context->vmx, &vmx, sizeof(__vmx_context_t)); >+ else >+ if (!ptrace32 (PTT_READ_VEC, tid, (long long) &vmx, 0, 0)) >+ memcpy (&context->vmx, &vmx, sizeof(__vmx_context_t)); >+ } >The other registers are filled with zeros if ptrace fails, >why not here? This is done. >+ int num_of_vrregs =3D tdep->ppc_vrsave_regnum - tdep->ppc_vr0_regnum + = 1; >+ for (regno =3D 0; regno < num_of_vrregs; regno++) >+ regcache->raw_supply (tdep->ppc_vr0_regnum + regno, >+ &(vmx.__vr[regno])); Not sure about the contents of the vmx structure, but I'm wondering if this is correct for the VRSAVE and VSCR registers. Are they part of the __vr array, or are they in separate fields? They are in separate field. So the context.h file has the following definition, typedef struct __vmx_context { __vmxreg_t __vr[32]; /* vector registers */ unsigned int __pad1[3]; /* reserved, must be set to 0 */ unsigned int __vscr; /* vector status and control reg */ unsigned int __vrsave; /* vrsave special purpose reg */ unsigned int __pad2[3]; /* reserved, must be set to 0 */ } __vmx_context_t; I have added them in patch as well. Kindly see it. Thank you for pointing o= ut. I have handled them as well. Since there is no ppc_vscr_regnum for vsc= r while using supply or collect function, I used regcache->raw_supply (tde= p->ppc_vrsave_regnum - 1, &(vmx.__vscr)); to supply it. I saw that tdep->pp= c_vrsave_regnum is the last altivec register in the header file and VSCR is= one but last i.e. second last. So used it in that form. >+ for (regno =3D 0; regno < ppc_num_vshrs; regno++) >+ regcache->raw_supply (tdep->ppc_vsr0_regnum + regno, >+ &(vsx.__vsr_dw1[regno])); >This should only supply ppc_vsr0_upper_regnum etc. (upper halves) >not the full vsr0. This is done. >+ if (__power_vmx()) >+ { >+ if (data->arch64) >+ ret =3D ptrace64aix (PTT_READ_VEC, tid, (long long) &vmx, 0, 0); >+ else >+ ret =3D ptrace32 (PTT_READ_VEC, tid, (uintptr_t) &vmx, 0, 0); >+ if (ret < 0) >+ memset(&vmx, 0, sizeof(__vmx_context_t)); >+ for (i =3D 0; i < num_of_vrregs; i++) >+ regcache->raw_supply (tdep->ppc_vr0_regnum + i, &(vmx.__vr[i])); >+ } >This is strange - if ptrace fails, the fields are zeroed, but if >__power_vmx is false, they're just left uninitialized. What is >even the point of the __power_vmx check in the first place here?^ This is done. I have removed it. It is not required here, you were right. >+ int ret; >+ __vmx_context_t *vmx; >+ __vsx_context_t *vsx; >This is wrong, and a serious memory corruption. If you do this, vmx >needs to be declared as __vmx_context_t, not __vmx_context_t *. This is done. >+ if (__power_vmx()) >+ { >+ if (data->arch64) >+ ret =3D ptrace64aix (PTT_READ_VEC, tid, (long long) &vmx, 0, 0); >+ else >+ ret =3D ptrace32 (PTT_READ_VEC, tid, (long long) &vmx, 0, 0); >+ if (ret < 0) >+ { >+ if (errno =3D=3D ENXIO) >+ { >+ warning (_("Unable to fetch AltiVec registers.")); >+ memset(&vmx, 0, sizeof(__vmx_context_t)); >Huh? So you update with new values only if reading the old values >*failed*? That logic looks clearly wrong here. This was a mistake from my end. Appreciate you for pointing it out. Thank y= ou so much. I have corrected the same. >+#include >Do you really need pthdebug.h here? Even if we need to handle threads >here, it will only be *kernel* threads, so this shouldn't be needed. I have removed it. >+ tid64_t thrd_i =3D 0; >+ >+ if (getthrds64(pid, &thrdentry, sizeof(struct thrdentry64), >+ &thrd_i, 1) =3D=3D 1) >+ thrd_i =3D thrdentry.ti_tid; >So if this call fails, thrd_i just remains 0? How does this >work, or what's the point of this? I have changed this. Kindly see the changes in this patch. >+const struct target_desc * >+rs6000_nat_target::read_description () >+{ >+ if (ARCH64()) >+ return tdesc_powerpc_vsx64; >+ else >+ return tdesc_powerpc_vsx32; >+} >See above - I think this needs to check whether we actually have >VMX and/or VSX registers. I have changed this. Kindly see the changes in this patch Also, please ensure you're following the GNU coding style throughout, and consistently follow the whitespace rules (tab instead of 8 spaces; no whitespace at end of line). I have done this. Thank you for letting me know. From: Ulrich Weigand Date: Friday, 24 February 2023 at 8:56 PM To: gdb-patches@sourceware.org , Aditya Kamath1= , simark@simark.ca Cc: Sangamesh Mallayya Subject: Re: [PATCH] Enable vector instruction debugging for AIX Aditya Kamath1 wrote: >>So you're now using ptrace here as well. From what I >>understand, this wrong - ptrace can only be used with >>kernel threads. For user threads, registers need to >>be retrieved from the context managed by the thread >>library and retrieved via pthdb_pthread_context. > >>Shouldn't the vector registers then also come from there? > >>Do you have a way to test with using user threads? > >Yes. So I did not get this back then. As my learning increased via >the threads bug we had just solved I understood what you are trying >to tell me here. Kindly see pdc_read_regs () and pdc_write_regs (). I notice that the other registers are guarded via PTHDB_FLAG_GPRS and similar flags. Is there not any equivalent flag for VMX / VSX registers? >>I still don't quite understand the intended behavior. As far >>as I can see, there are three possible states: > >>- The machine doesn't have any vector registers >> (i.e. __power_vmx() returns 0) >If it doesn=92t have we do not do any thing. We do not even say machine do= es >not have any vector registers. Hence no else part to this if condition. Well, but in your new rs6000_nat_target::read_description routine, you *do* in fact say that *every* machine always has VMX and VSX registers. If you want those registers to simply not be present at all on machines that do not have them, read_description should choose an appropriate regset based on __power_vmx and __power_vsx. >>What is the intended behavior in those cases? In particular, >>should GDB behave differently between the first and the >>second case? Should GDB not show any vector registers at all, >>should it show vector registers as , or should >>it show vector registers containing zero? > >In Linux I have seen they show a 0, in the second case. >So do we also do the same? When I tried doing so, I can tell >you ptrace () did not allow me to write 0 as well in >store_vsx_register_aix(), since till user or debugee code >actually uses it, it is unavailable. So we cannot write 0 >in the ptrace call via PT_WRITE_VEC. I think this is different between AIX and Linux then. If you cannot write anything to the register, I agree it makes sense to show it as "unavailable". >>Huh. This is really strange, and doesn't quite map on the current GDB >>implementation. Everything related to thread IDs is currently done in >>the aix-threads.c file. It seems not really clean to mix this up. > >>How is this intended to be used? > >>If we need thread IDs anyway (and apparently we can always get a thread >>ID even for a non-threaded process?), should we just use the aix-thread.c >>methods for all processes? >The online documentation I read { https://www.ibm.com/docs/en/aix/7.2?topi= c=3Dp-ptrace-ptracex-ptrace64-subroutine } >said The PTT_READ_VEC request reads the vector register state of the >specified thread. There is no PT_READ_VEC or any call that takes >to get vector registers in any online or internal documents I searched. >So we need a thread ID to fetch vector registers. I see. Still, the rs6000-aix-nat.c routines should only be called for single-threaded processes, right? For these processes, does the kernel thread ID come from a different name space as the process ID, or are those IDs just the same (they would be on Linux)? >Coming to just using aix-thread.c for all process, I did try it today. >What is happening is fetch_registers () in aix-thread.c is not getting >called after the thread target is set for any debugee that does not use >pthreads or is multi threaded once the pthdebug session is established. >{Like the program with name =93code 2=94 pasted below this email}. Only wh= ile >the process is getting born it does call fetch_registers () in the >rs6000-aix-nat.c . If we can make the thread target to call >fetch_registers () once the thread target is set it will work. >But is that correct? What's supposed to happen is that for single-threaded processes, fetch_registers in rs6000-aix-nat.c is called; while for multi- threaded processes the routine in aix-thread.c is called. The latter will handle either user threads or kernel threads. Looking at the big picture, I think the best way to remove the duplication would be to move all handling of *kernel* threads to rs6000-aix-nat.c, and leave only user threads in aix-threads.c. That would mean using all three fields in ptid_t: - pid should hold the pid - lwp should hold the kernel thread ID (tid_t or pthdb_tid_t) - tid should hold the user thread ID (pthdb_pthread_t) That would match the Linux precedent, and would allow all ptrace-related access to be done completely in rs6000-aix-nat.c (using the lwp / tid_t for register access), and leave only the context-based user thread access in aix-threads.c. But I guess this could be done as a future cleanup. >>>Since for the stxvd2x instruction, the last bit is part of the >>>register number, these two lines should be merged into: >> > > || (op & 0xfc1ffffe) =3D=3D 0x7c012f98 /* stxvd2x Vs, r1,= r5 */ >>> >>>>As above, the comment needs to be updated to match. > >>>You should still do this (the 0x...e mask, and the comment). > >I did not get this.. Kindly give me more information. Right now in this line you're trying to add: + || (op & 0xfc1fffff) =3D=3D 0x7c012f98) /* stxvd2x vs0, r1,= r5 */ the code does not match the comment. As I do not know why you're making this change in the first place, I cannot tell whether the code is correct and the comment is wrong or vice versa. (Or maybe neither is fully correct?) Looking at the ISA document, we see this documentation of the stxvd2x instruction: stxvd2x XS,RA,RB bit 0- 5: constant 31 bit 6-10: S bit 11-15: RA bit 16-20: RB bit 21-30: constant 972 bit 31: SX where RA and RB are 5-bit GPR numbers (0..31), while XS is a 6-bit VSX register number (0..63), split into the highest bit SX and the low 5 bits S. If you want to match this instruction, you'll have to verify that the two constant fields have the expected value. If you also want to restrict the match to certain values or ranges for the RA, RB, and XS register numbers, you have to match those as well. This is where the current masking / comparsion looks inconsistent to me. Splitting your mask and comparison values up into the bit fields are defined above, we have: mask: 0xfc1fffff comparison: 0x7c012f98 bit 0- 5: mask all ones - comparison 31 bit 6-10: mask all zeros - comparison 0 bit 11-15: mask all ones - comparison 1 bit 16-20: mask all ones - comparison 5 bit 21-30: mask all ones - comparison 972 bit 31: mask all ones - comparison 0 So, this enforces that the constant fields have the correct values (good). It also enforces that RA =3D=3D 1 and RB =3D=3D 5. I guess this at least matches the comment, but I do not understand the reason for matching just this register combination. (I guess RA =3D=3D 1 is supposed to match the stack pointer, but why RB =3D=3D 5 ?) However, where it gets weird is the XS field: the comment says it looks only for VS0. But the test actually allows many more vector registers here: specifically, it allows any value for the low 5 bits, and forces the high bit to zero. This means that the test will match for VSX registers 0..32, but not for VSX registers 33..63. This seems strange. Again, my primary question would be, why are you making this change at all? Based on that, what is the exact set of possible instructions you want to match here? Given that, it should be straightforward to construct the correct mask / comparison values to implement that choice. >>Well, at the very least this needs to be announced in the NEWS file. > >>This still mentions AIX 4 being supported. > >So what is the process and when do we do it. Do we do it >after the commit of this patch?? I think as part of this patch, you should update the NEWS file with the supported AIX versions going forward. (Note that it would be good to actually verify that the debugger builds and works correctly on all the versions that we declare as supported.) Some additional comments on the patch: >+ /* vector registers. */ >+ __vmx_context_t vmx; >+ if (__power_vmx()) >+ { >+ if (data->arch64) >+ if (!ptrace64aix (PTT_READ_VEC, tid, (long long) &vmx, 0, 0)) >+ memcpy (&context->vmx, &vmx, sizeof(__vmx_context_t)); >+ else >+ if (!ptrace32 (PTT_READ_VEC, tid, (long long) &vmx, 0, 0)) >+ memcpy (&context->vmx, &vmx, sizeof(__vmx_context_t)); >+ } The other registers are filled with zeros if ptrace fails, why not here? >+ int num_of_vrregs =3D tdep->ppc_vrsave_regnum - tdep->ppc_vr0_regnum + = 1; >+ for (regno =3D 0; regno < num_of_vrregs; regno++) >+ regcache->raw_supply (tdep->ppc_vr0_regnum + regno, >+ &(vmx.__vr[regno])); Not sure about the contents of the vmx structure, but I'm wondering if this is correct for the VRSAVE and VSCR registers. Are they part of the __vr array, or are they in separate fields? >+ for (regno =3D 0; regno < ppc_num_vshrs; regno++) >+ regcache->raw_supply (tdep->ppc_vsr0_regnum + regno, >+ &(vsx.__vsr_dw1[regno])); This should only supply ppc_vsr0_upper_regnum etc. (upper halves) not the full vsr0. >+ if (__power_vmx()) >+ { >+ if (data->arch64) >+ ret =3D ptrace64aix (PTT_READ_VEC, tid, (long long) &vmx, 0, 0); >+ else >+ ret =3D ptrace32 (PTT_READ_VEC, tid, (uintptr_t) &vmx, 0, 0); >+ if (ret < 0) >+ memset(&vmx, 0, sizeof(__vmx_context_t)); >+ for (i =3D 0; i < num_of_vrregs; i++) >+ regcache->raw_supply (tdep->ppc_vr0_regnum + i, &(vmx.__vr[i])); >+ } This is strange - if ptrace fails, the fields are zeroed, but if __power_vmx is false, they're just left uninitialized. What is even the point of the __power_vmx check in the first place here?^ >+ int ret; >+ __vmx_context_t *vmx; >+ __vsx_context_t *vsx; >+ int num_of_vrregs =3D tdep->ppc_vrsave_regnum - tdep->ppc_vr0_regnum + = 1; > > if (debug_aix_thread) > gdb_printf (gdb_stdlog, >@@ -1594,6 +1751,40 @@ store_regs_user_thread (const struct regcache *regc= ache, pthdb_pthread_t pdtid) > error (_("aix-thread: store_registers: pthdb_pthread_context returned= %s"), > pd_status2str (status)); > >+ /* Fill altivec-registers. */ >+ >+ if (__power_vmx()) >+ { >+ memset(&vmx, 0, sizeof(__vmx_context_t)); This is wrong, and a serious memory corruption. If you do this, vmx needs to be declared as __vmx_context_t, not __vmx_context_t *. >+ if (__power_vmx()) >+ { >+ if (data->arch64) >+ ret =3D ptrace64aix (PTT_READ_VEC, tid, (long long) &vmx, 0, 0); >+ else >+ ret =3D ptrace32 (PTT_READ_VEC, tid, (long long) &vmx, 0, 0); >+ if (ret < 0) >+ { >+ if (errno =3D=3D ENXIO) >+ { >+ warning (_("Unable to fetch AltiVec registers.")); >+ memset(&vmx, 0, sizeof(__vmx_context_t)); >+ } >+ fill_altivec(regcache, &vmx); >+ if (data->arch64) >+ ret =3D ptrace64aix (PTT_WRITE_VEC, tid, (long long) &vmx, 0,= 0); >+ else >+ ret =3D ptrace32 (PTT_WRITE_VEC, tid, (long long) &vmx, 0, 0); Huh? So you update with new values only if reading the old values *failed*? That logic looks clearly wrong here. >+/* Header files for alti-vec reg. */ >+#include >+#include Do you really need pthdebug.h here? Even if we need to handle threads here, it will only be *kernel* threads, so this shouldn't be needed. >+ tid64_t thrd_i =3D 0; >+ >+ if (getthrds64(pid, &thrdentry, sizeof(struct thrdentry64), >+ &thrd_i, 1) =3D=3D 1) >+ thrd_i =3D thrdentry.ti_tid; So if this call fails, thrd_i just remains 0? How does this work, or what's the point of this? >+const struct target_desc * >+rs6000_nat_target::read_description () >+{ >+ if (ARCH64()) >+ return tdesc_powerpc_vsx64; >+ else >+ return tdesc_powerpc_vsx32; >+} See above - I think this needs to check whether we actually have VMX and/or VSX registers. >- else if ((op & 0xfc1fffff) =3D=3D 0x7c1f01ce) /* stvx Vs, R31, R0= */ >+ else if ((op & 0xfc1fffff) =3D=3D 0x7c1f01ce /* stvx Vs, R31, R0 = */ >+ || (op & 0xfc1fffff) =3D=3D 0x7c012f98) /* stxvd2x vs0, r1,= r5 */ See discussion above. Also, please ensure you're following the GNU coding style throughout, and consistently follow the whitespace rules (tab instead of 8 spaces; no whitespace at end of line). Bye, Ulrich --_000_CH2PR15MB3544CCE02934081D8C720585D6AD9CH2PR15MB3544namp_-- --_004_CH2PR15MB3544CCE02934081D8C720585D6AD9CH2PR15MB3544namp_ Content-Type: application/octet-stream; name="0001-Enable-vector-instruction-debugging-for-AIX.patch" Content-Description: 0001-Enable-vector-instruction-debugging-for-AIX.patch Content-Disposition: attachment; filename="0001-Enable-vector-instruction-debugging-for-AIX.patch"; size=26920; creation-date="Wed, 01 Mar 2023 12:34:02 GMT"; modification-date="Wed, 01 Mar 2023 12:34:02 GMT" Content-Transfer-Encoding: base64 RnJvbSAxNDgxOTM0ZWEzYTVmYTNlNTIzMWI5NzViNjJkYTc4NzY5MThiYjlj IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBBZGl0eWEgVmlkeWFk aGFyIEthbWF0aCA8QWRpdHlhLkthbWF0aDFAaWJtLmNvbT4KRGF0ZTogV2Vk LCAxIE1hciAyMDIzIDA2OjExOjI4IC0wNjAwClN1YmplY3Q6IFtQQVRDSF0g RW5hYmxlIHZlY3RvciBpbnN0cnVjdGlvbiBkZWJ1Z2dpbmcgZm9yIEFJWAoK LS0tCiBnZGIvTkVXUyAgICAgICAgICAgICAgfCAgIDYgKy0KIGdkYi9haXgt dGhyZWFkLmMgICAgICB8IDI2NSArKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKy0KIGdkYi9yczYwMDAtYWl4LW5hdC5jICB8IDIy MiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogZ2RiL3Jz NjAwMC1haXgtdGRlcC5jIHwgMTgyICsrKysrKysrKysrKysrKysrKysrKysr KysrKysrCiA0IGZpbGVzIGNoYW5nZWQsIDY3MiBpbnNlcnRpb25zKCspLCAz IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2dkYi9ORVdTIGIvZ2RiL05F V1MKaW5kZXggNzVjZDExYjIwNGUuLmFjYTg5NWEzYjE1IDEwMDY0NAotLS0g YS9nZGIvTkVXUworKysgYi9nZGIvTkVXUwpAQCAtMyw2ICszLDggQEAKIAog KioqIENoYW5nZXMgc2luY2UgR0RCIDEzCiAKKyogQUlYIG5vdyBuZWVkcyB0 byBiZSBvZiB2ZXJzaW9uIDUuMiBvciBoaWdoZXIgdG8gaW5zdGFsbCBHREIu CisKICogTXVsdGktdGFyZ2V0IGZlYXR1cmUgY29uZmlndXJhdGlvbgogCiAg IEdEQiBub3cgc3VwcG9ydHMgdGhlIGluZGl2aWR1YWwgY29uZmlndXJhdGlv biBvZiByZW1vdGUgdGFyZ2V0cycgZmVhdHVyZQpAQCAtNzYwNiwxMCArNzYw OCwxMCBAQCB0aGUgcG9zc2libGUgYXJjaGl0ZWN0dXJlcy4KIAogV2luZG93 cyA5NSwgeDg2IFdpbmRvd3MgTlQJCQlpWzM0NV04Ni0qLWN5Z3dpbjMyCiBN NjhLIE5ldEJTRAkJCQkJbTY4ay0qLW5ldGJzZCoKLVBvd2VyUEMgQUlYIDQu eAkJCQkJcG93ZXJwYy0qLWFpeCoKK1Bvd2VyUEMgQUlYIDUuMiBvciBoaWdo ZXIJCQlwb3dlcnBjLSotYWl4KgogUG93ZXJQQyBNYWNPUwkJCQkJcG93ZXJw Yy0qLW1hY29zKgogUG93ZXJQQyBXaW5kb3dzIE5UCQkJCXBvd2VycGNsZS0q LWN5Z3dpbjMyCi1SUy82MDAwIEFJWCA0LngJCQkJCXJzNjAwMC0qLWFpeDQq CitSUy82MDAwIEFJWCA1LjIgb3IgaGlnaGVyCQkJcnM2MDAwLSotYWl4NCoK IAogKiBOZXcgdGFyZ2V0cwogCmRpZmYgLS1naXQgYS9nZGIvYWl4LXRocmVh ZC5jIGIvZ2RiL2FpeC10aHJlYWQuYwppbmRleCA0MTg0Yzg3YTkyYi4uNjBj Mjg2NjA1ZTMgMTAwNjQ0Ci0tLSBhL2dkYi9haXgtdGhyZWFkLmMKKysrIGIv Z2RiL2FpeC10aHJlYWQuYwpAQCAtMzAxLDcgKzMwMSwxNiBAQCBwdHJhY2Vf Y2hlY2sgKGludCByZXEsIGludCBpZCwgaW50IHJldCkKIAkJCXJlcSwgaWQs IHJldCwgZXJybm8pOwogCSAgcmV0dXJuIHJldCA9PSAtMSA/IDAgOiAxOwog CX0KLSAgICAgIGJyZWFrOworCWJyZWFrOworICAgICBjYXNlIFBUVF9SRUFE X1ZFQzoKKyAgICAgY2FzZSBQVFRfUkVBRF9WU1g6CisgICAgICAgIGlmIChk ZWJ1Z19haXhfdGhyZWFkKQorICAgICAgICAgICAgZ2RiX3ByaW50ZiAoZ2Ri X3N0ZGxvZywKKyAgICAgICAgICAgICAgICAgICAgICAgICJwdHJhY2UgKCVk LCAlZCkgPSAlZCAoZXJybm8gPSAlZClcbiIsCisgICAgICAgICAgICAgICAg ICAgICAgICByZXEsIGlkLCByZXQsIGVycm5vKTsKKwlpZiAocmV0ID09IC0x KQorCSAgcmV0dXJuIC0xOworCWJyZWFrOwogICAgIH0KICAgZXJyb3IgKF8o ImFpeC10aHJlYWQ6IHB0cmFjZSAoJWQsICVkKSByZXR1cm5lZCAlZCAoZXJy bm8gPSAlZCAlcykiKSwKIAkgcmVxLCBpZCwgcmV0LCBlcnJubywgc2FmZV9z dHJlcnJvciAoZXJybm8pKTsKQEAgLTQ3NSw2ICs0ODQsNDIgQEAgcGRjX3Jl YWRfcmVncyAocHRoZGJfdXNlcl90IHVzZXJfY3VycmVudF9waWQsCiAJICBt ZW1jcHkgKCZjb250ZXh0LT5tc3IsICZzcHJzMzIsIHNpemVvZihzcHJzMzIp KTsKIAl9CiAgICAgfSAgCisKKyAgLyogdmVjdG9yIHJlZ2lzdGVycy4gICov CisgIF9fdm14X2NvbnRleHRfdCB2bXg7CisgIGlmIChfX3Bvd2VyX3ZteCgp ICYmIChmbGFncyAmIFBUSERCX0ZMQUdfUkVHUykpCisgIHsKKyAgICBpZiAo ZGF0YS0+YXJjaDY0KQorICAgICAgeworCWlmICghcHRyYWNlNjRhaXggKFBU VF9SRUFEX1ZFQywgdGlkLCAobG9uZyBsb25nKSAmdm14LCAwLCAwKSkKKwkg IG1lbXNldCAoJnZteCwgMCwgc2l6ZW9mICh2bXgpKTsKKwltZW1jcHkgKCZj b250ZXh0LT52bXgsICZ2bXgsIHNpemVvZihfX3ZteF9jb250ZXh0X3QpKTsK KyAgICAgIH0KKyAgICBlbHNlCisgICAgICB7CisJaWYgKCFwdHJhY2UzMiAo UFRUX1JFQURfVkVDLCB0aWQsIChsb25nIGxvbmcpICZ2bXgsIDAsIDApKQor CSAgbWVtc2V0ICgmdm14LCAwLCBzaXplb2YgKHZteCkpOworCW1lbWNweSAo JmNvbnRleHQtPnZteCwgJnZteCwgc2l6ZW9mKF9fdm14X2NvbnRleHRfdCkp OworICAgICAgfQorICB9CisKKyAgLyogdnN4IHJlZ2lzdGVycy4gICovCisg IF9fdnN4X2NvbnRleHRfdCB2c3g7CisgIGlmIChfX3Bvd2VyX3ZzeCgpICYm IChmbGFncyAmIFBUSERCX0ZMQUdfUkVHUykpCisgIHsKKyAgICBpZiAoZGF0 YS0+YXJjaDY0KQorICAgIHsgCisJaWYgKCFwdHJhY2U2NGFpeCAoUFRUX1JF QURfVlNYLCB0aWQsIChsb25nIGxvbmcpICZ2c3gsIDAsIDApKQorCSAgbWVt c2V0ICgmdnN4LCAwLCBzaXplb2YgKHZzeCkpOworCW1lbWNweSAoJmNvbnRl eHQtPnZzeCwgJnZzeCwgc2l6ZW9mKF9fdnN4X2NvbnRleHRfdCkpOworICAg IH0KKyAgICBlbHNlCisgICAgICB7CisJaWYgKCFwdHJhY2UzMiAoUFRUX1JF QURfVlNYLCB0aWQsIChsb25nIGxvbmcpICZ2c3gsIDAsIDApKQorCSAgbWVt c2V0ICgmdnN4LCAwLCBzaXplb2YgKHZzeCkpOworCW1lbWNweSAoJmNvbnRl eHQtPnZzeCwgJnZzeCwgc2l6ZW9mKF9fdnN4X2NvbnRleHRfdCkpOworICAg ICAgfSAgCisgIH0KICAgcmV0dXJuIDA7CiB9CiAKQEAgLTUzMSw2ICs1NzYs MjQgQEAgcGRjX3dyaXRlX3JlZ3MgKHB0aGRiX3VzZXJfdCB1c2VyX2N1cnJl bnRfcGlkLAogCSAgcHRyYWNlMzIgKFBUVF9XUklURV9TUFJTLCB0aWQsICh1 aW50cHRyX3QpICZjb250ZXh0LT5tc3IsIDAsIE5VTEwpOwogCX0KICAgICB9 CisKKyAgLyogdmVjdG9yIHJlZ2lzdGVycy4gICovCisgIGlmIChfX3Bvd2Vy X3ZteCgpICYmIChmbGFncyAmIFBUSERCX0ZMQUdfUkVHUykpCisgIHsKKyAg ICBpZiAoZGF0YS0+YXJjaDY0KQorICAgICAgcHRyYWNlNjRhaXggKFBUVF9X UklURV9WRUMsIHRpZCwgKHVuc2lnbmVkIGxvbmcpICZjb250ZXh0LT52bXgs IDAsIDApOworICAgIGVsc2UKKyAgICAgIHB0cmFjZTMyIChQVFRfV1JJVEVf VkVDLCB0aWQsICh1aW50cHRyX3QpICZjb250ZXh0LT52bXgsIDAsIDApOwor ICB9CisKKyAgLyogdnN4IHJlZ2lzdGVycy4gICovCisgIGlmIChfX3Bvd2Vy X3ZzeCgpICYmIChmbGFncyAmIFBUSERCX0ZMQUdfUkVHUykpCisgIHsKKyAg ICBpZiAoZGF0YS0+YXJjaDY0KQorICAgICAgcHRyYWNlNjRhaXggKFBUVF9X UklURV9WU1gsIHRpZCwgKHVuc2lnbmVkIGxvbmcpICZjb250ZXh0LT52c3gs IDAsIDApOworICAgIGVsc2UKKyAgICAgIHB0cmFjZTMyIChQVFRfV1JJVEVf VlNYLCB0aWQsICh1aW50cHRyX3QpICZjb250ZXh0LT52c3gsIDAsIDApOwor ICB9CiAgIHJldHVybiAwOwogfQogCkBAIC0xMTcyLDYgKzEyMzUsMzYgQEAg YWl4X3RocmVhZF90YXJnZXQ6OndhaXQgKHB0aWRfdCBwdGlkLCBzdHJ1Y3Qg dGFyZ2V0X3dhaXRzdGF0dXMgKnN0YXR1cywKICAgcmV0dXJuIHBkX3VwZGF0 ZSAocHRpZC5waWQgKCkpOwogfQogCisvKiBTdXBwbHkgQUlYIGFsdGl2ZWMg cmVnaXN0ZXJzLCBib3RoIDY0IGFuZCAzMiBiaXQuICAqLworCitzdGF0aWMg dm9pZCAKK3N1cHBseV9hbHRpdmVjX3JlZ3MgKHN0cnVjdCByZWdjYWNoZSAq cmVnY2FjaGUsIF9fdm14X2NvbnRleHRfdCB2bXgpCit7IAorICBwcGNfZ2Ri YXJjaF90ZGVwICp0ZGVwCisgICAgPSBnZGJhcmNoX3RkZXA8cHBjX2dkYmFy Y2hfdGRlcD4gKHJlZ2NhY2hlLT5hcmNoICgpKTsKKyAgaW50IHJlZ25vOyAK KyAgaW50IG51bV9vZl92cnJlZ3MgPSB0ZGVwLT5wcGNfdnJzYXZlX3JlZ251 bSAtIHRkZXAtPnBwY192cjBfcmVnbnVtICsgMTsKKyAgZm9yIChyZWdubyA9 IDA7IHJlZ25vIDwgbnVtX29mX3ZycmVnczsgcmVnbm8rKykKKyAgICAgcmVn Y2FjaGUtPnJhd19zdXBwbHkgKHRkZXAtPnBwY192cjBfcmVnbnVtICsgcmVn bm8sIAorCQkJICAgJih2bXguX192cltyZWdub10pKTsKKyAgcmVnY2FjaGUt PnJhd19zdXBwbHkgKHRkZXAtPnBwY192cnNhdmVfcmVnbnVtLCAmKHZteC5f X3Zyc2F2ZSkpOworICByZWdjYWNoZS0+cmF3X3N1cHBseSAodGRlcC0+cHBj X3Zyc2F2ZV9yZWdudW0gLSAxLCAmKHZteC5fX3ZzY3IpKTsKK30KKworLyog U3VwcGx5IEFJWCBWU1ggcmVnaXN0ZXJzLCBib3RoIDY0IGFuZCAzMiBiaXQu ICAqLworCitzdGF0aWMgdm9pZAorc3VwcGx5X3ZzeF9yZWdzIChzdHJ1Y3Qg cmVnY2FjaGUgKnJlZ2NhY2hlLCBfX3ZzeF9jb250ZXh0X3QgdnN4KQorewor ICBwcGNfZ2RiYXJjaF90ZGVwICp0ZGVwCisgICAgPSBnZGJhcmNoX3RkZXA8 cHBjX2dkYmFyY2hfdGRlcD4gKHJlZ2NhY2hlLT5hcmNoICgpKTsKKyAgaW50 IHJlZ25vOworCisgIGZvciAocmVnbm8gPSAwOyByZWdubyA8IHBwY19udW1f dnNocnM7IHJlZ25vKyspCisgICAgIHJlZ2NhY2hlLT5yYXdfc3VwcGx5ICh0 ZGVwLT5wcGNfdnNyMF91cHBlcl9yZWdudW0gKyByZWdubywgCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAmKHZzeC5fX3Zzcl9kdzFbcmVnbm9dKSk7 Cit9CisKIC8qIFJlY29yZCB0aGF0IHRoZSA2NC1iaXQgZ2VuZXJhbC1wdXJw b3NlIHJlZ2lzdGVycyBjb250YWluIFZBTFMuICAqLwogCiBzdGF0aWMgdm9p ZApAQCAtMTMyMSw2ICsxNDE0LDEyIEBAIGZldGNoX3JlZ3NfdXNlcl90aHJl YWQgKHN0cnVjdCByZWdjYWNoZSAqcmVnY2FjaGUsIHB0aGRiX3B0aHJlYWRf dCBwZHRpZCkKICAgZWxzZQogICAgIHN1cHBseV9zcHJzMzIgKHJlZ2NhY2hl LCBjdHguaWFyLCBjdHgubXNyLCBjdHguY3IsIGN0eC5sciwgY3R4LmN0ciwK IAkJCSAgICAgY3R4LnhlciwgY3R4LmZwc2NyKTsKKworICAvKiBBbHRpdmVj IHJlZ2lzdGVycy4gICovCisgIHN1cHBseV9hbHRpdmVjX3JlZ3MgKHJlZ2Nh Y2hlLCBjdHgudm14KTsKKworICAvKiBWU1ggcmVnaXN0ZXJzLiAgKi8KKyAg c3VwcGx5X3ZzeF9yZWdzIChyZWdjYWNoZSwgY3R4LnZzeCk7CiB9CiAKIC8q IEZldGNoIHJlZ2lzdGVyIFJFR05PIGlmICE9IC0xIG9yIGFsbCByZWdpc3Rl cnMgb3RoZXJ3aXNlIGZyb20KQEAgLTEzODAsNiArMTQ3OSwzOSBAQCBmZXRj aF9yZWdzX2tlcm5lbF90aHJlYWQgKHN0cnVjdCByZWdjYWNoZSAqcmVnY2Fj aGUsIGludCByZWdubywKIAl9CiAgICAgfQogCisgIC8qIHZlY3RvciByZWdp c3RlcnMuICAqLworICBpZiAodGRlcC0+cHBjX3ZyMF9yZWdudW0gIT0gLTEp CisgICAgeworICAgICAgaW50IHJldCA9IDA7CisgICAgICBpbnQgbnVtX29m X3ZycmVncyA9IHRkZXAtPnBwY192cnNhdmVfcmVnbnVtIC0gdGRlcC0+cHBj X3ZyMF9yZWdudW0gKyAxOworICAgICAgX192bXhfY29udGV4dF90IHZteDsK KyAgICAgIGlmIChkYXRhLT5hcmNoNjQpCisJcmV0ID0gcHRyYWNlNjRhaXgg KFBUVF9SRUFEX1ZFQywgdGlkLCAobG9uZyBsb25nKSAmdm14LCAwLCAwKTsK KyAgICAgIGVsc2UKKwlyZXQgPSBwdHJhY2UzMiAoUFRUX1JFQURfVkVDLCB0 aWQsICh1aW50cHRyX3QpICZ2bXgsIDAsIDApOworICAgICAgaWYgKHJldCA8 IDApCisJbWVtc2V0KCZ2bXgsIDAsIHNpemVvZihfX3ZteF9jb250ZXh0X3Qp KTsKKyAgICAgIGZvciAoaSA9IDA7IGkgPCBudW1fb2ZfdnJyZWdzOyBpKysp CisJcmVnY2FjaGUtPnJhd19zdXBwbHkgKHRkZXAtPnBwY192cjBfcmVnbnVt ICsgaSwgJih2bXguX192cltpXSkpOworICAgICAgcmVnY2FjaGUtPnJhd19z dXBwbHkgKHRkZXAtPnBwY192cnNhdmVfcmVnbnVtLCAmKHZteC5fX3Zyc2F2 ZSkpOworICAgICAgcmVnY2FjaGUtPnJhd19zdXBwbHkgKHRkZXAtPnBwY192 cnNhdmVfcmVnbnVtIC0gMSwgJih2bXguX192c2NyKSk7CisgICAgfQorCisg IC8qIHZzeCByZWdpc3RlcnMuICAqLworICBpZiAodGRlcC0+cHBjX3ZzcjBf dXBwZXJfcmVnbnVtICE9IC0xKQorICAgIHsKKyAgICAgIF9fdnN4X2NvbnRl eHRfdCB2c3g7CisgICAgICBpbnQgcmV0ID0gMDsKKyAgICAgIGlmIChkYXRh LT5hcmNoNjQpCisJcmV0ID0gcHRyYWNlNjRhaXggKFBUVF9SRUFEX1ZTWCwg dGlkLCAobG9uZyBsb25nKSAmdnN4LCAwLCAwKTsKKyAgICAgIGVsc2UKKwly ZXQgPSBwdHJhY2UzMiAoUFRUX1JFQURfVlNYLCB0aWQsIChsb25nIGxvbmcp ICZ2c3gsIDAsIDApOworICAgICAgaWYgKHJldCA8IDApCisgICAgICAgIG1l bXNldCgmdnN4LCAwLCBzaXplb2YoX192c3hfY29udGV4dF90KSk7CisgICAg ICBmb3IgKGkgPSAwOyBpIDwgcHBjX251bV92c2hyczsgaSsrKQorICAgICAg ICByZWdjYWNoZS0+cmF3X3N1cHBseSAodGRlcC0+cHBjX3ZzcjBfdXBwZXJf cmVnbnVtICsgaSwgJih2c3guX192c3JfZHcxW2ldKSk7CisgICAgfQorCiAg IC8qIEZsb2F0aW5nLXBvaW50IHJlZ2lzdGVycy4gICovCiAKICAgaWYgKHBw Y19mbG9hdGluZ19wb2ludF91bml0X3AgKGdkYmFyY2gpCkBAIC0xNDQ3LDYg KzE1NzksNDMgQEAgYWl4X3RocmVhZF90YXJnZXQ6OmZldGNoX3JlZ2lzdGVy cyAoc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwgaW50IHJlZ25vKQogICAg IH0KIH0KIAorLyogRmlsbCBhbHRpdmVjIHJlZ2lzdGVycy4gICovCisKK3N0 YXRpYyB2b2lkCitmaWxsX2FsdGl2ZWMgKGNvbnN0IHN0cnVjdCByZWdjYWNo ZSAqcmVnY2FjaGUsIF9fdm14X2NvbnRleHRfdCAqdm14KQoreworICBzdHJ1 Y3QgZ2RiYXJjaCAqZ2RiYXJjaCA9IHJlZ2NhY2hlLT5hcmNoICgpOworICBw cGNfZ2RiYXJjaF90ZGVwICp0ZGVwID0gZ2RiYXJjaF90ZGVwPHBwY19nZGJh cmNoX3RkZXA+IChnZGJhcmNoKTsKKyAgaW50IG51bV9vZl92cnJlZ3MgPSB0 ZGVwLT5wcGNfdnJzYXZlX3JlZ251bSAtIHRkZXAtPnBwY192cjBfcmVnbnVt ICsgMTsKKyAgaW50IHJlZ25vOworCisgIGZvciAocmVnbm8gPSAwOyByZWdu byA8IG51bV9vZl92cnJlZ3M7IHJlZ25vKyspCisgICAgaWYgKFJFR19WQUxJ RCA9PSByZWdjYWNoZS0+Z2V0X3JlZ2lzdGVyX3N0YXR1cyAodGRlcC0+cHBj X3ZyMF9yZWdudW0gKyByZWdubykpCisgICAgICByZWdjYWNoZS0+cmF3X2Nv bGxlY3QgKHRkZXAtPnBwY192cjBfcmVnbnVtICsgcmVnbm8sCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAmKHZteC0+X192cltyZWdub10p KTsKKworICBpZiAoUkVHX1ZBTElEID09IHJlZ2NhY2hlLT5nZXRfcmVnaXN0 ZXJfc3RhdHVzICh0ZGVwLT5wcGNfdnJzYXZlX3JlZ251bSkpCisgIHsgCisg ICAgcmVnY2FjaGUtPnJhd19jb2xsZWN0ICh0ZGVwLT5wcGNfdnJzYXZlX3Jl Z251bSwgJih2bXgtPl9fdnJzYXZlKSk7CisgICAgcmVnY2FjaGUtPnJhd19j b2xsZWN0ICh0ZGVwLT5wcGNfdnJzYXZlX3JlZ251bSAtIDEsICYodm14LT5f X3ZzY3IpKTsKKyAgfQorfQorCisvKiBGaWxsIHZzeCByZWdpc3RlcnMuICov CisKK3N0YXRpYyB2b2lkCitmaWxsX3ZzeCAoY29uc3Qgc3RydWN0IHJlZ2Nh Y2hlICpyZWdjYWNoZSwgX192c3hfY29udGV4dF90ICAqdnN4KQoreworICBz dHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCA9IHJlZ2NhY2hlLT5hcmNoICgpOwor ICBwcGNfZ2RiYXJjaF90ZGVwICp0ZGVwID0gZ2RiYXJjaF90ZGVwPHBwY19n ZGJhcmNoX3RkZXA+IChnZGJhcmNoKTsKKyAgaW50IHJlZ25vOworCisgIGZv ciAocmVnbm8gPSAwOyByZWdubyA8IHBwY19udW1fdnNocnM7IHJlZ25vKysp CisgICAgaWYgKFJFR19WQUxJRCA9PSByZWdjYWNoZS0+Z2V0X3JlZ2lzdGVy X3N0YXR1cyAoIHRkZXAtPnBwY192c3IwX3VwcGVyX3JlZ251bSArIHJlZ25v KSkKKyAgICAgIHJlZ2NhY2hlLT5yYXdfY29sbGVjdCAodGRlcC0+cHBjX3Zz cjBfdXBwZXJfcmVnbnVtICsgcmVnbm8sCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICYodnN4LT5fX3Zzcl9kdzFbMF0pICsgcmVnbm8p OworfQorCiAvKiBTdG9yZSB0aGUgZ3AgcmVnaXN0ZXJzIGludG8gYW4gYXJy YXkgb2YgdWludDMyX3Qgb3IgdWludDY0X3QuICAqLwogCiBzdGF0aWMgdm9p ZApAQCAtMTU4Miw2ICsxNzUxLDEwIEBAIHN0b3JlX3JlZ3NfdXNlcl90aHJl YWQgKGNvbnN0IHN0cnVjdCByZWdjYWNoZSAqcmVnY2FjaGUsIHB0aGRiX3B0 aHJlYWRfdCBwZHRpZCkKICAgdWludDY0X3QgaW50NjQ7CiAgIHN0cnVjdCBh aXhfdGhyZWFkX3ZhcmlhYmxlcyAqZGF0YTsKICAgZGF0YSA9IGdldF90aHJl YWRfZGF0YV9oZWxwZXJfZm9yX3B0aWQgKGluZmVyaW9yX3B0aWQpOworICBp bnQgcmV0OworICBfX3ZteF9jb250ZXh0X3Qgdm14OworICBfX3ZzeF9jb250 ZXh0X3QgIHZzeDsKKyAgaW50IG51bV9vZl92cnJlZ3MgPSB0ZGVwLT5wcGNf dnJzYXZlX3JlZ251bSAtIHRkZXAtPnBwY192cjBfcmVnbnVtICsgMTsKIAog ICBpZiAoZGVidWdfYWl4X3RocmVhZCkKICAgICBnZGJfcHJpbnRmIChnZGJf c3RkbG9nLCAKQEAgLTE1OTQsNiArMTc2Nyw0NSBAQCBzdG9yZV9yZWdzX3Vz ZXJfdGhyZWFkIChjb25zdCBzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLCBw dGhkYl9wdGhyZWFkX3QgcGR0aWQpCiAgICAgZXJyb3IgKF8oImFpeC10aHJl YWQ6IHN0b3JlX3JlZ2lzdGVyczogcHRoZGJfcHRocmVhZF9jb250ZXh0IHJl dHVybmVkICVzIiksCiAJICAgcGRfc3RhdHVzMnN0ciAoc3RhdHVzKSk7CiAK KyAgLyogRmlsbCBhbHRpdmVjLXJlZ2lzdGVycy4gICovCisKKyAgaWYgKF9f cG93ZXJfdm14KCkpCisgIHsKKyAgICBtZW1zZXQoJnZteCwgMCwgc2l6ZW9m KF9fdm14X2NvbnRleHRfdCkpOworICAgIGlmIChkYXRhLT5hcmNoNjQpCisg ICAgeworICAgICAgZm9yIChpID0gMDsgaSA8IG51bV9vZl92cnJlZ3M7IGkr KykKKwlpZiAoUkVHX1ZBTElEID09IHJlZ2NhY2hlLT5nZXRfcmVnaXN0ZXJf c3RhdHVzICh0ZGVwLT5wcGNfdnIwX3JlZ251bSArIGkpKQorCSAgeworCSAg ICByZWdjYWNoZS0+cmF3X2NvbGxlY3QgKHRkZXAtPnBwY192cjBfcmVnbnVt ICsgaSwKKwkJCQkgICAmKHZteC5fX3ZyW2ldKSk7IAorCSAgICBjdHgudm14 Ll9fdnJbaV0gPSB2bXguX192cltpXTsgCisJICB9CisgICAgICBpZiAoUkVH X1ZBTElEID09IHJlZ2NhY2hlLT5nZXRfcmVnaXN0ZXJfc3RhdHVzICh0ZGVw LT5wcGNfdnJzYXZlX3JlZ251bSkpCisgICAgICB7CisJY3R4LnZteC5fX3Zy c2F2ZSA9IHZteC5fX3Zyc2F2ZTsKKwljdHgudm14Ll9fdnNjciA9IHZteC5f X3ZzY3I7CisgICAgICB9CisgICAgfQorICB9CisKKyAgLyogRmlsbCB2c3gg cmVnaXN0ZXJzLiAqLworCisgIGlmIChfX3Bvd2VyX3ZzeCgpKQorICB7Cisg ICAgbWVtc2V0KCZ2c3gsIDAsIHNpemVvZihfX3ZzeF9jb250ZXh0X3QpKTsK KyAgICBpZiAoZGF0YS0+YXJjaDY0KQorICAgIHsKKyAgICAgIGZvciAoaSA9 IDA7IGkgPCBwcGNfbnVtX3ZzaHJzOyBpKyspCisJIGlmIChSRUdfVkFMSUQg PT0gcmVnY2FjaGUtPmdldF9yZWdpc3Rlcl9zdGF0dXMgKHRkZXAtPnBwY192 c3IwX3JlZ251bSArIGkpKQorCSB7CisJICAgcmVnY2FjaGUtPnJhd19jb2xs ZWN0ICh0ZGVwLT5wcGNfdnIwX3JlZ251bSArIGksCisJCQkJICAgICAgJih2 c3guX192c3JfZHcxW2ldKSk7ICAKKwkgICBjdHgudnN4Ll9fdnNyX2R3MVtp XSA9IHZzeC5fX3Zzcl9kdzFbaV07CisJIH0gCisgICAgfQorICB9CisKICAg LyogQ29sbGVjdCBnZW5lcmFsLXB1cnBvc2UgcmVnaXN0ZXIgdmFsdWVzIGZy b20gdGhlIHJlZ2NhY2hlLiAgKi8KIAogICBmb3IgKGkgPSAwOyBpIDwgcHBj X251bV9ncHJzOyBpKyspCkBAIC0xNjc0LDYgKzE4ODYsNyBAQCBzdG9yZV9y ZWdzX2tlcm5lbF90aHJlYWQgKGNvbnN0IHN0cnVjdCByZWdjYWNoZSAqcmVn Y2FjaGUsIGludCByZWdubywKICAgc3RydWN0IHB0eHNwcnMgc3ByczY0Owog ICBzdHJ1Y3QgcHRzcHJzICBzcHJzMzI7CiAgIHN0cnVjdCBhaXhfdGhyZWFk X3ZhcmlhYmxlcyAqZGF0YTsKKyAgaW50IHJldCA9IDA7CiAKICAgZGF0YSA9 IGdldF90aHJlYWRfZGF0YV9oZWxwZXJfZm9yX3B0aWQgKHJlZ2NhY2hlLT5w dGlkICgpKTsKIApAQCAtMTc2Niw2ICsxOTc5LDU2IEBAIHN0b3JlX3JlZ3Nf a2VybmVsX3RocmVhZCAoY29uc3Qgc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNo ZSwgaW50IHJlZ25vLAogCSAgcHRyYWNlMzIgKFBUVF9XUklURV9TUFJTLCB0 aWQsICh1aW50cHRyX3QpICZzcHJzMzIsIDAsIE5VTEwpOwogCX0KICAgICB9 CisgICAgCisgICAgLyogVmVjdG9yIHJlZ2lzdGVycy4gICovCisgICAgaWYg KHRkZXAtPnBwY192cjBfcmVnbnVtICE9IC0xICYmIHRkZXAtPnBwY192cnNh dmVfcmVnbnVtICE9IC0xCisJJiYgKHJlZ25vID09IC0xIHx8IChyZWdubyA+ PSB0ZGVwLT5wcGNfdnIwX3JlZ251bQorCSYmIHJlZ25vIDw9IHRkZXAtPnBw Y192cnNhdmVfcmVnbnVtKSkpCisgICAgeworICAgICAgX192bXhfY29udGV4 dF90IHZteDsKKyAgICAgIGlmIChfX3Bvd2VyX3ZteCgpKQorICAgICAgewor CWlmIChkYXRhLT5hcmNoNjQpCisJICByZXQgPSBwdHJhY2U2NGFpeCAoUFRU X1JFQURfVkVDLCB0aWQsIChsb25nIGxvbmcpICZ2bXgsIDAsIDApOworCWVs c2UKKwkgIHJldCA9IHB0cmFjZTMyIChQVFRfUkVBRF9WRUMsIHRpZCwgKGxv bmcgbG9uZykgJnZteCwgMCwgMCk7CisgICAgICAgIGlmIChyZXQgPiAwKQor ICAgICAgICB7CisJICBmaWxsX2FsdGl2ZWMocmVnY2FjaGUsICZ2bXgpOwor CSAgaWYgKGRhdGEtPmFyY2g2NCkKKwkgICAgcmV0ID0gcHRyYWNlNjRhaXgg KFBUVF9XUklURV9WRUMsIHRpZCwgKGxvbmcgbG9uZykgJnZteCwgMCwgMCk7 CisJICBlbHNlCisJICAgIHJldCA9IHB0cmFjZTMyIChQVFRfV1JJVEVfVkVD LCB0aWQsIChsb25nIGxvbmcpICZ2bXgsIDAsIDApOworCSAgaWYgKHJldCA8 IDApCisJICAgIHBlcnJvcl93aXRoX25hbWUgKF8oIlVuYWJsZSB0byBzdG9y ZSBBbHRpVmVjIHJlZ2lzdGVyIGFmdGVyIHJlYWQiKSk7CisJfQorICAgICAg fQorICAgIH0KKworICAgIC8qIHZteCByZWdpc3RlcnMuICAqLworICAgIGlm ICh0ZGVwLT5wcGNfdnNyMF91cHBlcl9yZWdudW0gIT0gLTEgICYmIHRkZXAt PnBwY192cnNhdmVfcmVnbnVtICE9IC0xCisJJiYgKHJlZ25vID09IC0xIHx8 IChyZWdubyA+PSB0ZGVwLT5wcGNfdnNyMF91cHBlcl9yZWdudW0KKwkmJiBy ZWdubyA8PSB0ZGVwLT5wcGNfdnJzYXZlX3JlZ251bSkpKSAKKyAgICB7Cisg ICAgICBfX3ZzeF9jb250ZXh0X3QgdnN4OworICAgICAgaWYgKF9fcG93ZXJf dnN4KCkpCisgICAgICB7CisJaWYgKGRhdGEtPmFyY2g2NCkKKwkgIHJldCA9 ICBwdHJhY2U2NGFpeCAoUFRUX1JFQURfVlNYLCB0aWQsIChsb25nIGxvbmcp ICZ2c3gsIDAsIDApOworCWVsc2UKKwkgIHJldCA9ICBwdHJhY2UzMiAoUFRU X1JFQURfVlNYLCB0aWQsIChsb25nIGxvbmcpICZ2c3gsIDAsIDApOworCWlm IChyZXQgPiAwKQorCXsKKwkgIGZpbGxfdnN4IChyZWdjYWNoZSwgJnZzeCk7 CisJICBpZiAoZGF0YS0+YXJjaDY0KQorCSAgICByZXQgPSBwdHJhY2U2NGFp eCAoUFRUX1dSSVRFX1ZTWCwgdGlkLCAobG9uZyBsb25nKSAmdnN4LCAwLCAw KTsKKwkgIGVsc2UKKwkgICAgcmV0ID0gcHRyYWNlMzIgKFBUVF9XUklURV9W U1gsIHRpZCwgKGxvbmcgbG9uZykgJnZzeCwgMCwgMCk7CisJICBpZiAocmV0 IDwgMCkKKwkgICAgcGVycm9yX3dpdGhfbmFtZSAoXygiVW5hYmxlIHRvIHN0 b3JlIFZTWCByZWdpc3RlciBhZnRlciByZWFkIikpOworCX0KKyAgICAgIH0K KyAgICB9IAogfQogCiAvKiBTdG9yZSBnZGIncyBjdXJyZW50IHZpZXcgb2Yg dGhlIHJlZ2lzdGVyIHNldCBpbnRvIHRoZQpkaWZmIC0tZ2l0IGEvZ2RiL3Jz NjAwMC1haXgtbmF0LmMgYi9nZGIvcnM2MDAwLWFpeC1uYXQuYwppbmRleCA4 YzlkYzFhNmU2OC4uZjhkZTZmMGNmNjAgMTAwNjQ0Ci0tLSBhL2dkYi9yczYw MDAtYWl4LW5hdC5jCisrKyBiL2dkYi9yczYwMDAtYWl4LW5hdC5jCkBAIC01 OCw2ICs1OCwxNCBAQAogI2luY2x1ZGUgPHByb2NpbmZvLmg+CiAjaW5jbHVk ZSA8c3lzL3R5cGVzLmg+CiAKKy8qIEhlYWRlciBmaWxlcyBmb3IgYWx0aS12 ZWMgcmVnLiAgKi8KKyNpbmNsdWRlIDxzeXMvY29udGV4dC5oPgorCisjaW5j bHVkZSAiZmVhdHVyZXMvcnM2MDAwL3Bvd2VycGMtdnN4NjQuYyIKKyNpbmNs dWRlICJmZWF0dXJlcy9yczYwMDAvcG93ZXJwYy12c3gzMi5jIgorI2luY2x1 ZGUgImZlYXR1cmVzL3JzNjAwMC9wb3dlcnBjLWFsdGl2ZWMzMi5jIgorI2lu Y2x1ZGUgImZlYXR1cmVzL3JzNjAwMC9wb3dlcnBjLWFsdGl2ZWM2NC5jIgor CiAvKiBPbiBBSVg0LjMrLCBzeXMvbGRyLmggcHJvdmlkZXMgZGlmZmVyZW50 IHZlcnNpb25zIG9mIHN0cnVjdCBsZF9pbmZvIGZvcgogICAgZGVidWdnaW5n IDMyLWJpdCBhbmQgNjQtYml0IHByb2Nlc3Nlcy4gIERlZmluZSBhIHR5cGVk ZWYgYW5kIG1hY3JvcyBmb3IKICAgIGFjY2Vzc2luZyBmaWVsZHMgaW4gdGhl IGFwcHJvcHJpYXRlIHN0cnVjdHVyZXMuICAqLwpAQCAtOTksNiArMTA3LDgg QEAgY2xhc3MgcnM2MDAwX25hdF90YXJnZXQgZmluYWwgOiBwdWJsaWMgaW5m X3B0cmFjZV90YXJnZXQKICAgICAgc3VwcG9ydC4gICovCiAgIHZvaWQgZm9s bG93X2ZvcmsgKGluZmVyaW9yICosIHB0aWRfdCwgdGFyZ2V0X3dhaXRraW5k LCBib29sLCBib29sKSBvdmVycmlkZTsKIAorICBjb25zdCBzdHJ1Y3QgdGFy Z2V0X2Rlc2MgKnJlYWRfZGVzY3JpcHRpb24gKCkgIG92ZXJyaWRlOworCiBw cm90ZWN0ZWQ6CiAKICAgdm9pZCBwb3N0X3N0YXJ0dXBfaW5mZXJpb3IgKHB0 aWRfdCBwdGlkKSBvdmVycmlkZTsKQEAgLTI3Miw2ICsyODIsMTY2IEBAIHJz NjAwMF9wdHJhY2U2NCAoaW50IHJlcSwgaW50IGlkLCBsb25nIGxvbmcgYWRk ciwgaW50IGRhdGEsIHZvaWQgKmJ1ZikKICAgcmV0dXJuIHJldDsKIH0KIAor LyogU3RvcmUgdGhlIHZzeCByZWdpc3RlcnMuICAqLworCitzdGF0aWMgdm9p ZAorc3RvcmVfdnN4X3JlZ2lzdGVyX2FpeCAoc3RydWN0IHJlZ2NhY2hlICpy ZWdjYWNoZSwgaW50IHJlZ25vKQoreworICBpbnQgcmV0OworICBzdHJ1Y3Qg Z2RiYXJjaCAqZ2RiYXJjaCA9IHJlZ2NhY2hlLT5hcmNoICgpOworICBwcGNf Z2RiYXJjaF90ZGVwICp0ZGVwID0gZ2RiYXJjaF90ZGVwPHBwY19nZGJhcmNo X3RkZXA+IChnZGJhcmNoKTsKKyAgc3RydWN0IHRocmRlbnRyeTY0IHRocmRl bnRyeTsKKyAgX192c3hfY29udGV4dF90IHZzeDsKKyAgcGlkX3QgcGlkID0g aW5mZXJpb3JfcHRpZC5waWQgKCk7CisgIHRpZDY0X3QgdGhyZF9pID0gMDsK KworICBpZiAoZ2V0dGhyZHM2NChwaWQsICZ0aHJkZW50cnksIHNpemVvZihz dHJ1Y3QgdGhyZGVudHJ5NjQpLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICZ0aHJkX2ksIDEpID09IDEpCisgICAgdGhy ZF9pID0gdGhyZGVudHJ5LnRpX3RpZDsKKworICBtZW1zZXQoJnZzeCwgMCwg c2l6ZW9mKF9fdnN4X2NvbnRleHRfdCkpOworICBpZiAoX19wb3dlcl92c3go KSAmJiB0aHJkX2kgPiAwKQorICB7CisgICAgaWYgKEFSQ0g2NCAoKSkKKyAg ICAgIHJldCA9IHJzNjAwMF9wdHJhY2U2NCAoUFRUX1JFQURfVlNYLCB0aHJk X2ksIChsb25nIGxvbmcpICZ2c3gsIDAsIDApOworICAgIGVsc2UKKyAgICAg IHJldCA9IHJzNjAwMF9wdHJhY2UzMiAoUFRUX1JFQURfVlNYLCB0aHJkX2ks IChpbnQgKikmdnN4LCAwLCAwKTsKKyAgICBpZiAocmV0IDwgMCkKKyAgICAg IHJldHVybjsKKworICAgIHJlZ2NhY2hlLT5yYXdfY29sbGVjdCAocmVnbm8s ICYodnN4Ll9fdnNyX2R3MVswXSkrCisgICAgICAgICAgICAgICAgICAgICAg ICAgICByZWdubyAtIHRkZXAtPnBwY192c3IwX3VwcGVyX3JlZ251bSk7CisK KyAgICBpZiAoQVJDSDY0ICgpKQorICAgICAgcmV0ID0gcnM2MDAwX3B0cmFj ZTY0IChQVFRfV1JJVEVfVlNYLCB0aHJkX2ksIChsb25nIGxvbmcpICZ2c3gs IDAsIDApOworICAgIGVsc2UKKyAgICAgIHJldCA9IHJzNjAwMF9wdHJhY2Uz MiAoUFRUX1dSSVRFX1ZTWCwgdGhyZF9pLCAoaW50ICopICZ2c3gsIDAsIDAp OworCisgICAgaWYgKHJldCA8IDApCisgICAgICBwZXJyb3Jfd2l0aF9uYW1l IChfKCJVbmFibGUgdG8gd3JpdGUgVlNYIHJlZ2lzdGVycyBhZnRlciByZWFk aW5nIGl0IikpOworICB9Cit9CisKKy8qIFN0b3JlIEFsdGl2ZWMgcmVnaXN0 ZXJzLiAgKi8KKworc3RhdGljIHZvaWQKK3N0b3JlX2FsdGl2ZWNfcmVnaXN0 ZXJfYWl4IChzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLCBpbnQgcmVnbm8p Cit7CisgIGludCByZXQ7CisgIHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoID0g cmVnY2FjaGUtPmFyY2ggKCk7CisgIHBwY19nZGJhcmNoX3RkZXAgKnRkZXAg PSBnZGJhcmNoX3RkZXA8cHBjX2dkYmFyY2hfdGRlcD4gKGdkYmFyY2gpOwor ICBzdHJ1Y3QgdGhyZGVudHJ5NjQgdGhyZGVudHJ5OworICBfX3ZteF9jb250 ZXh0X3Qgdm14OworICBwaWRfdCBwaWQgPSBpbmZlcmlvcl9wdGlkLnBpZCAo KTsKKyAgdGlkNjRfdCAgdGhyZF9pID0gMDsKKworICBpZiAoZ2V0dGhyZHM2 NChwaWQsICZ0aHJkZW50cnksIHNpemVvZihzdHJ1Y3QgdGhyZGVudHJ5NjQp LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAmdGhyZF9pLCAxKSA9PSAxKQorICAgIHRocmRfaSA9IHRocmRlbnRyeS50 aV90aWQ7CisKKyAgbWVtc2V0KCZ2bXgsIDAsIHNpemVvZihfX3ZteF9jb250 ZXh0X3QpKTsKKyAgaWYgKF9fcG93ZXJfdm14KCkgJiYgdGhyZF9pID4gMCkK KyAgeworICAgIGlmIChBUkNINjQgKCkpCisgICAgICByZXQgPSByczYwMDBf cHRyYWNlNjQgKFBUVF9SRUFEX1ZFQywgdGhyZF9pLCAobG9uZyBsb25nKSAm dm14LCAwLCAwKTsKKyAgICBlbHNlCisgICAgICByZXQgPSByczYwMDBfcHRy YWNlMzIgKFBUVF9SRUFEX1ZFQywgdGhyZF9pLCAoaW50ICopICZ2bXgsIDAs IDApOworICAgIGlmIChyZXQgPCAwKQorICAgICAgcmV0dXJuOworCisgICAg cmVnY2FjaGUtPnJhd19jb2xsZWN0IChyZWdubywgJih2bXguX192clswXSkg KyByZWdubworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0g dGRlcC0+cHBjX3ZyMF9yZWdudW0pOworCisgICAgaWYgKEFSQ0g2NCAoKSkK KyAgICAgIHJldCA9IHJzNjAwMF9wdHJhY2U2NCAoUFRUX1dSSVRFX1ZFQywg dGhyZF9pLCAobG9uZyBsb25nKSAmdm14LCAwLCAwKTsKKyAgICBlbHNlCisg ICAgICByZXQgPSByczYwMDBfcHRyYWNlMzIgKFBUVF9XUklURV9WRUMsIHRo cmRfaSwgKGludCAqKSAmdm14LCAwLCAwKTsKKyAgICBpZiAocmV0IDwgMCkK KyAgICAgIHBlcnJvcl93aXRoX25hbWUgKF8oIlVuYWJsZSB0byBzdG9yZSBB bHRpVmVjIHJlZ2lzdGVyIGFmdGVyIHJlYWRpbmcgaXQiKSk7CisgIH0KKwor fQorCisvKiBTdXBwbHkgYWx0aXZlYyByZWdpc3RlcnMuICAqLworCitzdGF0 aWMgdm9pZAorc3VwcGx5X3ZycmVnc2V0X2FpeCAoc3RydWN0IHJlZ2NhY2hl ICpyZWdjYWNoZSwgX192bXhfY29udGV4dF90ICp2bXgpCit7CisgIGludCBp OworICBzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCA9IHJlZ2NhY2hlLT5hcmNo ICgpOworICBwcGNfZ2RiYXJjaF90ZGVwICp0ZGVwID0gZ2RiYXJjaF90ZGVw PHBwY19nZGJhcmNoX3RkZXA+IChnZGJhcmNoKTsKKyAgaW50IG51bV9vZl92 cnJlZ3MgPSB0ZGVwLT5wcGNfdnJzYXZlX3JlZ251bSAtIHRkZXAtPnBwY192 cjBfcmVnbnVtICsgMTsKKworICBmb3IgKGkgPSAwOyBpIDwgbnVtX29mX3Zy cmVnczsgaSsrKQorICAgIHJlZ2NhY2hlLT5yYXdfc3VwcGx5ICh0ZGVwLT5w cGNfdnIwX3JlZ251bSArIGksCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAmKHZteC0+X192cltpXSkpOworICByZWdjYWNoZS0+cmF3 X3N1cHBseSAodGRlcC0+cHBjX3Zyc2F2ZV9yZWdudW0sICYodm14LT5fX3Zy c2F2ZSkpOworICByZWdjYWNoZS0+cmF3X3N1cHBseSAodGRlcC0+cHBjX3Zy c2F2ZV9yZWdudW0gLSAxLCAmKHZteC0+X192c2NyKSk7Cit9CisKKy8qIEZl dGNoIGFsdGl2ZWMgcmVnaXN0ZXIuICAqLworCitzdGF0aWMgdm9pZAorZmV0 Y2hfYWx0aXZlY19yZWdpc3RlcnNfYWl4IChzdHJ1Y3QgcmVnY2FjaGUgKnJl Z2NhY2hlKQoreworICBzdHJ1Y3QgdGhyZGVudHJ5NjQgdGhyZGVudHJ5Owor ICBfX3ZteF9jb250ZXh0X3Qgdm14OworICBwaWRfdCBwaWQgPSBjdXJyZW50 X2luZmVyaW9yICgpLT5waWQ7CisgIHRpZDY0X3QgIHRocmRfaSA9IDA7CisK KyAgaWYgKGdldHRocmRzNjQocGlkLCAmdGhyZGVudHJ5LCBzaXplb2Yoc3Ry dWN0IHRocmRlbnRyeTY0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAmdGhyZF9pLCAxKSA9PSAxKQorICAgIHRocmRfaSA9IHRocmRlbnRy eS50aV90aWQ7CisKKyAgbWVtc2V0KCZ2bXgsIDAsIHNpemVvZihfX3ZteF9j b250ZXh0X3QpKTsKKyAgaWYgKF9fcG93ZXJfdm14KCkgJiYgdGhyZF9pID4g MCkKKyAgeworICAgIGlmIChBUkNINjQgKCkpCisgICAgICByczYwMDBfcHRy YWNlNjQgKFBUVF9SRUFEX1ZFQywgdGhyZF9pLCAobG9uZyBsb25nKSAmdm14 LCAwLCAwKTsKKyAgICBlbHNlCisgICAgICByczYwMDBfcHRyYWNlMzIgKFBU VF9SRUFEX1ZFQywgdGhyZF9pLCAoaW50ICopICZ2bXgsIDAsIDApOworICAg IHN1cHBseV92cnJlZ3NldF9haXggKHJlZ2NhY2hlLCAmdm14KTsKKyAgfQor fQorCisvKiBzdXBwbHkgdnN4IHJlZ2lzdGVyLiAgKi8KKworc3RhdGljIHZv aWQKK3N1cHBseV92c3hyZWdzZXRfYWl4IChzdHJ1Y3QgcmVnY2FjaGUgKnJl Z2NhY2hlLCBfX3ZzeF9jb250ZXh0X3QgKnZzeCkKK3sKKyAgaW50IGk7Cisg IHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoID0gcmVnY2FjaGUtPmFyY2ggKCk7 CisgIHBwY19nZGJhcmNoX3RkZXAgKnRkZXAgPSBnZGJhcmNoX3RkZXA8cHBj X2dkYmFyY2hfdGRlcD4gKGdkYmFyY2gpOworCisgIGZvciAoaSA9IDA7IGkg PCBwcGNfbnVtX3ZzaHJzOyBpKyspCisgICByZWdjYWNoZS0+cmF3X3N1cHBs eSAodGRlcC0+cHBjX3ZzcjBfdXBwZXJfcmVnbnVtICsgaSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJih2c3gtPl9fdnNyX2R3MVtp XSkpOworfQorCisvKiBGZXRjaCB2c3ggcmVnaXN0ZXJzLiAgKi8KK3N0YXRp YyB2b2lkCitmZXRjaF92c3hfcmVnaXN0ZXJzX2FpeCAoc3RydWN0IHJlZ2Nh Y2hlICpyZWdjYWNoZSkKK3sKKyAgc3RydWN0IHRocmRlbnRyeTY0IHRocmRl bnRyeTsKKyAgX192c3hfY29udGV4dF90IHZzeDsKKyAgcGlkX3QgcGlkID0g Y3VycmVudF9pbmZlcmlvciAoKS0+cGlkOworICB0aWQ2NF90ICB0aHJkX2kg PSAwOworCisgIGlmIChnZXR0aHJkczY0KHBpZCwgJnRocmRlbnRyeSwgc2l6 ZW9mKHN0cnVjdCB0aHJkZW50cnk2NCksCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICZ0aHJkX2ksIDEpID09IDEpCisg ICAgdGhyZF9pID0gdGhyZGVudHJ5LnRpX3RpZDsKKworICBtZW1zZXQoJnZz eCwgMCwgc2l6ZW9mKF9fdnN4X2NvbnRleHRfdCkpOworICBpZiAoX19wb3dl cl92c3goKSAmJiB0aHJkX2kgPiAwKQorICB7CisgICAgaWYgKEFSQ0g2NCAo KSkKKyAgICAgIHJzNjAwMF9wdHJhY2U2NCAoUFRUX1JFQURfVlNYLCB0aHJk X2ksIChsb25nIGxvbmcpICZ2c3gsIDAsIDApOworICAgIGVsc2UKKyAgICAg IHJzNjAwMF9wdHJhY2UzMiAoUFRUX1JFQURfVlNYLCB0aHJkX2ksIChpbnQg KikgJnZzeCwgMCwgMCk7CisgICAgc3VwcGx5X3ZzeHJlZ3NldF9haXggKHJl Z2NhY2hlLCAmdnN4KTsKKyAgfQorfQorCiB2b2lkIHJzNjAwMF9uYXRfdGFy Z2V0Ojpwb3N0X3N0YXJ0dXBfaW5mZXJpb3IgKHB0aWRfdCBwdGlkKQogewog CkBAIC0zMjYsNiArNDk2LDIwIEBAIGZldGNoX3JlZ2lzdGVyIChzdHJ1Y3Qg cmVnY2FjaGUgKnJlZ2NhY2hlLCBpbnQgcmVnbm8pCiAgIC8qIFJldHJpZXZl ZCB2YWx1ZXMgbWF5IGJlIC0xLCBzbyBpbmZlciBlcnJvcnMgZnJvbSBlcnJu by4gICovCiAgIGVycm5vID0gMDsKIAorICAvKkFsdGktdmVjIHJlZ2lzdGVy LiAgKi8KKyAgaWYgKGFsdGl2ZWNfcmVnaXN0ZXJfcCAoZ2RiYXJjaCwgcmVn bm8pKQorICB7CisgICAgZmV0Y2hfYWx0aXZlY19yZWdpc3RlcnNfYWl4IChy ZWdjYWNoZSk7CisgICAgcmV0dXJuOworICB9CisKKyAgLypWU1ggcmVnaXN0 ZXIuICAqLworICBpZiAodnN4X3JlZ2lzdGVyX3AgKGdkYmFyY2gsIHJlZ25v KSkKKyAgeworICAgIGZldGNoX3ZzeF9yZWdpc3RlcnNfYWl4IChyZWdjYWNo ZSk7CisgICAgcmV0dXJuOworICB9CisKICAgbnIgPSByZWdtYXAgKGdkYmFy Y2gsIHJlZ25vLCAmaXNmbG9hdCk7CiAKICAgLyogRmxvYXRpbmctcG9pbnQg cmVnaXN0ZXJzLiAgKi8KQEAgLTM4OCw2ICs1NzIsMTggQEAgc3RvcmVfcmVn aXN0ZXIgKHN0cnVjdCByZWdjYWNoZSAqcmVnY2FjaGUsIGludCByZWdubykK ICAgLyogLTEgY2FuIGJlIGEgc3VjY2Vzc2Z1bCByZXR1cm4gdmFsdWUsIHNv IGluZmVyIGVycm9ycyBmcm9tIGVycm5vLiAgKi8KICAgZXJybm8gPSAwOwog CisgIGlmIChhbHRpdmVjX3JlZ2lzdGVyX3AgKGdkYmFyY2gsIHJlZ25vKSkK KyAgeworICAgIHN0b3JlX2FsdGl2ZWNfcmVnaXN0ZXJfYWl4IChyZWdjYWNo ZSwgcmVnbm8pOworICAgIHJldHVybjsKKyAgfQorCisgIGlmICh2c3hfcmVn aXN0ZXJfcCAoZ2RiYXJjaCwgcmVnbm8pKQorICB7CisgICAgc3RvcmVfdnN4 X3JlZ2lzdGVyX2FpeCAocmVnY2FjaGUsIHJlZ25vKTsKKyAgICByZXR1cm47 CisgIH0KKwogICBuciA9IHJlZ21hcCAoZ2RiYXJjaCwgcmVnbm8sICZpc2Zs b2F0KTsKIAogICAvKiBGbG9hdGluZy1wb2ludCByZWdpc3RlcnMuICAqLwpA QCAtNDU4LDYgKzY1NCwxMiBAQCByczYwMDBfbmF0X3RhcmdldDo6ZmV0Y2hf cmVnaXN0ZXJzIChzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLCBpbnQgcmVn bm8pCiAJZm9yIChyZWdubyA9IDA7IHJlZ25vIDwgcHBjX251bV9mcHJzOyBy ZWdubysrKQogCSAgZmV0Y2hfcmVnaXN0ZXIgKHJlZ2NhY2hlLCB0ZGVwLT5w cGNfZnAwX3JlZ251bSArIHJlZ25vKTsKIAorICAgICAgaWYgKHRkZXAtPnBw Y192cjBfcmVnbnVtICE9IC0xICYmIHRkZXAtPnBwY192cnNhdmVfcmVnbnVt ICE9IC0xKSAKKyAgICAgICAgZmV0Y2hfYWx0aXZlY19yZWdpc3RlcnNfYWl4 IChyZWdjYWNoZSk7CisKKyAgICAgIGlmICh0ZGVwLT5wcGNfdnNyMF91cHBl cl9yZWdudW0gIT0gLTEpCisgICAgICAgIGZldGNoX3ZzeF9yZWdpc3RlcnNf YWl4IChyZWdjYWNoZSk7CisKICAgICAgIC8qIFJlYWQgc3BlY2lhbCByZWdp c3RlcnMuICAqLwogICAgICAgZmV0Y2hfcmVnaXN0ZXIgKHJlZ2NhY2hlLCBn ZGJhcmNoX3BjX3JlZ251bSAoZ2RiYXJjaCkpOwogICAgICAgZmV0Y2hfcmVn aXN0ZXIgKHJlZ2NhY2hlLCB0ZGVwLT5wcGNfcHNfcmVnbnVtKTsKQEAgLTQ3 Miw2ICs2NzQsMjYgQEAgcnM2MDAwX25hdF90YXJnZXQ6OmZldGNoX3JlZ2lz dGVycyAoc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwgaW50IHJlZ25vKQog ICAgIH0KIH0KIAorY29uc3Qgc3RydWN0IHRhcmdldF9kZXNjICoKK3JzNjAw MF9uYXRfdGFyZ2V0OjpyZWFkX2Rlc2NyaXB0aW9uICgpCit7CisgICBpZiAo QVJDSDY0KCkpCisgICB7CisgICAgIGlmIChfX3Bvd2VyX3ZzeCAoKSkKKyAg ICAgICByZXR1cm4gdGRlc2NfcG93ZXJwY192c3g2NDsKKyAgICAgZWxzZSBp ZiAoX19wb3dlcl92bXggKCkpCisgICAgICAgcmV0dXJuIHRkZXNjX3Bvd2Vy cGNfYWx0aXZlYzY0OworICAgfQorICAgZWxzZQorICAgeworICAgICBpZiAo X19wb3dlcl92c3ggKCkpCisgICAgICAgcmV0dXJuIHRkZXNjX3Bvd2VycGNf dnN4MzI7CisgICAgIGVsc2UgaWYgKF9fcG93ZXJfdm14ICgpKQorICAgICAg IHJldHVybiB0ZGVzY19wb3dlcnBjX2FsdGl2ZWMzMjsKKyAgIH0KKyAgIHJl dHVybiBOVUxMOworfQorCiAvKiBTdG9yZSBvdXIgcmVnaXN0ZXIgdmFsdWVz IGJhY2sgaW50byB0aGUgaW5mZXJpb3IuCiAgICBJZiBSRUdOTyBpcyAtMSwg ZG8gdGhpcyBmb3IgYWxsIHJlZ2lzdGVycy4KICAgIE90aGVyd2lzZSwgUkVH Tk8gc3BlY2lmaWVzIHdoaWNoIHJlZ2lzdGVyIChzbyB3ZSBjYW4gc2F2ZSB0 aW1lKS4gICovCmRpZmYgLS1naXQgYS9nZGIvcnM2MDAwLWFpeC10ZGVwLmMg Yi9nZGIvcnM2MDAwLWFpeC10ZGVwLmMKaW5kZXggMTU2MDJjODBiMDAuLjc4 ZDE2ZjJhMjE3IDEwMDY0NAotLS0gYS9nZGIvcnM2MDAwLWFpeC10ZGVwLmMK KysrIGIvZ2RiL3JzNjAwMC1haXgtdGRlcC5jCkBAIC02OCw2ICs2OCwxNzgg QEAKIC8qIE1pbmltdW0gcG9zc2libGUgdGV4dCBhZGRyZXNzIGluIEFJWC4g ICovCiAjZGVmaW5lIEFJWF9URVhUX1NFR01FTlRfQkFTRSAweDEwMDAwMDAw CiAKK3N0cnVjdCByczYwMDBfYWl4X3JlZ192cnJlZ19vZmZzZXQKK3sKKyAg aW50IHZyMF9vZmZzZXQ7CisgIGludCB2c2NyX29mZnNldDsKKyAgaW50IHZy c2F2ZV9vZmZzZXQ7Cit9OworCitzdGF0aWMgc3RydWN0IHJzNjAwMF9haXhf cmVnX3ZycmVnX29mZnNldCByczYwMDBfYWl4X3ZycmVnX29mZnNldCA9Cit7 CisgICAvKiBBbHRpVmVjIHJlZ2lzdGVycy4gICovCisgIDMyLCAvKiB2cjBf b2Zmc2V0ICovCisgIDU0NCwgLyogdnNjcl9vZmZzZXQuICovCisgIDU2MCAv KiB2cnNhdmVfb2Zmc2V0ICovCit9OworCitzdGF0aWMgaW50CityczYwMDBf YWl4X2dldF92cnJlZ19vZmZzZXQgKHBwY19nZGJhcmNoX3RkZXAgKnRkZXAs CisgIGNvbnN0IHN0cnVjdCByczYwMDBfYWl4X3JlZ192cnJlZ19vZmZzZXQg Km9mZnNldHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGludCByZWdudW0pCit7CisgIGlmIChyZWdudW0gPj0gdGRlcC0+ cHBjX3ZyMF9yZWdudW0gJiYKKyAgcmVnbnVtIDwgdGRlcC0+cHBjX3ZyMF9y ZWdudW0gKyBwcGNfbnVtX3ZycykKKyAgICByZXR1cm4gb2Zmc2V0cy0+dnIw X29mZnNldCArIChyZWdudW0gLSB0ZGVwLT5wcGNfdnIwX3JlZ251bSkgKiAx NjsKKworICBpZiAocmVnbnVtID09IHRkZXAtPnBwY192cnNhdmVfcmVnbnVt IC0gMSkKKyAgICByZXR1cm4gb2Zmc2V0cy0+dnNjcl9vZmZzZXQ7CisKKyAg aWYgKHJlZ251bSA9PSB0ZGVwLT5wcGNfdnJzYXZlX3JlZ251bSkKKyAgICBy ZXR1cm4gb2Zmc2V0cy0+dnJzYXZlX29mZnNldDsKKworICByZXR1cm4gLTE7 Cit9CisKK3N0YXRpYyB2b2lkCityczYwMDBfYWl4X3N1cHBseV92cnJlZ3Nl dCAoY29uc3Qgc3RydWN0IHJlZ3NldCAqcmVnc2V0LCBzdHJ1Y3QgcmVnY2Fj aGUgKnJlZ2NhY2hlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGludCByZWdudW0sIGNvbnN0IHZvaWQgKnZycmVncywgc2l6 ZV90IGxlbikKK3sKKyAgc3RydWN0IGdkYmFyY2ggKmdkYmFyY2ggPSByZWdj YWNoZS0+YXJjaCAoKTsKKyAgY29uc3Qgc3RydWN0IHJzNjAwMF9haXhfcmVn X3ZycmVnX29mZnNldCAgKm9mZnNldHM7CisgIHNpemVfdCBvZmZzZXQ7Cisg IHBwY19nZGJhcmNoX3RkZXAgKnRkZXAgPSBnZGJhcmNoX3RkZXA8cHBjX2dk YmFyY2hfdGRlcD4gKGdkYmFyY2gpOworICBpZiAoISh0ZGVwLT5wcGNfdnIw X3JlZ251bSA+PSAwICAmJiB0ZGVwLT5wcGNfdnJzYXZlX3JlZ251bSA+PSAw KSkKKyAgICByZXR1cm47CisKKyAgb2Zmc2V0cyA9IChjb25zdCBzdHJ1Y3Qg cnM2MDAwX2FpeF9yZWdfdnJyZWdfb2Zmc2V0ICopIHJlZ3NldC0+cmVnbWFw OworICBpZiAocmVnbnVtID09IC0xKQorICB7CisgICAgaW50IGk7CisKKyAg ICBmb3IgKGkgPSB0ZGVwLT5wcGNfdnIwX3JlZ251bSwgb2Zmc2V0ID0gb2Zm c2V0cy0+dnIwX29mZnNldDsKKyAgICAgICAgICAgICAgICAgICAgICAgICBp IDwgdGRlcC0+cHBjX3ZyMF9yZWdudW0gKyBwcGNfbnVtX3ZyczsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpKyss IG9mZnNldCArPSAxNikKKyAgICAgICAgcHBjX3N1cHBseV9yZWcgKHJlZ2Nh Y2hlLCBpLCAoY29uc3QgZ2RiX2J5dGUgKikgdnJyZWdzLCBvZmZzZXQsIDE2 KTsKKworICAgIHBwY19zdXBwbHlfcmVnIChyZWdjYWNoZSwgKHRkZXAtPnBw Y192cnNhdmVfcmVnbnVtIC0gMSksCisgICAgICAgIChjb25zdCBnZGJfYnl0 ZSAqKSB2cnJlZ3MsIG9mZnNldHMtPnZzY3Jfb2Zmc2V0LCA0KTsKKworICAg IHBwY19zdXBwbHlfcmVnIChyZWdjYWNoZSwgdGRlcC0+cHBjX3Zyc2F2ZV9y ZWdudW0sCisgICAgKGNvbnN0IGdkYl9ieXRlICopIHZycmVncywgb2Zmc2V0 cy0+dnJzYXZlX29mZnNldCwgNCk7CisKKyAgICByZXR1cm47CisgIH0KKyAg b2Zmc2V0ID0gcnM2MDAwX2FpeF9nZXRfdnJyZWdfb2Zmc2V0ICh0ZGVwLCBv ZmZzZXRzLCByZWdudW0pOworICBpZiAocmVnbnVtICE9IHRkZXAtPnBwY192 cnNhdmVfcmVnbnVtICYmCisgICAgICByZWdudW0gIT0gdGRlcC0+cHBjX3Zy c2F2ZV9yZWdudW0gLSAxKQorICAgIHBwY19zdXBwbHlfcmVnIChyZWdjYWNo ZSwgcmVnbnVtLCAoY29uc3QgZ2RiX2J5dGUgKikgdnJyZWdzLCBvZmZzZXQs IDE2KTsKKyAgZWxzZQorICAgIHBwY19zdXBwbHlfcmVnIChyZWdjYWNoZSwg cmVnbnVtLAorICAgICAoY29uc3QgZ2RiX2J5dGUgKikgdnJyZWdzLCBvZmZz ZXQsIDQpOworCit9CisKK3N0YXRpYyB2b2lkCityczYwMDBfYWl4X3N1cHBs eV92c3hyZWdzZXQgKGNvbnN0IHN0cnVjdCByZWdzZXQgKnJlZ3NldCwgc3Ry dWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpbnQgcmVnbnVtLCBjb25zdCB2b2lkICp2 c3hyZWdzLCBzaXplX3QgbGVuKQoreworICBzdHJ1Y3QgZ2RiYXJjaCAqZ2Ri YXJjaCA9IHJlZ2NhY2hlLT5hcmNoICgpOworICBwcGNfZ2RiYXJjaF90ZGVw ICp0ZGVwID0gZ2RiYXJjaF90ZGVwPHBwY19nZGJhcmNoX3RkZXA+IChnZGJh cmNoKTsKKyAgaWYgKCEodGRlcC0+cHBjX3ZzcjBfcmVnbnVtID49IDApKQor ICAgIHJldHVybjsKKworICBpZiAocmVnbnVtID09IC0xKQorICB7CisgICAg aW50IGksIG9mZnNldCA9IDA7CisKKyAgICBmb3IgKGkgPSB0ZGVwLT5wcGNf dnNyMF91cHBlcl9yZWdudW07IGkgPCB0ZGVwLT5wcGNfdnNyMF91cHBlcl9y ZWdudW0gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICArIDMyOyBpKyssIG9mZnNldCArPSA4KQorICAgICAg cHBjX3N1cHBseV9yZWcgKHJlZ2NhY2hlLCBpLCAoY29uc3QgZ2RiX2J5dGUg KikgdnN4cmVncywgb2Zmc2V0LCA4KTsKKworICAgIHJldHVybjsKKyAgfQor ICBlbHNlCisgICAgcHBjX3N1cHBseV9yZWcgKHJlZ2NhY2hlLCByZWdudW0s IChjb25zdCBnZGJfYnl0ZSAqKSB2c3hyZWdzLCAwLCA4KTsKK30KKworc3Rh dGljIHZvaWQKK3JzNjAwMF9haXhfY29sbGVjdF92c3hyZWdzZXQgKGNvbnN0 IHN0cnVjdCByZWdzZXQgKnJlZ3NldCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3Qgc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwKKyAgICAg ICAgICAgICAgICAgICAgaW50IHJlZ251bSwgdm9pZCAqdnN4cmVncywgc2l6 ZV90IGxlbikKK3sKKyAgc3RydWN0IGdkYmFyY2ggKmdkYmFyY2ggPSByZWdj YWNoZS0+YXJjaCAoKTsKKyAgcHBjX2dkYmFyY2hfdGRlcCAqdGRlcCA9IGdk YmFyY2hfdGRlcDxwcGNfZ2RiYXJjaF90ZGVwPiAoZ2RiYXJjaCk7CisgIGlm ICghKHRkZXAtPnBwY192c3IwX3JlZ251bSA+PSAwKSkKKyAgICByZXR1cm47 CisKKyAgaWYgKHJlZ251bSA9PSAtMSkKKyAgeworICAgIGludCBpOworICAg IGludCBvZmZzZXQgPSAwOworICAgIGZvciAoaSA9IHRkZXAtPnBwY192c3Iw X3VwcGVyX3JlZ251bTsgaSA8IHRkZXAtPnBwY192c3IwX3VwcGVyX3JlZ251 bQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICArIDMyOyBpKyssIG9mZnNldCArPSA4KQorICAgICAgcHBjX2Nv bGxlY3RfcmVnIChyZWdjYWNoZSwgaSwgKGdkYl9ieXRlICopIHZzeHJlZ3Ms IG9mZnNldCwgOCk7CisKKyAgICByZXR1cm47CisgIH0KKworIGVsc2UKKyAg ICBwcGNfY29sbGVjdF9yZWcgKHJlZ2NhY2hlLCByZWdudW0sIChnZGJfYnl0 ZSAqKSB2c3hyZWdzLCAwLCA4KTsKK30KKworc3RhdGljIHZvaWQKK3JzNjAw MF9haXhfY29sbGVjdF92cnJlZ3NldCAoY29uc3Qgc3RydWN0IHJlZ3NldCAq cmVnc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVj dCByZWdjYWNoZSAqcmVnY2FjaGUsCisgICAgICAgICAgICAgICAgICAgIGlu dCByZWdudW0sIHZvaWQgKnZycmVncywgc2l6ZV90IGxlbikKK3sKKyAgc3Ry dWN0IGdkYmFyY2ggKmdkYmFyY2ggPSByZWdjYWNoZS0+YXJjaCAoKTsKKyAg Y29uc3Qgc3RydWN0IHJzNjAwMF9haXhfcmVnX3ZycmVnX29mZnNldCAqb2Zm c2V0czsKKyAgc2l6ZV90IG9mZnNldDsKKworICBwcGNfZ2RiYXJjaF90ZGVw ICp0ZGVwID0gZ2RiYXJjaF90ZGVwPHBwY19nZGJhcmNoX3RkZXA+IChnZGJh cmNoKTsKKyAgaWYgKCEodGRlcC0+cHBjX3ZyMF9yZWdudW0gPj0gMCAmJiB0 ZGVwLT5wcGNfdnJzYXZlX3JlZ251bSA+PSAwKSkKKyAgICByZXR1cm47CisK KyAgb2Zmc2V0cyA9IChjb25zdCBzdHJ1Y3QgcnM2MDAwX2FpeF9yZWdfdnJy ZWdfb2Zmc2V0ICopIHJlZ3NldC0+cmVnbWFwOworICBpZiAocmVnbnVtID09 IC0xKQorICB7CisgICAgaW50IGk7CisKKyAgICBmb3IgKGkgPSB0ZGVwLT5w cGNfdnIwX3JlZ251bSwgb2Zmc2V0ID0gb2Zmc2V0cy0+dnIwX29mZnNldDsg aSA8CisgICAgICAgICAgICAgIHRkZXAtPnBwY192cjBfcmVnbnVtICsgcHBj X251bV92cnM7IGkrKywgb2Zmc2V0ICs9IDE2KQorICAgICAgcHBjX2NvbGxl Y3RfcmVnIChyZWdjYWNoZSwgaSwgKGdkYl9ieXRlICopIHZycmVncywgb2Zm c2V0LCAxNik7CisKKyAgICBwcGNfY29sbGVjdF9yZWcgKHJlZ2NhY2hlLCAo dGRlcC0+cHBjX3Zyc2F2ZV9yZWdudW0gLSAxKSwKKyAgICAgICAgICAgICAg IChnZGJfYnl0ZSAqKSB2cnJlZ3MsIG9mZnNldHMtPnZzY3Jfb2Zmc2V0LCA0 KTsKKworICAgIHBwY19jb2xsZWN0X3JlZyAocmVnY2FjaGUsIHRkZXAtPnBw Y192cnNhdmVfcmVnbnVtLAorICAgICAgICAgICAgIChnZGJfYnl0ZSAqKSB2 cnJlZ3MsIG9mZnNldHMtPnZyc2F2ZV9vZmZzZXQsIDQpOworCisgICAgcmV0 dXJuOworICB9CisKKyAgb2Zmc2V0ID0gcnM2MDAwX2FpeF9nZXRfdnJyZWdf b2Zmc2V0ICh0ZGVwLCBvZmZzZXRzLCByZWdudW0pOworICBpZiAocmVnbnVt ICE9IHRkZXAtPnBwY192cnNhdmVfcmVnbnVtCisgICAgICAmJiByZWdudW0g IT0gdGRlcC0+cHBjX3Zyc2F2ZV9yZWdudW0gLSAxKQorICAgIHBwY19jb2xs ZWN0X3JlZyAocmVnY2FjaGUsIHJlZ251bSwgKGdkYl9ieXRlICopIHZycmVn cywgb2Zmc2V0LCAxNik7CisgIGVsc2UKKyAgICBwcGNfY29sbGVjdF9yZWcg KHJlZ2NhY2hlLCByZWdudW0sCisgICAgICAgICAgICAgICAgICAgKGdkYl9i eXRlICopIHZycmVncywgb2Zmc2V0LCA0KTsKK30KKworc3RhdGljIGNvbnN0 IHN0cnVjdCByZWdzZXQgcnM2MDAwX2FpeF92cnJlZ3NldCA9IHsKKyAgJnJz NjAwMF9haXhfdnJyZWdfb2Zmc2V0LAorICByczYwMDBfYWl4X3N1cHBseV92 cnJlZ3NldCwKKyAgcnM2MDAwX2FpeF9jb2xsZWN0X3ZycmVnc2V0Cit9Owor CitzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ3NldCByczYwMDBfYWl4X3ZzeHJl Z3NldCA9IHsKKyAgJnJzNjAwMF9haXhfdnJyZWdfb2Zmc2V0LAorICByczYw MDBfYWl4X3N1cHBseV92c3hyZWdzZXQsCisgIHJzNjAwMF9haXhfY29sbGVj dF92c3hyZWdzZXQKK307CisKIHN0YXRpYyBzdHJ1Y3QgdHJhZF9mcmFtZV9j YWNoZSAqCiBhaXhfc2lnaGFuZGxlX2ZyYW1lX2NhY2hlIChmcmFtZV9pbmZv X3B0ciB0aGlzX2ZyYW1lLAogCQkJICAgdm9pZCAqKnRoaXNfY2FjaGUpCkBA IC0yNjIsMTAgKzQzNCwyMCBAQCByczYwMDBfYWl4X2l0ZXJhdGVfb3Zlcl9y ZWdzZXRfc2VjdGlvbnMgKHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoLAogCQkJ CQkgY29uc3Qgc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSkKIHsKICAgcHBj X2dkYmFyY2hfdGRlcCAqdGRlcCA9IGdkYmFyY2hfdGRlcDxwcGNfZ2RiYXJj aF90ZGVwPiAoZ2RiYXJjaCk7CisgIGludCBoYXZlX2FsdGl2ZWMgPSB0ZGVw LT5wcGNfdnIwX3JlZ251bSAhPSAtMTsKKyAgaW50IGhhdmVfdnN4ID0gdGRl cC0+cHBjX3ZzcjBfdXBwZXJfcmVnbnVtICE9IC0xOworCiAgIGlmICh0ZGVw LT53b3Jkc2l6ZSA9PSA0KQogICAgIGNiICgiLnJlZyIsIDU5MiwgNTkyLCAm cnM2MDAwX2FpeDMyX3JlZ3NldCwgTlVMTCwgY2JfZGF0YSk7CiAgIGVsc2UK ICAgICBjYiAoIi5yZWciLCA1NzYsIDU3NiwgJnJzNjAwMF9haXg2NF9yZWdz ZXQsIE5VTEwsIGNiX2RhdGEpOworCisgIGlmIChoYXZlX2FsdGl2ZWMpCisg ICBjYiAoIi5haXgtdm14IiwgNTYwLCA1NjAsICZyczYwMDBfYWl4X3ZycmVn c2V0LCAiQUlYIGFsdGl2ZWMiLCBjYl9kYXRhKTsKKworICBpZiAoaGF2ZV92 c3gpCisgICBjYiAoIi5haXgtdnN4IiwgMjU2LCAyNTYsICZyczYwMDBfYWl4 X3ZzeHJlZ3NldCwgIkFJWCB2c3giLCBjYl9kYXRhKTsgCisKIH0KIAogCi0t IAoyLjM4LjMKCg== --_004_CH2PR15MB3544CCE02934081D8C720585D6AD9CH2PR15MB3544namp_--